Salve, stavo provando a risolvere un tema d'esame di informatica.
Implementare un programma in C per gestire il database di un centro di trasporti pubblici di una città. Le informazioni sono salvate in un file il cui nome è passato come primo argomento della command line. Ogni linea del file contiene: il numero ID del bus, il numero della corsa che serve, le coordinate geometriche in metri (ascissa e ordinata) e il tempo in secondi(tutte riferite allo stesso giorno)quando il bus fa il check.
Si sa che: il numero di righe del file non si conosce a priori e i campi sono separati da spazi; il bus ID ha sempre 4 numeri; il numero di corsa massimo 2; le coordinate sono numeri positivi che possono avere un massimo di cinque cifre; il tempo è rappresentato dai secondi contati dall'inizio della giornata(Max 5 digits); le linee sono ordinate secondo il tempo; i bus si muovono sempre, dal primo all'ultimo check; Ci sono al massimo 100 bus. Più linee possono rappresentare tempi differenti.
Inoltre, come secondo argomento della command line è passata una flag:
se questa è '-d': si deve calcolare la distanza percorsa dal bus e stampare in hh:mm:ss il tempo del primo e ultimo check;
se è '-v': si deve calcolare la velocità in km/h (distanza/tempo tra ultimo e primo check).
Ringrazio chi mi risponderà ed aiuterà a risolvere il problema!
Qui il codice che avevo iniziato a fare per il primo caso di flag che già mi dava problemi:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define M 100
int findmax (int, int);
int findmin (int, int);
typedef struct bus{
int ID;
int route;
int x,y;
int time;
} BUS;
int main(int argc, char* argv[])
{
FILE * fp;
BUS transport[M];
if(argc!=3) return -1;
fp=fopen(argv[1], "r");
if(fp==NULL) return -2;
while(!feof(fp)){
fscanf(fp, "%d %d %d %d %d", &transport.ID, &transport.route, &transport.x, &transport.y, &transport.time);
}
fclose(fp);
if(argv[2]=='-d'){
for(i=0;i<M;i++){
for(j=i+1;j<M;j++){
if(transport[i].ID==transport[j].ID){
xmin=findmin(transport[i].x, transport[j].x);
xmax=findmax(transport[i].x, transport[j].x);
ymax=findmax(transport[i].y, transport[j].y);
ymin=findmin(transport[i].y, transport[j].y);
tmin=findmin(transport[i].time,transport[j].time);
tmax=findmax(transport[i].time,transport[j].time);
dist += (sqrt(pow(xmax-xmin,2)+pow(ymax-ymin,2)));
h1=tmin/3600;
m1=(tmin-(3600*h1))/60;
s1=(tmin-(3600*h1))-(60*m1);
h2=tmax/3600;
m2=(tmax-(3600*h2))/60;
s2=(tmax-(3600*h2))-(60*m2);
}
}
}
}
for(i=0;i<M;i++)
printf("%s: %d m. -First Check: %d:%d:%d - Last Check: %d:%d:%d\n", transport[i].ID, dist, h1,m1,s1,h2,m2,s2);
return 0;
}
int findmax (int num1, int num2){
int max;
if(num1>num2)
max=num1;
else max=num2;
return max;
}
int findmin (int num1, int num2){
int min;
if(num1<num2)
min=num1;
else min=num2;
return min;
}