Stranica 1 od 1

ccalc

PostPoslato: Nedelja, 15. Novembar 2015, 16:31
od ubavic
Sinoc sam uspeo da zavrsim jedan mali program koji sam krenuo sasvim slucajno da pisem pre par nedelja. U pitanju je kalkulator napisan u C jeziku. ccalc je sasvim jednostavan, podrzava samo osnovne aritmeticke operacije, cele brojeve i zagrade. Ceo program ima oko 350 linija koda, i tezak je 18kb kada se kompajlira. Znam nije nesto specijalno, ali za mene je bio science fiction kada sam ga pisao. Ovde mozete pogledati i skinuti source code: calc.c.

Voleo bih kada bi ga neko od vas skinuo i malo testirao na svojoj masini (cisto da proverite bugove). Ko nadje bug ima od mene pivo (toceno, ladno). Odmah da vam kazem, za izraz 6/2*(2+1) izbacuje devetku. Za sada sam otkrio da zakera samo prilikom deljenja sa ostatkom (sto je ocekivano posto koristim long type za racunjanje i to nije bug).

Ja sam ga kompajlirao na linux x86_64 masini uz pomoc g++ komande:
g++ calc.c

Program se pokrece tako sto se u shellu (terminal, comand line) otvori folder u kojem se nalazi kompajliran program, i ukuca komanda:
./a.out matematicki_izraz

matematicki izraz se sastoji od cifara, otvorenih i zatvorenih zagrada (), i operacija +, -, *, /. Pre zagrada i znaka * potrebno je uneti "\". Npr:
[dispmath](3+21)/8-2*9 \\ \text{treba uneti kao}[/dispmath]
\(3+21\)/8-2\*9

Program je sposoban da racuna sa brojevima u intervalu [inlmath]\left[-2147483645,2147483647\right][/inlmath].
Ko bude zeleo da ga tera na windowsu pomoci cu mu da ga iskompajlira i pokrene.

Re: ccalc

PostPoslato: Ponedeljak, 16. Novembar 2015, 19:23
od ubavic
Iskompajlirao sam verziju za Windows: calc.rar . Lozinka je calc. Program pokrećete tako sto raspakujete arhivu, otvorite cmd program (Start->Accessories->Command Prompt), ukucate komandu CD lokacija_programa (npr. CD C:\Users\Korisnik\downloads\calc\ ), pa nakon toga ukucajte calc matematicki_izraz bez kosih crta (npr. calc 2+3*8+(3-1)).

Re: ccalc

PostPoslato: Utorak, 17. Novembar 2015, 18:14
od pentagram142857
Isprobao sam tvoj kalkulator.

Ubavicev kalkulator.png
Ubavicev kalkulator.png (1.38 KiB) Pogledano 4272 puta

I kao sto vidis, u drugom i trecem koraku ne pokazuje tacno resenje, cak iako sam koristio brojeve iz intervala. :geek:
Ne pijem pivo, cak ni ako je toceno i ladno. :)

Re: ccalc

PostPoslato: Sreda, 18. Novembar 2015, 02:06
od Trougao
Moram da prigovorim. Koristio si <cmath> umesto <math.h>. Ovo prvo je u C++ jeziku a ovo drugo za Ca i koristio si new rezervisanu rec. Tako da ovo nije sasvim korektno. Koristio si neki nadskup od C a podskup od C++.

Re: ccalc

PostPoslato: Sreda, 18. Novembar 2015, 20:47
od ubavic
Hvala vam puno za feedback.

@pentagram: Zaboravio sa da napomenem da program trenutno ne podrzava unos negativnih brojeva, mada planiram da to omogucim. Nisam siguran kako nastaje drugi bug. Znam samo da na linux masini tog problema nema.

@Trougao: Sasvim si u pravu. Kod se trenutno ne može kompajlirati u C kompajleru, pa sam i koristio g++. Mada kao što se da primetiti u kodu nema delova koji se ne bi mogli lako prevesti u čist C jezik. Kolio vidim ti si gledao kod? Imaš još neke komentare? Značilo bi mi da čujem nečije mišljenje.

Re: ccalc

PostPoslato: Sreda, 18. Novembar 2015, 23:53
od Trougao
Programce je super :thumbup: . Vidim koristio si bool tip podataka. On je podrzan i u C++ i u C sa malim izuzetcima. U C programskom jeziku (C99) postoji rezervisana rec _Bool i ona sluzi da oznaci logicke promenljive. true i false su ostali 1 i 0. U C99 je definisan heder stdbool.h u njemu se definisu makroi za bool (_Bool je ruzno xD ) true i false. C++ to ima direktno ugradjeno u sebi bool i true i false od pocetka ako se ne varam. Nisam siguran da na primer kad bi koristio _Bool i kompajlirao sa C++ kompajlerom da bi na svakom radilo razlog tome je sto _Bool nije rezervisana rec jezika C++ (neki ce prepoznati i kompajlirati). Da prekinem sa filosofijom moja sutina je da C nije podskup C++ u celosti i da je jako opasno mesati ta dva.

P.S. Ja sam inace upisao matematiku upravo zbog kontrukcije kompajlera i takvih programa kao sto je ovaj. Nisam neki ekspert niti ubi boze programer ali C odlicno poznajem.
P.S.S. Meni je napisati ovakav program "visa matematika". :mrgreen:

Re: ccalc

PostPoslato: Četvrtak, 17. Decembar 2015, 22:14
od nikola011
Mislim da bi ti zbog organizacije koda mnogo lakše bilo da pišeš u C++-u , ali pretpostavljam da ga ne poznaješ baš najbolje - preleteh preko source-a i čini mi se okej. Skoro sam na Krstarici naleteo na lika koji je napisao klon igre "Moj broj" iz slagalice u C++-u ( i grafički i konzolni ) i za to koristio brute-force algoritam. Mislim da bi ti on dosta pomogao pri razvoju ako ti brzina nije kritičan faktor (nije to bogzna kakvo usporenje, za ove potrebe mislim da je gotovo i neprimetno).

Još jedna opcija koja mi je pala napamet je korišćenjem regex-a, mada ne znam da li si to radio do sada. Regex nije deo ANSI C-a, ali postoji biblioteka koja omogućava njegovo korišćenje.

http://www.gnu.org/software/libc/manual ... sions.html

Sve pohvale za trud :thumbup:

Re: ccalc

PostPoslato: Petak, 18. Decembar 2015, 18:29
od ubavic
@Trougao: Nisam znao to za bool tipove. Hvala na savetu. Gledaću ubuduće da pišem "čistim" jezikom :)

@Nikola: Hvala za feedback, ali nisam te baš najbolje shvatio kako bi pomogli brute force tehnika ili regularne ekspresije (Ako si mislio na validaciju izraza, mislim da bi regex samo nepotrebno zakomplikovao kod. Možda je čak i nemoguće to uraditi sa regularnim expresijama...)? Takođe nisam siguran ni kako bi C++ pomogao? Mada, nisam stručnjak za C++...