Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Arbori si liste : Noiembrie 23, 2013, 22:16:19
struct nod
{
    char Nume[21];
    nod * urm;
    nr *prim,*ultim; // lista de adiacenta
};


asta nu inteleg...Sad  prim si ultim nu sunt de tip nod, sunt de tip nr.
2  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Arbori si liste : Noiembrie 23, 2013, 20:52:13
Multumesc mult mult mult de tot!
Acum o sa incerc sa o inteleg si apoi sa lucrez singur. Sunt nou cu arborii si mi-a fost destul de greu sa-i inteleg fara ajutor.

Legat de IDE, folosesc MinGW si CodeBlocks, dar lucrez in C si de acolo e diferenta de biblioteci, memory allocation etc.
Dar nu e problema, o sa adaptez algoritmul pentru C, dupa ce il inteleg perfect.
Multumesc inca o data!

Ooops Sad Tocmai ce am realizat ca foloseste doua liste. (Sper sa nu gresesc). Eu trebuie sa folosesc o lista si un arbore. Dar o sa incerc sa ma iau dupa modelul tau. Sper sa reusesc. Multumesc inca o data.
3  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Arbori si liste : Noiembrie 23, 2013, 17:44:47
Ok. Trebuie sa creez o "agenda telefonica" rudimentara. Programul meu citeste de la tastatura un nume si un numar (<nume>spatiu<numar>) si creaza un arbore, sortat dupa nume. Fiecare nod al arborelui contine un nume si o lista (care stocheaza toate numerele de telefon ale persoanei respective. Cu alte cuvinte, daca introduci de doua ori acelasi nume, dar cu numere diferite, adaug noul numar in lista de care apartine). Citirea se face pana la introducere caracterului '.', apoi, tot pana la introducerea acestui caracter cer user-ului sa introduca un nume. Fac cautarea dupa nume, daca numele exista, printez toate numerele care apartin de el. Altfel, afiez "Nu a fost gasit". (parte pe care inca nu am introdus-o in cod). De asemenea, programul nu tine cont de litere mari sau mici sau situatii de "GeNUl". De aceea am facut functia "upper".
4  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Arbori si liste : Noiembrie 23, 2013, 16:58:16
Uff Sad Am reusit sa misc ceva, dar am greseli pentru ca nu returneaza ce trebuie. Asta e codul meu..

Cod:
#include<stdio.h> 
#include<stdlib.h>
#include<string.h>  

typedef struct list {
char number[100];
struct list *next;
}List;

List *head, *tail;

typedef struct tree {
char name[100];
List *number;
struct tree *left;
struct tree *right;
}Tree;

void upper(char a[]){
   int i; for(i=0;i<=strlen(a)-1;i++) {
   if(a[i]>=97){
a[i]=a[i]-32;
}
}
}

List *addl(char *x)
{  
List *newlist;
newlist=(List *)calloc(1,sizeof(List));
strcat(newlist->number, x);
    newlist->next = NULL;
    if( head == NULL )
        head = tail = newlist;
    else
    {
        tail->next = newlist;
        tail = tail->next;
    }
return newlist;
}

void printlist(List *list) {
list=head;
while(list) {
printf("%s\n", list->number);
list=list->next;
}
}


Tree *insertTree(char *name, char *number, Tree *p)
{
   if(!p
 
{
 p=(Tree*)malloc(sizeof(Tree));
 strcpy(p->name,name);
 p->number=addl(number);
 p->left=NULL;
 p->right=NULL;
 return(p);
}
 
if(name < p->name)
p->left=insertTree(name, number, p->left);
else
if(name > p->name)
p->right=insertTree(name, number, p->right);
return(p);
 }

Tree *search(char *name, Tree *tree) {
if( strcmp(name, tree->name) == 0) {
printlist(tree->number); }
else if( strcmp( name, tree->name ) < 0 ) {
return search( name, tree->left ) ;
} else {
return search(name, tree->right) ;
}
}


int main() {
printf("%s\n", "100%");
Tree *tree = NULL;
char in[10],a[200],b[100], in2[10];
do {
fgets(in,200,stdin);
        *(strchr(in,'\n')) = '\0';
        if ((strlen(in) > 0) && (in[0] != '.')) {
sscanf(in,"%s %s", &a, &b );
upper(a);
tree=insertTree(a,b,tree);
}
    } while (in[0] != '.');


while(in2[0] !='.') {
printf("%s ", "Type a name please");
fgets(in2,200,stdin);
        *(strchr(in2,'\n')) = '\0';
sscanf(in2,"%s", &a);
if(in2[0] == '.') break;
else { upper(a);
search(a,tree);
}
}

return 0;
}

Cu siguranta creez lista gresit. In plus, cand introduc un nume care nu e in arbore se blocheaza. As aprecia orice forma de ajutor.
Multumesc.

P.S: trebuie sa introduc numele si numarul intr-o lista. Daca numele e deja acolo, adaug numarul la lista. Apoi caut numele introduse de user si returnez toate numerele persoanei respective.
5  infoarena - concursuri, probleme, evaluator, articole / Informatica / Arbori si liste : Noiembrie 20, 2013, 23:21:36
Vreau sa creez o agenda telefonica folosind arbori, in care stochez un nume si unul sau mai multe numere de telefon. Numarul/numerele de telefon sunt stocate intr-o lista. Informatiile sunt introduse sub acest format: <nume>spatiu<numar> pana la citirea unui anumit caracter (ex '.'). Daca un nume e introdus de mai multe ori cu numere diferite, retin toate numerele in lista  mentionata anterior.

Faptul ca  trebuie sa folosesc o lista ma baga putin in ceata.
Cum trebuie sa citesc datele introduse? Si cum exact introduc numerele in lista de care apartin?

Structurile mele arata asa:

Cod:
typedef struct lista {
char *numar;
struct lista *adr;
}lista;

typedef struct agenda {
char *nume;
lista *numar;
struct agenda *stanga;
struct agenda *dreapta;
}agenda;
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines