This is the code that can be compiled:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NOM 20
#define TOTAL_LINIES 2
typedef struct
{
char nom_parada[MAX_NOM];
int distancia_anterior;
int temps_anterior;
} parada;
typedef struct
{
char nom_linia[MAX_NOM];
int n_parades;
parada *dades_parades;
} linia;
void CalculaDisTemps(parada *parades, int longitud, float *distancia, float *temps){
int i;
*distancia = 0;
*temps = 0;
i=0;
do{
*distancia = *distancia + (*parades).distancia_anterior;
parades++;
i++;
}while (i<longitud);
parades = parades - i;
i=0;
do{
*temps = *temps + (*parades).temps_anterior;
parades++;
i++;
}while (i<longitud);
}
void OmplirDades (parada *parades, int nparades){
int i;
for(i=0;i<nparades;i++){
printf("Introdueixi el nom de la parada:\n");
fgets(parades->nom_parada, MAX_NOM, stdin);
printf("Introdueix la distància que hi ha des de la parada anterior:\n");
scanf("%d", ¶des->distancia_anterior);
printf("Introdueix el temps que ha passat des de la parada anterior:\n");
scanf("%d", ¶des->temps_anterior);
parades++;
}
parades = (parades - nparades);
}
void OmplirDadesLinia(linia *linia_tren){
printf("Introdueix el nom de la línia:\n");
fgets (linia_tren->nom_linia, MAX_NOM, stdin);
printf("Introdueix el nombre de parades de la línia:\n");
scanf("%d", &linia_tren->n_parades);
linia_tren->dades_parades = (parada*)malloc(sizeof(parada)*linia_tren->n_parades);
OmplirDades (linia_tren->dades_parades, linia_tren->n_parades);
}
void main(){
int n_linia_tren, i, menu, sortir;
float distancia;
float temps;
char nom [MAX_NOM], parada1 [MAX_NOM], parada2 [MAX_NOM];
linia *linia_tren;
printf("Quantes línies de tren voleu tenir?");
scanf("%d", &n_linia_tren);
linia_tren = (linia*)malloc(sizeof(linia)*n_linia_tren);
sortir = 1;
do{
printf("Selecciona una opció del menú:\n");
scanf("%d", &menu);
switch (menu){
case 1:
for (i=0; i<n_linia_tren; i++){
OmplirDadesLinia(linia_tren);
linia_tren++;
}
break;
case 2:
printf("Introdueix el nom de la línia:\n");
fgets(nom, MAX_NOM, stdin);
printf("Introdueix el nom de dos parades d'aquesta línia:\n");
fgets(parada1, MAX_NOM, stdin);
fgets(parada2, MAX_NOM, stdin);
while(strcmp(nom, linia_tren->nom_linia) != 0){
linia_tren++;
}
while((strcmp(parada1, linia_tren->dades_parades->nom_parada) != 0) && (strcmp(parada2, linia_tren->dades_parades->nom_parada) != 0)){
linia_tren->dades_parades++;
}
if (strcmp(parada1, linia_tren->dades_parades->nom_parada) != 0){
while(strcmp(parada2, linia_tren->dades_parades->nom_parada) != 0){
linia_tren->dades_parades++;
}
}
else{
while(strcmp(parada1, linia_tren->dades_parades->nom_parada) != 0){
linia_tren->dades_parades++;
}
}
break;
case 3: sortir = 0;
}
}while (sortir != 0);
CalculaDisTemps(linia_tren->dades_parades, linia_tren->n_parades, &distancia, &temps);
printf("%f\n", distancia);
printf("%f\n", temps);
free(linia_tren);
}