Bueno como dice el titulo quisiera saber como le puedo hacer , con una matriz almacenar nombres y numeros , algo asi:
nombre1 7 8 9
nombre2 5 2 8
nombre3 7 8 10
donde nombre1 seria una posicion en memoria de la matriz, al igual que cada numero
no se como almacenar los datos en la matriz.. espero me puedan ayudar
Creo que deberías utilizar algo como lo siguiente:
typedef char *cadena;
cadena **matriz;
Si quieres restringirlo a enteros debes hacer vectoresde estructuras... pero si quieres trabajar los numeros como caracteres...
usa char matriz[m][n];
es decir arrays de 2 dimensiones...
Saludos...
EDITO:
Esto esta errado... de cierta forma...
char matriz[m][n];
Aquí nunca podrás almacenar una cadena como elemento de la "matriz".
iba a ser del tipo string, es q trabajo con c++ pero si es en C pes debe ser de 3 dimensiones...
:P
Saludos...
podrias explicarme un poco mas de eso de 3 dimensiones, le entiendo cuando es doble apuntador o de 2 dimensiones, pero de 3 no logro visualizarlo, y como meter datos ahi ;D
siento que seria algo asi como :
char *matriz[][];
:huh:
Bueno si fuese en C++, tendriamos en realidad:
[b]string[/b] matriz[][]
Cita de: daniel666999 en 29 Junio 2010, 02:09 AM
podrias explicarme un poco mas de eso de 3 dimensiones, le entiendo cuando es doble apuntador o de 2 dimensiones, pero de 3 no logro visualizarlo, y como meter datos ahi ;D
siento que seria algo asi como :
char *matriz[][];
:huh:
Con esto último estaría bien.
Fijate que: **matriz == matriz[][] EN CIERTO MODO. Ahora bien observa: ***matriz == *matriz[][]
Imagina que una dimension es para las letras (cada palabra) la otra dimension para las palabras (como una frase, o una linea, es decir un vector de palabras) y la otra para que sean varias frases(como un vector de frases o registros)... Mas o menos asi lo puedes ver...
Saludos...
Bueno, un poco mas claro, ahora hice este pequeño codigo, amm si me almacena nombres y numeros, pero no se por que cuando trato de meter los datos en la matriz de forma horizontal digamos, no lo almacena, si no que lo tengo que hacer de forma vertical, ;D espero me hayan entendido, si no aqui esta mi codigo, y ahi espero que sea mas claro:
#include<stdio.h>
#include<stdlib.h>
main()
{
char *mat[3][3];
int i,m,n=5,j;
/*printf("Cuantos nombre quieres\n");}
scanf("%d",&num);*/
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
mat[j][i]=(char*)malloc(sizeof(char)*n);
fflush(stdin);
scanf("%s",&*mat[j][i]); /*en esta parte lo guardo de forma vertical, ya que primero incrementa j luego i, comunmente es primero i luego j
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%s",mat[i][j]);
}
printf("\n");
}
getchar();
return 0;
}
Cita de: daniel666999 en 29 Junio 2010, 01:49 AM
Bueno como dice el titulo quisiera saber como le puedo hacer , con una matriz almacenar nombres y numeros , algo asi:
nombre1 7 8 9
nombre2 5 2 8
nombre3 7 8 10
donde nombre1 seria una posicion en memoria de la matriz, al igual que cada numero
no se como almacenar los datos en la matriz.. espero me puedan ayudar
Lo que podrias hacer es un arreglo de estructuras.
typedef struct _s
{
char nombre1[50];
int numero1
} registro;
typedef registro *matriz;
int main( void )
{
matriz m;
m = malloc( 5 * sizeof( registro ) );
...
}
Salu10.
Esta es una opción:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *matriz[2][2];
int i, j;
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++){
matriz[j][i] = malloc(sizeof(char)*10);
fgets(matriz[j][i], sizeof(char)*10, stdin);
}
for(i = 0; i < 2; i++){
for(j = 0; j < 2; j++){
printf("\t %s \t", matriz[i][j]);
}
printf("\n");
}
return 0;
}
Ahora bien, lee las chinchetas del foro para saber porque no usar scanf(), como tampoco es bueno utilizar fflush(stdin).
Cita de: cbug en 29 Junio 2010, 03:17 AM
Esta es una opción:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *matriz[2][2];
int i, j;
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++){
matriz[j][i] = malloc(sizeof(char)*10);
fgets(matriz[j][i], sizeof(char)*10, stdin);
}
for(i = 0; i < 2; i++){
for(j = 0; j < 2; j++){
printf("\t %s \t", matriz[i][j]);
}
printf("\n");
}
return 0;
}
Ahora bien, lee las chinchetas del foro para saber porque no usar scanf(), como tampoco es bueno utilizar fflush(stdin).
cbug, acuerdate de utilizar la funcion free() para no dejar memory leaks...
Salu10.
Citarcbug, acuerdate de utilizar la funcion free() para no dejar memory leaks...
Muy cierto, gracias por recomendarmelo... hace mucho que no tengo práctica en C, y a veces esos detalles son importantes y muy frecuentes de olvidárselos.
Al igual que nicolas, y como ya lo menciones, lo mejor seria un arreglo de estructuras... Y pes no creo que el que hizo el post sepa memoria dinamica :xD
Si tienes tiempo y ganas, pes hazlo con los 2 para que tu decidas que es mejor...
Saludos
ps memoria dinamica si se, tal vez no al nivel de ustedes; :P
y si no me queda claro algo, mejor pregunto: xD claro despues de leer.
Gracias por sus respuesta, han sido de bastante ayuda
saludos