Entra

View Full Version : [C] aiuto programma


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!!!

spaistik
23-02-2010, 17:01
vi prego aiutatemi!!!!!!!!!!!!!!!!!!!!!!!