Kezdőoldal » Számítástechnika » Programozás » Hogyan és miből lehet a...

Hogyan és miből lehet a legkönnyebben megtanulni a pascal nyelvet?

Figyelt kérdés

Néhány hete kezdtem el tanulni önszorgalomból benne programozni,mert érdekes saját dolgokat alkotni (FreePas). Próbálkoztam 1-2 könyvből példákat megoldani, próbálkoztam PDF fájlból és más netes forrásokból is, de ahogy bonyolódnak a feladatok, egyre jobban nem értem őket. Képtelen vagyok megjegyezni,bizonyos hasznos függvényeket és utasításokat, amelyeket a pascal használ és nem tudom hogy mikor melyiket kellene egy adott feladathoz, vagy éppen saját programhoz, "program készítésnél, egy un. kihíváshoz" használni, vagy éppen elővenni. A könyv sem segít a megértéshez és az internet sem úgy érzem. Próbáltam bizonyos dolgokat felírni füzetbe és bemagolni, de állandóan azt veszem észre hogy folyton utána kell néznem az adott feladathoz bizonyos dolgoknak. Néztem a pascalos témába illő hozzászólásokat és láttam, hogy vannak itt nagyon jó programozók benne. Ti hogyan és miből tudtatok ilyen jól megtanulni programozni? Én vagyok hozzá agyilag gyenge, rossz a felfogásom, vagy valóban nehéz ez a nyelv és más módszert kellene alkalmaznom a tanulásához?


Van egy elképzelésem,de ha rossz cáfoljatok meg, hogy sokan, vagy esetleg ti is meglévő példákat és megoldásokat irtok át, vagy abból építkeztek fel, vagy teljesen fejből "vágjátok", oldjátok meg a különböző jellegű feladatokat?


Egyszóval hogyan van ez az egész?


Várom a sok ötletet.

Köszi!



2015. okt. 16. 21:29
1 2 3
 11/30 A kérdező kommentje:

Javítva:


program ciklusos_pelda;

uses crt;


var ke:integer;

var ve:integer;

var szam:longint;


begin

clrscr;

Write('Elso ertek: ');

readln(ke);

Write('Masodik ertek: ');

readln(ve);


for szam:=ke to ve do begin

Write (szam,' ');

delay(500);

end;

readln;


end.

2015. okt. 16. 22:55
 12/30 anonim ***** válasza:
Olvastam már kezdőknek szóló, és experteknek szánt könyvet is de mindkettőben írták, hogy ha valamiről többet akarok tudni, vagy nem megy akkor ott a Google, rá lehet keresni. Furcsa módon minden kérdésemre találtam választ.
2015. okt. 16. 22:56
Hasznos számodra ez a válasz?
 13/30 A kérdező kommentje:
Kötve hiszem,hogy pont erre van példa a neten.
2015. okt. 16. 23:22
 14/30 anonim ***** válasza:

Felesleges elolvasni pár ezer oldalt a Pascal rejtelmeiről, mivel elég a szintaxisát, utasításkészletét, kulcsszavait ismerni, a szükséges függvényekre meg időközben rábukkansz dokumentációkból, StackOverflow-ról. Ha nagyon elakadsz egy probléma megoldásában, valószínűleg SO-n már rég megkérdezte valaki és elérhető a válasz.

A nehezebbik rész inkább az, hogy megtanulj különböző matematikai, logikai tételeket, sok-sok összefüggést és módszert, amelyekkel egy problémának a megoldási idejét jelentősen redukálhatod és a futásidő tekintetében is hatékonyabb a kód.


Az általad írt példához szükség van egy szálkezelő unitra, olvasd el ezt a bejegyzést: [link]

2015. okt. 16. 23:46
Hasznos számodra ez a válasz?
 15/30 A kérdező kommentje:
Na ez az amitől féltem a szálkezeléstől :( Ehhez már lövésem sincs. Segítene valaki a példát megoldani,vagy legalább kiegészíteni, hogy levonhassam a konzekvenciát belőle?
2015. okt. 16. 23:54
 16/30 A kérdező kommentje:

Nos mielőtt belehülyültem volna a szálkezelésbe, anélkül is megoldottam a feladatot és így nekem már jó is. Itt a teljes forráskód, miként lehet kilépni a for ciklusból, ami mégsem lehetetlen és felülmúlja a continue és break módszereket is. Annak biztos hasznos, aki vagy belebonyolódott a szálkezelésbe, vagy más utasításokkal kísérletezgetett, vagy nem a for ciklussal oldotta meg a feladatot. Egy billentyűlenyomással és az "m" billentyű lenyomásával máris kilép:



//Örülök hogy sikerült, ezért van még kedvem kínozni magam a pascal rejtelmeivel :))


program ciklusos_pelda;

uses crt;


var ke:integer;

var ve:integer;

var szam:longint;

var ch:char;


begin

repeat

clrscr;

textcolor(15);

Write('Elso ertek: ');

readln(ke);

Write('Masodik ertek: ');

readln(ve);


for szam:=ke to ve do begin

{if szam>500 then break;}


if keypressed then begin ch:=readkey;

if readkey='m' then begin

textcolor(12);

writeln;

write('Kilepes most!');

readln;

halt;

textcolor(15);

readln;

end;

textcolor(15);

end;


textcolor(2);

Write (szam,' ');

delay(500);

end;

readln;

until keypressed;

end.

2015. okt. 17. 01:16
 17/30 A kérdező kommentje:

Kicsit még szórakoztam vele: :))



program ciklusos_pelda;

uses crt;


var ke,ve:string;

var a,b:longint;

var szam:longint;

var ch:char;

var s:string;

var code:word;

label a1;

begin

a1:

repeat

clrscr;

textcolor(15);


Write('Elso ertek: ');

readln(ke);

if (ke>=#67) and (ke<>'v') then begin

clrscr;

textcolor(11);

Writeln('Ez a betu nem tamogatott!');

readln;

textcolor(15);

clrscr;

end;



if ke='v' then begin

textcolor(12);

writeln;

write('Kilepes most!');

readln;

halt;

textcolor(15);

end;


val(ke,a,code);


Write('Masodik ertek: ');

readln(ve);


if (ve>=#67) and (ve<>'v') then begin

clrscr;

textcolor(11);

Writeln('Ez a betu nem tamogatott!');

readln;

textcolor(15);

clrscr;

end;



if ve='v' then begin

textcolor(12);

writeln;

write('Kilepes most!');

readln;

halt;

textcolor(15);

{readln;}

end;


val(ve,b,code);



for szam:=a to b do begin

{if szam>500 then break;}


if keypressed then begin ch:=readkey;

if readkey='v' then begin


textcolor(12);

writeln;

write('Kilepes most!');

readln;

halt;

textcolor(15);

{readln;}


end;

textcolor(15);

end;


textcolor(2);

if b=0 then begin

clrscr;

textcolor(6);

write('Nincs ertek megadva!');

readln;

textcolor(15);

goto a1;

end;



Write (szam,' ');

delay(500);

end;

readln;

until keypressed;

end.

2015. okt. 17. 02:35
 18/30 anonim ***** válasza:

A "var" szót elég egyszer leírni, utána a változókat adhatod meg, nem kell minden sor elejére.


Itt találsz példákat:

[link]


Nekünk anno ez volt:

[link]


Mit mondjak, kissé már régi...


Könyvként pedig Angster Erzsébet - Kertész László könyvét használtuk.


Nem tudom, hol lehet még őket beszerezni, antikváriumban valószínűleg...


Neten is sokminden fent van:

Fentebbi linkhez mégegy:

[link]

Ha Google-be beírod, hogy "Pascal programozás", vagy "pascal programozás jegyzet", sokmindent találhatsz.

A [link] egy linkgyűjtemény, itt is találhatsz hasznos dolgokat.

Angolul pedig még többet (ha angolul is értesz).

2015. okt. 17. 08:37
Hasznos számodra ez a válasz?
 19/30 SimkoL ***** válasza:

Kicsit belejavítottam a programodba:


program ciklusos_pelda;


uses Crt;


var instr: string;

a, b, szam, code: integer;

ch: char;


begin

repeat

{Egyszerre állítjuk be a háttér és a betűszínt. Értékét hexademicális

számként célszerű megadni

TextAttr := $0F --> TextBackground(0); TextColor(15)}

TextAttr := $0F;

ClrScr;

code := -1;

{Amig a Val eljárásban értéket kapott code változó nem 0 addig ismételjük}

while code <> 0 do

begin

Write('Kérem az első értéket: ');

ReadLn(instr);

Val(instr, a, code);

{Ha az input stringünk első karaktere benne van a halmazban, mely jelen esetben

'v' és 'V' tartalmú, feltételezzük, hogy ki akar lépni a felhasználó}

if instr[1] in ['v', 'V'] then

begin

TextAttr := $0C;

WriteLn('Kilépés most!');

ReadLn;

{Beállítjuk a kilépési kódot, azt egy batch file-ból az errorlevel változó

lekérdezésével érjük el}

Halt(1);

end;

end;

code := -1;

while code <> 0 do

begin

Write('Kérem a második értéket: ');

ReadLn(instr);

Val(instr, b, code);

if instr[1] in ['v', 'V'] then

begin

TextAttr := $0C;

WriteLn('Kilépés most!');

ReadLn;

Halt(2);

end;

{Ha a Val eljárás sikeres volt, de b kisebb mint a, a code változót

nullától eltérőre állítjuk, hogy a ciklusunk újra lefusson és kiíratjuk

az erre vonatkozó hibaüzenetet}

if (code = 0) and (b < a) then

begin

code := -1;

Write('A második érték nem lehet kisebb az elsőnél !');

ReadLn;

end;

end;

for szam := a to b do

begin

if KeyPressed then

begin

ch := ReadKey;

if ch in ['v', 'V'] then

begin

TextAttr := $0C;

WriteLn('Kilépés most!');

ReadLn;

Halt(3);

end;

end;

Write(szam, ' ');

Delay(500);

end;

ReadLn;

until False; //Végtelen ciklus

end.


Valamint még ajánlom figyelmedbe ezt a pici oldalamat: [link]

2015. okt. 17. 09:14
Hasznos számodra ez a válasz?
 20/30 coopper ***** válasza:

Szia.


Nem bántani akarlak, hanem segiteni, tehát igy értelmezd amit irok :


Lépésenként kell haladni, és gyakorolni, gyakorolni, illetve az adott szintnek megfelelő példákat megpróbálni megoldani - értelemszerűen ezekből minél többet. (Mindennek megvan a maga folyamata csdak is lépésenként tudsz előrehaladni, mint a házépítésnél addig nem lehet a cserepeket felrakni a házra, amíg nincs kész az alap, a fal, a tető, nincs belécezve, stb,stb).


Most Te is olyasmiket akarsz megoldani, amihez még nem nagyon értél el tanulásilag (nem tudom, hogyan tanulsz, de gondolom, 1-11 lecke, nem nagyon tartalmazza a ciklusból való váratlan és szabályos kilépést - mint ahogy a szálkezelést sem tartalmazza, de ehhez a feladathoz még nem kell szálkezelés).


Az, hogy nem jut eszedbe bizonyos utasitás, azzal semmi gond sincs, ez is - mint minden más szakmában -, gyakorlat/gyakorlás kérdése. Mindenkinek meg kell tanulni a saját szakmáját. Ha Neked is meg lesz a kellő gyakorlatod akkor ezzel nem lesz semmi baj sem (persze mindig lesznek olyan dolgok - mint ahogy nekem is vannak még mindig olyan dolgok - amiket elsőre nem tudok/tudsz megoldani, erre van a google ahol találhatsz a problémádra megfelelő megoldást (feltéve, ha meg tudod frappánsan fogalmazni a problémát) - illetve ezért is vannak az ilyen jelegű fórumok is ahol tudsz kérdezni és kaphatsz a kérdésedre választ (azt, hogy milyen válaszokat kapsz azt most ne feszegessük)).



Más dolog, a programodhoz kapcsolódóan egy pár gondolat :


Pl. itt van ez az utasitás :

if (ke>=#67) and (ke<>'v') then begin


Ez eleve nem megfelelő, hiszen egy stringet vizsgálsz (ami több karakterből is állhat, de csak egy karakterrel hasonlitod össze). Miért éppen 67-nál nagyobb karakter az összehasonlitási alap ami a "C" betű ? A "v"-vel való nem egyenlőség az tiszta, de mi a helyzet a pl a "Vv"-vel, illeve a többi karakterrel amit nem vizsgálsz (33-as karaktertől a 66-os karakterig terjedő karakterekkel (!@#$%^&*()_+, stb,stb) amiknek csak egy része a szám ?


Ha igy akarod megoldani a feladatot akkor eleve meg kell irni azt a rutint ami karakteres beolvasást tesz lehetővé és nem stringből hasonlitod a dolgokat.


Illetve, ha tudod, hogy ki fogsz (lehetőség van kilépni a ciklusból) akkor azt nem for ciklussal oldjuk meg, hanem vagy while vagy repeat ciklussal. (Gondolom még ezek a ciklusok nem nagyon jöttek szóba), mivel a for ciklusból nem nagyon lehet szabályosan kilépni, csak a HALT utasítással, de az még egy nagyobb program esetében átláthatatlanná teszi/teheti a kódot, igy csak a végszükség esetén használjuk (mig az általam említett két ciklusból van szabályos kilépési mód - vagy feltétel vagy ciklusváltozó végértékre való beállitásával).


A másik dolog az előbb emlitettem a halt utasitást, hogy nem nagyon használjuk, mert átláthatatlanná teszi a kódod.


Ezeket a feltételeket inkább a másik oldaláról kellene megközelíteni, tehát nem úgy hogy kilépjen a program hanem úgy hogy ha teljesül a feltétel akkor menjen tovább a program (illetve minden If-nek lehet else ága is, tehát ha tájékoztatni akarod a felhasználót a történésekről akkor az else ágban megteheted pl (maradva a példádnál - de irtam string és karakter nem a legjobb megoldás mivel a stringben több karakter is lehet és akkor az már nem esik a vizsgálat alá - addig működőképes az általad irt, illetve ez én feltételem is amig egy karaktert adunk be a stringbe).


if ('0'<=ke) and (ke<='9') and <>'v') then begin

{ Itt történik a feldolgozás}

end else begin

{ Itt pediglen a felhasználó tájékoztatása arról, hogy nem jó karaktert adott meg}

end ;



Amúgy ügyesen megtaláltad, a "v" betű lenyomását kezelő pascal utasitásokat.


De azért ide is tennék egy megjegyzést : A speciális billentyűknek két kódja van (F1-F12, illetve irányitó billentyűk : Nyilak, Home, End, PageUp, PageDown, stb) Az első kód az a nulla aztán adja be a második kódod ami a végüli kód (ezt nem kezeli a programod) és ebből - nem ebben az esetben - de adódhatnak furcsa, megmagyarázhatatlan program müködések (mármint abból, hogy két kódot kapsz a redkeytől és nincs lekezelve a két kódos dolog).



Amúgy meg csak kitartás, és minnél több energiát fektess bele (pl. gyakorlás, forráskódok olvasása, elemzése, megértése - mit miért csinál az a bizonyos kód) mert igy tudod elsajátítani a programozás alapjait, illetve ami talán a legfontosabb a programozási GONDOLKOZÁSMÓDOT.


Sok sikert.

üdv.

2015. okt. 17. 09:24
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!