Delphi programozás SRTNB020
-
Upload
thane-nash -
Category
Documents
-
view
61 -
download
0
description
Transcript of Delphi programozás SRTNB020
Delphi programozásDelphi programozásSRTNB020
Nagyváradi AnettNagyváradi Anett
Delphi programozásDelphi programozás
Boszorkány utca 2. B138-as iroda
http://morpheus.pte.hu/~anettn
Delphi programozásDelphi programozásElérhetőség
FreePascal
Turbo Delphi 2006 Explorer (full, english)
http://cc.codegear.com/free/turbodelphi
Borland Delphi 7.0
Megjegyzés:
a ppt-ben található színkódok:
forráskód általános szintaxisa
példaprogram részlet
Delphi programozásDelphi programozás
Alkalmazott programok
1. Pascal alapok - tömbkezelés, függvények, eljárások, fájlkezelés
2. Objektum orientált programozás3. Delphi környezet – formok, unitok, komponensek
4. Alkalmazás fejlesztése – tulajdonságok,
események 5. Adatbáziskezelés – SQL, adathozzáférési
komponensek, adat-érzékeny vezérlők
6. Internet-, webes-alkalmazások7. 2D-, 3D-grafika
Delphi programozásDelphi programozásTematika
[1] Angster Erzsébet : Programozás tankönyv I.- II.Akadémia nyomda, Martonvásár, 1999
[2] Baga Edit : Delphi másképpAkadémia nyomda, Martonvásár, 1999
[3] Benkő Tiborné : Programozási feladatok és
algoritmusok Delphi rendszerben Computer Books, Budapest,
2002
Delphi programozásDelphi programozásAjánlott irodalom
[4] Ray Lischner: Delphi kézikönyv Kossuth Kiadó, 2001
[6] Paul Kimmel: Delphi 6 fejlesztők kézikönyve
Panem Kft. , Budapest, 2002
[5] Dr. Fercsik János : Programozás – Delphi Dunaújvárosi Főiskola - jegyzet, 2001
[6] Marco Cantú : Delphi 7 mesteri
szinten I. –II. Kiskapu Kft, 2003
Delphi programozásDelphi programozásAjánlott irodalom
1. ELŐADÁS
Bevezetés a programozásbaPascal ismeretek felelevenítése
Algoritmikus gondolkodásProgramszerkesztés
Számábrázolás
• A szg. a számokat mindig meghatározott számú számjeggyel ábrázolja
• Kiegészítve balról a számot nullákkal, a kívánt mennyiségű számjegyből fog állni
• Bit - az információ legkisebb egysége (kettes számrendszer egy számjegyének felel meg)
• Byte – 8 bit• 1 kB=210 bit = 1024bit • Szó - egyszerre feldolgozható bitek száma (pl.:
32 bites processzor)
210 = 0000 00012
Kettes számrendszer - átváltás
10100110112 =
=1·29 + 0·28 + 1·27 + 0·26 + 0·25 + 1·24 + + 1·23 + 0·22 + 1·21 + 1·20 =
=29 + 27 + 24 + 23 + 21 + 20 =
= 512 + 128 + 16 + 8 + 2 + 1 =
= 667
A szoftverfejlesztés lépései
• elemzés – problémaelemzés, helyzetfelmérés, igényfelmérés, célok felállítása, idő és költségbecslés
• tervezés – adatstruktúrák és algoritmusok kialakítása, ez a legnehezebb, legösszetettebb része a fejlesztésnek
• kódolás – az elkészült terv implementálása, azaz a forráskód elkészítése adott nyelven
• tesztelés – próbafuttatások végzése, ilyenkor merülnek fel a felhasználás közbeni problémák, melyeket orvosolni kell; szélsőséges helyzetek vizsgálata
• dokumentálás – igen fontos része a fejlesztésnek az egyes fázisok pontos leírása, a felhasználói leírás; ez a továbbfejlesztésnél,
felhasználásnál játszik fontos szerepet
Keretrendszer - turbo.exe
Állományok:Turbo.TPL – turbo pascal library, magasszintű rutinok
gyűjteménye
Turbo.TPH – help, a súgó állományok találhatók itt (F1)
Turbo.TP – a pascal konfigurációs állománya
Turbo.DSK – desktop állomány , legutóbb használt képernyő minta
*.PAS – pascal forrásprogram
*.BAK – biztonsági másolat
A Pascal program szerkezete
program nev; {Programfej}
uses egysegnev; {Beépített utasítások}
var valtozonev:tipus; {Deklarációs rész}
{ide kerül a konstans, eljárás, függvény deklaráció is}
begin {Végrehajtó rész}
programtörzsend.
Változók
• Egy hely, ami alkalmas egy érték tárolására a számítógép memóriájában
• Nevet kap - segítségével a későbbiekben a változóban lévő objektumra hivatkozni lehet
• Érvényességi kör (lokális, globális változók)
• Tartalom: szám, szöveg, boolean kifejezés, konstans, stb.
Változó típusok – egészek
Shortint: -128 - 127, előjeles, 8 bites
Integer:-32768 - 32767, előjeles, 16 bites
Longint:-2147483648 - 2147483647, előjeles, 32 bites
Byte: 0 - 255, előjel nélküli, 8 bites
Word:0 - 65535, előjel nélküli, 16 bites
Változó típusok – valósak
Real: -2.9-39- 1.738, 11-12 számjegy, 6 byte-os.
Single:-1.5-45- 3.438, 7-8 számjegy, 4 byte-os.
Double:-5.0-324- 1.7308, 15-16 számjegy, 8 byte-os.
Extended:-3.4-4932- 1.14932, 19-20 számjegy, 10 byte-
os.Comp:
-9.2-18- 9.218, 19-20 számjegy, 8 byte-os.
Tömb, rekord, típus
Tömb: Ugyanolyan típusú változók tárolására szolgáló adathalmaz
Rekord: Összetartozó adatokat, de többféle típusú változót tudunk eltárolni benne (például egy személy neve, címe, születési ideje és helye, stb)
Pointer: A pointer a memória meghatározott címére mutat
Text: Típus nélküli file
File of-:Típusos file
Deklaráció - szintaktika
Változó var valtozonev1 : tipus;
valtozonev2, valtozonev3 : tipus;Tömb
nev : array[1..10] of integer;matrix : array[1..10,1..10] of
integer;Típusdefniálás
type nev = set of elemek felsorolása; Record típus
type nev = record a,b,c,d:típus; end;Konstans
const konstansvaltozo = ertek;
Iteráció
elöl tesztelős ciklus
while kifejezes do utasitas;
hátul tesztelős ciklus
repeat utasitas until feltetel;
növekményes ciklus fel
for kezdo to veg do utasitas;
növekményes ciklus le
for kezdo down to veg do utasitas;
Szelekció
választáscase kifejezes of
ertek:utasitas;ertek:utasitas;…else utasitas;
end;
feltételes utasításif feltetel then utasitas;if feltetel then utasitas else
utasitas;
Műveletek
maradékos osztás mod
egészosztás div
és and
léptetés balra shl
igaz, hamis true, false
Függvények, eljárások
Használatuk: - többször szeretnénk meghívni- máshol is használni szeretnénk- paraméterek adhatók át (lokálisak)- a függvény visszatér egy értékkel
Függvényekfunction nev(argumentumok):tipus;Pl.: Abs(numerikus kifejezés);
függvény valós vagy egész szám abszolút értékét adja vissza
Eljárásokprocedure nev (argumentumok);Pl.: Arc(X, Y, Kezdőszög, Zárószög, Sugár); eljárás grafikus módban - körcikket rajzol
Függvények
adatbevitel Readln[(változóaz.)];Read[(változóaz.)];
megjelenítés képernyőn Write[(kifejezés)];Writeln[(kifejezés)];
képernyő pozíció GotoXY(Xpoz, Ypoz);képernyő törlés ClrScr;képernyő sor törlése ClrEol; /crt unit/véletlen szám (0- h) Radom(h);négyzet Sqr(i);négyzet gyökvonás Sqrt(i);kerekítés Round(i);
Karakterlánc függvények:
lánc hossza
length(karakterlánc);
a lánc egy darabját adjacopy(karakterlánc,kezd,darab);
részláncot keres
pos(részlánc, karakterlánc);
Karakterlánc eljárások
törlésdelete(karlánc,kezd, darab);
beszúrás
insert(részlánc,karlánc,pozíció);
számot karakterlánccá alakítjastr(szám, karakterlánc);
karláncot számmá alakítjaval(karlánc, szám, kód);
Egyéb
a karakterrel visszatérő fvReadKey;
billentyűzet puffert vizsgáló boolean fvKeyPressed;
késleltetésdelay(ezredmásodperc);
zenéléssound(frekvencia);
Fájlkezelés
Lépései programozási nyelvtől függetlenek:- fájl megnyitása- adatok írása, olvasása- fájl lezárása
Fajtái:- szöveges fájlok- típusos fájlok- típus nélküli fájlok
Szöveges fájlok
- Karaktereket tartalmazó sorokból épülnek fel
- Lezárása: CR/LF (kocsi vissza/soremelés)
(ASCII kódja: 13 és 10)
- Szekvenciális elérés és használat
- Vagy csak olvasható vagy csak írható
Szöveges fájlok
- Használatakor deklarálni kell egy változót, típusa: text
var fájl_változó: Text;
- A fájlváltozóhoz hozzá kell rendelni a fájltAssign(fájl_változó, fájl_név);
- Ezek után jöhetnek a műveletek
Szöveges fájlok - megnyitás
reset(fájl_változó);
csak olvasásra nyitja
eof függvény true értékkel jelzi, ha a fájl üres.
rewrite(fájl_változó);
új szövegfájlt hoz létre, vagy felülír egy létezőt
append(fájl_változó);
létező fájlt nyit meg csak hozzáírásra
Szöveges fájlok –I/O műveletek
Írás
write(fájl_változó, kifejezéslista);
writeln(fájl_változó, kiflista);
Olvasás
read(fájl_változó, kifejezéslista);
readln(fájl_változó, kifejezéslista);
Szöveges fájlok – eof, eoln
- Fájl végének ellenőrzéseeof(fájl_változó);
true: az aktuális pozíció a fájl utolsó eleme után helyezkedik el
- Sor végének ellenőrzéseeoln(fájl_változó); függvény true értékkel tér vissza, ha az aktuális pozíció az end-of-line (sorvége - CR/LF) jelzőn áll
seekeoln(fájl_változó); (true: sor vége) seekeof(fájl_változó); (true:állomány vége)
http://www.lib.uni-miskolc.hu/digital/0001/html/delphi5.htm
Fájlkezelés
Assignfile hozzárendelésReset nyitás csak olvasásra Rewrite nyitás írásara, felülírásraRead I/O olvasásWrite I/O írásClosefile lezárás
Hibakezelés
- I/O műveleteknél fellépő hibák kezelése lehetséges
- programrészletet a {$I-} és {$I+} direktívák közé kell helyezni
- IOResult függvény visszaadott értékéből következtethetünk a hiba megjelenésére (tároljuk integer változóba!)
- IOResult visszatérési értéke:0, ha a legutolsó I/O művelet sikeres
volt run-time hiba kódja, ha sikertelen
Hibakezelés - példa
{$I-} Reset(f); {megnyitás} Ior:=IOResult; {változóba mentés} if Ior<>0 then begin WriteLn('A fájl nem létezik!'); Exit; end; {$I+}
Grafika
Grafikus képernyő használatához:
- GRAPH unit- .BGI fájlok
- a TP/BGI könyvtárban található
- az általunk használt VGA üzemmódhoz az EGAVGA.BGI fájlra lesz
szükség
- ez a fájl a videokártya vezérléséhez szükséges alacsonyszintű
parancsokat tartalmazza
Grafika
DetectGraph(gd,gm); gd a grafikus meghajtó, a monitor típus
kódja gm a képernyőfelbontás kódja
InitGraph(gd,gm,'c:\tp\bgi');kapcsolja be a grafikus képernyőt
ReadLn; az ábra megjelenítése
CloseGraph; a grafikus képernyő bezárása
Grafika
SetBkColor(white); beállítja a háttérszínt, majd ezzel a színnel töröljük a képernyőt: ClearDevice;
SetColor(red); eljáráshívással a rajz színét állítjuk be
SetTextStyle(0,0,2); a megjelenítendő szöveg karaktertípusát, irányát és a nagyítás mértékét
Grafikai függvényekputpixel(x,y:integer;szin:word);
az (x,y) koordinátájú pontot szin színűre festigetpixel(x,y):word;
visszaadja az (x,y) koord. pont színétline(x1,y2,x2,y2);
adott színnel és stílussal vonalat húz két pont közöttsetcolor(szin:word);
aktuális szín beállítása (16 szín 0-15ig, konstansok)getcolor:szin;
értéke 0 és 15 között lehet, visszaadja az aktuális színt
setlinestyle(stilus, minta, vastagsag);a húzott vonalak stílusát SolidLn (0,normál), DottedLn (1,pontozott), CenterLn (2,szaggatott), DashedLn (3,szaggatott), UserBitLn (4, a minta-ban definiált mintájú) vastagságát NormWidth (0,1,2), illetve ThickWidth (3)
Grafikai alakzatok
rectangle(x1,y1,x2,y2); téglalapot rajzol
circle(x,y,radius:integer);kört rajzol x,y középponttal és radius
sugárral
drawpoly(p:word; var pontok);sokszöget rajzol
Feladatok1. Számok bekérése, sorrendben való kiíratása2. Osztás adott pontossággal3. Maximumelem kiválasztás tömbből4. Buborékrendezés5. Lotto – legtöbbször kisorsolt elem6. Fájlkezelés – a rejtö.txt fájl tartalmát átmásolni egy másik
fájlba7. Menürajzolás8. Vonal, kör, rúd kirajzoltatása9. Egy pontba érintkező koncentrikus körök kirajzolásaHf.:1. Mátrix szorzása (tükrözése)2. Bekért személyi adatok fájlba mentése3. Alakzatok kirajzolása bekért paraméterek szerint
Megoldás 1.Számok bekérése, sorrendben való kiíratása
Program hf1; {szam beolvasasa, sorrenben kiiratasa}
uses Crt;
vari,j,n,tmp: integer;A : array[1..30] of integer;
begin clrscr; {bekeres} for i:=1 to n do A[i]:=0; write('mennyi n erteke?'); readln(n); if n>30 then writeln('tul sok a szam') else for i:=1 to n do begin write('kerem ezt az ',i,'szamot'); readln(A[i]); end;
if n<30 then
begin
{sorrend}
for i:= 1 to n do
begin
for j :=1 to n do
begin
if A[i]<A[j] then
begin
tmp:=A[i];
A[i]:=A[j];
A[j]:=tmp;
end;
end;
end;
{kiiratas}
for i:= 1 to n do
begin
if A[i]<>A[i+1] then write(' ' ,A[i], '');
end;
readln;
end
else
readln;
end.
program osztas;uses crt;
var eredmeny,t:string; osztando, oszto:longint; pontossag:byte; i:byte; {ciklusvaltozo}
szam1,szam2:longint; hanytizedesig,tmp,maradek,j:integer;
beginclrscr;
writeln('kerem az osztot');readln(oszto);writeln('kerem az osztandot');readln(osztando);writeln('hany tizedesig');readln(pontossag);
Str(osztando div oszto, eredmeny);eredmeny:=eredmeny+',';
for i:=1 to pontossag do begin osztando:=10*(osztando mod oszto);
Megoldás 2.Osztás adott pontossággal
Str(osztando div oszto, t);
eredmeny:=eredmeny+t;
end;
writeln('az eredmeny',eredmeny);
{ masik}
writeln;
writeln;
writeln('kerem az osztot');
readln(szam1);
writeln('kerem az osztandot');
readln(szam2);
writeln('hany tizedesig');
readln(hanytizedesig);
tmp:= szam1 div szam2;
write('az eredmeny: ',tmp,',');
maradek:=szam1 mod szam2;
tmp:= (maradek*10) div szam2;
write(tmp);
for j:=1 to hanytizedesig do
begin
maradek:=maradek mod szam2;
tmp:=(maradek*10) div szam2;
write(maradek);
end;
readkey;
end.
PROGRAM CiklusDemo2;{Jelsz˘ beˇr sa} Uses CRT; VAR jelszo,tipp:string; c:char; BEGIN jelszo:='TM'; Repeat tipp:=''; Write('K‚rem a jelsz˘t (Enter=kil‚p‚s): '); repeat c:=Readkey; if c<>#13 then begin Write('*'); tipp:=tipp+c; end; until c=#13; Writeln; Until (tipp=jelszo) or (tipp=''); if tipp=jelszo then Writeln('Bel‚pett!') else Writeln('Nem l‚pett be'); END.
Megoldás 3.Jelszóbekérő
PROGRAM maximumkivalasztas; Uses CRT; CONST n=10; a:array[1..n] of integer=(2,20,2,2,2,-2,5,2,2,2); VAR m,cv:integer;
BEGIN clrscr; m:=1; for cv:=2 to n do if a[cv]>a[m] then m:=cv; writeln('a legnagyobb elem helye: ', m, ' erteke', a[m]);
readkey;
END.
Megoldás 4. Maximumelem kiválasztás tömbből
PROGRAM buborekrendezes; Uses CRT; CONST n=10; a:array[1..n] of integer=(2,20,2,2,2,-2,5,2,-5,2); VAR m,cv,temp:integer; volt:Boolean; {false, true}
BEGIN clrscr; repeat volt:=false; for cv:=1 to n-1 do if a[cv]>a[cv+1] then begin temp:=a[cv]; a[cv]:=a[cv+1]; a[cv+1]:=temp; volt:=true; end; until not volt; for cv:=1 to n do write(a[cv]:5); writeln; readkey;
END.
Megoldás 5. Buborékrendezés
program lotto_proceduras;uses crt;CONST N=90;{ Huzas:array[1..N] of word=(133,112,156,124,115,131,140,128,117,156, 130,150,151,129,140,124,122,136,136,139, 131,141,140,133,140,125,126,122,156,112, 115,133,125,138,139,131,127,127,111,116, 135,148,135,121,131,133,149,125,145,131, 146,134,124,141,126,144,123,124,126,130, 129,125,107,154,130,143,136,125,146,116, 138,143,135,120,155,134,160,135,129,125, 138,125,129,132,131,152,118,109,116,138);} Huzas:array[1..N] of word= (137,115,161,128,118,133,146,130,118,158,
132,155,156,130,141,125,127,142,136,147,136,145,146,139,145,127,127,128,160,116,118,137,133,142,142,134,132,129,113,122,138,154,137,123,134,138,152,126,147,135,149,136,127,146,133,151,124,127,133,138,136,127,107,157,134,149,141,129,149,121,145,146,141,128,157,140,164,139,135,129,141,126,133,133,139,155,121,111,121,142);
var temp,tmp,osszhuzas:word; i,m,cv,valt,Kevesebbszer,Tobbszor,Atlag:integer;
PROCEDURE Huzasszam; var i:integer; Begin tmp:=0; for i:=1 to N do tmp:=tmp+Huzas[i]; writeln('A huzasok szama', tmp div 90); End;
Megoldás 6.Lotto – legtöbbször kisorsolt elem
var i:integer; Begin Atlag:= tmp div 90; Kevesebbszer:=0; for i:=1 to N do if Huzas[i]<Atlag then Inc(Kevesebbszer); Tobbszor:= N-Kevesebbszer; writeln('atlagnal kevesebbszer kihuzott: ',Kevesebbszer); writeln('ill. tobbszor kihuzott ',Tobbszor); End;
PROCEDURE Maximum; var i:integer; BeginPROCEDURE Atlagszamitas; tmp:=0; for i:=1 to N do if (tmp<Huzas[i]) then begin tmp:=Huzas[i]; valt:=i; end; writeln('a leggyakrabban kihuzott szam:',valt); End;
PROCEDURE Minimum;PROCEDURE Minimum; Procedure maxkereses(var m:integer); {hogy tmp Procedure maxkereses(var m:integer); {hogy tmp valt honnet induljon}valt honnet induljon} BeginBegin m:=1;m:=1; for cv:=2 to N dofor cv:=2 to N do if Huzas[cv]>Huzas[m] then m:=cv;if Huzas[cv]>Huzas[m] then m:=cv; End;End; BeginBegin maxkereses(m);maxkereses(m); tmp:=Huzas[m];tmp:=Huzas[m]; for i:=1 to N do if (tmp>Huzas[i]) thenfor i:=1 to N do if (tmp>Huzas[i]) then beginbegin tmp:=Huzas[i];tmp:=Huzas[i]; valt:=i;valt:=i; end;end; writeln('a legritkabban kihuzott szam:',valt);writeln('a legritkabban kihuzott szam:',valt); End;End;
BEGINBEGINclrscr;clrscr;Huzasszam;Huzasszam;Atlagszamitas;Atlagszamitas;Maximum;Maximum;Minimum;Minimum;readkey;readkey;END.END.
Megoldás 6. – folyt.Megoldás 6. – folyt.Fájlkezelés – a rejtö.txt fájl tartalmát átmásolni egy másik fájlbaFájlkezelés – a rejtö.txt fájl tartalmát átmásolni egy másik fájlba
PROGRAM menu_keszites;Uses CRT;VAR m:char; a,b:integer;
Begin TextBackGround(Blue); TextColor(Black); clrscr;
GotoXY(33,12); write('╔══════════╗'); GotoXY(33,13); write('║ ║ '); GotoXY(33,14); write('╚══════════╝'); a:=0; b:=0; a:=random(21); b:=random(11)+5;
if ((a<10) and (b<10)) then begin GotoXY(33,13); write('║',a,' ',b,'║'); end; if ((a>9) and (b>9)) then begin GotoXY(33,13); write('║',a,' ',b,'║'); end;
readkey;End.
Megoldás 7.Menürajzolás
PROGRAM grafik; Uses CRT,GRAPH; VAR videokartya,Grafikusmod:integer;
BEGIN videokartya:=Detect; InitGraph(videokartya,Grafikusmod,'C:\tp\bgi'); SetBkColor(9); SetLineStyle(3,3,1); SetFillStyle(HatchFill,1); Bar(300,300,350,350); Line(10,10,200,200); Circle(250,250,20);
readkey; CloseGraph;END.
Megoldás 8.Vonal, kör, rúd kirajzoltatása
Megoldás 9.Egy pontba érintkező koncentrikus körök kirajzolása
program KOROK;uses GRAPH;var gd,gm,i:integer;begin DetectGraph(gd,gm);InitGraph(gd, gm,'');
for i:=1 to 10 do begin Circle(200+i*10,200,60+i*10); end; ReadLn; CloseGraph;
end.