1 / 32

Elemi alkalmazások fejlesztése I.

Maximumkeresés tömbökben. Elemi alkalmazások fejlesztése I. Készítette: Gregorics Tibor: gt@inf.elte.hu Szabóné Nacsa Rozália: nacsa@inf.elte.hu Lektorálta: Szendrei Rudolf: szr@inf.elte.hu. 4. 7. 0. 9. 6. 7. 9. 4. Feladat. Keressük meg egy tömb valamely maximális elemét.

Download Presentation

Elemi alkalmazások fejlesztése I.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Maximumkeresés tömbökben Elemi alkalmazások fejlesztése I. Készítette: Gregorics Tibor: gt@inf.elte.hu Szabóné Nacsa Rozália: nacsa@inf.elte.hu Lektorálta: Szendrei Rudolf: szr@inf.elte.hu

  2. 4 7 0 9 6 7 9 4 Feladat Keressük meg egy tömb valamely maximális elemét. Az eredményt írjuk ki a szabványos outputra. Maximális elemek

  3. 1 2 3 Megoldás Itt biztosítjuk, hogy a feladat elvégzéséhez szükséges adatok megfelelő formában álljanak rendelkezésünkre . Adatok előkészítése Absztrakt megoldó program A számítások elvégzéséhez felhasználunk egy maximunkeresést. Itt írjuk ki a maximális elem értékét és azt, hogy ez a tömb hányadik eleme. Eredmény megjelenítése

  4. Maximumkeresés tétele: állapottér f: függvény m: az értelmezési tartomány alsó határa n: az értelmezési tartomány felső határa max: a maximális elem értéke ind: a maximális elem indexe i: segédváltozó Maximumkeresés tétele: előfeltétel m  n

  5. Maximumkeresés tétele: struktogram max, ind, i := f(m), m, m+1 i  n max < f(i) max, ind:= f(i), i SKIP i:=i+1

  6. Maximumkeresés tétele: tömbökre max, ind, i := v.lov, v.lob, v.lob+1 i  v.hib max < v[i] max, ind:= v[i], i SKIP i:=i+1

  7. "Kódolás"

  8. Speciális értékadások • j = i++; • j = i; i = i+1; • j = ++i; • j = i = i+1; •  • i++ i = i+1 • i-- i = i-1 • i+= a i = i+a • i-= a i = i-a • i*= a i = i*a • i/= a i = i/a • i%= a i = i%a • i = j = k; j = k;i = k;

  9. For utasítás program_1 feltétel mag program_2 • for(program_1;feltétel;program_2){ • mag • } ciklusváltozó • for(int i=0;i<n;i++){ • mag • } • for(int i=0;i<n;i++) utasítás;

  10. 4 7 0 9 6 7 9 4 Tömbök indexelése Az első elem indexe: 0. Az utoló elem indexe: n-1. v[0] v[3] v[n-1] v.lob  0 v.hib  n-1 v.lov  v[0]

  11. 4 ? ? 7 0 9 6 7 9 4 Index túlcsordulás v[n] v[-1] Ha a vektor -1-dik vagy az n- dik elemére hivatkozunk - SAJNOS!!!! - nincs hibajelzés, de természetesen ilyenkor akármi is történhet. TILOS ILYET CSINÁLNI!!!!!

  12. 1 2 3 Main függvény int main() { //Adatok beolvasása //Maximumkeresés //Eredmény megjelenítése return 0; } visszatérési érték

  13. 2 1 1 2 3 Main függvény int main() { //Adatok beolvasása //Maximumkeresés //Eredmény megjelenítése return 0; }

  14. max, ind, i := v.lov, v.lob, v.lob+1 i  v.hib max < v[i] max, ind:= v[i], i SKIP • //Maximumkeresés • int ind, max ; • max=v[0]; ind = 0; • for(int i=1; i<n; i++){ • if(v[i]>max ){ • max = v[i]; • ind = i; • } • } i:=i+1

  15. 1 3 2 2 3 Main függvény int main() { //Adatok beolvasása //Maximumkeresés //Eredmény megjelenítése return 0; }

  16. A tömb egyik maximális eleme: 9. Ez a tömb 7. eleme. • //Eredmény megjelenítése • cout << "A tömb egyik maximális eleme: " • << max << "." << endl ; • cout << "Ez a tömb " << ind+1 << ". eleme." << endl;

  17. 1 1 2 3 2 3 Main függvény int main() { //Adatok beolvasása //Maximumkeresés //Eredmény megjelenítése return 0; }

  18. konstans tömb statikus helyfoglalású tömb dinamikushelyfoglalású tömb Háromféle megoldás a tömb használatára

  19. Konstans tömb létrehozása A tömb elemeinek értékét a program futása közben nem változtatjuk meg. A tömb egész számokat tartalmaz const int v[] = {4, 7, 0, 9, 6, 7, 9, 4}; const int n = sizeof(v)/sizeof(v[0]); implicit konverzió A tömb elemszámát a program futása közben nem változtatjuk meg. n a tömb elemeinek száma.

  20. A tömb elemei: 4,7,0,9,6,7,9. A tömb megjelenítése • cout << " A tömb elemei: "; • for (int i=0; i<n; i++){ • cout << v[i]; • if (i != (n-1)) cout << ", "; • else cout << ". " << endl; • }

  21. Statikus helyfoglalású tömb létrehozása és feltöltése A tömb egész számokat tartalmaz A tömb elemeinek számára adott felső korlát. • int v[100]; • int n; • cout << "Adja meg a tomb elemszamat!" << endl; • cin >> n; // Kell még egy ellenőrzés: 0<n<=100 • cout << "Adja meg a tomb elemeit!" << endl; • for(int i=0; i<n; i++){ • cout << i+1 << ". elem: "; • cin >> v[i]; • } n a tömb elemeinek száma. A tömb elemeinek beolvasása A tömb elemszámát a program futása közben olvassuk be és ellenőrizzük

  22. Dinamikus helyfoglalású tömb létrehozása és feltöltése A tömb egész számokat tartalmaz n a tömb elemeinek száma. • int* v; • int n; • cout << "Adja meg a tomb elemszamat!" << endl; • cin >> n; // Kell még egy ellenőrzés: n>0 • v = newint[n]; • cout << "Adja meg a tomb elemeit!" << endl; • for(int i=0; i<n; i++){ • cout << i+1 << ". elem: "; • cin >> v[i]; • } A tömb elemszámát a program futása közben olvassuk be és ellenőrizzük A tömb elemei számára lefoglal elegendő helyet A tömb elemeinek beolvasása

  23. new és delete int *v; 1 v =new int[4]; 2 v[0] v[1] v[2] v[3] delete[ ] v; 3 v[0] v[1] v[2] v[3] Amikor nincs rá tovább szükségünk, felszabadítjuk a lefoglalt területet.

  24. Teljes program • #include <iostream> • using namespace std; • int main() • { • //Adatok beolvasása • int* v; • int n; • cout << "Adja meg a tomb elemszamat!" << endl; • cin >> n; • if(n<=0){ • cout << "Hibás adat!" << endl; • char ch; cin >> ch; • exit(1); • } • v = newint[n];

  25. cout << "Adja meg a tomb elemeit!" << endl; • for(int i=0; i<n; i++){ • cout << i+1 << ". elem: "; • cin >> v[i]; • } • //Maximumkeresés • int ind, max ; • max=v[0]; ind = 0; • for(int i=1; i<n; i++){ • if(v[i]>max ){ • max = v[i]; • ind = i; • } • }

  26. //Eredmény megjelenítése • cout << "A tömb egyik maximális eleme: " • << max << "." << endl ; • cout << "Ez a tömb " << ind+1 << ". eleme." << endl; • delete[] v; • char ch; • cin >> ch; • return 0; • }

  27. Adatellenőrzés (egészek beolvasása) #include <string> • int i; • string str; • cin >> str; • i = atoi(str.c_str()); • bool hiba = (i == 0 && str != ”0”); • atoi() • atof()

  28. Do-while utasítás mag feltétel mag • do{ • mag • }while ( feltétel )

  29. Ellenőrzött adatbevitel • bool hiba; • do{ • cout << endl << ”Kérek egy természetes számot:”; • string str; • cin >> str; • n = atoi(str.c_str()); • if(hiba = ((n==0 && str!=”0”) || n<0)) • cout << ”Hibás adat!”; • }while(hiba);

  30. Program végtelenítése • do{ • // Beolvasás • // Főprogram • // Kiíratás • cout << endl << ”Futtassam újra? (I/N)”; • Char ch; cin >> ch; • }while(ch!=’n’ && ch!=’N’)

  31. Vége

More Related