/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

matriz de dimension n

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
AlonsoQ



Registrado: 08 Ago 2012
Mensajes: 14

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 10/08/2012 8:52 am
Título:

Muchas gracias leosan

saludos
Volver arriba
AlonsoQ



Registrado: 08 Ago 2012
Mensajes: 14

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com