• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto Domanda sui record

andrea96b

Nuovo utente
Autore del topic
14 Maggio 2010
13
0
Miglior risposta
0
Salve sono studente del primo anno di ingegneria informatica e ho un dubbio sui record.
typedef struct {
char nome[20];
char cognome[30];
char cell[15];
}Persona;


typedef Persona Elenco[max];

Se dichiaro un tipo record e un tipo vettore di record in questo modo, quando poi le dichiaro nel main ho bisogno di dichiarare sia il record che il vettore? o mi basta dichiarare solo il vettore?
Inoltre, se devo passare il vettore in una funziona, devo passare sia il vettore e il record o solo il vettore?
//FUNZIONE ORDINAMENTO
void ordinamento(Elenco agendina, int dim, Persona dati)
{
int i=0;
int j=0;
for(i=0; i<dim; i++, j++)
{
if(strncmp(agendina.cognome, agendina[j+1].cognome, 1)<0)
scambia(agendina, j, i);
}

stampaelenco(agendina, dim, dati);

}
//FUNZIONE SCAMBIA
void scambia(Elenco agendina, int j, int i)
{
Persona temp;
temp=agendina[j];
agendina[j]=agendina;
agendina=temp;
}

questo è quello che dovrei fare
p.s non funziona quindi se avete qualche idea su come migliorare parlate :emoji_slight_smile:
 
Salve sono studente del primo anno di ingegneria informatica e ho un dubbio sui record.
typedef struct {
char nome[20];
char cognome[30];
char cell[15];
}Persona;


typedef Persona Elenco[max];

Se dichiaro un tipo record e un tipo vettore di record in questo modo, quando poi le dichiaro nel main ho bisogno di dichiarare sia il record che il vettore? o mi basta dichiarare solo il vettore?
Inoltre, se devo passare il vettore in una funziona, devo passare sia il vettore e il record o solo il vettore?
//FUNZIONE ORDINAMENTO
void ordinamento(Elenco agendina, int dim, Persona dati)
{
int i=0;
int j=0;
for(i=0; i<dim; i++, j++)
{
if(strncmp(agendina.cognome, agendina[j+1].cognome, 1)<0)
scambia(agendina, j, i);
}

stampaelenco(agendina, dim, dati);

}
//FUNZIONE SCAMBIA
void scambia(Elenco agendina, int j, int i)
{
Persona temp;
temp=agendina[j];
agendina[j]=agendina;
agendina=temp;
}

questo è quello che dovrei fare
p.s non funziona quindi se avete qualche idea su come migliorare parlate :emoji_slight_smile:


è inusuale questo tipo di istruzione (considerando che è errata). manca il nome che vuoi assegnarci
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
dato che typedef serve per associare a un dato esistente un nome. quindi non equivale a una dichiarazione. Al passaggio di una funzione devi passare il vettore di record. Inoltre l'algoritmo di ordinamento presenta un errore di logica se dim rappresenta gli n elementi utilizzati presumiamo di giungere all'ultimo elemento controlla la posizione i che rappresenta l'ultimo elemento , poi successivamente esegue la somma j+1(stesso valori di i) che si riferisce ad un elemento totalmente inesistente in quanto superiore a dim

Sposto in assistenza tecnica
 
Ultima modifica:
ho postato solo il typedef per far capire che tipo di strutture erano, nelle funzioni normalmente passo i vettori che ho dichiarato nel main. L'algoritmo di ordinamento sarebbe corretto se invece di imporre la terminazione a i<dim, la impongo a j<dim?

- - - Aggiornato - - -
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Ultima modifica da un moderatore:
@andrea96b racchiudi il codice tra il tag code , le funzioni vanno scritte fuori dal main :| o al massimo prima del main in stile top down , devi usare un doppio ciclo for per l'algoritmo di ordinamento. Dato che parliamo di c++ , il typedef è totalmente inutile alla struttura. e questo è errato :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

anche il ciclo in inserisci è sbagliato dato che n non è inizializzato .
 
scusa è la prima volta che faccio una domanda, non sapevo si dovessero racchiudere tra i tag. Comunque le funzioni sono fuori dal main, ho postato solo le parti che servivano per comprendere le parti che mi interessano, ci sono molte più funzioni che non volevo mettere. Ho due domande 1) il typedef fondamentalmente a che serve? in questo programma l'ho messo perchè era il primo programma dopo la lezione sul typedef e quindi lo dovevo provare.
2) come si inizializza una variabile char?
grazie per la disponibilità.

- - - Aggiornato - - -

anche una terza :emoji_smiley: ho studiato bubble sort e selection sort. In questo caso volevo usare il bubble sort, con due cicli for non si fa il selection sort?
 
@andrea96b
ah ok capisco , io mi sono regolato sul codice postato ^^ .
char c='n'; //inizializzo il valore

il typedef serve per associare a un dato definito a una costante di tua scelta ti posto un esempio semplice.

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

in genere si usa con le strutture in C
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
quindi nel c++ non si usano? penso che il professore alla fine ci faccia usare i comandi del c++ solo per farceli imparare, ma alla fine programmiamo come se fossimo in c perchè non facciamo programmazione ad oggetti e da quello che ho letto il c++ è orientato agli oggetti.
Comunque rispondimi solo sul fatto del bubble sort o selection sort e ti offro una pizza :emoji_smiley:
 
quindi nel c++ non si usano? penso che il professore alla fine ci faccia usare i comandi del c++ solo per farceli imparare, ma alla fine programmiamo come se fossimo in c perchè non facciamo programmazione ad oggetti e da quello che ho letto il c++ è orientato agli oggetti.
Comunque rispondimi solo sul fatto del bubble sort o selection sort e ti offro una pizza :emoji_smiley:

in C++ , si usa il typedef ma non per le strutture.
ma l'implementazione puoi farla con qualsiasi ciclo comunque dato la rapidità ti consiglio di implementare la selection sort ^^
 
Perfetto :emoji_slight_smile: il programma è andato, si può chiudere. Grazie mille


Inviato dal mio iPhone utilizzando Tapatalk