k33theod Δημοσ. 23 Δεκεμβρίου 2017 Δημοσ. 23 Δεκεμβρίου 2017 Ναι σωστό, δικό μου το λάθος απλά μου ήταν λίγο αφύσικο και μπερδεύτηκα. Αν βγει το not έξω και τα and γίνουν or if (!(entry == "*" || entry == "-" || entry == "+" || entry == "/" || entry == "%")) μεταφράζεται εάν το entry δεν είναι + ή - ή * ...κλπ που έρχεται πιο φυσικό από το entry δεν είναι + και δεν είναι - και ... ή ακόμα καλύτερα String prajeis = "+-*/%"; if(!prajeis.Contains('entry')) το βρήκα στο https://stackoverflow.com/questions/5009882/pythons-in-operator-equivalent-to-c-sharp
costgial Δημοσ. 24 Δεκεμβρίου 2017 Μέλος Δημοσ. 24 Δεκεμβρίου 2017 Να μη δοκιμάσεις με or γιατί σωστά το έχεις. Σκέψου το λογικά. Από την άλλη αυτό είναι κλασικό λάθος που όλοι έχουμε κάνει κατά καιρούς οπότε κάντο και συ να "εμβολιαστείς" και να μη το ξανακάνεις τα επόμενα 4-5 χρόνια. δεν λέω για όταν ισχύει το σύμβολο του αντιθέτου, γιατί τότε ναι δεν έχει νόημα.. αλλά αν δεν ισχύει το != και ισχύει η ισότητα ( = ) τότε θα δε μπορούσε να μπει το "or" ; Ναι σωστό, δικό μου το λάθος απλά μου ήταν λίγο αφύσικο και μπερδεύτηκα. Αν βγει το not έξω και τα and γίνουν or if (!(entry == "*" || entry == "-" || entry == "+" || entry == "/" || entry == "%")) μεταφράζεται εάν το entry δεν είναι + ή - ή * ...κλπ που έρχεται πιο φυσικό από το entry δεν είναι + και δεν είναι - και ... ή ακόμα καλύτερα String prajeis = "+-*/%"; if(!prajeis.Contains('entry')) το βρήκα στο https://stackoverflow.com/questions/5009882/pythons-in-operator-equivalent-to-c-sharp Ευχαριστώ πολύ για τα κομμάτια κώδικα, θα τα χρησιμοποιήσω, διότι φαίνονται πολύ ενδιαφέροντα!
k33theod Δημοσ. 24 Δεκεμβρίου 2017 Δημοσ. 24 Δεκεμβρίου 2017 (επεξεργασμένο) costgial μετά από λίγο ψάξιμο βρήκα αυτό https://msdn.microsoft.com/en-us/library/b873y76a(v=vs.110).aspx το οποιό προσάρμοσα για να παίρνει και floats και νομίζω είναι η σωστή προσέγγιση για πρόβλημα με μία πράξη Αυτό το foreach μόνο δεν καταλαβαίνω αλλά δουλεύει. Διορθώθηκε using System; using System.Text.RegularExpressions; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { String pattern = @"(\d+\.?\d*)\s+([-+*/])\s+(\d+\.?\d*)"; Console.WriteLine("Δώσε τη μαθηματική παράσταση (με κενά πριν και μετά το σύμβολο της πράξης)"); String parastasi = Console.ReadLine(); //foreach (Match m in Regex.Matches(parastasi, pattern)) //{ Match m = Regex.Match(parastasi, pattern); double value1 = double.Parse(m.Groups[1].Value); double value2 = double.Parse(m.Groups[3].Value); switch (m.Groups[2].Value) { case "+": Console.WriteLine("{0} = {1}", m.Value, value1 + value2); break; case "-": Console.WriteLine("{0} = {1}", m.Value, value1 - value2); break; case "*": Console.WriteLine("{0} = {1}", m.Value, value1 * value2); break; case "/": Console.WriteLine("{0} = {1:N2}", m.Value, value1 / value2); break; } //} } } } το πρόβλημα φαντάζομαι είναι το regex που μπορείς όμως να το αλλάξεις με ifs και splits Αργά ή γρήγορα όμως θα τα χρειαστείς τα regex και πρέπει να ασχοληθείς. Ξεκίνησα δειλά να ασχολούμαι και εγώ με c# είμαι όμως τελείως στην αρχή και μου φαίνονται όλα δύσκολα Επεξ/σία 26 Δεκεμβρίου 2017 από k33theod 1
kaliakman Δημοσ. 24 Δεκεμβρίου 2017 Δημοσ. 24 Δεκεμβρίου 2017 K33theod όπως είπα και σε έναν προηγούμενο συμφορουμιτη εσύ έχεις προηγούμενη εμπειρία και από άλλες γλώσσες ενώ εδώ ο φίλος μόλις ξεκίνησε. Πιστεύω ότι να του λέμε για regexp όταν καλά καλά δεν ξέρει τι είναι συνάρτηση ή ενδεχομενως τι είναι πίνακας δεν βοηθάει αλλά το αντίθετο.. 2
costgial Δημοσ. 24 Δεκεμβρίου 2017 Μέλος Δημοσ. 24 Δεκεμβρίου 2017 costgial μετά από λίγο ψάξιμο βρήκα αυτό https://msdn.microsoft.com/en-us/library/b873y76a(v=vs.110).aspx το οποιό προσάρμοσα για να παίρνει και floats και νομίζω είναι η σωστή προσέγγιση για πρόβλημα με μία πράξη Αυτό το foreach μόνο δεν καταλαβαίνω αλλά δουλεύει. using System; using System.Text.RegularExpressions; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { String pattern = @"(\d+\.?\d*)\s+([-+*/])\s+(\d+\.?\d*)"; Console.WriteLine("Δώσε τη μαθηματική παράσταση (με κενά πριν και μετά το σύμβολο της πράξης)"); String parastasi = Console.ReadLine(); foreach (Match m in Regex.Matches(parastasi, pattern)) { double value1 = double.Parse(m.Groups[1].Value); double value2 = double.Parse(m.Groups[3].Value); switch (m.Groups[2].Value) { case "+": Console.WriteLine("{0} = {1}", m.Value, value1 + value2); break; case "-": Console.WriteLine("{0} = {1}", m.Value, value1 - value2); break; case "*": Console.WriteLine("{0} = {1}", m.Value, value1 * value2); break; case "/": Console.WriteLine("{0} = {1:N2}", m.Value, value1 / value2); break; } } } } } το πρόβλημα φαντάζομαι είναι το regex που μπορείς όμως να το αλλάξεις με ifs και splits Αργά ή γρήγορα όμως θα τα χρειαστείς τα regex και πρέπει να ασχοληθείς. Ξεκίνησα δειλά να ασχολούμαι και εγώ με c# είμαι όμως τελείως στην αρχή και μου φαίνονται όλα δύσκολα τι να πω και εγώ που τα μισά (μην πω ολόκληρα και δώσω λάθος εντύπωση) από αυτά που μου λές μου είναι άγνωστα χαχαχα. Σε ευχαριστώ πάρα πολύ για τον χρόνο σου. Έχω φτιάξει ένα πρόγραμμα για να μάθω τις έννοιες που αναφέρεις!
k33theod Δημοσ. 25 Δεκεμβρίου 2017 Δημοσ. 25 Δεκεμβρίου 2017 τι να πω και εγώ που τα μισά (μην πω ολόκληρα και δώσω λάθος εντύπωση) από αυτά που μου λές μου είναι άγνωστα χαχαχα. Σε ευχαριστώ πάρα πολύ για τον χρόνο σου. Έχω φτιάξει ένα πρόγραμμα για να μάθω τις έννοιες που αναφέρεις! Και μένα στη c# άγνωστα μου είναι clopy paste τα έκανα Μην το βλέπεις σαν κώδικα λέξεις δηλαδή, που πρέπει να μάθεις, δες το πιο πολύ σαν ιδέα. Αντί να λες αν ο χαρακτήρας εισόδου είναι αυτό ή αυτό ή αυτό κλπ,λες αν είναι ένας από αυτό το σύνολο. Επίσης τα regex ως έννοια δεν έχουν να κάνουν με κάποια συγκεκριμένη γλώσσα, και η γνώμη μου είναι μόλις τελειώσεις με τις βασικές έννοιες της γλώσσας και αρχίζεις να διαβάζεις βιβλιοθήκες και μεθόδους ξεκίνα με regex, θα τα βρίσκεις συχνά μπροστά σου και θα σε βοήθήσουν αρκετά. K33theod όπως είπα και σε έναν προηγούμενο συμφορουμιτη εσύ έχεις προηγούμενη εμπειρία και από άλλες γλώσσες ενώ εδώ ο φίλος μόλις ξεκίνησε. Πιστεύω ότι να του λέμε για regexp όταν καλά καλά δεν ξέρει τι είναι συνάρτηση ή ενδεχομενως τι είναι πίνακας δεν βοηθάει αλλά το αντίθετο.. Έχει να κάνει με το πως το διαχειρίζεται ο καθένας, για τις περισσότερες περιπτώσεις όμως έχεις δίκιο. Καλά Χριστούγεννα σε όλους παιδιά 3
costgial Δημοσ. 27 Δεκεμβρίου 2017 Μέλος Δημοσ. 27 Δεκεμβρίου 2017 Καλησπέρα σας και πάλι. Κατ'αρχάς εύχομαι να φάγατε αρκετά αυτές τις μέρες Θέλω να φτιάξω ένα προγραμματάκι που έχει ως εξής: 1ο μέρος: θα γράφει ο χρήστης μια λέξη. Η λέξη θα αποθηκεύεται κάπου. 2ο μέρος: θα ζητάω από τον χρήστη μια λέξη και θα πρέπει να απαντάει τη σωστή λέξη (από αυτές που θα είναι αποθηκευμένες) Δε ξέρω αν έγινα κατανοητός, αλλά αν έγινα, θέλω τη βοήθεια σας. Τι να ψάξω στο Google για να καταφέρω υλοποιήσω το προγραμματάκι και κατά δεύτερον μπορώ να το υλοποιήσω στην κονσόλα ή χρειάζομαι WindowsForm ;; ΥΓ: στη C# θα το κάνω όλο αυτό
kaliakman Δημοσ. 27 Δεκεμβρίου 2017 Δημοσ. 27 Δεκεμβρίου 2017 Θες να κρατάς πολλές λέξεις για να ελέγχεις μετά? Αν ναι κοιτάξε να δεις δομες δεδομένων. Πίνακες, λίστες. Στα αγγλικά : array, list αντίστοιχα Αν θες μόνο μια σου αρκεί μια μεταβλητή
costgial Δημοσ. 27 Δεκεμβρίου 2017 Μέλος Δημοσ. 27 Δεκεμβρίου 2017 Σε ευχαριστώ πολύ για την απάντηση!Θέλω να κρατάω πολλές λέξεις, ναι.
kaliakman Δημοσ. 27 Δεκεμβρίου 2017 Δημοσ. 27 Δεκεμβρίου 2017 Ωραία. Θα χρειαστείς όπως είπα κάποιο data structure για να κρατάς τις λέξεις που θέλεις. Μετά πρέπει να δεις πως κανείς αναζήτηση σε αυτές τις δομές για να συγκρίνεις την λέξη που ψάχνεις. Αργότερα θα δεις ότι υπάρχουν δομές που είναι πιο γρήγορες για αναζήτηση αλλά δεν χρειάζεται να μπερδεύεσαι από τώρα. Ότι απορία έχεις εδώ είμαστε.. 1
costgial Δημοσ. 27 Δεκεμβρίου 2017 Μέλος Δημοσ. 27 Δεκεμβρίου 2017 Κοίταξα για lists και array, αλλά θα δουλέψω με lists γιατί δε ξέρω το πλήθος των μεταβλητών που θα χρησιμοποιήσω.Ουσιαστικα θέλω ο χρήστης να εισάγει κάτι τέτοιο: " text1 = text2 " Αλλά θέλω να κάνω το πρόγραμμα έπειτα από αίτημα του χρήστη, να τον ρωτήσει: " text1 = ? " και αν ο χρήστης απαντήσει text2 να βγάλει true, διαφορετικά να βγάλει false. Δεν το σκέφτομαι ως πολύ δύσκολο. Κάνω λάθος, μήπως να το αφήσω για τώρα μέχρι να πάω σε ένα πιο προχωρημένο στάδιο;
kaliakman Δημοσ. 27 Δεκεμβρίου 2017 Δημοσ. 27 Δεκεμβρίου 2017 Όχι δεν είναι καθόλου δύσκολο.. Αρχικά δοκίμασε να βάζεις λέξεις (strings) μέσα σε μια λίστα και να τυπώνεις την λίστα. Δες πχ εδώ : https://www.dotnetperls.com/list
frcake Δημοσ. 29 Δεκεμβρίου 2017 Δημοσ. 29 Δεκεμβρίου 2017 Ναι σωστό, δικό μου το λάθος απλά μου ήταν λίγο αφύσικο και μπερδεύτηκα. Αν βγει το not έξω και τα and γίνουν or if (!(entry == "*" || entry == "-" || entry == "+" || entry == "/" || entry == "%")) μεταφράζεται εάν το entry δεν είναι + ή - ή * ...κλπ που έρχεται πιο φυσικό από το entry δεν είναι + και δεν είναι - και ... ή ακόμα καλύτερα String prajeis = "+-*/%"; if(!prajeis.Contains('entry')) το βρήκα στο https://stackoverflow.com/questions/5009882/pythons-in-operator-equivalent-to-c-sharp Η Contains concept-wise && convention-wise είναι καλή λύση και για το syntactic sugar Κοίταξα για lists και array, αλλά θα δουλέψω με lists γιατί δε ξέρω το πλήθος των μεταβλητών που θα χρησιμοποιήσω. Ουσιαστικα θέλω ο χρήστης να εισάγει κάτι τέτοιο: " text1 = text2 " Αλλά θέλω να κάνω το πρόγραμμα έπειτα από αίτημα του χρήστη, να τον ρωτήσει: " text1 = ? " και αν ο χρήστης απαντήσει text2 να βγάλει true, διαφορετικά να βγάλει false. Δεν το σκέφτομαι ως πολύ δύσκολο. Κάνω λάθος, μήπως να το αφήσω για τώρα μέχρι να πάω σε ένα πιο προχωρημένο στάδιο; Δες εδώ , ξανά με χρήση contains string stringToCheck = "text1text2text3"; string[] stringArray = { "text1", "someothertext", etc... }; if(stringToCheck.contains stringArray) //one of the items? { } απο : https://stackoverflow.com/questions/2912476/using-c-sharp-to-check-if-string-contains-a-string-in-string-array
antonisK79 Δημοσ. 29 Δεκεμβρίου 2017 Δημοσ. 29 Δεκεμβρίου 2017 Θα μπορούσες να βελτιώσεις αρκετά τον κωδικά σου "διαιρώντας" τις απαιτήσεις του project σου σε συναρτήσεις. Θα ήταν καλό απο τώρα να μπαίνεις στην διαδικασία σκέψης του συναρτησιακού προγραμματισμού. Για παράδειγμα , Είναι φανερό οτι προσπαθείς να ελέξεις αν ο χρήστης έχει καταχωρήσει τον σωστό τελεστή πράξης. Βάλε ολη την λογική μέσα σε μία συνάρτηση που θα επιστρέφει boolean και θα δέχεται τον τελεστή. Επίσης βλέπω οτι με βάση των τελεστή εξάγεις το αποτέλεσμα. Προσπάθησε να το κάνεις επίσης μέσα σε μία συνάρτηση η οποία θα δέχεται τον τελεστή και τους δύο όρους της πράξης. Αυτή η συνάρτηση θα επιστρέφει το αποτέλεσμα απλά. Επίσης προσπάθησε τα ονοματα των μεταβλητων σου να περιγράφουν ακριβώς το τι προκειται να αποθηκευτεί στην μεταβλητή.Να αποφεύγεις ονοματα μεταβλητών οπως a ,b ,c n1 , n2 Φιλικά
defacer Δημοσ. 29 Δεκεμβρίου 2017 Δημοσ. 29 Δεκεμβρίου 2017 Για μένα ένα τέτοιο trivial κομπιουτεράκι σε C# πρέπει να καταλήξει σε κάτι που περιέχει var operatorLambdas = new Dictionary<string, Func<float, float, float>>() { { "+", (x, y) => x + y }, { "-", (x, y) => x - y }, { "*", (x, y) => x * y }, { "/", (x, y) => x / y }, }; με τα προφανή πλεονεκτήματα του πανεύκολου ελέγχου (operatorLambdas.ContainsKey) και επεκτασιμότητας. Το θέμα είναι όπως πάντα "how to get there from here"... K33theod όπως είπα και σε έναν προηγούμενο συμφορουμιτη εσύ έχεις προηγούμενη εμπειρία και από άλλες γλώσσες ενώ εδώ ο φίλος μόλις ξεκίνησε. Πιστεύω ότι να του λέμε για regexp όταν καλά καλά δεν ξέρει τι είναι συνάρτηση ή ενδεχομενως τι είναι πίνακας δεν βοηθάει αλλά το αντίθετο.. Επίσης είναι πολύ κακή ιδέα το regex σε κομπιουτεράκι επειδή σε βάζει σε τελείως λάθος μονοπάτι. Άυριο μεθαύριο θες π.χ. να βάλεις και υποστήριξη για παρενθέσεις. Then what? Ξήλωμα τα regex και επιστροφή σε μονοπάτια που οδηγούν στο ταξίδι του γραψίματος parser.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα