Funzione che restituisce array bidemensionale

di il
16 risposte

Funzione che restituisce array bidemensionale

Ho creato 3 funzioni:
la prima funzione mostra gli elementi del array
la seconda funzione modifica l'array
la terza(che sarebbe la prima) modifica l'array, chiama la seconda funzione che ri modifica l'array e poi la terza che mostra l'array. Però le modifiche fatte nella seconda funzione non vengono mostrate nella prima funzione. ho provato a far restituire l'array ma mi dava errore, Come fare???? è tutto il giorno che


è possibile restituire piu di un valore dalla stessa funzione???


GRAZIE PER LE RISPOSTE

16 Risposte

  • Re: Funzione che restituisce array bidemensionale

    Senza vedere il codice delle funzioni e il main è impossibile risponderti ...
  • Re: Funzione che restituisce array bidemensionale

    oregon ha scritto:


    Senza vedere il codice delle funzioni e il main è impossibile risponderti ...
    io te lo posterei il codice ma sono piu di 200 righe sto cercando di creare un programma per giocare a dama
  • Re: Funzione che restituisce array bidemensionale

    Non riesci a fornire un sscce?
  • Re: Funzione che restituisce array bidemensionale

    A me non interessano tutte le tue 200 righe ma solo le 3 funzioni di cui parli e solamente le parti delle 3 funzioni che servono a capire il problema che hai con gli array.

    Senza il codice comunque, il problema purtroppo non lo risolverai perché non ti si può dire nulla di sensato.
  • Re: Funzione che restituisce array bidemensionale

    ..
  • Re: Funzione che restituisce array bidemensionale

    Scusate se ho postato solo ora il codice.

    questa è la dichiarazione del array e delle funzioni
    void display(int[][9], int);
    string benvenuto();
    void gioco(int[][9], int);
    void mossecomputer(int[][9], int);
    
    
    int main()
    {
        const int caselle = 9;
        int scacchiera[caselle][caselle] = 
       {{0, 0, 0, 0, 0, 0, 0, 0, 0},     
        {0, 1, 0, 1, 0, 1, 0, 1, 0}, 
        {0, 0, 1, 0, 1, 0, 1, 0, 1}, 
        {0, 1, 0, 1, 0, 1, 0, 1, 0}, 
        {0, 0, 5, 0, 5, 0, 5, 0, 5}, 
        {0, 5, 0, 5, 0, 5, 0, 5, 0}, 
        {0, 0, 2, 0, 2, 0, 2, 0, 2}, 
        {0, 2, 0, 2, 0, 2, 0, 2, 0}, 
        {0, 0, 2, 0, 2, 0, 2, 0, 2}};
    QUESTA è LA PRIMA FUNZIONE CHE RICHIAMA LE ALTRE :
    void gioco(int scacchiera[][9], int caselle)
    {
                
          while(pedinecom > 0 || pedinemie > 0){
                for(int i = 0; i < 2; i++){
                    int riga, colonna;
                    cout << "\n\nQUALE PEDINA VUOI SPOSTARE...";
                    cin >> riga >> colonna;
                    int pedina = scacchiera[riga][colonna];
                    switch(pedina){
                           case 5:
                                cout << "\nnon c'è nulla li" << endl;
                                continue;
                           case 0:
                                cout << "\nzona morta" << endl;
                                continue;
                           case 2:
                                cout << "\npedina dell'avversario" << endl;
                                continue;
                    }
                    int ri, co;
                    cout << "\n\nDOVE LA VUOI SPOSTARE...";
                    cin >> ri >> co;
                    int nemico1, nemico2;
                    int mossa = scacchiera[ri][co];
                    if (co < colonna){
                       nemico1 = scacchiera[ri - 1][co - 1];
                    }
                    if (co > colonna){
                       nemico2 = scacchiera[ri - 1][co + 1];
                    }
                    switch(mossa){
                           case 0:
                                cout << "\nzona morta" << endl;
                                continue;
                           case 2:
                                cout << "\nc'è una pedina dell'avversario" << endl;
                                continue;
                           case 1:
                                cout << "\nc'è una vostra pedina" << endl;
                                continue;
                           case 5:
                                if (co == colonna - 2 && ri == riga + 2 && nemico1 == 2){
                                    scacchiera[riga][colonna] = 5;
                                    scacchiera[ri - 1][co - 1] = 5;
                                    scacchiera[ri][co] = 1;
                                    pedinecom--;
                                    cout << "\nbravo hai mangiato una pedina" << endl;
                                }
                                
                                if (co == colonna + 2 && ri == riga + 2 && nemico2 == 2){
                                    scacchiera[riga][colonna] = 5;
                                    scacchiera[ri - 1][co + 1] = 5;
                                    scacchiera[ri][co] = 1;
                                    pedinecom--;
                                    cout << "\nbravo hai mangiato una pedina" << endl;
                                }
                                if (ri == riga + 1 && co == colonna - 1 || co == colonna + 1){
                                    scacchiera[riga][colonna] = 5;
                                    scacchiera[ri][co] = 1;
                                    cout << "\nhai spostato la pedina" << endl;
                                }
                                if (ri == riga - 1){
                                    cout << "\nnon puoi tornare indietro" << endl;
                                }
                    }
                    mossecomputer(scacchiera, caselle);
                    display(scacchiera, caselle);
                }
       
          }
    }    
    LA SECONDA CHE SERVE A MUOVERE LE PEDINE DEL COMPUTER
    void mossecomputer(int scacchiera[][9], int caselle)
    {
        srand(time(0));
        for (int k = 0; k < caselle; k++){                         // questi due for servono per vedere se ci sono 
             for (int j = 0; j < caselle; j++){                     // pedina da mangiare se si le mangia e finisce 
                  int mangia = scacchiera[k][j];                 // la funzione 
                  int rig = k;
                  int col = j;
                  if (mangia == 2){
                      if (scacchiera[rig + 1][col + 1] == 1){                              
                          if (scacchiera[rig + 2][col + 2] == 5){
                              scacchiera[k][j] = 5;
                              scacchiera[rig + 1][col + 1] = 5;
                              scacchiera[rig + 2][col + 2] = 2;
                              pedinemie --;
                              cout << "\nti ho mangiato una pedina" << endl;
                              break;
                          }
                      }
                      if (scacchiera[rig +1][col - 1] == 1){
                          if (scacchiera[rig + 2][col -2] == 5){
                              scacchiera[k][j] = 5;
                              scacchiera[rig + 1][col - 1] = 5;
                              scacchiera[rig + 2][col - 2] = 2;
                              pedinemie --;
                              break;
                              cout << "\ti ho mangiato una pedina" << endl;
                          }
                      }
                  }
             }
        }
        int turni = 2;
        while (turni > 0){
               int colonna = 1 + rand () % 8;
               int riga = 1 + rand () % 8;
               int pedina = scacchiera[riga][colonna];
               switch (pedina){
                       case 1:
                            continue;
                       case 5:
                            continue;
                       case 0:
                            continue;
                       case 2:
                            turni --;
               }
               int co = 1 + rand () % 8;
               int ri = 1 + rand () % 8;
               int mossa = scacchiera[ri][co];
               switch (mossa){
                       case 1:
                            continue;
                       case 2:
                            continue;
                       case 0:
                            continue;
                       case 5:
                            if (ri == riga + 1 && co == colonna + 1 || co == colonna - 1){
                                scacchiera[riga][colonna] = 5;
                                scacchiera[ri][co] = 2;
                                turni --;
                                cout << "ho spostato la pedina da " << riga << " " << colonna << " in " << ri << " " << co;
                            }
               }
             
             
             
        }
             
                   
    }           
    E LA TERZA PER VEDERE LA SCACCHIERA
    void display(int sca[][9], int cas)
    {
         for (int c = 1; c < 9; c++){
              cout << "      " << c;
              }
         cout << "\n\n    ------------------------------------------------------" << endl;
         for(int i = 1; i < cas; i++){
             cout << " " << i << " ";            
             for (int o = 1; o < cas; o++){
                  cout << " | " << sca[i][o] << " | ";
             }
             cout << "\n    ------------------------------------------------------" << endl << endl;
         }
    }
    grazie per l'aiuto che mi state dando ieri sera stavo per distruggere il computer
  • Re: Funzione che restituisce array bidemensionale

    Prima di tutto, perché nella visualizzazione i cicli partono da 1
    
    for(int i = 1; i < cas; i++){
    
    for (int o = 1; o < cas; o++){
    
    visto che l'array comunque parte da 0

    ?
  • Re: Funzione che restituisce array bidemensionale

    oregon ha scritto:


    Prima di tutto, perché nella visualizzazione i cicli partono da 1
    
    for(int i = 1; i < cas; i++){
    
    for (int o = 1; o < cas; o++){
    
    visto che l'array comunque parte da 0

    ?
    perchè volevo che il giocatore scegliesse le pedine partendo dalla colonna 1 e riga 1 infatti le caselle di una dama sono 8 e non 9. La riga e colonna 0 non le ho contate ... solo quando avevo quasi finito il programma ho pensato che potevo scalare di 1 il valore inserito dal giocatore, ma ormai avevo fatto cosi
  • Re: Funzione che restituisce array bidemensionale

    ultrasound91 ha scritto:


    provo a darti una risposta teorica, visto che ho già affrontato e superato il problema:
    le funzioni posso o non avere valore di ritorno (void) o ritornare un valore di un determinato tipo.
    se per esempio hai una funzione che elabora una coppia di coordinate x y , due sono le possibili strade:
    - chiami la funzione, e fai in modo che restituisca i valori serializzati, esempio una stringa contenente i valori 13,40, che poi nel main dovrai separare in 13 e 40 ;
    - alla funzione passi l'indirizzo di un array, quindi la funziona inserirà i valori nell'array e dal main li potrai leggere

    l'indirizzo di un array è un puntatore ??
  • Re: Funzione che restituisce array bidemensionale

    Ok, ma quindi cosa non va?

    Ho fatto qualche prova e funziona ...
  • Re: Funzione che restituisce array bidemensionale

    oregon ha scritto:


    Ok, ma quindi cosa non va?

    Ho fatto qualche prova e funziona ...
    come ti funziona ?? a me non mi mostra le mosse fatte dal computer.
  • Re: Funzione che restituisce array bidemensionale

    Io ho provato solamente a modificare la matrice e visualizzare le modifiche.

    Del resto non posso provare il gioco perché il main non c'è.
  • Re: Funzione che restituisce array bidemensionale

    Ma non è che per caso stai usando dev-c++?


    Inviato dal mio iPhone utilizzando Tapatalk
  • Re: Funzione che restituisce array bidemensionale

    Negatissimo ha scritto:


    Ma non è che per caso stai usando dev-c++?


    Inviato dal mio iPhone utilizzando Tapatalk


    si perchè??
Devi accedere o registrarti per scrivere nel forum
16 risposte