PDA

View Full Version : Aiuto!!!dove Sta L'errore??


Er Paulus
26-06-2002, 19:55
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NUMVIAGGI 15
#define LUNGTARGA 7

/*typedef int Tipocodice[NUMVIAGGI];*/
typedef char Tipotarga[LUNGTARGA+1];

struct posti{
int codice;
int postioccupati;
int postitotali;
};
typedef struct posti Tipoposti;

struct veicolo{
char a;
char b;
};
typedef struct veicolo Tipoveicolo;

struct file{
Tipotarga targa;
char veicolo;
int codice;
};
typedef struct file Tipofile;

struct lista{
Tipotarga targa;
int codice;
struct lista *next;
};
typedef struct lista Nodolista;
typedef Nodolista *Tipolista;


typedef int bool;
#define TRUE 1
#define FALSE 0

/**********PUNTO 2**************/

int trasformacodice(char veicolo)
{
int occ;
if(veicolo== 'a')
occ=1;
else
occ=2;

return occ;
}


int trovanave(Tipoposti viaggio,int occupazione,int codice)
{
int nuovocodice=-1;
bool trovato = FALSE;

while(!trovato && (codice <=14)){
if((viaggio.postioccupati)+(occupazione)<(viaggio.postitotali)){
nuovocodice=codice+1;
viaggio.postioccupati=viaggio.postioccupati+(occupazione); /* indietro!!!!*/
trovato=TRUE;

}
else {
printf("Inserire il numero di posti totali del traghetto numero %d :\n",codice+1);
scanf("%d", &viaggio.postitotali);
printf("Inserire il numero di posti occupati del traghetto numero %d :\n",codice+1);
scanf("%d", &viaggio.postioccupati);
trovanave(viaggio,occupazione,(codice+1));
}
}

return nuovocodice;
}
/*********PUNTO 3*************/

Tipolista crealista(char *nomefile, Tipoposti viaggio)
{
FILE *fp;
Tipofile file;
Tipolista aux, lista=NULL;
int occupaz=0;


if((fp=fopen(nomefile,"r"))==NULL){
printf("ERRORE!!!!!\n");
exit(1);
}


fscanf(fp,"%7s%2c%d", file.targa,&file.veicolo,&file.codice);
while(!feof(fp)){
occupaz=trasformacodice(file.veicolo);
aux= malloc(sizeof(Nodolista));
strcpy(aux->targa,file.targa);
aux->codice=trovanave(viaggio,occupaz,(file.codice)-1);
aux->next=lista;
lista = aux;
fscanf(fp,"%7s%2c%d", file.targa,&file.veicolo,&file.codice);
}

fclose(fp);
return lista;
}

/* FUNZIONI AUSILIARIE USATE NEL DRIVER */

void stampalista(Tipolista lis)
{
while(lis!=NULL){
printf("%-7s%d\n", lis->targa,lis->codice);
lis=lis->next;
}
}

int main()
{
char nomefile[256];
char veicolo;
int occupazione=0;
Tipoposti viaggio;
int codice=0;
int nuovocodice;
Tipolista lis;
bool giusto=FALSE;

printf("Inserire il tipo di veicolo(a= 1posto/ b=2 posti):\n");
scanf("%c", &veicolo);
printf("Inserire il codice del traghetto da prendere(compreso tra 0 e 14): \n");
scanf("%d", &codice);
while(giusto!=TRUE){
if(codice>14){
printf("Errore!!\nRiprovare!!\n");
printf("Inserire il codice del traghetto da prendere(compreso tra 0 e 14): \n");
scanf("%d", &codice);
}else
giusto=TRUE;
}

occupazione= trasformacodice(veicolo);
printf("Inserire il numero di posti totali del traghetto numero %d :\n",codice);
scanf("%d", &viaggio.postitotali);
printf("Inserire il numero di posti occupati del traghetto numero %d :\n",codice);
scanf("%d", &viaggio.postioccupati);

/*printf("occupazione = %d\n", occupazione);*/
nuovocodice= trovanave(viaggio,occupazione,codice);
printf("%d\n", nuovocodice);
printf("Inserire il nome del file da aprire:\n");
scanf("%s", nomefile);
lis= crealista(nomefile,viaggio);

stampalista(lis);


return 0;
}


--------------------------------------------------------

nella funzione trovaviaggio, dopo 3 volte che faccio il ciclo, invece di andare avanti con il codice, torna indietro!!
perchè!??
grazie ciao!!

p.s. se siete interessati vi posso dare il testo che il file del programma.!

ripsk
28-06-2002, 21:09
Ti consiglio vivamente di postare anche una spiegazione di che cose deve fare il programma, e poi i commenti non fanno mai male;)
Poi uno dei pochi difetti del forum è che elimina l'indentazione,rendendo meno leggibile il flusso del codice.
Ti consiglio di provare a disegnare un diagramma di flusso (anche su carta), puo' esserti molto utile, così facendo sono riuscito ad interpretare interamente un sorgente asm(cpu risc di un pic) non commentato di cui sapevo solo a grandi linee il funzionamento della macchina che pilotava.
Senza mi stavo impantanando alla 3a pagina(A4) di codice, e fai conto che non sono nè un esperto ne un buon programmatore (mi reputo ancora dilettante:) ).

Er Paulus
28-06-2002, 21:19
l'ho risolto in un altro modo!
e ora gira perfettamente!!

se ti interessa ti mando i dati del problema e il codice!!
ciao!

ripsk
28-06-2002, 21:28
Mi fà veramente piacere che tu l'abbia risolto da solo:)
Attualmente sono già al lavoro su di un progetto che mi occupa abbastanza tempo, comunque grazie lo stesso.