Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Ahoj,
začali jsme brát pointery a moc jim zatím nerozumím.Potřeboval bych poradit s tímhle...
type PT=^T;
T=record
val:integer;
end;
var p,q:PT;
procedure priklad;
begin
new(p);
new(q);
p^.val:=13;
q^.val:=13;
writeln(p=q);
end;
begin
end.
A potřeboval bych vědět,proč to nic nevypisuje.Díky
Offline
Zdravím,
klíčovým slovem type v Pascalu si uděláme svůj vlastní datový typ. V našem případě si vytvoříme datový typ PT, což bude ukazatel na naší strukturu T. To znamená, že record tady značí strukturu. V naší struktuře máme jediný prvek val a to typu celočíselného.
Klíčové slovo var značí blok pro deklaraci proměnných. V našem případě si nadeklarujeme proměnné p a q, což budou ukazatelé na strukturu T.
Vytvoříme si tedy proceduru priklad (klíčovým slovem procedure), což si můžeme představit jako malý podprogram, který nic nevrací (naopak proceduře je funkce, která vrací data).
Procedura nám začíná klíčovým slovem begin a končí klíčovým slovem end (ovšem za tímto slovem je středník).
V naší proceduře (priklad) si alokujeme pamět pomocí klíčového slova new. Ve skutečnosti si tím uděláme dvě struktury a na každou strukturu bude ukazovat ukazatel p a q.
První ukazatel, který ukazuje na první strukturu a vní je proměnná val, tak přiřadíme 13.
Druhý ukazatel, který ukazuje na druhou strukturu a vní je proměnná val, tak přiřadíme 13.
Jinak kód hlavního programu začíná v sekci begin a end (za endem hlavního programu je ale tečka). Ale my nic v hlavním programu nemáme. Je potřeba tam zavolat proceduru priklad. To znamená, že do bloku hlavního programu napíšeme priklad;.
Navíc nevím, co by měl dělat ten výpis writeln(p=q) v proceduře. S tím jsem se ještě nesetkal... Jako co mě napadá, dá se to využít přímo třeba ve funkcích return p^.val == q^.val. V C/C++ něco takového jde, jestli v Pascalu (kde by bylo jedno rovnítko při porovnání), nevím.
Oba ukazatele p i q jsou adresy. Pro korektní výpis hodnoty 13 je potřeba zavolat něco ve smyslu: writeln(p^.val);.
Offline