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