•xxxxxxxxx
Strain
Karma: 0
Deconectat
Mesaje: 4
|
|
« : Mai 17, 2011, 17:46:18 » |
|
Salut, as vrea va rog sa ma ajutati putin Am facut totul, doar ca stergerea nu e buna, ce/unde am gresit ? Problema: Sa se creeze un arbore binar de cautare care sa contina in cimpul informatie urmatoarea structura: nume, prenume, medie, grupa; structura arborescenta se realizeaza dupa cimpurile nume si prenume. Se cere sa se realizeze cite o functie pentru: INSERAREA unui nod in arbore; LISTAREA tuturor studentilor in ordine alfabetica; MODIFICAREA datelor unui nod; AFISAREA arborescenta;STERGEREA unui nod. #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h>
typedef struct { char nume[15]; char prenume[15]; int media; int grupa; }informatie;
typedef struct nod { informatie inf; struct nod *st,*dr; }t_nod;
nod *a;
nod *CREARE(nod *rad) { if(rad!=NULL) { printf("\n Arborele este creat"); return rad; } else { rad=new nod; printf(" Numele:"); scanf("%s",rad->inf.nume); printf(" Prenumele:"); scanf("%s",rad->inf.prenume); printf(" Media:"); scanf("%d",&rad->inf.media); printf(" Grupa:"); scanf("%d",&rad->inf.grupa); rad->st=NULL; rad->dr=NULL; printf("\n Arborele a fost creat"); return rad; } } nod *INSERARE(nod *rad, char k[15]) { int aux; if(rad==NULL) { rad=new nod; strcpy(rad->inf.nume,k); printf(" Prenumele:"); scanf("%s",rad->inf.prenume); printf(" Media:"); scanf("%d",&rad->inf.media); printf(" Grupa:"); scanf("%d",&rad->inf.grupa); rad->st=NULL; rad->dr=NULL; return rad; } else { aux=strcmp(rad->inf.nume,k); if(aux==0) { printf("\n Numele acesta exista"); getch(); return rad; } if(aux<0) rad->st=INSERARE(rad->st,k); else rad->dr=INSERARE(rad->dr,k); } return rad; }
void LIST(nod *rad) { if(rad) { LIST(rad->dr); { printf("\n Numele:%s\n",rad->inf.nume); printf(" Prenumele:%s\n",rad->inf.prenume); printf(" Media:%d\n",rad->inf.media); printf(" Grupa:%d\n",rad->inf.grupa); } LIST(rad->st); } }
void MODIFICARE(nod *rad, char k[15]) { int aux; aux=strcmp(rad->inf.nume,k); if(aux==0) { printf(" Prenumele:"); scanf("%s",rad->inf.prenume); printf(" Media:"); scanf("%d",&rad->inf.media); printf(" Grupa:"); scanf("%d",&rad->inf.grupa); } else if(aux!=0 && rad->st!=NULL) MODIFICARE(rad->st,k); else if(aux!=0 && rad->dr!=NULL) MODIFICARE(rad->dr,k); }
nod *DEL(nod *p, nod *q, nod *r) { if(p->dr!=NULL) DEL(p->dr,q,r); else { p->dr=r; q=q->st; } return(0); }
void DELETE(nod *rad, char k[15]) { int aux; nod *q; aux=strcmp(k,rad->inf.nume); if(aux<0) DELETE(rad->st,k); else if(aux>0) DELETE(rad->dr,k); else { q=rad; if(q->dr==NULL) rad=q->st; else if(q->st==NULL) rad=q->dr; else DEL(q->st,q,q->dr); } delete rad; }
void main() { char ch,litera,k[15]; do { clrscr(); printf("\n 1. Crearea arborelui \n 2. Inserare \n 3. Listare"); printf("\n 4. Modificare \n 5. Stergere \n 0. Exit \n "); ch=getch(); switch(ch) { case '1':clrscr(); a=CREARE(a); getch(); break; case '2':clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { do { clrscr(); printf("\n Numele:");scanf("%s",k); INSERARE(a,k); printf("\n Continuati?"); litera=getch(); } while((litera!='n')&&(litera!='N')); } getch(); break; case '3':clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { clrscr(); LIST(a); } getch(); break; case '4':clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { printf("\n Numele:"); scanf("%s",k); MODIFICARE(a,k); } getch(); break; case '5':clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { printf("\n Numele:"); scanf("%s",k); DELETE(a,k); printf("\n Nodul a fost sters"); } getch(); break; } } while(ch!='0'); }
Acesta e codul la stergere: nod *DEL(nod *p, nod *q, nod *r) { if(p->dr!=NULL) DEL(p->dr,q,r); else { p->dr=r; q=q->st; } return(0); }
void DELETE(nod *rad, char k[15]) { int aux; nod *q; aux=strcmp(k,rad->inf.nume); if(aux<0) DELETE(rad->st,k); else if(aux>0) DELETE(rad->dr,k); else { q=rad; if(q->dr==NULL) rad=q->st; else if(q->st==NULL) rad=q->dr; else DEL(q->st,q,q->dr); } delete rad; }
Mersis
|
|
« Ultima modificare: Mai 17, 2011, 18:31:41 de către Savin Tiberiu »
|
Memorat
|
|
|
|
•toni2007
|
|
« Răspunde #1 : Mai 17, 2011, 18:56:12 » |
|
#include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h>
typedef struct { char nume[15]; char prenume[15]; int media; int grupa; } informatie;
typedef struct nod { informatie inf; struct nod *st,*dr; } t_nod;
nod *a;
nod *CREARE(nod *rad) { if(rad!=NULL) { printf("\n Arborele este creat"); return rad; } else { rad=new nod; printf(" Numele:"); scanf("%s",rad->inf.nume); printf(" Prenumele:"); scanf("%s",rad->inf.prenume); printf(" Media:"); scanf("%d",&rad->inf.media); printf(" Grupa:"); scanf("%d",&rad->inf.grupa); rad->st=NULL; rad->dr=NULL; printf("\n Arborele a fost creat"); return rad; } } nod *INSERARE(nod *rad, char k[15]) { int aux; if(rad==NULL) { rad=new nod; strcpy(rad->inf.nume,k); printf(" Prenumele:"); scanf("%s",rad->inf.prenume); printf(" Media:"); scanf("%d",&rad->inf.media); printf(" Grupa:"); scanf("%d",&rad->inf.grupa); rad->st=NULL; rad->dr=NULL; return rad; } else { aux=strcmp(rad->inf.nume,k); if(aux==0) { printf("\n Numele acesta exista"); getch(); return rad; } if(aux<0) rad->st=INSERARE(rad->st,k); else rad->dr=INSERARE(rad->dr,k); } return rad; }
void LIST(nod *rad) { if(rad) { LIST(rad->dr); { printf("\n Numele:%s\n",rad->inf.nume); printf(" Prenumele:%s\n",rad->inf.prenume); printf(" Media:%d\n",rad->inf.media); printf(" Grupa:%d\n",rad->inf.grupa); } LIST(rad->st); } }
void MODIFICARE(nod *rad, char k[15]) { int aux; aux=strcmp(rad->inf.nume,k); if(aux==0) { printf(" Prenumele:"); scanf("%s",rad->inf.prenume); printf(" Media:"); scanf("%d",&rad->inf.media); printf(" Grupa:"); scanf("%d",&rad->inf.grupa); } else if(aux!=0 && rad->st!=NULL) MODIFICARE(rad->st,k); else if(aux!=0 && rad->dr!=NULL) MODIFICARE(rad->dr,k); }
nod *DEL(nod *p, nod *q, nod *r) { if(p->dr!=NULL) DEL(p->dr,q,r); else { p->dr=r; q=q->st; } return(0); }
void DELETE(nod *rad, char k[15]) { int aux; nod *q; aux=strcmp(k,rad->inf.nume); if(aux<0) DELETE(rad->st,k); else if(aux>0) DELETE(rad->dr,k); else { q=rad; if(q->dr==NULL) rad=q->st; else if(q->st==NULL) rad=q->dr; else DEL(q->st,q,q->dr); } delete rad; }
void main() { char ch,litera,k[15]; do { clrscr(); printf("\n 1. Crearea arborelui \n 2. Inserare \n 3. Listare"); printf("\n 4. Modificare \n 5. Stergere \n 0. Exit \n "); ch=getch(); switch(ch) { case '1': clrscr(); a=CREARE(a); getch(); break; case '2': clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { do { clrscr(); printf("\n Numele:"); scanf("%s",k); INSERARE(a,k); printf("\n Continuati?"); litera=getch(); } while((litera!='n')&&(litera!='N')); } getch(); break; case '3': clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { clrscr(); LIST(a); } getch(); break; case '4': clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { printf("\n Numele:"); scanf("%s",k); MODIFICARE(a,k); } getch(); break; case '5': clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { printf("\n Numele:"); scanf("%s",k); DELETE(a,k); printf("\n Nodul a fost sters"); } getch(); break; } } while(ch!='0'); }
Acesta e codul la stergere: nod *DEL(nod *p, nod *q, nod *r) { if(p->dr!=NULL) DEL(p->dr,q,r); else { p->dr=r; q=q->st; } return(0); }
void DELETE(nod *rad, char k[15]) { int aux; nod *q; aux=strcmp(k,rad->inf.nume); if(aux<0) DELETE(rad->st,k); else if(aux>0) DELETE(rad->dr,k); else { q=rad; if(q->dr==NULL) rad=q->st; else if(q->st==NULL) rad=q->dr; else DEL(q->st,q,q->dr); } delete rad; }
Posteaza si tu formatat frumos, altfel nu cred ca o sa te ajute nimeni .
|
|
|
Memorat
|
|
|
|
•xxxxxxxxx
Strain
Karma: 0
Deconectat
Mesaje: 4
|
|
« Răspunde #2 : Mai 17, 2011, 19:13:20 » |
|
deci aceasta e rezolvarea mea: #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h>
typedef struct { char nume[15]; char prenume[15]; int media; int grupa; }informatie;
typedef struct nod { informatie inf; struct nod *st,*dr; }t_nod;
nod *a;
nod *CREARE(nod *rad) { if(rad!=NULL) { printf("\n Arborele este creat"); return rad; } else { rad=new nod; printf(" Numele:"); scanf("%s",rad->inf.nume); printf(" Prenumele:"); scanf("%s",rad->inf.prenume); printf(" Media:"); scanf("%d",&rad->inf.media); printf(" Grupa:"); scanf("%d",&rad->inf.grupa); rad->st=NULL; rad->dr=NULL; printf("\n Arborele a fost creat"); return rad; } } nod *INSERARE(nod *rad, char k[15]) { int aux; if(rad==NULL) { rad=new nod; strcpy(rad->inf.nume,k); printf(" Prenumele:"); scanf("%s",rad->inf.prenume); printf(" Media:"); scanf("%d",&rad->inf.media); printf(" Grupa:"); scanf("%d",&rad->inf.grupa); rad->st=NULL; rad->dr=NULL; return rad; } else { aux=strcmp(rad->inf.nume,k); if(aux==0) { printf("\n Numele acesta exista"); getch(); return rad; } if(aux<0) rad->st=INSERARE(rad->st,k); else rad->dr=INSERARE(rad->dr,k); } return rad; }
void LIST(nod *rad) { if(rad) { LIST(rad->dr); { printf("\n Numele:%s\n",rad->inf.nume); printf(" Prenumele:%s\n",rad->inf.prenume); printf(" Media:%d\n",rad->inf.media); printf(" Grupa:%d\n",rad->inf.grupa); } LIST(rad->st); } }
void MODIFICARE(nod *rad, char k[15]) { int aux; aux=strcmp(rad->inf.nume,k); if(aux==0) { printf(" Prenumele:"); scanf("%s",rad->inf.prenume); printf(" Media:"); scanf("%d",&rad->inf.media); printf(" Grupa:"); scanf("%d",&rad->inf.grupa); } else if(aux!=0 && rad->st!=NULL) MODIFICARE(rad->st,k); else if(aux!=0 && rad->dr!=NULL) MODIFICARE(rad->dr,k); }
nod *DEL(nod *p, nod *q, nod *r) { if(p->dr!=NULL) DEL(p->dr,q,r); else { p->dr=r; q=q->st; } return(0); }
void DELETE(nod *rad, char k[15]) { int aux; nod *q; aux=strcmp(k,rad->inf.nume); if(aux<0) DELETE(rad->st,k); else if(aux>0) DELETE(rad->dr,k); else { q=rad; if(q->dr==NULL) rad=q->st; else if(q->st==NULL) rad=q->dr; else DEL(q->st,q,q->dr); } delete rad; }
void main() { char ch,litera,k[15]; do { clrscr(); printf("\n 1. Crearea arborelui \n 2. Inserare \n 3. Listare"); printf("\n 4. Modificare \n 5. Stergere \n 0. Exit \n "); ch=getch(); switch(ch) { case '1':clrscr(); a=CREARE(a); getch(); break; case '2':clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { do { clrscr(); printf("\n Numele:");scanf("%s",k); INSERARE(a,k); printf("\n Continuati?"); litera=getch(); } while((litera!='n')&&(litera!='N')); } getch(); break; case '3':clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { clrscr(); LIST(a); } getch(); break; case '4':clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { printf("\n Numele:"); scanf("%s",k); MODIFICARE(a,k); } getch(); break; case '5':clrscr(); if(a==NULL) printf("\n Trebuie sa creati arborele"); else { printf("\n Numele:"); scanf("%s",k); DELETE(a,k); printf("\n Nodul a fost sters"); } getch(); break; } } while(ch!='0'); } Iar aici e codul de la stergere: nod *DEL(nod *p, nod *q, nod *r) { if(p->dr!=NULL) DEL(p->dr,q,r); else { p->dr=r; q=q->st; } return(0); }
void DELETE(nod *rad, char k[15]) { int aux; nod *q; aux=strcmp(k,rad->inf.nume); if(aux<0) DELETE(rad->st,k); else if(aux>0) DELETE(rad->dr,k); else { q=rad; if(q->dr==NULL) rad=q->st; else if(q->st==NULL) rad=q->dr; else DEL(q->st,q,q->dr); } delete rad; }
|
|
|
Memorat
|
|
|
|
•Mishu91
|
|
« Răspunde #3 : Mai 17, 2011, 20:17:46 » |
|
Cred că ar fi mult mai bine (mai ales pentru tine) să explici în cuvinte ce nu îţi iese, eventual să dai ceva detalii de la debug. Aşa dacă trânteşti nişte cod formatat aşa încât doar tu să-l poţi înţelege, şansele să vină cineva şi să facă debug in locul tău sunt mici.
|
|
|
Memorat
|
|
|
|
•xxxxxxxxx
Strain
Karma: 0
Deconectat
Mesaje: 4
|
|
« Răspunde #4 : Mai 17, 2011, 20:56:16 » |
|
deci rezolvarea facuta de mine se compileaza, nu primesc errori. merge inserarea, listarea, modificarea, doar ca atunci cand dau la stergere (se face dupa NUME), scriu numele care vreau sa-l sterg, primesc mesajul ”Nodul a fost sters”, iar cand verific la listare, nu e sters nimic.
|
|
|
Memorat
|
|
|
|
|