|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
|
[C] Liste di liste.
Salve,
Ho un problema nella definizione della struttura dati. Vorrei fare una lista di liste. Tale necessità è dattata dalla sistuzione seguente: ho un file che contiene un numero indefinito di paziente, sul quale su ogni riga è riportato paziente è temperatura. Esempio del file in ingresso. 1 36.3 ROSSI 1 36.6 BIANCHI 2 37.1 ROSSI 3 36.1 BIANCHI 4 39.2 ROSSI 5 34.1 ROSSI HO pensato la struttura dati cosi: Una lista principale che contiene soldanto i nomi dei pazienti (in questo caso solo 2), e una lista secondaria che dipenda dalla prima, la quale contiene per ogni pazienete la serie delle temperatura lette sullo stesso paziente. per accedere alla seconda lista intendo seguire qualcosa tipo: pntA->pntB->campo Vorrei chiarimenti su come definere le strutture. grazie Il mio sviluppato per il momento: Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define L_nome 20+1
#define db 1
// Gestione acquisizione dati CAMPI di CC.DAT [Giorno rilevazione] [Temp paziente] [Nome]
// Lista secondaria contenente le "misurazioni sui pazienti" sui pazienti.
struct newT{
int day;
float temperature;
struct newT *nextT;
};
// Lista principale contenente la lista pazienti.
struct newP{
int **T;
char paziente[L_nome];
struct newP *nextP;
};
//*****************MAIN FUNCTIONS*****************
struct newP* scanDATA(struct newP *, FILE*);
struct newP* buildP();
struct newT* buildT();
struct newP* Move(struct newP *, char *);
struct newP* Wiev_list(struct newP *);
//*************AND OF MAIN FUNCTIONS**************
int main (){
//**********************VAR**********************
FILE *fin1;
struct newP *ptopP;
ptopP=NULL;
//*******************END OF VAR******************
if((fin1=fopen("cc.dat","r"))==NULL){
fprintf(stderr,"\nERROR!: I can't open your file ");
exit(EXIT_FAILURE);
}
ptopP=scanDATA(ptopP,fin1);
return 0;
}
//**************Details of Funcitions****************
struct newP* scanDATA(struct newP *ptopP, FILE* dati){
//**debug
if(db==1)
printf("\n-----------FUNZIONE scanDATA-----------\n");
int Day;
float Temp;
char Nome[L_nome];
while (fscanf(dati,"%d %f %s",&Day,&Temp,Nome)!=EOF){
//**debug
if(db==1)
printf("%d %f %s \n",Day,Temp,Nome);
ptopP=Move(ptopP,Nome);
}
if(db==1)
Wiev_list(ptopP);
//**debug
if(db==1)
printf("\n-----------END OF scanDATA-------------");
return (ptopP);
}
struct newP* buildP(){
struct newP *newPTR;
newPTR=(struct newP*)malloc(sizeof (struct newP));
if(newPTR==NULL){
fprintf(stderr,"Memory denied");
exit(EXIT_FAILURE);
}
return(newPTR);
}
struct newT* buildT(){
struct newT *newPTR;
newPTR=(struct newT*)malloc(sizeof (struct newT));
if(newPTR==NULL){
fprintf(stderr,"Memory denied");
exit(EXIT_FAILURE);
}
return(newPTR);
}
struct newP* Move(struct newP *ptopP, char *PAZIENTE){
int add=1;
struct newP *ptmpSERCH;
struct newP *ptmp;
ptmpSERCH=ptopP;
//CHECK!
while(ptmpSERCH!=NULL){
if(strcmp(PAZIENTE,ptmpSERCH->paziente)==0)
add=0;
ptmpSERCH=ptmpSERCH->nextP;
}
//NUOVO paziente
if(add==1){
ptmp=buildP();
strcpy(ptmp->paziente,PAZIENTE);
ptmp->nextP=ptopP;
add=1;
ptopP=ptmp;
}
//Dati per paziente?
return (ptopP);
}
struct newP* Wiev_list(struct newP *punt){
printf("\nLista pazienti della lista:");
while(punt!=NULL){
printf("\n%s",punt->paziente);
punt=punt->nextP;
}
}
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...Vendo : ROUTER STATION PRO, SISTEMA EMEDDED. |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: May 2010
Messaggi: 7
|
In sintesi, non ho capito bene
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
|
Quote:
Non si conosce a priori la dimensione ne della prima che della seconda...mi sono spiegato?
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...Vendo : ROUTER STATION PRO, SISTEMA EMEDDED. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
|
UP ragazzi???
Almeno consigliatemi...se dovreste gestire due campi, di cui non è possibile conoscere a priori le dimensioni di tali strutture cosa usereste? ricordati che una deve fare capo a quella principale.
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...Vendo : ROUTER STATION PRO, SISTEMA EMEDDED. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: May 2010
Messaggi: 7
|
beh... forse io una piccola idea ce l'avrei... non ho capio bene cosa vuoi fare con le struct ma non è importante, proviamo così:
hai un numero indefinito di pazienti da inserire in un vettore quindi... potresti dichiarare un vettore di grandezza ad esempio 100 e in seguito potresti eseguire un controllo ogni volta che viene inserito un paziene, per esempio, tu dichiari il tuo vettore a 100, lo carichi con il primo paziente, alla fine con un do-while potresti chiedere se ci sono altri pazienti e continuare ad eseguirlo fino a quando la risposta non sarà un no, a quel punto esce dal ciclo e finisce il programma... ora spero di non aver scritto qualcosa di errato il mio è solo un consiglio, che A MIO PARERE dovrebbe funzionare |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
|
Cerco di spiegarmi meglio:
Gli esercizi che ci propongono a questo livello, da come si prentano i file di imput ci rendiamo conto se usare strutture statiche o dinamiche. I dati sono i seguenti: DATA TEMP NOME Si ha un numero indefinito di nomi, potrebbero esserci piu temp per lo stesso nome... Quindi come procedo?...acquisisco i dati in modo da fare una liista PRIMARIA i cui campi sono soltanto i NOMI senza doppioni, e vorrei che il secondo campo fosse il puntatore ad una seconda struttura o sottostruttora figlia della prima contente la data e la temp. Non posso utilizzare metedodi che prevedono di stabilire a priori le dimensioni.
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...Vendo : ROUTER STATION PRO, SISTEMA EMEDDED. |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: May 2010
Messaggi: 7
|
ah ho capito ora scusami ma non penso davvero di avere le conoscenze necessarie x aiutarti
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
|
Quote:
RAGA NESSUNO??
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...Vendo : ROUTER STATION PRO, SISTEMA EMEDDED. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:06.










...









