Porque para asignarle valor a un vector mediante for tiene que ser una variable

Iniciado por Naimaderis, 14 Diciembre 2016, 03:44 AM

0 Miembros y 1 Visitante están viendo este tema.

Naimaderis

Este codigo me funciona:
#include <stdio.h>

main(){
int nombre[47];
double valores[1];
int i;
int h = 1;

for (i = 0  ; i < 48 ;   i++)
{
    nombre[i] = h;
    printf("%d",nombre[i]);
}

return 0;
    }




Pero sin embargo, este sigue infinitamente:

    #include <stdio.h>

main(){
int nombre[47];
double valores[1];
int i;

for (i = 0  ; i < 48 ;   i++)
{
    nombre[i] = 1;
    printf("%d",nombre[i]);
}

return 0;
    }


No entiendo muy bien la diferencia.

engel lex

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?

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Naimaderis

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?



#include <stdio.h>

int main(){
   
int nombre[48];
double valores[1];
int i;

for (i = 0  ; i < 48 ;   i++) /* se le asigna a las 48 cartas el estado "1", significa que existen */
   {
       nombre[i] = 1;
   }

int j;
int sum;

for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
       {
           (nombre[j] == 1) ?  sum = nombre[j] + j, printf("%d de espada \t", sum) : printf("\t \t \t");

           (nombre[j+12] == 1) ? sum = nombre[j] + j, printf("%d de oro \t", sum) : printf("\t \t \t");

           (nombre[j+24] == 1) ? sum = nombre[j] + j, printf("%d de basto \t", sum) : printf("\t \t \t");

           (nombre[j+36] == 1) ? sum = nombre[j] + j , printf("%d de copa \n", sum) : printf("\t \t \t");

       }
       
return 0;
}




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:



#include <stdio.h>

void crearcartas(void){

    int nombre[48];
    double valores[1];
    int i;

    for (i = 0  ; i < 48 ;   i++) /* se le asigna a las 48 cartas el estado "1", significa que existen */
        {
            nombre[i] = 1;
        }
    return 0;
}

void imprimircartas(void){

    int j;
    int sum;
    for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
        {

            (nombre[j] == 1) ?  sum = nombre[j] + j, printf("%d de espada \t", sum) : printf("\t \t \t");

            (nombre[j+12] == 1) ? sum = nombre[j] + j, printf("%d de oro \t", sum) : printf("\t \t \t");

            (nombre[j+24] == 1) ? sum = nombre[j] + j, printf("%d de basto \t", sum) : printf("\t \t \t");

            (nombre[j+36] == 1) ? sum = nombre[j] + j , printf("%d de copa \n", sum) : printf("\t \t \t");
        }
return 0;
}


int main(){

crearcartas();
imprimircartas();

return 0;
}




jessec01

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.
"originalidad en todo "

Naimaderis

Cita de: 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.

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.
#include <stdio.h>

int main(){

int nombre[4][12];
double valores[1];
int i;

for (i = 0  ; i < 12 ;   i++) /* se le asigna a las 48 cartas el estado "1", significa que existen */
    {
        nombre[0][i] = 1;
        nombre[1][i] = 1;
        nombre[2][i] = 1;
        nombre[3][i] = 1;
    }

int j;
int sum;

for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
        {
            (nombre[0][j] == 1) ? sum = nombre[0][j] + j, printf("%d de espada \t", sum) : printf("\t \t \t");

            (nombre[1][j] == 1) ? sum = nombre[1][j] + j, printf("%d de oro \t", sum) : printf("\t \t \t");

            (nombre[2][j] == 1) ? sum = nombre[2][j] + j, printf("%d de basto \t", sum) : printf("\t \t \t");

            (nombre[3][j] == 1) ? sum = nombre[3][j] + j , printf("%d de copa \n", sum) : printf("\t \t \t");

        }
       
int k,g;

    do {  /* elegir que cartas no estan disponibles */
    printf("introduzca el palo");
    scanf("%d",&k);
    printf("introduzca el numero");
    scanf("%d",&g);
    nombre[k][g] = 0;

    for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
            {
                (nombre[0][j] == 1) ? sum = nombre[0][j] + j, printf("%d de espada \t", sum) : printf("\t \t");

                (nombre[1][j] == 1) ? sum = nombre[1][j] + j, printf("%d de oro \t", sum) : printf("\t \t");

                (nombre[2][j] == 1) ? sum = nombre[2][j] + j, printf("%d de basto \t", sum) : printf("\t \t");

                (nombre[3][j] == 1) ? sum = nombre[3][j] + j , printf("%d de copa \n", sum) : printf("\t \t");

            }
} while (k != EOF);

return 0;
}