Rozklad na prvoˇcinitele Ondˇrej Slav´ıˇcek 3. prosince 2010
1
Obsah 1 Pˇ r´ıruˇ cka k programu 1.1 funkce main() . . . . . . . . 1.2 funkce hlavniFunkce() . . . 1.3 funkce naplneniPole() . . . 1.4 funkce nacteniCisla() . . . . 1.5 funkce rozkladNaPrvocisla() 1.6 funkce max() . . . . . . . . 1.7 funkce vypocetMocnitele() . 1.8 funkce vypisNaObrazovku() 2 V´ yvojov´ e prostˇ red´ı 2.1 Microsoft Visual studio
. . . . . . . .
3 3 3 3 4 4 6 6 11
. . . . . . . . . . . . . . . . . . . . . . .
11 11
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
3 Autor
13
4 Literatura
14
2
1 1.1
Pˇ r´ıruˇ cka k programu funkce main()
void main() { hlavniFunkce(); cin.get(); cin.get(); } Funkce main() je pro bˇeh programu nezbytn´ a. Program ji vyˇzaduje a neum´ı bez n´ı pracovat. Pro pochopen´ı programu se zde objevuje jen pˇr´ıkaz pro vol´an´ı fuknce hlavniFunkce(). Zaˇrazen´ı pˇr´ıkazu cin.get() do k´odu n´am pozastav´ı program a umoˇzn´ı pˇreˇcten´ı v´ ystupu 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´ azvem hlavniFunkce() je takovou, jak uˇz n´azev napov´ıd´a, hlavn´ı funkc´ı. M´ a za u ´kol volat vˇsechny 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´e se nach´az´ı uvnitˇr pˇr´ı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ˇcek´ av´ a vstup z kl´avesnice, kter´ y uloˇz´ı do promˇenn´e cislo. Cislotemp slouˇz´ı k z´ alohov´ an´ı zadan´eho ˇc´ısla.
1.5
funkce rozkladNaPrvocisla()
Tato funkce rozkl´ ad´ a ˇc´ıslo na prvoˇc´ısla, jak m˚ uˇzeme vidˇet na obr´azku 1 na stranˇe ˇc.5. Funkce je jedna ze stˇ eˇ zejn´ıch, rozeberme si ji tedy detailnˇe:
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]; } ˇ ast k´ C´ odu s podm´ınkou:
4
Obr´ azek 1: Rozklad na prvoˇc´ısla
if( hodnota % polePrvocisel[i] == 0 ) { hodnota = hodnota / polePrvocisel[i]; delitel[j] = polePrvocisel[i]; j++; } Pokud zbytek po dˇelen´ı ˇc´ısla cislo ˇc´ıslem na pozici i v poli polePrvocisel[] je roven 0, promˇenn´e cislo se pˇriˇrad´ı v´ ysledek dˇelen´ı. Do pole delitel[] se na pozici j zap´ıˇse dan´e prvoˇc´ıslo. Index j se zv´ yˇs´ı 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´ a za u ´kol zjistit nejvˇetˇs´ı ˇc´ıslo v poli[], jak m˚ uˇzeme vidˇet na obr´ azku 2 na stranˇe ˇc.7. D´ıky cyklu for prob´ıh´a cel´a funkce i kr´at. Podm´ınka if zjiˇst’uje, zda je ˇc´ıslo na pozici i v poli[] vˇetˇs´ı neˇz promˇenn´a maximum. Pokud 5
Obr´ azek 2: Maximum pole tomu tak je, ˇc´ıslo na pozici i v poli[] se zap´ıˇse do promˇenn´e maximum.
1.7
funkce vypocetMocnitele()
Funkce vypocetMocnitele() slouˇz´ı k v´ ypoˇctu mocnitele dan´ ych prvoˇc´ısel, jak m˚ uˇzeme vidˇet na obr´ azku 3 na stranˇe ˇc.10. Funkce je druhou velice d˚ uleˇ zitou funkc´ı. Rozeberme si ji tedy rovnˇeˇz podrobnˇe:
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]; } ˇ ast k´ C´ odu pro nastaven´ı hodnoty promˇenn´e j : for( i = 0; i < VELIKOST_POLE_PRVOCISEL; i++ ) { if( i == 0 ) { j = 0; } jtemp = j; }
7
Obr´azek 3: Umocnˇen´ı
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ˇr´ıpadˇe, ˇze je podm´ınka splnˇena, zv´ yˇs´ı se ˇc´ıslo na pozici i v poli mocnitel [] o 1 a bˇeh programu skoˇc´ı na zaˇc´atek druh´eho pˇr´ıkazu for. Kdyˇz podm´ınka splnˇena nen´ı, promˇenn´ a j se zv´ yˇs´ı o ˇc´ıslo na pozici i v poli mocnitel []. Bˇeh programu pokraˇcuje na zaˇc´ atku prvn´ıho pˇr´ıkazu for.
8
Obr´ azek 4: V´ ysledn´e 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´azev napov´ıd´a, vypisuje, jak m˚ uˇzete vidˇet na obr´ azku 4 na stranˇe ˇc.12, vˇse vypoˇc´ıtan´e na obrazovku v poˇzadovan´em form´ atu. Na obrazovku nejsou pochopitelnˇe vypisov´any prvoˇc´ısla umocnˇen´e na 0. Podm´ınka if slouˇz´ı jen k tomu, aby se za posledn´ım ˇc´ıslem v´ ypisu neobjevovala hvˇezdiˇcka (”*”).
9
2
V´ yvojov´ e prostˇ red´ı
2.1
Microsoft Visual studio
Microsoft Visual Studio je v´ yvojov´e prostˇred´ı (IDE) od Microsoftu. M˚ uˇze b´ yt pouˇzito pro v´ yvoj konzolov´ ych aplikac´ı a aplikac´ı s grafick´ ym rozhran´ım spolu s Windows Forms aplikacemi, webov´ ymi str´ankami, webov´ ymi aplikacemi a webov´ ymi sluˇzbami jak ve strojov´em k´odu, tak ve spravovan´em k´odu na platform´ ach Microsoft Windows, Windows Mobile, Windows CE, .NET, .NET Compact Framework a Microsoft Silverlight. Visual Studio obsahuje editor k´odu podporuj´ıc´ı IntelliSense a refaktorov´an´ı. Integrovan´ y debugger pracuje jak na u ´rovni k´odu, tak na u ´rovni stroje. Dalˇs´ı vestavˇen´e n´ astroje zahrnuj´ı designer formul´aˇr˚ u pro tvorbu GUI aplikac´ı, designer webu, tˇr´ıd a datab´ azov´ ych sch´emat. Je moˇzn´e pˇrid´avat rozˇs´ıˇren´ı, coˇz vylepˇsuje funkˇcnost na t´emˇeˇr kaˇzd´e u ´rovni - od pˇrid´an´ı podpory pro verzovac´ı syst´emy (jako Subversion a Visual SourceSafe) do pˇrid´an´ı nov´ ych n´astroj˚ u jako editory a vizu´ aln´ı designery pro jazyky specifick´e pro obor nebo n´astroje pro dalˇs´ı aspekty n´ avrhu programu (jako klient Team Foundation Serveru: Team Explorer). Visual Studio podporuje jazyky prostˇrednictv´ım jazykov´ ych sluˇzeb, coˇz umoˇzn ˇuje, aby editor k´ odu a debugger podporoval jak´ ykoliv programovac´ı jazyk. Mezi vestavˇen´e jazyky patˇr´ı C/C++ (pouˇzit´ım Visual C++), VB.NET (pouˇzit´ım Visual Basic .NET) a C# (pouˇzit´ım Visual C#). Podpora dalˇs´ıch jazyk˚ u jako Chrome, F#, Python a Ruby spolu s ostatn´ımi m˚ uˇze b´ yt pˇrid´ana jazykov´ ymi sluˇzbami, kter´e mus´ı b´ yt nainstalov´any zvl´aˇst’. Tak´e je podporov´ano XML/XSLT, HTML/XHTML, JavaScript a CSS. Existuj´ı i verze Visual Studia pro urˇcit´ y jazyk, kter´e uˇzivateli poskytuj´ı omezenˇejˇs´ı jazykov´e sluˇzby. Tyto individu´aln´ı bal´ıˇcky jsou Microsoft Visual Basic, Visual J#, Visual C# a Visual C++.
3
Autor
Ondˇ rej Slav´ıˇ cek • kryc´ı jm´eno SLA0065 • narozen v ˇcervenci 1990 ˇ • student VSB-TU Ostrava, fakulta FEI, obor B2647 • z´ aliby – SPORT – programov´ an´ı – filmy – matematika • v´ıce o autorovi zde
10
4
Literatura
Reference [1] Z´ aklady jazyka LATEX http://voho.cz/wiki/poznamky-latex/ [2] Jak na LATEX http://www.root.cz/serialy/jak-na-latex/ [3] Ne pˇr´ıliˇs struˇcn´y u ´vod do syst´emu LATEX http://www.root.cz/knihy/ne-prilis-strucny-uvod-do-systemu-latex-2e/
11