Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 8 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.05.13
Prihlásený: 08.05.13
Príspevky: 4
Témy: 1
Príspevok NapísalOffline : 08.05.2013 13:51

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;
}


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 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!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.05.13
Prihlásený: 08.05.13
Príspevky: 4
Témy: 1
Príspevok Napísal autor témyOffline : 08.05.2013 15:02

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;

}


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 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!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.05.13
Prihlásený: 08.05.13
Príspevky: 4
Témy: 1
Príspevok Napísal autor témyOffline : 08.05.2013 15:21

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 :-/


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 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!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.05.13
Prihlásený: 08.05.13
Príspevky: 4
Témy: 1
Príspevok Napísal autor témyOffline : 08.05.2013 15:26

jezis jaka sprosta chyba :D dakujem moc uz mi to fici :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 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!
Odpovedať na tému [ Príspevkov: 8 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. C - spajany zoznam struktur - help

v Assembler, C, C++, Pascal, Java

2

392

02.05.2014 19:29

TieSTiK Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Spajany zoznam , C#

v Technológia .NET

2

1439

06.12.2010 18:10

walther Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Spajany zoznam C

v Assembler, C, C++, Pascal, Java

2

1934

28.04.2015 22:24

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Lineárny spájaný zoznam v C

v Assembler, C, C++, Pascal, Java

11

939

28.10.2013 16:36

chrono Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Assembler - Jednosmerny motor

v Assembler, C, C++, Pascal, Java

3

1084

06.07.2008 12:34

snapshot Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. D: jednosmerny stabilizovany zdroj

v Vymením a darujem

6

498

01.02.2020 16:54

goldrat Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C++ a praca s triedenim struktur

v Assembler, C, C++, Pascal, Java

2

804

01.06.2008 17:39

capricorn7 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Jazyk C - Oddeleny preklad - pole struktur

v Assembler, C, C++, Pascal, Java

1

1445

28.05.2010 22:18

chrono Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zoznam

v JavaScript, VBScript, Ajax

1

1852

25.06.2012 0:08

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoznam

v HTML, XHTML, XML, CSS

17

2938

23.06.2007 22:06

sento Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoznam

v HTML, XHTML, XML, CSS

10

2267

05.08.2007 10:20

HAE07 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zoznam uživateľov

v Redakčné systémy

1

783

21.02.2007 11:20

Freelan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Python zoznam

v Perl, Python, Ruby, CGI

1

681

14.06.2013 21:35

reDo Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. Zoznam katalógov

v Internetový marketing, SEO, reklama

9

73131

30.12.2010 9:51

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoznam kontaktov

v Ostatné

3

742

26.10.2010 19:53

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoznam-program

v Ostatné programy

3

715

10.07.2008 20:07

dadmtb Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra