| | |
| Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Autor | Správa |
---|
Registrovaný: 08.05.13 Prihlásený: 08.05.13 Príspevky: 4 Témy: 1 |
mám trocha problem s jednym projektom do skoly: Napíšte program, ktorý bude pracovať so záznamami v dynamickom jednosmernom spájanom zozname. Mam problem s pridavanim do struktury · pridaj – je príkaz na pridanie záznamu do dynamického zoznamu. Príkaz je v ďalšom riadku nasledovaný celým číslom p > 0 vyjadrujúcim pozíciu (počítanú od 1), na ktorú sa má záznam pridať (záznam z pozície p sa posunie na pozíciu p+1). Potom nasleduje ďalších 5 riadkov, každý ukončený znakom konca riadku a obsahujúcim položky záznamu v poradí v akom sú aj v súbore zamestnanci.txt. Ak pozícia p v zozname neexistuje, záznam sa pridá na koniec zoznamu. Pri tejto voľbe program negeneruje žiaden výstup. Tu je moj kod ak by sa na to niekto pozrel a nasiel chybu bola by som vdacna po zadani prikazu pridaj program nic nevykona
ZAMESTNANEC *pridaj(ZAMESTNANEC *zoznam)
{ int p,pocet=1; ZAMESTNANEC *akt,*pom; pom=zoznam; akt = alok(); //nova pomocna do ktorej je alokovana pamat scanf("%d ",&p); scanf("%s",&akt->meno); scanf("%s",&akt->priezvisko); scanf("%d ",&akt->pracovnik); scanf("%lf ",&akt->mzda); scanf("%d.%d.%d ",&akt->den,&akt->mesiac,&akt->rok); akt->dalsi=NULL; if(zoznam == NULL){ return akt;} if(p==1){ //ak pridavam na prvu poziciu tak do pomocna dalsi dam prvu akt->dalsi=zoznam; return akt;}
else{ while (pom->dalsi != NULL){ pocet++; pom=pom->dalsi; //cyklus sa posuva az kym sa nedostane k zadanemu p potom zastavi if(++pocet == p){ break;} } akt->dalsi=pom->dalsi; pom->dalsi=akt; } return zoznam; }
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 08.05.2013 14:13 | |
|
Keď si nevieš nájsť chybu, rozdeľ si kód do viacerých jednoduchých častí. Napr pridanie na N-té miesto by si mohla napísať ako Kód: ZAMESTNANEC * novy = act; // to je ten, co prejde cez scanf ZAMESTNANEC * pridajPo = najdiNtyPrvok( zoznam, N ); // vrati prvok, ktory je na N-tej pozicii. Ak tam taka nie je, vrati posledny pridajPrvokZa( pridajPo, novy ); // prida novy prvok za prvok pridajPo A tieto jednoduché časti ti to zaobstarajú. Pritom sú jednoduché a nemáš problém ich implementovať. Napr tu http://en.wikipedia.org/wiki/Linked_lis ... inked_list máš tú funkciu pridajPrvokZa(), aha Kód: function insertAfter(Node node, Node newNode) // insert newNode after node newNode.next := node.next node.next := newNode Stačí ti len nájsť prvok na Ntej pozícií. Zbežne som tvoj kód preletel a vidím tam, že robíš pocet++ a potom ešte aj ++pocet (v podmienke) Tak zmeníš premennú pocet dva krát v jednom cykle, to by mohol byť problém. A ešte reťazce nenačítaj cez scanf, to nie je úplne dobrá voľba na toto (a ešte to aj robíš zle). Použi miesto toho funkciu gets http://www.cplusplus.com/reference/cstdio/gets/
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 08.05.13 Prihlásený: 08.05.13 Príspevky: 4 Témy: 1 |
uz som kod upravila a dokaze mi to pridat na prvu poziciu ale ked to chcem pridat do stredu struktury da sa mi to na koniec
ZAMESTNANEC *pridaj(ZAMESTNANEC *zoznam)
{ int p,pocet=1,dlzka; char meno[31],priezvisko[31],mzda[8]; ZAMESTNANEC *akt,*pom; pom=zoznam; akt = alok(); //nova pomocna do ktorej je alokovana pamat scanf("%d ",&p); gets(meno); gets(priezvisko); scanf("%d \n",&akt->pracovnik); gets(mzda); scanf("%d.%d.%d ",&akt->den,&akt->mesiac,&akt->rok); dlzka = strlen(meno); meno[dlzka] = '\n'; meno[dlzka+1]='\0'; strcpy(akt->meno, meno);
dlzka = strlen(priezvisko); priezvisko[dlzka] = '\n'; priezvisko[dlzka+1]='\0'; strcpy(akt->priezvisko,priezvisko);
akt->mzda=atof(mzda); akt->dalsi=NULL;
if(zoznam == NULL){ return akt;} if(p==1){ //ak pridavam na prvu poziciu tak do pomocna dalsi dam prvu akt->dalsi=zoznam; return akt;}
else{ while (pom->dalsi != NULL){ pocet++; pom=pom->dalsi; //cyklus sa posuva az kym sa nedostane k zadanemu p potom zastavi if(++pocet == p){ break;} } akt->dalsi=pom->dalsi; pom->dalsi=akt; } return zoznam; }
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 08.05.2013 15:04 | |
|
Čo som písal o tom zvyšovaní premennej pocet? A aj to o zjednodušení kódu si asi preskočila. A btw. cez gets to môžeš hádzať rovno do štruktúry ( proste gets(akt->meno); ), zbytočne je tam strcpy
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 08.05.13 Prihlásený: 08.05.13 Príspevky: 4 Témy: 1 |
if(zoznam == NULL){ return akt;} if(p==1){ //ak pridavam na prvu poziciu tak do pomocna dalsi dam prvu akt->dalsi=zoznam; return akt;}
else{ while (pom->dalsi != NULL){ ++pocet; pom=pom->dalsi; //cyklus sa posuva az kym sa nedostane k zadanemu p potom zastavi if(pocet == p){ break;} } akt->dalsi=pom->dalsi; pom->dalsi=akt; }
Teraz mi to napise na poziciu o jednu vyssie zadam 4 a da mi to na 5 :-/
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 08.05.2013 15:23 | |
|
Áno, to preto, že tak to máš spravené Ty zvýšiš pocet, nastavíš si nový pom a až potom kontroluješ tú podmienku. Najprv odkontroluj podmienku a až potom, keď ešte naozaj nie si tam, kde chceš byť, priraď do pom ďalší prvok.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 08.05.13 Prihlásený: 08.05.13 Príspevky: 4 Témy: 1 |
jezis jaka sprosta chyba dakujem moc uz mi to fici
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 08.05.2013 15:28 | |
|
Za málo
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
| Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| C - spajany zoznam struktur - help v Assembler, C, C++, Pascal, Java | 2 | 392 | 02.05.2014 19:29 TieSTiK | | Spajany zoznam , C# v Technológia .NET | 2 | 1439 | 06.12.2010 18:10 walther | | Spajany zoznam C v Assembler, C, C++, Pascal, Java | 2 | 1934 | 28.04.2015 22:24 JanoF | | Lineárny spájaný zoznam v C v Assembler, C, C++, Pascal, Java | 11 | 939 | 28.10.2013 16:36 chrono | | Assembler - Jednosmerny motor v Assembler, C, C++, Pascal, Java | 3 | 1084 | 06.07.2008 12:34 snapshot | | D: jednosmerny stabilizovany zdroj v Vymením a darujem | 6 | 498 | 01.02.2020 16:54 goldrat | | C++ a praca s triedenim struktur v Assembler, C, C++, Pascal, Java | 2 | 804 | 01.06.2008 17:39 capricorn7 | | Jazyk C - Oddeleny preklad - pole struktur v Assembler, C, C++, Pascal, Java | 1 | 1445 | 28.05.2010 22:18 chrono | | Zoznam v JavaScript, VBScript, Ajax | 1 | 1852 | 25.06.2012 0:08 shaggy | | zoznam v HTML, XHTML, XML, CSS | 17 | 2938 | 23.06.2007 22:06 sento | | zoznam v HTML, XHTML, XML, CSS | 10 | 2267 | 05.08.2007 10:20 HAE07 | | Zoznam uživateľov v Redakčné systémy | 1 | 783 | 21.02.2007 11:20 Freelan | | Python zoznam v Perl, Python, Ruby, CGI | 1 | 681 | 14.06.2013 21:35 reDo | | Zoznam katalógov v Internetový marketing, SEO, reklama | 9 | 73131 | 30.12.2010 9:51 JanoF | | zoznam kontaktov v Ostatné | 3 | 742 | 26.10.2010 19:53 shaggy | | zoznam-program v Ostatné programy | 3 | 715 | 10.07.2008 20:07 dadmtb |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|