Program: C++ digitron(basic) - source code

Teme vezane za console/GUI programiranje u C/C++ jeziku
9 post(ov)a • Stranica: 1/1.

Program: C++ digitron(basic) - source code

PostPostao/la DexterTM » 16 ruj 2013, 22:47

Evo sad sam malo ušao u C++, da provjerim svoje osnove, da li su zahrđale i uz malu pomoć foruma da se sjetim nekih stvarčica napravio sam ovaj digitron.
Kod ulaska u sam program morate izabrati koju funkciju želite:
1. Sabiranje
2. Oduzimanje
3. Množenje
4. Djeljenje
Program je rađen pomoću switch naredbe.

A što se tiče ovog getch(); neka navika koju sam pokupio od profesora još u prvom razredu, jer on je koristio getch, koji navodno "izvlači" iz biblioteke conio.h. Želim čuti vaš savjet oko ove biblioteke, je li to korisna stvar, ili da se držim onog standardnog system("pause");.

Download:
Program: http://www.solidfiles.com/d/5071c652ca/
Source code: http://www.solidfiles.com/d/c1a51c210f/
Source code pastebin verzija: http://pastebin.com/FAHMnT6z

Volio bih čuti savjete i kritike.

Re: Program: C++ digitron(basic) - source code

PostPostao/la gagiD » 16 ruj 2013, 23:03

Fino si ovo odradio :)

A sto se tice getch()-a prvi put cujem , znam da na CodeBlocks ne treba ni system("pause"); ni bilo sta nego se sam zaustavi , tako da je to od kompajlera do kompajlera.

Re: Program: C++ digitron(basic) - source code

PostPostao/la DexterTM » 17 ruj 2013, 09:18

Hvala, polako pripremam update, sa malo "naprednijim" funkcijama u digitronu.

Re: Program: C++ digitron(basic) - source code

PostPostao/la Ramiz » 08 sij 2014, 22:17

Nasao sam ti problem(bug) kod digitrona. Predpostavljam da znas da dijeljenje nulom nema smisla, stoga stavljaj provjeru kod istoga... :)
slika

Re: Program: C++ digitron(basic) - source code

PostPostao/la tomRiddle » 26 sij 2014, 00:11

Pozdrav.

Imam nekoliko primjedbi na ovaj digitron, koje nisu toliko vezane za samo rješenje problema nego za upotrebu C++ programskog jezika. Moguće je uraditi mnogo bolji program sa praktično istim kodom.

Ali, prije svega, nemoj koristiti conio.h (nema svrhe, koristiš ga samo za zaustavljanje programa, što nije ni nužno), ne može se kompajlovati na linux-u :D .

Ono što u C++ treba izbjegavati u širokom luku jeste switch. Switch može primati samo int tip podatka, što pri malo kompleksnijim problemima postaje veliko ograničenje. Uvijek else if lanac...

Istraži malo kako se pišu template funkcije, to bi ti omogućilo da napišeš funkciju sa potpisom:

template<typename T>
T digitron(T, T);

Ova funkcija bi bez problema obavljala date operacije sa svakim tipom podatka za koji su definisani operatori +, -, *, /, a ne samo int tip podatka...

Uskoro, kada budem slobodan, napisaću jedan digitron koji će uključivati sve ovo što sam naveo, te u kome ću pokušati prikazati što više praktičnih stvari iz c++.

Lijep pozdrav

Re: Program: C++ digitron(basic) - source code

PostPostao/la Armin » 26 sij 2014, 12:41

tomRiddle je napisao/la:
Ono što u C++ treba izbjegavati u širokom luku jeste switch. Switch može primati samo int tip podatka, što pri malo kompleksnijim problemima postaje veliko ograničenje. Uvijek else if lanac...


Otkud ti to da switch moze primiti samo int tip podatka?

http://www.cplusplus.com/forum/beginner/607/

Dalje, ne treba ti template jer ćeš imati realne (float, double, ...) brojeve uvijek (osim ako ne programiraš onaj naučni digitron sa kompleksnim brojevima).

Operatori +,-,*,/ su definirani da rade sa podacima tipa float/double tako da ne treba redefiniranje operatora.

Keep it simple :)
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

Re: Program: C++ digitron(basic) - source code

PostPostao/la gagiD » 26 sij 2014, 13:39

tomRiddle je napisao/la:Ono što u C++ treba izbjegavati u širokom luku jeste switch ... Uvijek else if lanac...


Mislim da je switch brzi jer uslov ispituje samo jednom.

Re: Program: C++ digitron(basic) - source code

PostPostao/la tomRiddle » 26 sij 2014, 22:56

Armin je napisao/la:Otkud ti to da switch moze primiti samo int tip podatka?

Operatori +,-,*,/ su definirani da rade sa podacima tipa float/double tako da ne treba redefiniranje operatora.

Keep it simple :)


To za switch je definicija :D .

Primjer koji su postavio govori o primjeni char elementa (char se jednostavno konvertuje u int)...

Pokušaj sa nekim tipom koji se ne može konvertovati u int i kompajler će ti javiti grešku...

Npr.

string a="Test";

switch(a)
{
case "Jedan":
// Uradi nesto
break;

case "Dva":
// Uradi nesto drugo :D
break;
}

Neće isravno raditi...

Template funkcija iz jednostavnog razloga... Ako sabiram dva inta (5 i 10), bolje je da kompiler napravi funkciju koja sabira dva inta, nego da ja mislim pa da kasnije vodim računa je li double ili int...

Utrošak memorije je veći sa double nego sa int (a ako je int bio dovoljan, čemu to)
Kada vršiš ispis, prosto ispišeš svoj rezultat, a ne da moraš formatirati i sl.

Kod digitrona i nije važan utrošak memorije (8 Bytes or 20 Bytes, who cares), ali je dobro stvarati dobru praksu za eventualne veće projekte...

gagiD je napisao/la:
Mislim da je switch brzi jer uslov ispituje samo jednom.



Definitivno ne. Kada bi neki programski kod mogao navesti procesor da jednom odlukom odmah ode na željeno mjesto, to bi bio veliki napredak u oblasti programiranja. Procesor uvijek može dati odgovore DA i NE kada su uslovi u pitanju, vaše je da to iskoristite...

Postoji hashing, pomoću kojeg se brže dolazi do željene informacije, ali to je druga oblast (strukture podataka)...

Switch radi upravo kao if-else lanac, jer mora vidjeti da li izraz u switch dijelu odgovara prvom case-u, ako ne, provjeri drugi itd....

Re: Program: C++ digitron(basic) - source code

PostPostao/la gagiD » 06 ožu 2014, 21:50

tomRiddle je napisao/la:
gagiD je napisao/la:
Mislim da je switch brzi jer uslov ispituje samo jednom.



Definitivno ne. Kada bi neki programski kod mogao navesti procesor da jednom odlukom odmah ode na željeno mjesto, to bi bio veliki napredak u oblasti programiranja. Procesor uvijek može dati odgovore DA i NE kada su uslovi u pitanju, vaše je da to iskoristite...

Postoji hashing, pomoću kojeg se brže dolazi do željene informacije, ali to je druga oblast (strukture podataka)...

Switch radi upravo kao if-else lanac, jer mora vidjeti da li izraz u switch dijelu odgovara prvom case-u, ako ne, provjeri drugi itd....


Da pogresio sam , izraz u switch-u se izracunava jednom a u if-else bi se vise puta izracunao ili jedna varijabla vise koja se vjerovatno alocira pri izvrsavanju switcha tako da dođe na isto , samo switch je pregledniji(barem meni).
A razlog zbog kojeg switch moze biti brzi od if-else je break ali to je od slucaja do slucaja.


9 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.