C++ DEV ERRORE SU( PUNTATORE?)

di Anonimizzato24008 il
15 risposte
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

  • Posta il codice indentato tra i tag Code e non scrivere in MAIUSCOLO!
  • #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);
                                        } }}
    
    
    
  • 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?
  • Floyd ... se ti sto rispondendo su altro forum non è molto bello scrivere contemporaneamente in questo e per giunta in un thread altrui.
  • 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.
  • Io non posso spostare nulla ma solo raccomandarti di leggere il regolamento ...
  • 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
  • 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]"?
  • +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];
    
  • C'è nessuno che sappia risolvere il problema di M22.5? Servirebbe anche a me
  • Guarda ch lui ha risolto ... vedi gli altri thread
  • Ho risolto anche io! Grazie
  • 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).
  • 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