Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Ripristino valori di una matrice precedentemente inizializzata

    HO un altro piccolo problemino, io dichiaro l'array 2D di char e lo inizializzo cosi:
    codice:
    char campo2[RIGHE][COLONNE]={
        {'B','B','B','B','B'},
        {'B','G',' ','G','B'},
        {'B','A',' ','A','B'},
        {'B','G',' ','G','B'}};
    poi + avanti nel 2° ciclo for "for(j=0;j<500;j++)" dichiaro nuovamente la struttura per far si che ad ogni iterazione vengano ripristinati i valori che ho inizializzato.. però mi sembra una cosa molto forzata e soprattutto errata XD c'è qualche altro metodo per ripristinare il valore dell'array 2D nel ciclo senza doverlo dichiarare nuovamente ogni volta come accade? ecco il pezzo a cui mi riferisco:
    codice:
    for(j=0;j<500;j++)    {                            //INIZIO for
         char  campo2[RIGHE][COLONNE]={
        {'B','B','B','B','B'},
        {'B','G',' ','G','B'},
        {'B','A',' ','A','B'},
        {'B','G',' ','G','B'}};
                                            
         palla=1+rand()%10;
         do{                                    //INIZIO REPEAT UNTIL
            r=rand()%4;
            c=rand()%5;
         }                                        //FINE REPEAT UNTIL
         while ((c == 2) && (r == 1 || r == 2 || r == 3));
                 campo2[r][c]='X';
            visualizza_mat(campo2,RIGHE,COLONNE);
    		printf("%d comb: r=%d c=%d pall=%d\n",j,r+1,c+1,palla);
    
              assegna(r,c,palla,&tennista,&simulatore);                  //chiamata alla function
                       }

    p.s. se servisse questo è il programma principale:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #define COLONNE    5
    #define RIGHE      4
    void visualizza_mat(char b[RIGHE][COLONNE],int n,int m);
    void assegna(int,int,int,int*,int*);          //prototipo della function
    struct giocatore {
           char nome[10];
           char cognome[10];
                    };
        typedef struct giocatore gt;
           int main()
           {
          
               int totT=0,totS=0,j,r,i,c,simulatore=0,tennista=0,palla,n_lanci=50000,vittorie=0,sconfitte=0,perc_respinte=0,perc_respinte2=0;
    
               gt gioc ;
    char campo2[RIGHE][COLONNE]={
        {'B','B','B','B','B'},
        {'B','G',' ','G','B'},
        {'B','A',' ','A','B'},
        {'B','G',' ','G','B'}};
               printf("Benvenuto nel programma di simulazione del gioco del tennis vuoi giocare?\n");
               visualizza_mat(campo2,RIGHE,COLONNE);
               printf("\n-- Inserisci il tuo nome -- \n");
               scanf("%s",gioc.nome);
               printf("-- Inserisci il tuo cognome -- \n");
               scanf("%s",gioc.cognome);
                   srand(time(NULL));
                   perc_respinte=(n_lanci*80)/100;
                    perc_respinte2=(500*80)/100;
    printf(">> IL GIOCO PUO' INIZIARE <<\n\n");
    
    
    for(i=0;i<100;i++){
        totT=totT+tennista;
        totS=totS+simulatore;
        tennista=0;
        simulatore=0;
    for(j=0;j<500;j++)    {                            //INIZIO for
         char  campo2[RIGHE][COLONNE]={
        {'B','B','B','B','B'},
        {'B','G',' ','G','B'},
        {'B','A',' ','A','B'},
        {'B','G',' ','G','B'}};
                                            
         palla=1+rand()%10;
         do{                                    //INIZIO REPEAT UNTIL
            r=rand()%4;
            c=rand()%5;
         }                                        //FINE REPEAT UNTIL
         while ((c == 2) && (r == 1 || r == 2 || r == 3));
                 campo2[r][c]='X';
            visualizza_mat(campo2,RIGHE,COLONNE);
    		printf("%d comb: r=%d c=%d pall=%d\n",j,r+1,c+1,palla);
    
              assegna(r,c,palla,&tennista,&simulatore);                  //chiamata alla function
                       }
                      printf("%dTennista:%d\n",i,tennista);
                      if(tennista>perc_respinte2)
                          vittorie++;
                      else
                          sconfitte++;
                                           }        //FINE for
    printf("\n-- Il giocatore ha totalizzato %d punti --\n",totT);
    printf("\n-- Il simulatore ha totalizzato %d punti --\n",totS);
    printf("\n-- Le partite vinte sono: %d quelle perse invece sono: %d --\n",vittorie,sconfitte);
    
    printf("\nPer vincere il giocatore deve totalizzare un numero di punti maggiore della \npercentuale di lanci respinti che risulta essere: %d, di conseguenza :\n",perc_respinte);
    if(totT>perc_respinte)
         printf("\n-- Hai vinto tu giocatore!! --\n");
    else
         printf("\n-- Mi dispiace hai perso, ha vinto il simulatore --\n");
    
    return 0;
    }
    
    
    void visualizza_mat(char b[RIGHE][COLONNE],int n,int m)
    {
        int i,j;
        printf("\n");
        printf("ECCO IL CAMPO DI TENNIS: \n");
        for(i=0;i<RIGHE;i++)
        {    
            for(j=0;j<COLONNE;j++)
                printf("  %c",b[i][j]);
            printf("\n");
        }
    }
    
    
    
    void assegna(int r ,int c ,int palla, int *tennista, int *simulatore)
    {
    if((r==2 && c ==1) || (r==2 && c==3))
                  (*tennista)++; 
              else if((r==1 && c==1) || (r==1 && c==3) || (r==3 && c==1) || (r==3 && c==3)){
              
                  if(palla<3)
                      (*tennista)++; 
                  else
                    (*simulatore)++;
                     }
                           
                 if(((r==0) && (c==0 || c==1 || c==2 || c==3 || c==4)) || (r==1 && c==0) || (r==1 && c==4) || (r==2 && c==0) || (r==2 && c==4) || (r==3 && c==0) || (r==3 && c==4))            
                        (*tennista)++; 
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ehilà chi si rilegge...

    Dal codice (che è un po' confuso...) mi pare di capire che ad ogni iterazione l'elemento modificato sia quello di indici r,c della matrice giusto? Puoi salvarti il valore contenuto in quella cella prima di sostituirlo e poi ripristinarlo alla fine dell'iterazione, qualcosa come

    codice:
    carattere = campo2[r][c];
    campo2[r][c] = 'X';
    ...
    ...
    campo2[r][c] = carattere;
    dove chiaramente "carattere" è definito all'inizio di tipo char.
    every day above ground is a good one

  3. #3
    hehehe che coincidenza XD cmq grazie per lo spunto non ci avevo pensato =)

    p.s. ti sembra cosi orribile il codice?XD

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    No vabbè parlavo dell'indentazione, c'è un "effetto scoliosi" che rende il tutto molto ermetico... ma forse è solo un problema di copy&paste, sennò prova a raddrizzare un po'. E lascia qualche riga bianca in più che non fa mai male.
    every day above ground is a good one

  5. #5
    heheh vabbè poi prima di consegnare devo inserire tutte le righe di commento e quando lo faccio poi sistemo un pò la visibilità del programma.. speriamo bene XD

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.