Autor
|
Tema: Ejercicios con Funciones (Leído 2,225 veces)
|
foreground
Desconectado
Mensajes: 11
|
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: Escribir 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 Se 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
|
|
|
En línea
|
|
|
|
OmarHack
Desconectado
Mensajes: 1.268
|
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.htmlMira 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: #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.
|
|
|
En línea
|
I like to test things.
|
|
|
85
|
parámetro por referencia, permite la modificación del valor del parámetro. 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; }
|
|
|
En línea
|
|
|
|
OmarHack
Desconectado
Mensajes: 1.268
|
¿No es mejor usar un puntero de parámetro? Así puedes controlar la memoria y a la vez cambiar el valor.
|
|
|
En línea
|
I like to test things.
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Me 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. ---- ¿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
|
|
|
En línea
|
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
Desconectado
Mensajes: 11
|
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 #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 #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
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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
|
|
|
En línea
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Pantallazos de ejercicios ejercicios 1 y 2
« 1 2 3 »
Ejercicios
|
soplo
|
25
|
97,734
|
21 Marzo 2011, 21:15 pm
por hackvj
|
|
|
Ejercicios en C
Ejercicios
|
soplo
|
0
|
64,839
|
2 Julio 2004, 00:28 am
por soplo
|
|
|
Ejercicios C++
Ejercicios
|
soplo
|
0
|
91,185
|
5 Julio 2004, 06:08 am
por soplo
|
|
|
[C] Problema con Struct en funciones que llaman a otras funciones
Programación C/C++
|
lipman
|
9
|
23,589
|
19 Mayo 2011, 23:39 pm
por Littlehorse
|
|
|
AYUDA EJERCICIOS FUNCIONES PHP
PHP
|
dlm91
|
5
|
3,361
|
11 Noviembre 2012, 17:09 pm
por lipman
|
|