Chirurgia spinală minim invazivă
Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical. Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale. www.neurohope.ro |
Lista cu sublista (C)
Last Updated: May 10 2019 08:04, Started by
iroxana100
, May 09 2019 23:28
·
0
#1
Posted 09 May 2019 - 23:28
Salut!
Nu reusesc nici cum sa fac o lista cu sublista. Am 2 fisiere text: fisierul pacienti care contine "nr_pacient nume prenume cnp data_nasterii adresa" fisierul afectiuni care contine "nr_pacient nr_afectiune denumire_afectiune data_prezentarii_la medic " Trebuie sa introduc aceste date intr-o lista cu sublista, de tipul: Pacient1 Afectiune1 Afectiune2 Pacient2 Afectiune1 Afectiune2 Afectiune3 etc. Nu inteleg de ce nu mi afiseaza nimic in urma rularii urmatorului cod: #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> typedef struct afect{ int nr_pacient,nr_afectiune; char *denumire_afectiune,*data; struct afect *urm1; }afectiune; typedef struct pac{int nr_pacient; char *nume,*prenume,*datan,*adresa; int cnp; struct afect *sl; struct pac *urm2; }pacient; pacient *listaP=NULL; afectiune *listaAR=NULL,*listaAS=NULL; pacient *pacientNou(int nr_pacient){ pacient *q1,*q2,*p; p=(pacient*)malloc(sizeof(pacient)); if((p==NULL)||(p->adresa==NULL)||(p->datan)==NULL||(p->nume==NULL)||(p->prenume)==NULL){ printf("\nMemorie insuficienta!\n"); return;} p->sl=NULL; p->nr_pacient=nr_pacient; p->urm2=NULL; for(q1=q2=listaP;q1!=NULL&q1->nr_pacient<p->nr_pacient;q2=q1,q1=q1->urm2); if(q1!=q2){ q2->urm2=p; p->urm2=q1; return listaP;} p->urm2=listaP; listaP=p; return listaP;} afectiune *afectiuneNoua(int nrpacient,int nrafectiune,char denumire[80],char data[80]){ afectiune *q1,*q2,*p; p=(afectiune *)malloc(sizeof(afectiune)); p->denumire_afectiune=(char*)malloc(strlen(denumire)+1); if((p == NULL) || (p->denumire_afectiune == NULL)) { printf("\nMemorie insuficienta!\n"); return; } p->urm1=NULL; p->nr_pacient=nrpacient; p->nr_afectiune=nrafectiune; strcpy(p->denumire_afectiune,denumire); strcpy(p->data,data); for(q1=q2=listaAR; q1!=NULL && strcmp(q1->denumire_afectiune, p->denumire_afectiune)<0; q2=q1, q1=q1->urm1); if(q1!=q2) { q2->urm1=p; p->urm1=q1; return listaAR; } p->urm1=q1; listaAR=p; return listaAR; } afectiune *cautarePacient(int nr){ afectiune *p; for(p=listaAS; p!=NULL && p->nr_pacient!=nr; p=p->urm1); return p; } void citirePac(){ FILE*f; afectiune *p; pacient *q; int nrpacient,nrafectiune; char denumirea[80],data[80]; if((f=fopen("afectiuni.txt", "rt"))==NULL) { printf("\nFisierul nu a putut fi deschis!"); return; } while(fscanf(f, "%d %d %s %s", &nrpacient,&nrafectiune,denumirea,data)!=EOF) { p=cautarePacient(nrpacient); if(p==NULL) { listaP=pacientNou(nrpacient); p=cautarePacient(nrpacient); listaAR=q->sl; q->sl=afectiuneNoua(nrpacient,0,0,data); } else { listaAR=q->sl; q->sl=afectiuneNoua(nrpacient,0,0,data); } } fclose(f); } void afisarePacienti(){ pacient *p; afectiune *a; for(p=listaP; p!=NULL; p=p->urm2) { printf("%s \n", p->nume); for(a=p->sl; a!=NULL; a=a->urm1) printf("\t %s %d\n", a->denumire_afectiune, a->data); } } int main(){ citirePac(); afisarePacienti(); getch(); return 0; } Please, help |
#2
Posted 10 May 2019 - 02:19
iroxana100, on 09 mai 2019 - 23:28, said:
Nu inteleg de ce nu mi afiseaza nimic in urma rularii urmatorului cod: Daca nu si nu, facem noi pentru tine asta dar prima data tu ne arati ca ai incercat sa te zbati un pic (asa-ti ramane pe viata, nu cand iti indica cineva la milimetru ce si cum). |
#3
Posted 10 May 2019 - 04:16
Am format codul ca sa intelegem mai bine cu totii:
#include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> typedef struct afect { int nr_pacient, nr_afectiune; char * denumire_afectiune, * data; struct afect * urm1; } afectiune; typedef struct pac { int nr_pacient; char * nume, * prenume, * datan, * adresa; int cnp; struct afect * sl; struct pac * urm2; } pacient; pacient * listaP = NULL; afectiune * listaAR = NULL, * listaAS = NULL; pacient * pacientNou(int nr_pacient) { pacient * q1, * q2, * p; p = (pacient * ) malloc(sizeof(pacient)); if ((p == NULL) || (p - > adresa == NULL) || (p - > datan) == NULL || (p - > nume == NULL) || (p - > prenume) == NULL) { printf("\nMemorie insuficienta!\n"); return; } p - > sl = NULL; p - > nr_pacient = nr_pacient; p - > urm2 = NULL; for (q1 = q2 = listaP; q1 != NULL & q1 - > nr_pacient < p - > nr_pacient; q2 = q1, q1 = q1 - > urm2); if (q1 != q2) { q2 - > urm2 = p; p - > urm2 = q1; return listaP; } p - > urm2 = listaP; listaP = p; return listaP; } afectiune * afectiuneNoua(int nrpacient, int nrafectiune, char denumire[80], char data[80]) { afectiune * q1, * q2, * p; p = (afectiune * ) malloc(sizeof(afectiune)); p - > denumire_afectiune = (char * ) malloc(strlen(denumire) + 1); if ((p == NULL) || (p - > denumire_afectiune == NULL)) { printf("\nMemorie insuficienta!\n"); return; } p - > urm1 = NULL; p - > nr_pacient = nrpacient; p - > nr_afectiune = nrafectiune; strcpy(p - > denumire_afectiune, denumire); strcpy(p - > data, data); for (q1 = q2 = listaAR; q1 != NULL && strcmp(q1 - > denumire_afectiune, p - > denumire_afectiune) < 0; q2 = q1, q1 = q1 - > urm1); if (q1 != q2) { q2 - > urm1 = p; p - > urm1 = q1; return listaAR; } p - > urm1 = q1; listaAR = p; return listaAR; } afectiune * cautarePacient(int nr) { afectiune * p; for (p = listaAS; p != NULL && p - > nr_pacient != nr; p = p - > urm1); return p; } void citirePac() { FILE * f; afectiune * p; pacient * q; int nrpacient, nrafectiune; char denumirea[80], data[80]; if ((f = fopen("afectiuni.txt", "rt")) == NULL) { printf("\nFisierul nu a putut fi deschis!"); return; } while (fscanf(f, "%d %d %s %s", & nrpacient, & nrafectiune, denumirea, data) != EOF) { p = cautarePacient(nrpacient); if (p == NULL) { listaP = pacientNou(nrpacient); p = cautarePacient(nrpacient); listaAR = q - > sl; q - > sl = afectiuneNoua(nrpacient, 0, 0, data); } else { listaAR = q - > sl; q - > sl = afectiuneNoua(nrpacient, 0, 0, data); } } fclose(f); } void afisarePacienti() { pacient * p; afectiune * a; for (p = listaP; p != NULL; p = p - > urm2) { printf("%s \n", p - > nume); for (a = p - > sl; a != NULL; a = a - > urm1) printf("\t %s %d\n", a - > denumire_afectiune, a - > data); } } int main() { citirePac(); afisarePacienti(); getch(); return 0; } |
#4
Posted 10 May 2019 - 08:04
1. O prima observatie (care poate sa fie eroare sau.. nu). Daca folosesti liste, nu prea mai e indicat sa folosesti si numerotarea nodurilor gen
int nr_pacient,nr_afectiune;Listele se folosesc datorita faptuli ca poti scoate si introduce elemente in ea foarte usor (un numar fix de pasi). Daca numerotezi nodurile, lista isi pierde scopul deoarece cand scoti un nod din lista, tre sa renumerotezi restul lor. 2.O eroare in pacient * pacientNou(...) p = (pacient * ) malloc(sizeof(pacient)); if ((p == NULL) || (p - > adresa == NULL) || (p - > datan) == NULL || (p - > nume == NULL) || (p - > prenume) == NULL) { printf("\nMemorie insuficienta!\n"); return; }dupa ce atribui lui p o valoare, cine-ti garanteaza ca p->adresa nu e NULL ? Si daca e NULL, de ce-i dai return? De unde stii ca ai returnat din cauza ca p==NULL sau p->adresa==NULL ??? Din ce C++ mai stiu eu, cred ca codul nici nu se compileaza, tre sa returnezi ceva, eventual NULL. Dar inainte de asta, tre sa dai si un free(), altfel vei avea memory leaks. Deci ai zbarcit-o rau aici. 3. Trebuie sa intelegi mai intai rolul listelor pentru a le putea folosi cu.. folos. La modul cum ai gandit programelul, mai bine foloseai tablouri (sau vectori) Ce faci daca 2 pacienti au aceiasi afectiune? Nu inteleg ce-ai vrut sa faci acolo. Creezi un nod, dupa care cauti in lista intr-u nod foarte ciudat sau incorect pentru ca daca q1!=q2, tu dai return. Dar q1 va fi diferit de q2 la al doilea pas din iteratie, intotdeauna. Or mai fi si alte greseli, eu ma opresc aici deocamdata. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users