Programozási segédlet

Hasonló dokumentumok
Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

PROGRAMOZÁSI TÉTELEK

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Egyszerű programozási tételek

Adatbázis rendszerek Gy: Algoritmusok C-ben

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Bevezetés a programozásba I.

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

ELEMI PROGRAMOZÁSI TÉTELEK

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Programozási tételek. Dr. Iványi Péter

Webprogramozás szakkör

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Közismereti informatika I. 4. előadás

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Összetett programozási tételek

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Programozás alapjai II. (7. ea) C++

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Írjon olyan programot a standard könyvtár alkalmazásával, amely konzolról megadott valós adatokból meghatározza és kiírja a minimális értékűt!

angolul: greedy algorithms, románul: algoritmi greedy

Programozás I gyakorlat. 10. Stringek, mutatók

6. fejezet: Ciklusok

Programozás alapjai 9.Gy: Struktúra 2.

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Objektumorientált Programozás VI.

Egyszerű programozási tételek

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

1. Jelölje meg az összes igaz állítást a következők közül!

Algoritmusok bonyolultsága

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Programozás I gyakorlat

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Maximum kiválasztás tömbben

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT

Algoritmusok vektorokkal keresések 1

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

bármely másikra el lehessen jutni. A vállalat tudja, hogy tetszőlegesen adott

INFORMATIKA tétel 2019

10. gyakorlat Tömb, mint függvény argumentum

2018, Diszkrét matematika

Rekurzív algoritmusok

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Vezérlési szerkezetek

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Algoritmusok bonyolultsága

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

INFORMATIKAI ALAPISMERETEK

A programozás alapjai 1 Rekurzió

Felvételi tematika INFORMATIKA

Objektum Orientált Programozás VII.

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Algoritmusok és adatszerkezetek gyakorlat 07

Bevezetés a programozásba I.

Algoritmizálás, adatmodellezés tanítása 1. előadás

Programozási módszertan. Mohó algoritmusok

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Algoritmusok és adatszerkezetek I. 1. előadás

INFORMATIKAI ALAPISMERETEK

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Algoritmuselmélet 1. előadás

Objektumorientált Programozás VI.

Véletlen sorozatok ellenőrzésének módszerei. dolgozat

Számítógépes döntéstámogatás. Genetikus algoritmusok

Smalltalk 2. Készítette: Szabó Éva

Apple Swift kurzus 3. gyakorlat

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Informatikai tehetséggondozás:

9. gyakorlat Lineáris egyenletrendszerek megoldási módszerei folyt. Néhány kiegészítés a Gauss- és a Gauss Jordan-eliminációhoz

Adatszerkezetek II. 6. előadás

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

7. gyakorlat Sorozatok, Fájlkezelés

INFORMATIKA javítókulcs 2016

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Átírás:

Programozási segédlet Programozási tételek Az alábbiakban leírtam néhány alap algoritmust, amit ismernie kell annak, aki programozásra adja a fejét. A lista korántsem teljes, ám ennyi elég kell legyen ahhoz, hogy a kezdő programozó néhány egyszerűbb feladatot sikeresen meg tudjon oldani. Mennyire kell ( érdemes ) ezeket tudni? Úgy, hogy bármikor szükség lehet rájuk. Vizsgán, zh-n sokkal könnyebb átmenni, ha nem ott kell kitalálni ezeket az algoritmusokat. Csere Van két változónk ( A és B ), és azok értékét szeretnénk felcserélni. Az egyik lehetséges módszer az, hogy használunk egy segédváltozót. Ebbe elmentjük A változó értékét: SEGED = A Mivel A értékét így elmentettük, felülírhatjuk B értékével: A = B Majd B értékét felülírjuk A eredeti értékével, amit most a SEGED-ben tárolunk: B = SEGED int a, b, seged; a = 10; b = 20; /****** Csere ******/ seged = a; a = b; b = seged; printf("csere utan:\n"); Számok esetén van olyan módszer is, ami nem igényel segédváltozót, csak összeadást és kivonást: A = A + B B = A B A = A B int a, b; a = 100; b = 120; printf("***************\n"); a = a + b; 1/6

printf("***************\n"); b = a b; printf("***************\n"); a = a b; Lineáris keresés Adott egy N elemű vektor, amely valamilyen objektumokat tárol. A vektor rendezetlen, tehát az elemek nincsenek nagyság szerint sorba rendezve. Az a feladat, hogy keressünk meg egy bizonyos értékű elemet a vektorban. Az algoritmus a következő elven működik: elindulunk a vektor elején, és sorra megvizsgáljuk az elemeket. Akkor állunk meg, ha megtaláltuk azt amit kerestünk, vagy ha elértük a vektor végét. Tehát egy ciklusra lesz szükségünk, valamint egy index változóra. A vektor indexelését most 0-tól kezdjük N-1-ig. ciklus amíg ( index < N ) és ( vektor[ index ] keresendő érték ) index = index + 1 Ha ( index < N ) Kiír A keresett érték helye a vektorban: index egyébként Kiír A keresett elem nincs benne a vektorban Megjegyzés: A feltételben fontos, hogy előbb az i < N feltételt ellenőrizzük. Mivel ha az elem nincs benne a tömbben, akkor a ciklus azért fog leállni, mert az i index olyan értéket vesz fel, amivel már kilépünk a vektorból. Ekkor az i < N kifejezés hamis lesz, és ilyenkor a program az és kapcsolat miatt már nem fogja kiértékelni a feltétel második részét ( vektor[ i ] keresendő érték ), így nem fog a program olyan memóriaterületen vizsgálódni, ahol már nem szabad. int i = 0; int mit_keres = 7; while (( i < N ) && ( vektor[i]!= mit_keres )) i++; if ( i < N ) printf("a %d a %d. helyen van\n", mit_keres, i); else printf("a %d nem talalhato meg a vektorban!\n", mit_keres); 2/6

Eldöntés Kicsit hasonlít a lineáris kereséshez, de itt csak annyi a feladat, hogy megmondjuk hogy egy adott elem benne van-e a vektorban ( a hely most nem érdekes ). ciklus amíg ( index < N ) és ( vektor[ index ] keresendő érték ) index = index + 1 Talalat = index < N Ha ( Talalat ) Kiír A keresett érték benne van a vektorban egyébként Kiír A keresett elem nincs benne a vektorban int i = 0; int mit_keres = 7; int talalat = 0; while (( i < N ) && ( vektor[i]!= mit_keres )) i++; talalat = i < N; if ( talalat ) printf("a %d benne van a vektorban\n", mit_keres); else printf("a %d nem talalhato meg a vektorban!\n", mit_keres); Megszámlálás Egy adott N elemű rendezetlen vektor T tulajdonságú elemeinek számát kell meghatározni. Használjunk szintén egy ciklust. Ezúttal az összes elemet meg kell vizsgálni. Használjunk a ciklusváltozón kívül még egy számlálásra használt változót is. mennyi = 0 ciklus -tól N 1-ig ha vektor[ index ] T tulajdonságú, akkor mennyi = mennyi + 1 elágazás vége Kiír mennyi példa c-ben: int i = 0; int mit_keres = 4; int mennyi = 0; for (i = 0; i < N; i++) { 3/6

if (vektor[i] == mit_keres) mennyi++; printf("%d talalat\n", mennyi); Minimum kiválasztás Adott egy N elemű rendezetlen vektor. A feladatunk az, hogy megkeressük a legkisebb elemet. Ehhez végig kell néznünk a teljes vektort. Kezdetben a legelső elemet tekintjük minimálisnak. Ha találunk kisebbet, akkor ez utóbbit tekintjük minimális elemnek. minimum_ ciklus index = 1-től N-1-ig Ha vektor[ index ] < vektor[ minimum_index ] akkor minimum_index = indexelését elágazás vége int i; int min_; for (i = 1; i < N; i++) { if (vektor[i] < vektor[min_index]) min_index = i; printf("a legkisebb elem a %d., ami a %d\n", min_index, vektor[min_index]); Megjegyzés: A reláció megfordításával az algoritmus a maximális elemet fogja megtalálni. Rendezés Adott egy N elemű rendezetlen vektor. A feladat ezen vektor elemeinek rendezése növekvő vagy csökkenő sorrendbe. Erre számos algoritmus létezik, az alábbiakban az egyik legegyszerűbbet, a minimumkiválasztásos rendezést írom le, amivel növekvő sorrendbe lehet rendezni az elemeket. Első lépésben meghatározzuk az egész vektor legkisebb elemét. Ezt, és az első elemet felcseréljük. Ekkor az első elem utáni elemeket kell rendezni. Tehát a 2. elemtől indulva megkeressük a legkisebbet, majd ezt felcseréljük a második elemmel. Ezt így folytatjuk, míg el nem érünk a vektor végére: Példa: legyenek az elemek a következők: 4, 1, 4, 2, 0, 5, 7, 3, 8, 4 N = 10 i = 0 Megkeressük a legkisebb elemet, ez a 0, amit felcserélünk az i. elemmel: 0, 1, 4, 2, 4, 5, 7, 3, 8, 4 4/6

Ezután i-t növeljük. Most az i. indexű elemtől kezdve keressük meg a legkisebbet. Ez az 1 lesz, most nem kell cserélni, majd i-t újra növeljük. Most az i = 2. indexű elemtől keresünk, és azt találjuk, hogy a 3-as indexű elem a legkisebb ( ami 2 ), ezt felcseréljük az i. elemmel: 0, 1, 2, 4, 4, 5, 7, 3, 8, 4 Az algoritmust folytatva így rendeződik a vektor: i = 3 0, 1, 2, 3, 4, 5, 7, 4, 8, 4 i = 4 0, 1, 2, 3, 4, 4, 7, 5, 8, 4 i = 5 0, 1, 2, 3, 4, 4, 7, 5, 8, 4 i = 6 0, 1, 2, 3, 4, 4, 4, 5, 8, 7 i = 7 0, 1, 2, 3, 4, 4, 4, 5, 8, 7 i = 8 0, 1, 2, 3, 4, 4, 4, 5, 7, 8 Ciklus i = 0-tól N 2-ig min_index = i Ciklus j = i + 1-től N 1-ig Ha vektor[ j ] < vektor[ min_index ] akkor min_index = j elágazás vége Ciklus vége Az i. és min_index-ik elem cseréje int vektor[n] = { 4, 1, 4, 2, 0, 5, 7, 3, 8, 4 ; int i, j; int min_index; int seged; printf("rendezes elott:\n"); for (i = 0; i < N; i++) printf("%d ", vektor[i]); printf("\n"); for (i = 0; i < N - 1; i++) { min_index = i; for (j = i + 1; j < N; j++) { if (vektor[j] < vektor[min_index]) min_index = j; seged = vektor[i]; vektor[i] = vektor[min_index]; vektor[min_index] = seged; printf("rendezes utan:\n"); for (i = 0; i < N; i++) printf("%d ", vektor[i]); 5/6

printf("\n"); 6/6