federik1982
16-08-2007, 22:38
Innanzitutto chiedo scusa per tutti gli errori che faro', e' la prima volte che posto qui, ma sono disperato (ho un esame a fine agosto).
In breve devo creare una struttura semplice semplice che mi consenta di gestire un reparto d'ospedale con posti letto prenotabili per un anno.Bon.
Lasciamo stare i vari pezzi commentati, e' tutto work in progress. La cosa che non riesco a capire è come mai dopo che riempo la mia matrice con dei numeri (puramente a caso di prova), poi non riesco piu ad accedervi, difatti mi esce un bel processor fault quando nel main per prova ho tentato di cambiare un valore. Sicuramente e' un errore banale e grave (nel senso che sono stupido), daltronde io odio programmare...
Se per caso qualcuno lo legge anche solamente, grazie :D
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAX 50
#define GIORNI 20
typedef struct s_reparto
{
char reparto [MAX+1];
char ospedale [MAX+1];
int num_letti;
int *matrice[];
}tipo_reparto;
int num_reparti,indice_riga,indice_col,indice;
FILE *cf;
tipo_reparto *reparto;
void leggifile(void);
//void prenota(void);
void main()
{
leggifile();
// prenota();
indice=0;
reparto[indice].matrice[1][0]=1;
for (indice_riga=0;indice_riga<reparto[indice].num_letti;indice_riga++) //stampa di controllo, e pure limitata a 12 per comodita'
{
for(indice_col=0;indice_col<12;indice_col++)
printf("%d ",reparto[indice].matrice[indice_riga][indice_col]);
printf("\n");
}
fclose(cf);
}
void leggifile()
{
if((cf=fopen("piemonte.txt","r+"))==NULL)
printf("errore in apertura file\n");
else
{
fscanf(cf,"%d",&num_reparti); //finche' non finisco il file dovro' creare le caselle della mia struttura
reparto=(tipo_reparto*)malloc(num_reparti*sizeof(tipo_reparto)); //cosi' dovrei creare un tot di allocazioni in
while (!feof(cf)) //memoria con una struttura tipo_reparto
{
for (indice=0;indice<num_reparti;indice++)
{
fscanf(cf,"%s%s%d",reparto[indice].ospedale,reparto[indice].reparto, &reparto[indice].num_letti);
//ora per ogni reparto di ospedale devo creare la matrice con tutti i letti disponibili o meno
for (indice_riga=0;indice_riga<reparto[indice].num_letti;indice_riga++)
{
reparto[indice].matrice[indice_riga]=(int *)malloc(GIORNI*sizeof(int));
for (indice_col=0;indice_col<GIORNI;indice_col++)
reparto[indice].matrice[indice_riga][indice_col]=3; //per ora setto tutti gli spazi della matrice a 0, lo uso per indicare
//che i letti sono tutti liberi
}
//stampa di prova per la matrice, ridotta anche
for (indice_riga=0;indice_riga<reparto[indice].num_letti;indice_riga++) //stampa di controllo, e pure limitata a 12 per comodita'
{
for(indice_col=0;indice_col<12;indice_col++)
printf("%d ",reparto[indice].matrice[indice_riga][indice_col]);
printf("\n");
}
} //chiudo il primo for
} //chiudo il while
} //chiudo if
//stampa di prova solo per vedere ospedale ,reparto e numero letti
for (indice=0;indice<num_reparti;indice++)
{
printf("ospedale: %s ,reparto: %s ,numero letti: %d \n",reparto[indice].ospedale,reparto[indice].reparto, reparto[indice].num_letti);
}
// fclose(cf);
}
/*
void prenota()
{
char reparto_p[MAX+1];
int giorni_p=0;
while (giorni_p!=-1)
{
if(giorni_p!=-1) //per evitare di fare il primo passo altrove faccio subito un altro controllo...rozzo...ma semplice
{
printf ("Inserire il reparto in cui si vuole prenotare e il numero di giorni da prenotare: (-1 per terminare)\n");
scanf("%s %d",reparto_p,&giorni_p);
//adesso dovremo vedere se troviamo un reparto che abbia un letto disponibile per quei tot giorni richiesti
//e dobbiamo anche trovare quello che ce li ha prima
for (indice_reparto=0; indice_reparto<num_reparti; indice_reparto++) //scorriamo tutti i reparti
{
}
} //chiudo if
} //chiudo while
}
*/
In breve devo creare una struttura semplice semplice che mi consenta di gestire un reparto d'ospedale con posti letto prenotabili per un anno.Bon.
Lasciamo stare i vari pezzi commentati, e' tutto work in progress. La cosa che non riesco a capire è come mai dopo che riempo la mia matrice con dei numeri (puramente a caso di prova), poi non riesco piu ad accedervi, difatti mi esce un bel processor fault quando nel main per prova ho tentato di cambiare un valore. Sicuramente e' un errore banale e grave (nel senso che sono stupido), daltronde io odio programmare...
Se per caso qualcuno lo legge anche solamente, grazie :D
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAX 50
#define GIORNI 20
typedef struct s_reparto
{
char reparto [MAX+1];
char ospedale [MAX+1];
int num_letti;
int *matrice[];
}tipo_reparto;
int num_reparti,indice_riga,indice_col,indice;
FILE *cf;
tipo_reparto *reparto;
void leggifile(void);
//void prenota(void);
void main()
{
leggifile();
// prenota();
indice=0;
reparto[indice].matrice[1][0]=1;
for (indice_riga=0;indice_riga<reparto[indice].num_letti;indice_riga++) //stampa di controllo, e pure limitata a 12 per comodita'
{
for(indice_col=0;indice_col<12;indice_col++)
printf("%d ",reparto[indice].matrice[indice_riga][indice_col]);
printf("\n");
}
fclose(cf);
}
void leggifile()
{
if((cf=fopen("piemonte.txt","r+"))==NULL)
printf("errore in apertura file\n");
else
{
fscanf(cf,"%d",&num_reparti); //finche' non finisco il file dovro' creare le caselle della mia struttura
reparto=(tipo_reparto*)malloc(num_reparti*sizeof(tipo_reparto)); //cosi' dovrei creare un tot di allocazioni in
while (!feof(cf)) //memoria con una struttura tipo_reparto
{
for (indice=0;indice<num_reparti;indice++)
{
fscanf(cf,"%s%s%d",reparto[indice].ospedale,reparto[indice].reparto, &reparto[indice].num_letti);
//ora per ogni reparto di ospedale devo creare la matrice con tutti i letti disponibili o meno
for (indice_riga=0;indice_riga<reparto[indice].num_letti;indice_riga++)
{
reparto[indice].matrice[indice_riga]=(int *)malloc(GIORNI*sizeof(int));
for (indice_col=0;indice_col<GIORNI;indice_col++)
reparto[indice].matrice[indice_riga][indice_col]=3; //per ora setto tutti gli spazi della matrice a 0, lo uso per indicare
//che i letti sono tutti liberi
}
//stampa di prova per la matrice, ridotta anche
for (indice_riga=0;indice_riga<reparto[indice].num_letti;indice_riga++) //stampa di controllo, e pure limitata a 12 per comodita'
{
for(indice_col=0;indice_col<12;indice_col++)
printf("%d ",reparto[indice].matrice[indice_riga][indice_col]);
printf("\n");
}
} //chiudo il primo for
} //chiudo il while
} //chiudo if
//stampa di prova solo per vedere ospedale ,reparto e numero letti
for (indice=0;indice<num_reparti;indice++)
{
printf("ospedale: %s ,reparto: %s ,numero letti: %d \n",reparto[indice].ospedale,reparto[indice].reparto, reparto[indice].num_letti);
}
// fclose(cf);
}
/*
void prenota()
{
char reparto_p[MAX+1];
int giorni_p=0;
while (giorni_p!=-1)
{
if(giorni_p!=-1) //per evitare di fare il primo passo altrove faccio subito un altro controllo...rozzo...ma semplice
{
printf ("Inserire il reparto in cui si vuole prenotare e il numero di giorni da prenotare: (-1 per terminare)\n");
scanf("%s %d",reparto_p,&giorni_p);
//adesso dovremo vedere se troviamo un reparto che abbia un letto disponibile per quei tot giorni richiesti
//e dobbiamo anche trovare quello che ce li ha prima
for (indice_reparto=0; indice_reparto<num_reparti; indice_reparto++) //scorriamo tutti i reparti
{
}
} //chiudo if
} //chiudo while
}
*/