Calculator γραμμένο σε C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Calculator γραμμένο σε C

Δημοσίευσηαπό UnKnown96 » 05 Ιουν 2011, 10:41

Για σας παιδιά!
Λιπόν μετά από αρκετό διάβασμα και εξάσκηση στη C αποφάσησα να φτιάξω ένα απλό Calculator.
Το ονόμασα CL-Calc (Command Line Calculator).
Λοιπόν εδώ είναι ο κώδικας:

Spoiler: show
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <math.h>

void main (void) {

double x, y;
char c, e=0;

puts ("Usage:\n======\n\nAddition:\t\t+ Addendum1 Addendum2\nSubtraction:\t\t- Reducer Subtrahend\nMultiplication:\t\t* Factor1 Factor2\nDivision:\t\t/ Divisor Divident\nPercentage:\t\t% Number\nPower:\t\t\t^ Base Exponent\nSquare root:\t\tr Number\nQuit:\t\t\tx");

do {

printf ("\n\n>>> ");
scanf ("%s", &c);

switch (c) {
case '+' :
scanf ("%lf %lf", &x, &y);
printf ("Total: %g", x + y);
break;

case '-' :
scanf ("%lf %lf", &x, &y);
printf ("Difference: %g", x - y);
break;

case '*' :
scanf ("%lf %lf", &x, &y);
printf ("Product: %g", x * y);
break;

case '/' :
scanf ("%lf %lf", &x, &y);
if (y == 0) printf ("Invalid divisor...");
else printf ("Quotient: %g | Remainder: %d", x / y, (int) x % (int) y);
break;

case '%' :
scanf ("%lf", &x);
printf ("Percentage: %g", x / 100);
break;

case '^' :
scanf ("%lf %lf", &x, &y);
printf ("Result: %g", pow (x, y) );
break;

case 'r' :
scanf ("%lf", &x);
printf ("Result: %g", sqrt (x) );
break;

case 'x' :
e=1;
break;

default:
printf ("Wrong option chosen...");
break;
}
}

while (!e);
}


Και ένα από τον MigF1.

Spoiler: show
Κώδικας: Επιλογή όλων

Ελέξτε εδώ:
http://ideone.com/Ce88n


Κάντε το compile με την εντολή gcc -lm <ονομα αρχείου>.c
Τελευταία επεξεργασία από UnKnown96 και 29 Αύγ 2011, 23:14, έχει επεξεργασθεί 35 φορά/ες συνολικά
Άβαταρ μέλους
UnKnown96
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 370
Εγγραφή: 08 Ιουν 2010, 15:23
Τοποθεσία: Ρόδος
Εκτύπωση

Re: Calculator γραμμένο σε C

Δημοσίευσηαπό UnKnown96 » 05 Ιουν 2011, 11:24

Παιδιά για κάποιο λόγο δεν κάνει σωστά τα space στα code tags ...
Ελπίζω να σας αρέσει όπως είναι γιατί δν μπορώ να το πιράξω.
Προσπάθισα και χωρίς αυτά αλλά τίποτα (συγνώμι QData.. :( )
Άβαταρ μέλους
UnKnown96
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 370
Εγγραφή: 08 Ιουν 2010, 15:23
Τοποθεσία: Ρόδος
Εκτύπωση

Re: Calculator γραμμένο σε C

Δημοσίευσηαπό konnn » 05 Ιουν 2011, 11:42

UnKnown96 έγραψε:1) Όταν γράψεις ένα γράμμα κολλάει και αρχίζει να βγάζει ασταμάτητο output.
και
Μπορείς εδώ να προσθέσεις έναν έλεγχο.
έγραψε: Στις επιλογές 1-5 δεν μπορεί να βγάλει αποτέλεσμα δεκαδικό
Τι εννοείς ακριβώς.
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Calculator γραμμένο σε C

Δημοσίευσηαπό UnKnown96 » 05 Ιουν 2011, 11:51

Μπορείς να μου δώσεις και ένα παράδιγμα από κώδικα για τον έλεγχο γιατί τώρα άρχισα να μαθαίνω;
Εννοώ ότι ας πούμε ότι διαλέγεις την επιλογή 4 (διέρεση) και δώσεις 9/2 αντί να βγάλει 3,5 βγάζει 4...
Άβαταρ μέλους
UnKnown96
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 370
Εγγραφή: 08 Ιουν 2010, 15:23
Τοποθεσία: Ρόδος
Εκτύπωση

Re: Calculator γραμμένο σε C

Δημοσίευσηαπό Qdata » 05 Ιουν 2011, 11:55

Δεν μπορώ να το κάνω compile.Μου βγάζει αυτό:
Κώδικας: Επιλογή όλων
$ gcc calc.c -o calc
calc.c: In function ‘main’:
calc.c:78:48: warning: incompatible implicit declaration of built-in function ‘pow’
calc.c:85:53: warning: incompatible implicit declaration of built-in function ‘sqrt’
/tmp/ccsCNbO4.o: In function `main':
calc.c:(.text+0x288): undefined reference to `pow'
calc.c:(.text+0x2e2): undefined reference to `sqrt'
calc.c:(.text+0x360): undefined reference to `getch'
collect2: ld returned 1 exit status
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Calculator γραμμένο σε C

Δημοσίευσηαπό UnKnown96 » 05 Ιουν 2011, 12:47

Για κάποιο λόγο στο Linux δεν δέχετε τις εντολές pow sqrt και getch δοκίμασε κάτω από το #include <stdio.h> να βάλεις και αυτό : #include <math.h>
και πες μου αν δουλεύει.

edit: και αντικατέστησε το getch(); με getchar();
Άβαταρ μέλους
UnKnown96
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 370
Εγγραφή: 08 Ιουν 2010, 15:23
Τοποθεσία: Ρόδος
Εκτύπωση

Re: Calculator γραμμένο σε C

Δημοσίευσηαπό Qdata » 05 Ιουν 2011, 13:02

UnKnown96 έγραψε:Για κάποιο λόγο στο Linux δεν δέχετε τις εντολές pow sqrt και getch δοκίμασε κάτω από το #include <stdio.h> να βάλεις και αυτό : #include <math.h>
και πες μου αν δουλεύει.

edit: και αντικατέστησε το getch(); με getchar();


Τώρα μου βγάζει:

Κώδικας: Επιλογή όλων
$ gcc calc.c -o calc
/tmp/ccUJ2S1N.o: In function `main':
calc.c:(.text+0x288): undefined reference to `pow'
calc.c:(.text+0x2e2): undefined reference to `sqrt'
collect2: ld returned 1 exit status


Οπότε δεν δέχεται τις εντολές pow και sqrt. :problem:
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Calculator γραμμένο σε C

Δημοσίευσηαπό M.Jackson » 05 Ιουν 2011, 13:03

Σε βαθμολογώ με ένα 3.
Αυτά που πρέπει να διορθώσεις είναι τα εξής
1) Καλύτερα να φτιάξεις functions για την κάθε πράξη παρά να χρησιμοποιήσεις πράξεις μέσα στην case
2) Να διαβάζεις του αριθμούς μια φορά και όχι για κάθε πράξη.
3) Καλύτερα τον αριθμό για τις πράξεις να τον διαβάζεις μέσα σε ένα while έτσι ώστε να απομονώσεις την είσοδο λανθασμένου αριθμού για την πράξη. αποφεύγεις πολλά else κτλ..
4) Στην διαίρεση καλύτερα να ελέγχεις (μέσα στο function τις διαίρεσης για τον αριθμό 0 => 5/0 = αδύνατη πράξη)
5) Καλύτερα να έχεις μια γενική μεταβλητή DOUBLE/FLOAT για αν αποθηκεύεις το αποτέλεσμα για κάθε πράξη έτσι ώστε να μην έχει πρόβλημα με τους δυαδικούς/πραγματικούς αριθμούς.
Αυτά από εμένα :)
Καλή προσπάθεια πάντως!
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

Re: Calculator γραμμένο σε C

Δημοσίευσηαπό evolgen » 05 Ιουν 2011, 13:06

Qdata έγραψε:
UnKnown96 έγραψε:Για κάποιο λόγο στο Linux δεν δέχετε τις εντολές pow sqrt και getch δοκίμασε κάτω από το #include <stdio.h> να βάλεις και αυτό : #include <math.h>
και πες μου αν δουλεύει.

edit: και αντικατέστησε το getch(); με getchar();


Τώρα μου βγάζει:

Κώδικας: Επιλογή όλων
$ gcc calc.c -o calc
/tmp/ccUJ2S1N.o: In function `main':
calc.c:(.text+0x288): undefined reference to `pow'
calc.c:(.text+0x2e2): undefined reference to `sqrt'
collect2: ld returned 1 exit status


Οπότε δεν δέχεται τις εντολές pow και sqrt. :problem:

Μήπως αν δοκίμαζες και
Κώδικας: Επιλογή όλων
gcc -lm calc.c -o calc
Το να μειώνεις ένα έργο ελεύθερου λογισμικού, επειδή θεωρείς το δικό σου καλύτερο,
είναι απαράδεκτη συμπεριφορά και δε συμβαδίζει με τις αρχές του ελεύθερου λογισμικού.

Γνώσεις Linux: Μέτριο++ ┃ Προγραμματισμός: Perl, R, Python, SQL, C, Common Lisp, BashΑγγλικά: Άριστα

1. Ubuntu 14.04 trusty
2. Intel Core i7-3520M CPU @ 2.90GHz ‖ RAM 7892 MiB
3. Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
4. eth0: Broadcom NetXtreme BCM57765 Gigabit Ethernet PCIe [14e4:16b4] (rev 10) ⋮ eth1: Broadcom BCM4331 802.11a/b/g/n [14e4:4331] (rev 02)
Άβαταρ μέλους
evolgen
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1031
Εγγραφή: 28 Ιούλ 2010, 14:22
Τοποθεσία: UK
IRC: bioevolgenec
Εκτύπωση

Re: Calculator γραμμένο σε C

Δημοσίευσηαπό UnKnown96 » 05 Ιουν 2011, 13:10

Qdata έγραψε:
UnKnown96 έγραψε:Για κάποιο λόγο στο Linux δεν δέχετε τις εντολές pow sqrt και getch δοκίμασε κάτω από το #include <stdio.h> να βάλεις και αυτό : #include <math.h>
και πες μου αν δουλεύει.

edit: και αντικατέστησε το getch(); με getchar();


Τώρα μου βγάζει:

Κώδικας: Επιλογή όλων
$ gcc calc.c -o calc
/tmp/ccUJ2S1N.o: In function `main':
calc.c:(.text+0x288): undefined reference to `pow'
calc.c:(.text+0x2e2): undefined reference to `sqrt'
collect2: ld returned 1 exit status


Οπότε δεν δέχεται τις εντολές pow και sqrt. :problem:


Στα Windows γιατί δουλέυει?
Έλεος...

M.Jackson έγραψε:Σε βαθμολογώ με ένα 3.
Αυτά που πρέπει να διορθώσεις είναι τα εξής
1) Καλύτερα να φτιάξεις functions για την κάθε πράξη παρά να χρησιμοποιήσεις πράξεις μέσα στην case
2) Να διαβάζεις του αριθμούς μια φορά και όχι για κάθε πράξη.
3) Καλύτερα τον αριθμό για τις πράξεις να τον διαβάζεις μέσα σε ένα while έτσι ώστε να απομονώσεις την είσοδο λανθασμένου αριθμού για την πράξη. αποφεύγεις πολλά else κτλ..
4) Στην διαίρεση καλύτερα να ελέγχεις (μέσα στο function τις διαίρεσης για τον αριθμό 0 => 5/0 = αδύνατη πράξη)
5) Καλύτερα να έχεις μια γενική μεταβλητή DOUBLE/FLOAT για αν αποθηκεύεις το αποτέλεσμα για κάθε πράξη έτσι ώστε να μην έχει πρόβλημα με τους δυαδικούς/πραγματικούς αριθμούς.
Αυτά από εμένα :)
Καλή προσπάθεια πάντως!


Σε ευχαρίστω πολύ!

Να σε ρωτίσω κάτι...
Εσένα σου δουλεύει;
Δεν καταλαβένω γιατί δεν δέχετε τις εντολές στον Qdata...
Άβαταρ μέλους
UnKnown96
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 370
Εγγραφή: 08 Ιουν 2010, 15:23
Τοποθεσία: Ρόδος
Εκτύπωση

Επόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron