Rozklad na prvočinitele Ondřej Slavíček 3. prosince 2010 1
Obsah 1 Příručka k programu 3 1.1 funkce main()............................. 3 1.2 funkce hlavnifunkce()........................ 3 1.3 funkce naplnenipole()........................ 3 1.4 funkce nactenicisla()......................... 4 1.5 funkce rozkladnaprvocisla()..................... 4 1.6 funkce max()............................. 6 1.7 funkce vypocetmocnitele()...................... 6 1.8 funkce vypisnaobrazovku()..................... 11 2 Vývojové prostředí 11 2.1 Microsoft Visual studio....................... 11 3 Autor 13 4 Literatura 14 2
1 Příručka k programu 1.1 funkce main() void main() hlavnifunkce(); cin.get(); cin.get(); Funkce main() je pro běh programu nezbytná. Program ji vyžaduje a neumí bez ní pracovat. Pro pochopení programu se zde objevuje jen příkaz pro volání fuknce hlavnifunkce(). Zařazení příkazu cin.get() do kódu nám pozastaví program a umožní přečtení výstupu na obrazovce. 1.2 funkce hlavnifunkce() void hlavnifunkce() hlavicka(); naplnenipolenulami( mocnitel ); naplnenipolenulami( delitel ); nactenicisla(); rozkladnaprvocisla( cislo ); maximumpole( delitel ); vypocetmocnitele( delitel ); vypisnaobrazovku( cislotemp, mocnitel, maximum); pata(); Funkce s názvem hlavnifunkce() je takovou, jak už název napovídá, hlavní funkcí. Má za úkol volat všechny ostatní funkce. 1.3 funkce naplnenipole() int naplnenipolenulami( int pole[] ) for( i = 0; i < VELIKOST_POLE_PRVOCISEL; i++ ) pole[i] = 0; return pole[velikost_pole_prvocisel]; 3
Funkce naplnenipole() naplní pole, které se nachází uvnitř příkazu, nulami. 1.4 funkce nactenicisla() int nactenicisla() cout << endl << "...cislo v rozmezi od 2 do 10 000: "; cin >> cislo; cislotemp = cislo; return cislo, cislotemp; Funkce nactenicisla() očekává vstup z klávesnice, který uloží do proměnné cislo. Cislotemp slouží k zálohování zadaného čísla. 1.5 funkce rozkladnaprvocisla() Tato funkce rozkládá číslo na prvočísla, jak můžeme vidět na obrázku 1 na straně č.5. Funkce je jedna ze stěžejních, rozeberme si ji tedy detailně: int rozkladnaprvocisla( int hodnota ) j = 0; for( i = 0; i < VELIKOST POLE PRVOCISEL; ) if( hodnota % poleprvocisel[i] == 0 ) hodnota = hodnota / poleprvocisel[i]; delitel[j] = poleprvocisel[i]; j++; else i++; return delitel[velikost_pole_prvocisel]; Část kódu s podmínkou: 4
Obrázek 1: Rozklad na prvočísla if( hodnota % poleprvocisel[i] == 0 ) hodnota = hodnota / poleprvocisel[i]; delitel[j] = poleprvocisel[i]; j++; Pokud zbytek po dělení čísla cislo číslem na pozici i v poli poleprvocisel[] je roven 0, proměnné cislo se přiřadí výsledek dělení. Do pole delitel[] se na pozici j zapíše dané prvočíslo. Index j se zvýší o 1. 1.6 funkce max() int maximumpole( int pole[] ) for( i = 0; i < VELIKOST_POLE_PRVOCISEL; i++ ) if( pole[i] > maximum ) maximum = pole[i]; return maximum; Funkce max() má za úkol zjistit největší číslo v poli[], jak můžeme vidět na obrázku 2 na straně č.7. Díky cyklu for probíhá celá funkce i krát. Podmínka if zjišt uje, zda je číslo na pozici i v poli[] větší než proměnná maximum. Pokud 5
Obrázek 2: Maximum pole tomu tak je, číslo na pozici i v poli[] se zapíše do proměnné maximum. 1.7 funkce vypocetmocnitele() Funkce vypocetmocnitele() slouží k výpočtu mocnitele daných prvočísel, jak můžeme vidět na obrázku 3 na straně č.10. Funkce je druhou velice důležitou funkcí. Rozeberme si ji tedy rovněž podrobně: 6
int vypocetmocnitele( int pole[] ) for( i = 0; i < VELIKOST_POLE_PRVOCISEL; i++ ) if( i == 0 ) j = 0; jtemp = j; for( j; ; j++ ) if( pole[j] == poleprvocisel[i] ) mocnitel[i] += 1; continue; else j = jtemp + mocnitel[i]; break; return mocnitel[velikost_pole_prvocisel]; Část kódu pro nastavení hodnoty proměnné j : for( i = 0; i < VELIKOST_POLE_PRVOCISEL; i++ ) if( i == 0 ) j = 0; jtemp = j; 7
Obrázek 3: Umocnění int vypocetmocnitele( int pole[] ) for( i = 0; i < VELIKOST POLE PRVOCISEL; i++ )... for( j; ; j++ ) if( pole[j] == poleprvocisel[i] ) mocnitel[i] += 1; continue; else j = jtemp + mocnitel[i]; break; return mocnitel[velikost_pole_prvocisel]; V případě, že je podmínka splněna, zvýší se číslo na pozici i v poli mocnitel [] o 1 a běh programu skočí na začátek druhého příkazu for. Když podmínka splněna není, proměnná j se zvýší o číslo na pozici i v poli mocnitel []. Běh programu pokračuje na začátku prvního příkazu for. 8
Obrázek 4: Výsledné zobrazení 1.8 funkce vypisnaobrazovku() void vypisnaobrazovku ( int zalohacisla, int polemocnitelu[], int maximum ) cout << endl; cout << zalohacisla << " = "; for( i = 0; i < VELIKOST_POLE_PRVOCISEL; i++ ) if( polemocnitelu[i]!= 0 ) if( poleprvocisel[i] == maximum ) cout << poleprvocisel[i] << "^" << polemocnitelu[i] <<endl else cout << poleprvocisel[i] << "^" << polemocnitelu[i] << "*" Funkce vypisnaobrazovku(), jak její název napovídá, vypisuje, jak můžete vidět na obrázku 4 na straně č.12, vše vypočítané na obrazovku v požadovaném formátu. Na obrazovku nejsou pochopitelně vypisovány prvočísla umocněné na 0. Podmínka if slouží jen k tomu, aby se za posledním číslem výpisu neobjevovala hvězdička ( * ). 9
2 Vývojové prostředí 2.1 Microsoft Visual studio Microsoft Visual Studio je vývojové prostředí (IDE) od Microsoftu. Může být použito pro vývoj konzolových aplikací a aplikací s grafickým rozhraním spolu s Windows Forms aplikacemi, webovými stránkami, webovými aplikacemi a webovými službami jak ve strojovém kódu, tak ve spravovaném kódu na platformách Microsoft Windows, Windows Mobile, Windows CE,.NET,.NET Compact Framework a Microsoft Silverlight. Visual Studio obsahuje editor kódu podporující IntelliSense a refaktorování. Integrovaný debugger pracuje jak na úrovni kódu, tak na úrovni stroje. Další vestavěné nástroje zahrnují designer formulářů pro tvorbu GUI aplikací, designer webu, tříd a databázových schémat. Je možné přidávat rozšíření, což vylepšuje funkčnost na téměř každé úrovni - od přidání podpory pro verzovací systémy (jako Subversion a Visual SourceSafe) do přidání nových nástrojů jako editory a vizuální designery pro jazyky specifické pro obor nebo nástroje pro další aspekty návrhu programu (jako klient Team Foundation Serveru: Team Explorer). Visual Studio podporuje jazyky prostřednictvím jazykových služeb, což umožňuje, aby editor kódu a debugger podporoval jakýkoliv programovací jazyk. Mezi vestavěné jazyky patří C/C++ (použitím Visual C++), VB.NET (použitím Visual Basic.NET) a C# (použitím Visual C#). Podpora dalších jazyků jako Chrome, F#, Python a Ruby spolu s ostatními může být přidána jazykovými službami, které musí být nainstalovány zvlášt. Také je podporováno XML/XSLT, HTML/XHTML, JavaScript a CSS. Existují i verze Visual Studia pro určitý jazyk, které uživateli poskytují omezenější jazykové služby. Tyto individuální balíčky jsou Microsoft Visual Basic, Visual J#, Visual C# a Visual C++. 3 Autor Ondřej Slavíček krycí jméno SLA0065 narozen v červenci 1990 student VŠB-TU Ostrava, fakulta FEI, obor B2647 záliby SPORT programování filmy matematika více o autorovi zde 10
4 Literatura Reference [1] Základy jazyka L A TEX http://voho.cz/wiki/poznamky-latex/ [2] Jak na L A TEX http://www.root.cz/serialy/jak-na-latex/ [3] Ne příliš stručný úvod do systému L A TEX http://www.root.cz/knihy/ne-prilis-strucny-uvod-do-systemu-latex-2e/ 11