Štruktúry alebo aj spájané zoznamy v C

Programovacie jazyky, rady, poradňa...
I am kiko
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2020, 13:41

Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa I am kiko »

Zdravím, chcem sa opýtať, či sa tu naozaj niekto vyzná v C-čku, som študent a trošku som nepochopil štruktúram v jazku C, resp spájaným zoznamom.
Ide vlastne o to, že by som chcel spraviť algoritmus na sčítavanie rozličných hodnôt rovnakých reťazcov (najviac zrozumiteľný príklad je asi hlasovanie - voľby , ktorý bude sčítavať hodnoty hlasov typické pre strany .. program si predstavujem nejako takto : vstup by vyzeral tak nejak takto *Poceet hlasov *nazov strany pričom Pocet je realne čislo a nazov strany je retazec znakov.... na vystupe by sa už len objavil foormat *sučet všetkych hlasov *nazov strany ).


Ide vlastne o to, že neviem, ako mam postupovať pri tvorbe tohto algoritmu, resp. čo mám robit hneď na začiatku kedže vstup sa bude načítavať u klavesnice.

Snažím sa pochopiť, ako funguju spájane zoznamy, no ak sa najde niekto kto by mi ich vedel vysvetlit po slovensky lepšie ako prekladač z fora stackoverflow, bol by som zato rád :)
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa harrison314 »

Skus sa pozriet napriklad na toto: http://people.tuke.sk/igor.podlubny/C/Kap10.htm v zavere su aj priklady na spajany zoznam.
I am kiko
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2020, 13:41

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa I am kiko »

aa
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa *****HERO***** »

"student" je nazov struktury, nie konkretna instancia struktury.

nemal by si k tomu atributu nahodou pristupovat cez konkretneho studenta ulozeneho v poli "databaza" ?
I am kiko
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2020, 13:41

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa I am kiko »

*****HERO***** napísal:"student" je nazov struktury, nie konkretna instancia struktury.

nemal by si k tomu atributu nahodou pristupovat cez konkretneho studenta ulozeneho v poli "databaza" ?
može byť ... :D nevšimol som si, no čo ďalej s tou funkciou?
Ak je prázdna mám tam vložit meno studenta a počet hlasov, v opačnom prípade ak sa meno študenta v databáze nachádza tak tam mám len upraviť počet hlasov cez format votes +=votes.
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa *****HERO***** »

skus takto. ale neviem teraz z hlavy, ako sa v C porovnava char* vs const char*, ten riadok s podmienkou ti hodi chybu, resp nebude robit to co ma, musis pogooglit (tipujem to na nejjaku strcmp funckuiu)

Kód: Vybrať všetko

int find_student(struct student* students,int size, const char* name){
   for(int i = 0;i < size;i++){
      if(students[i].name == name){
          return i;
      }
   }

   return -1;
}
I am kiko
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2020, 13:41

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa I am kiko »

Dobre, idem poriešiť ešte zobrazenie výstupu a taktiež poogooglim , zatiaľ pekne ďakujem.

Prekladač zatiaľ chybu nevypisoval, uvidíme či to teda niečo zrobí.
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa *****HERO***** »

urcite to nepojde, aj ked to nehodi chybu. porovna sa akurat adresa tych dvoch premennych (kedze su to ukazovatele) a to hodi vzdy fals.

musis pouzit nieco taketo https://www.programiz.com/c-programming ... g.h/strcmp
I am kiko
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2020, 13:41

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa I am kiko »

AAAA
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa *****HERO***** »

ano vyzera to dobre
I am kiko
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2020, 13:41

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa I am kiko »

aaa
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa *****HERO***** »

rozmýšlal som prečo mi vždy miesto prvého čísla hádže nulu, nebude to tým size na riadku 70, resp, databaza[size]+=pocet_hlasov?
ano, je to tym. skus porozmyslat, co za premennu je size a preco par riadkov pred tym volas funkciu find_student

dalej si skus predstavit, co sa stane, ked sa vytvori novy student a kde sa mu v tom pripade nastavy pociatocny pocet hlasov
Taktiež hore vo funkcii find_student používam spojkový zoznam, ale ja pracujem predsa s poľom, nebude to tým? v mojom kóde mi táto funkcia neprejde, resp nič sa nestane a taktiež sa nepripočítaju hlasy kvôli tomu.
preco myslis, ze pouzivas spajany zoznam?
Ďalej to sortovanie akosi nefunguje, neviem čo to teraz nieje kvôli funkciam vyššie, potrebujem to zoradiť ale od najväčšieho počtu hlasov, resp ak ma MAREK 10, JOZEF 12 tak 12 JOZEF bude prvý.
funkcia compare ma vratit
- hodnotu < 0 v pripade, ze prvok p1 ma byt pred prvkom p2
- hodnotu > 0 v pripade, ze prvok p1 ma byt za prvkom p2
- hodnotu = 0 v pripade, ze nezalezi (prvky su rovne)

teraz by to malo sortit podla prveho pripadu, cize skus to nejak otocit, aby to sortilo od najvacsieho po najmensi (ale inak hej, teraz to nefunguje kvoli chybam vyssie)
I am kiko
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2020, 13:41

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa I am kiko »

aaa
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa *****HERO***** »

vzhľadom na SIZE ukladám vždy prvok na 100tý index, čiže vždy index pred tým má hodnotu 0, kvôli memsetu vyššie , je to pravda?
SIZE a size je rozdiel, bacha na to.
struct student* students sa mi trošku podobná na spojkový zoznam, no v každom prípade bude chyba len tu, kedže ja mám v tomto bode pracovať s poľom, ako si ho pošlem teda miesto struct student* students sem?
preco myslis, ze pouzivas spajany zoznam? cim sa to podoba?
Čo mi vráti táto funkcia? Dva pointre odkazujuce nna počet hlasov to je všetko?
skus si prejst ten vyraz po returne znak po znaku. mozno sa tomu bude lepsie chapat takto (je to to iste, len rozpisane):

Kód: Vybrať všetko

int compare(const void* p1, const void* p2){
   const struct student* p1_student = (const struct student*) p1;
   const struct student* p2_student = (const struct student*) p2;
   int p1_student_hlasy = p1_student->votes;
   int p2_student_hlasy = p2_student->votes;
   return p1_student_hlasy - p2_student_hlasy;
}
I am kiko
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2020, 13:41

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa I am kiko »

aj keď tam bude len size / SIZE, vždy mi to vráti rovnaký výsledok, resp vždy mi to dá prvý votes na nulu
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa *****HERO***** »

jj, lebo ako som pisal, votes novemu studentovi nenastavujes

pri vytvarano noveho studenta pridaj bud:

Kód: Vybrať všetko

memcpy(&databaza[size].votes,pocet_hlasov ,sizeof(int));
alebo krajsie:

Kód: Vybrať všetko

databaza[size].votes = pocet_hlasov
co sa tyka existujucich studentov, tam staci inkrementnut pocet hlasov, co aj robis, ale musis to nastavit tomu studentovi, ktoreho si nasiel cez tu find_student funkciu a nie poslednemu (SIZE)
I am kiko
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2020, 13:41

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa I am kiko »

aaaa
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa *****HERO***** »

skus miesto

Kód: Vybrať všetko

memcpy(databaza[size].name,zaciatok_mena,velkost_mena);

Kód: Vybrať všetko

strcpy(databaza[size].name,zaciatok_mena);
I am kiko
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2020, 13:41

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa I am kiko »

*****HERO***** napísal:skus miesto

Kód: Vybrať všetko

memcpy(databaza[size].name,zaciatok_mena,velkost_mena);

Kód: Vybrať všetko

strcpy(databaza[size].name,zaciatok_mena);
Bohužiaľ rovnaký efekt
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Štruktúry alebo aj spájané zoznamy v C

Príspevok od používateľa *****HERO***** »

a co presne ti to vypisuje? skopiruj to sem a odscreenuj konzolu

neni nahodou problem len vo vypise ze na windowse je NL char \r\n a nie iba \n? skus to este s tym \r\n
Napísať odpoveď