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

Pomoc za pocetnika

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pomoc za pocetnika

Strane: 1 2

[ Pregleda: 4900 | Odgovora: 29 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

marescallo
Zoran Lastro

Član broj: 100323
Poruke: 2
212.200.219.*



Profil

icon Pomoc za pocetnika03.07.2006. u 21:12 - pre 216 meseci
Treba da se kreirate rodoslov u OO, tj. popis svih predaka. Trebalo bi da predvidite jednu klasu koja bi sadržavala sve podatke o jednom vašem pretku: na taj način, svaki predak bi bio predstavljen kao jedan objekat iz te klase. Interfejs klase trebalo bi da sadrzi: ime, prezime, bračni status, datum rođenja, datum smrti, deca, ... Takođe, predvidite i funkciju za prikaz, koja ima za argument ime, a prikazuje sve pretke tog imena. Zadatak glasi ovako a posto sam ja teski pocetnik molim za malu pomoc.
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
..taman-bg.customer.sbb.co.yu.



+1 Profil

icon Re: Pomoc za pocetnika04.07.2006. u 01:14 - pre 216 meseci
Najpre napravi klasu koja opisuje jednog coveka sa svojim karakteristikama (godina rodjenja, smrti, bracni status...). Prilikom pravljenja, onemoguci kopiranje coveka u nekog drugog (stavi konstruktor kopije i operator= u private, sa praznim telom). Kad to sredis napravi klasu koja kao argument ima listu takvih ljudi. U listi napravi da element bude objekat klase covek i dva pointera na element. Jedan pointer ce pokazivati na majku, a drugi na oca. Mislim da je lista neophodna jer se ne zna koliko ces ici u rikverc sa trazenjem predaka. Kad napravis listu, omoguci da pored licnih podataka (kao sto je ime coveka, uz njega mogu da se dobiju podaci koje racunas pomocu same liste (imena roditelja i slicno...). Na kraju obezbedi da se jednoj osobi moze pristupati na nacin koji ti je najlogicniji (operator [] ne zvuci bas logicno u ovom slucaju, ali mozda preko imena ili nesto sl. Kad sve odradis, samo krenes da unosis ljude, pocevsi od sebe, pa unazad (naravno, omogucis dodavanje preko clana koji je vec u listi, tako da je jasno da ti je on otac/majka). Pored ovog nacina upada u listu, neophodna ti je i mogucnost unosa ljudi koji nisu imali decu (dedin brat koji se nije zenio), sto mozes obezbediti posebnim operatorom, koji bi uzimao u obzir bracu/sestre.


Nadam se da nisam nesto propustio i da sam iole jasan sa ovom idejom. Pozdrav i vici ako trebaju pojasnjenja.
De si Deda...
 
Odgovor na temu

marescallo
Zoran Lastro

Član broj: 100323
Poruke: 2
212.200.218.*



Profil

icon Re: Pomoc za pocetnika04.07.2006. u 14:29 - pre 216 meseci
Sta je potrebno uraditi na ovome da bi odgovaralo resenju zadatka. Hvala

Code:

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

char myfile[] = "C:\\myfile.bin"; 
FILE *pfile = NULL;             

struct Date                   
{
   int day;
   int month;
   int year;
};

typedef struct family      
{
   struct Date dob;
   char name[20];
   char pa_name[20];
   char ma_name[20];
}Family;


int get_person(Family *pfamily);      
void show_person_data(void);        
void get_parent_dob(Family *pfamily); 

void main()
{
   Family member;                     
   Family *pmember = &member;     

   if((pfile = fopen(myfile, "wb")) == NULL)
   {
     printf("\nUnable to open %s for writing.\n", myfile);
     abort();
   }

   while(get_person(pmember))           
     fwrite(pmember, sizeof member, 1, pfile); 
   fclose(pfile);               

   show_person_data();          

   if(remove(myfile))
     printf("\nUnable to delete %s.\n", myfile);
   else
     printf("\nDeleted %s OK.\n", myfile);
}


int get_person( Family *temp)
{
   static char more = '\0';  

   printf("\nDo you want to enter details of a%s person (Y or N)? ",
                                       more != '\0'?"nother " : "" );
   scanf(" %c", &more);

   if(tolower(more) == 'n') 
          return 0;

   printf("\nEnter the name of the person: ");
   scanf("%s", temp->name);    

   printf("\nEnter %s's date of birth (day month year); ", temp->name);
   scanf("%d %d %d", &temp->dob.day, &temp->dob.month, &temp->dob.year);

   printf("\nWho is %s's father? ", temp->name);
   scanf("%s", temp->pa_name);    

   printf("\nWho is %s's mother? ", temp->name);
   scanf("%s", temp->ma_name);    

   return 1;
}

void show_person_data(void)
{
   Family member;        
   Family *pmember = &member; 
   fpos_t current = 0;       

   pfile = fopen(myfile, "rb"); 

   while(fread(pmember, sizeof member, 1, pfile))   
   {
     fgetpos(pfile, &current); 
     printf("\n\n%s's father is %s, and mother is %s.",
              pmember->name, pmember->pa_name, pmember->ma_name);
     get_parent_dob(pmember); 
     fsetpos(pfile, &current); 
   }
    fclose(pfile);          
}


void get_parent_dob(Family *pmember)
{
   Family testmem;           
   Family *ptestmem = &testmem; 
   int num_found = 0;       

   rewind(pfile);         


   while(fread(ptestmem, sizeof(Family), 1, pfile))
   {
     if(strcmp(pmember->pa_name, ptestmem->name) == 0)  

       printf("\n Pa was born on %d/%d/%d.",
             ptestmem->dob.day, ptestmem->dob.month, ptestmem->dob.year);  
       if(++num_found == 2)   
         return;           
     }
     else
       if(strcmp(pmember->ma_name, ptestmem->name) == 0) 
       { 
         printf("\n Ma was born on %d/%d/%d.",
                ptestmem->dob.day, ptestmem->dob.month, ptestmem->dob.year);

         if(++num_found == 2)  
             return;       
       }
   }
}



[Ovu poruku je menjao X Files dana 16.07.2006. u 20:29 GMT+1]
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
..taman-bg.customer.sbb.co.yu.



+1 Profil

icon Re: Pomoc za pocetnika06.07.2006. u 16:12 - pre 216 meseci
Potrebno ga je obrisati, pa sve napisati ispocetka.
De si Deda...
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: Pomoc za pocetnika16.07.2006. u 18:30 - pre 216 meseci
Zainteresovan sam da probam da uradim ovo, ovako kako ste opisali.

Zanima me kako ce se kreirati taj objekat, pretpostavljam u main f-ji, a onda kako ce se obaviti unos, verovatno rekurzivno(bar sam tako vidjao da se unosi u stukturi stablo), pa ako mozete da pojasnite malo oko tog unosa.
Mislim, šta reći !
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
*.ptt.yu.



+1 Profil

icon Re: Pomoc za pocetnika17.07.2006. u 17:32 - pre 216 meseci
Izvini, jel to pitas mene ili Marescallo-a?
De si Deda...
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: Pomoc za pocetnika17.07.2006. u 21:53 - pre 216 meseci
Tebe :) .
Mislim, šta reći !
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
..taman-bg.customer.sbb.co.yu.



+1 Profil

icon Re: Pomoc za pocetnika18.07.2006. u 03:09 - pre 216 meseci
Pa pazi, nisam bas preduboko ulazio u problem, ali jedno od resenja je sledece.
U main-u mozes unositi ljude, ali ti je najzgodnije da sama lista vec ima funkciju za unos. Kako ces izvesti samu funkciju ostaje na tebi da odlucis, ali meni na prvi pogled pada na pamet da bi bilo zgodno da npr. uneses od argumenata jedan int koji govori koliko je "duboko" predak u hijerarhiji (1 za oca i majku, 2 za dede i babe...), dalje od argumenata posaljes jedan char koji govori sta je doticni prethodniku u hijerarhiji ('o' za oca, 'm' za majku, 's' za strica...), i onda ti se otvara meni u kome unosis sve licne podatke vezane samo za tu osobu (ime, prezime...). Meni sa licnim podacima neka bude posebna funkcija koja se poziva iz funkcije koju si pozivao na pocetku (one koja osobu smesta na mesto u listi). I to ti je to...
Ove moje predloge shvati prilicno opusteno, jer programiranje jos uvek ima i tragove umetnosti u sebi, tj. dopusta da tvoja logika prevagne u odlucivanju za ovu ili onu opciju. Obicno imas izbor izmedju vise medjusobno pozivajucih funkcija ili nekoliko velikih. Meni se vise svidja da se to rasclani na sitnije delove, kako zbog preglednosti, tako i zbog lakseg nalazenja gresaka. I jedan vazan savet je da sve funkcije koje se obracaju sistemu (gde god imas cin, cout i sl.) smestis na jednu gomilu, ma gde ona bila (a bolje je sto dalje od same klase). Ovo je iz razloga sto ces mozda u nekom trenutku zeleti da promenis sistem ili svoj kod ubacis u neku graficku sredinu, a onda ces sav kod koji mora da se menja imati na gomili, a samim tim i manje posla.
De si Deda...
 
Odgovor na temu

reject
Ivan Pesic
Bgd

Član broj: 7659
Poruke: 2209
*.83.beocity.net.

Sajt: misc.comli.com


Profil

icon Re: Pomoc za pocetnika18.07.2006. u 10:20 - pre 216 meseci
Citat:
DjoleReject:(1 za oca i majku, 2 za dede i babe...)

Jos lepse enum {otac,deda,... ...,navrded,kurajber,askurdjel};
:)

Inace, videti http://cslibrary.stanford.edu/110/BinaryTrees.html i http://en.wikipedia.org/wiki/Binary_search_tree
Mass murder ain’t just painless,
Now we’ve made it cute.


The Church Of The Holy Transistor
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: Pomoc za pocetnika19.07.2006. u 09:36 - pre 216 meseci
Nesto sam i poceo:
Code:

hpp

#ifndef PREDAK_HPP
   #define PREDAK_HPP

class Covek {
   private:
      char ime[21];
      char prezime[26];
      int godrodjenje;
      int godsmrti;
      Covek *levi, *desni;
      Covek (char ime[21],char prezime[26], int godrodjenje,int godsmrti);
      Covek(const &Covek) {};
//      operator= (){};
   public:
       Covek(){};
       StaviIme(char ime[21]);
       StaviPrezime(char prezime[26]);
       StaviGodRodj(int godrodjenje);
       StaviGodSmrti(int godsmrti);
};

class Lista {
   private:
     Covek DinObjekat;
   public:
         Lista *glava, *Current;
//       ~Lista () {delete [] Lista;};
       Lista (const &Lista) {};
};
 

#endif
  

cpp1

#include <iostream>
#include <string.h>
#include "predak.hpp"

using namespace std;

Covek::Covek(char ime[21],char prezime[26], int godrodjenje,int godsmrti) {
    strcpy(ime,ime);
    strcpy(prezime,prezime);
    godrodjenje=godrodjenje;
    godsmrti=godsmrti;
    levi=NULL;
    desni=NULL;
}

cpp2

#include <iostream>
#include "predak.hpp"
#include <stdio.h>

using namespace std;

main () {
    char c;
    char ime[21];
    char prezime[26];
    int godrodjenje;
    int godsmrti; 
    Covek *pok;

    while (1)
    {
       cout << "\n\n*******MENI********\n\n\n";
       cout << "\n1. Unos\n";
       cout << "\n2. Izlaz\n\n";
       cout << "\nIzaberi: ";
       if ((c=getchar())=='2')
           break;
       else
       {
           cout << "Unesi ime: " ;
           cin >> ime;
           cout << "Unesi prezime: " ;
           cin >> prezime;
           cout << "Unesi godinu rodjenja: " ;
           cin >> godrodjenje;
           cout << "Unesi godinu smrti: " ;
           cin >> godsmrti;
           pok=new Covek(ime,prezime,godrodjenje,godsmrti);
           
       }

    }
       
}



Problem je u tome kako ja da stavljam objekte u listu i da u isto vreme obezbedim
interfejs korisniku sta gde da unese. Logicno bi bilo da ga pitam posle unosa jednog
clana za roditelje tog sto je upravo uneo, a kako se kretati kroz takvu stablo, kako se vratiti.

ps. pogresio sam u konsturktoru Covek, trebao sam sa metodama da postavljam vrednosti, ali to sad nije bitno.


[Ovu poruku je menjao android~paranoid dana 19.07.2006. u 11:28 GMT+1]
Mislim, šta reći !
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
..taman-bg.customer.sbb.co.yu.



+1 Profil

icon Re: Pomoc za pocetnika19.07.2006. u 14:38 - pre 216 meseci
Pa ne moras se vracati po stablu. I zgodnije ti je da u listi imas private element koji pokazuje na roditelje, nego ovako, ali nema veze. A sto se tice vracanja polisti, sta ce ti? uvek mozes krenuti od pocetnog clana kad znas na kom mestu ti je trazeni. Interfejs za korisnika bi bio zgodan da imas ime coveka, pa strelice ka sledecima (odglumis grafiku u command promptu). I onda pitas "na koje mesto zelite da unesete coveka") i taj broj ti je argument za redni broj clana u listi. Nije lose ni ubaciti da se stvari resavaju jednostavnim operatorima, npr. ++ za sledeceg u hijerarhiji, cout da ti ispise podatke za odtredjenog clana (ovo sredis friendom u klasi covek) i slicno...
De si Deda...
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: Pomoc za pocetnika22.07.2006. u 22:18 - pre 216 meseci
u glavnom ovo uradim:

Code:

       //unos svih podataka(ime, prezime...)
        Covek a(ime,prezime,godrodjenje,godsmrti);
           List.Add(a,broj);


u klasi
Code:
       void List.Add(Covek,int);


Kako u realizaciji metode List.Add gde prosledjujem Coveka,
da ga dodelim mojem privatnom podatku clanu (Covek DinObjekat) u listi (klasa Lista)?
Mislim, šta reći !
 
Odgovor na temu

reject
Ivan Pesic
Bgd

Član broj: 7659
Poruke: 2209
*.83.beocity.net.

Sajt: misc.comli.com


Profil

icon Re: Pomoc za pocetnika23.07.2006. u 10:12 - pre 216 meseci
Citat:
DjoleReject: Pa ne moras se vracati po stablu. I zgodnije ti je da u listi imas private element koji pokazuje na roditelje, nego ovako, ali nema veze. A sto se tice vracanja polisti, sta ce ti? uvek mozes krenuti od pocetnog clana kad znas na kom mestu ti je trazeni.

Pa ako element pokazuje na parenta, onda uvek moze da se vraca po listi, zar ne? Samo skakuce po parentima. :)

Slicna fora moze se koristi kod skeletalne animacije, kad imas lanac kosaka, pa ih dovedes u trazeni polozaj tako
sto rotiras childa, pa njegovog parenta i tako...

Mass murder ain’t just painless,
Now we’ve made it cute.


The Church Of The Holy Transistor
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: Pomoc za pocetnika23.07.2006. u 13:09 - pre 216 meseci
Imate neku realizaciju neceg slicnog pa da proucim.
Mislim, šta reći !
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
..taman-bg.customer.sbb.co.yu.



+1 Profil

icon Re: Pomoc za pocetnika25.07.2006. u 10:00 - pre 216 meseci
Pa nemam nigde bas stekovan zadatak koji ti treba, ali to bi izgledalo otprilike ovako:

Imas klasu Covek, koja je manje-vise kao sto si je i zamislio...
E sad, radis sledece:
Code:

class ListaPredaka{
    struct Element{
        Covek covek;
        Element* keva;
        Element* cale;
        Element* bratIliSestra;
    };
    Element* prvi;
    int brojGeneracijaURikverc;
public:
/*
ovde ti idu sve metode za kojima ces imati potrebe:
Svi konstruktori, destruktor (destruktor za listu je specifican i radi tako sto najpre 
neki element upises u bafer, pa skocis na sledeci, pa ga tek onda brises - u tvom
slucaju moras ih imati cak i vise od jednog), sve operatore koji mogu biti potrebni, a
 najpre operator kojim ces dolaziti do clana liste (u ovom slucaju to ne moze operatorom [], 
jer ti treba jos jedan argument, koji on ne dozvoljava, ali mozes da nepravis i neku elegantnu metodu...)
Imas u nekim zbirkama gotove zadatke sa listama i uglavnom je skoro sve sablonski, 
ako nisi nikad radio nesto slicno, odradi par standardnih, pa ti ni ovo nece doci tesko...   */
};

I ako zapnes - ne ustrucavaj se da pitas...
De si Deda...
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
..taman-bg.customer.sbb.co.yu.



+1 Profil

icon Re: Pomoc za pocetnika25.07.2006. u 10:03 - pre 216 meseci
I da ne zaboravim, bitno je da kontas da si prvi clan liste ti, a da se kreces ka sve starijima (do askurdjela, posto mislim da nemamo rec za starijeg pretka:) Ovo je bitno, jer ne znas dokle ce te to odvesti u rikverc, ali ako naidjes medju precima Isusa ili nekog slicnog, molim te u ime celog covecanstva da ne napises jos jednu glupu knjigu o tome:))))
De si Deda...
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: Pomoc za pocetnika29.07.2006. u 21:58 - pre 216 meseci
Idemo korak po korak.

OK, recimo da u glavnom programu (main) ja zahtevam unos gde se nalazi u stablu taj sto ga treba uneti, i onda u zavisnosti od broja ja dolazim do te pozicije i umecem. Metod ce biti List.Add(broj), sad me zanima realizacija tog metoda, uzmimo da je nevazan taj pronalazak clana, samo znaci da kreiram dinamicki objekat.

Code:
Covek *pok=new Covek;


I sad ja imam pokazivac na Coveka, a kakve to ima veze sa onim clanom (Covek covek) u mojoj klasi ListaPredaka?
Da li je to to? Meni nije jasno posto ne koristimo taj naziv covek, da je to normalan clan (a ne dinamicki) onda bi znao da ga napunim (covek.ime,covek.prezime...)?
Mislim, šta reći !
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
*.24.eunet.yu.



+1 Profil

icon Re: Pomoc za pocetnika30.07.2006. u 00:13 - pre 216 meseci
Ne, ne, nisi skontao... Nije bitno da li imas *Covek ili Covek. Radi se da je to deo strukture u kojoj je jedan clan Covek ili pointer na njega (svejedno), a drugi clanovi su pointeri na istu takvu strukturu. Znaci u klasi Lista, jedan clan je objekat tipa Element (sto je inace struktura, ciji je samo jedan clan Covek), taj element ima pointer na sledeci element i tako dalje...

Ovo je malo komplikovano objasniti ovako, pa bih ti preporucio da uzmes neku zbirku sa resenim zadacima gde se pominju liste (za pocetak jednoulancane liste ciji je svaki element int), pa da to kombinujes sa nekom teorijom (ako ti nije problem engleski, nacices gomilu toga na netu). Nemoj pogresno da me shvatis, nije mi tesko da ti pomognem, samo ne znam kako to da objasnim bez gomile primera, jer je koncept listi dosta komplikovan dok ga ne shvatis (posle ti bude smesno, ali uvek je tako...)
De si Deda...
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: Pomoc za pocetnika30.07.2006. u 09:17 - pre 216 meseci
Uf, uopste nisam video da si stavio to u strukturu.
Radio sam sa listama, ono osnovno, dodavanje clana, brisanje, sortiranje...
ali ne u klasama, nego u obicnom C-u, tako da se sad malo gubim.

Hvala ti puno!!!
Mislim, šta reći !
 
Odgovor na temu

reject
Ivan Pesic
Bgd

Član broj: 7659
Poruke: 2209
*.83.beocity.net.

Sajt: misc.comli.com


Profil

icon Re: Pomoc za pocetnika30.07.2006. u 10:30 - pre 216 meseci
http://richardbowles.tripod.com/cpp/linklist/linklist.htm
http://www.fortunecity.com/skyscraper/false/780/linklist.html
Ovaj link sam stavio samo zbog nostalgicnog primera: :)
Citat:
Some common examples of a linked list:

* The AmigaDOS Viewport structure always points to the next viewport. You can have multiple viewports in the same list


Inace, to sto je lista member klase, to ne menja nista vezano za nju, tako da i
tvoj stari kod koji si onda radio mozes uz male promene da ponovo zloupotrebis.
Mass murder ain’t just painless,
Now we’ve made it cute.


The Church Of The Holy Transistor
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pomoc za pocetnika

Strane: 1 2

[ Pregleda: 4900 | Odgovora: 29 ] > FB > Twit

Postavi temu Odgovori

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