PDA

View Full Version : Aiuto Programma In C!!!!!


Er Paulus
26-06-2002, 20:00
#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)){ /*<-------ERRORE!!!!???******/
/****************************/
if((viaggio.postioccupati)+(occupazione)<= (viaggio.postitotali)){ /*Dopo più di 3 volte che fai il ciclo*/
nuovocodice=codice+1; /*invece che andare avanti, il codice torna*/
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;
}

+--------------------------------------------------------------+
non riesco a capire il problema nella funzione trovanave!!
perchèèèé!!!????

grazie!!

gik25
26-06-2002, 20:19
Mi piacerebbe darti una mano ma ho poco tempo e non faccio in tempo a leggerlo.
Ma a che serve?

Er Paulus
26-06-2002, 21:39
Originariamente inviato da gik25
[B]Mi piacerebbe darti una mano ma ho poco tempo e non faccio in tempo a leggerlo.
Ma a che serve?

riguarda la prenotazione di posti macchina in una serie di traghetti.

Hostyle
26-06-2002, 21:43
mi piacerebbe aiutarti ma da ieri sto imparando il c! cmq spostatelo in porgrammazione!!

prio
27-06-2002, 09:22
Originariamente inviato da Er Paulus
non riesco a capire il problema nella funzione trovanave!!
perchèèèé!!!????

grazie!!

Saranno 10 anni che non programmo, ma non capisco perche' hai usato una ricorsiva all'interno di un ciclo. Qual e' la condizione di uscita? Il risultato ritornato dalla ricorsione dove viene usato?Dove viene incrementato codice? Passandolo in questa maniera non viene allocato una nuova var codice ogni volta che trovanave viene chiamata?