#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 5
#define N 4
typedef struct {
char targa[7];
int ora_ingresso;
int fila;
int posto;
} automobile;
void mostra(int park);
void calcola (int park, int stampa);
void ingresso (int park, automobile dati);
void uscita (int*, int, automobile);
void incasso (int*);
void svuota (int*, int, automobile);
void menu (int *p, int park, automobile dati[][N]) {
int n;
int incasso_attuale=0;
printf("\n");
printf("\n");
printf("\n----------- MENU ----------\n");
printf("(1) mostra parcheggio\n");
printf("(2) calcola posti liberi e occupati\n");
printf("(3) ingresso auto\n");
printf("(4) uscita auto\n");
printf("(5) incasso attuale\n");
printf("(6) svuota parcheggio\n");
printf("(7) esci\n");
do {
printf ("Inserisci numero funzione: ");
scanf ("%d", &n);
} while (n<1 || n>7);
switch (n) {
case 1:
mostra(park);
break;
case 2:
calcola(park, 1);
break;
case 3:
ingresso(park, dati);
break;
case 4:
uscita(&incasso_attuale, park, dati);
break;
case 5:
incasso(&incasso_attuale);
break;
case 6:
svuota (&incasso_attuale, park, dati);
break;
case 7:
printf ("\n-------------- PROGRAMMA TERMINATO --------------\n");
*p=0;
break;
}
}
int main()
{
int parcheggio[M][N];
int sentinel=1;
automobile dati_parcheggio[M][N];
for (int i=0; i<M; i++) {
for (int j=0; j<N; j++) {
parcheggio[M][N] = 0;
dati_parcheggio[i][j].targa[0]='\0';
dati_parcheggio[i][j].ora_ingresso=0;
dati_parcheggio[i][j].fila=0;
dati_parcheggio[i][j].posto=0;
}
}
do {
menu (&sentinel, parcheggio, dati_parcheggio);
} while (sentinel==1);
return 0;
}
//Funzione n1
void mostra (int P[][N]) {
printf ("\n-------------- MOSTRA PARCHEGGIO --------------\n");
for (int i=0; i<M; i++) {
printf ("Fila %d: ", i+1);
for (int j=0; j<N; j++) {
if (P[i][j]==0)
printf (" . ");
else
printf (" X ");
}
printf ("/n");
}
}
//Funzione 2
void calcola (int A[][N], int stampa) {
int lib=0, occ=0;
for (int i=0; i<M; i++) {
for (int j=0; j<N; j++) {
if (A[i][j]==0)
lib++;
else
occ++;
}
}
if (stampa==1) {
printf ("\n-------------- POSTI LIBERI E OCCUPATI --------------\n");
printf ("Posti totali: %d\n", N*M);
printf ("Posti liberi: %d\n", lib);
printf ("Posti occupati: %d\n", occ);
}
return occ;
}
//Funzione n3
void ingresso (int B[][N], automobile data[][N]) {
int F, P;
printf ("-------------- INGRESSO AUTO --------------\n");
if (calcola(B, 0) == N*M) {
printf ("PARCHEGGIO PIENO\n");
return;
}
do {
printf ("Inserisci i dati dell'automobile:\n");
printf ("Fila: ");
scanf ("%d", &F);
printf ("Posto: ");
scanf ("%d", &P);
} while (F<1 || F>M || P<1 || P>N || B[F-1][P-1]);
B[F-1][P-1]=1;
data[F-1][P-1].fila=F;
data[F-1][P-1].posto=P;
printf ("Targa auto: ");
scanf ("%s", data[F-1][P-1].targa);
do {
printf ("Orario di ingresso: ");
scanf ("%d", &data[F-1][P-1].ora_ingresso);
} while (data[F-1][P-1].ora_ingresso<6||data[F-1][P-1].ora_ingresso>22);
}
//Funzione n4
void uscita (int *e, int C[][N], automobile data[][N]) {
char tar[7];
int ora_uscita;
printf ("\n-------------- USCITA AUTO --------------\n");
do {
printf ("Inserire targa: ");
scanf ("%s", tar);
} while (strlen(tar)>7);
int continua=1;
for (int i=0; i<M && continua; i++) {
for (int j=0; j<N && continua; j++) {
if (!(strcmp(data[i][j].targa,tar))) {
C[i][j]=0;
printf ("Inserire orario di uscita: ");
scanf ("%d", &ora_uscita);
*e += (ora_uscita - data[i][j].ora_ingresso)*5;
printf ("Pagare %d euro!", (ora_uscita - data[i][j].ora_ingresso)*5);
data[i][j].fila=0;
data[i][j].posto=0;
data[i][j].ora_ingresso=0;
data[i][j].targa[0]='\0';
continua=0;
}
}
}
}
//Funzione n5
void incasso(int *p) {
printf ("\n-------------- INCASSO --------------\n");
printf ("L'incasso giornaliero attuale vale: %d euro", *p);
}
//Funzione n7
void svuota (int *p, int D[][N], automobile data[][N]) {
printf ("\n-------------- CHIUSURA PARCHEGGIO --------------\n");
for (int i=0; i<M; i++) {
for (int j=0; j<N; j++) {
if (D[i][j]!=0)
D[i][j]=0;
}
}
for (int i=0; i<M; i++) {
for (int j=0; j<N; j++) {
data[i][j].fila=0;
data[i][j].posto=0;
data[i][j].ora_ingresso=0;
data[i][j].targa[0]='\0';
}
}
*p=0;
printf ("Parcheggio svuotato!\n");
}
Il compilatore restituisce i seguenti errori:
- "incompatible type for argument" per le variabili di tipo automobile nelle funzioni che utilizzano questo tipo di variabile;
-"void value not ignored as it ought to be" nella funzione “ingresso”;
-"conflicting types" nelle funzioni mostra "calcola ""ingresso", "uscita" e "svuota".
Non riesco a capire gli errori che ho fatto. Grazie mille anticipatamente per il vostro aiuto.