Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: GustavoArango en 7 Mayo 2017, 05:31 am



Título: Problema con matrices y cadenas.
Publicado por: GustavoArango en 7 Mayo 2017, 05:31 am
Empece a programar hace poco, y aunque en la universidad no hemos visto matrices, yo he estado investigando y ya se (mas o menos  :silbar:) como realizar una matriz, hice varios ejercicios, asi que decidi dar el siguiente paso, intente hacer una matriz con cadenas, y por el titulo del post pues ya se habran imaginado que paso  :xD este es el programa:

Código
  1. #include<stdio.h>
  2. #include<windows.h>
  3. #include<string>
  4. using namespace std;
  5.  
  6. main()
  7. {
  8. int f1,c1,f,c,i,j,k,m;
  9. string a;
  10.  
  11.    printf("Por favor digite la cantidad de filas que desea:");
  12.    scanf("%d",&f);
  13.    printf("Por favor digite la cantidad de columnas que desea:");
  14.    scanf("%d",&c);
  15.  
  16. f1=f+1;
  17. c1=c+1;
  18.  
  19. string matrizB[f1][c1];    
  20.  
  21.   for(i=1;i<=f;i++)
  22.       {
  23.         printf("\n\t");
  24.  
  25.        for(j=1;j<=c;j++)
  26.        {          
  27.           printf("\n\t");
  28.           printf("posicion (%d,%d):",i,j);
  29.   scanf("%s",&a);
  30.           matrizB[i][j]=a;
  31.        }
  32.       }
  33.       for(i=1;i<=f;i++)
  34.       {
  35.       printf("\tF%d\t",i);
  36.   }
  37.  
  38.       for(i=1;i<=f;i++)
  39.       {
  40.       printf("\n");
  41.       printf("C%d",i);
  42.       for(j=1;j<=c;j++)
  43.       {
  44.       printf("\t%s\t",matrizB[i][j].c_str());
  45.   }
  46.   }    
  47. }
  48.  
Si, se que hay MUCHÍSIMOS errores (no me juzguen comencé hace poco  :rolleyes:), tal vez habrán muchas novatadas y cosas que sobran, pero es lo que puedo hacer hasta que tenga ya bastante experiencia en este tema. Bueno, el tema aquí es que si en vez de string cambio todo a int, es decir utilizo números, el programa funciona de maravilla:
Código
  1. #include<stdio.h>
  2. #include<windows.h>
  3.  
  4. main()
  5. {
  6. int a,f1,c1,f,c,i,j,k,m;
  7.  
  8.    printf("Por favor digite la cantidad de filas que desea:");
  9.    scanf("%d",&f);
  10.    printf("Por favor digite la cantidad de columnas que desea:");
  11.    scanf("%d",&c);
  12.  
  13. f1=f+1;
  14. c1=c+1;
  15.  
  16. int matrizB[f1][c1];    
  17.  
  18.   for(i=1;i<=f;i++)
  19.       {
  20.         printf("\n\t");
  21.  
  22.        for(j=1;j<=c;j++)
  23.        {          
  24.           printf("\n\t");
  25.           printf("posicion (%d,%d):",i,j);
  26.   scanf("%d",&a);
  27.           matrizB[i][j]=a;
  28.        }
  29.       }
  30.       for(i=1;i<=f;i++)
  31.       {
  32.       printf("\tF%d\t",i);
  33.   }
  34.  
  35.       for(i=1;i<=f;i++)
  36.       {
  37.       printf("\n");
  38.       printf("C%d",i);
  39.       for(j=1;j<=c;j++)
  40.       {
  41.       printf("\t%d\t",matrizB[i][j]);
  42.   }
  43.   }
  44. }

Creí que simplemente cambiando los números a cadenas iba a funcionar, pero ya veo que no, alguien me podría ayudar por favor, o si lo estoy haciendo mal y hay otra forma con la que se introduce caracteres o cadenas a una matriz me podrían indicar cual es, muchas gracias  ;D ;D ;D


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: Problema con matrices y cadenas.
Publicado por: engel lex en 7 Mayo 2017, 06:31 am
ok... hace poco habia dicho que no se podìa programar mezclado c y c++ o era uno u otro... ya veo que no...

D: tu codigo es un desastre D:

si estás usando <string> y "using namespace" estás en c++, entonces lee y escribe por sus respectivos metodos para sus variables

primero que nada main debe ser int y retornar 0 si todo salió bien

no entiendo porque en tu array siempre empiezas desde 1 :s


simplemente te dejaré la forma en que yo lo haría en C++

Código
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.  int f,c,i,j;
  8.  
  9.  cout << "Por favor digite la cantidad de filas que desea:";
  10.  cin >> f;
  11.  cout << "Por favor digite la cantidad de columnas que desea:";
  12.  cin >> c;
  13.  
  14.  string matrizB[f][c];
  15.  
  16.  for(i=0;i<f;i++){
  17.    cout << endl;
  18.  
  19.    for(j=0;j<c;j++){
  20.      cout << endl;
  21.      cout << "\tposicion (" << (i+1) << ":" << (j+1) << "): ";
  22.      cin >> matrizB[i][j];
  23.    }
  24.  }
  25.  for(i=0;i<f;i++){
  26.    cout << "\tF" << (i+1) << "\t";
  27.  }
  28.  
  29.  for(i=0;i<f;i++){
  30.    cout << endl;
  31.    cout << "C" << (i+1);
  32.    for(j=0;j<c;j++){
  33.      cout << "\t" << matrizB[i][j] << "\t";
  34.    }
  35.  }
  36.  cout << endl;
  37.  return 0;
  38. }
  39.  

y aquí en C
Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int main(){
  5.  int f,c,i,j;
  6.  
  7.  printf("Por favor digite la cantidad de filas que desea:");
  8.  scanf("%d",&f);
  9.  printf("Por favor digite la cantidad de columnas que desea:");
  10.  scanf("%d",&c);
  11.  
  12.  char matrizB[f][c][20];    
  13.  
  14.  for(i=0;i<f;i++){
  15.    printf("\n\t");
  16.  
  17.    for(j=0;j<c;j++){          
  18.      printf("\n\t");
  19.      printf("posicion (%d,%d):",i+1,j+1);
  20.      scanf("%s",matrizB[i][j]);
  21.    }
  22.  }
  23.  for(i=0;i<f;i++){
  24.    printf("\tF%d\t",i+1);
  25.  }
  26.  
  27.  for(i=0;i<f;i++){
  28.    printf("\n");
  29.    printf("C%d",i+1);
  30.    for(j=0;j<c;j++){
  31.      printf("\t%s\t",matrizB[i][j]);
  32.    }
  33.  }  
  34.  printf("\n");
  35.  return 0;
  36. }


Título: Re: Problema con matrices y cadenas.
Publicado por: MAFUS en 7 Mayo 2017, 17:17 pm
Cuidado con dimensionar arrays a partir de variables,  eso es una dependencia del compilador. El estándar dice que solo se pueden dimensionar con constantes. Para dimensionar con variables debe de forma dinámica.


Título: Re: Problema con matrices y cadenas.
Publicado por: GustavoArango en 7 Mayo 2017, 18:46 pm
Vale, gracias, no tenia idea que no podía mezclar una cosa con la otra, lo he hecho todo el tiempo  :silbar: , y lo de que la matriz comience en +1 son puras paranoias mías, creí que si lo dejaba exacto no iba a funcionar porque no leería el ultimo dato o alguna cosa así :xD , ya veo que no, el problema es que no estoy familiarizado con la librería iostream, sino con la stdio, no sabia que la primera era la de c++, solo me han enseñado stdio, de nuevo muchas gracias por mostrarme el programa, me ayudo a aclararme en muchas cosas, saludos  :)


Título: Re: Problema con matrices y cadenas.
Publicado por: engel lex en 7 Mayo 2017, 18:49 pm
Cuidado con dimensionar arrays a partir de variables,  eso es una dependencia del compilador. El estándar dice que solo se pueden dimensionar con constantes. Para dimensionar con variables debe de forma dinámica.

cierto XD pero soy sincero y me ha dado pereza siempre la redimensión en C y en C++ eso me iba a tomar como 6 lineas XD