You are on page 1of 30

Primeri aplikacija razgranate strukture

Kretanje loptica
Kreirati aplikaciju koja obezbeuje kontinuiorano kretanje
loptice gore desno, gore levo, dole desno, dole levo (po be
ose se pomera za poluprenik). Kada doe do ivice forme
odbija se i nastavlja kretanje u suprotnom smeru.

int x, y, dx, dy, r;


private void Form1_MouseClick(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
dx = dy = r = 10;
Refresh();
timer1.Start();
}

private void Form1_Paint(object sender, PaintEventArgs e)


{
Graphics g = e.Graphics;
g.FillEllipse(Brushes.Red,x-r,y-r,2*r,2*r);
}

private void timer1_Tick(object sender, EventArgs e)


{
x += dx;
y += dy;
if (x < r || x + r > ClientRectangle.Width) dx = -dx;
if (y < r || y + r > ClientRectangle.Height) dy = -dy;
Refresh();
}

Pri odbijanju menjamo boju

Modifikovati prethodnu aplikaciju tako da loptica pri odbijanju menja boju.


int x, y, dx, dy, r;
SolidBrush cetka = new SolidBrush(Color.Red);
Random R = new Random();
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
x = e.X; y = e.Y;
dx = dy = r = 10;
Refresh();
timer1.Start();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillEllipse(cetka,x-r,y-r,2*r,2*r);
}
private void timer1_Tick(object sender, EventArgs e)
{
x += dx;
y += dy;
if (x < r || x + r > ClientRectangle.Width)
{
dx = -dx;
cetka.Color = Color.FromArgb(R.Next(256), R.Next(256), R.Next(256));
}
if (y < r || y + r > ClientRectangle.Height)
{
dy = -dy;
cetka.Color = Color.FromArgb(R.Next(256), R.Next(256), R.Next(256));
}
Refresh();
}

Ispravnost datuma
Kreirati aplikaciju kojom se proverava da li je datum definisan sa 3
objekta klase TextBox ili NumericUpDown ispravan.
Napomena: Godina je prestupna ako je deljiva sa 4 i nije sa 100 ili
ako je deljiva sa 400.
private void button1_Click(object sender, EventArgs e)
{
int d = (int)numericUpDown1.Value;
int m = (int)numericUpDown2.Value;
int g = (int)numericUpDown3.Value;
int bd;
if(d<0||d>31||m<0||m>12||g<0)
label1.Text="Neispravan datum";
else
{
switch (m)
{ case 1:case 3:case 5: case 7:
case 8: case 10:case 12:
bd = 31;
break;
case 2: if ((g % 4 == 0 && g % 100 != 0) || g % 400 == 0)
bd = 29;
else
bd = 28;
break;
default: bd = 30;
break;
}
if(d>bd)
label1.Text="Neispravan datum";
else
label1.Text="Ispravan datum";
}
}

Sutrasnji datum
Kreirati aplikaciju kojom se za dati datum zadat pomou dana,
meseca i godine (tri objekta klase NumericUpDown) odreuje datum
sledeeg dana. Datum koji korisnik unosi je ispravan.
Napomena: Godina je prestupna ako je deljiva sa 4 i nije sa 100 ili
ako je deljiva sa 400.
private void button1_Click(object sender, EventArgs e)
{
int d = (int)numericUpDown1.Value;
int m = (int)numericUpDown2.Value;
int g = (int)numericUpDown3.Value;
int bd;
switch (m)
{ case 1:case 3:case 5: case 7:
case 8: case 10:case 12:
bd = 31;
break;
case 2: if ((g % 4 == 0 && g % 100 != 0) || g % 400 == 0)
bd = 29;
else
bd = 28;
break;
default: bd = 30;
break;
}
if (d < bd)
d++;
else
{
d = 1;
if (m < 12)
m++;
else
{
m = 1;
g++;
}
}
label1.Text = d + "." + m + "." + g + ".";
}

SLAVINA
Na dnu rezervoara visine H napunjenog vodom do vrha nalaze se 3
slavine. Za svaku je dato vreme otvaranja T1<T2<T3 i brzina
isticanja brojem za koliko opadne nivo vode u rezervora u 1 minuti
V1,V2 i V3. Odredi kroz koju slavinu istekne najmanje vode.
namespace Slavina
{ class Program
{ static void Main(string[] args)
{
float t1 = Convert.ToSingle(Console.ReadLine());
float t2 = Convert.ToSingle(Console.ReadLine());
float t3 = Convert.ToSingle(Console.ReadLine());
float v1 = Convert.ToSingle(Console.ReadLine());
float v2 = Convert.ToSingle(Console.ReadLine());
float v3 = Convert.ToSingle(Console.ReadLine());
float H = Convert.ToSingle(Console.ReadLine());
if ((t2 - t1) * v1 >= H)
Console.WriteLine("2 i 3");
else
if ((t3 - t1) * v1 + (t3 - t2) * v2 >= H)
Console.WriteLine("3");
else
{
float t = (H + t1 * v1 + t2 * v2 + t3 * v3) / (v1 + v2 + v3);
float min = (t - t1) * v1;
if ((t - t2) * v2 < min)
min = (t - t2) * v2;
if ((t - t3) * v3 < min)
min = (t - t3) * v3;
if (min == (t - t1) * v1)
Console.WriteLine("1");
if (min == (t - t2) * v2)
Console.WriteLine("2");
if (min == (t - t3) * v3)
Console.WriteLine("3");
}
}
}
}

PING PONG
Kreirati aplikaciju kojom se loptica kree po formi (po obe ose) kada doe do
gornje, desne ili leve ivice forme odbija se menjajui smer kretanja. Na donjoj ivici
forme nalazi se pravougaonik koji korisnik moe pomerati, korienjem strelica na
tastaturi, levo desno, u granicama forme. Ako loptica udati u pravougaonik odbija
se i nastavlja kretanje, a ako loptica udari u donju ivicu forme zatvara se aplikacija.

int X, Y, r, korakX, korakY;


int Xd, Yd, w, h, korakd;
Random R = new Random();
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
SolidBrush cetka = new SolidBrush(Color.Red);
g.FillEllipse(cetka, X - r, Y - r, 2 * r, 2 * r);
cetka.Color = Color.Brown;
g.FillRectangle(cetka, Xd, Yd, w, h);
}
private void Form1_Load(object sender, EventArgs e)
{
Y = 10;
korakX = 10; korakY = 10;
r = 10;
X = R.Next(10, ClientRectangle.Width - 10);
h = 10; w = 80;
Yd = ClientRectangle.Height - h;
Xd = R.Next(ClientRectangle.Width - w);
korakd = 0;
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
X += korakX;
Y += korakY;
Xd += korakd;
if (Xd <= 0) Xd = 0;
if (Xd + w >= ClientRectangle.Width) Xd = ClientRectangle.Width - w;
if (X <= r || X + r >= ClientRectangle.Width) korakX = -korakX;
if (Y <= r) korakY = -korakY;
if (X + r >= Xd && X - r <= Xd + w)
{
if (Y + r >= ClientRectangle.Height - h) korakY = -korakY;
}
else
if (Y + r >= ClientRectangle.Height)
{
timer1.Enabled = false;
MessageBox.Show("Izgubili ste...");
}
Refresh();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Left)
korakd = -20;
else
if (e.KeyCode == Keys.Right)
korakd = 20;
if (e.KeyCode == Keys.Escape)
timer1.Enabled = !timer1.Enabled;
}

private void Form1_KeyUp(object sender, KeyEventArgs e)


{
korakd = 0;
}

Primeri aplikacija cikline strukture


Liste
Kreirati aplikaciju kojom se za dati prirodan broj n (zadat u texBox-u)
u objektu klase ListBox upisuju
a) svi prirodni brojevi od 1 do n
b) svi parni prirodni brojevi od 1 do n
c) svi neparni prirodni brojevi od 1 do n
i pri tome se odredjuje suma upisanih brojeva (vrednost sume ispisati u
objektu klase Label). Izbor opcije za ispis u ListBox-u izvrsiti korienjem
objekata klase RadioButton.

private void btPisi_Click(object sender, EventArgs e)


{
int n = Convert.ToInt32(textBox1.Text);
int s = 0;
listBox1.Items.Clear();
if (radioButton1.Checked)
{
for (int i = 1; i <= n; i++)
{
listBox1.Items.Add(i);
s += i;
}
}
if (radioButton2.Checked)
{
for (int i = 2; i <= n; i += 2)
{
listBox1.Items.Add(i);
s += i;
}
}
if (radioButton3.Checked)
{
for (int i = 1; i <= n; i += 2)
{
listBox1.Items.Add(i);
s += i;
}
}
listBox1.Items.Add("Suma je " + s);
}

Pravougaonik date povrine


Kreirati aplikaciju koja u objektu klase ListBox upisati sve mogue duine
stranica pravougaonika ija je povrina jednaka datom prirodnom broju P,
a stranice su takoe prirodni brojevi.

private void btOdredi_Click(object sender, EventArgs e)


{
int P = Convert.ToInt32(textBox1.Text);
listBox1.Items.Clear();
for (int a = 1; a <= P / 2; a++)
if (P % a == 0)
listBox1.Items.Add(a + " " + P / a);
}

Sportista 1
Sportista prvog dana treninga pretrci A metara, a svakog sledeceg 10%
vie od pethodnog dana. Prikazati koliko svakog dana pretrci u periodu od
N dana treninga, na kraju prikazati koliko kilometara je ukupno pretrao.

static void Main(string[] args)


{
int n;
float a,s=0;
a = Convert.ToSingle(Console.ReadLine());
n = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < n; i++)
{
Console.WriteLine(i + ". dan " + a.ToString("0.00"));
s += a;
a = a + 10 * a / 100;
}
Console.WriteLine("Ukupno " + s.ToString("0.00"));
}

Sportista 2
Sportista prvog dana treninga pretrci A metara, a svakog sledeceg 10%
vie od prethodnog dana. Zeli da postigne dnevnu normu od B metara.
Prikazati posle koliko dan postie eljenu normu (prikazati i koliko svakog
dana pretri).

static void Main(string[] args)


{
int n;
float a,b;
a = Convert.ToSingle(Console.ReadLine());
b = Convert.ToSingle(Console.ReadLine());
n = 1;
Console.WriteLine(n + ". dan " + a.ToString("0.00"));
while(a<b)
{
n++;
a = a + 10 * a / 100;
Console.WriteLine(n + ". dan " + a.ToString("0.00"));

}
}

Stepenice
Kreirati aplikaciju kojom se crtaju stepenice u granicama forme (kao to je
prikazano na slici) poev od take na koju je korisnik kliknuo; irina i visina
stepenika je 20 piksela.

private void Form1_MouseClick(object sender, MouseEventArgs e)


{
int x = e.X;
int y = e.Y;
Graphics g = CreateGraphics();

while (x < ClientRectangle.Width && y > 0)


{
g.DrawLine(Pens.Red, x, y, x , y-20);
g.DrawLine(Pens.Red, x, y-20, x + 20, y-20);
x += 20;
y -= 20;
}
}

Crtanje 1
Kreirati aplikaciju kojom se taka na koju je korisnik
kliknuo spaja sa ivicama forme koje su izdeljene na n
delova. Broj n(3n100) se bira u kontroli
NumericUpDown.

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)


{
pictureBox1.Refresh();
int x = e.X;
int y = e.Y;
int n = (int)numericUpDown1.Value;
float dx = (float)pictureBox1.Width / n;
float dy = (float)pictureBox1.Height / n;
Pen olovka = new Pen(Color.Red);
Graphics g = pictureBox1.CreateGraphics();
for (int i = 0; i <= n; i++)
{
g.DrawLine(olovka, x, y, i * dx, 0);
g.DrawLine(olovka, x, y, i * dx, pictureBox1.Height);
g.DrawLine(olovka, x, y,0, i * dy);
g.DrawLine(olovka, x, y, pictureBox1.Width, i * dy);
}
}

Crtanje 2
Za dati prirodan broj n svaku ivicu objekta klase PictureBox podeli na n
jednakih delova, pa dobije take spojiti kao to je prikazano na slici.

private void numericUpDown1_ValueChanged(object sender, EventArgs e)


{
pictureBox1.Refresh();
Graphics g = pictureBox1.CreateGraphics();
Pen olovka = new Pen(Color.Red);
int n = Convert.ToInt32(numericUpDown1.Value);
float dx = (float)pictureBox1.Width/n;
float dy = (float)pictureBox1.Height/n;
for (int i = 0; i <n; i++)
{
g.DrawLine(olovka, i * dx, 0, 0, i * dy);
g.DrawLine(olovka, pictureBox1.Width, i * dy, i * dx, pictureBox1.Height);
g.DrawLine(olovka, i * dx, 0, pictureBox1.Width, pictureBox1.Height - i * dy);
g.DrawLine(olovka, 0, dy*i,pictureBox1.Width-i*dx, pictureBox1.Height);
}
}

Knjiga
Mali Mirko voli knjige, ali se uvek uplai kada mora proitati neku debelu
knjigu. Uiteljica je rekla Mirku: koliko ima redova na jednoj stranici
knjiga, broj poglavlja u knjizi i koliko redova ima svako poglavlje.
Svako poglavlje poinje na novoj stranici.
Mirka zanima koliko ta knjiga ima stranica, a pomo u reavanju tog
problema je odluio pronai meu najboljim informatiarima u svojoj
koli.
Napii program koji e izraunati broj stranica knjige.
Primer:
Ulazni podaci:
10 redova na jednoj stranici
4 poglavlja
234
120
138
123
Izlaz:
63 stranice

static void Main(string[] args)


{
int br,s,b,n;
Console.WriteLine("Unesite broj redova na jednoj stranici");
br = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Unesite broj poglavlja");
n = Convert.ToInt32(Console.ReadLine());
s = 0;
for (int i = 0; i < n; i++)
{
b = Convert.ToInt32(Console.ReadLine());
s += b / br;
if (b % br != 0)
s++;
}
Console.WriteLine("Knjiga ima "+s+" str.");
Console.Read();
}
Ispis cifara
Kreirati aplikaciju kojom se za za dati prirodan broj n prikazuju sve
njegove cifre, prikazati i ukupan broj cifara.

static void Main(string[] args)


{
int n, cif, br = 0;
Console.WriteLine("Unesite broj");
n = Convert.ToInt32(Console.ReadLine());

while (n > 0)
{
cif = n % 10;
n = n / 10;
Console.WriteLine(cif);

br++;
}
Console.WriteLine("Ukupno cifara " + br);
}

Cifra 5
Kreirati aplikaciju kojom se proverava dali dati prirodan broj n sadri
cifru 5.
Prvo reenje
static void Main(string[] args)
{
int n = Convert.ToInt32(Console.ReadLine());
int cif;
while (n > 0)
{
cif = n % 10;

if (cif == 5)
{
Console.WriteLine("Broj sadrzi cifru 5");
break;
}
n = n / 10;
}
if (n == 0)
Console.WriteLine("Broj ne sadrzi cifru 5");
}

Drugo reenje
static void Main(string[] args)
{
int n = Convert.ToInt32(Console.ReadLine());
int cif;
bool nasli = false;

while (n > 0)
{
cif = n % 10;
n = n / 10;
if (cif == 5)
nasli = true;

}
if (nasli) // nasli==true
Console.WriteLine("Broj sadrzi cifru 5");
else
Console.WriteLine("Broj ne sadrzi cifru 5");
}

Brisanje cifre jedan


Kreirati aplikaciju kojom se iz datog prirodnog broja n brie svako
pojavljivanje cifre 1.
static void Main(string[] args)
{
int n = Convert.ToInt32(Console.ReadLine());
int c, st, x;
x = 0; st = 1;
while (n > 0)
{
c = n % 10;
n = n / 10;
if (c != 1)
{
x += c * st;
st *= 10;
}
}
Console.WriteLine(x);
}

Transforjmacija broja
Kreirati aplikaciju kojom dati prirodan broj n transformie tako to se
svake dve uzastopne cifre broja n zamene veom od njih.
static void Main(string[] args)
{ int n = Convert.ToInt32(Console.ReadLine());
int c, pred, x, st;
x = 0; st = 1;
pred = n % 10; n /= 10;
while (n > 0)
{
c = n % 10;
n /= 10;
if (c > pred)
x += c * st;
else
x += pred * st;
st *= 10;
pred = c;
}
Console.WriteLine(x);
}

Transformacija broja 2
Kreirati aplikaciju kojom dati prirodan broj n transformie tako to se
svake dve uzastopne cifre broja n zamene veom od njih.
Transformaciju ponavljati dok ne dobijemo jednocifren broj.
static void Main(string[] args)
{
int n = Convert.ToInt32(Console.ReadLine());
int c, pred, x, st;
x = 0;
st = 1;
pred = n % 10;
n /= 10;
while (n > 0)
{
c = n % 10;
n /= 10;
if (c > pred)
x += c * st;
else
x += pred * st;
st *= 10;
pred = c;
}
Console.WriteLine(x);
}

Pravougaonici
Kreirati aplikaciju crtaju po formi serije pravougaonika upisanih jedan u
drugi. Temena jedne dijagonale prvog pravougaonika definisana su na
sledei nain: jedno teme je pozicija na koju je korisnik pritisnuo taster
mia (MouseDown) a drugo teme pozicija kad je korisnik otpustio taster
mia (MouseUp). Svaki sledei pravougaonik ima isti centar kao
prethodni pravougaonika a stranice su mu za 5 manje od stranica
prethodnog pravougaonika.

int x1, y1;


private void Form1_MouseDown(object sender, MouseEventArgs e)
{
x1 = e.X;
y1 = e.Y;
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
int x2, y2;
x2 = e.X;
y2 = e.Y;
int x, y, a, b;
x = Math.Min(x1, x2);
y = Math.Min(y1, y2);
a = Math.Abs(x1 - x2);
b = Math.Abs(y1 - y2);
if(x1<x)x=x1;
if(y1<y)y=y1;
Graphics g = CreateGraphics();
Pen olovka = new Pen(Color.Blue);
while (a > 0 && b > 0)
{
g.DrawRectangle(olovka, x, y, a, b);
a -= 10; b -= 10;
x += 5; y += 5;
}
}

okolada
Pera je posluio drugove okoladom oblika pravougaonika ije su
dimenzije dati prirodni brojevi A i B. Pri tome im je rekao da lome
(odsecaju) samo kvadrate. Drugovi su jedan po jedan lomili kvadrate,
ali pri tome nisu bili fer te su lomili najvee mogue kvadrate. Kreirati
aplikaciju kojom se ispisuje na koji nain su se drugovi posluili (ispisati
stranice kvadrata koje su lomili), na kraju ispisati koliko drugova se
posluilo okoladom.
Primer:
Ako je A=12 B=7 posluilo se ukupno 6 drugova, oni su redom uzimali kvadrate
stranica 7, 5, 2, 2, 1, 1.

private void btDeli_Click(object sender, EventArgs e)


{
int a, b,n=0;
a = Convert.ToInt32(tbA.Text);
b = Convert.ToInt32(tbB.Text);
int x = pictureBox1.Width / 2 - a / 2;
int y = pictureBox1.Height / 2 - b / 2;
pictureBox1.Refresh();
listBox1.Items.Clear();
Graphics g = pictureBox1.CreateGraphics();
SolidBrush cetka = new SolidBrush(Color.Yellow);
Pen olovka = new Pen(Color.Black);
g.FillRectangle(cetka, x, y, a, b);
g.DrawRectangle(olovka, x, y, a, b);
while (a > 0 && b > 0)
{ n++;
if (a > b)
{
a = a - b;
listBox1.Items.Add(b+"x" +b);
}
else
{
b = b - a;
listBox1.Items.Add(a+"x" +a);
}
g.DrawRectangle(olovka, x, y, a, b);

}
listBox1.Items.Add("Posluzilo se ukupno "+n);
}

Plivanje
1.1.2011 je subota. Marko trenira plivanje svakog ponedeljka i petka do
zadatog datuma iste godine (dan, mesec). Kreirati aplikaciju kojom se
odreuje koliko treninga je Marko imao.

private void btPlivanje_Click(object sender, EventArgs e)


{
int dan, mesec;
dan = Convert.ToInt32(textBox1.Text);
mesec = Convert.ToInt32(textBox2.Text);
int x = dan-1;
for (int i = 1; i < mesec; i++)
{
if (i == 1 || i == 3 || i == 5 || i == 7 ||
i == 8 || i == 10 || i == 12)
x += 31;
else
if (i == 2)
x += 28;
else
x += 30;
}
int k1, k2;
if (x > 3)
k1 = (x - 3) / 7 + 1;
else
k1 = 0;
if (x > 7)
k2 = (x - 7) / 7 + 1;
else
k2 = 0;
label3.Text = "trenirao je " + (k1 + k2) + " puta";
}

Max i prosek

Kreirati aplikaciju kojom se na unose temperature za N dana, prvo se


unosi broj dana a zatim temperature, svaka u posebnoj liniji. Odredi
prosenu temperaturu i maksimalnu temperatura.
static void Main(string[] args)
{ int n, t,max;
float s;
n = Convert.ToInt32(Console.ReadLine());
t = Convert.ToInt32(Console.ReadLine());
max = t;
s = t;
for (int i = 1; i < n; i++)
{
t = Convert.ToInt32(Console.ReadLine());
s += t;
if (t > max)
max = t;
}
s /= n;
Console.WriteLine("Prosecna temperatura je " + s.ToString("0.00"));
Console.WriteLine("Maksimalna temperatura je " + max);
Console.Read();
}

Broj 153
a) Za zadati broj x moze se formirati niz, tako da je x prvi element tog
niza, a svaki sledeci je jednak zbiru kubova cifara prethodnog elementa.
Na primer, za x = 102 dobijamo niz 102, 9, 729, 1080, 513, 153, 153,
153, ...Dokazano je da se za svako x deljivo sa 3 u nizu mora pojaviti
broj 153, nakon cega se on ponavlja.
Napisati aplikaciju kojim se za dati prirodan broj m deljiv sa 3
ispisuje niz formiran na prethodno opisani nacin.
b) Oznacimo sa d(x) duzinu niza koji pocinje brojem x, a zavrsava se
prvim pojavljivanjem broja 153. Iz gornjeg primera sledi da je
d(102)=6. Primetimo da je funkcija d definisana samo za x deljivo sa
3. Za dati broj n ispisati onaj broj x, manji ili jednak n (i deljiv sa 3)
za koji je vrednost funkcije d najveca. Ako takav broj nije jedinstven,
ispisati najmanji takav.
a)
static void Main(string[] args)
{
int c,s,n;
n=Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Trazeni niz je");
if (n == 153) Console.WriteLine(n);
while (n != 153)
{
s = 0;
while (n > 0)
{
c = n % 10;
n /= 10;
s += c * c * c;
}
n = s;
Console.WriteLine(n);
}
}
b)
static void Main(string[] args)
{
int c,s,x,x1,n,d,maxD=0,maxX=0;
n=Convert.ToInt32(Console.ReadLine());
for ( x = 3; x <= n; x += 3)
{
x1 = x;
d = 1;
while (x1 != 153)
{
s = 0;
while (x1 > 0)
{
c = x1 % 10;
x1 /= 10;
s += c * c * c;
}
x1 = s;
d++;
}
if (d > maxD)
{
maxD = d;
maxX = x;
}
}
Console.WriteLine(maxX);
}

Primeri aplikacija u kojima se koriste nizovi


Nedavno koriena dokumenta
U mnogim programima pojavljuje se lista nedavno korienih dokumenata
(NKD). Kao to joj ime kae, lista sadri nedavno koriena dokumente kako
bi korisnik mogao bre doi do njih.Lista je ogranienog kapaciteta poznat
je najvei broj dokumenata koji se mogu u istom trenutku nalaziti u listi.
Svaki put kad korisnik otvori neki dokument (bilo izborom iz NKD liste ili
kroz neki drugi dijalog), tada se:
1. Ako se dokument ve nalazi negde u listi, pomeri na poetak liste.
2. U suprotnom, umetne se na poetak liste. Ukoliko je prekoraen
kapacitet liste, zadnji dokument se izbacuje.
Zadan je kapacitet liste (koja je na poetku prazna) i niz dokumenata koje
korisnik otvara. Napiite program koji ispisuje sadraj liste nakon otvaranja
svih dokumenata u zadanom redosledu.
PRIMERI TEST PODATAKA
ulaz ulaz ulaz
4 4 2
3 4 6
a a buba
b b koko
c c buba
izlaz b ivan
c izlaz ivan
b b koko
a c izlaz
a koko
ivan

static void Main(string[] args)


{
string[] a;
int n, K, d = 0;
K = Convert.ToInt32(Console.ReadLine());
n = Convert.ToInt32(Console.ReadLine());
a = new string[K];
for (int i = 0; i < n; i++)
{
string x = Console.ReadLine();
int p = -1;
for (int j = 0; j < d; j++)
if (a[j] == x)
{
p = j; break;
}

if (p == -1)
{
if (d < K)
d++;
p = d - 1;
}

while (p > 0)
{
a[p] = a[p - 1]; p--;
}
a[0] = x;
}
Console.WriteLine("*********");

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


Console.WriteLine(a[i]);
}
Pada sneg
Kreirati aplikaciju u kojoj pada sneg.

struct Pahuljica
{
public int x, y, a, dy;
}

Pahuljica[] p = new Pahuljica[10];


int n = 10;
Random r = new Random();

void Crtaj(Graphics g, Pahuljica p)


{
Pen olovka = new Pen(Color.White, 3);
g.DrawLine(olovka, p.x - p.a, p.y - p.a, p.x + p.a, p.y + p.a);
g.DrawLine(olovka, p.x - p.a, p.y + p.a, p.x + p.a, p.y - p.a);
g.DrawLine(olovka, p.x - p.a / 2, p.y, p.x + p.a / 2, p.y);
g.DrawLine(olovka, p.x, p.y - p.a / 2, p.x, p.y + p.a / 2);
}

private void Form1_Load(object sender, EventArgs e)


{
int razmak = ClientRectangle.Width / (n + 1);
int x = razmak;
for (int i = 0; i < n; i++)
{
p[i] = new Pahuljica();
p[i].x = x;
x += razmak;
p[i].a = r.Next(20, 40);
p[i].y = -p[i].a;
p[i].dy = r.Next(2, 10);
}
timer1.Start();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
for (int i = 0; i < n; i++)
{
Crtaj(e.Graphics, p[i]);
}
}

private void timer1_Tick(object sender, EventArgs e)


{
for (int i = 0; i < n; i++)
{
p[i].y += p[i].dy;
if (p[i].y > ClientRectangle.Height + p[i].a)
{
p[i].a = r.Next(20, 40);
p[i].y = -p[i].a;
p[i].dy = r.Next(2, 10);
}
}
Refresh();
}

Padaju loptice
Kreirati aplikaciju u kojoj loptice padnu na pod.

struct Loptica
{
public int x, y, a, dy;
public Color boja;
}
Loptica[] p = new Loptica[10];
int n = 10;
Random r = new Random();
void Crtaj(Graphics g, Loptica p)
{
SolidBrush cetka = new SolidBrush(p.boja);
g.FillEllipse(cetka, p.x - p.a, p.y - p.a, 2 * p.a, 2 * p.a);
}
private void Form1_Load(object sender, EventArgs e)
{
int razmak = ClientRectangle.Width / (n + 1);
int x = razmak;
for (int i = 0; i < n; i++)
{
p[i] = new Loptica();
p[i].x = x;
x += razmak;
p[i].a = 10;
p[i].y = p[i].a;
p[i].dy = r.Next(2, 10);
p[i].boja = Color.FromArgb(r.Next(256), r.Next(256), r.Next(256));
}
timer1.Start();
}

private void Form1_Paint(object sender, PaintEventArgs e)


{
for (int i = 0; i < n; i++)
{
Crtaj(e.Graphics, p[i]);
}
}

private void timer1_Tick(object sender, EventArgs e)


{
for (int i = 0; i < n; i++)
{
p[i].y += p[i].dy;
if (p[i].y > ClientRectangle.Height - p[i].a)
{
p[i].dy = 0;
}
}
Refresh();
}

Krugovi
Obezbediti korisniku da dodaje krug, brie ili pomera krugove (3 radiobuuton-a).
a) Korisnik dodaje krug tako to pritisne taster mia tamo gde eli da bude
centar kruga, krug raste dokle god je pritisnut taster. Kada otpusti taster
mia izabere se na sluajan nain boja kruga, i krug se nacrta.
b) Korisnik brie jedan ili vie krugova na koje je kliknuo (kada je ukljuena
opcija za brisanje)
c) Pomeranje krugova se realizuje tako to se svaki krug iji je centar na
rastojanju po x osi veem od 5 od take na koju je korisnik kliknuo, krug
priblie za 5 piksela po x osi taki na koju je korisnik kliknuo.
struct Krug
{
public int x, y, r;
public Color boja;
}
Krug[] K = new Krug[100];
int n = 0;
Random R = new Random();

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)


{
if(rbDodaj.Checked)
if (n < 100)
{
n++;
K[n - 1].x = e.X;
K[n - 1].y = e.Y;
K[n - 1].boja = Color.FromArgb(R.Next(150, 256), R.Next(256),
R.Next(256), R.Next(256));
K[n - 1].r = 5;
timer1.Start();
}
if (rbBrisi.Checked)
{
int i = 0;
while (i < n)
{
double d = Math.Sqrt((K[i].x - e.X) * (K[i].x - e.X) +
(K[i].y - e.Y) * (K[i].y - e.Y));
if (d < K[i].r)
{
K[i] = K[n - 1];
n--;
}
else
i++;

}
pictureBox1.Refresh();
}
if (rbPomeri.Checked)
{
for (int i = 0; i < n; i++)
{
if (K[i].x - e.X >= 5) K[i].x -= 5;
else
if (e.X - K[i].x >= 5) K[i].x += 5;
}
pictureBox1.Refresh();
}
}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)


{
if (radioButton1.Checked)
{
timer1.Stop();
pictureBox1.Refresh();
}
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
SolidBrush cetka = new SolidBrush(Color.Indigo);
for(int i = 0 ; i < n ; i++)
{
cetka.Color = K[i].boja;
g.FillEllipse(cetka,K[i].x - K[i].r, K[i].y - K[i].r ,
2 * K[i].r , 2 * K[i].r);
}
}

private void timer1_Tick(object sender, EventArgs e)


{

K[n - 1].r += 10;


}

Lanac loptica
Generisati na sluajan nain lanac od n (NumericUpDown) loptica (poluprenik od 5
do30, boja i brzina nasumice odabrana od -20 do 20). Obezbediti da se klikom na
objekat klase PictureBox prikazuje lanac tako da se loptice dodiruju spolja, centar
prve loptice je taka gde smo kliknuli, a centri ostalih loptica nalaze se na pravoj
koja je paralelna x osi a sadri taku na koju smo kliknuli. Obezbediti kretanje
loptica, loptice se pomeraju po y osi u skladu sa brzinom, kada loptica udari u ivicu
forme odbija se i nastavlja kretanje u suprotnom smeru.

struct Loptica
{
public int x, y, r, dy;
public Color boja;
}

Random R = new Random();

int n;
Loptica[] a;
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
n = (int)numericUpDown1.Value;
a = new Loptica[n];
int s=e.X;
for (int i = 0; i < n; i++)
{
a[i].r=R.Next(5,20);
if (i > 0) s += a[i].r;
a[i].x=s;
a[i].y=e.Y;
a[i].boja = Color.FromArgb(R.Next(256), R.Next(256), R.Next(256));
a[i].dy = R.Next(2, 11);
if (R.Next(0, 2) == 0)
a[i].dy = -a[i].dy;
s+=a[i].r;
}

pictureBox1.Refresh();
timer1.Start();
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)


{
Graphics g = e.Graphics;
SolidBrush cetka = new SolidBrush(Color.Indigo);
for (int i = 0; i < n; i++)
{
cetka.Color = a[i].boja;
g.FillEllipse(cetka, a[i].x - a[i].r, a[i].y - a[i].r,
2 * a[i].r, 2 *a[i].r);
}

private void timer1_Tick(object sender, EventArgs e)


{
for (int i = 0; i < n; i++)
{
a[i].y += a[i].dy;
if (a[i].y <= a[i].r || a[i].y + a[i].r >= pictureBox1.Height)
{
a[i].dy = -a[i].dy;

if (a[i].dy < -2)


a[i].dy += 2;
else
if (a[i].dy > 2)
a[i].dy -= 2;
else
a[i].dy = 0;

}
}
pictureBox1.Refresh();
}

private void numericUpDown1_ValueChanged(object sender, EventArgs e)


{
timer1.Stop();
}
Modifikovati aplikaciju tako da se brzina loptice prilikom odbijanja ako je po apsolutnoj
vrednosti veca od 2
smanji za 2
inae loptica se zaustavlja

Lanac ureenih loptica


Generisati na sluajan nain lanac od n (NumericUpDown) loptica (poluprenik od 5
do30, boja i brzina nasumice odabrana od 2 do 20). Obezbediti da se klikom na
objekat klase PictureBox prikazuje lanac loptica. Loptice su u lancu ureene od
loptice najveeg poluprenika do loptice najmanjeg poluprenika, i dodiruju se
spolja. Centar prve loptice je taka gde smo kliknuli, a centri ostalih loptica nalaze
se na pravoj koja je paralelna x osi a sadri taku na koju smo kliknuli. Obezbediti
kretanje loptica na sledei nain: poslednja loptica se pomera po y osi u skladu sa
brzinom, kada loptica udari u ivicu forme netsane i poinje da se kree sledee
loptica iz lanca. Objektom klase CheckBox obezbediti izbor da li se loptice kreu ili
miruju.

struct Loptica
{
public int x, y, r, dy;
public Color boja;
}
Random R = new Random();
int n;
Loptica[] a;

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)


{
n = (int)numericUpDown1.Value;
a = new Loptica[n];
for (int i = 0; i < n; i++)
{
a[i].r = R.Next(5, 30);
a[i].boja = Color.FromArgb(R.Next(256), R.Next(256), R.Next(256));
a[i].dy = R.Next(2, 20);
}

for (int i = 0; i < n-1; i++)


for(int j=i+1;j<n;j++)
if (a[i].r < a[j].r)
{
Loptica p = a[i];
a[i] = a[j];
a[j] = p;
}
a[0].x = e.X;
a[0].y = e.Y;
for (int i = 1; i < n; i++)
{
a[i].x = a[i - 1].x + a[i - 1].r + a[i].r;
a[i].y = e.Y;
}
pictureBox1.Refresh();
if (checkBox1.Checked) timer1.Start();

private void pictureBox1_Paint(object sender, PaintEventArgs e)


{
Graphics g = e.Graphics;
SolidBrush cetka = new SolidBrush(Color.Indigo);

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


{
cetka.Color = a[i].boja;
g.FillEllipse(cetka, a[i].x - a[i].r, a[i].y - a[i].r,
2 * a[i].r, 2 * a[i].r);
}

private void checkBox1_CheckedChanged(object sender, EventArgs e)


{
if (checkBox1.Checked)
timer1.Start();
else
timer1.Stop();
}

private void timer1_Tick(object sender, EventArgs e)


{
if (n == 0)
timer1.Stop();
else
{
a[n - 1].y += a[n - 1].dy;
if (a[n - 1].y + a[n - 1].r > pictureBox1.Height)
n--;
}
pictureBox1.Refresh();
}

Izbegavanje krugova

Kreirati apliakciju kojom se na sluajan nain svake petine sekunde dodaje krug koji se pomera
po x osi (brizinu pomeranja generidsati na sluajan nain). Krug se dodaje uz levu ivicu forme.
Krugovi se pomeraju duz x ose u skladu sa brzinom koja se na sluajan nain definie pri
kreiranju kruga. Korisnik pomera mia i pri tome nestaje svaki krug kome pripada taka na kojoj
je pozicioniran mi. Kada krug, prilikom pomeranja, izae iz granica forme treba ga iskljuiti iz
niza.
struct Loptica
{
public int x, y, r, dx;
public Color boja;
}
Loptica[] a = new Loptica[100];
int n = 0;
Random R = new Random();
int x, y;

private void timer1_Tick(object sender, EventArgs e)


{
if (n < 100)
{
a[n].r = R.Next(5, 30);
a[n].x = a[n].r;
a[n].y = R.Next(a[n].r, ClientRectangle.Height - a[n].r);
a[n].dx = R.Next(2, 20);
a[n].boja = Color.FromArgb(R.Next(256), R.Next(256), R.Next(256));
n++;
Refresh();
}
}

private void Form1_Paint(object sender, PaintEventArgs e)


{
Graphics g = e.Graphics;
SolidBrush cetka = new SolidBrush(Color.Indigo);
for (int i = 0; i < n; i++)
{
cetka.Color = a[i].boja;
g.FillEllipse(cetka, a[i].x - a[i].r, a[i].y - a[i].r,
2 * a[i].r, 2 * a[i].r);
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
}

private void timer2_Tick(object sender, EventArgs e)


{
// pomeranje krugova, pri tome izbacujemo iz niza one koji izlaze iz granica forme
for (int i = 0; i < n; i++)
{
a[i].x += a[i].dx;
if (a[i].x + a[i].r > ClientRectangle.Width)
{
a[i] = a[n - 1];
n--; i--;
}
}
// izbacivanje iz niza onih krugova kojim pripada tacka na kojoj je pozicioniran mis
for (int i = 0; i < n; i++)
{
if ((a[i].x - x) * (a[i].x - x) + (a[i].y - y) * (a[i].y - y)
< a[i].r * a[i].r)
{
a[i] = a[n - 1];
n--; i--;
}
}
Refresh();
}

Igrica zmija
struct Polje
{
public int x,y;
}
int a = 20;
Polje[] z;
Polje Loptica;
int maxX, maxY, k = 0;

int pravac = 0;
Random R = new Random();
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Width = 800;
pictureBox1.Height = 500;
Width = 820;
Height = 520;
pictureBox1.Top = pictureBox1.Left = 10;
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = MinimizeBox = false;
maxX = pictureBox1.Height / a;
maxY = pictureBox1.Width / a;

z = new Polje[maxX * maxY];


pocetak();
}

private void pocetak()


{
z[0].x = R.Next(0, maxY);
z[0].y = R.Next(0, maxX);
k = 1;
do
{
Loptica.x = R.Next(0, maxY);
Loptica.y = R.Next(0, maxX);
} while (Loptica.x == z[0].x && Loptica.y == z[0].y);

pravac = 0;
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)


{
Graphics g = e.Graphics;
for (int i = 0; i < k; i++)
{
g.FillRectangle(Brushes.ForestGreen, z[i].x * a, z[i].y * a, a, a);
g.DrawRectangle(Pens.Green, z[i].x * a, z[i].y * a, a, a);
}
g.FillEllipse(Brushes.Black, z[0].x*a + a /2-a/ 4,
z[0].y*a + a/2-a / 4, 4, 4);
g.FillEllipse(Brushes.Black, z[0].x * a + a/2 +a/ 4,
z[0].y * a + a /2-a/ 4, 4, 4);
g.FillEllipse(Brushes.Black, Loptica.x*a+a/4, Loptica.y*a+a/4,a/2,a/2);
}
private void timer1_Tick(object sender, EventArgs e)
{
Polje pom = z[k - 1];
for (int i = k-1; i >0; i--)
{
z[i] = z[i - 1];
}
if(pravac ==1)z[0].x--;
if(pravac ==2)z[0].x++;
if(pravac ==3)z[0].y--;
if(pravac ==4)z[0].y++;

if (z[0].x < 0) z[0].x = maxY-1;


if(z[0].x==maxY) z[0].x=0;
if (z[0].y < 0) z[0].y = maxX-1;
if (z[0].y == maxX) z[0].y = 0;
if (Loptica.x == z[0].x && Loptica.y == z[0].y)
{
z[k] = pom;
k++;
while (LopticaPripadaZmiji())
{
Loptica.x = R.Next(0, maxY);
Loptica.y = R.Next(0, maxX);
}
}

pictureBox1.Refresh();
if(Sudar())
{
timer1.Stop();
if (MessageBox.Show(" Da li zelite novu igru", "...",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
pocetak();
pictureBox1.Refresh();
}
else
Close();
}

private void Form1_KeyDown(object sender, KeyEventArgs e)


{
if (pravac > 2 || k==1)
{
if (e.KeyCode == Keys.Left)
pravac = 1;
else
if (e.KeyCode == Keys.Right)
pravac = 2;
}
if (pravac < 3||k==1)

if (e.KeyCode == Keys.Up)
pravac = 3;
else if (e.KeyCode == Keys.Down)
pravac = 4;
if (pravac!=0)
timer1.Enabled = true;
}
// provera da li loptica pripada zmiji
bool LopticaPripadaZmiji()
{
for (int i = 0; i < k; i++)
{
if (Loptica.x == z[i].x && Loptica.y == z[i].y)
return true;

}
return false;
}
// da li zmija udara u sebe
bool Sudar()
{
for (int i = 1; i < k; i++)
{
if (z[0].x == z[i].x && z[0].y == z[i].y)
return true;

}
return false;

You might also like