Diskuze: Vyjímka v podmínce
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zdravím, řekl bych, že ne tak přesně jak to říkáš, pokud máš zavedenou metodu co vrací největší číslo z pole, tak těžko vytáhne jen tak sama od sebe druhé nejvyšší ať jí dáš co chceš Budeš muset sáhnout do té metody a upravit ji samotnou.
Pokud myslíš vynecháním jen to, že ti to nevrátí z pole nic, tak si můžeš vytvořit proměnou kam uložíš to co jsi vytáhl a do podmínky dáš, že když se vytáhnutí největšího čísla rovná tomu co jsi vytáhnul předtím (v té proměnné) tak nevrátí nic
Samozřejmě že to jde a nemusíš být omezen pouze na jednu hodnotu - hodnotu největšího prvku. Co třeba vytvořit druhé pole o stejné velikosti, kam si budeš zapisovat příznak, že hodnota už byla vyhodnocena a tento příznak kontrolovat při procházení pole, ze kterého hledáš aktuálně nejvyšší prvek? Nebo lépe příznak nahradit přímo hodnotou představující kolikátý že to je nejvyšší prvek. Je třeba si ale uvědomit, že každou další pozici získáš opětovným procházením celého pole a počet těchto procházení si musíš poznamenávat. Půjdeš-li hodně "hluboko", je třeba zvážit, zda-li už se Ti nevyplatí rovnou celé pole setřídit. To vše je ale stále pouze příznak. Budeš-li chtít vyhledat v poli prvek, který je n-tý nejvyšší v pořadí, musel bys stále sekvenčně procházet pole příznaků a porovnávat index pole. Prvek může být na začátku ale i u konce a nebo také jeho pozici nemusíš vůbec zjistit. Zde pak si pole naplňuješ hodnotami postupně nebo elegantněji, pole si postupně naplňuješ ukazateli na konkrétní prvek z důvodu rychlosti, neboť prvkem může být komplexní datový typ jako třeba struktura. Shrnutí: Index v poli příznaků Ti dá informaci o tom, kolikátý v pořadí dle velikosti že to daný prvek je. Index v poli ukazatelů Tě odkazuje na prvek, který je právě n-tý nejvyšší v pořadí dle velikosti.
Já bych šel přes Sort() a k prvkům přistupoval podle
indexů
nejvyšší hodnota bude na [0],druhá nejvyšší na [1] atd
Jelikož se nezmiňuješ o tom, o co se vlasně pokoušíš, tak můžu jen
odhadovat, že se snažíš setřídit pole podle hodnot od nejvyšší k
nejnižší.
Takže klasická začátečnická chyba - vymýšlí se "kolo".
s polem se dá dělat spousta věcí za pomocí k tomu určených metod
nemůže to být ale obyčejné pole - musí být o něco chytřejší a to v
C++ reprezentuje vector a list
vyhrabal jsem pro ilustraci kód, kde jsem si s vectorem trochu hrál
int main()
{
int num =0;
vector<string> zvirata = { "pes","kocka","zajic","andulka","jelen" };
vector<string> zvirata_puvodni = zvirata;
vector<int> hodnoty = { 46, 28, -333, 13,12, 193, 132, -114 };
vector<int> hodnoty_kopie = hodnoty;
//serazeni a vypis zvirat
sort(zvirata.begin(), zvirata.end());
for each (string str in zvirata)cout << str << " ";
cout << "\n stav pred upravami:\n";
for each (string str in zvirata_puvodni)cout << str << " ";
//serazeni a vypis hodnot
cout <<"\n\n vypis sestupne:\n";
sort(hodnoty.rbegin(), hodnoty.rend());
for each (int num in hodnoty)cout << num << " ";
cout << "\n vypis vzestupne:\n";
sort(hodnoty.begin(), hodnoty.end());
for each (int num in hodnoty)cout << num << " ";
//pridani cisla
cout << "\n pridej cislo:";
cin >> num;
hodnoty.push_back(num);
cout << "\n novy stav:\n";
for each (int num in hodnoty)cout << num << " ";
//zjisteni hodnoty na urcenem indexu
cout << "\n vem hodnotu z indexu:";
cin >> num;
//validace zadaneho cisla
if(num>hodnoty.size()-1)cout << "\n out of range - priste lepe :)\n";
else cout << "\n na indexu:"<<num<<"je cislo "<<hodnoty.at(num)<<"\n";
//smazani urceneho poctu cisel
cout << "\n pocet cisel ke smazani:";
cin >> num;
hodnoty._Pop_back_n(num);
cout << "\n novy stav:\n";
for each (int num in hodnoty)cout << num << " ";
cout << "\n stav pred upravami:\n";
for each (int num in hodnoty_kopie)cout << num << " ";
while (1);
}
snad je z kódu jasné, co která metoda třídy vector dělá
Zobrazeno 5 zpráv z 5.