Linguaggio c

inginfoaria
salve a tutti,
qlc mi sa dire perchè è sbaglaito

pers=(random()%2000)+1000;
veicolo= random()%6;
posticat=(random()%1000)+500;

mi dice link error undefined reference to 'random'?

grazie ancora

Risposte
Mattex2
ci vuole un po di fantasia pero credo di aver capito...grazie eakfour

inginfoaria
grazie mille e per fare il numero totale delle persone nn salite? cioè se veciolo=1, 2, 3, 4, 5, 6, 7 etc calcolo in lunrto dei posti e delle macchine nn salite, però alla fine devo fare il totale dei veicoli nn saliti, mentre prima negli if ho calcolato i mezzi nn saliti in base al tipo di veicolo... i tipi di veicolo sono 7 e il totale nn saliti deve essere posticat(totale dei posti per tutti i veicoli) - nn saliti!!!!
posti cat è posticat=(rand()%1000)+500; e tot nn saliti nn so cm calcolarlo!!! lo so fare solo in base al tipo di veicolo!

inginfoaria
nn può nn essere uno di questi valori perchè veicolo=rand()%/; cioè numeri casuali da 0 a 7 e siccome default e facoltativo nn lo metto, ok?
grazie

inginfoaria
grazie mille e per fare il numero totale delle persone nn salite? cioè se veciolo=1, 2, 3, 4, 5, 6, 7 etc calcolo in lunrto dei posti e delle macchine nn salite, però alla fine devo fare il totale dei veicoli nn saliti, mentre prima negli if ho calcolato i mezzi nn saliti in base al tipo di veicolo... i tipi di veicolo sono 7 e il totale nn saliti deve essere posticat(totale dei posti per tutti i veicoli) - nn saliti!!!!
posti cat è posticat=(rand()%1000)+500; e tot nn saliti nn so cm calcolarlo!!! lo so fare solo in base al tipo di veicolo
e se invece che i mettessi veioclo, cioè if...traghetto[veciolo].nposti=100; if...etc; così per calcolare npostitotale potrei scrivere npostitotale=traghetto[veicolo].nposti... può andare?

inginfoaria
allora ...mi spiego meglio, se scrivo traghetto traghetto.txt 10 mi smbra che nn me lo accetta se scrivo traghetto.c si ma esce e se scrivo traghetto,.exe nn me lo accetta.... inoltre devo ancora finire il porgramma , mi mancano le ultime cosette... tipo vedi sopra!!grazie mille

inginfoaria
uffa mi va il orog fino alla fine, tranne le varie classifica.... e incasso che nn sta,mpa, e poi mi da sempre glui steesi valori....
qst è il mio 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 npersone;
prezzo_t preis;
int nposti;
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.maxpersone);
printf("%d\n", t.npersone);
printf("%f - %f\n", t.preis.costoveicolo, t.preis.prezzocategoria);
printf("%d\n", t.nposti);
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;
float perc;
int mezzisaliti, nnsaliti,pers, people, totnsaliti;
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.maxpersone=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.nposti=atoi(p);
p=strtok(NULL,"|");
traghetto.prob=atoi(p);
i++;
}

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
/*stabilisco quanti sono i posti disponibili per le persone e per i mezzi*/

for(i=0; i
/*per ogni giornata il numero delle persone in colonna, dei mezzi e il tipo di qst ultimi è casuale*/

veicolo= rand()%7;
posticat=(rand()%1000)+500;

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;
nnsaliti=posticat-traghetto.nposti;
break;
}


totnsaliti=posticat-traghetto[veicolo].nposti++;
mezzisaliti= posticat-totnsaliti;

}

printf("I mezzi saliti oggi sono %d, quelli non saliti %d\n", mezzisaliti, totnsaliti);

for (i=0; i
people=rand()%3;

switch(people){

case 0:
traghetto.maxpersone=150;
break;

case 1:
traghetto.maxpersone=250;
break;

case 2:
traghetto.maxpersone=600;
break;
}

pers=(rand()%2000)+1000;
classifica.maxcategoria=(pers-traghetto.maxpersone);
classifica.perstot=classifica.perstot+classifica.maxcategoria;
classifica.pni=pers-classifica.perstot;
classifica.ni= pers-classifica.pni;
}
printf("Le persone salite oggi sono %d, mentre quelle non salite %d\n", classifica.ni,classifica.pni);

/*sommatoria costi*/

for(i=0; i
float a;
a=traghetto.preis.costoveicolo+(traghetto.preis.prezzocategoria * classifica.ni);
classifica.incasso= classifica.incasso+a;


}

printf("L'incasso quotidiano è di %f euro\n", classifica.incasso);

}
printf("CLASSIFICA DEL TIPO DI MEZZI PER GIORNATA\n");
printclient(traghetto, n);
qsort(traghetto, n, sizeof(tipo_t), cmptipoveicolo);
printf("\nCLASSIFICA DEL NUMERO DELLE PERSONE IMBARCATE\n");
qsort(classifica, n, sizeof(cmp_t), cmppers);
printf("\nCLASSIFICA DEGLI INCASSI\n");
qsort(classifica, n, sizeof(cmp_t), cmpinc);

}

inginfoaria
salve sono sempre io con le mie domande sul linguaggio c, qlc sa cm faccio a smistare la gente ad esempio di un traghetto nelle cabine di prima e seconda e nelle poltrone avendo un file.txt?

signor.nessuno1

inginfoaria
16
bigcar|cabina1|4|6|30.00|25.00|4|5
smallcar|poltrona|1|5|25.00|20.00|1|2

il programma dovrebbe leggere i dati, e fin qua l'ho fatto, e poi dovrei per il cilco di viaggio (10 giorni) smistare la gente nelle varie cabine e poltrone

signor.nessuno1

inginfoaria
all'inizio del file .txt nn devo mettere niente perchè è un file di blocconote, mentre il resto è scritto su un file .c che compilo con un compilatore!

signor.nessuno1

inginfoaria
ma dici veramente o ti sei offeso per qlc, guerda che nn intendevo dire " che vorresti dire con questo che io sono imbecille... nn pensoi proprio..." [Cit.] nn m permetterei mai visto ke nn so ki sei

dazuco
solo un consiglio per inginfoaria
l'approccio migliore che si dovrebbe avere per svolgere questo genere di programmi consiste nel disegnare logicamente il problema
pensa nel modo più semplice possibile, ad esempio:
per smistare le persone alle cabine che devo fare??
leggo il file (ossia il biglietto)
verifico il numero della cabina e poi dico alla persona di andare lì (quindi caricherò un array o qualcos'altro con l'id della persona ..)
e cosi via
e poi per non perderti nei nomi delle funzioni procurati un buon manuale di c
ciao

inginfoaria
grazie mille cmq nn mi perdo nei nomi delle funzioni perchè so cosa son, anzi il prog che c'è prima è una versione vecchia l'ho corretto almeno altre 10 volte da quando l'ho spedito al forum...mentalmente il prblma so cm porlo ma nn so cm scriverlo...ah, aspetta n attimo però le persone nn possono secondo quanto detto dal prof avere un biglietto perchè nn è possibile prenotare prima, arrivi li, così ha scritto, e decidi una volta imbarcata!
grazie ancora

signor.nessuno1

inginfoaria
si mi pare doi averlo messo, guarda che nn ti ho detto ke nn sai distinguere un file di testo da un file.txt nn intendevo questo pensao ke magari mi fossi espressa male io e ke tu nn abvessi capito e ke in altri linguaggi (nn conoscendoli) si facesse così!!!
grazie

inginfoaria
il progetto ora è cambiato...devo fare il prog di un parcheggio tipo autosilo

signor.nessuno1

inginfoaria
infatti ho deciso di farlo da sola

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.