| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
AlonsoQ
Registrado: 08 Ago 2012 Mensajes: 14
| Publicado: 10/08/2012 5:39 am | | | Título: matriz de dimension n |
| Alquien me puede decir por que me falla este código?
[ code] #include <stdlib.h> #include<stdio.h> #include <conio.h> #include <time.h>
void generar_matriz (int matriz[n][n]);
main() { srand (time(NULL)); generar_matriz (matriz[n][n]); getch(); }
void generar_matriz (int matriz[n][n]) { int n=0; printf("dimensión de la matriz?"); scanf("%d",&n);
for (i=0;i<n;i++) { for (j=0;j<n;j++) { matriz[i][j]=(rand()%16); printf("%d",matriz[i][j]; } printf("\n\n"); }
} [ /code] |
| | Volver arriba | |  | leosan
Registrado: 19 Abr 2012 Mensajes: 730 Ubicación: GRAN CANARIA
| Publicado: 10/08/2012 7:07 am | | | Título: Re: matriz de dimension n |
| | AlonsoQ escribió: | Alquien me puede decir por que me falla este código? Por lo pronto, en las etiquetas CODE no dejes el primer espacio en blanco. Fíjate cuando redactas el post que en la parte superior esta Code, clickea en ella al principio y final del código ....o lo haces a mano. Por lo pronto no usar la librería conio.Tenías declarada "srand (time(NULL))" fuera de la función que hace uso de ella......no tenías declaradas las variables i-j en la función, te faltaba un tabulador y el paréntesis final en "printf("%d\t",matriz[i][j])", si no pones el tabulador los números salen pegados y parece una matriz se 3x1. , si usas acentos en el código -supongo que estas en windows- salen caracteres "raros" al corre el programa (el "\xA2" del código que te mando es para lo o acentuada) y ......uffffffffff.......... mejor te dejo el código funcionado:
| Código: | #include <stdlib.h> #include<stdio.h> #include <time.h>
void generar_matriz ();
int main() { generar_matriz (); printf ("Presione una tecla para salir....."); getch(); return 0; } /*********************************************/ void generar_matriz () { int i,j; int n; printf("dimensi\xA2n de la matriz:"); scanf("%d",&n); int matriz[n][n]; srand (time(NULL)); for (i=0;i<n;i++) { for (j=0;j<n;j++) { matriz[i][j]=(rand()%16); printf("%d\t",matriz[i][j]); } printf("\n\n"); } }
|
|
Ya me dirás que tal te corre.No me gusta nada este código, pero me adapto al formato que me pareció que buscabas. Como ejemplo te dejo éste otro código, sin función, para entrar las dimensiones de la matriz y la matriz a mano:
| Código: | /*matriz m y n*/ #include <stdio.h> main() { int i=0,j=0,n,m,numero;
printf( "Introduzca las dimensiones dela matriz m y n: \n"); printf( "dimension m= ");scanf("%d",&n); printf( "dimension n= ");scanf("%d",&m); int a[n][m]; for (i=1;i<=n;i++) { for (j=1;j<=m;j++) { printf("a[%d,%d]= ",i,j);scanf("%d",&a[i][j]); } } printf( "\nLa matriz introducida es: \n"); for (i=1;i<=n;i++) { for (j=1;j<=m;j++) { printf("%d\t",a[i][j]); }printf("\n"); } }
|
Saludos!. |
| | Volver arriba | |  | AlonsoQ
Registrado: 08 Ago 2012 Mensajes: 14
| Publicado: 10/08/2012 8:52 am | | | Título: |
| Muchas gracias leosan
saludos |
| | Volver arriba | |  | | AlonsoQ
Registrado: 08 Ago 2012 Mensajes: 14
| Publicado: 10/08/2012 12:17 pm | | | Título: |
| Una pregunta más leosan,
Con el código generar matriz, si escribo dos veces la función, lógicamente me genera dos matrices. Pero si quiero operar algebraicamente con estas matrices, ¿ tengo que hacer una segunda función (generar matriz 2) para poder sumarlas, o hay otra forma de hacerlo?
gracias de antemano |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7517 Ubicación: Mexico
| Publicado: 10/08/2012 3:13 pm | | | Título: Re: matriz de dimension n |
| | leosan escribió: | | Tenías declarada "srand (time(NULL))" fuera de la función que hace uso de ella |
Eso es lo usual y, en el caso del programa de AlonsoQ, es correcto utilizarla de esa forma.
Espero lo tomes de una forma constructiva: si no estas seguro de dar una respuesta clara y precisa por favor no lo hagas.
Los problemas importantes con el programa de AlonsoQ son dos y se encuentran en esta parte:
| Código: | void generar_matriz (int matriz[n][n]); /* <== 1 */
/* ... */
void generar_matriz (int matriz[n][n]) /* <== 2 */ { |
El primero: no es posible indicar que el parámetro de la función es un array con "n" elementos porque, hasta ese punto, "n" no existe.
El segundo: se puede, a partir de C99, indicar que el array tiene un numero de elementos definido en tiempo de ejecución pero la notación es distinta.
Aquí lo mejor, para evitar adivinanzas, es esperar a que AlonsoQ nos diga exactamente lo que trata de realizar en el programa.
Y en relación al segundo programa de leosan:
| Código: | /* ... */
int a[n][m]; for (i=1;i<=n;i++) |
Eso funciona en C99 pero los indices 1 .. n no son los correctos (deberían ser 0 .. n-1). Mismo caso con el bucle interno controlado por la variable "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 | |  | leosan
Registrado: 19 Abr 2012 Mensajes: 730 Ubicación: GRAN CANARIA
| Publicado: 11/08/2012 11:07 am | | | Título: Re: matriz de dimension n |
| | rir3760 escribió: | | leosan escribió: | | Espero lo tomes de una forma constructiva: si no estas seguro de dar una respuesta clara y precisa por favor no lo hagas. |
Como siempre me lo tomo .... "¡Estoy aprendiendo de ustedes!". Lo se srand me sorprende al ser declarado en una función - main - y usarlo en otra sin pasarle valor ... siempre aprendiendo¡ ¡ ¡
| Código: | int a[n][m]; for (i=1;i<=n;i++) Eso funciona en C99 pero los indices 1 .. n no son los correctos (deberían ser 0 .. n-1). Mismo caso con el bucle interno controlado por la variable "j".
|
Se me escapo con las prisas, es un defecto del Cálculo. Gracias. Un saludo |
|
| | Volver arriba | |  | | Pantalàimon_
Registrado: 17 Jul 2007 Mensajes: 1344
| Publicado: 11/08/2012 2:38 pm | | | Título: |
| srand( time( NULL ) ) se pone fuera porque sino se llamaría a dicha función cada vez que llamaras a generar_matriz y en realidad con una vez que se llame para inicializar la semilla ya es suficiente.
Por cierto leosan, te lo dije en un mensaje privado pero creo que no te has dado cuenta. La cuestión es que te montas un lío con los quotes impresionante. Ni rir3760 escribió:
| Cita: | Como siempre me lo tomo .... "¡Estoy aprendiendo de ustedes!". Lo se srand me sorprende al ser declarado en una función - main - y usarlo en otra sin pasarle valor ... siempre aprendiendo¡ ¡ ¡ |
ni tú escribiste: | Cita: | | Espero lo tomes de una forma constructiva: si no estas seguro de dar una respuesta clara y precisa por favor no lo hagas. |
Sin embargo es lo que das a entender. Supongo que lo haces sin querer, pero es algo muy habitual y repetitivo en todos tus posts así que si puedes corregirlo de ahora en adelante te lo agradecería.
Un saludo! |
| | Volver arriba | |  | AlonsoQ
Registrado: 08 Ago 2012 Mensajes: 14
| Publicado: 11/08/2012 10:53 pm | | | Título: |
| Bueno pues esto es lo que estoy haciendo:
generar una primera matriz. generar una segunda; operar algebraicamente con ellas. Por lo pronto al ejecutar el programa me dice en la funcion suma, que matriz1 y 2 no sestán declaradas ¿ como puedo hacerlo?
gracias
| Código: | #include <stdlib.h> #include<stdio.h> #include <time.h> #include<conio.h>
int n;
void generar_matriz1 (); void generar_matriz2 (); void summ();
int main() { srand (time(NULL)); generar_matriz1 (); generar_matriz2 (); summ(); printf ("Presione una tecla para salir....."); getch(); } /*********************************************/ void generar_matriz1 () { int i,j; printf("dimensi\xA2n de la matriz:"); scanf("%d",&n); int matriz1[n][n]; for (i=0;i<n;i++) { for (j=0;j<n;j++) { matriz1[i][j]=(rand()%16); printf("%d\t",matriz1[i][j]); } printf("\n\n"); } }
void generar_matriz2 () { int i,j; srand (time(NULL)); printf("dimensi\xA2n de la matriz:"); scanf("%d",&n); int matriz2[n][n]; for (i=0;i<n;i++) { for (j=0;j<n;j++) { matriz2[i][j]=(rand()%16); printf("%d\t",matriz2[i][j]); } printf("\n\n"); } }
void summ () { int i,j;
int summ[n][n];
for (i=0;i<n;i++) { for (j=0;j<n;j++) { summ[i][j]= matriz1[i][j]+matriz2[i][j]; printf("%d\t",summ[i][j]); } printf("\n\n"); } printf("\n\n");
|
|
| | Volver arriba | |  | Pantalàimon_
Registrado: 17 Jul 2007 Mensajes: 1344
| Publicado: 12/08/2012 1:34 am | | | Título: |
| Las funciones no sólo son palabras para resumir trozos de código. Las funciones se comunican y pasan datos a través de sus parámetros. Es decir, como generar_matriz1, generar_matriz2 producen sus matrices dentro de su respectivo cuerpo de función y no las pasan como parámetro a la función summ, pues, la función summ no sabe de la existencia de esas matrices.
Infórmate sobre el paso de parámetros/argumentos en funciones.
Un saludo! |
| | Volver arriba | |  | | AlonsoQ
Registrado: 08 Ago 2012 Mensajes: 14
| Publicado: 12/08/2012 1:48 am | | | Título: |
| | Pantalàimon_ escribió: | Las funciones no sólo son palabras para resumir trozos de código. Las funciones se comunican y pasan datos a través de sus parámetros. Es decir, como generar_matriz1, generar_matriz2 producen sus matrices dentro de su respectivo cuerpo de función y no las pasan como parámetro a la función summ, pues, la función summ no sabe de la existencia de esas matrices.
Infórmate sobre el paso de parámetros/argumentos en funciones.
Un saludo! |
Hola,
Me puedes recomendar, algún texto donde venga bien explicado con ejemplos. No consigo entenderlo bien. muchas gracias por tu ayuda |
| | Volver arriba | |  | Pantalàimon_
Registrado: 17 Jul 2007 Mensajes: 1344
| Publicado: 12/08/2012 3:34 am | | | Título: |
| Ahora mismo no sabría que texto recomendarte ¿De dónde has aprendido el temario de funciones en C? Releértelo sería una buena opción.
Lo primero que he encontrado ha sido esto: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Uso_de_funciones Pero es cuestión de buscar o, mejor, obtener un buen libro donde se explique el temario de funciones. Ciertamente, hasta que no se tiene un poco asumidos los conceptos de funciones es bastante líoso mezclar matrices y funciones. Así que creo que estás empezando la casa por el tejado.
Un saludo! |
| | Volver arriba | |  | AlonsoQ
Registrado: 08 Ago 2012 Mensajes: 14
| Publicado: 14/08/2012 11:52 am | | | Título: |
| | Pantalàimon_ escribió: | Ahora mismo no sabría que texto recomendarte ¿De dónde has aprendido el temario de funciones en C? Releértelo sería una buena opción.
Lo primero que he encontrado ha sido esto: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Uso_de_funciones Pero es cuestión de buscar o, mejor, obtener un buen libro donde se explique el temario de funciones. Ciertamente, hasta que no se tiene un poco asumidos los conceptos de funciones es bastante líoso mezclar matrices y funciones. Así que creo que estás empezando la casa por el tejado.
Un saludo! |
Bueno me he comprado un libro de la editorial Anaya, y para numeros, la idea es pasarlos mediante punteros, así pues en el ejemplo que pongo suma matriz(*) debería recibir los parametros de matriz1 y matriz 2(&); pero hay algo que no va bien !!una ayudita...!!
| Código: | #include <stdlib.h> #include<stdio.h> #include <time.h> #include<conio.h>
int n, i, j;
void generar_matriz1 (); void generar_matriz2 (); void summ();
int main() { printf("dimensi\xA2n de la matriz:"); scanf("%d",n); int matriz1[n][n]; int matriz2[n][n]; srand (time(NULL)); generar_matriz1 (); generar_matriz2 ();
printf ("Presione una tecla para salir....."); getch(); } /*********************************************/ void generar_matriz1 () { int matriz1[n][n]; for (i=0;i<n;i++) { for (j=0;j<n;j++) { matriz1[i][j]=(rand()%16); printf("%d\t",matriz1[i][j]); } printf("\n\n"); } }
void generar_matriz2 () { srand (time(NULL)); printf("dimensi\xA2n de la matriz:"); scanf("%d",&n); int matriz2[n][n]; for (i=0;i<n;i++) { for (j=0;j<n;j++) { matriz2[i][j]=(rand()%16); printf("%d\t",matriz2[i][j]); } printf("\n\n"); } }
void suma_matrices () { int *sumamatriz[n][n]; for (i=0;i<n;i++) { for (j=0;j<n;j++) { } *sumamatriz[i][j]=*matriz1[i][j]+*matriz2[i][j];
|
|
| | 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
|
|
| |