• Domingo 17 de Noviembre de 2024, 23:42

Autor Tema:  maticesssssssss?  (Leído 1845 veces)

nqm

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
maticesssssssss?
« en: Martes 3 de Febrero de 2009, 07:23 »
0
hola ocupo q me expliquen lo mas casero posible (jejeje de forma facil) lo sigiente=
debo de hacer q el usario me digite el tamaño de una matriz(debe de ser cuadrada), q e ingrese los datos, y como resultado
1-imprima la matiz de forma q se vea asi:
111
111
111
(en forma de matrz)
2- q me sume fila a fila columna  a columna
asi:
111=3
111=3                  igual con columnas
111=3
 3-lo mismo para diagonales
4- si todas esas sumas dan el mismo resultado debo de imprimir "todas las filas colunas y diagonales dan el mismo resultado"


miren lo q no se y no me explico muy bien como lograr es como hacer q el usario me de un valor por ejemjlo 4 y ya se haga una matiz 4*4 y  la suma de linea por linea o columna por columna???????????
no les estoy pidiendo el codigo  completo puede ser q me expliquen como hago para las sumas ...aclaro no pido la tarea hecha

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: maticesssssssss?
« Respuesta #1 en: Martes 3 de Febrero de 2009, 10:17 »
0
depende de como ingreses los datos, quieres pedirle al user los numeros uno a uno o quieres que te de las matrices separadas por espacios:
para ello , lo mejor seria que recibas un string entero y luego por cada token lo vayas metiendo en la matriz.

Para recibir un string puedes hacer scanf("%s",s);

Cojes el array, cuentas el numero de espacios que hay en el para ver el numero de elementos que tienes escritos.
una vez sabes cuantos elementos hay, localizas usando malloc una matriz cuadrada de N^2. Luego vas metiendo los elementos usando strtok y strtoi
(miralo en google, pero el primero descompone un string en cachos simples y el otro convierte de string a integer) con eso tendras los datos y podras hacer

por cada token, el elemento x de la matrix = strtoi(token).

no se si me he explicao igual he quedao confuso

para sumarlos, simplemente haz un doble for de n elementos y los vas sumando en una variable auxiliar

for (int y=0;y<n;y++)
{
aux=0;
for (int x=0;x<n;x++)
{
aux+=matrix[y]
  • ;

}
printf("%d",aux);
}

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: maticesssssssss?
« Respuesta #2 en: Martes 3 de Febrero de 2009, 10:18 »
0
para hacerlo por columnas, intercambia en el for los elementos x e y

nqm

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: maticesssssssss?
« Respuesta #3 en: Martes 3 de Febrero de 2009, 17:02 »
0
Cita de: "diego.martinez"
depende de como ingreses los datos, quieres pedirle al user los numeros uno a uno o quieres que te de las matrices separadas por espacios:
para ello , lo mejor seria que recibas un string entero y luego por cada token lo vayas metiendo en la matriz.

Para recibir un string puedes hacer scanf("%s",s);

Cojes el array, cuentas el numero de espacios que hay en el para ver el numero de elementos que tienes escritos.
una vez sabes cuantos elementos hay, localizas usando malloc una matriz cuadrada de N^2. Luego vas metiendo los elementos usando strtok y strtoi
(miralo en google, pero el primero descompone un string en cachos simples y el otro convierte de string a integer) con eso tendras los datos y podras hacer

por cada token, el elemento x de la matrix = strtoi(token).

no se si me he explicao igual he quedao confuso

para sumarlos, simplemente haz un doble for de n elementos y los vas sumando en una variable auxiliar

for (int y=0;y<n;y++)
{
aux=0;
for (int x=0;x<n;x++)
{
aux+=matrix[y]
  • ;

}
printf("%d",aux);
}

muchas graciassssss eso es lo q necesitaba, algo si te aclaro, apenas empieza el curso y no hemos visto esas funciones ni si quiera los sting hemos usado, lo que tenia pensado era meter un for o alguna otra sentencia que cuando el espacio esta ubicado en n-1 (inicia en 0) me baje; no se con que aun n o algo asi pero me gustaria saber un poco mas de esas funciones q me mencionas ahi....en cuanto avance s los voy mandando para q lo vayan checando..

nqm

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: maticesssssssss?
« Respuesta #4 en: Miércoles 4 de Febrero de 2009, 20:44 »
0
hola gente ya casi q funciona bien..solo tengo unos cuantos problemillas
1- si suma muy bien las filas y las columnas...el problema esta en cuando voy a imprimir el resultado de columnas q no me sale bien la ubicacionde la columna (Suma columna []/ lo q va entre corches no es el numero de columna )
2- no tengo idea de la suma de las diagonales....alguna explicacion?
4- la ubicacion---quiero q salga de forma cuadradita...como una matriz...

Código: C++
  1. //Suma por filas...
  2.     cout<<"la suma de las filas es la sigueinte: n";
  3.     for(f=0;f<d;f++)
  4.     {
  5.         suma_fila=0;
  6.         for(c=0;c<d;c++)
  7.         {
  8.             suma_fila=suma_fila+m[f][c];
  9.  
  10.         }
  11.      cout<<"Suma Fila ["<<f<<"] = "<<suma_fila;
  12.      cout<<endl;
  13.      }
  14.  
  15.     //Suma por columnas...
  16.     cout<<"la suma de las columnas es la sigueinte: n";
  17.     for(f=0;f<d;f++)
  18.     {
  19.         suma_col=0;
  20.         for(c=0;c<d;c++)
  21.         {
  22.             suma_col=suma_col+m[c][f];
  23.  
  24.         }
  25.      cout<<"Suma columna ["<<c<<"] = "<<suma_col;
  26.      cout<<endl;
  27.     }
  28.      getche();
  29.       }
  30.      return (0);
  31. }
  32.  
  33.  

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: maticesssssssss?
« Respuesta #5 en: Jueves 5 de Febrero de 2009, 15:14 »
0
la suma de una de las diagonales es:

Código: C++
  1. suma=0;
  2. for (i=0; i<m; i++)
  3.   for (j=0; j<m; j++)
  4.     if (i == j)
  5.       suma+=matriz[i][j];
  6.  

para la otra diagonal:

Código: C++
  1. suma=0;
  2. for (i=0; i<m; i++)
  3.   for (j=0; j<m; j++)
  4.     if ((i+j) == m)
  5.       suma+=matriz[i][j];
  6.  

para el resto de tus dudas lo único que te digo es que jueges con la manera de imprimir...

: good :


diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: maticesssssssss?
« Respuesta #6 en: Jueves 5 de Febrero de 2009, 16:07 »
0
al ser matrizes cuadradas, la suma de las diagonales de O:n en vez de O:n^2
asi que yo lo haria mas eficiente

for (int i=0;i<n;i++)
{
diagonal1+=m;
diagonal2+=m[n-i-1];
}

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: maticesssssssss?
« Respuesta #7 en: Jueves 5 de Febrero de 2009, 16:14 »
0
Cita de: "diego.martinez"
al ser matrizes cuadradas, la suma de las diagonales de O:n en vez de O:n^2
asi que yo lo haria mas eficiente

for (int i=0;i<n;i++)
{
diagonal1+=m;
diagonal2+=m[n-i-1];
}

mucho mas simple!

que es eso de 0:n y 0:n^2?


diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: maticesssssssss?
« Respuesta #8 en: Jueves 5 de Febrero de 2009, 16:40 »
0
es la forma de definir el Orden de un algoritmo, una O mayuscula y luego su valor.
El orden de un algoritmo es digamos el numero de iteraciones que debe de hacer para resolverlo.
Por ejemplo, pintar una matriz de N columnas y M files tendra Orden MxN o sea, habra que pintar m por n veces.
Al ser una matriz cuadrada se pone O:n^2 por que lo vas a hacer n veces columnas y n veces filas.
Es solo una forma de expresar la "lentitud" en comparación de un algoritmo.

Ejemplos de orden:
Acceder a un elemento de un vector por su indice : vector[5]   -> O:1   //en una vuelta hecho
Buscar un elemento en un array -> O: N por que como mucho habra que iterar N veces donde n es el tamaño del array
Buscar en una matriz O: NxM o O:N^2 si es cuadrada
Buscar un elemento en un arbol binario de busqueda O: log2N
etc etc  etc  

Esto son cosas de ingenieria de software, no son necesarias para saber hacer las cosas :D pero te sirven para hacerlas mejor en proyectos grandes.

nqm

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: maticesssssssss?
« Respuesta #9 en: Jueves 5 de Febrero de 2009, 16:51 »
0
chicos...gracias....mi trabajo esta finalizado y lo mejor de todo es q entendi muy bien...aperendi mucho con ustedes :D
 utilice una forma mas MIA por decirlo asi..jejeje...pero me encanto y probe las formas q me han dicho y corre  muy bien...lo q me falta es las impreciones de la matriz pero con eso me peleo yo sola...gracias....
Código: C++
  1.  //Suma por diagonales...
  2.     cout<<"la suma de las diagonales es la sigueinte: n";
  3.  
  4.     for(c=0;c<d;c++)
  5.     {
  6.     suma_d1=suma_d1+m[c][c];
  7.     }
  8.     cout<<"Suma diagonal 1 es:"<<suma_d1;
  9.     cout<<endl;
  10.  
  11.  
  12.     //suma diagonales 2
  13.     k=d-1;
  14.     for(c=0;c<d;c++)
  15.     {
  16.         suma_d2=suma_d2+m[c][k];
  17.         k=k-1;
  18.     }
  19.     cout<<"Suma diagonal 2 es:"<<suma_d2;
  20.     cout<<endl;
  21.      }
  22.