Korisnički Kontrolni Panel
Pogledajte svoj profil
Pogledajte svoje postove
ČPP
Prijavite se

Matematički forum na kojem možete da diskutujete o raznim matematičkim oblastima, pomognete drugima oko rešavanja zadataka, a i da dobijete pomoć kada vam zatreba


















Index stranica RAZNO MATEMATIČKI SOFTVER

ccalc

ccalc

Postod ubavic » Nedelja, 15. Novembar 2015, 16:31

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.
ubavic   ONLINE
Zaslužni forumaš
 
Postovi: 592
Zahvalio se: 376 puta
Pohvaljen: 593 puta

Sharuj ovu temu na:

Share on Facebook Facebook Share on Twitter Twitter Share on MySpace MySpace Share on Google+ Google+
  • +1

Re: ccalc

Postod ubavic » Ponedeljak, 16. Novembar 2015, 19:23

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)).
ubavic   ONLINE
Zaslužni forumaš
 
Postovi: 592
Zahvalio se: 376 puta
Pohvaljen: 593 puta

Re: ccalc

Postod pentagram142857 » Utorak, 17. Novembar 2015, 18:14

Isprobao sam tvoj kalkulator.

Ubavicev kalkulator.png
Ubavicev kalkulator.png (1.38 KiB) Pogledano 1012 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. :)
Zaslužni forumaš
 
Postovi: 135
Zahvalio se: 49 puta
Pohvaljen: 120 puta

Re: ccalc

Postod Trougao » Sreda, 18. Novembar 2015, 02:06

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++.
Trougao  OFFLINE
 
Postovi: 150
Zahvalio se: 57 puta
Pohvaljen: 106 puta

Re: ccalc

Postod ubavic » Sreda, 18. Novembar 2015, 20:47

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.
ubavic   ONLINE
Zaslužni forumaš
 
Postovi: 592
Zahvalio se: 376 puta
Pohvaljen: 593 puta

  • +1

Re: ccalc

Postod Trougao » Sreda, 18. Novembar 2015, 23:53

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:
Trougao  OFFLINE
 
Postovi: 150
Zahvalio se: 57 puta
Pohvaljen: 106 puta

  • +1

Re: ccalc

Postod nikola011 » Četvrtak, 17. Decembar 2015, 22:14

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:
 
Postovi: 78
Zahvalio se: 64 puta
Pohvaljen: 18 puta

Re: ccalc

Postod ubavic » Petak, 18. Decembar 2015, 18:29

@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++...
ubavic   ONLINE
Zaslužni forumaš
 
Postovi: 592
Zahvalio se: 376 puta
Pohvaljen: 593 puta


Povratak na MATEMATIČKI SOFTVER

Ko je OnLine

Korisnici koji su trenutno na forumu: Nema registrovanih korisnika i 2 gostiju


Index stranicaTimObriši sve kolačiće boarda
Danas je Subota, 25. Jun 2022, 21:47 • Sva vremena su u UTC + 1 sat [ DST ]
Pokreće ga phpBB® Forum Software © phpBB Group
Prevod – www.CyberCom.rs