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