Passaggio valore Array di Struct a Struct

di il
8 risposte

Passaggio valore Array di Struct a Struct

Salve a tutti devo fare un semplice programma devo prendere da file i nomi i cognomi e gli stipendi di professori e capire chi tra questi è quello più alto.
Questo è il mio file text:
Carlo Alberti 1500
Franco De rossi 2000
Alberto Ferrante 5200
Sandro Sandri 3000

Queste sono le mie librerie :
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <cstring>

#define STR_MAX 100
#define DIM_MAX 100

using namespace std;

typedef char Stringa [STR_MAX];

typedef struct{
	
	int Stipendio;
	Stringa Nome;
	Stringa Cognome;
	
}Professori;

typedef Professori Docenti[DIM_MAX];

void carica_stipendi(Stringa, fstream &f, int *, Docenti );
void stampa_stipendi(const Docenti ,int );
void confronta_stipendi(const Docenti,int ,Professori);
Queste sono le mie funzioni:
#include"impiegatlib.h"

void carica_stipendi(Stringa name, fstream &f, int *size, Docenti prof){
	
	int i=0;

	cout<<"\nScrivi il nome del file che vuoi aprire: ";
	cin.getline(name,STR_MAX-1,'\n');
	f.open(name,ios::in);
	
		if(!f)	{
		cout<<"\nErrore durante l'apertura del file...";

		exit(1);

	}
	else{
	
		while(!f.eof()){
			f>>prof[i].Nome;
			f>>prof[i].Cognome;
			f>>prof[i].Stipendio;
			
			i++;
		}
		
		i--;
	
	}
	
	*size=i;
	f.close();

}

void stampa_stipendi(const Docenti insegnanti,int d){

	for(int i=0; i<d; i++)

	{

		cout<<insegnanti[i].Nome<<" "<<insegnanti[i].Cognome<<" "<<insegnanti[i].Stipendio<<endl;

	}

	cout<<endl;

}

void confronta_stipendi( Docenti professori, int d, Professori max){
	
	for(int i=0; i<d; i++){
		
		if(professori[i].Stipendio>professori[i+1].Stipendio){
		
		max.Nome=professori[i].Nome;/* Quello che vorrei fare e far scorrere questo array di strcut 
		e passare il valore più alto ad una struct che manterrà il valore più alto e me lo stampa a video */
		max.Cognome=professori[i].Cognome;
		max.Stipendio=professori[i].Stipendio;
		
		}
			cout<<"Il professore con lo stipendio maggiore è: "<<max.Nome<<" "<<max.Cognome<<"\n con uno stipendio di: "<<max.Stipendio<<endl;
	}
	
}
Questo è il mio main:
#include "impiegatlib.h"

int main(){
	fstream f;
	int dim, size;
	Docenti dati;
	Professori stipendio_massimo;
	Stringa nome_file;
	
	carica_stipendi(nome_file, f, &dim, dati);
	stampa_stipendi(dati, dim );
	confronta_stipendi(dati, dim, stipendio_massimo);
	
}

8 Risposte

  • Re: Passaggio valore Array di Struct a Struct

    Se vuoi passare la struttura dal main, passala per puntatore.
  • Re: Passaggio valore Array di Struct a Struct

    oregon ha scritto:


    Se vuoi passare la struttura dal main, passala per puntatore.
    Cosi però non capisco mi dici che parte di codice intenti? mi dici tu come scriveresti?
    p.s. ho fatto una prova ma non mi funziona lo stesso e non so se ho fatto come tu mi dici di fare
  • Re: Passaggio valore Array di Struct a Struct

    Se nel main hai la variabile stipendio_massimo e la passi alla funzione fallo per puntatore

    confronta_stipendi(dati, dim, &stipendio_massimo);

    e subito dopo metti la cout che avevi nella funzione, ovvero

    cout<<"Il professore con lo stipendio maggiore è: "<<stipendio_massimo.Nome<<" "<<stipendio_massimo.Cognome<<"\n con uno stipendio di: "<<stipendio_massimo.Stipendio<<endl;

    Ovviamente dovrai modificare la funzione mentre la copia della struttura in max sarà semplicemente

    *max = professori;
  • Re: Passaggio valore Array di Struct a Struct

    oregon ha scritto:


    Se nel main hai la variabile stipendio_massimo e la passi alla funzione fallo per puntatore

    confronta_stipendi(dati, dim, &stipendio_massimo);

    e subito dopo metti la cout che avevi nella funzione, ovvero

    cout<<"Il professore con lo stipendio maggiore è: "<<stipendio_massimo.Nome<<" "<<stipendio_massimo.Cognome<<"\n con uno stipendio di: "<<stipendio_massimo.Stipendio<<endl;

    Ovviamente dovrai modificare la funzione mentre la copia della struttura in max sarà semplicemente

    *max = professori;


    Tu dici così giusto?

    Questa è la libreria:
    #include <iostream>
    #include <cstdlib>
    #include <fstream>
    #include <cstring>
    
    #define STR_MAX 100
    #define DIM_MAX 100
    
    using namespace std;
    
    typedef char Stringa [STR_MAX];
    
    typedef struct{
    	
    	int Stipendio;
    	Stringa Nome;
    	Stringa Cognome;
    	
    }Professori;
    
    typedef Professori Docenti[DIM_MAX];
    
    void carica_stipendi(Stringa, fstream &f, int *, Docenti );
    void stampa_stipendi(const Docenti ,int );
    void confronta_stipendi(const Docenti,int ,Professori *);
    Queste sono le funzioni
    #include"impiegatlib.h"
    
    void carica_stipendi(Stringa name, fstream &f, int *size, Docenti prof){
    	
    	int i=0;
    
    	cout<<"\nScrivi il nome del file che vuoi aprire: ";
    	cin.getline(name,STR_MAX-1,'\n');
    	f.open(name,ios::in);
    	
    		if(!f)	{
    		cout<<"\nErrore durante l'apertura del file...";
    
    		exit(1);
    
    	}
    	else{
    	
    		while(!f.eof()){
    			f>>prof[i].Nome;
    			f>>prof[i].Cognome;
    			f>>prof[i].Stipendio;
    			
    			i++;
    		}
    		
    		i--;
    	
    	}
    	
    	*size=i;
    	f.close();
    
    }
    
    void stampa_stipendi(const Docenti insegnanti,int d){
    
    	for(int i=0; i<d; i++)
    
    	{
    
    		cout<<insegnanti[i].Nome<<" "<<insegnanti[i].Cognome<<" "<<insegnanti[i].Stipendio<<endl;
    
    	}
    
    	cout<<endl;
    
    }
    
    void confronta_stipendi( Docenti professori, int d, Professori *max){
    	
    	for(int i=0; i<d; i++){
    		
    		if(professori[i].Stipendio>professori[i+1].Stipendio){
    		
    		*max.Nome=professori[i].Nome;/* Quello che vorrei fare e far scorrere questo array di strcut 
    		e passare il valore più alto ad una struct che manterrà il valore 
    		più alto e me lo stampa a video */
    		*max.Cognome=professori[i].Cognome;
    		*max.Stipendio=professori[i].Stipendio;
    		
    		}
    			cout<<"Il professore con lo stipendio maggiore è: "<<max.Nome<<" "<<max.Cognome<<"\n con uno stipendio di: "<<max.Stipendio<<endl;
    	}
    	
    }
    Questo è il main :
    #include "impiegatlib.h"
    
    int main(){
    	fstream f;
    	int dim, size;
    	Docenti dati;
    	Professori stipendio_massimo;
    	Stringa nome_file;
    	
    	carica_stipendi(nome_file, f, &dim, dati);
    	stampa_stipendi(dati, dim );
    	confronta_stipendi(dati, dim, &stipendio_massimo);
    	
    }
  • Re: Passaggio valore Array di Struct a Struct

    No. Ti avevo detto che la cout va spostata nel main e scritta in quel modo e che l'assegnazione è

    *max = professori;

    (elimina tutte le altre righe ..)
  • Re: Passaggio valore Array di Struct a Struct

    oregon ha scritto:


    No. Ti avevo detto che la cout va spostata nel main e scritta in quel modo e che l'assegnazione è

    *max = professori;

    (elimina tutte le altre righe ..)


    Abbi pazienza sono un ignorante in materia è da 4/5 giorni che programmo haha
    Comunque grazie per la disponibilità soprattutto a quest'ora davvero grazie

    Main
    #include "impiegatlib.h"
    
    int main(){
    	fstream f;
    	int dim, size;
    	Docenti dati;
    	Professori stipendio_massimo;
    	Stringa nome_file;
    	
    	carica_stipendi(nome_file, f, &dim, dati);
    	stampa_stipendi(dati, dim );
    	confronta_stipendi(dati, dim, &stipendio_massimo);
    	cout<<"Il professore con lo stipendio maggiore è: "<<stipendio_massimo.Nome<<" "<<stipendio_massimo.Cognome<<"\n con uno stipendio di: "<<stipendio_massimo.Stipendio<<endl;
    }
    Funzioni
    #include"impiegatlib.h"
    
    void carica_stipendi(Stringa name, fstream &f, int *size, Docenti prof){
    	
    	int i=0;
    
    	cout<<"\nScrivi il nome del file che vuoi aprire: ";
    	cin.getline(name,STR_MAX-1,'\n');
    	f.open(name,ios::in);
    	
    		if(!f)	{
    		cout<<"\nErrore durante l'apertura del file...";
    
    		exit(1);
    
    	}
    	else{
    	
    		while(!f.eof()){
    			f>>prof[i].Nome;
    			f>>prof[i].Cognome;
    			f>>prof[i].Stipendio;
    			
    			i++;
    		}
    		
    		i--;
    	
    	}
    	
    	*size=i;
    	f.close();
    
    }
    
    void stampa_stipendi(const Docenti insegnanti,int d){
    
    	for(int i=0; i<d; i++)
    
    	{
    
    		cout<<insegnanti[i].Nome<<" "<<insegnanti[i].Cognome<<" "<<insegnanti[i].Stipendio<<endl;
    
    	}
    
    	cout<<endl;
    
    }
    
    void confronta_stipendi( Docenti professori, int d, Professori *max){
    	
    	for(int i=0; i<d; i++){
    		
    		if(professori[i].Stipendio>professori[i+1].Stipendio){
    		
    		*max=professori[i];
    
    		}
    			
    	}
    	
    }
    Libreria
    [/b]
    #include <iostream>
    #include <cstdlib>
    #include <fstream>
    #include <cstring>
    
    #define STR_MAX 100
    #define DIM_MAX 100
    
    using namespace std;
    
    typedef char Stringa [STR_MAX];
    
    typedef struct{
    	
    	int Stipendio;
    	Stringa Nome;
    	Stringa Cognome;
    	
    }Professori;
    
    typedef Professori Docenti[DIM_MAX];
    
    void carica_stipendi(Stringa, fstream &f, int *, Docenti );
    void stampa_stipendi(const Docenti ,int );
    void confronta_stipendi(const Docenti,int ,Professori *);
  • Re: Passaggio valore Array di Struct a Struct

    oregon ha scritto:


    Se nel main hai la variabile stipendio_massimo e la passi alla funzione fallo per puntatore

    confronta_stipendi(dati, dim, &stipendio_massimo);

    e subito dopo metti la cout che avevi nella funzione, ovvero

    cout<<"Il professore con lo stipendio maggiore è: "<<stipendio_massimo.Nome<<" "<<stipendio_massimo.Cognome<<"\n con uno stipendio di: "<<stipendio_massimo.Stipendio<<endl;

    Ovviamente dovrai modificare la funzione mentre la copia della struttura in max sarà semplicemente

    *max = professori;

    Funziona grazie per l'aiuto
  • Re: Passaggio valore Array di Struct a Struct

    Di nulla
Devi accedere o registrarti per scrivere nel forum
8 risposte