| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
epunk
Registrado: 30 Abr 2014 Mensajes: 3
| Publicado: 30/04/2014 3:54 pm | | | Título: Error parametros y funciones |
| Hola, estoy iniciando mis estudios en programacion, y al tratar de compilar un proyecto me marca los siguientes errores al declarar los parametros dentro de la funcion int suma() [Error] use of parameter 'n' outside function body' [Error] expected ')' before ',' token [Error] expected unqualified-id before 'int'
obviamente el programa no esta terminado ya que me detuve al tener este error, ojala alguien pudiera ayudarme y orientarme respecto a que estoy haciendo mal, de antemano gracias. aqui el codigo:
/*Este programa realiza las 4 operaciones basicas entre 2 matrices*/ #include <stdio.h> #include <windows.h> int ingresar(); int resultado(); int suma(); int resta(); int multiplicacion(); int n, A[10][10], B[10][10], C[10][10];
int main() { int op; printf("Determine la dimension de las matrices: "); scanf("%d", &n); ingresar(); printf("-----Operaciones-----\n"); printf("1.Suma\n"); printf("2.Resta\n"); printf("3.Multiplicacion\n"); printf("4.Salir\n"); printf("---------------\n\n"); scanf("%d", &op); switch(op) { case 1: system("cls"); suma(); break; } resultado(); fflush(stdin); getchar(); return 0; }
int ingresar(int n) { int i, j; for(i=0;i<n;i++) for(j=0;j<n;j++) { printf("Ingrese el elemento A(%d,%d): ",i,j); scanf("%d",&A[i][j]); } system("pause"); system("cls"); for(i=0;i<n;i++) for(j=0;j<n;j++) { printf("Ingrese el elemento B(%d,%d): ",i,j); scanf("%d",&B[i][j]); } system("cls"); printf("Matriz A\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%d ",A[i][j]); printf("\n"); } printf("\nMatriz B\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%d ",B[i][j]); printf("\n"); } return(A[n][n], B[n][n]); }
int resultado(int n, int C[10][10]) { int i, j; for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%d ",C[i][j]); printf("\n"); } return 0; }
int suma(int n, int A[n][n], int B[n][n]) { int i, j; for(i=0; i<n; i++) { for(j=0; j<n; j++) { C[i][j] = A[i][j] + B[i][j]; } } return(C[n][n]); } |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7516 Ubicación: Mexico
| Publicado: 30/04/2014 5:23 pm | | | Título: |
| Hola
Bienvenido a los foros. Por favor lee sus reglas.
Si no tienes un curso o libro de calidad deberías conseguir uno, recomendaciones sobre ello en la sección "Cursos" de este sitio o bien mediante el motor de búsqueda de los foros.
----
Los errores mas importantes en el programa se deben a que las declaraciones, uso y definiciones de las funciones "ingresar", "resultado" y "suma" no coinciden:
| Código: | /* 1) Se indica que las funciones reciben un numero no definido de argumentos */ int ingresar(); int resultado(); int suma();
/* ... */
/* 2) Se llama a las funciones sin argumentos */ ingresar(); /* ... */ suma(); resultado();
/* 3) Se definen de otra forma */ int ingresar(int n) { /* ... */ }
int resultado(int n, int C[10][10]) { /* ... */ }
int suma(int n, int A[n][n], int B[n][n]) { /* ... */ } |
Ademas el valor de retorno de las funciones "ingresar" y "suma" no es valido, por ejemplo en el caso de la primera tenemos:
| Código: | return (A[n][n], B[n][n]); |
También debes evitar el uso de "fflush(stdin);" y (salvo una buena razón) system.
El programa con los cambios mencionados y algunos otros menores es:
| Código: | #include <stdio.h>
void ingresar(void); void resultado(void); void suma(void);
int n, A[10][10], B[10][10], C[10][10];
int main(void) { int op; printf("Determine la dimension de las matrices: "); scanf("%d", &n); ingresar(); printf("-----Operaciones-----\n"); printf("1.Suma\n"); printf("2.Resta\n"); printf("3.Multiplicacion\n"); printf("4.Salir\n"); printf("---------------\n\n"); scanf("%d", &op); switch(op) { case 1: suma(); break; } resultado(); return 0; }
void ingresar(void) { int i, j; for (i = 0; i < n; i++) for (j = 0; j < n; j++) { printf("Ingrese el elemento A(%d,%d): ", i, j); scanf("%d", &A[i][j]); } for (i = 0; i < n; i++) for (j = 0; j < n; j++) { printf("Ingrese el elemento B(%d,%d): ", i, j); scanf("%d", &B[i][j]); } printf("Matriz A\n"); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) printf("%d ", A[i][j]); printf("\n"); } printf("\nMatriz B\n"); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) printf("%d ", B[i][j]); printf("\n"); } }
void resultado(void) { int i, j; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) printf("%d ", C[i][j]); printf("\n"); } }
void suma(void) { int i, j; for (i = 0; i < n; i++) for (j = 0; j < n; j++) C[i][j] = A[i][j] + B[i][j]; } |
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 |
| | Volver arriba | |  | epunk
Registrado: 30 Abr 2014 Mensajes: 3
| Publicado: 01/05/2014 8:09 am | | | Título: |
| ok muchas gracias por responder y ayudarme, ya lo arregle como me dijiste y me funciono..solo una duda mas: el porque debo evitar utilizar el 'fflush(stdin)' y el 'system'?? |
| | Volver arriba | |  | | vangodp
Registrado: 25 Ene 2014 Mensajes: 30
| Publicado: 02/05/2014 1:19 am | | | Título: |
| fflush por que tiene comportamientos impredecibles con las cadenas de caracteres te puede dar muchos errores y dolor de cabeza. El system por razones de portabilidad yq que lo que hace es llamar a funciones especificas de un sistema operativo. Si por ejemplo programas en windows, el código no sera portable a linux ya que por ejemplo en windows limpiar la pantalla es system("cls") y en linux si no me equivoco es clean en ves de cls.
Pero hay trucos como:
#ifdef WIN32 // Si el programa es ejecutado sobre SO Windows. void limpiar() // Definir;Limpiar Pantalla". { system("cls"); } #else // Si el programa es ejecutado sobre SO Linux. void limpiar() { system("clear"); } #endif // limpiar();
Eso lo pegas en la cabecera del programa, si el código se compila en linux o windows hará lo correcto en cada sistema operativo si llamas a limpiar(); por que dependiendo si es windows se ejecuta cls y si es linux clean
Pero no es la única razón. Se aconseja usar solo librerías estándar por la portabilidad, por ejemplo para que te funcione esta funcion system() en windows necesitas la librería windows.h y esa librería no esta en linux. Intente hacer un código portable siempre así no necesitas hacer cambios en el código tanto si compilas en una como en otra  |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7516 Ubicación: Mexico
| Publicado: 02/05/2014 5:23 am | | | Título: |
| | epunk escribió: | | porque debo evitar utilizar el 'fflush(stdin)' y el 'system'? |
Debes evitar el uso de fflush(stdin) porque su comportamiento no esta garantizado, por ejemplo tiene el efecto deseado en MS-DOS con un compilador de Borland pero en Linux con gcc simplemente hace nada.
En el caso de system porque salvo casos excepcionales no es necesario su uso y si estas empezando con el lenguaje mejor enfocate en el y no en llamadas al interprete de comandos.
----
| vangodp escribió: | | fflush por que tiene comportamientos impredecibles con las cadenas de caracteres |
Por favor y en buen plan: si vas a responder asegúrate de que la información sea correcta, de no ser así tenemos el riesgo de confundir mas al estudiante.
fflush no funciona con cadenas de caracteres sino con el bufer de un stream de salida, uno de los problemas con fflush(stdin) es que stdin es un stream de entrada.
| vangodp escribió: | | Se aconseja usar solo librerías estándar por la portabilidad, por ejemplo para que te funcione esta funcion system() en windows necesitas la librería windows.h |
La función system es parte de la biblioteca estándar de C, para tener acceso a su prototipo basta con incluir <stdlib.h>. Incluir <windows.h> usualmente funciona porque ese encabezado a su vez incluye <stdlib.h>.
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 |
| | Volver arriba | |  | epunk
Registrado: 30 Abr 2014 Mensajes: 3
| Publicado: 02/05/2014 7:59 am | | | Título: |
| | okok muchas gracias por su ayuda, les agadezco la orientacion. |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |