Ejercicios con Funciones

Iniciado por foreground, 23 Abril 2013, 22:12 PM

0 Miembros y 1 Visitante están viendo este tema.

foreground

Buenas noches a todos, el caso es que hemos empezado a dar funciones en clase (mi temario prácticamente es el de Informática de ingeniería industrial) y tengo muchísimas dudas.

Tengo dos enunciados que no se plantear los cuales son:

CitarEscribir un programa que lea tres números enteros y diga si están ordenados de menor a mayor o no. Usar una función que dados dos valores retorne true si el primero es mayor que el segundo y false en caso contrario

CitarSe tienen dos ficheros que contienen números enteros. Los ficheros son "entrada1.txt" "entrada2.txt". Se quiere obtener un fichero de salida que contenga la suma de los números que se encuentran en la misma fila. Si alguno de los ficheros se termina, se copia el resto del otro fichero
directamente.

Escribir dos funciones:
• Función que lee los dos ficheros de entrada y crea el fichero de salida.
• Esta función retorna 1 si todo el proceso ha sido correcto y 0 en caso contrario.
• Los nombres de los ficheros de entrada son: entrada1.txt y entrada2.txt.
• El nombre del fichero de salida es "salida.txt".
• Función que muestra por pantalla el fichero de salida.

Me gustaría saber si alguien sabe resolverlos y si alguien conoce un enlace que explique con algo más de detalle este tema así como el concepto de parámetros por referencia el cual tampoco entiendo muy bien.

Saludos y gracias de antemano

OmarHack

Aquí tienes una calculadora echa con funciones y comentado todo el proceso con comentarios. Te puede servir, y si no entiendes algo coméntalo. http://foro.elhacker.net/programacion_cc/reto_para_los_que_estan_aprendiendo_c-t388743.0.html

Mira en esta página, lo tienes todo. http://c.conclase.net/ Si no entiendes mucho de funciones dale al curso C++ y tienes todo muy bien explicado.
Si quieres un resumen de como se usa una función es muy sencillo. Primero haces el prototipo (lo que viene siendo una declaración de una variable a la que le pones parámetros entre paréntesis)
Después de cerrar el main declaras la función. Y en el main la llamas.
Un ejemplo sencillo para que entiendas:
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;


int funcionSuma(int,int);
int resultado = 0;
int sumando = 0;
int segundoSumando = 0;

int main()
{
     cout << "introduzca el primer sumando" << endl;
   cin >> sumando;
   cout << "introduzca el segundo sumando"<< endl;
   cin >> segundoSumando;
cout << "El resultado es: " << resultado << endl;
funcionSuma(sumando,segundoSumando);
cout << "El resultado es: " << resultado << endl;
getchar();
getchar();
return 0;
}

int funcionSuma(int sumando,int segundoSumando)
{
 
resultado = sumando + segundoSumando;

return resultado;
}


Compila y ejecuta el programa y verás como antes de que se llame a la función el resultado es 0 y después de llamarla es la suma de los números.
Fíjate en el prototipo de la función arriba de todo junto a la declaración de variables. En el prototipo se declara el tipo de función. En este caso "int" porque devolverá un numero entero, es decir, el resultado. Se le pone que tipo de parámetros va a tener. En este caso 2 int al lado de la función"(int,int)".
El siguiente paso es ir abajo del main y hacer la declaración. Igual que en main. Ahí es donde tienes que poner lo que va a hacer la función y lo que va a devolver. Ahora ya está, solo te falta llamar a la función en el main cuando la necesites de la manera que te pongo en el código.
Espero que te sirva, un saludo.
I like to test things.

85

parámetro por referencia, permite la modificación del valor del parámetro.

Código (cpp) [Seleccionar]
void func(int& arg){// Parámetro por referencia

arg=5;
}

int main(){

int var=0;

// var vale 0

func(var);

// var vale 5


return 0;
}


Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

OmarHack

¿No es mejor usar un puntero de parámetro? Así puedes controlar la memoria y a la vez cambiar el valor.
I like to test things.

rir3760

Cita de: foreground en 23 Abril 2013, 22:12 PMMe gustaría saber si alguien sabe resolverlos
Supongo que si pero la política de los foros es no hacer tareas. En su lugar publica los avances que llevas del programa mas las dudas que tengas y alguien te ayudara a terminarlo.

También debes publicar toda la información que ayude a ayudarte, por ejemplo el lenguaje de programación, compilador y sistema operativo que utilizan en clase.

----

Cita de: OmarHack en 24 Abril 2013, 11:49 AM¿No es mejor usar un puntero de parámetro? Así puedes controlar la memoria y a la vez cambiar el valor.
Depende del lenguaje.

En C no hay otra forma de emular el paso por referencia.
En C++ no es necesario, en su lugar se utiliza una referencia, ello se explica en el mensaje de 85.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

foreground

Lo sé rir3760 pero es que no tenia ni idea de verdad, bueno muchas gracias por las respuestas al final propuse estas dos soluciones ya que en verdad el único que tenia miga era el 2.

Ej 1

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define T 1
#define F 0

int comprobar (int x, int y)
{
    if(y>x)
    return T;
    else
    return F;
}

int main()
{
    int na,nb,nc;
    printf("Introduzca tres valores: ");
    scanf("%d%d%d", &na,&nb,&nc);
   
    if((na<nb) && (nb<c))
    printf("Ordenados de menor a mayor\n");
    else
    printf("Ordenados de mayor a menor\n");
   
    system("PAUSE");
    return 0;
}



Ej 2

Código (cpp) [Seleccionar]
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int leer()
{
    FILE *f1,*f2,*f3;
    int a,b,suma=0;
   
    f1=fopen("entrada1.txt","r");
     if(f1==NULL){
      printf("Error con el fichero entrada 1 \n");
      system ("PAUSE");
      return 0;
      }
    f2=fopen("entrada2.txt","r");
     if(f2==NULL){
      fclose(f1);
      printf("Error con el fichero 2 \n");
      system ("PAUSE");
      return 0;
      }
    f3=fopen("salida.txt","w");
     if(f3==NULL){
      fclose(f1);
      fclose(f2);
      printf("Error con el fichero 3 \n");
      system ("PAUSE");
      return 0;
      }
   
    while ((fscanf(f1,"%d",&a)!=EOF) && (fscanf(f2,"%d",&b)!=EOF))
    {
    suma=a+b;
    fprintf(f3,"%d\n ",suma);
    }
    while((fscanf(f1,"%d",&a))!=EOF)
    fprintf(f3,"%d\n ",a);
    while((fscanf(f2,"%d",&b))!=EOF)
    fprintf(f3,"%d\n ",b);

     
    fclose(f1);
    fclose(f2);
    fclose(f3);
    return 1;
}
void mostrar()
{
     int a;
     FILE *f3;
     
     f3=fopen("salida.txt","r");
      if(f3==NULL){
       printf("Error con el fichero 3 \n");
       system("PAUSE");
       }
     
     while(fscanf(f3,"%d",&a)!=EOF){
      printf("Sumando... \n");
      sleep(1000);
      printf("%d \n",a);
      }
   
    fclose(f3);
    system("PAUSE");                                     
}
int main ()
{
    leer();
    mostrar();
    return 0;
   
}


Si hay algún error o quieren puntualizar en algo por favor estaré agradecido a sus respuestas. Buenas noches a todos

rir3760

Un problema con el primer programa es que no utilizas la función "comprueba". En ella utilizas el condicional:
if (y > x)
   return T; /* T == 1 */
else
   return F; /* F == 0 */

Ya que los operadores relacionales resultan en uno si se cumple la condición y cero en caso contrario esa parte la puedes reducir a (tenias mal el orden de las variables):
return x > y;

El programa con todos los cambios necesarios:
#include <stdio.h>
#include <stdlib.h>

int mayor(int x, int y);

int main(void)
{
   int a;
   int b;
   int c;
   
   puts("Introduce tres valores:");
   if (scanf("%d %d %d", &a,&b,&c) != 3)
      return EXIT_FAILURE;

   if (!mayor(a, b) && !mayor(b, c))
      puts("Ordenados de menor a mayor");
   else
      puts("No estan ordenados de menor a mayor");

   return EXIT_SUCCESS;
}

int mayor(int x, int y)
{
   return x > y;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language