Programovanie (pokus o vypracovanie požiadaviek na skúšku z predmetu)
Pokus o vypracovanie požiadaviek na skúšku z predmetu
PROGRAMOVANIE I.
Prírodovedecká fakulta UCM Trnava
Študijný odbor : INFORMATIKA
Forma štúdia : diaľková
Ročník : prvý
Semester : zimný
Školský rok : 2001/2002
Termíny skúšky : 22.12.2001; 3.1; 10.1; 14.1; 16.1; 21.1; 23.1; 25.1.2002
Forma skúšky : písomná, ústna a praktická
TEORIA:
1, Problém. Pretvorenie reálnej situácie na definovanie problému a jeho riešenie.
2, Algoritmus, algoritmizácia problémov. Vlastnosti algoritmu.
3, Programovacie jazyky a ich historický vývoj.
4, Počiatky výpočtovej techniky, jej vývoj. Prvý počítací stroj, dierne štítky a iné.
5, Počítač, jeho vývoj a súčasnosť. Pohľad na vnútro i vonkajšie komponenty.
6, Štruktúra programovacieho jazyka PASCAL.
7, Problém a jeho riešenie pomocou vývojového diagramu a štrukturogramu.
8, Sekvencia príkazov, alternatíva v praxi jazyka PASCAL.
9, Tvorba a delenie cyklov v jazyku pascal.
10, Deklarácia premenných v jazyku pascal. Rozdelenie premenných podľa hierarchie.
11, Prostredie Turbo Pascal. Hlavné menu, jeho stručný popis.
12, Rozdelenie typov údajov.
13, Typ INTEGER, jeho podtypy. Práca s operáciami v prostredí INTEGER.
14, Typ REAL, jeho syntax, operácie a funkcie v prostredí REAL.
15, Typ CHAR a STRING. Operácie a funkcie v tomto prostredí.
16, Logický typ, hodnoty, operátory a ich výsledné hodnoty, práca s tabuľkou AND, NOT,
OR pre dve a tri premenne.
17, Typ údajov vymenovaný a deklarovaný intervalom. Práca v tomto prostredí. Predchodca a
nasledovník.
18, Štruktúrovaný typ, jedno a dvojrozmerné pole. Napĺňanie poľ a údajmi, práca v tomto
prostredí.
19, Funkcia ako podprogram, lokálne a globálne premenne v programe.
20, Procedúra ako podprogram. Lokálne, globálne a formálne premenné. Tri druhy
parametrov z hľadiska volania podprogramu.
PRÍKLADY:
1, Zostavte program pre splátku pôžičky, ak sme si A Sk požičali, na B rokov s C úrokom.
2, Zostavte program na vypísanie * na obrazovke do trojuholníka, ak v prvom stĺpci bude
max *.
3, Zostavte program na vypísanie * na obrazovke do trojuholníka, ak v prvom stĺpci bude
jedna * .
4, Zostavte program na zobrazenie ľubovolného obrázku pomocou *.
5, Zostavte program na zobrazenie tabuľky malej násobilky.
6, Preveďte číslo z desiatkovej sústavy do dvojkovej.
Vysvetlite obmedzenia pre obecnú
úlohu.
7, Zistite koľko opakovaní postupu výpočtu sa realizuje pri cykle na riešenie príkladu 6, .
8, Zostavte program na výpočet a – faktoriálu.
9, Preveďte stupne Farenheita na Celziové a opačne.
10, Zobrazte na obrazovke * v ľubovolnom tvare pomocou procedúry.
11, Zostavte program funkcie na zaokrúhlenie čísla.
12, Zostavte program na krátenie zlomkov pomocou funkcie NSD.
13, Zostavte program na vypísanie prvočísiel do čísla A, použite algoritmus ES.
14, Zostavte program na zistenie výskytu znaku v určitom reťazci.
15, Zostavte program, ktorý určitý reťazec (meno) bude náhodne presúvať v náhodných
farbách po celej obrazovke.
16, Zostavte program na realizovanie detskej vyčítanky z určitého počtu detí (znakov).
17, Zostavte program HLAVA alebo OROL s vyhodnotením desiatich pokusov.
18, Zostavte jednoduchý program na tému HÁDAJ ĆÍSLO.
19, Majme jednorozmerné pole. Premiešajme ho tak, akoby to boli karty.
20, Zostavte program, ktorý zistí podiel dvoch čísel s presnosťou na určený počet desatinných
miest.
21, Zostavte program na vypísanie prvých desatinných riadkov Pascalovho trojuholníka.
22, Zostavte program na výpočet počtu dní medzi dvoma dátumami.
23, Zostavte program na výpis dní ľubovolného mesiaca roku 2002.
24, Zostavte program, ktorý uhol v sekundách premení na stupne, minúty a sekundy.
25, Sú zadané tri čísla. Môžu byť stranami trojuholníka? Akého?
26, Malá ručička hodín sa pohybuje o jedenminútový diel za 12 minút. Určite pri zadanom
čase, aký uhol zvierajú hodinové ručičky.
27, Zostavte program na zistenie ciferného počtu ľubovolného čísla.
28, Preveďte čas v sekundách na týždne, dni, hodiny, minúty a sekundy.
29, Zostavte program na zistenie najväčšieho prvku matice M x N!
30, V jednej stanici metra sa križujú dve linky. Prvá má interval 2 min. 40 sek., druhá 3 min. 50 sek. O 10.00 hod. prišli obe súpravy súčastne. Zistite čas prejazdu liniek v tejto stanici
od 10.00 hod. Do 18.00 hod. toho istého dňa.
TEORIA:
1, Problém. Pretvorenie reálnej situácie na definovanie problému a jeho riešenie.
Problém je stav, v ktorom jestvuje rozdiel medzi tým, čo v danom momente poznáme a tým, čo potrebujeme. Teda je to disproporcia medzi možnosťami a cieľom. Problém je viazaný na jeho majiteľa. Lebo každý človek vníma každý problém inak. Riešenie problému chápeme ako splnenie cieľa, t.j. odstránenie disproporcie. Potom môžeme schematicky znázorniť postup vyriešenie problému.
Nájdenie postupu riešenia – je činnosť tvorivá a je potrebné poriadne si premyslieť jej podrobnosti a postupné kroky. Túto činnosť je schopný vykonať iba človek. Vykonanie postupu – je rutinnou činnosťou v prípade že postup je už daný. V takom prípade je možné touto činnosťou poveriť aj stroj ktorý by bol schopný daný postup presne realizovať.
2, Algoritmus, algoritmizácia problémov. Vlastnosti algoritmu.
Algoritmus – postup určený pre nemysliace zariadenie.
- je to elementárny pojem informatiky.
- Je postup, ktorého realizáciou získame zo základných vstupných údajov po konečnom počte činností v konečnom čase správne výsledky.
Vlastnosti algoritmu (P6) :
P1. Elementárnosť – postup je zložený z činností, ktoré sú pre realizátora elementárne,
zrozumiteľné. P2.
Determinovanosť – postup je zostavený tak, že je v každom momente jeho vykonávania
jednoznačne určené, aká činnosť má nasledovať, alebo či sa už
postup skončil.
P3. Rezultatívnosť – postup dáva pre rovnaké vstupné údaje vždy rovnaké výsledky (ak
skončí).
P4. Konečnosť – postup končí vždy v konečnom čase a po vykonaní konečného počtu
činností.
P5. Hromadnosť – postup je aplikovaný na celú triedu prípustných vstupných údajov.
P6. Efektívnosť – postup sa uskutočňuje v čo najkratšom čase a s využitím čo najmenšieho
počtu prostriedkov.
Algoritmizáciou rozumieme schopnosť aktívne vytvárať algoritmy určené pre nemysliace zariadenia. Za správny algoritmus môžeme považovať za :
- čiastočne správny, ak v prípade, že skončí, dáva vždy správne výsledky
- konečný, ak skončí v konečnom čase pre ľubovolné vstupné údaje.
- Správny, ak je čiastočne správny a konečný.
Programom - rozumieme algoritmus napísaný v programovacom jazyku. Avšak obsahuje naviac ešte údaje pre počítač potrebné k určeniu typu údajov, využívania hardware.
3, Programovacie jazyky a ich historický vývoj.
Algoritmický jazyk - jazyk určený pre zápis algoritmov.
Vznikla potreba vyvinúť tzv. formálne jazyky (umelo vytvorené, špeciálne určené na zápis algoritmov) pretože klasické jazyky ktoré ľudia využívali na komunikáciu medzi sebou nevyhovovala z viacerých dôvodov.
- počet slov v ľudskej reči je neúprosne vysoký a je stále v neustálom vývoji
- Existuje v nich veľa nezmyslených prísloví, prirovnaní a zaužívaných slovných spojení
- Existencia homonym a synonym, ktoré by spôsobili veľké nejasnosti v programe
- Nestala možnosť odhadnúť presného významu niektorých slov
- Zbytočnosť niektorých prvkov a konštrukcii v prirodzenom jazyku
Ale aj tu vznikalo veľa druhov algoritmických jazykov. Najčastejšie sú:
- grafické algoritmické jazyky – vývojové diagramy, rôzne typy štrukturogramov
- lineárne algoritmické jazyky – slovný zápis v národnom jazyku, programovací jazyk.
Algoritmický jazyk sa skladá z dvoj zložiek :
- operačnej
- riadiacej
Operačná zložka – obsahuje sadu prostriedkov, ktoré umožňujú spracovávať údaje. Základnými činnosťami sú príkazy a podmienky.
Príkazy sú vety jazyka, ktoré prikazujú procesoru vykonať isté, presne stanovené činnosti. napr. : príkazy vstupu, výstupu a priradenia. Tieto príkazy spracúvajú nejaké objekty, ktorými sú premenné, konštanty a výrazy.
Riadiaca zložka – riadiace príkazy sa do algoritmu vkladajú a určujú presnú postupnosť vykonávania jednotlivých činností.
40 – te roky 20.
Storočia programovanie v strojovom jazyku počítača
50 – te roky 20. Storočia programovanie v jazyku symbolických adries
1956 programovací jazyk Fortran (FORmu TRANslation)
1958 programovací jazyk Algol(ALGOrithmic Language)
1961 programovací jazyk Basic (Beginners All-purpose Symbolic
Instruction Code)
Okolo 1970 programovací jazyk Pascal(systematické, štruktúrované
Programovanie)
Okolo 1980 programovací jazyk C (prechod k objektovo orientovanému
programovaniu)
90 – te roky 20. Storočia vývoj komplexnejších verzií jazykov s cieľom využitia nových
možností predovšetkým osobných počítačov (grafika, zvuk,
multimédiá), programovanie riadne udalosťami(Visula Basic)
súčasnosť programovacie jazyky pre torbu aplikácii v globálnych siatiach
(Java)
budúcnosť to je prekvapenie J
4, Počiatky výpočtovej techniky, jej vývoj. Prvý počítací stroj, dierne štítky a iné.
5, Počítač, jeho vývoj a súčasnosť. Pohľad na vnútro i vonkajšie komponenty.
6, Štruktúra programovacieho jazyka PASCAL.
Programovací jazyk Pascal vznikol s cieľom zabezpečiť vyučovanie systematického programovania. Významnou črtou Pascalu je jeho štruktúrovanosť., vďaka ktorej vzniká jednoduchý a prehľadný program.
Tvar programu v Pascale:
Program meno;
Deklarácie a definície objektov;
Begin { začiatok hlavného programu}
Vlastný program – algoritmus prepísaný do programovacieho jazyka
End. {koniec hlavn0ho programu}
Medzi jednotlivými časťami, jakí aj medzi príkazmi programu sú oddeľovačmi bodkočiarky!
Meno programu môže byť ľubovolná postupnosť znakov, ktorá vystihuje daný riešený problém.
Obrazovka monitoru v TP má 25 riadkov a 80 stĺpcov. 7, Problém a jeho riešenie pomocou vývojového diagramu a štrukturogramu.
Strukturogram je algoritmus prepísaný do tabuľkového spôsobu zoradenia príkazov pod sebou v náväznosti, tak aby sa po prepísaní do pascalu dosiahol požadovaný výsledok.
Ich prepis do pascalu je veľmi jednoduchý.
Vetvenie sa znázorňuje týmto spôsobom
Cyklus: Tu potrebujeme poznať, čo sa ma opakovať a do kedy sa to má opakovať.
1, Cyklus so známym počtom opakovaní
2, Cyklus s podmienkou na začiatku
3,Cyklus s podmienkou na konci
8, Sekvencia príkazov, alternatíva v praxi jazyka PASCAL.
Príkazy vstupu – umožňuje zadať procesoru konkrétne hodnoty údajov, ktoré má spracúvať Tieto hodnoty sa uložia do premenných s pevne stanovenou veľkosťou. V pascale to sú:
Read (zoznam premenných oddelený čiarkami)
Readln (zoznam premenných oddelený čiarkami)
Rozdiel je , že kurzor zobrazujúci miesto komunikácie pri príkaze Read zostáva v tom istom riadku ale pri Readln odriadkuje.
Príkaz výstupu – umožňuje získať od procesora výsledky algoritmu alebo iné oznamy. Zobrazuje spracúvané údaje, medzivýsledky, výsledky ako aj zobrazenie komentárov pre lepšiu prehľadnosť. V pascale majú príkazy tvar:
Write (zoznam položiek oddelený čiarkami)
Writeln (zoznam položiek oddelený čiarkami)
Write – vypíše konkrétne hodnoty na obrazovku tesne za sebou a ponechanie kurzora v tom istom riadku.
Writeln – Je to to iste ale na konci riadku odriadkuje.
Priraďovací príkaz – je to zmena hodnôt premenných počas vykonávania algoritmu. Tento príkaz nariaďuje procesoru aby vykonal operácie na pravej strane a uložil ich do premennej na ľavej strane. Zapíše sa ako :
Premenná:=výraz
Podmienka- je to logický výraz t.j. zistenie vzťahov medzi výrazmi, prípadne viazané logickými operáciami ako and, or not.
9, Tvorba a delenie cyklov v jazyku pascal.
Prepis do pascalu je veľmi jednoduchý.
begin
príkaz 1;
príkaz 2 ;
…
príkaz n
end.
Vetvenie sa znázornuje týmto spôsobom
if podmienka
then príkaz1;
else príkaz 2
Cyklus: Tu potrebujeme poznať, čo sa ma opakovať a do kedy sa to má opakovať.
1, Cyklus so známym počtom opakovaní
for i:=1 to n do
begin
telo cyklu
end
Riadiaca premenná cyklu sa po vykonaní cyklu zvýši o jednu. Nahradením slova to za downto sa hodnota cyklu znižuje.
2, Cyklus s podmienkou na začiatku (s neznámym počtom opakovaní)
while podmienka do
begin
telo cyklu
end
cyklus sa opakuje pokiaľ je splnená podmienka. Nesmieme zabudnúť , že v tele cyklu sa musí niečo meniť tak, aby od určitého okamihu podmienka cyklu prestala platiť. Cyklus nemusí prebehnúť ani jedenkrát.
3,Cyklus s podmienkou na konci
repeat
telo cyklu
until podmienka
Cyklus sa uskutoční vždy aspoň raz, ukončí sa ak bude splnená podmienka cyklu. 10, Deklarácia premenných v jazyku pascal. Rozdelenie premenných podľa hierarchie.
Deklarácia premenných slúži na zadefinovanie typu premenných pre vytvorenie pamäťového miesta. Deklarácia premenných je v hlavičke programu s tým že na začiatku je kľúčové slovo var.
11, Prostredie Turbo Pascal. Hlavné menu, jeho stručný popis.
Základom prostredia programu Turbo Pascal je editovacie okno v ktorom prebieha zápis programu v jazyku pascal.
Obsahuje tri hlavné časti:
1, Editovací priestor – funguje jako klasickytextový editor.
2, Hlavné menu – pozostáva z týchto základných volieb ktoré obsahujú dašie moznosti:
File – praca so súbormi a adresármi
Edit – úpravy práve editovaného dokumentu programu
Search – najdenie zvolených častí programu
Run – spustenie programu v režime interpreta
Compile – preklad programu do tvaru vykonatelného súboru(prípona .exe)
Debug – ladenie programu, odstranovanie chýb počas behu programu
Tools – dalšie nástroje pre ladenie programu
Options – nastavenie podmienok pre využívane technické a programové prostriedky
Window – spôsob usporiadania a veľkosťi okien proacovných plôch
Help - napoveda
12, Rozdelenie typov údajov.
Typ údajov je množina prípustných hodnôt spolu s operáciami a fukciami pomocou ktorých ich spracúvame. Najpoužívanejšie typy údajov:
- celé a realne čísla
- znaky
- reťazce znakov
- logický typ
- …
-
13, Typ INTEGER, jeho podtypy. Práca s operáciami v prostredí INTEGER.
INTEGER – údajový typ pre prácu s celočíselnými údajmi. Rozsah je:
-32758 <0<32767
Typ integer je rozšírený o dalšie 4 podtypy a to:
- byte 0..255 zaberá 1 bajt
- shortint -128..128 zaberá 1 bajt
- word 0..65535 zaberá 2 bajty
- longint -2147483648..2147483647 zaberá 4 bajty
Operácie umozňujúce prácu s týmto typom údajov:
+ sčítanie
- odčítanie
* násobenie
/ delenie
div celočíselný podiel
mod celočíselný zvyšok
14, Typ REAL, jeho syntax, operácie a funkcie v prostredí REAL.
REAL – je typ údajov pre reálne čísla. Reálne čísla môžeme v pascale zapisovať:
- desatinným zápisom : 9.81 -0.234 10001.001 3.14159
- semilogaritmickým zápisom: 25.0E10 25E12 31.4E-10 kde E je mocnina 10
Operácie s objektmi typu real:
+, -, *, /,
A potom ma preddefinované funkcie:
sqrt(x) – druhá odmocnina z x
sqr(x) - druhá mocnina x
sin(x) – sinus x
cos(x) – cosinus x
arctan(x) – arcustangens x
ln(x) – prirodzeý logaritmus x
exp(x) – ex
abs(x) – absolútna hodnota x
x v zátvorke za výrazo nazývame volanie funkcie. Při zadavaní uhlov musíme zadávať v radianoch nie v uhloch. Aj typ real má dalšie podtypy:
real 2.9*10-39 až 1.7*10+38 zaberá 6 bajtov
single 1.5*10-45 až 3.4*10+38 zaberá 4 bajty
double 5.0*10-324 až 1.7*10+308 zaberá 8 bajtov
extended 3.4*10-4932 až 1.1*10+4932 zaberá 10 bajtov
comp -2-63+1 až 2+63-1 zaberá 8 bajtov
15, Typ CHAR a STRING. Operácie a funkcie v tomto prostredí.
CHAR – údajový typna uchovávanie a spracovanie jednotlivých znakov. Vyjadrujú sa reprezentáciou ohraničenou apostrofmi alebo pomocou ASCII kodu ktorému predchádza znak #.
Funkcie:
ord – poradie
upcase – zmena maleho písmena na velké
chr – změna kodu na znak
STRING – údajový typ reťazec. Reťazce znakov sú postupnosti znakov ohraničené aposrofmi. Max. dlžka reťazca je 255 znakov. Nástroje na spracovanie reťazcov:
length – funkcia, ktorá zistí aktuálnu dĺžku reťazca
concat – funkcia, ktorá spojí za seba dva reťazce (sčíta ich)
copy – funkcia, ktorá vyberie (skopíruje) podreťazec z reťazca
delete – procedúra, ktorá zruší podreťazec v reťazci
insert – procedúra, ktorá vloží podreťazec do reťazca
pos – funkcia, ktorá zistí pozíciu podreťazca v reťaci
str – procedúra, ktorá prevedie číslo na reťazec
val – procedúra, ktorá prevedie reťazec na číslo
16, Logický typ, hodnoty, operátory a ich výsledné hodnoty, práca s tabuľkou AND,
NOT, OR pre dve a tri premenne.
BOOLEAN – využíva sa pre vyjadrenie dvoch logických hodnôt a má iba dve možnosti:
True – pravda
False – nepravda
Logické výrazi najdu uplatnenie najmä v podmienených príkazoch a v príkazoch cyklu.
Priorita operátorov rôznych údajových typov:
Priorita Operátor
4 NOT
3 *, /, div, mod, and
2 +, -, or
1 =, <>, >, <, <=, >=
Operácie and, or, not s dvomi premennými:
X Y X and Y X or Y not(X)
False false false false true
False true false true true
true false false true false
true true true true false
17, Typ údajov vymenovaný a deklarovaný intervalom. Práca v tomto prostredí.
Predchodca a nasledovník.
VYMENOVANÝ TYP – určuje množinu hodnôt vymenovaním identifikátorov(názvov)
Ktoré tieto hodnoty označujú. Ordinalita identifikátora v vo vymenovaní je daná jeho polohou v zozname. Prvý identifikátor má hodnotu 0.
TYP INTERVAL – je určený rozsahom hodnôt ordinárneho typu. Při jeho definovaní, udávame jeho najmänšiu a najväčšiu hodnotu v intervale.tieto typy údajov sa definujú už po hlavičke programu kľúčovým slovo TYPE.
Všeobecne ordinárne typy su jednoduché typy definujúce usporiadanie množiny hodnôt.
Vlastnosti ordinárnych typov.
- hodnoty ordinárneho typu sú usporiadanou množinou hodnôt.
- každá hodnota je spojená s ordinaritou, čo je jedinečná celočíselná hodnota, ktorá vyjadruje umiestnenie prvku v množine.
- prvá hodnota každého ordinárnehotypu je 0, výnimku tvorí typ integer, ďalšia hodnota je 1 . - každá hodnota ordinárneho typu má svojho predchodcu a svojho následovníka
- na zistenie každej hodnoty ordinárneho typu sa môže použiť funkcia ORD, ktorá vráti ordinaritu prvku typu.
- na zistenie hodnoty predchodcu ordinárneho typu sa môže použiť funkcia PŘED.
- na zistenie hodnoty následovníka ordinárneho typu sa môže použiť funkcia SUCC.
Turbo Pascal má 7 preddefinovaných ordinárnych typov:
Integer, shortint, longint, byte, word, boolean, char
18, Štruktúrovaný typ, jedno a dvojrozmerné pole. Napĺňanie poľa údajmi, práca
v tomto prostredí.
TYP POLE – má pevne stanovený počet zložiek rovnakého typu. Při jeho zadávaní sa určuje rozmer poľa a typ jeho zložiek. Rozmer určuje koľko prvkov môžme do pola vložti a zadáva sa v hranatých zátvorkách. Typ zložky určujeme za slovom OF.
Jednorozmerné pole – postupnosť nejakých hodnôt(čísel, mien, )Tu je tiež aj velmi dôležité poradie.
Dvojrozmerné pole – využívajú sa na spracovanie napr. tabuliek. Tu sa mení počet indexov v zadávaní veľkosti poľa z jedného na dva. 19, Funkcia ako podprogram, lokálne a globálne premenne v programe.
Funkcia – sa používa vtedy , ak potrebujeme zostaviť čiastkový algoritmus, ktorého volaním sa získava funkčná hodnota. Získaná funkčná hodnota sa ukladá do identifikátora (mena) funkcie. V jej príkazovej časti musí byť teda najmenej jeden priraďovací príkaz, na ľavej strane ktorého je identifikátor funkcie. Všeobecne má hlavička v deklarácii tvar:
Function () :
Tri druhy parametrov:
1, s globálnymi premennými – sú to premenné, ktoré sú deklarované vo všetkých blokoch, ktoré obsahujú tento program.
2, s lokálnymi premennými – Lokálne premenné sú tie , ktoré sú deklarované vo vnútri podprogramu a ich platnosť je obmedzenáiba na príkazovú časťpodprogramu. Lokálna premenná v príkazovej časti podprogramu zatieňuje všetky premenné a formálne parametre rovnakého mena deklarované v nadriadených blokoch.
3, S formalnymi parametrami – formálne parametre zastupujú v podprograme triedu objektov, pre ktorú je postup zostavený. V príkazovej časti podprogramu predstavujú objekty, s ktorými príkazy operujú.
20, Procedúra ako podprogram. Lokálne, globálne a formálne premenné. Tri druhy
parametrov z hľadiska volania podprogramu.
Porcedúra – predstavuje čiastkový algoritmus, ktorého výsledkom nemusí byť iba jediná hodnota.
Hlavička:
Procedure ()
Volanie procedúry sa zabezpečí zapísaním mena procedúry s uvedením prípadných skutočných parametrov jako samostatného príkazu.
Tri druhy parametrov:
1, s globálnymi premennými – sú to premenné, ktoré sú deklarované vo všetkých blokoch, ktoré obsahujú tento program.
2, s lokálnymi premennými – Lokálne premenné sú tie , ktoré sú deklarované vo vnútri podprogramu a ich platnosť je obmedzenáiba na príkazovú časťpodprogramu. Lokálna premenná v príkazovej časti podprogramu zatieňuje všetky premenné a formálne parametre rovnakého mena deklarované v nadriadených blokoch.
3, S formalnymi parametrami – formálne parametre zastupujú v podprograme triedu objektov, pre ktorú je postup zostavený. V príkazovej časti podprogramu predstavujú objekty, s ktorými príkazy operujú.
Z hľadiska volania podprogramu rozlišujeme parametre:
1, parametre volane hodnotou
2, parametre volane odkazom
3, komformne pole
PRÍKLADY:
1, Zostavte program pre splátku pôžičky, ak sme si A Sk požičali, na B rokov s C
úrokom.
2, Zostavte program na vypísanie * na obrazovke do trojuholníka, ak v prvom stĺpci
bude max *.
program hviezdy;
var i,j,n:integer;
begin
write('zadaj pocet: ');
readln(n);
for i:=1 to n do
begin
for j:=1 to i do write('*');
writeln;
end;
readln
end.
3, Zostavte program na vypísanie * na obrazovke do trojuholníka, ak v prvom stĺpci
bude jedna * .
program hviezda1;
var i,j:integer;
begin
for i:=1 to 24 do
begin
for j:=1 to 24-i do write(' ');
for j:=1 to i do write('*');
writeln;
end;
readln
end.
4, Zostavte program na zobrazenie ľubovolného obrázku pomocou *.
program hviezdy;
var i,j,N:integer;
begin
Write ('Zadaj poźet hviezd :');
Readln(N);
for i:=1 to N do
begin
for j:=1 to N-i do write (' ');
for j:=1 to N do write ('*');
writeln;
end;
readln
end.
5, Zostavte program na zobrazenie tabuľky malej násobilky.
program mala_nasobilka;
uses crt;
const posun=6;
var i,j:integer;
begin
clrscr;
writeln('Mala nasobilka':46);
for i:=1 to 78 do write('-');
writeln;
writeln;
write(' ':posun);
for j:=0 to 9 do write(j:posun);
writeln;
writeln;
for i:=0 to 9 do
begin
write(i:posun);
for j:=0 to 9 do write(i*j:posun);
writeln;
end;
writeln;
readln
end.
6, Preveďte číslo z desiatkovej sústavy do dvojkovej.
Vysvetlite obmedzenia pre obecnú
úlohu.
program prevod_10_2;
var n,p,zv:word;
prevod:string;
begin
write('zadaj n: ');readln(n);
p:=n; zv:=0; prevod:='';
while p<>0do
begin
zv:=p mod 2;
if zv=0 then prevod:= '0'+prevod
else prevod:= '1'+prevod;
p:=p div 2;
end;
writeln(n, '(10)=',prevod,'(2)');
readln
end.
7, Zistite koľko opakovaní postupu výpočtu sa realizuje pri cykle na riešenie príkladu 6 .
program prevod_10_2;
var n,p,zv,s:word;
prevod:string;
begin
write('zadaj n: ');readln(n);
p:=n; zv:=0; s:=0; prevod:='';
while p<>0 do
begin
zv:=p mod 2;
if zv=0 then prevod:= '0'+prevod
else prevod:= '1'+prevod;
p:=p div 2;
s:=s+1;
end;
writeln(n, '(10)=',prevod,'(2)');
writeln('pocet opakovani bol:' s);
readln
end.
8, Zostavte program na výpočet a – faktoriálu.
program a_faktorial;
var i,a: integer;
fakt: longint;
begin
write('zadaj cislo faktorialu a:');
readln(a);
fakt:=1;
for i:=1 to a do
begin
fakt:=fakt*i;
end;
writeln(a, '! = ', fakt);
readln
end.
9, Preveďte stupne Farenheita na Celziové a opačne.
program prevod_celzius_farad;
var f,c: real;
j:retazec;
begin
write('zadaj jednotku ktoru chces previest: ');
readln(j);
if j=c then begin
writeln('prevod stupnov celzia na stupne farhenheita');
write('zadaj stupne celzia: ');
readln(c);
f:=c*(9/5)+32;
writeln(c, ' c= ', f: 5: 1, 'f');
end;
else begin
writeln('prevod stupnov farhenheita na stupne celzia');
write('zadaj stupne farhenheita: ');
readln(f);
c:=(f-32)*(5/9);
writeln(f, ' f= ', c: 5: 1, 'c');
readln;
end.
10, Zobrazte na obrazovke * v ľubovolnom tvare pomocou procedúry.
program stars;
var n,i,j :integer;
begin
writeln('napis pocet');
readln(n);
for i:= 1 to n do begin
for j:= 1 to i do write ('*');
writeln;
end;
for i:=n downto 1 do begin
for j:= 1 to i do write ('*');
writeln;
end;
readln;
end.
11, Zostavte program funkcie na zaokrúhlenie čísla.
program zaokruhlovanie;
var vysledok:real;
cislo:real;
desmiesta:integer;
function zaokruhli (cislo:real; desmiesta:integer):real;
var mocnina:longint;
i:integer;
begin
mocnina:=1;
for i:=1 to desmiesta do
mocnina:=mocnina*10;
zaokruhli:=round(cislo*mocnina)/mocnina;
end;
begin
writeln('zadaj cislo');
readln(cislo);
readln(desmiesta);
vysledok:=zaokruhli(cislo,desmiesta);
writeln(vysledok: 8:desmiesta);
readln;
end.
12, Zostavte program na krátenie zlomkov pomocou funkcie NSD.
program kratenie_zlomkov;
var a, b:integer;
function nsd(x, z:integer): integer; forward;
procedure kratzlomok(var citatel, menovatel:integer);
var pomoc:integer;
begin
pomoc:=nsd(citatel, menovatel);
citatel:=citateldiv pomoc;
menovatel:=menovatel div pomoc;
end;
function nsd;
var pomoc: integer;
begin
while x<>0 do
begin
pomoc:=x mod y;
x:=y;
y:=pomoc;
end;
nsd:=x;
end;
begin
readln(a, b);
kratzlomok(a, b);
writeln(a, b);
end.
13, Zostavte program na vypísanie prvočísiel do čísla A, použite algoritmus ES.
program prvocislo;
uses CRT;
const g=100;
type pole=array[1..g] of integer;
var n,i:integer;
b:pole;
procedure sito(n:integer;var b:pole);
var i,k:integer;
begin
for i:=2 to n do
b[i]:=i;
k:=2;
while k<=trunc (sqrt(n)) do begin
for i:=k+1 to N do if b[i] mod k =0 then b[i]:=0;
repeat
k:=k+1;
until (b[k]<>0);
end;
end;
begin
ClrScr;
write('zadaj n');
readln(n);
sito(n,b);
for i:=2 to n do if b[i]<>0 then write(b[i]:5);
readln;
end.
14, Zostavte program na zistenie výskytu znaku v určitom reťazci.
15, Zostavte program, ktorý určitý reťazec (meno) bude náhodne presúvať v náhodných
farbách po celej obrazovke.
16, Zostavte program na realizovanie detskej vyčítanky z určitého počtu detí (znakov).
program vycitanka;
var i, n, m, kde, p: word;
h: array [1..100] of word;
begin
write ('zadaj pocet hracov a ktory ide y kola von');
readln(m, n);
for i:=1 to n do h[i]:=i; h[n+1]:=0;
kde:=0;
for i:=1 to n do
begin
p:=0;
repeat
kde:=kde+1;
if h[kde]<>0 then p:=p+1;
if kde>n then kde:=0;
until p=m;
writeln (i, '. ty vypadava hrac cislo ', h[kde]);
h[kde]:=0;
end;
writeln;
readln
end.
17, Zostavte program HLAVA alebo OROL s vyhodnotením desiatich pokusov.
program hlava_a_orol;
var i, n, hod, hlava, orol: integer;
begin
write('zadaj pocet hodou mincou: '); readln(n);
randomize;
hlava:=0; orol:=0;
for i:=1 to n do
begin
hod:=random(2);
if hod=0 then begin write(' hlava '); hlava:=hlava+1; end
else begin write(' orol '); orol:=orol+1; end;
end;
writeln;
writeln('z ', n, ' hodov padla hlava ', hlava, '-krat, orol ', orol, '-krat');
readln
end.
18, Zostavte jednoduchý program na tému HÁDAJ ĆÍSLO.
program hadanie_cisla;
var i,n,cislo,pokus:integer;
uhadol:boolean;
begin
write('zadaj max moznu hodnotu.');
readln(n);
randomize;
cislo:=random(n+1);
uhadol:=false;
i:=0;
repeat
i:=i+1;
write ('zadaj cislo'); readln (pokus);
if pokus = cislo then uhadol:=true
else if pokus>cislo then writeln(pokus,'je vacie ako myslenecislo')
else writeln(pokus,'je mense cislo');
until uhadol;
writeln('hadane cislo',cislo,' si uhadol na', i,' pokus.');
readln;
end.
19, Majme jednorozmerné pole. Premiešajme ho tak, akoby to boli karty.
program KARTY;
uses CRT;
var a:array[1..20] of integer;
n,i,m,u,v:integer;
procedure vymena(u,v:integer);
var pomoc:integer;
begin
pomoc:=a[u];
a[u]:=a[v];
a[v]:=pomoc;
end;
begin
ClrScr;
writeln('Zadaj pocet prvkov pola');
readln(n);
for i:=1 to n do begin
writeln(i,'.
prvok');
readln(a[i]);
end;
writeln('Povodne pole:');
for i:=1 to n do write(a[i]:3);
writeln;
randomize;
m:=random(100)+1; {m - pocet premiesani}
for i:=1 to m do begin
u:=random(n)+1; {u,v - index}
v:=random(n)+1;
vymena(u,v);
end;
writeln('Premiesane pole:');
for i:=1 to n do write(a[i]:3);
readln;
end.
20, Zostavte program, ktorý zistí podiel dvoch čísel s presnosťou na určený počet
desatinných miest.
21, Zostavte program na vypísanie prvých desatinných riadkov Pascalovho
trojuholníka.
program Pascalov_trojuholnik;
uses CRT;
const posun=30;
var i,j:integer;
function faktorial(n:integer):longint;
var i:integer;
f:longint;
begin
f:=1;
if n=0 then faktorial:=1
else begin
for i:=1 to n do f:=f*i;
faktorial:=f;
end;
end;
function komb_cislo(n,k :integer):integer;
var p:real;
begin
p:=faktorial(n)/(faktorial(n-k)*faktorial(k));
komb_cislo:=trunc(p);
end;
begin
Clrscr;
for i:=0 to 9 do begin
write(' ':posun-2*i);
for j:=0 to i do write(komb_cislo(i,j):4);
writeln;
end;
readln;
end.
22, Zostavte program na výpočet počtu dní medzi dvoma dátumami.
program pr_22;
const m:array[1..12] of integer =(31,28,31,30,31,30,31,31,30,31,30,31);
var d1,d2,m1,m2,r1,r2,i,c1,c2,b,s,p:integer;
begin
writeln('Zadaj 1.datum v tvare den, mesiac, rok');
readln(d1, m1, r1);
writeln('Zadaj 2.datum v tvare den, mesiac, rok');
readln(d2, m2, r2);
c1:=0;
for i:=1 to m1-1 do c1:=c1+m[i];
if ((r1 mod 4)=0) and (m1>2) then c1:=c1+1;
c1:=c1+d1;
c2:=0;
for i:=1 to m2-1 do c2:=c2+m[i];
if ((r2 mod 4)=0) and (m2>2) then c2:=c2+1;
c2:=c2+d2;
b:=(r2-r1) div 4; {pocet prestupnych rokov}
s:=(r2-r1)*365+b; {pocet dni medzi rokmi r1 a r2}
p:=s+c2-c1; {celkovy pocet dni}
writeln('Celkovy pocet dni je ',p);
readln;
end.
23, Zostavte program na výpis dní ľubovolného mesiaca roku 2002.
program dni;
var m:integer;
begin
write('zadaj cislo mesiac: ');
readln(m);
if m=2 then write (m,'mesiac ma 28 dni')
else
if ((m=4) or (m=6) or (m=9) or (m=11)) then writeln(m,'mesiac ma 30 dni')
else writeln(m,'mesiac ma 31 dni');
writeln;
readln
end.
program pr_23;
uses Crt;
var i,j:integer;
mesiac:string;
m:array[1..12] of string;
begin
ClrScr;
m[1]:='januar';
m[2]:='februar';
m[3]:='marec';
m[4]:='april';
m[5]:='maj';
m[6]:='jun';
m[7]:='jul';
m[8]:='august';
m[9]:='september';
m[10]:='oktober';
m[11]:='november';
m[12]:='december';
writeln('Zadaj mesiac');
readln(mesiac);
for i:=1 to 12 do if m[i]=mesiac then j:=i;{j-poradove cislo mesiaca}
case j of
1,3,5,7,8,10,12:writeln('Mesiac ',mesiac,' ma ',31,' dni');
2:writeln('Mesiac ',mesiac,' ma ',28,' dni');
4,6,9,11:writeln('Mesiac ',mesiac,' ma ',30,' dni');
end;
readln;
end.
24, Zostavte program, ktorý uhol v sekundách premení na stupne, minúty a sekundy.
program pr_24;
uses CRT;
var stupne, minuty, sekundy, p:integer;
begin
ClrScr;
writeln('Zadaj uhol v sekundach');
readln(sekundy);
stupne:=sekundy div 3600;
p:=sekundy mod 3600;
minuty:=p div 60;
sekundy:=p mod 60;
writeln('Vysledok: ',stupne,' stupnov, ',minuty,' minut a ',sekundy,' sekund');
readln;
end.
25, Sú zadané tri čísla. Môžu byť stranami trojuholníka? Akého?
program trojuholnik;
var a, b, c, max:real;
begin
write('zadaj strany strany: a, b, c, : ');
readln(a,b,c);
if ((a+b>c) and (a+c>b) and (b+c>a))
then
begin
writeln('a= ',a,'b= ',b,'c= ',c,' su stranami trojuholnika');
if a>b then max:=a
else max:=b;
if max if ( sqr(c) =sqr(a) + sqr(b)) then writeln('je to pravouhli trojuholnik')
else
begin
if ((a=b) and (b=c) and (a=c)) then writeln(' je to rovnostranny trojuholnik')
else
if (a=b) then writeln('je to rovnoramenni trojuholnik')
else writeln('je to nepravidelny trojuholnik');
end
end
else
writeln('a= ',a,'b= ',b,'c= ',c,' nie su stranami trojuholnika');
readln
end.
26, Malá ručička hodín sa pohybuje o jedenminútový diel za 12 minút.
Určite pri
zadanom čase, aký uhol zvierajú hodinové ručičky.
program pr_26;
uses CRT;
const dielik=6;
var h,m,d,p,stupne:integer;
begin
Clrscr;
writeln('Zadaj cas:');
writeln('hodiny:');
readln(h);
writeln('minuty');
readln(m);
d:=m div 12; {posun hodinovej rucicky}
p:=(h*5+d)-m; {celkovy pocet dielikov medzi rucickami}
stupne:=p*dielik; {prevod dielikov na stupne}
if stupne>180 then stupne:=360-stupne;
writeln;
writeln('Rucicky zvieraju uhol ',stupne,' stupnov');
readln;
end.
27, Zostavte program na zistenie ciferného počtu ľubovolného čísla.
program ciferny_sucet;
var sucet, cislo, cislica: integer;
begin
writeln('zadaj cislo: ');
readln(cislo);
sucet:=0;
while cislo<>0 do
begin
cislica:=cislo mod 10;
sucet:=sucet + cislica;
cislo:=cislo div 10;
end;
writeln('ciferny sucet cisla je: ',sucet);
readln
end.
28, Preveďte čas v sekundách na týždne, dni, hodiny, minúty a sekundy.
program pr_28;
uses CRT;
var tyzdne, dni, hodiny, minuty, sekundy, p1,p2,p3:longint;
begin
ClrScr;
writeln('Zadaj cas v sekundach');
readln(sekundy);
tyzdne:=sekundy div 604800;
p1:=sekundy mod 604800;
dni:=p1 div 86400;
p2:=p1 mod 86400;
hodiny:=p2 div 3600;
p3:=p2 mod 3600;
minuty:=p3 div 60;
sekundy:=p3 mod 60;
writeln('Vysledok: ',tyzdne,' tyzdnov ',dni,' dni ',hodiny,' hodin ',minuty,' minut a ',sekundy,' sekund');
readln;
end.
29, Zostavte program na zistenie najväčšieho prvku matice M x N!
program pr_29;
uses CRT;
var m,n,i,j,max:integer;
a:array[1..20,1..20] of integer;
begin
ClrScr;
writeln('Zadaj pocet riadkov matice');
readln(m);
writeln('Zadaj pocet stlpcov matice');
readln(n);
writeln('Zadavaj prvky matice');
writeln;
max:=0;
for i:=1 to m do
for j:=1 to n do begin
writeln('Prvok v ',i,'. riadku a ',j,'. stlpci');
readln(a[i,j]);
if a[i,j]>max then max:=a[i,j];
end;
Clrscr;
writeln('Matica:');
writeln;
for i:=1 to m do begin
for j:=1 to n do write(a[i,j]:4);
writeln;
end;
writeln;
writeln('Najvacsi prvok matice je ',max);
readln;
end.
30, V jednej stanici metra sa križujú dve linky. Prvá má interval 2 min. 40 sek., druhá 3
min. 50 sek. O 10.00 hod. prišli obe súpravy súčastne. Zistite čas prejazdu liniek
v tejto stanici od 10.00 hod. Do 18.00 hod. toho istého dňa.
program pr_30;
uses CRT;
const prva=160; {interval prvej linky v sekundach}
druha=230; {interval druhej linky v sekundach}
var ph,pm,ps,p1,p2,dh,dm,ds,d1,d2,a,b:longint;
begin
ClrScr;
writeln('Casy :');
ph:=10;
pm:=0;
ps:=0;
p1:=ph*3600;
a:=0;
while ph<18 do begin
p1:=p1+prva;
a:=a+1;
ph:=p1 div 3600;
p2:=p1 mod 3600;
pm:=p2 div 60;
ps:=p2 mod 60;
if (a mod 23)=0 then writeln(ph,':',pm,':',ps);
end;
writeln('Casy druhej linky metra:');
dh:=10;
dm:=0;
ds:=0;
d1:=dh*3600;
b:=0;
while dh<18 do begin
d1:=d1+druha;
b:=b+1;
dh:=d1 div 3600;
d2:=d1 mod 3600;
dm:=d2 div 60;
ds:=d2 mod 60;
if (b mod 16)=0 then writeln(dh,':',dm,':',ds);
end;
readln;
end.
|