PDA

Pogledaj cijelu verziju : moj prvi c++ program :D :P



RZR
07-07-2008, 18:25
mozda se neko sjeca da sam prije nekih pol godine postavljao pitanja o programiranju
nisam imao vremena zbog skole pa cu sad iskoristit ljeto

znaci poceo sam jucer nes radit u c++
uzeo sam knjigu i pronasao neke tutove
ali posto vec znam osnove jer sam nes malo radio u pascalu
i znam princip i teoriju programiranja
sam sve to ljepo pospremio
i otvorio dev-c++

sta je bolje raditi za pocetak nego kalkulator
i tako sam poceo
nekako se snalazio
pohvatao usput
i napravio ovo :D




#include <iostream>
using namespace std;

int main (void)

{

int odabir;

cout << "stisnite 1 za pocetak koristenja programa" << "\n";
cin >> odabir;
while (odabir == 1)

{

float rezultat;
float prvi_broj;
float drugi_broj;
int operacija;

cout << "odaberite racunsku operaciju" << "\n" << "za zbrajanje stisnite 1" << "\n" << "za oduzimanje stisnite 2" << "\n" << "za mnozenje stisnite 3" << "\n" << "za djeljenje stisnite 4" << "\n";
cin >> operacija;

if (operacija == 1 )
{
cout << "upisite prvi broj" << "\n";
cin >> prvi_broj;
cout << "upisite drugi broj" << "\n";
cin >> drugi_broj;
rezultat = prvi_broj + drugi_broj;
cout << "rezultat je " << rezultat << "\n";
}
else if (operacija == 2 )
{
cout << "upisite prvi broj" << "\n";
cin >> prvi_broj;
cout << "upisite drugi broj" << "\n";
cin >> drugi_broj;
rezultat = prvi_broj - drugi_broj;
cout << "rezultat je " << rezultat << "\n";
}
else if (operacija == 3 )
{
cout << "upisite prvi broj" << "\n";
cin >> prvi_broj;
cout << "upisite drugi broj" << "\n";
cin >> drugi_broj;
rezultat = prvi_broj * drugi_broj;
cout << "rezultat je " << rezultat << "\n";
}
else if (operacija == 4 )
{
cout << "upisite prvi broj" << "\n";
cin >> prvi_broj;
cout << "upisite drugi broj" << "\n";
cin >> drugi_broj;
rezultat = prvi_broj / drugi_broj;
cout << "rezultat je " << rezultat << "\n";
}

else
cout << "unjeli ste nepostojeci odabir" << "\a" << "\n";

cout << "zelite li nastaviti s radom ili izaci iz programa?" << "\n" << "za nastavak stisnite 1" << "\n" << "za izlaz stisnite 0" << "\n";
cin >> odabir;

}

cout << "za izlaz iz programa stisnite bilo koju tipku" << "\n";
char kraj;
cin >> kraj;

return 0;
}



znam da nije bas najbolje rjesenje
jer neke stvari nisam znao pojednostavniti tako da ima i visaka
zato sam i stavio ovo ovdje
da mozete malo komentirati
i reci mi di mogu srezati visak koda
i sto bi bilo bolje drugacije napraviti
da bude malo kompaktnije :D

Luka
07-07-2008, 18:55
umjeso if-else-a, stavi switch(rezultat), i u njega stavi samo različitosti (rezultat = prv + drugi), zamijeni "char kraj; cin >> kraj;" sa funkcijom getch() u conio.h

RZR
07-07-2008, 20:20
jooj nemoj tako ucenim rijecima
:D :D
ovo za switch sam bas danas gledao nesto
al jos nisam isprobao pa moram vidit
a ovo za kraj te nisam skuzio
vidio sam da za tu pauzu postoji vise rjesenja al ovo je jedino koje sam skuzio
iako
posto imam ovaj red ispred mozda mi je ta pauza potpuno nepotrebna
i ovo na pocetku di trazi da se stisne 1
kod pokretanja
mislim da bi to mogao izbacit
ako stavim da je ta variabla unaprijed određena

edit:
maknuo sam na pocetku ovo zahtjevanje da se stisne 1
maknuo sam na kraju ovu 'pauzu'
stavio sam switch umjesto if-else if-else
u ovom slucaju ne vidim neku razliku
ali pretpostavljam da je switch bolji zbog 'propadanja'

nego mogu li ovo

cout << "stisni +";
cin >> plus;
i koja je to vrsta varijable onda
char, string???
nagađam da je string

Luka
08-07-2008, 14:33
switch radi na gotovo jednak način kao if, koristiš ga kad se s njime dobije razumljiviji kod (kao u tvom slučaju)

getch() je funkcija koja će od korisnika zatražiti da pritisne bilo koju tipku i tek onda omogućiti nastavak rada programa, upravo ono što tebi treba
da bi ju koristio moraš uključiti zaglavlje conio.h naredbom koju ćeš dodati na sam početak koda: include <conio.h>;
postoje i alternative, no ova funkcija je najćešće korištena


cout << "stisni +";
cin >> plus;
ovisi kojeg je tipa "plus", cin nemože samo tako mijenjati vrstu varijable

RZR
08-07-2008, 17:37
znam da nemoze mijenjati vrstu varijable
al mene zanima kojoj vrsti varijable mogu pridruziti simbole +, -, *, /
jer to nisu ni slova ni brojevi :?

fps_gamer
08-07-2008, 17:41
char meni se cini...


char zbrajanje = '+'

RZR
08-07-2008, 19:18
da samo sto nebi odmah odredio nego bi se to trebalo ucitati
znaci

(stisne se prvi broj)
cin >> prvi_broj
(stisne se +)
cin >> plus
...

samo kad sam stavio da je ta varijabla char
mi nije radilo
mozda sam negdje drugdje falio pa cu probat opet

Luka
08-07-2008, 19:54
znam da nemoze mijenjati vrstu varijable
al mene zanima kojoj vrsti varijable mogu pridruziti simbole +, -, *, /
jer to nisu ni slova ni brojevi :?

to su znakovi (char==znak), i spremaju se u char varijablu

naravno, moguće je i zakomplicirati sa stringom ali nema potrebe

RZR
08-07-2008, 20:25
znaci negdje sam drugdje falio
jer sam probao char i nije radilo
i onda sam nes pokusavao preko stringa ali mi stringovi jos nisu bas jasni pa nsaim uspio

Luka
08-07-2008, 20:43
prepiši grešku ovdje

RZR
08-07-2008, 21:13
nazalost je nemam
jer nisam mogao compileat pa sam pobrisao to i vratio kako je bilo
probam sutra opet
pa ako opet ne budem mogao cu ovdje okacit
moguce da sam negdje falio u sintaxi ili necem slicnom

RZR
14-07-2008, 07:37
evo jutros sam uhvatio vremena napisati kod ispocetka
ovako je po meni puno jednostavnije a i bolje
jer ima mogucnost racunanja s vise od 2 broja (kad bi radilo) :D
osim toga nije onako zamorno za koristiti jer ne trazi sve one 'odabire'
nego se samo koriste broijevi i znakovi (+, -, *, /, =)




#include <iostream>
#include <conio.h>
using namespace std;

int main ()

{
float prvi_broj;
float drugi_broj;
float rezultat =0;
char operacija;

cin >> prvi_broj;
rezultat = rezultat + prvi_broj;
cin >> operacija;

while (operacija != '=')
{

switch (operacija)
{
case '+';
cin >> drugi_broj;
rezultat = rezultat + drugi_broj;
break;

case '-';
cin >> drugi_broj;
rezultat = rezultat - drugi_broj;
break;

case '*';
cin >> drugi_broj;
rezultat = rezultat * drugi_broj;
break;

case '/';
cin >> drugi_broj;
rezultat = rezultat / drugi_broj;
break;
}

cin >> operacija;
}

cout << "Rezultat je : " << rezultat << "\n";

getch ();
return 0;
}



na sva 4 mjesta gdje je koristen 'case' mi javlja gresku kad pokrenem compiler
expected `:' before ';' token

Luka
14-07-2008, 11:50
zato što treba doći ":" a ne ";", samo zamijeni ta 2 znaka

fps_gamer
14-07-2008, 12:12
sad ce pitati gdje... poslije case...

Luka
14-07-2008, 12:15
"rezultat = rezultat + prvi_broj;" je isto što i "rezultat = prvi_broj;"

cin >> drugi_broj; stavi prije switcha jer se uvijek ponavlja

Plexihack
14-07-2008, 12:25
"rezultat = rezultat + prvi_broj;" je isto što i "rezultat = prvi_broj;"

cin >> drugi_broj; stavi prije switcha jer se uvijek ponavlja

"rezultat = rezultat + prvi_broj;" je isto što i "rezultat +=Sprvi_broj;"

k,10x,bye ^^

Luka
14-07-2008, 12:29
da, ali pogledaj njegov primjer - rezultat je 0 pa nema smisla pribrajati nulu

fps_gamer
14-07-2008, 13:28
nisam gledao bas detaljno kod ali mozda mu poslije zatreba zbrajanje rezultata koji nece biti 0...

Luka
14-07-2008, 13:54
ofc, ali za ono što je on htio nije potrebno ;)

RZR
14-07-2008, 16:20
hvala na pomoci

nemogu vjerovati sto sam falio
bio sam uvjeren da je ; (neznam zasto)
to sam sredio
i jos sam malo uredio neke sitnice
jos moram samo napraviti
da se moze koristiti vise puta za redom

pa me zanima vezano uz to
razmisljao sam da na kraju pita dali se zali nastaviti
pa napraviti jos jednu while petlju
ali me zanima postoji li jos neki nacin da napravim reset

btw
zasto kod nekih biblioteka na kraju ima .h
??

Plexihack
14-07-2008, 16:59
Hmmm...ja sam u svoj kalkulator bio ubacio funkcije i njih kombinirao sa switchevima,tako da bi se vratilo na prvu funkciju ( mainfun(); )

RZR
14-07-2008, 19:31
posto te nisam ni razumio
nevjerujem da cu uspjet to napravit
:D :D

Plexihack
14-07-2008, 20:22
xD
Pogledaj funkcije,lakše ćeš shvatit...
A evo ti sa Do-while l00pom


#include <cstdlib>
#include <iostream>


using namespace std;
int brop; // Odabir
float br1; //Prvi broj
float br2; //Drugi broj
float rezultat; // Rezultat
char odabir; //Odabir loopa
int main(int argc, char *argv[])
{
cout << "Pozdrav!\nDobrodosli u Old Skool Calculator v0.02\n";

do {
cout << "Odaberite sto zelite raditi:\n";
cout << "1 - Zbrajati\n2 - Oduzimati\n3 - Mnoziti\n4 - Dijeliti\n";
cout << "Molimo upisite broj operacije.\n";
cout << "Vas odabir je? ";
cin >> brop;
cout << "\n";

//Zbrajanje
if (brop==1)
{cout << "Odabrali ste zbrajanje.\nUpisite prvi pribrojnik: ";
cin >> br1;
cout << "\nUpisite drugi pribrojnik: ";
cin >> br2;
rezultat = br1 + br2;
cout << "\n\n Rezultat je = " << rezultat << "\n";}

//Množenje
else if (brop==3)
{cout << "Odabrali ste mnozenje.\nUpisite prvi faktor: ";
cin >> br1;
cout << "\nUpisite drugi faktor: ";
cin >> br2;
rezultat = br1 * br2;
cout << "\n\n Rezultat je = " << rezultat << "\n";}

//Oduzimanje
else if (brop==2)
{cout << "Odabrali ste oduzimanje.\nUpisite umanjenik: ";
cin >> br1;
cout << "\nUpisite umanjitelj: ";
cin >> br2;
rezultat = br1 - br2;
cout << "\n\n Rezultat je = " << rezultat << "\n";}

//Dijeljenje
else if (brop==4)
{cout << "Odabrali ste dijeljenje.\nUpisite djeljenik: ";
cin >> br1;
cout << "\nUpisite djeljitelj: ";
cin >> br2;
rezultat = br1 / br2;
cout << "\n\nRezultat je = " << rezultat << "\n";};

//Izbor

cout << "\nŽelite li opet racunati?Ako da upisite D,a ako ne upisite N : ";
cin >> odabir;
cout << "\n" ;
} while (odabir=='D');

//pauza :D
system("PAUSE");
return EXIT_SUCCESS;
}

RZR
14-07-2008, 20:47
ako se ne varam ovako je nekako izgledala moja prva verzija
ali je nedostatak bio sto se moglo racunati samo sa 2 broja
meni se cini da je ovo sto sam sad napravio dosta jednostavnije

ali imam 2 pitanja

prvo pretpostavljam da je razlika između while i do-while
u tome sto u prvom slucaju odmah treba odrediti varijablu na kojoj se temelji while
dok se u drugom slucaju ta varijabla moze odrediti na kraju

i druga stvar so me zanima je cemu sluzi cstdlib biblioteka

jos uvijek me zanima ono iz prethodnog posta sto se tice .h u nazivima nekih biblioteka
i nacina reseta

RZR
14-07-2008, 21:01
evo mislim da sam gotov
trenutno nemam ideja kako bi jos mogao poboljsati kalkulator
kad se sjetim jos necega cu dodati




#include <iostream>
#include <conio.h>
using namespace std;
int main ()

{
float prvi_broj;
float drugi_broj;
float rezultat;
char operacija;
char prekid;

do
{
rezultat =0;
cin >> prvi_broj;
rezultat = rezultat + prvi_broj;
cin >> operacija;

while (operacija != '=')
{

cin >> drugi_broj;
switch (operacija)
{

case '+':
rezultat = rezultat + drugi_broj;
break;

case '-':
rezultat = rezultat - drugi_broj;
break;

case '*':
rezultat = rezultat * drugi_broj;
break;

case '/':
rezultat = rezultat / drugi_broj;
break;
}

cin >> operacija;
}

cout << "Rezultat je : " << rezultat << "\n";
cout << "Zelite li nastaviti s radom? D/N" << "\n";
cin >> prekid;
} while (prekid == 'D');

getch ();
return 0;
}



koliko sam vidio sve funkcionira onako kako zelim
a evo i link za skinuti pa mozete i sami isprobati



http://rapidshare.com/files/129706234/calculator_1_0.exe.html


sto mi preporucujete za sljedeci 'projekt' :D
znate li mozda neku stranicu s slicnim zadatcima ali malo određenijima??

Luka
14-07-2008, 21:25
http://programiranje.big-forum.net/prog ... io-t16.htm (http://programiranje.big-forum.net/programski-jezik-c-f1/skupina-zadataka-za-vjezbu-1-dio-t16.htm)
http://programiranje.big-forum.net/prog ... io-t17.htm (http://programiranje.big-forum.net/programski-jezik-c-f3/skupina-zadataka-za-vjezbu-2-dio-t17.htm)

imaš brdo prilično jednostavnih zadataka...

RZR
16-07-2008, 07:09
hvala :D

Luka
16-07-2008, 10:14
@RZR

1.
while prilikom svake iteracije petlje prvo evoluira logički uvjet a tek onda izvršava kod, dok do-while radi obrnuto

npr.



do
{
cout << "abc";
} while (0 > 1);


će ispisati "abc" jer se uvjet provjeravao tek nakon izvršavanja koda unutar petlje



while (0 > 1)
{
cout << "abc"
}


nikad neće ispisati "abc"

2.
http://www.cplusplus.com/reference/clibrary/cstdlib/

3.
misliš na pravi restart, da se program zatvori i ponovno pokrene?

Plexihack
16-07-2008, 10:20
Eh,sad bi ti postao primjer da vidiš kako sam ja to napravio,ali nemogu nać...

Ugl.


funkcija kalkulator()
{
blablabla;
kalkulator();
};

int main()
{
kalkulator();
system("PAUSE");
return 0;
}

Jutro je,pa neznam dali si primjer valja šta :D

Ugl.Kalkulator funkcija,na kraju svakog switcha će opet pokretat sama sebe.
Najbolje je da postaviš pitanje na kraju dali opet pokrenuti i onda if uvjet prije funkcije.

RZR
16-07-2008, 16:52
sto se tice restarta
ne treba mi da se gasi i ponovo pokrece
znam napraviti restart if funkcijom
ali su me zanimali i drugi nacini

@plexihack
zanimljivo je ovo s funkcijama
ali nisam siguran da sam skuzio
bilo bi dobro ako nadjes neki primjer
ali ako ne nema veze
skuzit cu kad bude vrijeme za to

RZR
29-09-2008, 08:26
evo samo da se javim
da znate da nisam odustao
trenutno u skoli radimo pa sam zato c++ stavio na pauzu