You are on page 1of 15

Kalkulator, Vladimir Antonoski

ET Nikola Tesla
Beograd


Maturski rad
Iz programiranja



Tema: Kalkulator





Uenik: Predmetni profesor:
Vladimir Antonoski, IV6 Vesna Markovi










Beograd, jun 2014. Godina
Kalkulator, Vladimir Antonoski

S A D R A J

1. Uvod


2. O programu


3. Kod


4. Literatura




























Kalkulator, Vladimir Antonoski










1.Uvod

Ovaj program predstavlja jednu od esencijalnih aplikacija svih ureaja
dananjice. Bilo da je u pitanju kompjuter, mobilni telefon, platforma
za video igrice, kalkulator je sveprisutan. Pomae nam da izraunamo
neke jednostavne i neke ne tako jednostavne matematike operacije sa
velikom brzinom i, naravno, tanou. Bez njega neki ljudi ne mogu da
zamisle svakodnevicu.

Veina mojih vrnjaka je stremila ka viem, svi su eleli da prave neto
komplikovanije i interesantnije od kalkulatora. Moje aspiracije teku
mnogo drugaije od mojih kolskih prijatelja, iz tog razloga sam se
odluio da napravim neto jednostavno, ali sam odluio da to uradim na
komplikovan nain. Ipak ne bi bilo interesantno kada bismo svi radili
na isti nain. Imao sam puno problema sa shvatanjem ovog naina rada
koji je prisutan u mom programu, ali uz pomo interneta, prijatelja i
profesorke Vesne Markovi, ne bih uspeo da uradim ovo to sam
uradio. Moda se ne ini kao mnogo, ali ja sam jako ponosan na ovaj
rad i jedva ekam da ga drugi vide.














Kalkulator, Vladimir Antonoski

2. O programu

Kod ovog kalkulatora je ispisan na prilino nesvakidanji nain, koji se
razlikuje od onoga to smo uili u srednjoj koli. Koriste se globalne
promenljive, koje uvaju razliite vrednosti i stanja u kojima se nalazi
kalkulator. Primeri: koje kalkulacije se trenutno odvijaju (calcFunc), da
li se u text boxu nalazi decimalna taka (hasDecimal), da li moemo da
unesemo podatke u text box ili ne, itd. Te globalne promenljive se jo
nazivaju i zastavice (flag = uzeto iz engleskog jezika).

Ovaj kalkulator sadri:
1 x text box
21 x buttons

Pomou ovog kalkulatora, mogu se izvriti osnovne operacije kao to
su mnoenje, deljenje, sabiranje i oduzimanje. Pored tih osnovnih
operacija, mogu se i vriti i stepenovanje i korenovanje. Moe se staviti
i decimalna taka. Naravno, ovaj kalkulator sadri i dugmad koja su
esencijalna za svaki digitron, to su Jednako, sve cifre od 0-9, CE-
clear entry, C-clear all i backspace button (slui za brisanje
poslednje uneene cifre).

Slika br.1 - Pokrenut program, Kalkulator




Korienje je prililno standardno, i svako ko je ikada radio u
kalkulatoru na Windows XP ili Windows 7 operativnim sistemima e
moi da se snae u korienju.
Text box je read only, to znai da klikom na njega korisnik nee
uraditi nita. Takoe je veliina prozora fiksirana, ne moe da se
razvlai niti da se maksimizira. Prilikom deljenja nulom, prikazuje se
error poruka na kojoj pie Greka, deljenje nulom je nedozvoljeno.
Prilikom korenovanja negativnog broja, u text boxu e se prikazati
poruka NaN koja znai da takav broj ne postoji (not a number).


Kalkulator, Vladimir Antonoski


































3.Kod

Form1.cs :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;



Kalkulator, Vladimir Antonoski

namespace Kalk
{

public partial class Form1 : Form
{
//promenljive koje sluze za cuvanje vrednosti operenata
private double valHolder1;
private double valHolder2;
//promenljive koje cuvaju privremene vrednosti (value holder)
private double tmpValue;
//Tacno je samo ako se koristi ".", inace je false
private bool hasDecimal = false;
private bool inputStatus = true;
//promenljiva za cuvanje operatera
private string calcFunc;

public Form1()
{
InitializeComponent();
}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
{
//Proverava se inputstatus (proverava se da li je ista uneseno)
if (inputStatus)
{
//Jeste
//Dodeljuju se vrednosti u input box
textBox1.Text += button1.Text;
}
else
{
//Nije
//Vrednost se dodeljuje na kraju svega sto je uneseno u text box (input
box)
textBox1.Text = button1.Text;
//Inputstatus se podesava na true
inputStatus = true;
}
}


}

private void button11_Click(object sender, EventArgs e)
{
{
//Proverava se inputstatus (text box)
if (inputStatus)
{
//Ako je tacan , proveravamo da li nas textbox ima neku
vrednost
if (textBox1.Text.Length >= 1)
Kalkulator, Vladimir Antonoski

{
//Add our zero
textBox1.Text += button11.Text;
}
}
}
}

private void button2_Click(object sender, EventArgs e)
{
{
//Proverava se inputstatus (proverava se da li je ista uneseno)
if (inputStatus)
{
//Jeste
//Dodeljuju se vrednosti u input box
textBox1.Text += button2.Text;
}
else
{
//Nije
//Vrednost se dodeljuje na kraju svega sto je uneseno u text
box (input box)
textBox1.Text = button2.Text;
//Inputstatus se podesava na true
inputStatus = true;
}
}

}

private void button3_Click(object sender, EventArgs e)
{
{
//Proverava se inputstatus (proverava se da li je ista uneseno)
if (inputStatus)
{
//Jeste
//Dodeljuju se vrednosti u input box
textBox1.Text += button3.Text;
}
else
{
//Nije
//Vrednost se dodeljuje na kraju svega sto je uneseno u text
box (input box)
textBox1.Text = button3.Text;
//Inputstatus se podesava na true
inputStatus = true;
}
}
}

private void button4_Click(object sender, EventArgs e)
{
{
//Proverava se inputstatus (proverava se da li je ista uneseno)
if (inputStatus)
{
Kalkulator, Vladimir Antonoski

//Jeste
//Dodeljuju se vrednosti u input box
textBox1.Text += button4.Text;
}
else
{
//Nije
//Vrednost se dodeljuje na kraju svega sto je uneseno u text
box (input box)
textBox1.Text = button4.Text;
//Inputstatus se podesava na true
inputStatus = true;
}
}
}

private void button5_Click(object sender, EventArgs e)
{
{
//Proverava se inputstatus (proverava se da li je ista uneseno)
if (inputStatus)
{
//Jeste
//Dodeljuju se vrednosti u input box
textBox1.Text += button5.Text;
}
else
{
//Nije
//Vrednost se dodeljuje na kraju svega sto je uneseno u text
box (input box)
textBox1.Text = button5.Text;
//Inputstatus se podesava na true
inputStatus = true;
}
}
}

private void button6_Click(object sender, EventArgs e)
{
{
//Proverava se inputstatus (proverava se da li je ista uneseno)
if (inputStatus)
{
//Jeste
//Dodeljuju se vrednosti u input box
textBox1.Text += button6.Text;
}
else
{
//Nije
//Vrednost se dodeljuje na kraju svega sto je uneseno u text
box (input box)
textBox1.Text = button6.Text;
//Inputstatus se podesava na true
inputStatus = true;
}
}
}
Kalkulator, Vladimir Antonoski


private void button7_Click(object sender, EventArgs e)
{
{
//Proverava se inputstatus (proverava se da li je ista uneseno)
if (inputStatus)
{
//Jeste
//Dodeljuju se vrednosti u input box
textBox1.Text += button7.Text;
}
else
{
//Nije
//Vrednost se dodeljuje na kraju svega sto je uneseno u text
box (input box)
textBox1.Text = button7.Text;
//Inputstatus se podesava na true
inputStatus = true;
}
}
}

private void button8_Click(object sender, EventArgs e)
{
{
//Proverava se inputstatus (proverava se da li je ista uneseno)
if (inputStatus)
{
//Jeste
//Dodeljuju se vrednosti u input box
textBox1.Text += button8.Text;
}
else
{
//Nije
//Vrednost se dodeljuje na kraju svega sto je uneseno u text
box (input box)
textBox1.Text = button8.Text;
//Inputstatus se podesava na true
inputStatus = true;
}
}
}

private void button9_Click(object sender, EventArgs e)
{
{
//Proverava se inputstatus (proverava se da li je ista uneseno)
if (inputStatus)
{
//Jeste
//Dodeljuju se vrednosti u input box
textBox1.Text += button9.Text;
}
else
{
//Nije
//Vrednost se dodeljuje na kraju svega sto je uneseno u text
Kalkulator, Vladimir Antonoski

box (input box)
textBox1.Text = button9.Text;
//Inputstatus se podesava na true
inputStatus = true;
}
}
}

private void button10_Click(object sender, EventArgs e)
{
//Proveravamo text box (inputstatus)
if (inputStatus)
{
//Proveravamo da li vec postoji decimalna tacka u text boxu, ako
ima, nista se ne dodeljuje
if (!hasDecimal)
{
//Proveravamo da li je duzina onoga u text boxu veca od 1 ( >
1)
//Ne zelimo da korisnik unese decimalnu tacku kao prvi
karakter
if (textBox1.Text.Length != 0)
{
//Proveravamo da li je 0 prvi broj
if (textBox1.Text != "0")
{
//Ako se svi uslovi ispune, dodamo nasu decimalnu
tacku
textBox1.Text += button10.Text;
//Prebacimo hasDecimal na true, jer ne zelimo vise od
jedne decimalne tacke u text
hasDecimal = true;
}
}
else
{
//S obzirom da duzina nije veca od 1, text se pretvara u 0
textBox1.Text = "0.";
}
}
}
}

private void button13_Click(object sender, EventArgs e)
{
//Proveravamo da li je text box prazan
if (textBox1.Text.Length != 0)
{
//Ako nije, onda proveravamo da li se funkcija koristi
if (calcFunc == string.Empty)
{
//Funkcija se ne koristi i onda se vrednost dodeljuje u text
box holderu (value holder = privremeni cuvalac vrednosti)
valHolder1 = System.Double.Parse(textBox1.Text);
//Praznimo text box
textBox1.Text = string.Empty;
}
else
{
Kalkulator, Vladimir Antonoski

//Funkcija se koristi
//Odmah pozivamo metod CalculateTotals
CalculateTotals();
}
//Dodeljujemo vrednost zastavici calcFunc i tada se vrsi sabiranje
calcFunc = "Add";
//Cim zavrsimo racun, moramo da podesimo hasDecimal na false jer
pri sledecem racunu, zelimo da korisnik opet moze da iskoristi decimalnu tacku
hasDecimal = false;
}
}

private void button15_Click(object sender, EventArgs e)
{
//Proveravamo da li je text box prazan
if (textBox1.Text.Length != 0)
{
//Ako nije, onda proveravamo da li se funkcija koristi
if (calcFunc == string.Empty)
{
//Funkcija se ne koristi i onda se vrednost dodeljuje u text
box holderu (value holder = privremeni cuvalac vrednosti)
valHolder1 = System.Double.Parse(textBox1.Text);
//Praznimo text box
textBox1.Text = string.Empty;
}
else
{
//Funkcija se koristi
//Odmah pozivamo metod CalculateTotals
CalculateTotals();
}
//Dodeljujemo vrednost zastavici calcFunc i tada se vrsi
oduzimanje
calcFunc = "Subtract";
//Cim zavrsimo racun, moramo da podesimo hasDecimal na false jer
pri sledecem racunu, zelimo da korisnik opet moze da iskoristi decimalnu tacku
hasDecimal = false;
}
}

private void button17_Click(object sender, EventArgs e)
{
//Proveravamo da li je text box prazan
if (textBox1.Text.Length != 0)
{
//Ako nije, onda proveravamo da li se funkcija koristi
if (calcFunc == string.Empty)
{
//Funkcija se ne koristi i onda se vrednost dodeljuje u text
box holderu (value holder = privremeni cuvalac vrednosti)
valHolder1 = System.Double.Parse(textBox1.Text);
//Praznimo text box
textBox1.Text = string.Empty;
}
else
{
//Funkcija se koristi
//Odmah pozivamo metod CalculateTotals
Kalkulator, Vladimir Antonoski

CalculateTotals();
}
//Dodeljujemo vrednost zastavici calcFunc i tada se vrsi mnozenje
calcFunc = "Multiply";
//Cim zavrsimo racun, moramo da podesimo hasDecimal na false jer
pri sledecem racunu, zelimo da korisnik opet moze da iskoristi decimalnu tacku
hasDecimal = false;
}
}

private void button19_Click(object sender, EventArgs e)
{
//Proveravamo da li je text box prazan
if (textBox1.Text.Length != 0)
{
//Ako nije, onda proveravamo da li se funkcija koristi
if (calcFunc == string.Empty)
{
//Funkcija se ne koristi i onda se vrednost dodeljuje u text
box holderu (value holder = privremeni cuvalac vrednosti)
valHolder1 = System.Double.Parse(textBox1.Text);
//Praznimo text box
textBox1.Text = string.Empty;
}
else
{
//Funkcija se koristi
//Odmah pozivamo metod CalculateTotals
CalculateTotals();
}
//Dodeljujemo vrednost zastavici calcFunc i tada se vrsi deljenje
calcFunc = "Divide";
//Cim zavrsimo racun, moramo da podesimo hasDecimal na false jer
pri sledecem racunu, zelimo da korisnik opet moze da iskoristi decimalnu tacku
hasDecimal = false;
}
}

private void button14_Click(object sender, EventArgs e)
{
//Proveravamo da li je text box prazan
if (textBox1.Text.Length != 0)
{
//Proveravamo da li se funkcija koristi
if (calcFunc == string.Empty)
{
//Funkcija se ne koristi i onda se vrednost dodeljuje u text
box holderu (value holder = privremeni cuvalac vrednosti)
valHolder1 = System.Double.Parse(textBox1.Text);
//Praznimo text box kako bi korisnik mogao da unese izlozilac
vrednosti (power of)
textBox1.Text = string.Empty;
}
else
{
// Odmah pozivamo metod CalculateTotals ako se funkcija
koristi
CalculateTotals();
}
Kalkulator, Vladimir Antonoski

//Dodamo calcFunc zastavici "Power of" i tada se vrsi stepenovanje
calcFunc = "PowerOf";
//Cim zavrsimo racun, moramo da podesimo hasDecimal na false jer
pri sledecem racunu, zelimo da korisnik opet moze da iskoristi decimalnu tacku
hasDecimal = false;
}
}

private void button18_Click(object sender, EventArgs e)
{
//Proveravamo da li text box ima vrednost neku
if (textBox1.Text.Length != 0)
{
//Dodajemo nasu promenljivu vrednost u text box
tmpValue = System.Double.Parse(textBox1.Text);
//Obavljamo funkciju korenovanja
tmpValue = System.Math.Sqrt(tmpValue);
//Prikazujemo rezultat
textBox1.Text = tmpValue.ToString();
//hasDecimal se podesava na false
hasDecimal = false;
}
}

private void button20_Click(object sender, EventArgs e)
{
//Deklarisu se potrebne promenljive
string str;
int loc;
//Proveravamo da li je text box prazan
if (textBox1.Text.Length > 0)
{
//Idemo na poslednji karakter
str = textBox1.Text.Substring(textBox1.Text.Length - 1);
//Proverimo da li je u pitanju decimalna tacka
if (str == ".")
{
//Ako jeste, onda se hasDecimal podesava na false
hasDecimal = false;
}
//Uzimamo duzinu stringa
loc = textBox1.Text.Length;
//Skidamo poslednji karakter, inkrementacijom za 1
textBox1.Text = textBox1.Text.Remove(loc - 1, 1);
}
}

private void button22_Click(object sender, EventArgs e)
{
//Praznimo text box
textBox1.Text = string.Empty;
hasDecimal = false;
}

private void button21_Click(object sender, EventArgs e)
{
//Praznimo text box
textBox1.Text = string.Empty;
//Cistimo obe privremene vrednosti
Kalkulator, Vladimir Antonoski

valHolder1 = 0;
valHolder2 = 0;
//calcFunc se mora resetovati
calcFunc = string.Empty;
//Decimalna tacka se takodje resetuje
hasDecimal = false;
}
private void CalculateTotals()
{
valHolder2 = System.Double.Parse(textBox1.Text);
//Odredjujemo koju operaciju cemo izvrsiti proveravanje vrednosti
calcFunca
switch (calcFunc)
{
//Sabiranje
case "Add":
valHolder1 = valHolder1 + valHolder2;
break;
//Oduzimanje
case "Subtract":
valHolder1 = valHolder1 - valHolder2;
break;
//Deljenje
case "Divide":
if (valHolder2 == 0) MessageBox.Show("Greka, deljenje nulom
je nedozvoljeno");
else
valHolder1 = valHolder1 / valHolder2;
break;
//Mnozenje
case "Multiply":
valHolder1 = valHolder1 * valHolder2;
break;
//Eksponenti
case "PowerOf":
valHolder1 = System.Math.Pow(valHolder1, valHolder2);
break;
}
//Vrednost text boxa se menja u izlaznu vrednost operacije koje smo
izvrsili
textBox1.Text = valHolder1.ToString();
inputStatus = false;
}

private void button16_Click(object sender, EventArgs e)
{

}

private void button12_Click(object sender, EventArgs e)
{
valHolder2 = System.Double.Parse(textBox1.Text);
//Odredjujemo koju operaciju cemo izvrsiti proveravanje vrednosti
calcFunca
switch (calcFunc)
{
//Sabiranje
case "Add":
valHolder1 = valHolder1 + valHolder2;
Kalkulator, Vladimir Antonoski

break;
//Oduzimanje
case "Subtract":
valHolder1 = valHolder1 - valHolder2;
break;
//Deljenje
case "Divide":
if (valHolder2 == 0) MessageBox.Show("Greka, deljenje nulom
je nedozvoljeno");
else
valHolder1 = valHolder1 / valHolder2;
break;
//Mnozenje
case "Multiply":
valHolder1 = valHolder1 * valHolder2;
break;
//Eksponenti
case "PowerOf":
valHolder1 = System.Math.Pow(valHolder1, valHolder2);
break;
}
//Vrednost text boxa se menja u izlaznu vrednost operacije koje smo
izvrsili
textBox1.Text = valHolder1.ToString();
inputStatus = false;
}

}
}




4. Literatura

1. Profesorka Vesna Markovi
2. http://www.dreamincode.net/
3. http://msdn.microsoft.com

You might also like