Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    152

    [C] Parametri e printf

    ragazzi ho due problemi.
    Partiamo dal primo: quando utilizzo una funzione o procedura e voglio passare i valori, dato che c effettua solo i passaggi per valore, se voglio passarli per indirizzo ci metto l'& prima delle variabili interessate, eppur se metto l& mi da errore e mi obbliga a toglierlo.

    secondo problema : come si stampa un'informazione relativa ad una matrice ???
    E' sbagliata un'istruzione del genere ?

    codice:
     printf("%d",pos_possibili[0][j]);
     printf("%d",pos_possibili[1][j]);

  2. #2

    Re: [C] Parametri e printf

    Originariamente inviato da johnnny
    ragazzi ho due problemi.
    Partiamo dal primo: quando utilizzo una funzione o procedura e voglio passare i valori, dato che c effettua solo i passaggi per valore, se voglio passarli per indirizzo ci metto l'& prima delle variabili interessate, eppur se metto l& mi da errore e mi obbliga a toglierlo.

    secondo problema : come si stampa un'informazione relativa ad una matrice ???
    E' sbagliata un'istruzione del genere ?

    codice:
     printf("%d",pos_possibili[0][j]);
     printf("%d",pos_possibili[1][j]);
    Quando metti l'& davanti ad una variabile significa che sta passando il suo indirizzo (che è un valore numerico che indica una precisa area di memoria)
    Perciò per usarlo nella funzione che lo riceve devi specificare che quella variabile è un puntatore, con il simbolo *. Quindi nella sua implementazione dovrai sempre far riferimento a *nomevariabile, ovvero al contenuto della locazione di memoria corrispondente all'indirizzo che hai passato.

    //nel main
    funzione(&datointero)
    //nel prototipo / implementazione
    void funzione (tipo_t *datointero){
    ...
    }

  3. #3

    Re: [C] Parametri e printf

    Originariamente inviato da johnnny
    secondo problema : come si stampa un'informazione relativa ad una matrice ???
    E' sbagliata un'istruzione del genere ?

    codice:
     printf("%d",pos_possibili[0][j]);
     printf("%d",pos_possibili[1][j]);
    perfetta! così ti stampa la riga 0 colonna j, e la seconda riga e colonna j... ovviamente così non ha molto senso, se vuoi stampare tutta la matrice usa un doppio for

  4. #4
    johnnny ma sei morto??? come è andata con la matrice???

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    152
    rieccomi qui ragazzi, grazie ancora per le vostre risposte, adesso sto modificando la stampa della matrice, anche se non mi spiego il perchè non ha molto senso, così non dovrebbe stampà lo stesso tutta la matrice ?

  6. #6
    se cambi la size della matrice che succede?

    mettiamo che il tuo programma usa una matrice 3 x Y
    for(j=0; j< Y; j++){
    printf("%d", matrice[1][j])
    printf("%d", matrice[2][j])
    printf("%d", matrice[3][j])
    }

    poi un giorno decidi che la tua matrice la vuoi con 10000 righe
    che fai? Ti metti a scrivere 10mila printf?
    Se invece avessi usato due for, ti sarebbe bastato cambiare il valore del numero di righe che avrebbe fatto da condizione all'indice i

    un buon codice deve essere facilmente modificabile, comprensibile e deve potersi adattare a diverse situazioni con il numero minimo di modifiche

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    152
    ragazzi non riesco prp a farlo funzionare il programma, in output non mi visualizza nulla, se lo posto c'è qualkuno interessato a spiegrami il perchè del malfunzionamento?

  8. #8

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    152
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    
    void mosse_cavallo(int pos_iniz[],int pos_possibili[][8]);
    void controllo(int x,int y,int pos_possibili[][8]);
    
    int main()
    { int k,i,j,pos_iniz[2],pos_possibili[2][8];
         
      printf("Inserisci la riga della posizione iniziale del cavallo:\n");
      scanf("%d",&pos_iniz[0]);
      printf("Inserisci la colonna della posizione iniziale del cavallo:\n");
      scanf("%d",&pos_iniz[1]);
      mosse_cavallo(pos_iniz,pos_possibili);
      printf("Le possibili mosse del cavallo sono:\n");
      for(j=0;j<i;j++)
        
          {printf("%d",pos_possibili[0][j]);
           printf("%d",pos_possibili[1][j]);
           printf("\n");
           
       
          } 
      
      
    }
      
      
      
    void mosse_cavallo(int pos_iniz[],int pos_possibili[][8])
      { int x,y;
       x=pos_iniz[0]+1;
       y=pos_iniz[1]+2;
       controllo(x,y,pos_possibili);
       x=pos_iniz[0]+1;                                                                     /* rigo 31 */
       y=pos_iniz[1]-2;
       controllo(x,y,pos_possibili);
       x=pos_iniz[0]-1;
       y=pos_iniz[1]+2;
       controllo(x,y,pos_possibili);
       x=pos_iniz[0]-1;
       y=pos_iniz[1]-2;
       controllo(x,y,pos_possibili);
       x=pos_iniz[0]+2;
       y=pos_iniz[1]+1;
       controllo(x,y,pos_possibili);
       x=pos_iniz[0]+2;
       y=pos_iniz[1]-1;
       controllo(x,y,pos_possibili);
       x=pos_iniz[0]-2;
       y=pos_iniz[1]+1;
       controllo(x,y,pos_possibili);
       x=pos_iniz[0]-2;
       y=pos_iniz[1]-1;
       controllo(x,y,pos_possibili);
       return;
    }
      
    void controllo(int x,int y,int pos_possibili[][8])
      {int i;
       i=0;
       if((x>=0)&&(y>=0))
          { if((x<8)&&(y<8))
               {pos_possibili[0][i]=x;
                pos_possibili[1][i]=y;
                i=i+1;}
          } 
      return;
      }
    Mi da un bel loop sull'output e credo che sia perchè in quel ciclo d'output della mtrice non riconosca la i, ma non riesco a passarla per indirizzi, consigli?

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.