Spojový seznam problém s procedurou Hledej – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spojový seznam problém s procedurou Hledej – Pascal – Fórum – Programujte.comSpojový seznam problém s procedurou Hledej – Pascal – Fórum – Programujte.com

 

Jakub
~ Anonymní uživatel
905 příspěvků
12. 4. 2015   #1
-
0
-

Ahoj,

mám problém s procedurou Hledej u spojového seznamu..

procedure Hledej(P:Uk);
var x:integer;
begin
 x:=5;
 while (p <> nil) and (p^.info <> x) do p:= p^.Dalsi;
 if p^.info <> x then writeln('Nenaslo se')
 else writeln('Naslo se');
end;

Když se daný prvek nachází ve spojáku vypíše se to, ale když se tam nenachází hodí to error: acces violation... nevím co s tím..

Předem díky.

Nahlásit jako SPAM
IP: 78.45.128.–
KIIV
~ Moderátor
+43
God of flame
12. 4. 2015   #2
-
0
-

kdyz se nenajde, tak je p = nil a tim paden  p^ natoz p^.info je nesmysl (respektive dereference null pointeru)

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Jakub
~ Anonymní uživatel
905 příspěvků
12. 4. 2015   #3
-
0
-

A jak by to teda mělo být? Trápím se tu s tím už hrozně dlouho...

Nahlásit jako SPAM
IP: 78.45.128.–
KIIV
~ Moderátor
+43
God of flame
12. 4. 2015   #4
-
0
-

no jak asi - musis jeste taky zkontrolovat, jestli neni p nil, nez se do nej zacnes hrabat

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Jakub
~ Anonymní uživatel
905 příspěvků
12. 4. 2015   #5
-
0
-

Tam jsem to zkontroloval a ne p není nil...

Nahlásit jako SPAM
IP: 78.45.128.–
Jakub
~ Anonymní uživatel
905 příspěvků
12. 4. 2015   #6
-
0
-

Aha, tak po cyklu while už je nil to bude nejspíš ta chyba..

Nahlásit jako SPAM
IP: 78.45.128.–
Jakub
~ Anonymní uživatel
905 příspěvků
12. 4. 2015   #7
-
0
-

Ale po cyklu má být nil, tak tohle už fakt nevím co tam je za chybu..

Nahlásit jako SPAM
IP: 78.45.128.–
Sniper
~ Anonymní uživatel
215 příspěvků
12. 4. 2015   #8
-
0
-

   

if p^.info ...


Derefencuješ pointer co na tomhle místě může být (a je) nil, proto ta chyba.

Nahlásit jako SPAM
IP: 90.179.201.–
KIIV
~ Moderátor
+43
God of flame
12. 4. 2015   #9
-
0
-

#7 Jakub
po cyklu ma byt nil jen v pripade, ze NENASEL ten prvek. Pokud nasel, tak tam nil neni a proto to nepada na access violation

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Sniper
~ Anonymní uživatel
215 příspěvků
12. 4. 2015   #10
-
0
-

*dereferencuješ (jo to vůbec slovo?   )

Nahlásit jako SPAM
IP: 90.179.201.–
Jakub
~ Anonymní uživatel
905 příspěvků
12. 4. 2015   #11
-
0
-

A jakým způsobem to teda mám obejít? Aby mi to tu chybu neházelo? Učili jsme se spojáky hodinu a hned mám dělat tohle...

Nahlásit jako SPAM
IP: 78.45.128.–
Jakub
~ Anonymní uživatel
905 příspěvků
12. 4. 2015   #12
-
0
-

Už to asi mám..

Nahlásit jako SPAM
IP: 78.45.128.–
KIIV
~ Moderátor
+43
God of flame
12. 4. 2015   #13
-
0
-

#11 Jakub
Podminky

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
JoDiK
~ Anonymní uživatel
987 příspěvků
13. 4. 2015   #14
-
0
-

Jestli to má jen zjistit našlo/nenašlo, tak asi takhle:

procedure Hledej(P:Uk);
var x:integer;
begin
 x:=5;
 while (p <> nil) and (p^.info <> x) do p:= p^.Dalsi;
 if p=nil then writeln('Nenaslo se')
 else writeln('Naslo se');
end;
Nahlásit jako SPAM
IP: 88.103.236.–
KIIV
~ Moderátor
+43
God of flame
13. 4. 2015   #15
-
0
-

Ale normalne se nedela fixni podminka. Preda se jako parametr. A vrati se pointer na ten prvek, nebo nil kdyz nenaslo.

neco jako:

function Hledej(Ptr:Uk; co:integer): Uk;
begin
  while (Ptr <> nil) and (Ptr^.info <> co) do Ptr := Ptr^.Dalsi;
  Hledej := Ptr; // nebo return Ptr; pokud to prekladac umi
end;
Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Spojový seznam - problém — založil Screpheep

Spojový seznam — založil Luckin

Spojový seznam — založil Jakub

Spojový seznam — založil TarderOrtex

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý