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.









