C++ DEV ERRORE SU( PUNTATORE?)

di il
15 risposte

C++ DEV ERRORE SU( PUNTATORE?)

SALVE VI POSTO IL CODICE DI UN ESERCIZIO DI PROGRAMMAZIONE:
Si sviluppi un programma che consente di stampare a video gli studenti che hanno preso un voto maggiore ad uno dato. Il programma deve essere strutturato nel seguente modo:

1. struttura studente (nome, cognome, votoesameelementi)

2. funzione capace di stampare uno studente

3. funzione che costruisce un vettore di studenti con voto maggiore di uno dato.

Sviluppate le 3 funzioni, il main deve fare inserire un vettore di studenti, utilizzando la funzione di stampa, stampare i primi due studenti inseriti.

Stampare a video tutti gli studenti (solo cognome) con voto maggiore di un voto inserito da tastiera.

Infine si sviluppi una funzione

4. funzione capace di cercare uno specifico studente (cognome oppure nome).

Il main richiamando la funzione 4 deve cercare e stampare lo studente cercato (con il voto di esame)


#include<iostream>
#include<stdlib.h>
#include<string.h>
#define N 10
#define C 10
using std::cin;
using std::cout;
typedef struct studente
{int voto;
char nome[N],cognome[C];
}array;

void stampa(int,array,int);
array costruzionearray(int,array,int,int);
void ricerca(int,array);

int main()
{int n,i,c=0,elemento,j,f=0;
cout<<" \n inserire il n* totale di studenti ";
cin>>n;
array agenda[n];
for(i=0;i<n;i++)
{cout<<" \n inserire i dati del "<<i+1<<" * studente\n";
cout<<"nome: ";
cin>>agenda.nome;
cout<<"\n cognome: ";
cin>>agenda.cognome;
cout<<" \n inserire voto esame: ";
cin>>agenda.voto;
}
stampa(n,*agenda,c);
c++;
stampa(n,*agenda,c);
cout<<" \n inserire discriminante \n";
cin>>elemento;
for(j=0;j<n;j++)
{if(agenda[j].voto>= elemento)
{f++;
}
}
costruzionearray(n,*agenda,elemento,f);
ricerca(n,agenda);
}


void stampa(int n,array *prova,int w)
{cout<<"\n dati del "<<w+1<<" * studente \n";
cout<<"\n nome: "<<prova[w].nome;
cout<<" \n cognome: "<<prova[w].cognome;
cout<<"\n voto: "<<prova[w].voto;
}


array costruzione_array (int n, array *agenda,int &elemento,int &f)
{array B[f];
int k,l=0,h;
for(k=0;k<n;k++)
{if (agenda[k].voto>= elemento)
{strcpy(B[l].nome,agenda[k].nome);
strcpy(B[l].cognome,agenda[k].cognome);
B[l].voto= agenda[k].voto;
l++;
}
}
for(h=0;h<f;h++)
{stampa(f,*B,h);
}
}


void ricerca(int n,array *agenda)
{char L[N],Q[C];
int x;
cout<<"\n inserire nome da ricercare : ";
cin>>L;
cout<<"\n inserire cognome da ricercare: ";
cin>>Q;
for(x=0;x<n;x++)
{if(agenda[x].nome==L && agenda[x].cognome==Q)
{stampa(n,*agenda,x);
}
}
}

IL PROBLEMA CHE INCONTRO (NON AVENDO ESPERIENZA SUI PUNTATORI E' IL PASSAGGIO DEL RECORD AGENDA,CHE MI VIENE SEGNALATO COME ERRORE (A QUANTO NE ABBIA CAPITO)
42 17 C:\Users\marco\Desktop\esempio esame rivisitato806201816e42.cpp [Error] could not convert '(array*)(& agenda)' from 'array* {aka studente*}' to 'array {aka studente}'

COME POSSO RISOLVERE?
GRAZIE IN ANTICIPO PER LA PAZIENZA =)

15 Risposte

  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Posta il codice indentato tra i tag Code e non scrivere in MAIUSCOLO!
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    #include<iostream>
    #include<stdlib.h>
    #include<string.h>
    #define N 10
    #define C 10
    using std::cin;
    using std::cout;
    typedef struct studente
                           {int voto;
                            char nome[N],cognome[C];
                             }array;
    
    void stampa(int,array,int);
    array costruzionearray(int,array,int,int);
    void ricerca(int,array);
    
    int main()
                {int n,i,c=0,elemento,j,f=0;
                 cout<<" \n inserire il n* totale di studenti ";
                 cin>>n;
                 array agenda[n];
                 for(i=0;i<n;i++)
                      {cout<<" \n inserire i dati del "<<i+1<<" * studente\n";
                       cout<<"nome: ";
                       cin>>agenda[i].nome;
                       cout<<"\n cognome: ";
                       cin>>agenda[i].cognome;
                       cout<<" \n inserire voto esame:  ";
                       cin>>agenda[i].voto;
                                           }
    
                stampa(n,*agenda,c);
                c++;
                stampa(n,*agenda,c);
                cout<<" \n inserire discriminante \n";
                cin>>elemento;
                for(j=0;j<n;j++)
                      {if(agenda[j].voto>= elemento)
                            {f++;
                                 }
                      }
                costruzionearray(n,*agenda,elemento,f);
                ricerca(n,agenda );}
    
    void stampa(int n,array *prova,int w)
       {cout<<"\n dati del "<<w+1<<" * studente \n";
        cout<<"\n nome: "<<prova[w].nome;
        cout<<" \n cognome: "<<prova[w].cognome;
        cout<<"\n voto: "<<prova[w].voto;
         }
    
    array costruzione_array (int n, array *agenda,int &elemento,int &f)
    {array B[f];
    int k,l=0,h;
        for(k=0;k<n;k++)
          {if (agenda[k].voto>= elemento)
               {strcpy(B[l].nome,agenda[k].nome);
                strcpy(B[l].cognome,agenda[k].cognome);
                B[l].voto= agenda[k].voto;
                l++;
                }
          }
        for(h=0;h<f;h++)
           {stampa(f,*B,h);
                           }}  
    
    void ricerca(int n,array *agenda)
    { char L[N],Q[C];
      int x;
      cout<<"\n inserire nome da ricercare : ";
      cin>>L;
      cout<<"\n inserire cognome da ricercare:  ";
      cin>>Q;
      for(x=0;x<n;x++)
              {if(agenda[x].nome==L && agenda[x].cognome==Q)
                   {stampa(n,*agenda,x);
                                        } }}
    
    
    
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Ho lo stesso tipo di esercizio da risolvere!
    Per ora, ho scritto tale codice
    
    #include <iostream>
    
    
    using namespace std;
    
    
    struct studente
    {
    char nome[20];
    char cognome[20];
    int votoesameelementi;
    };
    
    
    void stampa_studente(studente a[], int indice)
    {
    cout << " Il nome dello studente è : " << a[indice].nome << endl;
    cout << " Il cognome dello studente è : " << a[indice].cognome << endl;
    cout << " Il voto dello studente è : " << a[indice].votoesameelementi << endl;
    
    
    }
    
    
    void costruisci_vettore(studente a[], studente b[], int voto_dato, int indice)
    {
        for(int i=0; i<indice; i++)
        {
            if(a[i].votoesameelementi > voto_dato)
            {
                b[i].votoesameelementi = a[i].votoesameelementi;
                for(int c=0; a[i].nome[c] =! '0'; c++)
                {
                    b[i].nome[c] = a[i].nome[c];
                }
                for(int d=0; a[i].cognome[d] =! '0'; d++)
                {
                    b[i].cognome[d]=a[i].cognome[d];
                }
    
    
                }
        }
    }
    
    
    
    
    void stampa_voto_dato(studente a[], int voto_dato, int indice)
    {
          if (a[indice].votoesameelementi > voto_dato)
           {
            cout << " Uno studente con il voto maggiore rispetto al voto dato è lo studente di cognome : " << a[indice].cognome << endl;
           }
     }
    
    
    void ricerca_studente(studente a[], int dim)
    {
    char surname[20];
    cout<< " Inserisci cognome da ricercare : ";
    cin>>surname;
    for(int indice=0; indice<dim; indice++)
    {
    if(a[indice].cognome==surname)
    {
    cout << " I dati dello studente cercato sono : " << endl << a[indice].nome << endl << a[indice].cognome << endl << a[indice].votoesameelementi << endl;
    }
    }
    }
    
    
    int main()
    {
        int n=0;
        cout << " Quanti sono gli studenti ? ";
        cin >> n;
        studente a[n];
         // Inserisci informazioni
        for(int i = 0; i < n; i++)
        {
            cout << " Per lo studente numero " << i+1 << endl;
    
    
            cout << " Inserisci nome : ";
            cin >> a[i].nome;
    
    
            cout << " Inserisci cognome : ";
            cin >> a[i].cognome;
    
    
            cout << " Inserisci voto : ";
            cin >> a[i].votoesameelementi;
    
    
            cout << endl;
        }
    
    
     //Stampa informazioni dei primi due studenti inseriti
    for (int i=0; i<=1; i++)
      {
        cout << " Dati dello studente " << i+1 << " : " << endl;
        stampa_studente(a, i);
        cout << endl;
      }
    
    
     //Stampa studenti con voto maggiore di un dato voto
    int voto_minimo;
    cout << " Inserisci voto minimo : ";
    cin >> voto_minimo;
    for (int i=0; i<n; i++)
    {
        stampa_voto_dato(a, voto_minimo, i);
    }
    
    
    //Ricerca di uno studente
    ricerca_studente(a, n);
    
    
    return 0;
    
    
    }
    
    Tuttavia, quello di M22.5 mi sembra migliore; dunque, come è possibile risolvere il problema che gli si presenta?
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Floyd ... se ti sto rispondendo su altro forum non è molto bello scrivere contemporaneamente in questo e per giunta in un thread altrui.
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Va bene oregon, chiedo scusa, ti avevo inviato anche un MP dicendo di spostare la conversazione qui, dal momento che avevo notato qualcuno che aveva postato il mio stesso problema. Comunque il codice di M22.5 mi sembra scritto meglio e inoltre presenta solo quel problema, a questo punto aspetto una tua risposta a M22.5, senza aprire un altro thread su un argomento identico.
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Io non posso spostare nulla ma solo raccomandarti di leggere il regolamento ...
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Scusami, mi sono espresso male, intendevo dire che a questo punto è inutile continuare la conversazione sull'altro forum in quanto c'è già qualcuno col mio stesso esercizio qui che ha pubblicato un codice più completo, quindi aspetto una tua risposta a M22.5
    P.S. Ho compreso qual è il problema di M22.5, dovrebbe riguardare il passaggio dei valori, ma anche io non capisco come risolverlo
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Visto che si tratta di codice C (e non C++, o meglio non c'è nulla di C++), vorrei sottoporre all'attenzione il modo di definire vettori di qualcosa (struct in questo caso).
    Si può avere una definizione esplicita (vettore di 100 elementi), ma come si definisce un vettore di K elementi (con K variabile) ?

    Inoltre se chiamiamo "agenda" il vettore, cosa sarà "agenda"? "*agenda"?, "&agenda", "agenda[0]", "&agenda[0]"?
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    +m2+ ha scritto:


    Visto che si tratta di codice C (e non C++, o meglio non c'è nulla di C++), vorrei sottoporre all'attenzione il modo di definire vettori di qualcosa (struct in questo caso).
    Si può avere una definizione esplicita (vettore di 100 elementi), ma come si definisce un vettore di K elementi (con K variabile) ?

    Inoltre se chiamiamo "agenda" il vettore, cosa sarà "agenda"? "*agenda"?, "&agenda", "agenda[0]", "&agenda[0]"?
    Questo è un codice in C++.
    Per definire un array di dimensione variabile, si può chiedere all'utente la sua dimensione, in questo modo:
    
    int dim;
        cout << " Inserisci dimensione array : " << endl;
        cin >> dim;
    
        int array[dim];
    
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    C'è nessuno che sappia risolvere il problema di M22.5? Servirebbe anche a me
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Guarda ch lui ha risolto ... vedi gli altri thread
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Ho risolto anche io! Grazie
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Ho un solo dubbio: a che serve creare una funzione che costruisce un vettore di studenti con voto maggiore di uno dato (come richiesto dall'esercizio)? E' solamente una cosa in più? Perché che io la metta o non la metta nel main, non cambia nulla (infatti l'esercizio dice che il main deve assolvere a degli specifici compiti, ma non viene nominata la funzione che costruisce un vettore di studenti con voto maggiore di uno dato).
  • Re: C++ DEV ERRORE SU( PUNTATORE?)

    Cioè, il compito della funzione è di COSTRUIRE un vettore di studenti, non di STAMPARE. Dunque, è solamente un punto dell'esercizio per verificare la capacità dell'allievo nel creare una tale funzione?
Devi accedere o registrarti per scrivere nel forum
15 risposte