spaistik
23-02-2010, 02:28
ciao ragazzi, mi servirebbe urgentemente un aiutino, praticamente devo creare un programma che simuli la consegna della posta, la traccia e la seguente:
"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, 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."
io mi sono bloccato praticamente nel "egli inizia dalle strade che hanno ricevuto più posta"
il codice che ho sviluppato è 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);}}
}
praticamente devo solo far visualizzare la struct in base alla strada che ha avuto più posta, ma nn ho proprio idea di come fare! ho provato a usare un array cnt[] che contiene il totale di posta ottenuta per ogni strada e ho provato ad ordinarlo in maniera decrescente, ma nn so come continuare....vi prego aiutatemi!!!
"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, 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."
io mi sono bloccato praticamente nel "egli inizia dalle strade che hanno ricevuto più posta"
il codice che ho sviluppato è 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);}}
}
praticamente devo solo far visualizzare la struct in base alla strada che ha avuto più posta, ma nn ho proprio idea di come fare! ho provato a usare un array cnt[] che contiene il totale di posta ottenuta per ogni strada e ho provato ad ordinarlo in maniera decrescente, ma nn so come continuare....vi prego aiutatemi!!!