[ Foro de C ]

como pasar este programa con variables globales a variables locales

10-Dec-2010 19:39
Angel Hierro
3 Respuestas

# include <stdio.h>
# include <stdlib.h>
typedef enum {False=0, True=1}boolean;
boolean sortir;

int cont_A=0, cont_B=0,tirada=0;//Son variables global
char v[9];//dimensio maxima de la taula de caracters sera de 9 posicions de 0 a 8

void ImprimirMenu();//Accio on mostrarem les opcions del joc
void inicialitzar();//Inicialitzem la taula per a que no surtin valors extranys
void mostrar_tauler();// Mostrarem el taule de joc a cada tirada
int triar_num(char carac);// Funcio per guardar el numero a la taula


int main()
{
   
   sortir=False;
   while(!sortir){
        ImprimirMenu();
       
   }

   system("PAUSE");
   return(0);
}


void inicialitzar(){//Inicialitzem la taula amb 'X' per saber quan ocupem una posicio
  int i=0;
  for(i=0;i<9;i++){
     v[i]='X';
  }  
  cont_A=0;
  cont_B=0;
  tirada=0;
}

void mostrar_tauler(){//Mostrarem el tauler de joc
  int i=0;      
  for(i=0;i<9;i++){
      printf("Numero: %d conte el valor %c\n",i+1,v[i]);
  }  
   printf("Contador A: %d\n",cont_A);
   printf("Contador B: %d\n",cont_B);
}

int triar_num(char carac){
   int num=0, i=0;
   printf("Indica el numero: ");
   scanf("%d",&num);
if(num!=-1){
   while((v[num-1]!='X' || cont_A+num>15 && cont_B+num>15)){// si a la posicio num-1 es diferent de X vol dir que ja esta agafat aquell numero, pertant s'ha de tornar a tirar
        printf("Numero ja introduit o suma superior a 15, indica nou valor: ");
        scanf("%d",&num);                                
   }
   v[num-1]=carac;
   if(carac=='A'){//hem creat un contador de A on vagi sumant totes les posicions que conta A, el mateix per B
       cont_A=cont_A+num;
   }    
   else{
       cont_B=cont_B+num;    
   }
}
   return(num);
   
}

void ImprimirMenu()
{
    int opcio, valor, num;    
   
    printf("1 Mostrar el tauler de joc \n");
    printf("2 Inici Joc \n");
    printf("3 Finalitzar\n");
    printf ("\nEscollir la opcio: \n");
    scanf ("%d",&opcio);

    switch(opcio)
    {
 
     case 1:
          inicialitzar();
        mostrar_tauler();
        break;
     case 2:
          inicialitzar();
       while((cont_A<15) && (cont_B<15) && (valor!=-1)){  
           if(tirada%2==0){//les tirades parelles seran per al jugador A
         
               printf("Tira el jugador A\n");
               valor=triar_num('A');
                mostrar_tauler();
                   if((tirada==2) && (cont_A>=15)){
                    printf("Torna a iniciar, son tres tirades com a minim");
                    sortir=True;        
                    }
                 if((cont_A==15)&&(tirada!=2)){
                  printf("Guanya el jugador A\n");
                   }
             
             }  
         
           else{     // els senars seran les tirades per al jugador B
                       
               printf("Tira el jugador B\n");            
               valor=triar_num('B');
                mostrar_tauler();
                 if((tirada==3) && (cont_B>=15)){
                     printf("Torna a iniciar, son tres tirades com a minim: \n");
                     sortir=True;        
                     }  
                if((cont_B==15)&& (tirada!=3)){
                 printf("Guanya el jugador B\n");
                 }  
               
                   
           }    
           tirada=tirada+1;
       }                
       break;          
     case 3:
         sortir=True;
         printf("Finalitzar\n");
         break;
    }
}


10-Dec-2010 20:52
Nacho Cabanes (+83)

No entiendo el problema: la mayoría de variables ya son locales:

void inicialitzar(){
 int i=0;

void ImprimirMenu()
{
   int opcio, valor, num;  

Las pocas que no son locales son acciones como "sortir" (salir), que es razonable que no lo sean, porque se usan para compartir información entre distintas funciones.


10-Dec-2010 21:06
Angel Hierro

No, pero mi profesora no me deja utilizar las variables globales:

int cont_A=0, cont_B=0,tirada=0;//Son variables global
char v[9];//dimensio maxima de la taula de caracters sera de 9 posicions de 0 a 8

Las que están arriba del todo, tengo que ponerlas como locales o paso por parámetro.
He intentado hacerlo pero no me funciona.
Este es el que he intentado:

//Joc de sumar 15 Jugador A Vs Jugador B
# include <stdio.h>
# include <stdlib.h>
typedef enum {False=0, True=1}boolean;// variable global
boolean sortir;


void ImprimirMenu();//Accio on mostrarem les opcions del joc
void inicialitzar();//Inicialitzem la taula per a que no surtin valors extranys
void mostrar_tauler();// Mostrarem el taule de joc a cada tirada
int triar_num(char carac);// Funcio per guardar el numero a la taula


int main()
{
   
int cont_A=0, cont_B=0,tirada=0;
char v[9];//dimensio maxima de la taula de caracters sera de 9 posicions de 0 a 8
   sortir=False;
   while(!sortir){
        ImprimirMenu();
       
   }

   system("PAUSE");
   return(0);
}


void inicialitzar(){//Inicialitzem la taula amb 'X' per saber quan ocupem una posicio
  int i=0, cont_A, cont_B, tirada;
  char v[9];
  for(i=0;i<9;i++){
     v[i]='X';
  }  
  cont_A=0;
  cont_B=0;
  tirada=0;
}

void mostrar_tauler(){//Mostrarem el tauler de joc
  int i=0, c1, c2;
  char ve[9];      
  for(i=0;i<9;i++){
      printf("Numero: %d conte el valor %c\n",i+1,ve[i]);
  }  
   printf("Contador A: %d\n",c1);
   printf("Contador B: %d\n",c2);
}

int triar_num(char carac){
   int num=0, i=0, cA, cB;
   char vec[9];
   printf("Indica el numero: ");
   scanf("%d",&num);
if(num!=-1){
   while((vec[num-1]!='X' || cA+num>15 && cB+num>15)){// si a la posicio num-1 es diferent de X vol dir que ja esta agafat aquell numero, pertant s'ha de tornar a tirar
        printf("Numero ja introduit o suma superior a 15, indica nou valor: ");
        scanf("%d",&num);                                
   }
   vec[num-1]=carac;
   if(carac=='A'){//hem creat un contador de A on vagi sumant totes les posicions que conta A, el mateix per B
       cA=cA+num;
   }    
   else{
       cB=cB+num;    
   }
}
   return(num);
   
}

void ImprimirMenu()//Hem fet una accio on mostri les opcions del joc
{
    int opcio, valor;    
    char v[9];
    printf("1 Mostrar el tauler de joc \n");
    printf("2 Inici Joc \n");
    printf("3 Finalitzar\n");
    printf ("\nEscollir la opcio: \n");
    scanf ("%d",&opcio);

    switch(opcio)
    {
 
     case 1:
         
        inicialitzar();
        mostrar_tauler();
        break;
     case 2:
          inicialitzar();
          int cA=0, cB=0, tirada=0;
       while((cA<15) && (cB<15) && (valor!=-1)){  
           if(tirada%2==0){//les tirades parelles seran per al jugador A
         
               printf("Tira el jugador A\n");
               valor=triar_num('A');
                mostrar_tauler();
                   if((tirada==2) && (cA>=15)){
                    printf("Torna a iniciar, son tres tirades com a minim");
                    sortir=True;        
                    }
                 if((cA==15)&&(tirada!=2)){
                  printf("Guanya el jugador A\n");
                   }
             
             }  
         
           else{     // els senars seran les tirades per al jugador B
                       
               printf("Tira el jugador B\n");            
               valor=triar_num('B');
                mostrar_tauler();
                 if((tirada==3) && (cB>=15)){
                     printf("Torna a iniciar, son tres tirades com a minim: \n");
                     sortir=True;        
                     }  
                if((cB==15)&& (tirada!=3)){
                 printf("Guanya el jugador B\n");
                 }  
               
                   
           }    
           tirada=tirada+1;
       }                
       break;          
     case 3:
         sortir=True;
         printf("Finalitzar\n");
         break;
    }
}


11-May-2011 18:03
oscar gomez

HOLA CORDIAL SALUDO.
PODRIAN INDICARNOS DE QUE VA ESTE PROGRAMA, PARA ENTENDER LO QUE HACE? MIL GRACIAS POR SU AYUDA






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)