C Program Problem's Solution For General Hospital

The general hospital of the city of Duckburg has 500 departments. In each department i ∈ {1,. . . , 500} and each work 30 doctors
30 doctors following at 10 more patients.
It plans and implements in C / C an algorithm
1. acquires from standard input elements of a three-dimensional vector A of size 500 × 30 × 10, where
A [i] [j] [k] = q ≥ 1 indicates that the patient's doctor j k in the department will be discharged between q days;
A [i] [j] [k] = 0, j indicates the physician in the department has no patient index k;
2. invoke a function that returns the output index of the department having the minimum number of patients hospitalized;
3. invoke a function that returns output for each department i ∈ {1,. . . , 500} the total number of patients it admitted.




/*Il policlinico della città di Paperopoli ha 500 reparti. In ciascun reparto i ∈ {1, . . . , 500} lavorano 30 medici e ciascuno
dei 30 medici segue al più 10 pazienti.
Si progetti ed implementi in C/C++ un algoritmo che
1. acquisisca da standard input gli elementi di un vettore tridimensionale A di dimensione 500 × 30 × 10, dove
A[i][j][k] = q ≥ 1 indica che il paziente k del medico j nel reparto i sarà dimesso fra q giorni;
A[i][j][k] = 0, indica il medico j nel reparto i non ha alcun paziente di indice k;
2. invochi una funzione che restituisca in output l’indice del reparto avente il minimo numero di pazienti
ricoverati;
3. invochi una funzione che restituisca in output per ciascun reparto i ∈ {1, . . . , 500} il numero totale di pazienti
in esso ricoverati.*/


#include <stdio.h>
#define rep 500
#define med 30
#define paz 10
int getRepartoConMenoPazienti(int*);
int getPazientiInReparto(int*);
int maggioreDi(int);
void inizializza(int*);
void printPazientiInOgniReparto(int*);
int main(void) {
int A[rep][med][paz];
inizializza(A[0][0]);
printf("Il reparto con meno pazienti e' il %d\n",getRepartoConMenoPazienti(A[0][0])+1);
printPazientiInOgniReparto(A[0][0]);
system("PAUSE");
return 0;
}
void inizializza(int* punt) {
for(int i=0;i<rep;i++) {
for(int j=0;j<med;j++) {
for(int k=0;k<paz;k++) {
printf("%dx%dx%d=",i,j,k);
*(punt+i*med*paz+j*paz+k)=maggioreDi(0);
}
}
}
}
int maggioreDi(int inf) {
int tmp;
scanf("%d",&tmp);
while(tmp<inf) {
printf("Errore! Inserire un numero maggiore di %d: ",inf);
scanf("%d",&tmp);
}
return tmp;
}
int getPazientiInReparto(int* punt) {
int cnt=0;
for(int i=0;i<med;i++) {
for(int j=0;j<paz;j++) {
if((*(punt+i*paz+j))!=0) {
cnt++;
}
}
}
return cnt;
}
int getRepartoConMenoPazienti(int* punt) {
int indiceMin=0,valoreMin=getPazientiInReparto(punt);
for(int i=1;i<rep;i++) {
int valoreAtt=getPazientiInReparto(punt+indiceMin*i);
if(valoreAtt<valoreMin) {
valoreMin=valoreAtt;
indiceMin=i;
}
}
return indiceMin;
}
void printPazientiInOgniReparto(int* punt) {
for(int i=0;i<rep;i++) {
printf("Il reparto %d ha %d pazienti\n",i+1,getPazientiInReparto(punt+i*rep));
}
}


Learn More :