Problema risoluzione progetto consegna poste di un postino

di il
8 risposte

Problema risoluzione progetto consegna poste di un postino

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?

8 Risposte

  • Re: Problema risoluzione progetto consegna poste di un postino

    Prima di tutto posta il codice con i tag CODE nel forum ...
  • Re: Problema risoluzione progetto consegna poste di un postino

    oregon ha scritto:


    Prima di tutto posta il codice con i tag CODE nel forum ...
    Cosa intendi dire?Sono nuovo del forum...
  • Re: Problema risoluzione progetto consegna poste di un postino

    Sirae ha scritto:


    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[i][j].cognome);
    printf("Inserisci il Nome del proprietario della %d^ abitazione %d strada: ",j+1,i+1);
    scanf("\n%s",ab[i][j].nome);
    ab[i][j].num_civ=j+1;
    ab[i][j].num_str=i+1;}}
    for(i=0;i<n;i++){
    for(j=0;j<m;j++){
    ab[i][j].posta=rand()%11;}}
    for(i=0;i<n;i++){
    for(j=0;j<m;j++)
    cnt[i]+=ab[i][j].posta;}
    }
    
    void ordinamento(int cnt[10],int n)
    {int i,j,elem;
    for(i=1;i<n;i++){
    elem=cnt[i];
    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[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);}
    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?
  • Re: Problema risoluzione progetto consegna poste di un postino

    Ma che vuol dire

    ab[n][m];
    cnt[n];

    ???

    E poi la funzione popolamento deve essere void ...
  • Re: Problema risoluzione progetto consegna poste di un postino

    oregon ha scritto:


    Ma che vuol dire

    ab[n][m];
    cnt[n];


    ???

    In realtà ho apportato varie modifiche al progetto iniziale, ho provato anche a fare una procedura di un'abitazione [n][m] dove per n indico la strada e m l'abitazione ma è un'idea pessima.

    Per cnt[n] volevo creare una sorta di 'contatore della posta' ma fine a se stesso in quanto successivamente ho letto che il postino consegna la posta ogni giorno...

    Ma più in generale,senza guardare il codice,sapreste aiutarmi?
  • Re: Problema risoluzione progetto consegna poste di un postino

    Non mi sono spiegato ...

    ab[n][m];
    cnt[n];

    non hanno senso in C ....
  • Re: Problema risoluzione progetto consegna poste di un postino

    oregon ha scritto:


    Non mi sono spiegato ...

    ab[n][m];
    cnt[n];

    non hanno senso in C ....
    Si,ti capisco...il problema è che fra 2 giorni dovrei consegnare questo progetto e sto andando nel pallone...
  • Re: Problema risoluzione progetto consegna poste di un postino

    Toglile e metti void nella funzione popolamento. Poi compila ed esegui.
Devi accedere o registrarti per scrivere nel forum
8 risposte