Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Naimaderis en 14 Diciembre 2016, 03:44 am



Título: Porque para asignarle valor a un vector mediante for tiene que ser una variable
Publicado por: Naimaderis en 14 Diciembre 2016, 03:44 am
Este codigo me funciona:
Código
  1. #include <stdio.h>
  2.  
  3. main(){
  4. int nombre[47];
  5. double valores[1];
  6. int i;
  7. int h = 1;
  8.  
  9. for (i = 0  ; i < 48 ;   i++)
  10. {
  11.    nombre[i] = h;
  12.    printf("%d",nombre[i]);
  13. }
  14.  
  15. return 0;
  16.    }
  17.  
  18.  
  19.  

Pero sin embargo, este sigue infinitamente:

Código
  1.    #include <stdio.h>
  2.  
  3. main(){
  4. int nombre[47];
  5. double valores[1];
  6. int i;
  7.  
  8. for (i = 0  ; i < 48 ;   i++)
  9. {
  10.    nombre[i] = 1;
  11.    printf("%d",nombre[i]);
  12. }
  13.  
  14. return 0;
  15.    }
  16.  

No entiendo muy bien la diferencia.


Título: Re: Porque para asignarle valor a un vector mediante for tiene que ser una variable
Publicado por: engel lex en 14 Diciembre 2016, 03:54 am
tu código corre (casi) perfecto... nada de bucles infinitos

varias cosas...

- main debe ser int...
- la identación es sumamente imporatnte a la hora de leer el codigo, usala
- i < 48 con int nombre[47]... que hablamos de que i debe ser menor que el numero de asignación porque el 0 se cuenta?



Título: Re: Porque para asignarle valor a un vector mediante for tiene que ser una variable
Publicado por: Naimaderis en 14 Diciembre 2016, 04:03 am
Casualmente, justo habia tratado eso, y lo cambie por 48, en realidad, yo puse 47 contando el 0. Pense que arrancaba desde 0, entonces dije {0,1,2, ... ,47} Enseguida que me percate que eran 48 contando el 0, lo arregle ^^. Gracias por estar siempre. (Me di cuenta, porque le faltaba imprimir el 12 de copa jaja)

Solo para chequear, la identacion ahora esta bien?

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(){
  5.  
  6. int nombre[48];
  7. double valores[1];
  8. int i;
  9.  
  10. for (i = 0  ; i < 48 ;   i++) /* se le asigna a las 48 cartas el estado "1", significa que existen */
  11.    {
  12.        nombre[i] = 1;
  13.    }
  14.  
  15. int j;
  16. int sum;
  17.  
  18. for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
  19.        {
  20.            (nombre[j] == 1) ?  sum = nombre[j] + j, printf("%d de espada \t", sum) : printf("\t \t \t");
  21.  
  22.            (nombre[j+12] == 1) ? sum = nombre[j] + j, printf("%d de oro \t", sum) : printf("\t \t \t");
  23.  
  24.            (nombre[j+24] == 1) ? sum = nombre[j] + j, printf("%d de basto \t", sum) : printf("\t \t \t");
  25.  
  26.            (nombre[j+36] == 1) ? sum = nombre[j] + j , printf("%d de copa \n", sum) : printf("\t \t \t");
  27.  
  28.        }
  29.  
  30. return 0;
  31. }
  32.  
  33.  
  34.  

Estoy dudando si no va todo con una identacion mas por el "main"

El codigo anterior, funciona a la perfección. El problema viene ahora, que quiero reorganizarlo en 2 funciones, una que crea las cartas (Asigna a los 48 lugares un 1) y otra, que imprime las cartas existentes:

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. void crearcartas(void){
  5.  
  6.    int nombre[48];
  7.    double valores[1];
  8.    int i;
  9.  
  10.    for (i = 0  ; i < 48 ;   i++) /* se le asigna a las 48 cartas el estado "1", significa que existen */
  11.        {
  12.            nombre[i] = 1;
  13.        }
  14.    return 0;
  15. }
  16.  
  17. void imprimircartas(void){
  18.  
  19.    int j;
  20.    int sum;
  21.    for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
  22.        {
  23.  
  24.            (nombre[j] == 1) ?  sum = nombre[j] + j, printf("%d de espada \t", sum) : printf("\t \t \t");
  25.  
  26.            (nombre[j+12] == 1) ? sum = nombre[j] + j, printf("%d de oro \t", sum) : printf("\t \t \t");
  27.  
  28.            (nombre[j+24] == 1) ? sum = nombre[j] + j, printf("%d de basto \t", sum) : printf("\t \t \t");
  29.  
  30.            (nombre[j+36] == 1) ? sum = nombre[j] + j , printf("%d de copa \n", sum) : printf("\t \t \t");
  31.        }
  32. return 0;
  33. }
  34.  
  35.  
  36. int main(){
  37.  
  38. crearcartas();
  39. imprimircartas();
  40.  
  41. return 0;
  42. }
  43.  
  44.  
  45.  
  46.  


Título: Re: Porque para asignarle valor a un vector mediante for tiene que ser una variable
Publicado por: jessec01 en 14 Diciembre 2016, 07:21 am
Se llama prototipo.
http://nereida.deioc.ull.es/~pcgull/ihiu01/cdrom/c/contenido/node10.html
aqui encuentra material de ayuda.

También  tiene que tener en cuenta, que es muy importante que es le especifique todo lo que desea que haga tu programa a la computadora.

Es por eso el uso de los prototipo que no es mas que una inicializacion de una funcion para que el compilador sepa de que tipo es ej: int float char void. o la cantidad de parametro.

Recomiendo que te empiece acostumbra a trabajar de esa forma para concepto mas avanzado de suma importancia.


Título: Re: Porque para asignarle valor a un vector mediante for tiene que ser una variable
Publicado por: Naimaderis en 14 Diciembre 2016, 18:33 pm
Se llama prototipo.
http://nereida.deioc.ull.es/~pcgull/ihiu01/cdrom/c/contenido/node10.html
aqui encuentra material de ayuda.

También  tiene que tener en cuenta, que es muy importante que es le especifique todo lo que desea que haga tu programa a la computadora.

Es por eso el uso de los prototipo que no es mas que una inicializacion de una funcion para que el compilador sepa de que tipo es ej: int float char void. o la cantidad de parametro.

Recomiendo que te empiece acostumbra a trabajar de esa forma para concepto mas avanzado de suma importancia.

Creo que lo he entendido, muchas gracias! Ademas, voy a tomar la pagina que pasaste para seguir aprendiendo.

El error del programa que pase, no es eso, por lo que veo, el error esta en la lineal 24 con el " (nombre[j] == 1) ?  sum = nombre[j] + j" ya que el  " int nombre[48];" lo defini en la funcion crear cartas, no en el imprimir. Mi pregunta es ¿Como podria solucionar eso? Si le pongo el "int nombre[48];" se me descontrola todo, lo cual es logico.


Logre terminar el programa ^^, basicamente es para el denominado juego llamado el "chinchon", o la "conga". Que cartas te pueden tocar.
Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  
  5. int nombre[4][12];
  6. double valores[1];
  7. int i;
  8.  
  9. for (i = 0  ; i < 12 ;   i++) /* se le asigna a las 48 cartas el estado "1", significa que existen */
  10.    {
  11.        nombre[0][i] = 1;
  12.        nombre[1][i] = 1;
  13.        nombre[2][i] = 1;
  14.        nombre[3][i] = 1;
  15.    }
  16.  
  17. int j;
  18. int sum;
  19.  
  20. for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
  21.        {
  22.            (nombre[0][j] == 1) ? sum = nombre[0][j] + j, printf("%d de espada \t", sum) : printf("\t \t \t");
  23.  
  24.            (nombre[1][j] == 1) ? sum = nombre[1][j] + j, printf("%d de oro \t", sum) : printf("\t \t \t");
  25.  
  26.            (nombre[2][j] == 1) ? sum = nombre[2][j] + j, printf("%d de basto \t", sum) : printf("\t \t \t");
  27.  
  28.            (nombre[3][j] == 1) ? sum = nombre[3][j] + j , printf("%d de copa \n", sum) : printf("\t \t \t");
  29.  
  30.        }
  31.  
  32. int k,g;
  33.  
  34.    do {  /* elegir que cartas no estan disponibles */
  35.    printf("introduzca el palo");
  36.    scanf("%d",&k);
  37.    printf("introduzca el numero");
  38.    scanf("%d",&g);
  39.    nombre[k][g] = 0;
  40.  
  41.    for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
  42.            {
  43.                (nombre[0][j] == 1) ? sum = nombre[0][j] + j, printf("%d de espada \t", sum) : printf("\t \t");
  44.  
  45.                (nombre[1][j] == 1) ? sum = nombre[1][j] + j, printf("%d de oro \t", sum) : printf("\t \t");
  46.  
  47.                (nombre[2][j] == 1) ? sum = nombre[2][j] + j, printf("%d de basto \t", sum) : printf("\t \t");
  48.  
  49.                (nombre[3][j] == 1) ? sum = nombre[3][j] + j , printf("%d de copa \n", sum) : printf("\t \t");
  50.  
  51.            }
  52. } while (k != EOF);
  53.  
  54. return 0;
  55. }
  56.  
  57.