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


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 | 3
NapísalOffline : 08.05.2013 14:13 | Jednosmerny spajany zoznam struktur v C

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 | 1
Napísal autor témyOffline : 08.05.2013 15:02 | Jednosmerny spajany zoznam struktur v C

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 | 3
NapísalOffline : 08.05.2013 15:04 | Jednosmerny spajany zoznam struktur v C

Č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 | 1
Napísal autor témyOffline : 08.05.2013 15:21 | Jednosmerny spajany zoznam struktur v C

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 | 3
NapísalOffline : 08.05.2013 15:23 | Jednosmerny spajany zoznam struktur v C

Á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 | 1
Napísal autor témyOffline : 08.05.2013 15:26 | Jednosmerny spajany zoznam struktur v C

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 | 3
NapísalOffline : 08.05.2013 15:28 | Jednosmerny spajany zoznam struktur v C

Za málo :)


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
 [ Príspevkov: 8 ] 


Jednosmerny spajany zoznam struktur v C



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 Backend

2

524

02.05.2014 19:29

TieSTiK

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

Spajany zoznam C

v Backend

2

2046

28.04.2015 22:24

JanoF

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

Spajany zoznam , C#

v Backend

2

1517

06.12.2010 18:10

walther

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

Lineárny spájaný zoznam v C

v Backend

11

1041

28.10.2013 16:36

chrono

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

Assembler - Jednosmerny motor

v Backend

3

1149

06.07.2008 12:34

snapshot

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

D: jednosmerny stabilizovany zdroj

v Bazár

6

568

01.02.2020 16:54

goldrat

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

C++ a praca s triedenim struktur

v Backend

2

894

01.06.2008 17:39

capricorn7

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

Jazyk C - Oddeleny preklad - pole struktur

v Backend

1

1541

28.05.2010 22:18

chrono

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

zoznam

v Frontend

17

3186

23.06.2007 22:06

sento

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

zoznam

v Frontend

10

2524

05.08.2007 10:20

HAE07

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

Zoznam

v Frontend

1

2114

25.06.2012 0:08

shaggy

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

zoznam kontaktov

v Ostatné

3

906

26.10.2010 19:53

shaggy

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

zoznam-program

v Ostatné programy

3

826

10.07.2008 20:07

dadmtb

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

Zreťazený zoznam

v Backend

3

1247

26.03.2012 17:06

Fico

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

Zoznam systemov

v Windows

1

625

06.08.2009 23:22

Jaro

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

Zretazeny zoznam

v Backend

4

2107

23.02.2011 18:13

mack0



© 2005 - 2026 PCforum, edited by JanoF