Salve ragazzi ho un problema con la comprensione e la compilazione di questo programma:
Si vuole sviluppare un programma che simula la consegna della posta da parte di un postino. Si suppone che il postino gestisce un quartiere di n strade e m case. Ogni singola abitazione è identificata da un numero civico, dal nome e cognome dell’utente. La strada è identificata da un numero. Il postino giornalmente riceve la posta che smista a tutti gli utenti. Per “ ottimizzare ” il suo tempo egli inizia dalle strade che hanno ricevuto più posta (in maniera decrescente) e per ogni strada egli inizia a consegnare dall’inizio della strada se essa è dispari e dalla fine se essa è pari. Una simulazione considera una assegnazione casuale di posta agli utenti e lo smistamento secondo “l’algoritmo del postino”. La simulazione deve prevedere la visualizzazione del cammino del postino ed inoltre ad ogni consegna il postino annuncia il nome e il cognome dell’utente che riceve posta. Effettuare almeno 3 test, variando le impostazioni del problema.
La parte in maiuscolo mi crea vari grattacapi,devo usare una funzione rand() per simulare la consegna come se fosse consegnata giornalmente?
Io ho già compilato questo:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
struct Casa{
char nome[15];
char cognome[15];
int num_civ;
int posta;
int num_str;};
typedef struct Casa casa;
casa popolamento(casa ab[][10],int,int,int[]);
void ordinamento(int[],int);
void consegna(casa ab[][10],int,int);
int main()
{int i,j,n,m,cnt[10];
casa ab[10][10];
srand(time(NULL));
printf("inserisci il numero di strade: ");
scanf("\n%d",&n);
printf("inserisci il numero di case per strada: ");
scanf("\n%d",&m);
ab[n][m];
cnt[n];
popolamento(ab,n,m,cnt);
ordinamento(cnt,n);
consegna(ab,n,m);
}
casa popolamento(casa ab[][10],int n,int m,int cnt[10])
{int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("Inserisci il Cognome del proprietario della %d^ abitazione %d strada: ",j+1,i+1);
scanf("\n%s",ab[j].cognome);
printf("Inserisci il Nome del proprietario della %d^ abitazione %d strada: ",j+1,i+1);
scanf("\n%s",ab[j].nome);
ab[j].num_civ=j+1;
ab[j].num_str=i+1;}}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
ab[j].posta=rand()%11;}}
for(i=0;i<n;i++){
for(j=0;j<m;j++)
cnt+=ab[j].posta;}
}
void ordinamento(int cnt[10],int n)
{int i,j,elem;
for(i=1;i<n;i++){
elem=cnt;
j=i-1;
while(j>=0 && elem>cnt[j]){
cnt[j+1]=cnt[j];
j--;}
cnt[j+1]=elem;}
}
void consegna(casa ab[][10],int n,int m)
{int i,j;
for(i=0;i<n;i++){
if(i%2==0)
for(j=m-1;j>=0;j--){
if(ab[j].posta!=0)
printf("%d posta consegnata al Sig. %s %s al N°%d, strada:%d\n",ab[j].posta,ab[i][j].cognome,ab[i][j].nome,ab[i][j].num_civ,ab[i][j].num_str);}
else
for(j=0;j<m;j++){
if(ab[i][j].posta!=0)
printf("%d posta consegnata al Sig. %s %s al N°%d, strada:%d\n",ab[i][j].posta,ab[i][j].cognome,ab[i][j].nome,ab[i][j].num_civ,ab[i][j].num_str);}}
}
Solo ora mi sono accorto che la posta viene smistate giornalmente e che,quindi,dovrei modificare qualcosa.
Consigli?