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

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

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

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

Δημοσίευσηαπό UnKnown96 » 15 Ιουν 2011, 19:35

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

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

Δημοσίευσηαπό migf1 » 15 Ιουν 2011, 19:47

Τίποτα ρε συ :)

Θα σου πρότεινα να βάλεις ως επόμενο (λίγο μακρινό σου) στόχο την τελική υλοποίσηση του calculator σε κανονικό calculator, με τον χρήστη να γράφει όλες τις πράξεις σε μια γραμμή, στο στυλ: (5+2)*3-4

Αν το καταφέρεις αυτό, όχι μόνο θα έχεις αποκτήσει μια αρκετά (έως πολύ) σφαιρική γνώση της γλώσσας, αλλά θα έχεις χρησιμοποιήσει και πολλές από τις advanced τεχνικές που διαθέτει! Είναι πολύ καλό project, αφού δεν μένει μονάχα σε trivial πράγματα, αλλά σε εισαγάγει και στην ανάλυση αλγορίθμων (όπως για παράδειγμα το Reverse Polish Notation, που έχω ήδη αναφέρει σε άλλες σελίδες και για το οποίο θα χρειαστεί να διαβάσεις πως δουλεύει... αν και όταν φτάσεις εκεί, πες μου να σου δώσω και τον κώδικα μετατροπής από infix σε postfix notation).

Τρεις είναι οι γενικότερες ενότητες που θα χρειαστείς από εδώ και πέρα για την επίτευξη αυτού του στόχου:
  • structures (δομές δεδομένων, και συγκεκριμένα στη δομή που ονομάζεται στοίβα (stack) )
  • pointers (δείκτες)
  • strings (συμβολοσειρές)
Οπότε διάβασε ότι σου ελκύει το ενδιαφέρον, αλλά εστίασε σε αυτά τα 3!

Σχετικά με τις δικές μου δημοσιεύσεις, για να μη ψάχνεις, διάβασε από εδώ και κάτω (σε εισαγάγουν στα Ελληνικά στους pointers και στα strings).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό M.Jackson » 15 Ιουν 2011, 20:51

Off topic:
Πως έγινε ένα προγραμματάκι υπολογισμού απλών πράξεων topic 8 σελίδων θα τρελαθώ!!! axaxa :p
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 15 Ιουν 2011, 21:02

M.Jackson έγραψε:Off topic:
Πως έγινε ένα προγραμματάκι υπολογισμού απλών πράξεων topic 8 σελίδων θα τρελαθώ!!! axaxa :p

Έγινε γιατί η κουβέντα δεν περιορίστηκε μονάχα στην απλή του υλοποίηση ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό UnKnown96 » 15 Ιουν 2011, 22:36

M.Jackson έγραψε:Off topic:
Πως έγινε ένα προγραμματάκι υπολογισμού απλών πράξεων topic 8 σελίδων θα τρελαθώ!!! axaxa :p


Tο αστείο είναι ότι τις 6 απο τις 8, τις κάναμε εγώ με τον migf1 :D

migf1 έγραψε:Τίποτα ρε συ :)

Θα σου πρότεινα να βάλεις ως επόμενο (λίγο μακρινό σου) στόχο την τελική υλοποίσηση του calculator σε κανονικό calculator, με τον χρήστη να γράφει όλες τις πράξεις σε μια γραμμή, στο στυλ: (5+2)*3-4

Αν το καταφέρεις αυτό, όχι μόνο θα έχεις αποκτήσει μια αρκετά (έως πολύ) σφαιρική γνώση της γλώσσας, αλλά θα έχεις χρησιμοποιήσει και πολλές από τις advanced τεχνικές που διαθέτει! Είναι πολύ καλό project, αφού δεν μένει μονάχα σε trivial πράγματα, αλλά σε εισαγάγει και στην ανάλυση αλγορίθμων (όπως για παράδειγμα το Reverse Polish Notation, που έχω ήδη αναφέρει σε άλλες σελίδες και για το οποίο θα χρειαστεί να διαβάσεις πως δουλεύει... αν και όταν φτάσεις εκεί, πες μου να σου δώσω και τον κώδικα μετατροπής από infix σε postfix notation).

Τρεις είναι οι γενικότερες ενότητες που θα χρειαστείς από εδώ και πέρα για την επίτευξη αυτού του στόχου:
  • structures (δομές δεδομένων, και συγκεκριμένα στη δομή που ονομάζεται στοίβα (stack) )
  • pointers (δείκτες)
  • strings (συμβολοσειρές)
Οπότε διάβασε ότι σου ελκύει το ενδιαφέρον, αλλά εστίασε σε αυτά τα 3!

Σχετικά με τις δικές μου δημοσιεύσεις, για να μη ψάχνεις, διάβασε από εδώ και κάτω (σε εισαγάγουν στα Ελληνικά στους pointers και στα strings).


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

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

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

Έτοιμη και η V4 του προγράμματος μου!!!
Βασικά, οι αλλαγές που έκανα ήταν:
1. ΠΟΛΎ καθάρισμα
2. Έφτιαξα το bug με τα γράμματα.
3. Φτιάχτηκε το μενού απο την αρχή.

Παραμένουν όμως τα ακόλουθα:
1. Όταν βάλω στο αρχικό μενού π.χ το πλιν (-) (επιλογή για αφαίρεση) ετσι: - - - τότε το 1 - θα πάει για την επιλογή αλλά όταν μπει στην αφαίρεση δεν με ρωταεί για τον μειωτέο και τον αφαιρετέο αντιθέτως χρησιμοποιεί τα <<απομηνάρια>> της πρώτης επιλογής μου... (το fflush (stdin) δεν δουλεύει...)

2. Όταν δώσω γράμμα μου πετάει αποτέλεσμα ένα τυχέο αριθμό και εμφανίζει το error δύο φορές (αυτό δεν συμβένει στο αρχικό μενού, εκεί όλα δουλεύουν φυσιολογικά).
Αυτό που εφάρμοσα για να φτιάξω το μενού δεν μπορώ να το κάνω με τις πράξεις και ψάχνω μία εναλακτική.

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

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

Δημοσίευσηαπό migf1 » 16 Ιουν 2011, 20:59

Σε μένα στα Windows που το δοκίμασα μόλις δεν πετάει error, δουλεύει κανονικά. Ομοίως και σε FreeBSD Unix (εικόνα)...

Εικόνα

ΥΓ. Αύριο θα το δοκιμάσω και στο Kubuntu.
UnKnown96 έγραψε:
3. (Αυτό υπάρχει και στου migf1) Όταν χρησιμοποιείσης ως διαιρέτη, δεκαδικό αριθμό, το πρόγραμμα πετάει error.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό UnKnown96 » 16 Ιουν 2011, 21:04

Ουπς, τώρα παρατηρώ ότι πετάει error με δεκαδικό του 0.
Π.Χ 0.1 , 0.2 , 0.3 κλπ

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

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

Δημοσίευσηαπό migf1 » 16 Ιουν 2011, 21:15

Όντως πετάει error με δεκαδικά μικρότερα του 0 :(
Θα το ψάξω και θα ενημερώσω!

Από αύριο όμως γιατί τώρα είμαι χώμα! Για τον ίδιο λόγο δεν έχω κοιτάξει καθόλου τον κώδικα της V4, θα τον δω αύριο κι αυτόν και θα επανέλθω!

Τα μαζεύω και πάω σπιτάκι μου σιγά-σιγά (ίσως ξαναμπω από εκεί αλλά δεν είναι και σίγουρο :lol:)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 17 Ιουν 2011, 00:51

Του 'ριξα μόλις μια ματιά, τη λύση για τα "απομεινάρια" στην έχω ήδη αναλύσει σε αυτό εδώ το post: viewtopic.php?p=192059#p192059 (και η υλοποίησή του είναι στον κώδικά μου ;) )

Τώρα σχετικά με το κρασάρισμα στις διαιρέσεις, εγώ την είχα κάνει την... λαλακία! Αντικατέστησε το case της διαίρεσης στον κώδικά μου με το παρακάτω:
Κώδικας: Επιλογή όλων

case '4': // 4. DIVISION
case '/':
{ double intpart;
puts("\nDivision\n--------");
num_askuser("Divident: ", &x, MAXSLEN_LINEBUF);
do { // demand non-zero value
num_askuser("Divisor : ", &y, MAXSLEN_LINEBUF);
if ( y == 0.0 )
puts("*** error: divisor cannot be 0");
} while (y == 0.0);
printf ("--------\nRESULT: %g / %g = %g (quotient = %g, remainder = %g)\n",
x, y, x/y, trunc(x/y), y * modf(x/y, &intpart) );
}
break;

Το πρόβλημα ήταν τα castings που έκανα από double σε int στο modulo (υπόλοιπο). Εφόσον έχουμε να κάνουμε με doubles το σωστό είναι να χρησιμοποιήσουμε την στάνταρ συνάρτηση της <math.h>:
Κώδικας: Επιλογή όλων
double modf ( double x, double * intpart );
που είναι φτιαγμένη ειδικά για αυτή τη δουλειά με doubles!

ΥΓ. Διόρθωσέ το αν θες και στον κώδικά μου στο 1ο post


UnKnown96 έγραψε:
[snip]
Όσο για τα υπόλοιπα σου 'ρχετε καμία λύση;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

ΠροηγούμενηΕπόμενο

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