Problemi o col dos o cn il compilatore
salve, quando campilo e poi eseguo il programma mi esce una scritta che mi dice che c'è un errore nel file.exe, inviare errori?cm mai se prima andava perfettamente!
Risposte
inolte qlc mi sa dire cm smistare le persone tra le varie categorie senza usare il random in qst prog
#include
#include
#include
#include
#include
/*dichiarazione delle struct tipo_t, client_t, cat_t e cmp_t che mi servirà per la
funzione cmp (=compare) che riordinerà i risultati ottenuti, stilando una classifica*/
typedef struct {
char *tipoveicolo;
char *categoria;
}tipo_t;
typedef struct prezzotype{
float costoveicolo;
float prezzocategoria;
}prezzo_t;
typedef struct clientype {
tipo_t type;
int maxpersone;
int totalepersone;
int npersone;
prezzo_t preis;
int nposti;
int totaleposti;
int prob;
} client_t;
typedef struct cmptype{
float incasso;
int perstot, ni, pni;
int maxcategoria;
}cmp_t;
/*le funzioni cmppers e cmpinc servono per fare una classifica in base al giorno che ha
trasportato più persone e ha incassato di più*/
void printclient(client_t *t, int n){
int i;
for(i=0; i
printf("%s -%s\n", t.type.tipoveicolo, t.type.categoria);
printf("%d\n", t.totalepersone);
printf("%d\n", t.npersone);
printf("%f - %f\n", t.preis.costoveicolo, t.preis.prezzocategoria);
printf("%d\n", t.totaleposti);
printf("%d\n", t.prob);
}
}
int cmppers(const void *a,const void *b){
cmp_t*pa=(cmp_t*)a;
cmp_t*pb=(cmp_t*)b;
if(pa->ni> pb->ni)return 1;
if(pa->ni< pb->ni)return -1;
return 0;
}
int cmpinc(const void *a, const void *b){
cmp_t*pa=(cmp_t*)a;
cmp_t*pb=(cmp_t*)b;
if(pa->incasso> pb->incasso)return 1;
if(pa->incasso< pb->incasso)return -1;
return 0;
}
int cmptipoveicolo(const void *a, const void *b){
client_t*pa=(client_t*)a;
client_t*pb=(client_t*)b;
if(pa->type.tipoveicolo>pb ->type.tipoveicolo )return 1;
if(pa->type.tipoveicolo< pb->type.tipoveicolo)return -1;
return 0;
}
int main(int argc, char *argv[]){
// Dichiarazione delle variabili
FILE *fpi;/*fpi è un puntatore a FILE e p è un puntatore a una variabile di
tipo char che mi servirà per far leggere dal programma il file di
testo .txt*/
char *p, b[BUFSIZ];
client_t *traghetto;
cmp_t *classifica;
int n, i, g; /*i e g sono indici, contatori*/
int ni, pni; /*ni è il numero delle persone imbarcate e pni è il numero delle
persone non imbarcate*/
int ngiorni, totpostimezzi, veicolo, posticat;
int nnsaliti,pers, people;
ngiorni=atoi(argv[2]);
fpi=fopen(argv[1], "r"); /*apro il file in sola lettura*/
/*Questo if contolla che il programma sia lanciato nel modo corretto*/
if(argc!=3){
printf("\nIl programma deve essere lanciato in questo modo:\n");
printf("\t>traghetto traghetto.txt\n\n");
exit(1);
}
/*contollo inoltre che il puntatore a file non sia nullo*/
if(fpi==NULL){
perror(argv[1]);
exit(1);
}
/*Questo if controlla che il numero di giorni della simulazione sia 10*/
if(ngiorni<10){
printf("i giorni della simulazione devono essere almeno 10\n");
exit(1);
}
p=(fgets(b,sizeof(b),fpi));
n=atoi(b);
traghetto=(client_t*)malloc(n*sizeof(client_t));
/*Allocazione dinamica dello spazio per le struct e ciclo di apertura dell file
e memorizzazione, per l'inserimento die dati nella struct*/
if(traghetto==NULL){
perror(argv[1]);
exit(1);
}
i=0;
while(n>i){
p=strtok(b,"|");
traghetto.type.tipoveicolo=(char*)malloc(strlen(p)+1);
strcpy(traghetto.type.tipoveicolo,p);
p=strtok(b,"|");
traghetto.type.categoria=(char*)malloc(strlen(p)+1);
strcpy(traghetto.type.categoria,p);
p=strtok(NULL,"|");
traghetto.totalepersone=atoi(p);
p=strtok(NULL,"|");
traghetto.npersone=atoi(p);
p=strtok(NULL,"|");
traghetto.preis.costoveicolo=atof(p);
p=strtok(NULL,"|");
traghetto.preis.prezzocategoria=atof(p);
p=strtok(NULL,"|");
traghetto.totaleposti=atoi(p);
p=strtok(NULL,"|");
traghetto.prob=atoi(p);
i++;
}
for(i=0; i
float a;
classifica.incasso=traghetto.preis.costoveicolo+traghetto.preis.prezzocategoria;
a=a+classifica.incasso;
}
fclose(fpi);
classifica=(cmp_t*)malloc(n*sizeof(cmp_t));
if(classifica==NULL){
perror(argv[1]);
exit(1);
}
/*iniziallizzo random per evitare che i valori vengano ripetuti*/
srand(time(NULL));
/*ciclo dei giorni*/
for(g=0; g
/*per ogni giornata il numero delle persone in colonna, dei mezzi e il tipo di qst ultimi è casuale*/
posticat=(rand()%1000)+500;
pers=(rand()%2000)+1000;
/*stabilisco quanti sono i posti disponibili per le persone e per i mezzi*/
for(i=0; i
veicolo= rand()%7;
switch(veicolo){
case 0:
traghetto[veicolo].nposti=100;
break;
case 1:
traghetto[veicolo].nposti=150;
break;
case 2:
traghetto[veicolo].nposti=15;
break;
case 3:
traghetto[veicolo].nposti=25;
break;
case 4:
traghetto[veicolo].nposti=200;
break;
case 5:
traghetto[veicolo].nposti=100;
break;
case 6:
traghetto[veicolo].nposti=10;
break;
}
for(veicolo=0; veicolo<7; veicolo++){
traghetto[veicolo].nposti=traghetto[veicolo].nposti+traghetto[veicolo++].nposti;
}
}
for (i=0; i
people=rand()%3;
switch(people){
case 0:
traghetto[people].maxpersone=150;
break;
case 1:
traghetto[people].maxpersone=250;
break;
case 2:
traghetto[people].maxpersone=600;
break;
}
for(people=0; people<3; people++){
traghetto[people].maxpersone=traghetto[people].maxpersone + traghetto[people++].maxpersone;
classifica[people].maxcategoria=pers-traghetto[people].maxpersone;
classifica[people].perstot=classifica[people].perstot+classifica[people].maxcategoria;
classifica[people].pni=pers-classifica[people].perstot;
classifica[people].ni= pers-classifica[people].pni;
}
}
printf("Le persone salite oggi sono %d, mentre quelle non salite %d\n", classifica[people].ni,classifica[people].pni);
printf("L'incasso quotidiano e di %f euro\n", classifica.incasso*classifica[people].ni);
}
qsort(traghetto, n, sizeof(client_t), cmptipoveicolo);
printclient(traghetto, n);
printf("CLASSIFICA DEL TIPO DI MEZZI PER GIORNATA\n");
for(i=0; i
printf("%s\n", traghetto.type.tipoveicolo);
}
qsort(classifica, n, sizeof(cmp_t), cmppers);
printf("\nCLASSIFICA DEL NUMERO DELLE PERSONE IMBARCATE\n");
for(i=0; i
printf("%d\n",classifica.ni);
}
qsort(classifica, n, sizeof(cmp_t), cmpinc);
printf("\nCLASSIFICA DEGLI INCASSI\n");
for(i=0; i
printf("%f\n", classifica.incasso);
}
}
#include
#include
#include
#include
#include
/*dichiarazione delle struct tipo_t, client_t, cat_t e cmp_t che mi servirà per la
funzione cmp (=compare) che riordinerà i risultati ottenuti, stilando una classifica*/
typedef struct {
char *tipoveicolo;
char *categoria;
}tipo_t;
typedef struct prezzotype{
float costoveicolo;
float prezzocategoria;
}prezzo_t;
typedef struct clientype {
tipo_t type;
int maxpersone;
int totalepersone;
int npersone;
prezzo_t preis;
int nposti;
int totaleposti;
int prob;
} client_t;
typedef struct cmptype{
float incasso;
int perstot, ni, pni;
int maxcategoria;
}cmp_t;
/*le funzioni cmppers e cmpinc servono per fare una classifica in base al giorno che ha
trasportato più persone e ha incassato di più*/
void printclient(client_t *t, int n){
int i;
for(i=0; i
printf("%s -%s\n", t.type.tipoveicolo, t.type.categoria);
printf("%d\n", t.totalepersone);
printf("%d\n", t.npersone);
printf("%f - %f\n", t.preis.costoveicolo, t.preis.prezzocategoria);
printf("%d\n", t.totaleposti);
printf("%d\n", t.prob);
}
}
int cmppers(const void *a,const void *b){
cmp_t*pa=(cmp_t*)a;
cmp_t*pb=(cmp_t*)b;
if(pa->ni> pb->ni)return 1;
if(pa->ni< pb->ni)return -1;
return 0;
}
int cmpinc(const void *a, const void *b){
cmp_t*pa=(cmp_t*)a;
cmp_t*pb=(cmp_t*)b;
if(pa->incasso> pb->incasso)return 1;
if(pa->incasso< pb->incasso)return -1;
return 0;
}
int cmptipoveicolo(const void *a, const void *b){
client_t*pa=(client_t*)a;
client_t*pb=(client_t*)b;
if(pa->type.tipoveicolo>pb ->type.tipoveicolo )return 1;
if(pa->type.tipoveicolo< pb->type.tipoveicolo)return -1;
return 0;
}
int main(int argc, char *argv[]){
// Dichiarazione delle variabili
FILE *fpi;/*fpi è un puntatore a FILE e p è un puntatore a una variabile di
tipo char che mi servirà per far leggere dal programma il file di
testo .txt*/
char *p, b[BUFSIZ];
client_t *traghetto;
cmp_t *classifica;
int n, i, g; /*i e g sono indici, contatori*/
int ni, pni; /*ni è il numero delle persone imbarcate e pni è il numero delle
persone non imbarcate*/
int ngiorni, totpostimezzi, veicolo, posticat;
int nnsaliti,pers, people;
ngiorni=atoi(argv[2]);
fpi=fopen(argv[1], "r"); /*apro il file in sola lettura*/
/*Questo if contolla che il programma sia lanciato nel modo corretto*/
if(argc!=3){
printf("\nIl programma deve essere lanciato in questo modo:\n");
printf("\t>traghetto traghetto.txt
exit(1);
}
/*contollo inoltre che il puntatore a file non sia nullo*/
if(fpi==NULL){
perror(argv[1]);
exit(1);
}
/*Questo if controlla che il numero di giorni della simulazione sia 10*/
if(ngiorni<10){
printf("i giorni della simulazione devono essere almeno 10\n");
exit(1);
}
p=(fgets(b,sizeof(b),fpi));
n=atoi(b);
traghetto=(client_t*)malloc(n*sizeof(client_t));
/*Allocazione dinamica dello spazio per le struct e ciclo di apertura dell file
e memorizzazione, per l'inserimento die dati nella struct*/
if(traghetto==NULL){
perror(argv[1]);
exit(1);
}
i=0;
while(n>i){
p=strtok(b,"|");
traghetto.type.tipoveicolo=(char*)malloc(strlen(p)+1);
strcpy(traghetto.type.tipoveicolo,p);
p=strtok(b,"|");
traghetto.type.categoria=(char*)malloc(strlen(p)+1);
strcpy(traghetto.type.categoria,p);
p=strtok(NULL,"|");
traghetto.totalepersone=atoi(p);
p=strtok(NULL,"|");
traghetto.npersone=atoi(p);
p=strtok(NULL,"|");
traghetto.preis.costoveicolo=atof(p);
p=strtok(NULL,"|");
traghetto.preis.prezzocategoria=atof(p);
p=strtok(NULL,"|");
traghetto.totaleposti=atoi(p);
p=strtok(NULL,"|");
traghetto.prob=atoi(p);
i++;
}
for(i=0; i
float a;
classifica.incasso=traghetto.preis.costoveicolo+traghetto.preis.prezzocategoria;
a=a+classifica.incasso;
}
fclose(fpi);
classifica=(cmp_t*)malloc(n*sizeof(cmp_t));
if(classifica==NULL){
perror(argv[1]);
exit(1);
}
/*iniziallizzo random per evitare che i valori vengano ripetuti*/
srand(time(NULL));
/*ciclo dei giorni*/
for(g=0; g
/*per ogni giornata il numero delle persone in colonna, dei mezzi e il tipo di qst ultimi è casuale*/
posticat=(rand()%1000)+500;
pers=(rand()%2000)+1000;
/*stabilisco quanti sono i posti disponibili per le persone e per i mezzi*/
for(i=0; i
veicolo= rand()%7;
switch(veicolo){
case 0:
traghetto[veicolo].nposti=100;
break;
case 1:
traghetto[veicolo].nposti=150;
break;
case 2:
traghetto[veicolo].nposti=15;
break;
case 3:
traghetto[veicolo].nposti=25;
break;
case 4:
traghetto[veicolo].nposti=200;
break;
case 5:
traghetto[veicolo].nposti=100;
break;
case 6:
traghetto[veicolo].nposti=10;
break;
}
for(veicolo=0; veicolo<7; veicolo++){
traghetto[veicolo].nposti=traghetto[veicolo].nposti+traghetto[veicolo++].nposti;
}
}
for (i=0; i
people=rand()%3;
switch(people){
case 0:
traghetto[people].maxpersone=150;
break;
case 1:
traghetto[people].maxpersone=250;
break;
case 2:
traghetto[people].maxpersone=600;
break;
}
for(people=0; people<3; people++){
traghetto[people].maxpersone=traghetto[people].maxpersone + traghetto[people++].maxpersone;
classifica[people].maxcategoria=pers-traghetto[people].maxpersone;
classifica[people].perstot=classifica[people].perstot+classifica[people].maxcategoria;
classifica[people].pni=pers-classifica[people].perstot;
classifica[people].ni= pers-classifica[people].pni;
}
}
printf("Le persone salite oggi sono %d, mentre quelle non salite %d\n", classifica[people].ni,classifica[people].pni);
printf("L'incasso quotidiano e di %f euro\n", classifica.incasso*classifica[people].ni);
}
qsort(traghetto, n, sizeof(client_t), cmptipoveicolo);
printclient(traghetto, n);
printf("CLASSIFICA DEL TIPO DI MEZZI PER GIORNATA\n");
for(i=0; i
printf("%s\n", traghetto.type.tipoveicolo);
}
qsort(classifica, n, sizeof(cmp_t), cmppers);
printf("\nCLASSIFICA DEL NUMERO DELLE PERSONE IMBARCATE\n");
for(i=0; i
printf("%d\n",classifica.ni);
}
qsort(classifica, n, sizeof(cmp_t), cmpinc);
printf("\nCLASSIFICA DEGLI INCASSI\n");
for(i=0; i
printf("%f\n", classifica.incasso);
}
}