Esercizi banali struct

di il
7 risposte

Esercizi banali struct

Ragazzi devo comprendere il funzionamento delle struct,

mi postate qualche esercizio banale con relativa spiegazione?

7 Risposte

  • Re: Esercizi banali struct

    struct ABC {
        int a, b, c;
    }; // Dichiara una struct composta da 3 int
    
    int main(void) {
        ABC obj; // Dichiara una variabile con la struttura di ABC (contiene a, b e c)
    
        obj.a = 1;
        obj.b = 3;
        obj.c = 82; // Dà i valori ai 3 componenti della variabile obj.
    
        return 0;
    }
  • Re: Esercizi banali struct

    Una Struct (o meglio, un 'Record') è una struttura nella quale è possibile inserire dei dati. La differenza sostanziale con i Vettori (mono o bi-dimensionali) è che in questa struttura è possibile dichiarare variabili di diverso tipo, cosa che non era possibile fare con i Vettori. Ad esempio qui potrò scrivere:
    struct Studente {
           char nome[15];
           char cognome[15];
           float media_voti;
    };                   
    
    Nota: in questa struttura ho dichiarato dati sia di tipo int che di tipo float. In un vettore avrei potuto dichiarare solo una tipologia di dato, no?
    int Vettore[100];
    Una volta vista questa importante caratteristica, diciamo subito che possiamo vedere i record come vere e proprie tabelle che mantengono i dati (quando studierai i FILE vedrai che torneranno davvero utili). Bene, una volta definite delle tipologie dei nostri dati come possiamo accederci? O meglio: come possiamo inserirci dei dati? Per fare ciò, una volta dichiarata una struttura, bisognerà dichiarare una variabile del tipo del record. Nel caso precedente, dovremo scrivere:
    
    struct Studente {
           char nome[15];
           char cognome[15];
           float media_voti;
    };  
    
    Studente accedi;      
    
    Ora la variabile accedi, combinata con un Dot Notation, potrà, appunto, accedere a qualunque campo del record. Vediamo un esempio. Chiediamo in input questa serie di dati (premettendo di aver dichiarato la struttura riportata sopra come struttura globale):
    void funzione_input () {
    cout <<"Inserisci il tuo nome."<<endl;
    cin >> accedi.nome;
    cout <<"Inserisci il tuo cognome."<<endl;
    cin >> accedi.cognome;
    cout <<"Inserisci la tua media generale."<<endl;
    cin >> accedi.media_voti;
    cout <<"Hai detto di essere "<<accedi.nome<<" "<<accedi.cognome<<" e di avere una media pari a: "<<accedi.media_voti<<endl;
    return;
    }
    Quindi per accedere ad un campo bisognerà usare la seguente sintassi:
    
    <tipo_record>.<nome_campo_record>;
    
    E' anche possibile effettuare operazioni di assegnazione tra i campi di un record (nel C++). Notare il seguente esempio:
    struct esempio {
       int numero1;
       int numero2;
       int numero3;
    };
    esempio accedi;
    
    int main ()  {
       accedi.numero1 = 2;
       accedi.numero2 = 2;
       accedi.numero3 = accedi.numero2 + accedi.numero1;
       cout <<accedi.numero3;
       system ("Pause");
       return 0;
    }
    
    Sostanzialmente ciò che c'è da sapere è questo. Ovviamente potrai anche creare array di record.

    Spero di esserti stato utile. Ciao!
  • Re: Esercizi banali struct

    Mauri ha scritto:


    S. : It's very simple. Look -- Scissors cuts Paper, Paper covers Rock. Rock crushes Lizard, Lizard poisons Spock. Spock smashes Scissors, Scissors decapitates Lizard. Lizard eats Paper, Paper disproves Spock, Spock vaporizes rock, and as it always has, Rock crushes Scissors.
    R. : ..Okay. I think I got it.
    TBBT.
  • Re: Esercizi banali struct

    Haha, you're right. =D
  • Re: Esercizi banali struct

    Mauri ha scritto:


    Una Struct (o meglio, un 'Record') è una struttura nella quale è possibile inserire dei dati. La differenza sostanziale con i Vettori (mono o bi-dimensionali) è che in questa struttura è possibile dichiarare variabili di diverso tipo, cosa che non era possibile fare con i Vettori. Ad esempio qui potrò scrivere:
    struct Studente {
           char nome[15];
           char cognome[15];
           float media_voti;
    };                   
    
    Nota: in questa struttura ho dichiarato dati sia di tipo int che di tipo float. In un vettore avrei potuto dichiarare solo una tipologia di dato, no?
    int Vettore[100];
    Una volta vista questa importante caratteristica, diciamo subito che possiamo vedere i record come vere e proprie tabelle che mantengono i dati (quando studierai i FILE vedrai che torneranno davvero utili). Bene, una volta definite delle tipologie dei nostri dati come possiamo accederci? O meglio: come possiamo inserirci dei dati? Per fare ciò, una volta dichiarata una struttura, bisognerà dichiarare una variabile del tipo del record. Nel caso precedente, dovremo scrivere:
    
    struct Studente {
           char nome[15];
           char cognome[15];
           float media_voti;
    };  
    
    Studente accedi;      
    
    Ora la variabile accedi, combinata con un Dot Notation, potrà, appunto, accedere a qualunque campo del record. Vediamo un esempio. Chiediamo in input questa serie di dati (premettendo di aver dichiarato la struttura riportata sopra come struttura globale):
    void funzione_input () {
    cout <<"Inserisci il tuo nome."<<endl;
    cin >> accedi.nome;
    cout <<"Inserisci il tuo cognome."<<endl;
    cin >> accedi.cognome;
    cout <<"Inserisci la tua media generale."<<endl;
    cin >> accedi.media_voti;
    cout <<"Hai detto di essere "<<accedi.nome<<" "<<accedi.cognome<<" e di avere una media pari a: "<<accedi.media_voti<<endl;
    return;
    }
    Quindi per accedere ad un campo bisognerà usare la seguente sintassi:
    
    <tipo_record>.<nome_campo_record>;
    
    E' anche possibile effettuare operazioni di assegnazione tra i campi di un record (nel C++). Notare il seguente esempio:
    struct esempio {
       int numero1;
       int numero2;
       int numero3;
    };
    esempio accedi;
    
    int main ()  {
       accedi.numero1 = 2;
       accedi.numero2 = 2;
       accedi.numero3 = accedi.numero2 + accedi.numero1;
       cout <<accedi.numero3;
       system ("Pause");
       return 0;
    }
    
    Sostanzialmente ciò che c'è da sapere è questo. Ovviamente potrai anche creare array di record.

    Spero di esserti stato utile. Ciao!


    tutto chiaro, solo non capisco alcune cose:

    il nostro professore ci ha fatto una cosa del genere:

    nel file.h (l'header del progetto)
    ha usato

    typedef struct {
    stringa nome;
    stringa cell;
    stringa fisso;
    } anagrafe;

    o addirittura, non vorrei confondermi così

    typedef struct nome_struct {
    stringa nome;
    stringa cell;
    stringa fisso;
    } anagrafe;

    sono sbagliati?, ho preso male io gli appunti, oppure è un altro modo di scriverli?
  • Re: Esercizi banali struct

    E' la stessa cosa ma in uno dà il nome allo struct (nome_struct) e l'altro rimane anonimo, cioè senza nome. Quello senza nome quindi non può essere riusato in seguito.
  • Re: Esercizi banali struct

    Ho fatto questo esercizio per allnearmi:

    un programma che gestisce la formazione di una squadra
    
    
    #include <iostream>
    using namespace std;
    
    struct schema
    
    {	
    	string	portiere;
    		
    	
           string 	difensore[4]; //vettore contenente i giocatori , forse sta proprio qui l'errore
    	
    		
    	string 	centrocampista[4];
    		
    	
    	string 	attaccante[3];
    		
    };
    
    
    
    schema ruolo; //dichiaro la variabile ruolo di tipo schema
    
    
    
    
    
    int main (int argc, char * const argv[]) {
    	
    	string squadra;
    	
    	
    	
    	int d,c,a; /sono gli indici per i cicli for (max giocatori per : difesa, centro e  attacco)
    	
    	
    	
    	
     
    	cout << "\n     *****     Salve, benvenuto nel programma per la gestione della tua squadra, inserisci il nome della squadra :     ***** \n";
    	
    cin>>squadra;
    	
    	cout <<"Inserire il nome del portiere ";
    			cin>>ruolo.portiere;
    	
    	
    	
    	cout <<"\n quanti difensori voui schierare in campo ? ";
    	cin>>d;
    	cout<<"\n Inserire nomi difensori ";
    
    		for(int i=0;i<d;i++)
    		{
    			
    			cin>>ruolo.difensore[i];  
    		}
    	
    	
    	
    	cout <<"\n quanti centrocampisti voui schierare in campo ? ";
    	cin>>c;
    	
    		cout<<"\n inserire nomi centrocampisti ";
    		for(int i=0;i<c;i++)
    		{
    		
    			cin>>ruolo.centrocampista[i];
    		}
    	
    	
    	
    	cout <<"\n quanti attaccanti voui schierare in campo ? ";
    	cin>>a;
    	cout<<"\n inserire nomi attaccanti ";
    
    		for(int i=0;i<a;i++)
    	{
    		cin>>ruolo.attaccante[i];
    	}
    	
    	
    	
    	cout << "\n     *****     Stampa della squadra     *****";	
    	
    	
    	cout << "\n \n \n-----     "<<squadra <<"     -----";
    	
    	
    	for(int i=0;i<d;i++)
    	{
    		cout<<"\n "<<ruolo.difensore;
    	}
    	
    	
    	
    	for(int i=0;i<c;i++)
    	{
    		cout<<"\n "<<ruolo.centrocampista;
    	}
    	
    	
    	
    	for(int i=0;i<a;i++)
    	{
    		cout<<"\n "<<ruolo.attaccante;
    	}
    	
    	
    }
Devi accedere o registrarti per scrivere nel forum
7 risposte