C: Pomoć oko zadatka

Teme vezane za console/GUI programiranje u C/C++ jeziku
1 post • Stranica: 1/1.

C: Pomoć oko zadatka

PostPostao/la displayerror » 28 lis 2015, 20:34

Potrebna mi je pomoć oko sljedećeg zadatka:

Definisati strukturu podataka pod nazivom VOZILO. Struktura VOZILO posjeduje sljedeće članove (polja): proizvođač, model i broj šasije. Napisati funkciju za dodavanje strukture VOZILO u binarno stablo pretraživanja pri čemu ključ za dodavanje čine polja proizvođač, model i broj šasije zajedno (proizvođač nosi najveću težinu, a broj šasije najmanju težinu prilikom poređenja). Napisati funkciju koja vrši ispis svih vozila za određenog proizvođača u obliku:
Proizvođač: NAZIV
r.b. model broj sasije
==== =================== ==========

Program kompajlira, ali ne radi ispravno:
Kod: Označi sve
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct
{
    char proizvodjac[50];
    char model[20];
    char id[11];
}VOZILO;/*informacioni sadrzaj*/

typedef struct cvor
{
    VOZILO v;
    struct cvor *lijevi,*desni;
}CVOR;/*cvor stabla*/

static int rb=1;/*redni broj vozila*/

/*formiranje cvora stabla*/
CVOR *formiraj_cvor(VOZILO *v)
{
    CVOR *novi=(CVOR*)malloc(sizeof(CVOR));
    novi->lijevi=novi->desni=0;
    novi->v=*v;
    return novi;
}

/*dodavanje cvora u stablo*/
CVOR *dodaj_cvor(CVOR *korijen,VOZILO *v)
{
    if(korijen == 0)
        return formiraj_cvor(v);
    /*poredjenje po tezini*/
    if(strcmp(v->proizvodjac,korijen->v.proizvodjac)<0 ||
      (strcmp(v->proizvodjac,korijen->v.proizvodjac)==0 &&
       strcmp(v->model,korijen->v.model)<0) ||
      (strcmp(v->proizvodjac,korijen->v.proizvodjac)==0 &&
       strcmp(v->model,korijen->v.model)==0 &&
       strcmp(v->id,korijen->v.id)<0))
          korijen->lijevi=dodaj_cvor(korijen->lijevi,v);
    else
          korijen->desni=dodaj_cvor(korijen->desni,v);
    return korijen;
}

/*pretrazivanje po kljucevima*/
CVOR *trazi(CVOR *korijen,VOZILO *v)
{
  if(korijen == 0)
     return NULL;
  else if(strcmp(v->proizvodjac,korijen->v.proizvodjac)==0 &&
          strcmp(v->model,korijen->v.model)==0 &&
          strcmp(v->id,korijen->v.id)==0)
               return korijen;
  else if(strcmp(korijen->v.proizvodjac,v->proizvodjac)>0 &&
          strcmp(korijen->v.model,v->model)>0 &&
          strcmp(korijen->v.id,v->id)>0)
               return trazi(korijen->lijevi,v);
  else
               return trazi(korijen->desni,v);
}

/*ucitavanje podataka*/
void citaj(VOZILO *v)
{
    printf("proizvodjac:");
    scanf("%s",v->proizvodjac);
    printf("model:");
    scanf("%s",v->model);
    printf("broj sasije:");
    scanf("%s",v->id);
}

/*ispis vozila za odredjenog proizvodjaca (inorder obilazak stabla)*/
void pisi_inorder(CVOR *korijen)
{
    if(korijen!=0)
    {
        pisi_inorder(korijen->lijevi);
        printf("%4d. %-19s %-10s",
               rb++,korijen->v.model,korijen->v.id);
        pisi_inorder(korijen->desni);
    }
}

void pisi(CVOR *korijen)
{
    printf("r.b. model               broj sasije\n");
    printf("==== =================== ==========\n");
    rb=1;
    pisi_inorder(korijen);
}

int main()
{
    VOZILO v;
    CVOR *korijen=0;
    char c;
    char proizvodjac[50];
    do{
    scanf("%c",&c);
    if(c=='D')/*dodavanje i azuriranje*/
    {
        printf("unesite podatke:\n");
        citaj(&v);
        CVOR *p=trazi(korijen,&v);
        if(p)
            p->v=v;
        else korijen=dodaj_cvor(korijen,&v);
    }
    else if(c=='P')/*ispis*/
        pisi(korijen);
    else if(c=='T')/*pretrazivanje*/
    {
        printf("proizvodjac:");
        scanf("%s",proizvodjac);
        CVOR *p=trazi(korijen,&v);
        if(p)
        {
            printf("podaci o vozilima:");
            pisi(korijen);
        }
        else
            printf("nema podataka.");
    }
    else if(c!='0')
        printf("nepoznata opcija.");
    }
    while(c!='0');
    return 0;
}


Korisnik unosi slovo 'D','T' ili 'P' u zavisnosti od toga da li se dodaju, pretražuju ili ispisuju podaci.
Nije mi jasno kako izvršiti ispis podataka o svim vozilima za određenog proizvođača?

Da li neko može kodom da pokaže kako izvršiti taj ispis?
Takođe, da li je u navedenom programu tačno poređenje elemenata po težini (u funkciji dodaj_cvor)?

Sve korekcije navedenog programa su dobrodošle.

1 post • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.