Prvočísla
1. Prvocisla
1.2. C#
Načtení počtu prvočísel v řadě do celočíselné proměnné pocetCisel ve statické hlavní metodě je realizováno pomocí příkazu (metody s výstupními parametry) TryParse - viz Kód 1. Pokud uživatel zadal počet menší než 0, je vypsána chybová hláška a hlavní metoda je ukončena pomocí příkazu return (tzn. ukončení programu). Je také zapotřebí inicializovat počet nalezených čísel n, který je na začátku nulový. Dále musí být inicializována hodnota v proměnné i (čítač), do které budeme ukládat testované číslo, které může být prvočíslem, nebo nikoliv.
V cyklu while probíhá testování, zda již byl vypsán požadovaný počet prvočísel. Testování, zda je aktuální číslo prvočíslem, probíhá pomocí volání metody s logickým návratem Prvocislo. Této metodě je předáno aktuální testované číslo uložené ve skutečném parametru i. Pokud návrat metody je true, je testované číslo prvočíslem a musí být zvýšen počet nalezených prvočísel o hodnotu 1 (inkrementace n++;). Toto číslo musí také být konvertováno na číslici a následně zapsáno do řady již nalezených čísel, která jsou zapsána v proměnné vystup. Jednotlivé číslice jsou od sebe odděleny čárkou, proto se uvnitř těla cyklu nalézá ještě další podmínka testující, zda se nenacházíme u posledního prvočísla v řadě, u kterého se již žádná čárka připojovat nebude. Na konci iterace je zvýšeno testované číslo o hodnotu 1 (inkrementace i++;)
V hlavní statické metodě je na konci těla metody vypsána výsledná řada prvočísel včetně úvodního textu.
static void Main(string[] args) { /* Deklarace: 'pocetCisel' ... počet prvočísel, která mají být vypsána; * 'n' ... počet nalezených prvočísel; 'i' ... testované číslo * na prvočíslo (čítač); 'vystup' ... textová proměnná, do které * budeme ukládat výsledek */ int pocetCisel, n, i; string vystup; // Inicializace - počet nalezených čísel n = 0; // Inicializace - číslo testované na prvočíslo i = 2; vystup = ""; Console.WriteLine("Výpis prvních n prvočísel"); Console.Write("Zadejte počet vypsaných prvočísel: "); // Načtení počtu vypisovaných prvočísel int.TryParse(Console.ReadLine(), out pocetCisel); // Test na zadání záporného počtu vypísovaných prvočísel if (pocetCisel < 0) { Console.WriteLine("Zadejte platnou kladnou celočíselnou hodnotu pro počet čísel."); // Ukončení metody (programu) return; } // Cyklus - pokud platí, že je vypsáno méně než specifikovaný počet prvočísel while (n < pocetCisel) { // Pokud návrat zavolané funkce testu na prvočíslo u testovaného čísla je pravda if (Prvocislo(i)) { // Zvýšení hodnoty počtu nalezených prvočísel o 1 n++; // Připojení číslice (testovaného čísla konvertovaného na text) k předchozím vystup += i.ToString(); // Pokud není vypsán požadovaný počet prvočísel if (n < pocetCisel) { // Připoj za číslo čárku vystup += ", "; } } // Nové testované číslo, které je o 1 vyšší než předchozí i++; } // Výpis požadovaného počtu prvočísel Console.WriteLine("Prvočísla: " + vystup); // Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); }
Kód 1: Program Prvocisla - deklarace hlavní statické metody Main
V deklaraci metody Prvocislo s logickým návratem (datový typ bool) vidíme, že ještě před testováním formálního parametru n je provedena inicializace u obou proměnných - na začátku prohlásíme testované číslo prvočíslem a prvním dělitelem je číslo 2 - viz Kód 2.
Před cyklem budeme definovat podmínku, zda předané číslo je rovno 1. Pokud ano, předané číslo (tj. 1) není prvočíslem, tzn., že proměnná b nabyde hodnoty false.
V cyklu while je provedeno testování na dělení beze zbytku, které bylo popsáno již v předchozí kapitole. Pokud bylo číslo dělitelné beze zbytku alespoň nějakým dělitelem, toto číslo není prvočíslem (b = false;).
// Metoda s návratem - návrat, zda je předané číslo prvočíslo (true), nebo nikoliv (false) static bool Prvocislo(int n) { /* Deklarace (inicializace): 'b' ... informace, zda je testované (předané) číslo * prvočíslem (true - je prvočíslem); 'i' ... dělitel (čítač) */ bool b = true; int i = 2; // Pokud je předané číslo rovné 1, pak... if (n == 1) // Předané číslo 1 není prvočíslo b = false; // Cyklus - dokud platí, že testované číslo je prvočíslo a čítač je menší než testované číslo while (b == true && i < n) { // Pokud testované číslo je dělitelné beze zbytku if (n % i == 0) { // Testované číslo není prvočíslo b = false; } // Inkrementace i++; } // Výstupem metody je informace, která je uložena v logické proměnné return b; }
Kód 2: Deklarace statické metody s logickým návratem s názvem Prvocislo