42
1 } Metodika nastave raˇ cunarstva B Veˇ zbe } Aleksandra Simi´ c www.math.rs/˜asimic [email protected] Matematiˇ cki fakultet Katedra za raˇ cunarstvo i informatiku 2016

Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

1}Metodika nastave racunarstva B

Vezbe}Aleksandra Simicwww.math.rs/˜asimic

[email protected]

Matematicki fakultetKatedra za racunarstvo i informatiku

2016

Page 2: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2

1 Zadatak: Fibonacijev niz

[ListBox, Button, MessageBox]

Napraviti aplikaciju ”1 0” koja ce za uneto n, ispisivati prvih n clanova Fibonacijevog niza(u okviru ListBox-a). Vrednost n moze biti izmedju 1 i 40. U slucaju pogresnog unosa, uMessageBox-u treba ispisati odgovarajucu poruku.NAPOMENA: Voditi racuna da ako se vise puta klikne na dugme ”Ispisi”, aplikacija treba daradi ispravno - ne treba da se nadovezuju novi elementi liste na prethodne, vec je prvo potrebnoisprazniti listu. Izgled formulara je prikazan na slici 1.

Figure 1: Izled forme

Postupak:

1. Napraviti novu WindowsFormApplication i nazvati je 1 0.

2. Na formu dodati 1 polje za prikazivanje liste (ListBox), 1 polje za unos teksta (TextBox)i jedno dugme (Button).

3. Postaviti da tekst na dugmetu bude ”Ispisi”.

4. Dvoklikom na dugme napraviti funkciju button1 Click.

5. Pomenuta funkcija ce se pozivati svaki put kada se klikne na dugme. Iz tog razloga, uokviru ove funkcije treba implementirati samu logiku aplikacije (sva izracunavanja). Zadodatna obrazlozenja, pogledajte komentare u kodu ispod.

Page 3: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 3

1.1 Resenje

using System;

2 using System.Collections.Generic;

using System.ComponentModel;

4 using System.Data;

using System.Drawing;

6 using System.Linq;

using System.Text;

8 using System.Windows.Forms;

10 namespace _1_0

{

12 public partial class Form1 : Form

{

14 public Form1()

{

16 InitializeComponent ();

}

18

/* Funkcija koja se poziva klikom na dugme.*/

20 private void button1_Click(object sender , EventArgs e)

{

22 /*Na pocetku praznimo listu */

listBox1.Items.Clear();

24

int n, tmp_fib;

26

/* Fibonacijev niz: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...*/

28 int fib1 = 0;

int fib2 = 1;

30

/* Citamo iz tekstualnog polja uneti broj. Ukoliko uneti broj nije ceo broj

32 (npr. neko unese neki tekst ili realan broj), funkcija tryParse ce vratiti

vrednost False. Ukoliko je broj ispravan , njegova vrednost ce se smestiti u

34 promenljivu n (drugi argument funkcije).*/

if (int.TryParse(textBox1.Text , out n)) {

36

if (n == 1) /*Ako je n = 1, ispisujemo samo prvi clan niza*/

38 listBox1.Items.Add(fib1);

else if (n >= 2 && n <= 40)

40 { /*Ako je n >= 2, ispisujemo prva dva clana niza ,

a ostale clanove racunamo u petlji. Svaki slececi clan

42 se dobija kao zbir prethodna dva. */

listBox1.Items.Add(fib1);

44 listBox1.Items.Add(fib2);

for (int i = 2; i < n; i++)

46 {

tmp_fib = fib1 + fib2;

48 fib1 = fib2;

fib2 = tmp_fib;

50 listBox1.Items.Add(fib2);

}

52 }

else {

54 /*U slucaju greske ispisujemo odgovarajucu poruku. Funkcija Show prima dva argumenta

:

1. Poruka koja se ispisuje

56 2. Tekst koji se nalazi u zaglavlju MessageBox -a*/

MessageBox.Show("Morate␣uneti␣ceo␣broj␣izmedju␣1␣i␣40.", "Greska");

58 }

}

60 else

{

62 MessageBox.Show("Morate␣uneti␣ceo␣broj␣izmedju␣1␣i␣40.", "Greska");

}

64 }

}

66 }

1.2 Domaci zadatak

1. Modifikovati aplikaciju, tako sto treba ispisati prvih n parnih clanova Fibonacijevog niza.

Page 4: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

2 ZADATAK: OPERACIJE SA BROJEVIMA [TEXTBOX, LABEL] 4

2 Zadatak: Operacije sa brojevima

[TextBox, Label]

Napraviti aplikaciju ”1 1” koja ce demonstrirati neke osnovne operacije sa brojevima. Izgledformulara je prikazan na slici 2.

Figure 2: Izled forme

Postupak:

1. Napraviti novu WindowsFormApplication i nazvati je 1 1

2. Na formu dodati 5 labela (i postaviti odgovarajuci tekst za svaku od njih). Velicinu slovapostaviti na 12pt.

3. Na formu dodati 5 tekstualnih polja. Postaviti da samo prvo polje moze da se menja.

4. Dvoklikom na prvo tekstualno polje napraviti funkciju textBox1 TextChanged

5. Pomenuta funkcija ce se pozivati svaki put kada dodje do promene sadrzaja u okviruprvog tekstualnog polja. Iz tog razloga, u okviru ove funkcije treba implementirati samulogiku aplikacije (sva izracunavanja). Za dodatna obrazlozenja, pogledajte komentare ukodu ispod.

Page 5: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

2 ZADATAK: OPERACIJE SA BROJEVIMA [TEXTBOX, LABEL] 5

2.1 Resenje

using System;

2 using System.Collections.Generic;

using System.ComponentModel;

4 using System.Data;

using System.Drawing;

6 using System.Linq;

using System.Text;

8 using System.Windows.Forms;

10 namespace _1_1

{

12 public partial class Form1 : Form

{

14 public Form1()

{

16 InitializeComponent ();

}

18

/* Funkcija duzina broja vraca koliko cifara ima prosledjeni broj*/

20 private int duzina_broja(int broj) {

int duzina = 0;

22 while (broj != 0) {

duzina ++;

24 broj /= 10;

}

26 return duzina;

}

28

/*Ova funkcija ce se pozvati svaki put kada dodje do neke izmene

30 u sadrzaju tekstualnog polja koje se zove textBox1 */

private void textBox1_TextChanged(object sender , EventArgs e)

32 {

/* Pomocne promenljive */

34 int broj , cifra;

int najveca_cifra = 0;

36 int broj_obrnuto = 0;

int najmanja_cifra = 9;

38 int zbir_cifara = 0;

40 /* Pokusavamo da procitamo broj iz polja za unos teksta */

/*

42 NAPOMENA:

* textBox1 cuva uneti broj

44 * textBox2 je za zbir cifara

* textBox3 je za broj ispisan u obrnutom redosledu

46 * textBox4 je za najvecu cifru broja

* textBox5 je za najmanju cifru broja

48 */

if (int.TryParse(textBox1.Text , out broj))

50 {

/* Promenljivu poz cemo koristiti za ispis broja u obrnutom redosledu */

52 int poz = (int)Math.Pow(10, duzina_broja(broj));

54 /* Koristimo petlju da bismo isli redom po ciframa broja*/

while (broj != 0)

56 {

/* Izdvajamo poslednju cifru i vrsimo sve operacije nad njom*/

58 cifra = broj % 10;

zbir_cifara += cifra;

60 if (cifra > najveca_cifra)

najveca_cifra = cifra;

62 if (cifra < najmanja_cifra)

najmanja_cifra = cifra;

64 broj_obrnuto += cifra * poz;

poz /= 10;

66 broj /= 10;

}

68 broj_obrnuto /= 10;

70 /* Rezultate ispisujemo u odgovarajuca tekstualna polja*/

textBox2.Text = zbir_cifara.ToString ();

72 textBox3.Text = broj_obrnuto.ToString ();

textBox4.Text = najveca_cifra.ToString ();

74 textBox5.Text = najmanja_cifra.ToString ();

Page 6: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

2 ZADATAK: OPERACIJE SA BROJEVIMA [TEXTBOX, LABEL] 6

}

76 else {

/*Ako nismo uspeli da procitamo broj , znaci da ulaz nije ispravan

78 U tom slucaju brisemo sav sadrzaj tekstualnih polja.

*/

80 textBox2.Text = "";

textBox3.Text = "";

82 textBox4.Text = "";

textBox5.Text = "";

84 }

}

86 }

}

2.2 Domaci zadatak

1. Modifikovati aplikaciju, tako da ispravno radi i za negativne brojeve

2. Modifikovati aplikaciju, tako sto ce se sva izracunavanja vrsiti kada se klikne na nekodugme (umesto da promenu tekstualnog polja).

3. Dodati labelu koja ce, ukoliko je broj paran, sadrzati tekst ”PARAN”, a ukoliko nije,”NEPARAN”.

4. Dodati labelu koja ce, ukoliko je broj prost, sadrzati tekst ”PROST”, a ukoliko nije, tekst”NIJE PROST”.

Page 7: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

3 ZADATAK: KONVERZIJE [RADIOBUTTON] 7

3 Zadatak: Konverzije

[RadioButton]

Napraviti aplikaciju ”1 2” koja ce omoguciti konverziju izmedju dekadnog i heksadekadnogbrojevnog sistema. Izgled formulara je prikazan na slici 3.

Figure 3: Izled forme

Postupak:

1. Napraviti novu WindowsFormApplication i nazvati je 1 2

2. Na formu dodati 2 radio dugmeta (i postaviti odgovarajuci tekst za svaki od njih).

3. Na formu dodati 2 tekstualna polja. Postaviti da samo prvo polje moze da se menja.

4. Dvoklikom na prvo tekstualno polje napraviti funkciju textBox1 TextChanged

5. Pomenuta funkcija ce se pozivati svaki put kada dodje do promene sadrzaja u okviruprvog tekstualnog polja. Iz tog razloga, u okviru ove funkcije treba implementirati samulogiku aplikacije (sva izracunavanja). Za dodatna obrazlozenja, pogledajte komentare ukodu ispod.

3.1 Resenje

using System;

2 using System.Collections.Generic;

using System.ComponentModel;

4 using System.Data;

using System.Drawing;

6 using System.Linq;

using System.Text;

8 using System.Windows.Forms;

10 namespace _1_2

{

12 public partial class Konverzije : Form

{

14 /* Promenljiva koja ce nam pamtiti informaciju o tome koje prevodjenje vrsimo:

1 - iz heksadekadnog u dekadno

16 2 - iz dekadnog u heksadekadno

*/

18 private int konverzija = 1;

20 public Konverzije ()

{

22 InitializeComponent ();

}

24

private void rb2_CheckedChanged(object sender , EventArgs e)

26 {

/* Ukoliko korisnik izabere drugo radio dugme , menjamo konverziju na 2

28 i praznimo sadrzaj oba tekstualna polja */

konverzija = 2;

30 textBox1.Text = "";

Page 8: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

3 ZADATAK: KONVERZIJE [RADIOBUTTON] 8

textBox2.Text = "";

32 }

34 private void rb1_CheckedChanged(object sender , EventArgs e)

{

36 /* Ukoliko korisnik izabere prvo radio dugme , menjamo konverziju na 1

i praznimo sadrzaj oba tekstualna polja */

38 konverzija = 1;

textBox1.Text = "";

40 textBox2.Text = "";

}

42

/* Funkcija koja se poziva svaki put kada dodje do neke promene prvog tekstualnog polja*/

44 private void textBox1_TextChanged(object sender , EventArgs e)

{

46 if (konverzija == 1) /* Prebacujemo iz heksadekadnog sistema u dekadni */

{

48 /* Uzimamo vrednost koja se nalazi u prvom tekstualnom polju.*/

string hex_broj = textBox1.Text;

50

int rezultat = 0;

52

/*U promenljivoj n cuvamo duzinu broja */

54 int n = hex_broj.Length;

56 /* Obradjujemo heksadekadni broj sa desna na levo:

(1A5B) = B*1 + 5*16 + A*(16^2) + 1*(16^3)

58 = 11*1 + 5*16 + 10*(16^2) + 1*(16^3)

*/

60

for (int i=n - 1; i >= 0; i--){

62 /*U promenljivu cifra smestamo trenutnu cifru.

Ukoliko je broj ispravan , cifra moze imati

64 vrednosti izmedju 0 i 9 ili izmedju A i F.*/

char cifra = char.ToUpper(hex_broj.ElementAt(i));

66 int c;

68 if (int.TryParse(cifra.ToString (), out c)) /* PROCITANA JE CIFRA 0-9:*/

{

70 /* Funkcija TryParse u prosledjenu promenljivu

c smesta vrednost procitanog broja i vraca

72 * vrednost True.*/

rezultat += c*(int)Math.Pow(16, n-1-i);

74 }

else if (cifra >= ’A’ && cifra <= ’F’) /* PROCITANO JE SLOVO A-F*/

76 {

rezultat += (cifra - ’A’ + 10) * (int)Math.Pow(16, n - 1 - i);

78 }

else /* NEISPRAVAN ULAZ*/

80 {

rezultat = 0;

82 break;

}

84 }

textBox2.Text = rezultat.ToString ();

86 }

else {

88 /* Prebacujemo iz dekadnog sistema u heksadekadni */

90 /* Uzimamo broj koji se trenutno nalazi u prvom tekstualnom polju*/

string dec_broj = textBox1.Text;

92

/*U promenljivoj n pamtimo njegovu duzinu */

94 int n = dec_broj.Length;

96 int broj = 0, ostatak;

string rezultat = "";

98

/* Pokusavamo da procitamo broj iz date niske */

100 if (int.TryParse(dec_broj , out broj))

{

102 /* Ukoliko smo procitali broj , treba da izracunamo njegovu

heksadekadnu vrednost. Ona se racuna tako sto broj delimo

104 sa 16 i zapisujemo ostatak , a kolicnik dalje delimo , dok

god ne dodjemo do 0.

106 npr: 1234 = ...

Page 9: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

3 ZADATAK: KONVERZIJE [RADIOBUTTON] 9

1234/16 = 77 (2)

108 77/16 = 4 (13)

4/16 = 0 (4)

110 Pa je trazeni broj u heksadekadnom sistemu 4D2 , dobijen tako

sto se ostaci zapisu u obrnutom poretku , pri cemu 10 --> A,

112 11 --> B, ..., 15 --> F*/

114 while (broj !=0) {

/* Racunamo ostatak */

116 ostatak = broj % 16;

118 if (ostatak < 10)

{ /* Ukoliko je on 0-9, samo ga nadovezujemo sa leve strane tekuceg rezultata.

120 NAPOMENA: U C# stringovi se mogu nadovezivati koriscenjem operatora ’+’.*/

rezultat = ostatak.ToString () + rezultat;

122 }

else

124 { /* Ukoliko je ostatak >= 10, konstruisemo odgovarajuce slovo i nadovezujemo ga

sa leve strane */

126 char c = (char)(’A’ + ostatak -10);

rezultat = c.ToString () + rezultat;

128 }

130 /*Broj delimo sa 16 kako bismo dobili kolicnik i postupak ponavljamo dok god taj

kolicnik ne postane 0*/

132 broj /= 16;

}

134 textBox2.Text = rezultat.TrimStart(’0’);

}

136 }

}

138 }

}

3.2 Domaci zadatak

1. Napraviti aplikaciju za konverziju izmedju sistema sa osnovom 7 i dekadnog sistema.

2. Napraviti aplikaciju za konverziju izmedju binarnog i oktalnog brojevnog sistema.

3. Napraviti aplikaciju za konverziju izmedju sistema sa osnovom k i dekadnog sistema. kmoze uzimati vrednosti izmedju 2 i 9 i zadaje se preko tekstualnog polja.

Page 10: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

4 ZADATAK: RAD SA DATUMIMA [KLASE DATETIME I TIMESPAN] 10

4 Zadatak: Rad sa datumima

[Klase DateTime i TimeSpan]

Napraviti aplikaciju ”1 3” koja ce ilustrovati neke osnovne funkcije za rad sa datumima. Izgledformulara je prikazan na slici 4.

Figure 4: Izled forme

Postupak:

1. Napraviti novu WindowsFormApplication i nazvati je 1 3

2. Na formu dodati jedno polje za unos datuma (DateTimePicker) i odgovarajucu labelu(”Izaberite datum”).

3. Ispod ovog polja dodati jednu labelu i postaviti da njen tekst bude prazan (u kodu -label2)

4. Iznad ovog polja dodati jos jednu labelu i postaviti da i njen tekst bude prazan (u kodu- label3)

5. Dvoklikom na formu napraviti funkciju Form1 Load i u njoj implementirati deo aplikacijekoja se odnosi na danasnji datum

6. Dvoklikom na polje za unos datuma napraviti funkciju dateTimePicker1 ValueChanged iu njoj implementirati deo aplikacije koja se odnosi na izabrani datum

Page 11: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

4 ZADATAK: RAD SA DATUMIMA [KLASE DATETIME I TIMESPAN] 11

4.1 Resenje

using System;

2 using System.Collections.Generic;

using System.ComponentModel;

4 using System.Data;

using System.Drawing;

6 using System.Linq;

using System.Text;

8 using System.Windows.Forms;

10 namespace _1_3

{

12 public partial class Form1 : Form

{

14 public Form1()

{

16 InitializeComponent ();

}

18

/*1. NACIN: Funkcija koja prevodi dane sa engleskog na srpski */

20 private string prevedi_dan(string dan) {

switch (dan) {

22 case "Monday":

return "Ponedeljak";

24 case "Tuesday":

return "Utorak";

26 case "Wednesday":

return "Sreda";

28 case "Thursday":

return "Cetvrtak";

30 case "Friday":

return "Petak";

32 case "Saturday":

return "Subota";

34 case "Sunday":

return "Nedelja";

36 }

return "Los␣prevod!";

38 }

40 /*2. NACIN [BOLJI !] Kolekcija koji cuva prevode i kojoj se pristupa sa:

dani[" eng_dan "] = "srp_dan ".

42 Npr. dani[" Monday "] = "Ponedeljak" itd.

*/

44 Dictionary <string , string > dani = new Dictionary <string , string >() {

{"Monday", "Ponedeljak"},

46 {"Tuesday", "Utorak"},

{"Wednesday", "Sreda"},

48 {"Thursday", "Cetvrtak"},

{"Friday", "Petak"},

50 {"Saturday", "Subota"},

{"Sunday", "Nedelja"}

52 };

54 /* Funkcija koja se zove svaki put kada se izabere novi datum. */

private void dateTimePicker1_ValueChanged(object sender , EventArgs e)

56 {

/* Vrednost izabranog datuma cuvamo u promenljivoj izabrani_datum */

58 DateTime izabrani_datum = dateTimePicker1.Value;

60 /* Funkcija ToShortString vraca zapis datuma u obliku mm/dd/gggg*/

label2.Text = "Izabrani␣datum␣je:␣" + izabrani_datum.ToShortDateString () + "\n";

62

/* Svojstvo DayOfWeek je nabrojivi tip (enum) koji moze imati vrednosti Monday , Tuesday ,

... ,Sunday */

64 label2.Text += "Dan:␣" + prevedi_dan(izabrani_datum.DayOfWeek.ToString ()) + "\n";

66 /*Novi DateTime objakat mozemo da napravimo na vise nacina. Jedan od tih nacina jeste da

pozovemo konstruktor ove klase , koji prima tri argumenta: godinu , mesec i dan.*/

68 DateTime nova_godina = new DateTime(izabrani_datum.Year , 12, 31);

70 /* Svojstvo Days predstavlja ukupan broj dana izmedju dva datuma (ceo broj)*/

label2.Text += "Od␣izabranog␣datuma␣do␣Nove␣godine␣ima␣jos␣" + (nova_godina -

izabrani_datum).Days + "␣dana.\n";

72

Page 12: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

4 ZADATAK: RAD SA DATUMIMA [KLASE DATETIME I TIMESPAN] 12

}

74

private void Form1_Load(object sender , EventArgs e)

76 {

label3.Text = "Danas␣je␣" + dani[DateTime.Today.DayOfWeek.ToString ()] + "\n";

78

/* Funkicja toShortTimeString vraca zapis vremena u fornatu HH:MM AM/PM*/

80 label3.Text += "Trenutno␣vreme␣je:␣" + DateTime.Now.ToShortTimeString () + "\n";

82 /* Drugi nacin da napravimo DateTime objekat jeste da pozovemo konstruktor koji prima

6 argumenata: godinu , mesec , dan , sat , minut , sekund.

84 Posto mi hocemo da napravimo datum koji ce predstavljati ponoc:

Godina: trenutna

86 Mesec: trenutni

Dan: trenutni + 1

88 Sat: 0

Minut: 0

90 Sekund: 0

*/

92 DateTime ponoc = new DateTime(DateTime.Today.Year , DateTime.Today.Month , DateTime.Today.

Day + 1, 0, 0, 0);

94 /* Razlika izmedju dva datuma je objekat koji je tipa TimeSpan (a ne DateTime !).

Funkcija Subtract oduzima dva datuma. Umesto nje , mogli smo da napisemo i:

96 ponoc - DateTime.Now*/

TimeSpan razlika = ponoc.Subtract(DateTime.Now);

98

label3.Text += "Do␣ponoci␣ima␣jos␣" + razlika.Hours + "␣sati␣i␣" + (razlika.Minutes + 1)

+ "␣minuta .\n";

100 }

}

102 }

4.2 Domaci zadatak

1. Napraviti aplikaciju koja ispisuje ukupan broj dana do kraja semestra.

2. Napraviti aplikaciju koja za uneti datum (koji prestavlja prvi termin casa) ispisuje svetermine casova iz MNRB u jednu labelu. Na primer, ako se unese datum 2/22/2016, ispistreba da izgleda ovako:Ponedeljak, 2/22/2016Ponedeljak, 2/29/2016Ponedeljak, 3/7/2016...Ponedeljak, 5/30/2016Pored ovoga, na dnu formulara treba da stoji recenica: Do sledeceg casa ima jos dana,sati i minuta.

Page 13: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

5 STA SMO SVE NAUCILI DO SAD? 13

5 Sta smo sve naucili do sad?

5.1 Graficke komponente, njihova svojstva (eng. Properties) i do-gadjaji (eng. Events)

Komponenta ListBox

• Svojstva

⋄ Items – Kolekcija koja cuva elemente liste. Ako imamo listBox l, operacijal.Items.Clear() vrsi brisanje svih elemenata ove kolekcije, a operacija l.Items.Add(el)vrsi dodavanje elementa el u listu l.

Komponenta Button

• Svojstva

⋄ Text – Tekst koji stoji na dugmetu

• Dogadjaji

⋄ Click – Dogadjaj koji oznacava klik na dugme. Ukoliko hocemo da napisemofunkciju koja ce se pozivati svaki put kada se klikne na neko dugme, dovoljnoje uraditi dvoklik na zeljeno dugme u delu za dizajn formulara i funkcija ce sesama napraviti i bice oblika:

pr i va t e void ImeDugmeta Click ( ob j e c t sender , EventArgs e ) {2

}

Sve sto je potrebno uraditi je napisati zeljeni kod u telo funkcije.

Komponenta Label

• Svojstva

⋄ Text – Tekst koji se nalazi na labeli

Komponenta TextBox

• Svojstva

⋄ Text – Tekst koji se nalazi unutar tekstualnog polja

⋄ Enabled – Svojstvo koje oznacava da li je moguce pisati u tekstualno polje iline. Moze imati vrednosti True ili False.

• Dogadjaji

⋄ TextChanged – Dogadjaj koji oznacava da je doslo do promene teksta unutartekstualnog polja. Ukoliko hocemo da napisemo neku funkciju koja ce se pozivatisvaki put kada dodje do promene teksta u tekstualnom polju, potrebno je dauradimo dvoklik na samo tekstualno polje. Ovim ce se napraviti funkcija oblika:

pr i va t e void ImePolja TextChanged ( ob j e c t sender , EventArgs e ) {2

}

Komponenta RadioButton - vise izbora, od kojih je moguce izabrati najvise 1.

Page 14: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

5 STA SMO SVE NAUCILI DO SAD? 14

• Svojstva

⋄ Checked – Svojstvo koje oznacava da li je to dugme cekirano ili ne. Moze imativrednosti True ili False.

• Dogadjaji

⋄ CheckedChanged – Dogadjaj koji oznacava da je doslo do promene na radiodugmicima. Ukoliko zeliko da implementiramo funkciju koja ce se pozivati svakiput kada dodje do ovog dogadjaja, potrebno je uraditi dvoklik na radio dugmei generisace se funkcija oblika:

pr i va t e void ImeRadioDugmeta CheckedChanged ( ob j e c t sender ,EventArgs e ) {

2

}

Komponenta DateTimePicker

• Svojstva

⋄ Value – Vrednost izabranog datuma.

• Dogadjaji

⋄ ValueChanged – Dogadjaj koji oznacava da je doslo do promene datuma. Ukolikozeliko da implementiramo funkciju koja ce se pozivati svaki put kada dodje doovog dogadjaja, potrebno je uraditi dvoklik na DateTimePicker i generisace sefunkcija oblika:

pr i va t e void ImeRadioDugmeta ValueChanged ( ob j e c t sender , EventArgse ) {

2

}

5.2 Koriscenje funkcije

• bool int.TryParse(string tekst, out int broj)

• MessageBox.Show(”poruka”)

• MessageBox.Show(”poruka”, ”zaglavlje”)

• double Math.Pow(double broj, double stepen)

• char.ToUpper(c) – funkcija koja prosledjeno malo slovo pretvara u veliko. Ako c nije maloslovo, ne dolazi do bilo kakve promene.

• neki objekat.toString()

• Svojstva i funkcije nad stringovima (recimo da imamo string s)

⋄ s.Length – svojstvo koje oznacava duzinu stringa

⋄ s.TrimStart(c) – funkcija kojom se sa pocetka niske uklanjaju sva pojavljivanjakaraktera c. (npr. s=”aabrs”, c=’a’, nakon operacije s.TrimStart(c), s ce biti ”brs”)

⋄ s.ElementAt(i) – funkcija koja vraca karakter koji se nalazi na poziciji i.

• Svojstva i funkcije objekta klase DateTime (recimo da imamo konkretan objekat Date-Time d)

Page 15: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

5 STA SMO SVE NAUCILI DO SAD? 15

⋄ d.DayOfWeek

⋄ d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, d.Millisecond

⋄ d.ToShortDateString()

⋄ d.ToShortTimeString()

⋄ d.Subtract(d2) == d - d2NAPOMENA: Oduzimanjem dva objekta cija je klasa DateTime, dobijamo noviobjekat cija je klasa TimeSpan!

⋄ DateTime.Now – svojstvo koje oznacava trenutni datum i vreme

⋄ DateTime.Today – svojstvo koje oznacava trenutni datum (vreme je postavljeno na00:00:00).

• Svojstva i funkcije objekta klase TimeSpan (recimo da imamo TimeSpan t, dobijen takosto smo od d1 oduzeli d2, pri cemu su d1 i d2 datumi klase DateTime)

⋄ t.Days – svojstvo koje oznacava ukupan broj dana izmedju d1 i d2

⋄ t.Hours – svojstvo koje oznacava broj minuta izmedju d1 i d2 (moze imati vrednost0-23)

⋄ t.Minutes – svojstvo koje oznacava broj minuta izmedju d1 i d2 (moze imati vrednost0-59)

⋄ t.Seconds – svojstvo koje oznacava broj sekunsi izmedju d1 i d2 (moze imati vrednost0-59)

⋄ t.TotalHours – svojstvo koje oznacava ukupan broj sati izmedju d1 i d2

⋄ t.TotalMinutes – svojstvo koje oznacava ukupan broj minuta izmedju d1 i d2

⋄ t.TotalSeconds – svojstvo koje oznacava ukupan broj sekundi izmedju d1 i d2

Page 16: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

6 ZADATAK: DIGITRON 16

6 Zadatak: Digitron

Napraviti aplikaciju Digitron koja ce podrzavati operacije (+, -, *, /) sa celim i realnim broje-vima.

Figure 5: Izled forme

Aplikaciju razvijati po sledecim koracima:

1. Napraviti novu WindowsFormApplication i nazvati je Digitron.

2. Pozadinu forme postaviti na boju Teal, naslov forme na Digitron, velicinu forme na265*310, font na Georgia i velicinu slova 12pt.

3. Na formu dodati polje za unos teksta dimenzije 178*26

4. Na formu dodati dugmice:

(a) Za brojeve 1-9 i tacku: velicina 40*40

(b) Za broj 0: velicina 85*40

(c) Za operacije *, /, -, AC: velicina 40*25

(d) Za operacije + i =: velicina 40*86

(e) Za operaciju C: velicina 40*25, za pozadinu postaviti sliku backspace.png (skinutisa sajta).

5. Dugmicima postaviti odgovarajuca imena na osnovu kojih cemo im pristupati iz koda(opcija Name): B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, Podeljeno, Puta, Plus, Minus,Jednako, Tacka, AC, C. Napomena: Ovo nije obavezan korak, ali ce nam znacajno olaksatirad. Podrazumevani nazivi dugmica su button1, button2, ..., buttonX. Ovakvi nazivi nisuzgodni, jer onda u kodu ne znamo koji naziv se odnosi na koje dugme (npr. znak + bimogao da ima naziv button14, a mnogo je zgodnije da se zove Plus).Tekstualnom polju dodeliti ime unos.

6. Zabraniti unos sa tastature u tekstualno polje. Postaviti pozadinu tekstualnog polja nabelu.

7. Implementirati sve operacije, tako da digitron lepo radi sa celim brojevima (ignorisatidugme Tacka).

Page 17: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

6 ZADATAK: DIGITRON 17

8. Kada se klikne na dugme za brisanje (sa slicicom), potrebno je da se obrise samo poslenjauneta cifra (ili operacija).

9. Kada se klikne na dugme AC potrebno je da se obrise sav sadrzaj unosa.

10. Implementirati sve operacije, tako da rade i sa realnim brojevima

11. Voditi racuna o:

(a) Deljenje nulom

(b) Broj ne moze da sadrzi vise od jedne decimalne tacke (npr. 4.33.2 nije ispravan broj)

(c) Zabraniti unos izraza 123 /+ ili 22 ** 45 i slicno. Izraz mora biti oblika: brojoperacija broj

6.1 Resenje

using System;

2 using System.Collections.Generic;

using System.ComponentModel;

4 using System.Data;

using System.Drawing;

6 using System.Linq;

using System.Text;

8 using System.Windows.Forms;

10 namespace Digitron

{

12 public partial class Form1 : Form

{

14 /* Promenljive koje nam pamte operande , operaciju i rezultat */

private double rezultat;

16 private double levi;

private double desni;

18 /*’N’ ce nam biti oznaka da operacija jos uvek nije uneta */

private char operacija = ’N’;

20

public Form1()

22 {

InitializeComponent ();

24 }

26 /* Funkcija koja se zove odmah po ucitavanju forme*/

private void Form1_Load(object sender , EventArgs e)

28 {

/* Zabrana unosa sa tastature u tekstualno polje*/

30 unos.Enabled = false;

32 /* Postavljanje desnog poravnanja */

unos.TextAlign = HorizontalAlignment.Right;

34

/* Postavljanje pozadine na belu*/

36 unos.BackColor = Color.White;

}

38

/* Funkcija kada se klikne na dugme 1.

40 Napomena: B1 je ime koje smo mi dodelili dugmetu 1 na samom formularu!

Isto vazi za B2 ,...B9*/

42 private void B1_Click(object sender , EventArgs e)

{

44 /*Kada kliknemo na dugme 1, na trenutni tekst nadovezujemo 1*/

unos.Text = unos.Text + "1";

46 }

48 private void B2_Click(object sender , EventArgs e)

{

50 unos.Text = unos.Text + "2";

}

52

Page 18: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

6 ZADATAK: DIGITRON 18

private void B3_Click(object sender , EventArgs e)

54 {

unos.Text = unos.Text + "3";

56 }

58 private void B4_Click(object sender , EventArgs e)

{

60 unos.Text = unos.Text + "4";

}

62

private void B5_Click(object sender , EventArgs e)

64 {

unos.Text = unos.Text + "5";

66 }

68 private void B6_Click(object sender , EventArgs e)

{

70 unos.Text = unos.Text + "6";

}

72

private void B7_Click(object sender , EventArgs e)

74 {

unos.Text = unos.Text + "7";

76 }

78 private void B8_Click(object sender , EventArgs e)

{

80 unos.Text = unos.Text + "8";

}

82

private void B9_Click(object sender , EventArgs e)

84 {

unos.Text = unos.Text + "9";

86 }

88 private void B0_Click(object sender , EventArgs e)

{

90 unos.Text = unos.Text + "0";

}

92

/* Funkcija koja se poziva kada se klikne na dugme /

94 U trenutku pozivanja funkcije , trebalo bi da je unesen levi operand.

Ukoliko nije , ignorisacemo klik na ovo dugme.

96 Ukoliko jeste , procitacemo vrednost levog operanda i sacuvacemo

ga u promenljivu levi i postavicemo da nam operacija bude deljenje.*/

98 private void Podeljeno_Click(object sender , EventArgs e)

{

100 /*

Funkcija Double.TryParse pokusava da od prosledjenog stringa napravi

102 realan broj. Ukoliko ova operacija prodje uspesno , funkcija vraca vrednost

true , a procitani broj smesta u promenljivu arg. Ako ne prodje uspesno , funkcija

104 vraca false.

Slicno ovoj funkciji , postoji i Int.TryParse(string , out int) koja od stringa pravi ceo

broj.

106 */

double arg;

108 bool r = Double.TryParse(unos.Text , out arg);

if (!r)

110 {

/*U slucaju da je parsiranje proslo neuspesno , ispisujemo poruku i izlazimo */

112 Console.WriteLine("Neuspesno␣parsiranje!␣Nije␣unet␣levi␣operand!");

return;

114 }

116 /*U slucaju da je parsiranje proslo uspesno , azuriramo vrednost levog operanda ,

postavljamo operaciju na / i nadovezujemo je na trenutni unos. */

118 this.levi = arg;

this.operacija = ’/’;

120 unos.Text = unos.Text + "/";

}

122

/* Funkcija Puta_Click funkcionise isto kao i funkcija Podeljeno_Click */

124 private void Puta_Click(object sender , EventArgs e)

{

126 double arg;

bool r = Double.TryParse(unos.Text , out arg);

Page 19: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

6 ZADATAK: DIGITRON 19

128 if (!r)

{

130 Console.Write("Neuspesno␣parsiranje!␣Nije␣unet␣levi␣operand!");

return;

132 }

this.levi = arg;

134 this.operacija = ’*’;

unos.Text = unos.Text + "*";

136 }

138 /* Funkcija Plus_Click funkcionise isto kao i funkcija Podeljeno_Click */

private void Plus_Click(object sender , EventArgs e)

140 {

double arg;

142 bool r = Double.TryParse(unos.Text , out arg);

if (!r)

144 {

Console.Write("Neuspesno␣parsiranje!␣Nije␣unet␣levi␣operand!");

146 return;

}

148

this.levi = arg;

150 this.operacija = ’+’;

unos.Text = unos.Text + "+";

152 }

154 /* Funkcija Minus_Click je nesto slozenija , jer operacija - moze biti i unarna

i binarna. */

156 private void Minus_Click(object sender , EventArgs e)

{

158 double arg;

bool r = Double.TryParse(unos.Text , out arg);

160 if (r)

{

162 /*Ako smo uspesno procitali levi operand , onda je - sigurno binarna operacija

i to nam je osnovni slucaj (isto kao kod +,*,/)*/

164 this.operacija = ’-’;

this.levi = arg;

166 unos.Text = unos.Text + "-";

}

168 else

{

170 /*Ako nismo uspesno isparsirali levi operand , jedna opcija nam je

da se - unosi kao prvi znak (npr. izraz -3*6)

172 Ako je to slucaj , samo upisujemo - u unos i vracamo se nazad.*/

if (unos.Text.Length == 0)

174 {

unos.Text = unos.Text + "-";

176 return;

}

178

/* Poslednji slucaj je da je u pitanju unarni -, ali za desni operand

180 (npr. 56* -5)

U tom slucaju , poslednji karaker u nasem unosu bi morao da bude operand

182 i to * ili / (nema smisla dozvoliti unos 5+-3 ili 5--3).

Ako je to ispunjeno , onda dozvoljavamo unos znaka -.

184 Funkcija ElementAt vraca element niza ili niske koji se nalazi na

prosledjenoj poziciji. Kako nama treba poslednji element ,

186 mi kao poziciju prosledjujemo duzinu stringa - 1.

*/

188 char op = unos.Text.ElementAt(unos.Text.Length - 1);

if (op == ’*’ || op == ’/’)

190 {

unos.Text = unos.Text + "-";

192 }

}

194 }

196 /* Funkcija Jednako_Click se poziva klikom na dugme =.

Vrednost izraza mozemo da racunamo samo ukoliko su zadati i levi operand

198 i operacija i desni operand.

Ako je operacija ispravno uneta , vrednost levog operanda nam se cuva u

200 promenljivoj levi.

*/

202 private void Jednako_Click(object sender , EventArgs e)

{

Page 20: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

6 ZADATAK: DIGITRON 20

204 /* Proveravamo da li u izrazu postoji operacija

Napomena: Koristimo LastIndexOf umesto IndexOf iz razloga sto hocemo

206 da pretrazujemo sa dena na levo , jer recimo u izrazu:

-5-5, operacija je -, ali levi operand je -5, a desni operand je 5.

208 Funkcija IndexOf ce nam vratiti 0 (indeks prvog minusa)

Funkcija LastIndexOf ce nam vratiti 2 (indeks poslednjeg minusa), sto nam i treba */

210 int pos = unos.Text.LastIndexOf(this.operacija);

if (pos == -1)

212 return;

214 bool r = Double.TryParse(unos.Text.Substring(pos + 1), out this.desni);

if (!r)

216 return;

218 switch (this.operacija) {

case ’+’:

220 this.rezultat = this.levi + this.desni;

break;

222 case ’-’:

this.rezultat = this.levi - this.desni;

224 break;

case ’/’:

226 if (this.desni == 0)

{

228 MessageBox.Show("Deljenje␣nulom!");

return;

230 }

this.rezultat = this.levi / this.desni;

232 break;

case ’*’:

234 this.rezultat = this.levi * this.desni;

break;

236 case ’N’:

default:

238 MessageBox.Show("Greska!");

break;

240 }

242 /*Po zavrsetku racunanja u polje za tekst upisujemo rezultat , a operaciju resetujemo na

N. */

unos.Text = this.rezultat.ToString ();

244 this.operacija = ’N’;

}

246

/* Fukcija kojom se klikom na dugme C brise poslednji karakter iz

248 tekstualnog polja */

private void C_Click(object sender , EventArgs e)

250 {

/* Obavezna provera da li je polje vec prazno!

252 Funkcija substring izdvaja podstring datog stringa , pri cemu prima dva argumenta:

Indeks pocetka i duzinu. Kako nama treba sve osim poslednjeg karaktera ,

254 pocinjemo od pozicije 0 i uzimamo string za 1 kraci od trenutnog. */

if(unos.TextLength > 0)

256 unos.Text = unos.Text.Substring (0, unos.Text.Length -1);

}

258

/* Funkcija koja brise sve sto se nalazi u tekstualnom polju*/

260 private void AC_Click(object sender , EventArgs e)

{

262 unos.Text = "";

this.levi = 0;

264 this.desni = 0;

this.operacija = ’N’;

266 }

268 /* Funkcija koja se poziva klikom na decimalnu tacku. */

private void Tacka_Click(object sender , EventArgs e)

270 {

272 if (this.operacija == ’N’)

{

274 /* Postoji samo levi operand , sto znaci da u polju za unos teksta

mozemo da imamo najvise jednu tacku.

276 */

if (this.unos.Text.IndexOf(’.’) == -1)

278 this.unos.Text = this.unos.Text + ".";

Page 21: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

6 ZADATAK: DIGITRON 21

}

280 else {

/* Postoje i levi i desni operand. Mi smo se osigurali da nam je levi operand

282 ispravan. To znaci da sada treba da obezbedimo da to vazi i za desni.*/

int ind = this.unos.Text.IndexOf(this.operacija);

284 if(this.unos.Text.IndexOf(’.’, ind+1) == -1)

this.unos.Text = this.unos.Text + ".";

286 }

}

288 }

}

6.2 Sta smo sve naucili na ovom casu

6.2.1 Graficke komponente, njihova svojstva (eng. Properties) i dogadjaji (eng.Events)

Svojstvo Name - Oznacava ime samog elementa. Sluzi za pristup komponenti iz programskogkoda. Ovo svojstvo imaju sve graficke komponente i iz tog razloga je u ovom tekstu izdvojenapre svih komponenti.

Komponenta Form - glavna komponenta, na koju dodajemo sve ostale komponente.

• Svojstva

⋄ Backcolor – Boja pozadine

⋄ Font – Podesavanje tipa i velicine slova

⋄ Size – Velicina u pikselima. Zadaje se pomocu dva broja, razdvojena zarezom(npr. 300,400 oznacava formu, sirine 300px i visine 400px)

• Dogadjaji

⋄ Load – Dogadjaj koji oznacava ucitavanje same forme. Ukoliko hocemo da im-plementiramo funkciju koja ce se pozvati pri ucitavanju forme, dovoljno je danapravimo dvoklik bilo gde na formi. Ovim ce se napraviti funkcija oblika:

pr i va t e void ImeForme Load ( ob j e c t sender , EventArgs e ) {2

}

Ova funkcija moze da bude zgodna za razne inicijalizacije i pocetna podesavanja.

Komponenta Button

• Svojstva

⋄ Enable – Svojstvo koje oznacava da li je omogucen klik na to dugme ili ne. Mozeimati vrednosti True ili False.

⋄ Backcolor – Boja pozadine

⋄ BackgroundImage – Postavljanje slike na pozadinu

⋄ Font – Podesavanje tipa i velicine teksta

⋄ Size – Velicina u pikselima. Zadaje se pomocu dva broja, razdvojena zarezom(npr. 40,40 oznacava dugme, sirine 40px i visine 40px)

⋄ Text – Tekst koji stoji na dugmetu

⋄ TextAlign – Poravnanje teksta (podrazumevano MiddleCenter)

⋄ Visible – Svojstvo koje oznacava da li je dugme vidljivo ili ne. Ukoliko hocemoda sakrijemo dugme, ovo svojstvo mozemo da postavimo na False.

Page 22: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

6 ZADATAK: DIGITRON 22

• Dogadjaji

⋄ Click – Dogadjaj koji oznacava klik na dugme. Ukoliko hocemo da napisemofunkciju koja ce se pozivati svaki put kada se klikne na neko dugme, dovoljnoje uraditi dvoklik na zeljeno dugme u delu za dizajn formulara i funkcija ce sesama napraviti i bice oblika:

pr i va t e void ImeDugmeta Click ( ob j e c t sender , EventArgs e ) {2

}

Sve sto je potrebno uraditi je napisati zeljeni kod u telo funkcije.

Komponenta TextBox

• Svojstva

⋄ Enable – Svojstvo koje oznacava da li je omogucen unos teksta ili ne. Mozeimati vrednosti True ili False.

⋄ Backcolor – Boja pozadine

⋄ Font – Podesavanje tipa i velicine teksta

⋄ Size – Velicina u pikselima. Zadaje se pomocu dva broja, razdvojena zarezom.

⋄ Text – Tekst koji stoji u tekstualnom polju

⋄ TextAlign – Poravnanje teksta (podrazumevano Left)

• Dogadjaji

⋄ TextChanged – Dogadjaj koji oznacava da je doslo do neke promene u tekstual-nom polju.

Napomena: Sva svojstva je moguce podesavati na dva nacina:1. Koriscenjem grafickog interfejsa (u prozoru Properties)2. Iz koda - koriscenjem notacije ImeKomponente.Svojstvo = Vrednost (npr. unos.Enabled =False)

6.2.2 Koriscene funkcije

• Double.TryParse(string s, out double broj)

• Int.TryParse(string s, out int broj)

• Console.WriteLine(”message”)

• Svojstva i funkcije nad stringovima (recimo da imamo string s)

⋄ s.Length – svojstvo koje oznacava duzinu stringa

⋄ s.ElementAt(i) – funkcija koja vraca karakter na poziciji i

⋄ s.IndexOf(c) – funkcija koja vraca poziciju karaktera c (prvo pojavljivanje)

⋄ s.LastIndexOf(c) – funkcija koja vraca poziciju karaktera c (poslednje pojavljivanje)

⋄ s.Substring(pos) – funkcija koja vraca podnisku niske s, pocev od pozicije pos

⋄ s.Substring(pos, length) – funkcija koja vraca podnisku niske s, pocev od pozicijepos, duzine length

• MessageBox.Show(”message”)

Page 23: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

6 ZADATAK: DIGITRON 23

6.3 Domaci zadatak

Dodati jednu labelu na dnu formulara. Postaviti da se svaki put kada neko pokusa da zadaneregularan izraz, u tu labelu upise odgovarajuca poruka. Na primer, poruka moze da bude”Zabranjeno deljenje nulom!” ili ”Ne mozete da unesete dva operatora za redom” ili ”Ne mozeteda unesete dve decimalne tacke u okviru istog broja” i slicno. Postaviti da tekst u labeli budeispisan crvenim slovima i da bude centriran.

Page 24: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

7 ZADATAK: CRTANJE 24

7 Zadatak: Crtanje

Napraviti aplikaciju Crtanje, koje omogucava korisniku da nacrta neki od ponudjenih oblika(elipsa, krug, kvadrat, pravougaonik, linija). Takodje, korisnik treba da moze da zada dimenzijefigure, kao i boju i debljinu linije. Korisnik crta oblike klikom na pictureBox. Mesto klika misemtreba da bude centar figure koja se crta.

Figure 6: Izled forme

Aplikaciju razvijati po sledecim koracima:

1. Napraviti novu WindowsFormApplication i nazvati je Crtanje.

2. Na formu dodati pictureBox i postaviti mu pozadinu na belu, 5 radio dugmica, 3 polja zaunos numericke vrenosti (numericUpDown) i nazvati ih debljina, a i b, 2 dugmeta i jedandijalog za izbor boje.

3. Obezbediti da se svaki put, kada dodje do promene izbora oblika koji se crta, promeni ivrednost odgovarajuce globalne promenljive.

4. Obezbediti da se svaki put, kada dodje do promene debljine ili neke od dimenzija, promenii vrednost odgovarajuce globalne promenljive

5. Obezbediti da se klikom na dugme ”Obrisi”, obrise sadrzaj pictureBox-a.

6. Obezbediti da se klikom na dugme ”Izaberi boju”, pojavi dijalog za izbor boje i ukolikokorisnik izabere neku boju, treba da dodje do promene odgovarajuce globalne promenljivei treba obojiti pozadinu tog dugmeta u izabranu boju.

7. Obezbediti da se klikom na pictureBox, nacrta izabrani objekat, uzimajuci u obzir bojui debljinu linije, kao i dimenzije a i b. Potrebno je da mesto gde je kliknuto, bude centarobjekta koji se crta. (korititi dogadjaj MouseDown)

8. U slucaju crtanja linije, dogadjaj MouseDown ce oznaciti koordinate pocetne tacke, adogadjaj MouseUp koordinate krajnje tacke linije.

9. Dodati da se pored ”praznog” objekta, crta i jedan popunjeni (sa istim centrom i dimen-zijama). Postaviti da njegova boja bude narandzasta.

Page 25: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

7 ZADATAK: CRTANJE 25

7.1 Resenje

using System;

2 using System.Collections.Generic;

using System.ComponentModel;

4 using System.Data;

using System.Drawing;

6 using System.Linq;

using System.Text;

8 using System.Windows.Forms;

10 namespace _2_0

{

12 public partial class Form1 : Form

{

14 public Form1()

{

16 InitializeComponent ();

}

18

Graphics g;

20 int x, y;

int objekat;

22 int a_num;

int b_num;

24 int debljina_olovke;

Color boja;

26 Pen olovka;

28 /* Funkcija koja se poziva pri ucitavanju forme. */

private void Form1_Load(object sender , EventArgs e)

30 {

/*Da bismo crtali oblike koje zelimo , neophodan nam je objekat tipa Graphics. On nema

svoju graficku

32 reprezentaciju , vec ga je potrebno pridruziti nekom od postojecih objekata. U ovom

slucaju to je

pictureBox1. Da smo hteli da crtamo nesto preko celog naseg formulara , napisali bismo:

34 g = Form1.CreateGraphics ();

Na neki nacin , Graphics mozemo posmatrati kao platno za crtanje.

36 */

g = pictureBox1.CreateGraphics ();

38

/* Inicijalizavija globalnih promenljivih */

40 a_num = (int)a.Value;

b_num = (int)b.Value;

42 debljina_olovke = (int)debljina.Value;

objekat = 1;

44 boja = Color.Purple;

}

46

/*

48 Za crtanje objekata koji imaju samo konturu , koristimo objekat tipa Pen (olovku) i

metode DrawEllipse , DrawRectangle.

Za crtanje objekata koji su popunjeni , koristimo objekat tipa SolidBrush (cetku) i

metode FillEllipse , FillRectangle.

50

Sva 4 metoda imaju sledece argumente:

52 1. : olovka / cetka

2. i 3.: x i y koordinata gornjeg levog ugla pravougaonika u koji je upisan

zeljeni oblik

54 4. : sirina

5. : visina

56

Koordinate klika misem su e.X i e.Y.

58

Posmatrajmo metod DrawEllipse:

60 Ukoliko ga pozovemo sa:

g.DrawEllipse(olovka , e.X, e.Y, a, b);

62 Nacrtacemo elipsu dimenzija a i b, ali ciji centar nije u (e.X, e.Y), vec u (e.X + a

/2, e.Y + b/2).

64 Ako hocemo da centar bude bas tu gde smo kliknuli , onda moramo da izvrsimo korekciju ,

tj. da oduzmemo tih a/2 i b/2.

66 Analogno vazi za sve ostalo.

*/

Page 26: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

7 ZADATAK: CRTANJE 26

68 private void pictureBox1_MouseDown(object sender , MouseEventArgs e)

{

70

olovka = new Pen(boja , debljina_olovke);

72 SolidBrush cetka = new SolidBrush(Color.Orange);

x = e.X;

74 y = e.Y;

// timer1.Start ();

76 switch (objekat) {

case 2:

78 g.DrawEllipse(olovka , e.X-( a_num /2), e.Y-b_num/2, a_num , b_num);

g.FillEllipse(cetka , e.X - (a_num / 2), e.Y - b_num / 2, a_num , b_num);

80 break;

case 3:

82 g.DrawEllipse(olovka , e.X - a_num / 2, e.Y - a_num / 2, a_num , a_num);

g.FillEllipse(cetka , e.X - (a_num / 2), e.Y - a_num / 2, a_num , a_num);

84 break;

case 4:

86 g.DrawRectangle(olovka , e.X-a_num/2, e.Y-a_num/2, a_num , a_num);

g.FillRectangle(cetka , e.X - (a_num / 2), e.Y - a_num / 2, a_num , a_num);

88 break;

case 5:

90 g.DrawRectangle(olovka , e.X-a_num/2, e.Y-b_num/2, a_num , b_num);

g.FillRectangle(cetka , e.X - (a_num / 2), e.Y - b_num / 2, a_num , b_num);

92 break;

94

}

96 }

98 private void pictureBox1_MouseUp(object sender , MouseEventArgs e)

{

100 if (objekat == 1)

{

102 olovka = new Pen(boja , debljina_olovke);

g.DrawLine(olovka , x, y, e.X, e.Y);

104 }

}

106

private void radioButton1_CheckedChanged(object sender , EventArgs e)

108 {

objekat = 1;

110 }

112 private void radioButton3_CheckedChanged(object sender , EventArgs e)

{

114 objekat = 2;

}

116

private void radioButton2_CheckedChanged(object sender , EventArgs e)

118 {

objekat = 3;

120 }

122 private void radioButton4_CheckedChanged(object sender , EventArgs e)

{

124 objekat = 4;

}

126

private void radioButton5_CheckedChanged(object sender , EventArgs e)

128 {

objekat = 5;

130 }

132 private void a_ValueChanged(object sender , EventArgs e)

{

134 a_num = (int)a.Value;

}

136

private void b_ValueChanged(object sender , EventArgs e)

138 {

b_num = (int)b.Value;

140 }

142 private void debljina_ValueChanged(object sender , EventArgs e)

{

Page 27: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

7 ZADATAK: CRTANJE 27

144 debljina_olovke = (int)debljina.Value;

}

146

/* Brisanje "platna" klikom na dugme "Obrisi"*/

148 private void button1_Click(object sender , EventArgs e)

{

150 g.Clear(Color.White);

}

152

/* Prikazivanje dijaloga za izbor boje , klikom na dugme "Izaberi boju"*/

154 private void button2_Click(object sender , EventArgs e)

{

156 if (colorDialog1.ShowDialog () == DialogResult.OK)

{

158 boja = colorDialog1.Color;

button2.BackColor = boja;

160 }

}

162

/*

164 Funkcija koja se poziva na neki odredjeni vremenski period

(ova vrednost se zadaje svojstvom Interval).

166 */

private void timer1_Tick(object sender , EventArgs e)

168 {

/* olovka = new Pen(boja , debljina_olovke);

170 g.DrawEllipse(olovka , x - (a_num / 2), y - b_num / 2, a_num , b_num);

a_num += 5;

172 b_num += 5;

if (a_num > 200)

174 timer1.Stop();

*/

176 }

178

}

180 }

7.2 Domaci zadatak

1. Modifikovati aplikaciju na sledeci nacin: Dodati jos jedno dugme za izbor boje i klikom napictureBox nacrtati dva objekta,jedan koji ima samo konturu, cija boja odgovara prvojizabranoj boji i jedan ”popunjeni” cija boja odgovara drugoj izabranoj boji. Centar obaobjekta treba da bude mesto gde je kliknuto misem. Objekte koji se crtaju birati pomocuradio dugmica.

2. Modifikovati aplikaciju tako da:1. Ako je izabran Pravougaonik/Kvadrat, povlacenje misa nam definise dijagonalu pravougaonika/k-vadrata.2. Ako je izabrana Elipsa/Krug, povlacenje misa nam definise dijagonalu pravougaonikau koji je upisana elipsa/krug.

Page 28: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

8 ZADATAK: TRKE 28

8 Zadatak: Trke

Napraviti aplikaciju ”Trke”, koja demonstrira trkanje dva automobila. Korisnik moze da zadajebrzine automobila. Automobili se, u skladu sa brzinom, pomeraju u desno. Kada jedan odautomobila stigne do cilja, potrebno je zaustaviti oba automobila i u MessageBox-u ispisatikoji automobil je pobedio.

Figure 7: Izled forme

Aplikaciju razvijati po sledecim koracima:

1. Napraviti novu WindowsFormApplication i nazvati je Trke.

2. Na formu dodati 2 pictureBox-a i postaviti im odgovarajuce slike automobila kao pozad-inu, dugme ”Start”, 2 polja za unos numericke vrenosti (numericUpDown) i jedan tajmer.

3. Obezbediti da se svaki put, kada dodje do promene brzine, promeni i vrednost odgo-varajucih globalnih promenljih (brzina1 i brzina2).

4. Obezbediti da se na svakih 100ms pictureBox1 pomeri u desno za brzinu1 i picturebox2pomeri u desno za brzinu2. Ukoliko neki automobil dodje do desne ivice prozora, potrebnoje zaustaviti tajmer i ispisati pobednika.

5. Obezbediti da se klikom na dugme ”Start”, pokrene tajmer.

6. Obezbediti da pri svakom pokretanju programa boja pozadine forme bude drugacija.

8.1 Resenje

using System;

2 using System.Collections.Generic;

using System.ComponentModel;

4 using System.Data;

using System.Drawing;

6 using System.Linq;

using System.Text;

8 using System.Windows.Forms;

10 namespace Trke

{

12 public partial class Form1 : Form

{

14 public Form1()

{

16 InitializeComponent ();

}

Page 29: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

8 ZADATAK: TRKE 29

18

int brzina1;

20 int brzina2;

22 private void Form1_Load(object sender , EventArgs e)

{

24 brzina1 = 5;

brzina2 = 5;

26 pictureBox1.Left = 0;

pictureBox2.Left = 0;

28 Random r = new Random(DateTime.Now.Millisecond);

this.BackColor = Color.FromArgb(r.Next() % 256, r.Next() % 256, r.Next() % 256);

30

}

32

private void timer1_Tick(object sender , EventArgs e)

34 {

36 if(pictureBox1.Left + pictureBox1.Width + brzina1 > this.Width){

timer1.Stop();

38 MessageBox.Show("Pobedio␣je␣prvi␣autic!");

}else

40 pictureBox1.Left += brzina1;

42 if (pictureBox2.Left + pictureBox2.Width + brzina2 > this.Width)

{

44 timer1.Stop();

MessageBox.Show("Pobedio␣je␣drugi␣autic!");

46 }

else

48 pictureBox2.Left += brzina2;

}

50

private void numericUpDown1_ValueChanged(object sender , EventArgs e)

52 {

brzina1 = (int)numericUpDown1.Value;

54 }

56 private void numericUpDown2_ValueChanged(object sender , EventArgs e)

{

58 brzina2 = (int)numericUpDown2.Value;

}

60

private void button1_Click(object sender , EventArgs e)

62 {

timer1.Start ();

64 }

}

66 }

8.2 Domaci zadatak

1. Napraviti aplikaciju koja odbrojava koliko je ostalo dana, sati, minuta, sekundi do krajasemestra.

2. Napraviti aplikaciju koja klikom na pictureBox iscrtava koncentricne krugove, ciji je centarmesto gde je kliknuto misem, a pocetni precnik 10px. Crtanje zaustaviti u trenutku kadaposlednji iscrtani krug dotakne ivicu pictureBox-a.

Page 30: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

9 ZADATAK: KVADRATIC 30

9 Zadatak: Kvadratic

Napraviti igricu koja funkcinise na sledeci nacin:Klikom na dugme ”Start” pojavljuje se kvadrat na nekom nasumicnom mestu na panelu. Tajkvadrat se na pocetku krece tako sto se pomera za 1px po x osi i za 1px po y osi. Svaki putkada korisnik klikne misem na kvadratic, broj poena se povecava za vrednost brzine kojom sekvadratic krece, ali se i brzina kvadratica uvecava za 1. Obezbediti da se kvadratic lepo odbijaod ivice panela.

Figure 8: Izled forme

Aplikaciju razvijati po sledecim koracima:

1. Napraviti novu WindowsFormApplication i nazvati je Kvadratic.

2. Na formu dodati dugme ”Start”, jedan panel, jedan pictureBox (na panelu), jednu labeluza ispis trenutnog broja poena i jedan tajmer.

3. Na pocetku, trenutni broj poena postaviti na 0 i pozadinu panela na belu. Pored toga,postaviti kvadratic na neko nasumicno mesto na panelu i postaviti da ne bude vidljiv.

4. Klikom na dugme ”Start” postaviti da kvadratic postane vidljiv i zapoceti njegovo kre-tanje.

5. Obezbediti da se kvadratic lepo odbija od ivice panela.

6. Obezbediti da se klikom na kvadratic uveca broj poena za vrednost trenutnue brzine, kaoi da se brzina poveca za 1.

7. Obezbediti da kvadratic, svaki put kada se odbije od neku ivicu, promeni boju pozadine.

9.1 Resenje

using System;

2 using System.Collections.Generic;

using System.ComponentModel;

4 using System.Data;

using System.Drawing;

6 using System.Linq;

using System.Text;

8 using System.Windows.Forms;

Page 31: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

9 ZADATAK: KVADRATIC 31

10 namespace Kvadratic

{

12 public partial class Form1 : Form

{

14 public Form1()

{

16 InitializeComponent ();

}

18

int brojPoena;

20 int brzinaX = 1;

int brzinaY = 1;

22 Random r;

/*

24 * Kada se klikne na dugme Start , prikazujemo kvadratic

* i pokrecemo tajmer.

26 */

private void button1_Click(object sender , EventArgs e)

28 {

pictureBox1.Show();

30 timer1.Start ();

}

32

/*

34 * Na pocetku , postavljamo kvadratic na neko nasumicno mesto na formi.

* x koordinata uzima vrednosti od 0, do sirine panela od koje moramo da oduzmemo sirinu

kvadratica.

36 * Analogno vazi za y koordinatu.

*

38 * Takodje , kvadratic treba da postane vidljiv tek kada igra pocne , tj.

* kada igrac klikne na dugme "Start ". Iz tog rayloga ga ne prikazujemo

40 * na pocetku.

*/

42 private void Form1_Load(object sender , EventArgs e)

{

44 brojPoena = 0;

r = new Random(DateTime.Now.Millisecond);

46 pictureBox1.Left = r.Next(0, panel1.Width - pictureBox1.Width);

pictureBox1.Top = r.Next(0, panel1.Height - pictureBox1.Height);

48 pictureBox1.Hide();

}

50

/*

52 * Na svaki otkucaj tajmera , povecavamo x i y koordinate kvadratica za vrednosti

* odgovarajucih brzina.

54 * U slucaju da smo dotakli ivicu , mnozimo brzinu sa -1 iz sledeceg razloga:

* Pretpostavimo da smo udarili u desnu ivicu. U tom trenutku , mi vise ne zelimo

56 * da idemo u desno , vec u levo. To kretanje u desno u nasem slucaju oznacava

* dodavanje neke pozitivne vrednosti na x koordinatu kvadratica , dok kretanje

58 * u levo oznacava dodavanje negativne vrednosti na x koordinatu kvadratica.

* (NAPOMENA: gornji levi ugao ima koordinate 0, 0).

60 *

* Analogno vazi za sve ostale ivice.

62 *

* Uslov za levu ivicu:

64 * pictureBox1.Left < 0

*

66 * Uslov za desnu ivicu:

* pictureBox1.Left + pictureBox1.Width > panel1.Width

68 *

* Uslov za gornju ivicu:

70 * pictureBox1.Top < 0

*

72 * Uslov za donju ivicu:

* pictureBox1.Top + pictureBox1.Height > panel1.Height

74 */

private void timer1_Tick(object sender , EventArgs e)

76 {

pictureBox1.Left += brzinaX;

78 if (pictureBox1.Left < 0 || pictureBox1.Left + pictureBox1.Width > panel1.Width)

{

80 brzinaX = -brzinaX;

pictureBox1.BackColor = Color.FromArgb(r.Next (0 ,255), r.Next (0 ,255), r.Next (0 ,255));

82 }

84 pictureBox1.Top += brzinaY;

Page 32: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

9 ZADATAK: KVADRATIC 32

if (pictureBox1.Top < 0 || pictureBox1.Top + pictureBox1.Height > panel1.Height)

86 {

brzinaY = -brzinaY;

88 pictureBox1.BackColor = Color.FromArgb(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255))

;

}

90

}

92

94 /*

* U slucaju klika na kvadratic , treba uvecati broj poena , kao i brzinu kretanja

96 * po obe ose (uz obracanje paznje na to da brzine mogu biti i pozitivne i negativne ,

* pa im se u zavisnosti od toga dodaje/oduzima 1).

98 */

private void pictureBox1_Click(object sender , EventArgs e)

100 {

brojPoena += Math.Abs(brzinaX);

102 label1.Text = brojPoena.ToString ();

if (brzinaX < 0)

104 brzinaX -= 1;

else

106 brzinaX += 1;

108 if (brzinaY < 0)

brzinaY -= 1;

110 else

brzinaY += 1;

112 }

}

114 }

9.2 Domaci zadatak

1. Modifikoati aplikaciju tako da ispisuje jos dve vrednosti:1. Broj pogodaka - broj puta koliko je igrac pogodio kvadratic2. Broj pokusaja - broj puta koliko je igrac kliknuo na pictureBoxModifikovati racunanje broja poena, tako da se od ukupnog broja poena, oduzme brojpromasaja. Otezati igricu tako sto ce se na svakih 5 pogodaka i velicina kvadraticasmanjiti za 1px, pri cemu je najmanja dimenzija kvadratica 15px*15px. Na pocetkupostaviti da dimenzija bude 30px*30px.

Page 33: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

10 ZADATAK: OBRADA TEKSTA[MENUSTRIP, RICHTEXTBOX, OPENFILEDIALOG, SAVEFILEDIALOG, FONTDIALOG]33

10 Zadatak: Obrada teksta

[MenuStrip, RichTextBox, OpenFileDialog, SaveFile-

Dialog, FontDialog]

Napraviti aplikaciju za obradu teksta (slicnu Notepad-u). Izgled forme je prikazan na sliciispod. Treba omoguciti:

• Pravljenje novog fajla (File → New)

• Snimanje fajla (File → Save)

• Ucitavanje iz fajla (File → Open)

• Promenu boje slova (Edit → Color)

• Promenu fonta (Edit → Font)

• Promenu stila (Edit → Style → Bold/Italic/Underline)

• Transformaciju svih slova u mala slova (Tools → ToLower)

• Tranfsormaciju selektovanih slova u mala slova (Tools → ToLower)

• Transformaciju svih slova u velika slova (Tools → ToUpper)

• Tranfsormaciju selektovanih slova u velika slova (Tools → ToUpper)

• Zamenu svih pojavljivanja neke reci, nekom drugom (u celom dokumentu) (Tools →Replace)

• Zamenu svih pojavljivanja neke reci, nekom drugom (samo u selektovanom delu teksta)(Tools → Replace)

Figure 9: Izled forme

Page 34: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

10 ZADATAK: OBRADA TEKSTA[MENUSTRIP, RICHTEXTBOX, OPENFILEDIALOG, SAVEFILEDIALOG, FONTDIALOG]34

10.1 Resenje

using System;

2 using System.Collections.Generic;

using System.ComponentModel;

4 using System.Data;

using System.Drawing;

6 using System.Linq;

using System.Text;

8 using System.Windows.Forms;

using System.IO;

10

namespace obrada_teksta

12 {

public partial class Form1 : Form

14 {

public Form1()

16 {

InitializeComponent ();

18 }

20 /* Klikom na dugme "New" praznimo sadrzaj tekstualnog polja*/

private void newToolStripMenuItem_Click(object sender , EventArgs e)

22 {

richTextBox1.Text = "";

24 }

26 /* Klikom na dugme "Bold" dodajemo/oduzimamo Bold stil naseg teksta

(ukoliko je vec bold , onda ga ukidamo , u suprotnom ga dodajemo)*/

28 private void boldToolStripMenuItem_Click(object sender , EventArgs e)

{

30 if (richTextBox1.Font.Bold)

richTextBox1.Font = new Font(richTextBox1.Font , richTextBox1.Font.Style & ~FontStyle.

Bold);

32 else

richTextBox1.Font = new Font(richTextBox1.Font , richTextBox1.Font.Style | FontStyle.

Bold);

34 }

36 /* Klikom na dugme "Italic" dodajemo/oduzimamo Italic stil naseg teksta

(ukoliko je vec italic , onda ga ukidamo , u suprotnom ga dodajemo)*/

38 private void italicToolStripMenuItem_Click(object sender , EventArgs e)

{

40 if (richTextBox1.Font.Italic)

richTextBox1.Font = new Font(richTextBox1.Font , richTextBox1.Font.Style & ~FontStyle.

Italic);

42 else

richTextBox1.Font = new Font(richTextBox1.Font , richTextBox1.Font.Style | FontStyle.

Italic);

44 }

46 /* Klikom na dugme "Underline" dodajemo/oduzimamo Underline stil naseg teksta

(ukoliko je vec underline , onda ga ukidamo , u suprotnom ga dodajemo)*/

48 private void underlineToolStripMenuItem_Click(object sender , EventArgs e)

{

50 if (richTextBox1.Font.Underline)

richTextBox1.Font = new Font(richTextBox1.Font , richTextBox1.Font.Style & ~FontStyle.

Underline);

52 else

richTextBox1.Font = new Font(richTextBox1.Font , richTextBox1.Font.Style | FontStyle.

Underline);

54 }

56 /* Klikom na dugme "Color" prikazujemo colorDialog i omogucavamo korisniku da

izabere boju teksta */

58 private void colorToolStripMenuItem_Click(object sender , EventArgs e)

{

60 if (colorDialog1.ShowDialog () == DialogResult.OK) {

richTextBox1.ForeColor = colorDialog1.Color;

62 }

}

64

/* Klikom na dugme "Font" prikazujemo fontDialog i omogucavamo

66 korisniku da promeni font */

private void fontToolStripMenuItem_Click(object sender , EventArgs e)

68 {

Page 35: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

10 ZADATAK: OBRADA TEKSTA[MENUSTRIP, RICHTEXTBOX, OPENFILEDIALOG, SAVEFILEDIALOG, FONTDIALOG]35

if (fontDialog1.ShowDialog () == DialogResult.OK) {

70 richTextBox1.Font = fontDialog1.Font;

}

72 }

74 /* Klikom na dugme "toLower" pretvaramo sva slova unutar tekstualnog polja

u mala slova*/

76 private void toLowerToolStripMenuItem_Click(object sender , EventArgs e)

{

78 richTextBox1.Text = richTextBox1.Text.ToLower ();

}

80

/* Klikom na dugme "toUpper" pretvaramo sva slova unutar tekstualnog polja

82 u mala slova*/

private void toUpperToolStripMenuItem_Click(object sender , EventArgs e)

84 {

richTextBox1.Text = richTextBox1.Text.ToUpper ();

86 }

88 /* Klikom na dugme "Replace" prikazujemo korisniku tekstualna polja u koja moze

da unese koju rec zeli da zameni sa kojom */

90 private void replaceToolStripMenuItem_Click(object sender , EventArgs e)

{

92 textBox1.Visible = !textBox1.Visible;

textBox2.Visible = !textBox2.Visible;

94 button1.Visible = !button1.Visible;

if(replaceToolStripMenuItem.Font.Bold)

96 replaceToolStripMenuItem.Font = new Font(replaceToolStripMenuItem.Font , FontStyle.

Regular);

else

98 replaceToolStripMenuItem.Font = new Font(replaceToolStripMenuItem.Font , FontStyle.Bold

);

}

100

/* Klikom na ovo dugme vrsi se zamena svih pojavljivanja reci koja se nalazi u textBox1 ,

102 sa recju koja se nalazi u textBox2. Ukoliko postoji selektovan tekst , modifikacija

se vrsi samo nad selektovanim tekstom , u suprotnom , modifikacija se vrsi nad celim

104 sadrzajem tekstualnog polja. */

private void button1_Click(object sender , EventArgs e)

106 {

if (richTextBox1.SelectedText.Length > 0)

108 richTextBox1.SelectedText = richTextBox1.SelectedText.Replace(textBox1.Text , textBox2.

Text);

else

110 richTextBox1.Text = richTextBox1.Text.Replace(textBox1.Text , textBox2.Text);

}

112

/* Funkcija koja se poziva klikom na dugme "Open". Ovde korisniku omogucavamo da otvori

114 neku datoteku i da njen sadrzaj smesti u tekstualno polje. */

private void openToolStripMenuItem_Click(object sender , EventArgs e)

116 {

if (openFileDialog1.ShowDialog () == DialogResult.OK) {

118

Stream fajl = openFileDialog1.OpenFile ();

120 StreamReader r = new StreamReader(fajl);

richTextBox1.Text = r.ReadToEnd ();

122 fajl.Close ();

}

124

}

126

/* Funkcija koja se poziva klikom na dugme "Save". Ovde korisniku omogucavamo da trenutni

128 sadrzaj tekstualnog polja snimi u neku datoteku. */

private void saveToolStripMenuItem_Click(object sender , EventArgs e)

130 {

if (saveFileDialog1.ShowDialog () == DialogResult.OK) {

132 Stream fajl = saveFileDialog1.OpenFile ();

StreamWriter w = new StreamWriter(fajl);

134 w.Write(richTextBox1.Text);

w.Close ();

136 fajl.Close ();

}

138 }

}

140 }

Page 36: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

10 ZADATAK: OBRADA TEKSTA[MENUSTRIP, RICHTEXTBOX, OPENFILEDIALOG, SAVEFILEDIALOG, FONTDIALOG]36

10.2 Domaci zadatak

Na dno postojece aplikacije dodati labele koje prikazuju:

1. broj karaktera

2. broj reci

3. broj malih slova

4. broj velikih slova

5. broj cifara

koji se nalaze u tekstu.

Page 37: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

11 ZADATAK: IKS-OKS [TOOLSTRIP] 37

11 Zadatak: Iks-Oks

[ToolStrip]

Napraviti aplikaciju koja omogucava da dva igraca igraju Iks-Oks. U svakom trenutku im seprikazuje koliko koji igrac ima pobeda. Igracima treba omoguciti da zapocnu novu igru, daizaberu koji od njih igra prvi, kao i da anuliraju trenutni skor. Izgled aplikacije je prikazan naslici ispod.

Figure 10: Izled forme

11.1 Resenje

using System;

2 using System.Collections.Generic;

using System.ComponentModel;

4 using System.Data;

using System.Drawing;

6 using System.Linq;

using System.Text;

8 using System.Windows.Forms;

10 namespace iks_oks

{

12 public partial class Form1 : Form

{

14

public Form1()

16 {

InitializeComponent ();

18 }

20 /* Uvodimo strukturu polje koja nam cuva informacije

o vrednosti trenutnog polja i dugmetu koje je vezano

22 za konkretno polje */

struct polje

24 {

public char value;

26 public Button dugme;

}

28

/* Uvodimo matricu polja */

30 polje[,] polja;

/* Promenljiva koja cuva informaciju o tome koji igrac

32 je trenutno na redu*/

char na_redu = ’X’;

34 /* Promenljiva koja cuva informaciju o tome koji igrac

prvi krece*/

Page 38: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

11 ZADATAK: IKS-OKS [TOOLSTRIP] 38

36 char prvi_krece = ’X’;

38 int popunjeno_polja = 0;

int pobede_x = 0;

40 int pobede_o = 0;

42 /*Na pocetku pravimo nasu matricu polja , velicine 3*3

i svakom polju prodruzujemo ogovarajuce dugme */

44 private void Form1_Load(object sender , EventArgs e)

{

46 polja = new polje[3, 3];

polja[0, 0]. dugme = button1;

48 polja[0, 1]. dugme = button2;

polja[0, 2]. dugme = button3;

50 polja[1, 0]. dugme = button4;

polja[1, 1]. dugme = button5;

52 polja[1, 2]. dugme = button6;

polja[2, 0]. dugme = button7;

54 polja[2, 1]. dugme = button8;

polja[2, 2]. dugme = button9;

56 label2.Text = pobede_x.ToString ();

label4.Text = pobede_o.ToString ();

58 }

60 /* Funkcija koja proverava da li i-ta vrsta matrice ima sve iste vrednosti */

bool provera_vrste(int i) {

62 return polja[i,0]. value == polja[i,1]. value && polja[i,0]. value == polja[i,2]. value;

}

64

/* Funkcija koja proverava da li i-ta kolona matrice ima sve iste vrednosti */

66 bool provera_kolone(int j) {

return polja[0,j]. value == polja[1,j].value && polja[0,j].value == polja[2,j]. value;

68 }

70 /* Funkcija koja proverava da li su na glavnoj dijagonali matrice iste vrednosti */

bool provera_glavne_dijagonale () {

72 return polja [0,0]. value == polja [1,1]. value && polja [0 ,0]. value == polja [2,2]. value;

}

74

/* Funkcija koja proverava da li su na sporednoj dijagonali matrice iste vrednosti */

76 bool provera_sporedne_dijagonale () {

return polja [0,2]. value == polja [1,1]. value && polja [0 ,2]. value == polja [2,0]. value;

78 }

80 /* Funkcija koja obradjuje klik na polje matrice koje se nalazi na poziciji (i,j)*/

void klik_na_polje(int i, int j) {

82 polja[i, j].value = na_redu;

84 polja[i,j].dugme.Text = na_redu.ToString ();

polja[i, j].dugme.Enabled = false;

86 popunjeno_polja ++;

}

88

/* Funkcija koja proverava da li su sva polja popunjena i ako jesu ,

90 *rezultat je "Nereseno" i zapocinje se nova igra , a ako nisu ,

onda igra prelazi na sledeceg igraca */

92 void promeni_igraca () {

if (popunjeno_polja == 9)

94 {

MessageBox.Show("Nereseno!");

96 restart ();

}

98 else

{

100 if (na_redu == ’X’)

na_redu = ’O’;

102 else

na_redu = ’X’;

104 }

}

106

/* Funkcija koja se poziva kada se dodje u situaciju da neka

108 * vrsta/kolona/digagonala ima iste vrednosti , tj. kada imamo

pobednika igre. */

110 void proglasi_pobednika () {

if (na_redu == ’X’)

Page 39: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

11 ZADATAK: IKS-OKS [TOOLSTRIP] 39

112 pobede_x ++;

else

114 pobede_o ++;

116

label2.Text = pobede_x.ToString ();

118 label4.Text = pobede_o.ToString ();

MessageBox.Show("POBEDNIK:␣" + na_redu.ToString ());

120

restart ();

122 }

124 /* button1 --> polje [0][0] */

private void button1_Click(object sender , EventArgs e)

126 {

klik_na_polje (0, 0);

128

if (provera_vrste (0) || provera_kolone (0) || provera_glavne_dijagonale ())

130 proglasi_pobednika ();

else

132 promeni_igraca ();

}

134

/* button2 --> polje [0][1] */

136 private void button2_Click(object sender , EventArgs e)

{

138 klik_na_polje (0, 1);

140 if (provera_vrste (0) || provera_kolone (1))

proglasi_pobednika ();

142 else

promeni_igraca ();

144 }

146 /* button3 --> polje [0][2] */

private void button3_Click(object sender , EventArgs e)

148 {

klik_na_polje (0, 2);

150

if (provera_vrste (0) || provera_kolone (2) || provera_sporedne_dijagonale ())

152 proglasi_pobednika ();

else

154 promeni_igraca ();

}

156

/* button4 --> polje [1][0] */

158 private void button4_Click(object sender , EventArgs e)

{

160 klik_na_polje (1, 0);

162 if (provera_vrste (1) || provera_kolone (0))

proglasi_pobednika ();

164 else

promeni_igraca ();

166 }

168 /* button5 --> polje [1][1] */

private void button5_Click(object sender , EventArgs e)

170 {

klik_na_polje (1, 1);

172

if (provera_vrste (1) || provera_kolone (1) || provera_sporedne_dijagonale () ||

provera_glavne_dijagonale ())

174 proglasi_pobednika ();

else

176 promeni_igraca ();

}

178

/* button6 --> polje [1][2] */

180 private void button6_Click(object sender , EventArgs e)

{

182 klik_na_polje (1, 2);

184 if (provera_vrste (1) || provera_kolone (2))

proglasi_pobednika ();

186 else

Page 40: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

11 ZADATAK: IKS-OKS [TOOLSTRIP] 40

promeni_igraca ();

188 }

190 /* button7 --> polje [2][0] */

private void button7_Click(object sender , EventArgs e)

192 {

klik_na_polje (2, 0);

194

if (provera_vrste (2) || provera_kolone (0) || provera_sporedne_dijagonale ())

196 proglasi_pobednika ();

else

198 promeni_igraca ();

}

200

/* button8 --> polje [2][1] */

202 private void button8_Click(object sender , EventArgs e)

{

204 klik_na_polje (2, 1);

206 if (provera_vrste (2) || provera_kolone (1))

proglasi_pobednika ();

208 else

promeni_igraca ();

210 }

212 /* button9 --> polje [2][2] */

private void button9_Click(object sender , EventArgs e)

214 {

klik_na_polje (2, 2);

216

if (provera_vrste (2) || provera_kolone (2) || provera_glavne_dijagonale ())

218 proglasi_pobednika ();

else

220 promeni_igraca ();

}

222

/* Funkcija koja se poziva kada se klikne na

224 dugme "New" ili kada je kraj partije. Sluzi

da restartuje sve promenljive i na taj nacin

226 omoguci igranje igrice ispocetka.*/

void restart () {

228 popunjeno_polja = 0;

na_redu = prvi_krece;

230

for (int i = 0; i < 3; i++)

232 for (int j = 0; j < 3; j++)

{

234 polja[i,j].value=’␣’;

polja[i, j]. dugme.Enabled = true;

236 polja[i, j]. dugme.Text = "";

}

238

240 }

242 /* Dugme "New" */

private void toolStripButton1_Click(object sender , EventArgs e)

244 {

restart ();

246 }

248 /* Promena ko igra prvi*/

private void toolStripButton2_Click(object sender , EventArgs e)

250 {

252 if (prvi_krece == ’X’)

{

254 prvi_krece = ’O’;

toolStripButton2.Text = "Prvi␣O";

256 }

else{

258 prvi_krece = ’X’;

toolStripButton2.Text = "Prvi␣X";

260 }

}

262

Page 41: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

11 ZADATAK: IKS-OKS [TOOLSTRIP] 41

/*Dugme "Restart score" */

264 private void toolStripButton3_Click(object sender , EventArgs e)

{

266 pobede_x = 0;

pobede_o = 0;

268 label2.Text = "0";

label4.Text = "0";

270 }

272 }

}

Page 42: Metodika nastave ra cunarstva B - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~asimic/2017/mnrb/mnrb.pdf · 1 ZADATAK: FIBONACIJEV NIZ [LISTBOX, BUTTON, MESSAGEBOX] 2 1 Zadatak:

12 ZADATAK: CRTANJE2 42

12 Zadatak: Crtanje2

Napraviti aplikaciju koja:

• Klikom na prvo dugme iscrtava krugove tako sto ide spiralno po pictureBox-u, crta krugpo krug i tako sve dok se ne prekrije ceo pictureBox. Krugovi su poluprecnika 30px. Priiscrtavanju, krugovi treba da se preklapaju do polovine (pogledati sliku).

• Klikom na drugo dugme iscrtava horizontalne paralelne linije (od vrha ka dnu) na rasto-janju 10px. Crtanje prekinuti kada se linijama prekrije ceo pictureBox.

• Klikom na trece dugme iscrtava vertikalne paralelne linije (od levog kraja ka desnomkraju) na rastojanju 10px. Crtanje prekinuti kada se linijama prekrije ceo pictureBox.

• Klikom na cetvrto dugme iscrtava linije koje su paralelne sporednoj dijagonali pictureBox-a (od gornjeg levog ugla, ka donjem desnom), takodje na rastojanju 10px. Crtanje prek-inuti kada se linijama prekrije ceo pictureBox.

• Ukoliko se u sred iscrtavanja klikne neko od dugmica, trenutno iscrtavanje treba da seprekine, da se isprazni trenutni sadrzaj pictureBox-a i da se zapocne iscrvanje koje odgo-vara dugmetu koje je kliknuto.

• Klikom na dugme na tastaturi ”C” (u bilo kom trenutku) isprazniti trenutni sadrzajpictureBox-a. Da bi se ovo omogucilo, pre svega je u konstruktor same forme, potrebnododati liniju: KeyPreview = true; (odmah nakon poziva InitializeComponent();). Zatimje potrebno dodati funkciju koja ce se zvati svaki put kada se klikne na bilo koje dugmena tastaturi. Dogadjaj koji odgovara onome sto nama treba se zove KeyDown. U okvirute funkcije je potrebno ispitati da li je kliknuto bas dugme ”C”. To mozete proveriti sa:if (e.KeyCode.ToString() == ”C”).

• Omoguciti da se rastojanje izmedju linija i boja linija zadaju u proizvoljnoj datoteci.Korisniku omoguciti da kada klikne na neko od postojecih dugmica, pre svega izaberedatoteku u kojoj se nalaze ove informacije. Pretpostaviti da je datoteka dobro formati-rana, tj. da se u prvom redu nalazi tacno jedan broj, a u drugom redu tacno jedna rec,koja odgovara ispravnoj boji (npr. Blue). Za citanje korititi metod ReadLine(), kojicita jednu liniju iz datoteke i vraca procitan string. Za postavljanje boje koristiti metodColor.FromName(ime boje). Operaciju otvaranja datoteke i postavljanja rastojanja i bojeje najbolje realizovati u okviru zasebne funkcije (da ne bi kopirali isti kod na vise mesta).

Figure 11: Krugovi spiralno Figure 12: Linije horizontalno Figure 13: Linije dijagonalno