Fejlesztői környezet, valamint annak elvárásai
I.	Fejlesztői környezet:
1. BLOODSHED DEVC++

II. Elvárásai:
•	 Windows 95 or higher. 
•	32 MB of RAM. 
•	The executables compiled by Dev-C++ will need MSVCRT.DLL (comes with Windows 95 OSR 2 or higher). 

A feladat megfogalmazása
- legyen egyértelmű
- legyen részletes
- optimalizálás maradhat későbbre
- programnyelv kiválasztása
Matematikai modell elkészítése
Algoritmus lefektetése

Algoritmus
 
Alapfogalmak:
 
Változó: Olyan mennyiség, amely az algoritmus végrehajtása során megváltozik.
Konstans: Állandó, nem változtatható érték.
Azonosító: Olyan jelsorozat, amellyel a változó tartalmára hivatkozhatunk és megváltoztathatjuk azt.
Értékadás: Az a művelet, melynek során a változó értéke megváltozik. Jele Turbo Pascalban: „:=”– legyen egyenlő.
Kezdőérték: A változó és a konstans induló értéke a start pontban.
Deklaráció: Az algoritmus azon pontja, ahol a változót először elhelyezzük (típust adunk neki).
Definiálás: Értékadó művelet.
 
Változók:
 
1. Neve (azonosítója): Csak betűvel (az angol ABC szerint) és aláhúzásjellel kezdődhet, és betűvel, számmal vagy aláhúzásjellel folytatódhat. Hossza legalább 1 karakter. Kis- és nagybetű általában nem különböző (a C-ben igen).
 
2. Típusa: Logikai, szám (egész, valós), szöveg, karakter. Minden típus összehasonlítható egymással. A típus meghatározza, hogy milyen műveletek végezhetők vele. Meghatározza a hosszát (memóriában) és az értékeinek lehetőségét.
 
3. Értéke: Egy a megadott típusban elhelyezkedő elem. Pl.
- b: logikai (TRUE és FALSE lehet, hossza: 1 bit),
- i: egész (-végtelen és +végtelen közötti egész szám),
- r: valós (-végtelen és +végtelen közötti tört vagy egész szám),
- s: string (’SzöVeG’ – maximum 255 karakter hosszúságú szöveg lehet, de lehet akár 1, akár 0 karakter hosszúságú is – a C-ben nincs valódi string, így nem csak 255 karakternyi, hanem bármilyen hosszúságú szöveget egy „0” karakter zárja),
- c: karakter (’X’ – lehet speciális jel, számjegy, betű vagy üres karakter)
 
Műveletek:
 
Logikai: NOT, AND, OR, XOR, =TRUE, =FALSE
 
Valós: +, -, *, /, =, <, >, <>, <=, >=
 
Egész: +, -, *, =, <, >, <>, <=, >=, / – ha az eredményt a gép kerekíti, % (maradékos osztás maradéka – pl. 5%2=1, 4%2=0)
 
String: + (összekapcsolás), <> (a két string nem egyenlő), a betűk ABC sorrendje szerint: <, >, <=, >=
 
Karakter: a betűk ABC sorrendje szerint: <, >, <>, <=, >=

Algoritmusleíró eszközök:
 
1. Folyamatábra:
 
START		Algoritmus kezdete

  STOP			Algoritmus vége

 
Utasítás		Értékadó utasítás

 
	BE:
	INPUT			Bemeneti utasítás (kérés)

	KI:
	OUTPUT		Kimeneti utasítás (kiírás)

 
 
	     1			Algoritmus megszakítása egy ponton

	     1			Algoritmus folytatása egy ponttól

 

    n		       i
	Feltétel		Feltételes elágazás (összetett/kettős utasítás)

 
 
				Nem csatlakozó folyamatok (nem szimbólum)

 
 
				Folyamatok csatlakozási pontja (nem szimbólum)

Jellemzői:
 
1. Minden folyamatábra tartalmaz pontosan 1 START és legalább egy STOP szimbólumot.
2. Minden vonal irányított.
3. Minden pontba el lehet jutni a START-ból, és minden pontból el lehet jutni legalább egy STOP-ba.
 
2. Struktogram (Chappin-ábra):
 
   Utasítás	       Feltétel		   Ciklus
 
   Utasítás1 	      Utasítás1		  Feltétel
   Utasítás2	        Feltétel		         Uta.1  
 	      I	        N
	    Uta.1  Uta.2

 

Előnye: nagyobb algoritmus esetén átláthatóbb a folyamatábránál.
Hátránya: készítésénél a lehető legpontosabban meg kell saccolni az algoritmus hosszát, így az ábrázolandó külső négyszög nagyságát.
 
3. Leírónyelv:
 
A leírónyelv hasonlít legjobban a programnyelvre. Van sorszámozott és nem sorszámozott leírónyelv. Mondatszerű. Szabad, de kevésbé átlátható, mint a folyamatábra vagy a struktogram (akárcsak a programnyelv).

Egyszerű feladatok:
 
1. Tetszőleges egész szám abszolútértéke:
 
A=A

DEKLARÁCIÓK
A: Egész
ALGORITMUS KEZD
  BE: A
  HA A<0 AKKOR
    KI:=-A
  KÜLÖNBEN
  KI: A
ALGORITMUS VÉGE.
 
2. Tetszőleges egyismeretlenes egyenlet megoldása:
 
AX+B=0
 
DEKLARÁCIÓK
A,B,X: Valós
KEZD
  BE: A,B
  HA A=0 AKKOR
    KI: ’Hibás bemenő A’
  KÜLÖNBEN
    KI: ’X=’,-B/A
VÉGE.
 
3. Két elem cseréje:
 
DEKLARÁCIÓK:
A,B,C: Típus
KEZD
  BE: A,B
  C:=A
  A:=B
  B:=C
VÉGE.
 
4. Két szám legnagyobb közös osztója:
 
A nagyobbik számot csökkenteni kell a kisebbikkel, és a kapott értékre át kell írni. Ezt addig kell folytatni, amíg egyenlő számot nem kapunk. Ez az érték a két szám legnagyobb közös osztója.
 
Pl.
27/21
27	21
6	21
6	15
6	9
6	3
3	3
DEKLARÁCIÓK
  A,B: Egész
KEZD
  BE: A,B
  HA (A<=0) OR (B<=0) AKKOR
    KI: ’Hibás bemenő adatok!’
  KÜLÖNBEN
    CIKLUS amíg A<>B
      HA A>B AKKOR
        A:=A-B
      KÜLÖNBEN
        B:=B-A
    CVÉGE
    KI: ’A közös nevezőjük:’, A
  HAVÉGE
VÉGE.
 
Alapvető algoritmusok:
 
1. Egydimenziós tömb elemeinek feltöltése:
 
Tomb[1..N]
 
CILUS I:=1-től N-ig
  BE: Tomb[I]
CVÉGE
 
2. Egydimenziós tömb kiírása:
 
Tomb[1..N]
 
CILUS I:=1-től N-ig
  KI: Tomb[I]
CVÉGE
 
3. Kétdimenziós tömb feltöltése:
 
Tomb[1..N, 1..M]
 
CILUS I:=1-től N-ig
  CILUS I:=1-től M-ig
    BE: Tomb[I,J]
  CVÉGE
CVÉGE

 
4. Kétdimenziós tömb kiírása:
 
Tomb[1..N, 1..M]
 
CILUS I:=1-től N-ig
  CILUS I:=1-től M-ig
    KI: Tomb[I,J]
  CVÉGE
CVÉGE
 
Egy sorozathoz egy elem hozzárendelése:
 
1. Összegképzés tétele:
 
Tomb[1..N, 1..M]
 
S:=0
CILUS I:=1-től N-ig
  CILUS I:=1-től M-ig
    S:=S+Tomb[I,J]
  CVÉGE
CVÉGE
 
2. Szorzatképzés tétele:
 
Tomb[1..N, 1..M]
 
S:=1
CILUS I:=1-től N-ig
  CILUS I:=1-től M-ig
    S:=S*Tomb[I,J]
  CVÉGE
CVÉGE
 
3. Eldöntés tétele:
 
Szerepel-e a tömb elemei között valamilyen tulajdonságú elem. Ha igen, melyik az?
Az első előfordulást figyeli.
Ha az utolsót akarjuk, akkor vagy visszafelé haladjunk, vagy a ciklusfeltételnek ne adjuk meg a NOT Jóelem-et!

 

 
 
I:=0
CILUS amíg (I<=N) AND NOT Jóelem(Tomb[I])
  I:=I+1
CVÉGE
HA Jóelem(Tomb[I]) AKKOR
  KI: ’Van ilyen elem!’
  KI :I,’ az elem sorszáma.’
KÜLÖNBEN
  KI: ’Nincs ilyen elem!’
  KI: Az I,’:=N+1’
 
4. Kiválasztás tétele:
 
Biztosan tartalmazza az elemet, de nem tudjuk, hogy melyik az.
 
I:=1
CIKLUS amíg NOT Jóelem(Tomb[I])
  I:=I+1
CVÉGE
KI: ’Az elem sorszáma:’,I,’.’
 
5. Maximum kiválasztás tétele:
 
A legnagyobb elem kiválasztása.
 
MAX:=1
CIKLUS I:=2-től N-ig
  HA T[I]>T[MAX] AKKOR MAX:=I
CVÉGE
KI: T[MAX]
 
6. Minimum kiválasztás tétele:
 
A legkisebb elem kiválasztása.
 
MIN:=1
CIKLUS I:=2-től N-ig
  HA T[I]<T[MIN] AKKOR MIN:=I
CVÉGE
KI: T[MIN]
 
7. Megszámlálás tétele:
 
Adott tulajdonságú elemek kiírása.

 
S:=0
CIKLUS amíg I<=N
  HA Jóelem(Tomb[I]) AKKOR S:=S+1
CVÉGE
KI: S,’ db jó elem van!’