jfet ha scritto:
Sir.Croccodile ha scritto:
jfet ha scritto:
Cosa sbagliavi te l'ho già detto qualche post fa ma non sei stato in grado di capirlo...e probabilmente non è l'unico errore. Non prenderla sul personale, ma è meglio che prima rivedi, ripassi, ristudi e poi riaffronti da solo il tuo codice. Sicuramente riuscirai a comprendere meglio i nostri suggerimenti, magari trovando da solo l'errore/gli errori.
No perchè anzi fate bene si vieni qui per chiedere consigli non per avere ripetizioni, però non puoi darmi per questa volta la soluzione? Così domani me la vado a rivedere almeno capisco che cosa devo approfondire, almeno se qualche altro ragazzo viene sul sito e ha un problema simile al mio può capire cosa deve studiare meglio come me.
Ma quei libri sono tutti in inglese eh?
LIbri in inglese si, sono i migliori. Per quanto riguarda l'errore ripeto ti ho già detto cosa non andava, chiami una funzione che accetta un puntatore di un tipo passandole un puntatore di un altro. Se non riesci a comprendere allora è bene che riparti dalle stringhe, magari la differenza tra array di char e puntatori a stringa e una bella ripassata ai puntatori in generale. Così dovresti riuscire a capire l'errore. Fatto questo puoi riniziare completamente da 0 per quanto riguarda le strutture.
Io ho risolto così, ma ora mi da un problema che fino ad ora non si era mai presentato come mai?
Funzioni
#include "alfabetico.h"
void carica_file(Stringa nome, fstream &f, Docenti professore, int *d){
int i=0;
cout<<"\n Inserisci nome del file che vuoi caricare :";
cin.getline(nome,STR_MAX-1, '\n');
f.open(nome, ios::in);
if(!f){
cout<<"\n Errore durante l'inserimento del nome del file...";
exit(1);
}else{
while(!f.eof()){
f>>professore[i].Cognome;
f>>professore[i].Numero;
i++;
}
i--;
}
*d=i;
f.close();
}
void stampa_file( Docenti insegnanti, int dimensione){
cout<<"\n Stampo il file :\n";
for(int i=0; i<dimensione; i++){
cout<<insegnanti[i].Cognome<<endl;
cout<<insegnanti[i].Numero<<endl;
}
}
void controllo_ordine( Docenti professori, int size){
Professore scambio;
int risult, cont;
for(int i=0; i<size; i++){
for(int j=i+1; j<size; j++){
risult=strcmp(professori[i].Cognome, professori[j].Cognome);
if(risult>0){
scambio=professori[i];
professori[i]=professori[j];
professori[j]=scambio;
}else{
cont++;
risult=cont;
}
}
}
if(risult==size){
cout<<"\n L'elenco è già ordinato alfabeticamente \n";
}
stampa_file(professori, size);
cout<<"\n Controllo se ci sono elementi uguali: \n";
elimina_uguali(professori, size);
stampa_file(professori, size);
}
void elimina_uguali(Docenti prof, int s){
Pnodo L1;
int ris;
for(int i=0; i<s; i++){
for(int j=i+1; i<s; j++){
ris=strcmp(prof[i].Cognome, prof[j].Cognome);
if(ris==0){
cancella_nodo(prof[j].Cognome,j, L1);
}
}
}
}
void cancella_nodo(Stringa insegnante,int j, Pnodo &n1){
Pnodo Temp;
if(n1!=NULL){
if(n1->Cognome==insegnante[j].Cognome){
Temp=n1;
n1=n1->next;
delete Temp;
}else {
cancella_nodo(insegnante, j, n1);
}
}
}
Librerie
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
#define STR_MAX 100
#define VET_MAX 100
typedef char Stringa [STR_MAX];
typedef struct Lista{
Stringa Cognome;
int Numero;
Lista *next;
}Professore;
typedef Lista* Pnodo;
typedef Professore Docenti [VET_MAX];
void carica_file(Stringa, fstream &f, Docenti , int *);
void stampa_file( Docenti, int);
void controllo_ordine(Docenti, int);
void confronto(Stringa , Stringa , int *);
void scambio(Docenti, int);
void elimina_uguali(Docenti, int);
void cancella_nodo(Stringa ,int , Pnodo &);