Prvočísla
Prv, než prejdeme na využitie cyklu for v reťazcoch, vám chcem ukázať zaujímavý algoritmus, ktorý sa vám môže hodiť.
Prvočísla sú také prirodzené čísla, ktoré sú deliteľné bez zvyšku len 1 a zároveň sebou samým. Číslo 1 ale nie je prvočíslo. Prvočíslom môžu byť len nepárne čísla, pretože párne sú deliteľné 2. Jedine číslo 2 je výnimkou a je prvočíslom.
Príklad prvočísla je číslo 3. Vieme ho vydeliť bez zvyšku len 1 a 3. Číslo 4 vieme vydeliť 2, čiže nie je prvočíslo. Vytvoríme si program, ktorý nám nájde prvočísla.
1. príklad: Program na testovanie, čí číslo je prvočíslom
#include <iostream> // hlavičkové súbory #include <cmath> using namespace std; // priestor mien int main() // hlavná funkcia main { int n; //deklarácie premenných cout << "Zadajte cislo na otestovanie, ci je prvocislom: "; // výpis cin >> n; // vstup if (n == 1) // podmienka { cout << "Cislo "<<n<<" nie je prvocislo!\n"; return 0; } if (n == 2) { cout << "Cislo "<<n<<" je prvocislo!\n"; return 0; } if (n < 1) { cout << "Zly vstup!\n"; return 0; } if (n % 2 == 0) { cout << "Cislo "<<n<<" nie je prvocislom!\n"; return 0; } int hranica = (int) sqrt(n); for (int i = 3; i <= hranica; i += 2) { if (n % i == 0) { cout << "Cislo "<<n<<" nie je prvocislom!\n"; return 0; } } cout << "Cislo "<<n<<" je prvocislom!\n"; return 0; }
Výsledok:
Zadajte cislo na otestovanie, ci je prvocislom: 5 Cislo 5 je prvocislom!
Rozbor programu: Prvý krok je zo strany užívateľa, ktorý zadá číslo na otestovanie, čí je prvočíslo. V druhom kroku ošetríme vstup. Ak je vstup 1, nie je prvočíslo. Ak menšie ako 1, ide o zlý vstup. Ošetríme aj číslo 2, pretože je to jediné párne číslo, ktoré je zároveň prvočíslo. Algoritmus samotný pracuje len s nepárnymi číslami. V treťom kroku určíme vytvoríme odmocninu z vstupného čísla. Následne pomocou cyklu rozhodneme, či je dané číslo prvočíslo.
Cyklus for a reťazce
Podobne ako pole, i s reťazcami vieme pracovať pomocou for. Pozor davajte na ukončovací znak pri reťazcoch. Tak poďme na príklady
2. príklad: Jednoduchý príklad na reťazec s cyklom for
#include <iostream> #include <string> using namespace std; int main() { string name = "supermoon"; for (int i = 0; i < 9; i++) { cout <<name[i]; } return 0; }
Výsledok:
supermoon
Rozbor programu: Súhlasím, je to príklad ktorý môže byť hodený do koša. Predsa string vieme vypísať bez problémov i bez cyklu. Je to len ukážka, že pole či reťazec, práca s nimi je rovnaká. Až na malú drobnosť pri reťazci, ktorý má ukončovací znak.
3. príklad: Napíšeme reťazec odzadu
#include <iostream> #include <string> using namespace std; int main() { string name = "supermoon"; for (int i = 8; i >= 0; i--) { cout <<name[i]; } cout << "\n"; return 0; }
Výsledok
noomrepus
4. príklad: Na koniec ešte jeden príklad
#include <iostream> #include <string> using namespace std; int main() { string name = "supermoon"; for (int i = 0; i < 3; i++) { cout << name[i+3]; } cout << "\n"; return 0; }
Výsledok:
erm
Rozbor programu:
Čo sme urobili v programe? My sme posunuli o 3 miest v reťazci. Takto jednoducho sa dajú manipulovať s reťazcami. Ale pozor na hranice reťazca (alebo poľa). Veľmi rýchlo sa dá vybočiť mimo priestor určenému poľu či reťazcu.
Nabudúce si ukážeme varianty cyklu while.