Programovanie (2) v Jave
1-INF-166, LS 2016/17

Úvod · Pravidlá · Prednášky · Projekt · Netbeans · Odovzdávanie · Test a skúška
· Vyučujúcich môžete kontaktovať pomocou e-mailovej adresy E-prg.png (bude odpovedať ten z nás, kto má príslušnú otázku na starosti alebo kto má práve čas).
· Predvádzanie projektov bude v pondelok 5.6. od 9:00 do 12:00 a v utorok 6.6 od 12:00 do 13:30 (po skúške), oboje v miestnosti M217. Na termín sa prihláste v AIS. Ak robíte vo dvojici, prihlási sa iba jeden člen dvojice.
· Body zo záverečného testu sú na testovači. Poradie príkladov: P1: do šírky, P2: topologické, P3: výnimky, P4: iterátor, P5: testy, P6: strom. Bolo potrebné získať aspoň 20 bodov zo 40.
· Opravný test bude 19.6.2017 od 9:00 v miestnosti M-I. Na termín sa prihláste v AISe.
· Zapisovanie známok a osobné stretnutia ku skúške budú v utorok 13.6. 13:30-14:30 v M163 a v stredu 14.6. 14:00-14:30 v M163.


Cvičenia 2

Z Programovanie
Prejsť na: navigácia, hľadanie

Úlohou tohto cvičenia je precvičiť si logické výrazy a podmienky a použitie cyklov.

  • Prvý príklad skúste vyriešiť bez počítača. V ďalších príkladov naprogramujte požadovaný program a otestujte, že správne funguje.
  • Ak potrebujete radu od cvičiacich, hláste sa.
  • Na cvičení asi nestihnete spraviť všetky príklady, zvyšné môžete riešiť doma alebo na doplnkových cvičeniach v piatok. Cieľom je, aby ste si dôkladne precvičili preberanú látku.

Podobne budú prebiehať aj ďalšie cvičenia.

Logické výrazy a podmienky

  • Nasledujúce dva úryvky programu robia to isté, pričom prvý používa logický operátor && (and) a druhý používa dva príkazy if:
//Verzia 1:
if(x>0 && y>0) { cout << "Yes!"; }

//Verzia 2:
if(x>0) {
  if(y>0) { cout << "Yes!"; }
}
  • Podobne nahraďte logické operátory && a || aj v nasledujúcich príkazoch:
if(x>0 || y>0) { cout << "Yes!"; }
if(x>0 || (x<0 && y<0)) { cout << "Yes!"; }
if(x<0 && (y<0 || z<0)) { cout << "Yes!"; }
  • Nech x je nejaká logická hodnota. Čomu sa rovnajú nasledovné výrazy?
x && true 
x && false 
x || true 
x || false
x && x
x || x 
x && !x
x || !x
x == true 
x == false

Druhé mocniny

Napíšte program, ktorý pomocou cyklu for vypíše tabuľku druhých mocnín čísel 1,2,...,10. Výstup bude mať takúto formu:

1 na druhu je 1
2 na druhu je 4
3 na druhu je 9
...
10 na druhu je 100

Druhé mocniny ešte raz

Do predchádzajúceho programu pridajte výpis súčtu všetkých vypísaných druhých mocnín

1 na druhu je 1
...
10 na druhu je 100
sucet druhych mocnin je 

Vypisovanie čísel

Napíšte program, ktorý od užívateľa načíta hodnotu N a vypíše štvorec veľkosti NxN obsahujúci čísla nasledovne (vyskúšajte všetky tri spôsoby):

  • V prvom riadku budú samé 1, v druhom samé 2, ..., v poslednom samé N
  • V každom riadku budú čísla od 1 po N
  • Rovnaké čísla budú uhlopriečne
1 1 1 1    1 2 3 4    1 2 3 4
2 2 2 2    1 2 3 4    2 3 4 5
3 3 3 3    1 2 3 4    3 4 5 6
4 4 4 4    1 2 3 4    4 5 6 7

Hádaj číslo

Na prednáške bola naprogramovaná hra Hádaj číslo, kde si počítač "myslí číslo" od 1 do 100 a používateľ háda, o ktoré číslo ide. Upravte program nasledovne:

  • Program umožní používateľovi sa vzdať, napríklad keď používateľ zadá 0. V tom prípade program vypíše hľadané číslo a skončí.
  • Program bude počítať počet kôl, ktoré používateľ potreboval na uhádnutie čísla a na konci ho vypíše.

Vykreslenie špirály

Špirála pre n=10

Napíšte program, ktorý vykreslí špirálu korytnačou grafikou ako na obrázku vpravo. Špirála pozostáva z n úsečiek, pričom prvá má dĺžku d a každá ďalšia je o d dlhšia od predchádzajúcej. Čísla n, d a veľkosť obrázku size načítajte od užívateľa (môžete použiť kostru programu nižšie). Korytnačka nech začína v strede obrázku natočená doprava.

  • Vyskúšajte rôzne hodnoty na vstupe a pozrite si výsledok.
  • Vytvorený obrázok si pozrite programom Firefox, aby ste videli animáciu korytnačky
  • Program môžete skúsiť modifikovať tak, aby si sám spočítal vhodnú veľkosť obrázku na základe hodnôt n a d tak, aby okolo špirály zostal ešte nejaký voľný okraj.
#include <iostream>
#include "../SVGdraw.h"
using namespace std;

int main() {
    // načítanie vstupu
    int n, d, size;
    cout << "Zadajte velkost obrazku: ";
    cin >> size;
    cout << "Zadajte pocet ciar spiraly n: ";
    cin >> n;
    cout << "Zadajte dlzku kroku spiraly d: ";
    cin >> d;

    // vytvorenie obrázka a korytnačky
    Turtle turtle(size, size, "image.svg", size / 2, size / 2, 0);

    // TODO: váš kód tu

    // ukončenie vykresľovania
    turtle.finish();
}

Vykreslenie mnohouholníka

Napíšte program, ktorý korytnačou grafikou vykreslí pravidelný n-uholník. V programe si zadefinujte a použite nasledujúce premenné

    int size = 300; /* veľkosť obrázku */
    int length = 200; /* dĺžka strany */
    int n = 4; /* počet strán */
  • Vyskúšajte meniť hodnoty premenných a pozrite si výsledok.

Riešenia

Logické výrazy a podmienky

if(x>0 || y>0) { cout << "Yes!"; }

   if (x>0) { cout << "Yes!"; }
   else if (y>0) { cout << "Yes!"; }
   
   
if (x>0 || (x<0 && y<0)) { cout << "Yes!"; }
   
   if (x>0) { cout << "Yes!"; }
   else if (x<0){
       if (y<0) { cout << "Yes!"; }
   }
   
   
if (x<0 && (y<0 || z<0)) { cout << "Yes!"; }

    if (x < 0) {
        if (y < 0) { cout << "Yes!"; } 
        else if (z < 0) { cout << "Yes!"; }
    }
x && true = x
x && false = false
x || true = true
x || false = x
x && x = x
x || x = x
x && !x = false
x || !x = true
x == true = x
x == false = !x

Druhé mocniny

#include <iostream>
using namespace std;

int main() {
    int N;
    cin >> N;
    
    for (int i=1; i<=N; i++) {
        cout << i << " na druhu je " << i*i << endl;
    }
}

Druhé mocniny ešte raz

#include <iostream>
using namespace std;

int main() {
    int N;
    cin >> N;

    int sucet = 0;
    for (int i = 1; i <= N; i++) {
        cout << i << " na druhu je " << i*i << endl;
        sucet += i * i;
    }
    cout << "sucet druhych mocnin je " << sucet << endl;
}

Vykreslenie špirály

#include <iostream>
#include "../programko/SVGdraw.h"
using namespace std;

int main() {
    // načítanie vstupu
    int n, d, size;
    cout << "Zadajte velkost obrazku: ";
    cin >> size;
    cout << "Zadajte pocet ciar spiraly n: ";
    cin >> n;
    cout << "Zadajte dlzku kroku spiraly d: ";
    cin >> d;

    // vytvorenie obrázka a korytnačky 
    Turtle turtle(size, size, "image.svg", size / 2, size / 2, 0);

    // vykreslenie špirály
    for (int i = 1; i <= n; i++) {
        turtle.forward(i * d);
        turtle.turnLeft(90);
    }

    // ukončenie vykresľovania
    turtle.finish();
}

Vykreslenie mnohouholníka

#include "../SVGdraw.h"

using namespace std;

int main() {
    int size = 300; /* veľkosť obrázku */
    int length = 100; /* dĺžka strany */
    int n = 5; /* počet strán */
    
    Turtle turtle(size, size, "image.svg", (size-length)/2, size, 0);

    for (int i=1; i<=n; i++){
        turtle.forward(length);
        turtle.turnLeft((double)360/n);
    }
    turtle.finish();
    
    return 0;
}