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

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

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

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

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

Ναι ρε συ, δεν υπάρχει βιασύνη... δεν έχουμε προθεσμίες :)

Η αριθμομηχανή, όπως κουβεντιάσαμε και σε άλλα ποστς, είναι πάρα πολύ καλό πρότζεκτ, γιατί για να υλοποιηθεί σωστά και να αντιμετωπίζει και λανθασμένα input, σε αναγκάζει να μάθεις πολλά και χρήσιμα πράματα. Κι αν γίνει και με στοίβες και με reverse polish notation τότε σε εισαγάγει ακόμα και σε ανάλυση αλγορίθμων, αλλά και σε χρήση δομών δεδομένων, που δίνουν βάσεις για οποιοδήποτε σοβαρό πρότζεκτ.

Αλλά έχουμε ακόμα καιρό για αυτά. Η διαχείριση των strings είναι πιο άμεση προτεραιότητα, μιας και η χρησιμότητα και η χρήση τους είναι σχεδόν καθολική, σε οποιοδήποτε πρότζεκτ.

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

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

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

Έφτιαξα το s_get σου απο την αρχή με δικό μου κώδικα.
Δισκολεύτηκα σε ορισμένα μέρη διότι δεν τα καταλάβενα...

Εάν μπορείς ή οποιοσδήποτε άλλος, ας μου πει τι κάνει οτιδήποτε υπάρχει εδώ διότι σε ορισμένα μέρη τα καταλαβένω αλλά όχι τελείως ξεκάθαρα...

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

1. #include<stdio.h>
2. #include<stdlib.h>
3.
4. #define mc 255
5.
6. char *nsf(char z[],int ml)
7. {
8.
9. int i;
10.
11. for(i=0; (z[i]=getchar()) !='\n' && i<ml-1; i++);
12.
13. z[i]='\0';
14.
15. return z;
16. }
17.
Τελευταία επεξεργασία από UnKnown96 και 22 Ιουν 2011, 18:10, έχει επεξεργασθεί 1 φορά/ες συνολικά
Άβαταρ μέλους
UnKnown96
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 370
Εγγραφή: 08 Ιουν 2010, 15:23
Τοποθεσία: Ρόδος
Εκτύπωση

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

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

Αν αλλάξεις τη συνθήκη του for να σταματάει στο ml-1 αντί του ml που το έχεις τώρα, μια χαρά το βλέπω να δουλεύει :)
Την τελευταία θέση τη θέλεις να είναι '\0' στα strings, για αυτό πρέπει να σταματάς στο ml-1 το for. Μετά το for το i θα ισούται με ml-1 που είναι η τελευταία θέση του πίνακα, όπου βάζεις το '\0'.

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

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

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

Τις γραμμές 6, 11, 13 και 15.
Γενικά δεν καταλαβαίνω πως αυτό αντικαθηστά το scanf.
Σε ποιό μερος ζητάει χαρακτήρες και σε ποιά <θέση> του array το αποθηκεύει;
Άβαταρ μέλους
UnKnown96
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 370
Εγγραφή: 08 Ιουν 2010, 15:23
Τοποθεσία: Ρόδος
Εκτύπωση

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

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

Οκ!

Καταρχήν, δεν αντικαθιστά την scanf() με 1 προς 1 αντιστοιχία. Με αυτή τη συνάρτηση δηλαδή δεν διαβάζεις πολλές μεταβλητές, όπως κάνεις με την scanf(). Με αυτή διαβάζεις μια και μόνη μεταβλητή, τύπου string (πίνακας χαρακτήρων) η οποία περιέχει οτιδήποτε σου έγραψε ο χρήστης πριν πατήσει ENTER. Οι χαρακτήρες που έγραψε ο χρήστης μπαίνουν σε διαδοχικές θέσεις του πίνακα σού ( z[] ) ένας σε κάθε θέση.

Η μεταβλητή που διαβάζεις είναι αυτή που περνάς σαν 1ο όρισμα της συνάρτησης, η char z[] στο δικό σου παράδειγμα, την οποία πρέπει πρώτα να την έχεις ορίσει στην main() πριν την περάσεις μέσα στην συνάρτηση.

Όπως κάνουμε δηλαδή με όλες τις μεταβλητές. Πρώτα τις ορίζουμε και μετά τις περνάμε σαν ορίσματα στις συναρτήσεις.

Επειδή τα strings είναι πίνακες (πίνακες χαρακτήρων), όταν τα ορίζεις θα πρέπει να δηλώνεις και την μέγιστη χωρητικότητά τους και να θυμάσαι πως η τελευταία θέση δεσμεύεται για να φιλοξενήσει τον μηδενικό χαρακτήρα ('\0'). Αν λοιπόν ορίσεις ένα string χωρητικότητας 20 θέσεων, οι ωφέλιμες θέσεις του θα είναι 19, γιατί στον 20ο πρέπει να μπει ο μηδενικός χαρακτήρας.

Αυτό που διαβάζεις λοιπόν είναι μια μεταβλητή τύπου string που περιέχει μέσα της όλη τη γραμμή που σου έδωσε ο χρήστης πριν πατήσει ENTER (τα πάντα: κενά, γράμματα, αριθμούς, σύμβολα, tabs, κλπ).

Από εκεί και πέρα, χρησιμοποιώντας είτε έτοιμες συναρτήσεις διαχείρισης strings, είτε δικές σου, μπορείς να κρατήσεις ή να πετάξεις οτιδήποτε από αυτά που σου τύπωσε ο χρήστης.

Νομίζω πως σου είχα ξαναδώσει το link, αλλά αν δεν το έχεις διαβάσει τότε πριν προχωρήσεις σου συνιστώ ανεπιφύλακτα να διαβάσεις τουλάχιστον αυτή εδώ τη δημοσίευση: http://www.gvrteam.gr/forum/viewtopic.p ... 178#p47178

Πιστεύω πως θα είναι πολύ καλύτερα να ξεκαθαρίσουμε όσα γράφω στο παραπάνω link πριν προχωρήσουμε παρακάτω. Οπότε όταν κι εάν έχεις διάθεση και χρόνο, ρίξε τους μια ματιά και γράψε μετά τυχόν απορίες, ώστε να τις λύσουμε και να προχωρήσουμε μετά παρακάτω :)

UnKnown96 έγραψε:Τις γραμμές 6, 11, 13 και 15.
Γενικά δεν καταλαβαίνω πως αυτό αντικαθηστά το scanf.
Σε ποιό μερος ζητάει χαρακτήρες και σε ποιά <θέση> του array το αποθηκεύει;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

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

Η C όσο πάει και μου αρέσει περισσότερο.
Έχω διαβάσει όσα links μου έχεις στίλει.
Αυτό που μου έστιλες, φυσικά και θα έχω χρόνο να το διαβάσω αύριο το πρωί!


Off topic:
Επειδή θέλω να δώ κιάλες γλώσσες για να μου φίγει η περιέργια...
Υπάρχουν κιάλες compiled γλώσσες;
Έχω καταλήξει ότι η καλίτερη Interpreted είναι η Ruby για εμένα αλλά δεν μπόρεσα να βρω άλλες compiled που να μπορούν να φτιάξουν Executable για Windows (.exe) και Linux (αύτα δεν έχουν κατάληξη...).
Άβαταρ μέλους
UnKnown96
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 370
Εγγραφή: 08 Ιουν 2010, 15:23
Τοποθεσία: Ρόδος
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 22 Ιουν 2011, 22:05

Off topic:
Εκτός της C, δυο ακόμα πανίσχυρες compiled γλώσσες είναι η C++ και η D, ενώ πολύ ενδιαφέρουσα είναι και η Haskel. Αν και όχι πλήρως compiled γλώσσα, πολύ μεγάλο ενδιαφέρον (και δημοφιλία επίσης) παρουσιάζει και η Java.

Η D παρόλο που είναι φανταστική γλώσσα και συνδυάζει τα προτερήματα των C και C++ δυστυχώς δεν είναι δημοφιλής.

Η C++ είναι εξαιρετικά ισχυρή και δημοφιλής, αλλά είναι ΤΕΡΑΣΤΙΑ.... σε τέτοιο βαθμό, που θεωρείται απόλυτα φυσιολογικά να προγραμματίζεις σε C++ καμιά 25αριά χρόνια και πάλι να μην τα έχεις μάθει όλα (σύντομα ετοιμάζεται ακόμα μια αναθεώρησή της, που προσθέτει κι άλλα πράματα).

Η Java είναι επίσης από τις πλέον hot και δημοφιλείς γλώσσες και είναι η πιο βατή από όλες, αλλά συνάμα όχι τόσο general purpose όπως οι προηγούμενες (λόγω κυρίως των μειωμένων συγκριτικά επιδόσεων και την απουσία low level πρόσβασης).

Μεταξύ αυτών, εγώ θα σου συνιστούσα τη Java, αφού όμως πρώτα μάθεις τη C. Με τη C παίρνεις γερές βάσεις για το πως και γιατί λειτουργούν τα πράγματα τόσο σε low level, όσο και σε high level. Το μεγάλο της μείον είναι πως δεν υποστηρίζει εγγενώς αντικειμενοστραφή προγραμματισμό. Οπότε αφού πάρεις γερές βάσεις με τη C, πας σε java για να μάθεις γρήγορα και βατά και αντικειμενοστραφή προγραμματισμό.

Όταν το κατακτήσεις κι αυτό, θα είσαι έτοιμος να δοκιμάσεις και C++, έχοντας πλέον μειώσει δραστικά τις πιθανότητες να χαθείς μέσα στον... ωκεανό της.

Αν κάνεις κέφι, ρίξε μια ματιά και στην D που είναι ΠΑΡΑ ΠΟΛΥ ΚΑΛΗ κι έχει πολύ καλό community, άσχετα αν δεν είναι δημοφιλής σε επαγγελματικό επίπεδο.


UnKnown96 έγραψε:
Off topic:
Επειδή θέλω να δώ κιάλες γλώσσες για να μου φίγει η περιέργια...
Υπάρχουν κιάλες compiled γλώσσες;
Έχω καταλήξει ότι η καλίτερη Interpreted είναι η Ruby για εμένα αλλά δεν μπόρεσα να βρω άλλες compiled που να μπορούν να φτιάξουν Executable για Windows (.exe) και Linux (αύτα δεν έχουν κατάληξη...).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

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

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

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

Δημοσίευσηαπό UnKnown96 » 23 Ιουν 2011, 18:14

Off topic:
Ωραία, χάρηκα πολύ με αυτά που δίαβασα (για τις γλώσσες) και μου έμειναν δύο απορίες
Λένε πως η C δεν υποστηρίζει προγραμματισμό με GUI. Όμως τόσα προγράμματα φτιάχνονται με C και έχουν GUI και αν κάνω λάθος το Visual C της Microsoft τι ρόλο βαράει;
Και ακόμα κάτι, αν εξερέσουμε την Assembly, συγρίνετε καμία γλώσσα με τη C σε ταχύτητα;
Αυτά!


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

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

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

UnKnown96 έγραψε:Off topic:
Ωραία, χάρηκα πολύ με αυτά που δίαβασα (για τις γλώσσες) και μου έμειναν δύο απορίες
Λένε πως η C δεν υποστηρίζει προγραμματισμό με GUI. Όμως τόσα προγράμματα φτιάχνονται με C και έχουν GUI και αν κάνω λάθος το Visual C της Microsoft τι ρόλο βαράει;

Φυσικά και μπορείς να προγραμματίσεις τα πάντα στη C, απλώς είναι πολύ πιο χρονοβόρο και κουραστικό.
έγραψε:Off topic:
Και ακόμα κάτι, αν εξερέσουμε την Assembly, συγρίνετε καμία γλώσσα με τη C σε ταχύτητα;
Αυτά!

Από τις γνωστές, ΚΑΜΙΑ!

έγραψε:Το link που μου έστιλες 4 post ποιό πάνω, το μελετώ τώρα!

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

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

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