2.Prednaska/Cvicenie: Rozdiel medzi revíziami

Z Pascal
Prejsť na: navigácia, hľadanie
(Vytvorená stránka „{{Nadpis| 2. Cvičenie}} < 2.Prednáška | riešené úlohy <!-- -->“)
 
 
Riadok 3: Riadok 3:
  
  
<!--
+
Postupne riešiť (najlepšie ako Button1Click, Button2Click, ...):
-->
+
 
 +
1. for-cyklus 10000-krát náhodne '''X''', '''Y''' a na tejto pozícii červená bodka veľkosti 1x1
 +
 
 +
2. postupne vypísať všetky čísla od 10 do 99 na náhodné pozície
 +
 
 +
3. na náhodne pozície 30 modrých bodiek postupne veľkostí od 1 do 30
 +
 
 +
4. vygenerovať náhodný histogram:
 +
:* vedľa seba niekoľko (napr. 10) obdĺžnikov - rovnako širokých, náhodne vysokých so spoločnou spodnou hranou
 +
:* obdĺžniky môžu byť rovnakej alebo náhodnej farby
 +
 
 +
5. použitím '''if''': 10000 náhodných bodiek: pod hlavnou uhlopriečkou červené, nad modré
 +
:* predpokladáme štvorcovú grafickú plochu
 +
:* skúsiť nie hlavnú ale vedľajšiu uhlopriečku
 +
 
 +
6.for-cyklom vypisovať pod seba čísla od 10 do 29:
 +
:* ak je číslo deliteľné 3 ('''if I mod 3 = 0 then''') tak ho preskočiť, inak ho vypísať aj s jeho druhou mocninou, teda
 +
10 100
 +
11 121
 +
13 169
 +
14 196
 +
16 256
 +
17 289
 +
19 361
 +
...
 +
29 841
 +
:* v príkaze '''TextOut''' môžete použiť '''Format('%d %d', [I, I * I])'''
 +
:* čísla, ktoré sa preskakujú nenechávajú pri výpise prázdny riadok
 +
 
 +
7. do formulára vložiť vstupný riadok '''Edit1''', po zatlačení '''Button7''':
 +
:* prečítať z neho číslo '''R''', potom nakresliť kruh s polomerom '''R''' a stredom v strede grafickej plochy
 +
:* asi použijete
 +
  R := StrToInt(Edit1.Text);
 +
:* ak chcete, aby kreslenie väčších kruhov nemazalo menšie, vypnete automatické vypĺňanie (pozor, teraz nebude fungovať ani '''FillRect''', ani '''Rectangle'''):
 +
  Image1.Canvas.Brush.Style := bsClear;
 +
:* automatické vypĺňanie sa znovu zapne:
 +
  Image1.Canvas.Brush.Style := bsSolid;
 +
 
 +
8. do formulára vložiť '''Edit1''', '''Edit2''', '''Edit3''', po zatlačení asi '''Button8''':
 +
:* nakreslí sa kruh alebo obdĺžnik s farbou výplne '''RGBToColor'''(c1, c2, c3)
 +
::* kde c1, c2, c3 sú číselné hodnoty vo vstupných riadkoch
 +
 
 +
9. z '''Edit1''' prečítať '''N''' a vypísať zmenšujúcu sa postupnosť
 +
:* vždy odhodíme poslednú cifru, napr. pre '''N''' := 354591, sa vypíše
 +
354591
 +
35459
 +
3545
 +
354
 +
35
 +
3
 +
:* musíme použiť while-cyklus, lebo dopredu nevieme, koľko je to ciferné číslo
 +
 
 +
10. to isté ako 9. ale vypisovať len posledné cifry týchto čísel, napr. pre '''N''' := 354591:
 +
1
 +
9
 +
5
 +
4
 +
5
 +
3
 +
 
 +
11. prečítať číslo z '''Edit1''' a vypísať počet cifier tohto čísla, napr. pre '''N''' := 354591 vypísať
 +
  číslo 354591 má 6 cifier
 +
:* zrejme použijete while-cyklus
 +
:* môžete použiť napr. '''Format('číslo %d má %d cifier', [Cislo, Pocet])'''
 +
 
 +
 
 +
=== nepovinná domáca úloha ===
 +
 
 +
* vybodkovať grafickú plochu tak, aby v strede plochy bol hrubý modrý kríž a mimo neho všetko červené, kríž napr. široký 150 a hrubý 50 (ako keby sa pretínali dva obdĺžniky 150x50 a 50x150)

Aktuálna revízia z 07:12, 1. október 2012

2. Cvičenie


< 2.Prednáška | riešené úlohy


Postupne riešiť (najlepšie ako Button1Click, Button2Click, ...):

1. for-cyklus 10000-krát náhodne X, Y a na tejto pozícii červená bodka veľkosti 1x1

2. postupne vypísať všetky čísla od 10 do 99 na náhodné pozície

3. na náhodne pozície 30 modrých bodiek postupne veľkostí od 1 do 30

4. vygenerovať náhodný histogram:

  • vedľa seba niekoľko (napr. 10) obdĺžnikov - rovnako širokých, náhodne vysokých so spoločnou spodnou hranou
  • obdĺžniky môžu byť rovnakej alebo náhodnej farby

5. použitím if: 10000 náhodných bodiek: pod hlavnou uhlopriečkou červené, nad modré

  • predpokladáme štvorcovú grafickú plochu
  • skúsiť nie hlavnú ale vedľajšiu uhlopriečku

6.for-cyklom vypisovať pod seba čísla od 10 do 29:

  • ak je číslo deliteľné 3 (if I mod 3 = 0 then) tak ho preskočiť, inak ho vypísať aj s jeho druhou mocninou, teda
10 100
11 121
13 169
14 196
16 256
17 289
19 361
...
29 841
  • v príkaze TextOut môžete použiť Format('%d %d', [I, I * I])
  • čísla, ktoré sa preskakujú nenechávajú pri výpise prázdny riadok

7. do formulára vložiť vstupný riadok Edit1, po zatlačení Button7:

  • prečítať z neho číslo R, potom nakresliť kruh s polomerom R a stredom v strede grafickej plochy
  • asi použijete
 R := StrToInt(Edit1.Text);
  • ak chcete, aby kreslenie väčších kruhov nemazalo menšie, vypnete automatické vypĺňanie (pozor, teraz nebude fungovať ani FillRect, ani Rectangle):
 Image1.Canvas.Brush.Style := bsClear;
  • automatické vypĺňanie sa znovu zapne:
 Image1.Canvas.Brush.Style := bsSolid;

8. do formulára vložiť Edit1, Edit2, Edit3, po zatlačení asi Button8:

  • nakreslí sa kruh alebo obdĺžnik s farbou výplne RGBToColor(c1, c2, c3)
  • kde c1, c2, c3 sú číselné hodnoty vo vstupných riadkoch

9. z Edit1 prečítať N a vypísať zmenšujúcu sa postupnosť

  • vždy odhodíme poslednú cifru, napr. pre N := 354591, sa vypíše
354591
35459
3545
354
35
3
  • musíme použiť while-cyklus, lebo dopredu nevieme, koľko je to ciferné číslo

10. to isté ako 9. ale vypisovať len posledné cifry týchto čísel, napr. pre N := 354591:

1
9
5
4
5
3

11. prečítať číslo z Edit1 a vypísať počet cifier tohto čísla, napr. pre N := 354591 vypísať

 číslo 354591 má 6 cifier
  • zrejme použijete while-cyklus
  • môžete použiť napr. Format('číslo %d má %d cifier', [Cislo, Pocet])


nepovinná domáca úloha

  • vybodkovať grafickú plochu tak, aby v strede plochy bol hrubý modrý kríž a mimo neho všetko červené, kríž napr. široký 150 a hrubý 50 (ako keby sa pretínali dva obdĺžniky 150x50 a 50x150)