====== Programozási tételek - Pascal nyelvű megvalósítás ======
Az alábbiakban a programozási [[oktatas:informatika:programozas:tetelek]] pascal nyelvű megvalósításait gyűjtöttük egybe.
===== A program kerete =====
Először készítsük el a program keretét, definiáljuk a szükséges változókat és készítsünk egyszerű beolvasó és kiíró eljárásokat!
Program Tetelek;
Const
MaxN = 100; // Maximális elemszám
Var
A : array[1..MaxN] of Integer; // Elemeket tároló tömb
N : Word; // Tényleges elemek száma
Procedure Beolvasas; // Beolvassa az elemeket
Var
i : Word; // Ciklusváltozó
Begin
Write ('Adja meg az elemek számát: ');
Readln(N);
For i := 1 to N do
Begin
Write (i, '. elem: ');
Readln(A[i]);
End;(* For *)
End;(* Beolvasas *)
Procedure Kiir; // Kiírja az elemeket
Var
i : Word; // Ciklusváltozó
Begin
Write('A tömb elemei: ');
For i := 1 to N-1 do
Begin
Write(A[i], ', ');
End;(* For *)
Writeln(A[i+1]);
End;(* Kiiras *)
// Ide kerülhetnek az egyes tételeket megvalósító függvények
Begin
Beolvasas;
Kiiras;
// itt hívhatjuk meg a kívánt tételt megvalósító eljárást, függvényt
End.
===== Megszámolás tétel =====
Számoljuk meg, hogy hány negatív (T tulajdonságú) elem van a megadott számok között!
Procedure Megszamolas;
Var
i : Word; // Ciklusváltozó
Db : Word; // A végeredmény
Begin
Db := 0;
For i := 1 to N do
Begin
If (A[i] < 0) Then Inc(Db);
End;(* For *)
Writeln(Db, ' negatív szám található a megadott számok között!');
End;(* Megszamolas *)
===== Összegzés tétel =====
Adjuk össze a megadott számokat!
Procedure Osszegzes;
Var
Sum : Integer; // A végeredmény
i : Word; // Ciklusváltozó
Begin
Sum := 0;
For i := 1 to N do
Begin
Sum := Sum + A[i];
End;(* For *)
Writeln('A számok összege: ', Sum);
End;(* Osszegzes *)
===== Eldöntés tétel =====
Döntsük el, van-e negatív (T tulajdonságú) szám a megadott számok között!
Procedure Eldontes;
Var
i : Word; // Ciklusváltozó
Begin
i := 1;
While (i <= N) and (A[i] >= 0) do
Begin
Inc(i);
End;(* While *)
If (i <= N) Then Writeln ('Van negatív szám a megadottak között.')
Else Writeln ('Nem található negatív szám a megadottak között.');
End;(* Eldontes *)
===== Kiválasztás =====
Adjunk meg egy negatív (T tulajdonságú) számot a megadottak közül, ha //tudjuk//, hogy van negatív szám köztük!
Procedure Kivalasztas;
Var
i : Word; // Ciklusváltozó
Begin
i := 1;
While A[i] >= 0 do
Begin
Inc(i);
End;(* While *)
Writeln ('A sorozat ', i, '. eleme negatív (', A[i], ').');
End;(* Kiválsztás *)
===== Keresés tétel =====
Döntsük el, hogy van-e a számsornak negatív (T tulajdonságú) eleme, és ha van, adjunk vissza egy negatív elemet!
Procedure Kereses;
Var
i : Word; // Ciklusváltozó
Begin
i := 1;
While (i <= N) and (A[i] >= 0) do
Begin
Inc(i);
End;(* While *)
If (i <= N) Then Writeln('Van negatív szám, például a sorozat ', i, '. eleme (', A[i], ')')
Else Writeln ('Nem található negatív szám a sorban.');
End;(* Kereses *)
===== Maximumkiválasztás =====
Keressük meg a számok legnagyobbikát!
Procedure MaximumKivalasztas;
Var
i : Word; // Cilusváltozó
MaxI : Word; // A legnagyobb elem indexe
Begin
MaxI := 1;
For i := 2 to N do
Begin
If (A[MaxI] < A[i]) Then
Begin
MaxI := i;
End;(* If *)
End;(* For *)
Writeln('A legnagyobb elem az ', MaxI, '. elem, ami: ', A[MaxI]);
End;(* MaximumKivalogatas *)
===== Kiválogatás =====
Válogassuk ki egy másik tömbbe (Eredmeny) a negatív (T tulajdonságú) elemeket!
Procedure Kivalogatas;
Var
i : Word; // Ciklusváltozó
Db : Word; // Az negatív elemek száma
Eredmeny : Array[1..MAXN] of Integer; // A végeredmény
Begin
Db := 0;
For i := 1 to N do
Begin
If (A[i] < 0) Then
Begin
Inc(Db);
Eredmeny[Db] := A[i];
End;(* If *)
End;(* For *)
// Az eredmény kiiratása
Write('Negatív elemek: ');
If Db > 0 Then
Begin
For i := 1 to Db-1 do
Begin
Write(Eredmeny[i], ', ');
End;(* For *)
Writeln(Eredmeny[i+1]);
End;(* If *)
End;(* Kivalogatas *)
===== Rendezés =====
Rendezzük a számsort növekvő sorrenbe!
==== Minimumkiválasztásos rendezés ====
* Kiválasztjuk a legkisebb elemet
* Első és a lekisebb cseréje
* A maradék, eggyel rövidebb számsorra ismételjük a fentieket
* Az N-1-edik elem helyrerakásakor kész vagyunk (az N. már csak jó helyen lehet.
Procedure Rendezes;
Var
i, j : Word; // Ciklusváltozó
MinIndex : Word; // Minimális elem indexe
seged : Integer; // Segédváltozó a cseréhez
Begin
For i := 1 to N-1 do // i azt mutatja, hogy hanyadik elemet rakom a helyére
Begin
// MinimumKiválasztás tétele
MinIndex := i;
For j:= i+1 to N do
Begin
If A[j] < A[MinIndex] Then MinIndex:=j;
End;(* For *)
// A csere
seged := A[i]; A[i] := A[MinIndex]; A[MinIndex] := seged;
End;(* For *)
End;(* Rendezes *)
===== Logaritmikus keresés =====
Adott, //rendezett// sorozatban keressünk meg egy megadott értéket!
Procedure LogaritmikusKereses;
Var
e, v, k : Word; // Eleje, vége , közepe
x : Integer; // A keresendő érték
Talalat : Boolean; // Megtaláltuk-e már?
Begin
Talalat := False;
Write ('Keresett elem: '); Readln(x);
e := 1; v := N;
While (e <= v) and not(Talalat) do
Begin
k := (e + v) div 2;
If A[k] < x Then e := k+1
Else If A[k] > x Then v := k-1
Else Talalat := True;
End;(* While *)
If (A[k] = x) Then Writeln('A keresett elem a tömb ', k, '. eleme.')
Else Writeln('Nincs ilyen elem!');
End;(* LogaritmikusKereses *)