Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Binarno stablo u c-u - otvarnanje datoteke

[es] :: C/C++ programiranje :: Binarno stablo u c-u - otvarnanje datoteke

[ Pregleda: 2725 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

danijel_markic
Danijel Markic
Croatia

Član broj: 82751
Poruke: 1
*.cmu.carnet.hr.



Profil

icon Binarno stablo u c-u - otvarnanje datoteke28.01.2006. u 09:58 - pre 222 meseci
Imao sam za izraditi ovaj program:

Code:
Napisati funkciju za punjenje memorijski rezidentnog binarnog stabla
u čije čvorove treba upisati: cijena artikla (realni broj) i naziv artikla (15+1 znakova).
Stablo treba sortirati po cijeni artikala; lijevi jeftiniji, desni skuplji.
Napisati funkciju za ispis elementa za koju je ulazni argument korijen stabla. 
Ispis treba biti poredan po cijeni od najjeftinijeg do najskupljeg artikla. 
Napisati funkciju koja ispiše sve proizvode čija je cijena manja od neke određene 
vrijednosti koja se unese u glavnoj funkciji programa tijekom izvršavanja programa.


Ovo sam uspio napraviti
Code:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct s_element
{
    char* ime;
    double cijena;
} Element;

typedef struct s_node
{
    struct s_node* parent;
    struct s_node* left;
    struct s_node* right;
    Element el;
} Node;

Node* Posadi(Element p_el, Node* roditelj);
Node* Napravi_Lijevo(Element p_el, Node* korijen);
void PrintOut(Node* korijen);
void Ubaci(Element p_el, Node* korijen);
void PrintOutCijena(Node* korijen, double cijena);

int main()
{
    int j;
    FILE *test;
    Node* root;
    Element element;
    printf("TEST\n");
    test = fopen ("Binarno drvo.txt", "r");
    if (!test) {
    printf ("Nema ulaznih podataka\n");
        exit (1);
    }
    j = 1;
    root = NULL;
  while (fscanf (test, "%s %f", element.ime, &element.cijena) != EOF) {
    printf ("%2d. ulazni podatak je %-15s %6.2f\n", j++, element.ime, element.cijena);
    root = Posadi (element, root);
  }
    float d;
    printf("Upisi trazenu cijenu: ");
    scanf("%f",&d);    
    printf("\n");
    PrintOutCijena(root,d);    
    return 0;
}

Node* Posadi(Element p_el, Node* roditelj)
{
    
    Node* temp = (Node*)malloc(sizeof(Node));
    temp->parent = roditelj;
    temp->left=0;
    temp->right=0;
    temp->el = p_el;
    return temp;
}


Node* Napravi_Lijevo(Element p_el, Node* korijen)
{
    if (!korijen->left)
    {
        Node* temp = korijen->left = Posadi(p_el,korijen);
        return temp;
    }
    return 0;
}


Node* Napravi_Desno(Element p_el, Node* korijen)
{
    if (!korijen->right)
    {
        Node* temp = korijen->right = Posadi(p_el,korijen);
        return temp;
    }
    return 0;
}

void PrintOut(Node* korijen)
{
    if (korijen)
    {
        PrintOut(korijen->left);
        printf("ARTIKL: %s\tCIJENA: %f\n",korijen->el.ime, korijen->el.cijena);
        PrintOut(korijen->right);
    }
}

void PrintOutCijena(Node* korijen, double cijena)
{
    if (korijen)
    {
        PrintOutCijena(korijen->left,cijena);
        if (korijen->el.cijena < cijena)
            printf("ARTIKL: %s\tCIJENA: %f\n",korijen->el.ime, korijen->el.cijena);
        PrintOutCijena(korijen->right, cijena);
        
    }
    
}

void Ubaci(Element p_el, Node* korijen)
{
    if (korijen)
    {
        if (p_el.cijena < korijen->el.cijena)
        {
            if (korijen->left)
            {
                Ubaci(p_el,korijen->left);
                return;
            }
            korijen->left = Posadi(p_el,korijen);
        }
        else
        {
            if (korijen->right)
            {
                Ubaci(p_el,korijen->right);
                return;
            }
            korijen->right = Posadi(p_el,korijen);
        }
    }
    else
        return;
}



Sada imam problem kada iskompajliram program (prodje bez problema) i pokrenem ga program, jednostavno zablokira... Moze li netko pomoci?...

Unaprijed hvala
 
Odgovor na temu

Buffy
Stanko Culaja
Sipovo, BiH

Član broj: 45310
Poruke: 312
*.teol.net.



Profil

icon Re: Binarno stablo u c-u - otvarnanje datoteke28.01.2006. u 13:12 - pre 222 meseci
Nisam gledao kod, ali najvjerovatnije imas gresku u koriscenju pointera posto se to meni mnogo puta desavalo. Na primjer: pointer umjesto da pokazuje na odredjenu adresu u memoriju, on pokazuje na NULL ili na memoriju koja nije alocirana. Jos jednom dobro prekontrolisi kod. Pozdrav!
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Binarno stablo u c-u - otvarnanje datoteke28.01.2006. u 21:51 - pre 221 meseci
Debuger!!
 
Odgovor na temu

dragansm
Dragan Smiljanic

Član broj: 38170
Poruke: 191
*.beotel.net.



Profil

icon Re: Binarno stablo u c-u - otvarnanje datoteke29.01.2006. u 18:24 - pre 221 meseci
Code:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct s_element
{
    char ime[100]; //#
    float cijena; //#
} Element;

typedef struct s_node
{
    struct s_node* parent;
    struct s_node* left;
    struct s_node* right;
    Element el;
} Node;

Node* Posadi(Element p_el, Node* roditelj);
Node* Napravi_Lijevo(Element p_el, Node* korijen);
void PrintOut(Node* korijen);
void Ubaci(Element p_el, Node* korijen);
void PrintOutCijena(Node* korijen, double cijena);

int main()
{
    int j;
    FILE *test;
    Node* root;
    Element element;
    printf("TEST\n");
    test = fopen ("Binarno drvo.txt", "r");
    if (!test) {
        printf ("Nema ulaznih podataka\n");
        exit (1);
    }
    j = 1;
    root = NULL;
    while (fscanf (test, "%s %f", element.ime, &element.cijena) != EOF) {
        printf ("%2d. ulazni podatak je %-15s %6.2f\n", j++, element.ime, element.cijena);
        if ( root == NULL ) root = Posadi (element, root); //#
        else Ubaci( element, root ); //#
    }
    float d;
    printf("Upisi trazenu cijenu: ");
    scanf("%f",&d);    
    printf("\n");
    PrintOutCijena(root,d);    
    return 0;
}

Node* Posadi(Element p_el, Node* roditelj)
{

    Node* temp = (Node*)malloc(sizeof(Node));
    temp->parent = roditelj;
    temp->left=0;
    temp->right=0;
    temp->el = p_el;
    return temp;
}


Node* Napravi_Lijevo(Element p_el, Node* korijen)
{
    if (!korijen->left)
    {
        Node* temp = korijen->left = Posadi(p_el,korijen);
        return temp;
    }
    return 0;
}


Node* Napravi_Desno(Element p_el, Node* korijen)
{
    if (!korijen->right)
    {
        Node* temp = korijen->right = Posadi(p_el,korijen);
        return temp;
    }
    return 0;
}

void PrintOut(Node* korijen)
{
    if (korijen)
    {
        PrintOut(korijen->left);
        printf("ARTIKL: %s\tCIJENA: %f\n",korijen->el.ime, korijen->el.cijena);
        PrintOut(korijen->right);
    }
}

void PrintOutCijena(Node* korijen, double cijena)
{
    if (korijen)
    {
        PrintOutCijena(korijen->left,cijena);
        if (korijen->el.cijena < cijena)
            printf("ARTIKL: %s\tCIJENA: %f\n",korijen->el.ime, korijen->el.cijena);
        PrintOutCijena(korijen->right, cijena);

    }

}

void Ubaci(Element p_el, Node* korijen)
{
    if (korijen)
    {
        if (p_el.cijena < korijen->el.cijena)
        {
            if (korijen->left)
            {
                Ubaci(p_el,korijen->left);
                return;
            }
            korijen->left = Posadi(p_el,korijen);
        }
        else
        {
            if (korijen->right)
            {
                Ubaci(p_el,korijen->right);
                return;
            }
            korijen->right = Posadi(p_el,korijen);
        }
    }
    else
        return;
}


Izmenjeni delovi koda su oznaceni sa //#
 
Odgovor na temu

[es] :: C/C++ programiranje :: Binarno stablo u c-u - otvarnanje datoteke

[ Pregleda: 2725 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.