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

Problem sa zadatkom na ispitu !!!

[es] :: C/C++ programiranje :: C/C++ za početnike :: Problem sa zadatkom na ispitu !!!

[ Pregleda: 2965 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

eliminat0r
eliminat0r
Senior Web Developer
Svilajnac - Novi Sad

Član broj: 197534
Poruke: 27
*.dynamic.sbb.rs.



Profil

icon Problem sa zadatkom na ispitu !!!30.09.2010. u 15:32 - pre 164 meseci


E ovako imam problem sa ovim zadatkom. Naime funckija DodajZadatak mi zadaje malo vece muke, tj. nikako ne mogu da je napisem pravilno. Vec nekoliko dana proucavam zadatak i nista. Ako neko moze da mi pomogne koliko toliko makar oko algoritma za resavanje te funckije bio bi zahvalan. Inace radi se u c-u.
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
*.dynamic.sbb.rs.

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Problem sa zadatkom na ispitu !!!30.09.2010. u 16:20 - pre 164 meseci
Pozdrav,

da li mozes da okacis kod kako si pokusao da izvedes funkciju? Malo je nejasno iz zadatka gde se cuvaju ti zadaci? U programu se cuvaju u projektu ali pod c) pri citanju projekata iz .txt fajla se nigde ne pominju zadaci.

Sto se tice same funkcije DodajZadatak() najbolji odgovor ces dobiti ako okacis tvoj primer koda koji si pokusao i malo detaljnije objasnis koji deo ti pravi problem. Ovako ne znamo tacno kako si krenuo u resavanje problema a od toga zavise pojedine stvari u okviru ove funkcije.

Uopsteno bi prvo trebalo da napravis strukturu za Zadatak (pretpostavljam da imas vec napisano za Zaposlene i Projekat) koja ce da cuva pointer na zaposlenog i broj sati. Posto je maksimalni broj zadataka 100 u projektu, u strukturi za Projekat bi trebalo da imas niz za smestanje zadataka za koji ces da alociras memoriju za 100 zadataka. Kada napravis te izmene, sama funkcija DodajZadatak() je vrlo jednostavna, prima id projekta, maticni broj i broj sati. Broj sati je vec integer a pomocu funkcije PronadjiZaposlenog() dobijas pokazivac na zaposlenog koji ti treba i takav zadatak upisujes u niz sa zadacima u okviru projekta. Pre upisivanja u zadatka u niz jedino moras da proveris da li u nizu sa zaposlenima koji rade na projektu sa tim IDjem postoji onaj zaposleni koji je prosledjen funkciji.

Nadam se da sam bar malo pomogao.
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

eliminat0r
eliminat0r
Senior Web Developer
Svilajnac - Novi Sad

Član broj: 197534
Poruke: 27
*.dynamic.sbb.rs.



Profil

icon Re: Problem sa zadatkom na ispitu !!!30.09.2010. u 16:38 - pre 164 meseci
To i meni nije jasno sto se tice podataka o Zadacima, zato sto nije lepo objasnjeno u opisu programa. Sve sto si napisao i sto se tice struktura to vec imam, znaci
Code:

typedef struct 
{   
 char ime[100];
 char matbr[14];
 float cenars;
} zaposleni;

typedef struct
{
 int id;
 char naziv[100];
 int brzaposlenih;
 zaposleni *pzaposleni[20];
 zadatak *pzadatak[100];
} projekat;

typedef struct
{
 zaposleni *pokzaposleni;
 int brsati;
} zadatak;

zaposleni *nizzaposleni;
projekat *nizprojekata;

int brzap,brpor,brzad;


E sad ucitao sam zaposlene , napisao i funkciju PronadjiZaposlenog() i ucitao projekte . Malo je zbunjujuce jer nema podataka o broju zadataka i da li oni trebaju da se ucitaju ili ne :S. E sad ovako sam nekako sklopio funkciju DodajZadatak mada nisam siguran da li ce ovo raditi.

Code:
void DodajZadatak (int id, char *matbr,int brsati)
{
  int i,j,k;
  zaposleni *pom;
  pom=PronadjiZaposlenog(&matbr);
  for (i=0;i<brpro;i++)
    for(j=0;j<nizprojekata[i].brzaposlenih;j++)
     if (nizprojekata[i].pzaposleni[j]!=pom)
      printf("Greska");
     else
    {
      if(nizprojekata[i].id==id)
      nizprojekata[i].pzadatak.pokzaposleni=pom;
      ...


Ne znam dalje, zato sto me zbunjuje cela funkcija :S



[Ovu poruku je menjao eliminat0r dana 30.09.2010. u 18:16 GMT+1]
 
Odgovor na temu

eliminat0r
eliminat0r
Senior Web Developer
Svilajnac - Novi Sad

Član broj: 197534
Poruke: 27
*.dynamic.sbb.rs.



Profil

icon Re: Problem sa zadatkom na ispitu !!!30.09.2010. u 17:15 - pre 164 meseci
Da li bi mozda ovako radila. Najvise me zbunjuje to, kako da u nizpokazivaca na zadatak upisem novi zadatak.

Code:
void DodajZadatak (int id, char *matbr,int brsati)
{
  int i,j,k;
  zaposleni *pom;
  pom=PronadjiZaposlenog(&matbr);
  for (i=0;i<brpro;i++)
   { 
     for(j=0;j<nizprojekata[i].brzaposlenih;j++)
     { if (nizprojekata[i].pzaposleni[j]!=pom)
        printf("Greska"); }
     
     if(nizprojekata[i].id==id);
      { fscanf(f,"%d",&brzad);
         nizprojekata[i].pzadatak[brzad+1].pokzaposleni=pom;
         nizprojekata[i].pzadatak[brzad+1].brsati=brsati;
      } brzad++; 
}


[Ovu poruku je menjao eliminat0r dana 30.09.2010. u 18:27 GMT+1]

[Ovu poruku je menjao eliminat0r dana 30.09.2010. u 18:36 GMT+1]

[Ovu poruku je menjao eliminat0r dana 30.09.2010. u 19:15 GMT+1]
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
*.dynamic.sbb.rs.

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Problem sa zadatkom na ispitu !!!30.09.2010. u 19:26 - pre 164 meseci
Da li #ID projekata idu po redu ili su nasumice odredjeni? Ako idu po redu uvek mozes da izbegnes ugnjezdenu petlju zato sto ce onda nizprojekata[1] biti projekat sa #ID = 2 (ili 1 ako pocinju od 0).

Sto se provere tice ovako kako si sada napisao bi izbacivalo gresku dok postepeno prolazi kroz niz za svakog zaposlenog koji nije "onaj pravi" iako on mozda postoji u nastavku niza. Trebalo bi da uvedes neku promenljivu koja ce da bude 0 (false) na pocetku i kako bude prolazio korz niz ako nadje zaposlenog postavice se na 1 (true).

Code (c):

...

int postojiZaposlen = 0;                         /* boolean koji ce se posle koristiti da se vidi da li postoji zaposlen*/
for(j=0; j<nizprojekata[id].brzaposlenih; j++){  /*koristio sam id koji se prosledjuje funkciji u slucaju da idu po redu. */
  if(nizprojekata[id].pzaposleni[j]==pom){
    postojiZaposlen = 1;                         /* pronadjen je trazeni zaposleni */
    break;                                       /*nema potrebe ici dalje kroz niz posto je vec nadjen */
  }
}
if(postojiZaposlen){                             /*ako je iznad nadjen, upisuje se novi zadatak, u suprotnom prikazuje gresku*/
  /* kod za dodavanje novog zadatka*/
}else{
  printf("Zaposleni nije angazovan na ovom projektu");
}
...
 


Sto se dodavanje novog zadatka u niz pokazivaca tice, verovatno je najpreglednije da se ne bi petljao sa dugackim linijama da uvedes privremeni pokazivac zadatak *tmp kojoj ces da dodelis vrednost nizprojekata[id].pzadatak[brzad]; i onda da njemu dodeljujes vrednosti. Naravno ako vec nisi prvo moras da rezervises memoriju za zadatak.

Code (c):

  /* kod za dodavanje novog zadatka*/
...

nizprojekata[id].pzadatak[brzad] = (zadatak*)calloc(1,sizeof(zadatak)); /*rezervisanje memorije*/
zadatak *tmp = nizprojekata[id].pzadatak[brzad];                        /* ne bi trebalo da bude brzad+1 s obzirom da se prvi zadatak smesta u pzadatak[0] a brzad postavlja na 1 (vec je za 1 veci)*/
tmp->pokzaposleni = &pom;                                               /*prosledjuje se adresa zaposlenog pokazivacu u zadatku */
tmp->brsati = brsati;
brzad++;

....
 


Nemoj da uzimas ove kodove zdravo za gotovo posto sam napamet pisao i vrlo je moguce da sam prevideo nesto. Na kraju bi funkcija izgledala ovako nekako:
Code (c):

void DodajZadatak (int id, char *matbr,int brsati){
  int i,j,k,postojiZaposlen = 0;
  zaposleni *pom;
  pom=PronadjiZaposlenog(&matbr);
  for(j=0; j<nizprojekata[id].brzaposlenih; j++){
    if(nizprojekata[id].pzaposleni[j]==pom){
      postojiZaposlen = 1;
      break;
    }
  }
  if(postojiZaposlen){
    nizprojekata[id].pzadatak[brzad] = (zadatak*)calloc(1,sizeof(zadatak));
    zadatak *tmp = nizprojekata[id].pzadatak[brzad++];
    tmp->pokzaposleni = &pom;
    tmp->brsati = brsati;
  }else{
    printf("Zaposleni nije angazovan na ovom projektu");
  }
}
 

Ono sto fali je jos jedna petlja u slucaju da su ID brojevi random, koja ce da pronadje index u nizu pod kojim se nalazi projekat sa tim #ID i da ga onda iskoristis umesto id. Pitaj ako ti neki deo koda nije potpuno jasan.

Pozdrav.
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

eliminat0r
eliminat0r
Senior Web Developer
Svilajnac - Novi Sad

Član broj: 197534
Poruke: 27
*.dynamic.sbb.rs.



Profil

icon Re: Problem sa zadatkom na ispitu !!!30.09.2010. u 19:49 - pre 164 meseci
@pajaja

thx tako nesto mi je i trebalo, dodacu samo jos jednu petlju da bi ispitao ID projekta, zato sto mislim da su id projekata nasumice rasporedjeni. To bi bilo to, bio sam blizu i sve vreme se vrteo oko toga, a nikako da provalim. Hvala jos jednom !!!
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
*.dynamic.sbb.rs.

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Problem sa zadatkom na ispitu !!!30.09.2010. u 20:03 - pre 164 meseci
Nema na cemu, srecno na ispitu:)
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Problem sa zadatkom na ispitu !!!

[ Pregleda: 2965 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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