Upload
brennan-matthews
View
50
Download
4
Embed Size (px)
DESCRIPTION
Maximumkeresés tömbökben. Elemi alkalmazások fejlesztése I. Készítette: Gregorics Tibor: [email protected] Szabóné Nacsa Rozália: [email protected] Lektorálta: Szendrei Rudolf: [email protected]. 4. 7. 0. 9. 6. 7. 9. 4. Feladat. Keressük meg egy tömb valamely maximális elemét. - PowerPoint PPT Presentation
Citation preview
Készítette:Gregorics Tibor: [email protected]óné Nacsa Rozália: [email protected]
Lektorálta: Szendrei Rudolf: [email protected]
Maximumkeresés tömbökbenMaximumkeresés tömbökben
Keressük meg egy tömb valamely maximális elemét.Az eredményt írjuk ki a szabványos outputra.
Keressük meg egy tömb valamely maximális elemét.Az eredményt írjuk ki a szabványos outputra.
Maximális elemek Maximális elemek
4 7 0 9 6 7 9 4
FeladatFeladat
MegoldásMegoldás
Adatok előkészítéseAdatok előkészítése1
3
Itt biztosítjuk, hogy a feladat elvégzéséhez szükséges adatok megfelelő formában álljanak
rendelkezésünkre .
Itt biztosítjuk, hogy a feladat elvégzéséhez szükséges adatok megfelelő formában álljanak
rendelkezésünkre .
Absztrakt megoldó programAbsztrakt megoldó program
Eredmény megjelenítéseEredmény megjelenítése
A számítások elvégzéséhez felhasználunk egy maximunkeresést.
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.
Itt írjuk ki a maximális elem értékét és azt, hogy ez a tömb
hányadik eleme.
2
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ó
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: Maximumkeresés tétele: állapottérállapottér
Maximumkeresés tétele: Maximumkeresés tétele: előfeltételelőfeltétel
m n m n
Maximumkeresés tétele: Maximumkeresés tétele: struktogramstruktogram
max, ind, i := f(m), m, m+1
max < f(i)
max, ind:=f(i), i
SKIP
i n
i:=i+1
max, ind, i := v.lov, v.lob, v.lob+1
max < v[i]
max, ind:=v[i], i
SKIP
i v.hib
i:=i+1
Maximumkeresés tétele: Maximumkeresés tétele: tömbökretömbökre
i++ i = i+1i-- i = i-1i+= a i = i+ai-= a i = i-ai*= a i = i*ai/= a i = i/ai%= a i = i%a
i = j = k; j = k;i = k;
j = i++; j = i; i = i+1; j = ++i; j = i = i+1;
mag
feltétel
for(program_1;feltétel;program_2){mag
}
program_1
program_2
for(int i=0;i<n;i++){mag
}
ciklusváltozó
for(int i=0;i<n;i++) utasítás;
4 7 0 9 6 7 9 4
Az első elem indexe: 0.Az első elem indexe: 0. Az utoló elem indexe: n-1.Az utoló elem indexe: n-1.
v[0]v[0] v[n-1]v[n-1]v[3]v[3]
v.lob 0 v.hib n-1 v.lov v[0]
4 7 0 9 6 7 9 4
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.
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!!!!!TILOS ILYET CSINÁLNI!!!!!
v[-1] v[n]
Index túlcsordulásIndex túlcsordulás
int main(){ //Adatok beolvasása
//Maximumkeresés
//Eredmény megjelenítése
return 0;}
int main(){ //Adatok beolvasása
//Maximumkeresés
//Eredmény megjelenítése
return 0;}
1
2
3
visszatérési értékvisszatérési érték
int main(){ //Adatok beolvasása
//Maximumkeresés
//Eredmény megjelenítése
return 0;}
int main(){ //Adatok beolvasása
//Maximumkeresés
//Eredmény megjelenítése
return 0;}
1
2
3
2
1
max, ind, i := v.lov, v.lob, v.lob+1
max < v[i]
max, ind:=v[i], i
SKIP
i v.hib
i:=i+1
//Maximumkeresésint ind, max ;max=v[0]; ind = 0; for(int i=1; i<n; i++){
if( v[i]>max ){max = v[i]; ind = i;
}}
//Maximumkeresésint ind, max ;max=v[0]; ind = 0; for(int i=1; i<n; i++){
if( v[i]>max ){max = v[i]; ind = i;
}}
int main(){ //Adatok beolvasása
//Maximumkeresés
//Eredmény megjelenítése
return 0;}
2
33
2
1
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;
int main(){ //Adatok beolvasása
//Maximumkeresés
//Eredmény megjelenítése
return 0;}
int main(){ //Adatok beolvasása
//Maximumkeresés
//Eredmény megjelenítése
return 0;}
1
2
3
1
2
3
konstans tömb
statikus helyfoglalású tömb
dinamikus helyfoglalású tömb
konstans tömb
statikus helyfoglalású tömb
dinamikus helyfoglalású tömb
const int v[] = {4, 7, 0, 9, 6, 7, 9, 4};
const int n = sizeof(v)/sizeof(v[0]);
A tömb egész számokat tartalmaz
A tömb egész számokat tartalmaz
A tömb elemeinek értékét a program futása közben nem
változtatjuk meg.
A tömb elemeinek értékét a program futása közben nem
változtatjuk meg.
n a tömb elemeinek száma.
n a tömb elemeinek száma.
A tömb elemszámát a program futása közben nem változtatjuk
meg.
A tömb elemszámát a program futása közben nem változtatjuk
meg.
Konstans tömb létrehozásaKonstans tömb létrehozása
implicit konverzióimplicit konverzió
cout << " A tömb elemei: ";for (int i=0; i<n; i++){
cout << v[i];if (i != (n-1)) cout << ", ";else cout << ". " << endl;
}
cout << " A tömb elemei: ";for (int i=0; i<n; i++){
cout << v[i];if (i != (n-1)) cout << ", ";else cout << ". " << endl;
}
A tömb elemei: 4,7,0,9,6,7,9.
A tömb megjelenítéseA tömb megjelenítése
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];
}
A tömb egész számokat tartalmaz
A tömb egész számokat tartalmaz
A tömb elemeinek számára adott felső korlát.
A tömb elemeinek számára adott felső korlát.
n a tömb elemeinek száma.
n a tömb elemeinek száma.
A tömb elemszámát a program futása közben olvassuk be és
ellenőrizzük
A tömb elemszámát a program futása közben olvassuk be és
ellenőrizzük
Statikus helyfoglalású tömb létrehozása és feltöltéseStatikus helyfoglalású tömb létrehozása és feltöltése
A tömb elemeinek beolvasása
A tömb elemeinek beolvasása
int* v;int n;
cout << "Adja meg a tomb elemszamat!" << endl;cin >> n; // Kell még egy ellenőrzés: n>0
v = new int[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 egész számokat tartalmaz
A tömb egész számokat tartalmaz
A tömb elemei számára lefoglal elegendő helyet
A tömb elemei számára lefoglal elegendő helyet
n a tömb elemeinek száma.
n a tömb elemeinek száma.
A tömb elemszámát a program futása közben olvassuk be és
ellenőrizzük
A tömb elemszámát a program futása közben olvassuk be és
ellenőrizzük
Dinamikus helyfoglalású tömb létrehozása és feltöltéseDinamikus helyfoglalású tömb létrehozása és feltöltése
A tömb elemeinek beolvasása
A tömb elemeinek beolvasása
new és deletenew és delete
v =new int[4];v =new int[4];
v[0] v[1] v[2] v[3]
int *v;int *v;
delete[ ] v;delete[ ] v;
v[0] v[1] v[2] v[3]Amikor nincs rá tovább
szükségünk, felszabadítjuk a lefoglalt területet.
Amikor nincs rá tovább szükségünk, felszabadítjuk
a lefoglalt területet.
1
2
3
#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 = new int[n];
#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 = new int[n];
cout << "Adja meg a tomb elemeit!" << endl;for(int i=0; i<n; i++){
cout << i+1 << ". elem: ";cin >> v[i];
}
//Maximumkeresésint ind, max ;max=v[0]; ind = 0; for(int i=1; i<n; i++){
if( v[i]>max ){max = v[i]; ind = i;
}}
cout << "Adja meg a tomb elemeit!" << endl;for(int i=0; i<n; i++){
cout << i+1 << ". elem: ";cin >> v[i];
}
//Maximumkeresésint ind, max ;max=v[0]; ind = 0; for(int i=1; i<n; i++){
if( v[i]>max ){max = v[i]; ind = i;
}}
//Eredmény megjelenítésecout << "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;}
//Eredmény megjelenítésecout << "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;}
int i;
string str;
cin >> str;
i = atoi(str.c_str());
bool hiba = (i == 0 && str != ”0”);
int i;
string str;
cin >> str;
i = atoi(str.c_str());
bool hiba = (i == 0 && str != ”0”);
Adatellenőrzés (egészek beolvasása)Adatellenőrzés (egészek beolvasása)
#include <string>#include <string>
atoi()atof()
mag
feltétel
do{mag
}while ( feltétel )
mag
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);
do{// Beolvasás
// Főprogram
// Kiíratás
cout << endl << ”Futtassam újra? (I/N) ”; Char ch; cin >> ch;
}while(ch!=’n’ && ch!=’N’)