Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Ναι σωστό, δικό μου το λάθος απλά μου ήταν λίγο αφύσικο και μπερδεύτηκα.

 

 

Αν βγει το 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

  • Απαντ. 32
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

Να μη δοκιμάσεις με or γιατί σωστά το έχεις. Σκέψου το λογικά.

 

Από την άλλη αυτό είναι κλασικό λάθος που όλοι έχουμε κάνει κατά καιρούς οπότε κάντο και συ να "εμβολιαστείς" και να μη το ξανακάνεις τα επόμενα 4-5 χρόνια.  :-D

δεν λέω για όταν ισχύει το σύμβολο του αντιθέτου, γιατί τότε ναι δεν έχει νόημα.. αλλά αν δεν ισχύει το != και ισχύει η ισότητα ( = ) τότε θα δε μπορούσε να μπει το "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

Ευχαριστώ πολύ για τα κομμάτια κώδικα, θα τα χρησιμοποιήσω, διότι φαίνονται πολύ ενδιαφέροντα!

Δημοσ. (επεξεργασμένο)

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# είμαι όμως τελείως στην αρχή και μου φαίνονται όλα δύσκολα :cry:

Επεξ/σία από k33theod
  • Like 1
Δημοσ.

K33theod όπως είπα και σε έναν προηγούμενο συμφορουμιτη εσύ έχεις προηγούμενη εμπειρία και από άλλες γλώσσες ενώ εδώ ο φίλος μόλις ξεκίνησε. Πιστεύω ότι να του λέμε για regexp όταν καλά καλά δεν ξέρει τι είναι συνάρτηση ή ενδεχομενως τι είναι πίνακας δεν βοηθάει αλλά το αντίθετο..

  • Like 2
Δημοσ.

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# είμαι όμως τελείως στην αρχή και μου φαίνονται όλα δύσκολα :cry:

τι να πω και εγώ που τα μισά (μην πω ολόκληρα και δώσω λάθος εντύπωση) από αυτά που μου λές μου είναι άγνωστα χαχαχα. Σε ευχαριστώ πάρα πολύ για τον χρόνο σου. Έχω φτιάξει ένα πρόγραμμα για να μάθω τις έννοιες που αναφέρεις! :-D

Δημοσ.

τι να πω και εγώ που τα μισά (μην πω ολόκληρα και δώσω λάθος εντύπωση) από αυτά που μου λές μου είναι άγνωστα χαχαχα. Σε ευχαριστώ πάρα πολύ για τον χρόνο σου. Έχω φτιάξει ένα πρόγραμμα για να μάθω τις έννοιες που αναφέρεις! :-D

 

Και μένα στη c# άγνωστα μου είναι clopy paste τα έκανα :-D

 

Μην το βλέπεις σαν κώδικα λέξεις δηλαδή, που πρέπει να μάθεις, δες το πιο πολύ σαν ιδέα.

Αντί να λες αν ο χαρακτήρας εισόδου είναι αυτό ή αυτό ή αυτό κλπ,λες αν είναι ένας από αυτό το σύνολο.

 

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

K33theod όπως είπα και σε έναν προηγούμενο συμφορουμιτη εσύ έχεις προηγούμενη εμπειρία και από άλλες γλώσσες ενώ εδώ ο φίλος μόλις ξεκίνησε. Πιστεύω ότι να του λέμε για regexp όταν καλά καλά δεν ξέρει τι είναι συνάρτηση ή ενδεχομενως τι είναι πίνακας δεν βοηθάει αλλά το αντίθετο..

Έχει να κάνει με το πως το διαχειρίζεται ο καθένας, για τις περισσότερες περιπτώσεις όμως έχεις δίκιο.

 

Καλά Χριστούγεννα σε όλους παιδιά

  • Like 3
Δημοσ.

Καλησπέρα σας και πάλι. Κατ'αρχάς εύχομαι να φάγατε αρκετά αυτές τις μέρες :-D

Θέλω να φτιάξω ένα προγραμματάκι που έχει ως εξής:

1ο μέρος:

θα γράφει ο χρήστης μια λέξη. Η λέξη θα αποθηκεύεται κάπου.

2ο μέρος:

θα ζητάω από τον χρήστη μια λέξη και θα πρέπει να απαντάει τη σωστή λέξη (από αυτές που θα είναι αποθηκευμένες)

 

Δε ξέρω αν έγινα κατανοητός, αλλά αν έγινα, θέλω τη βοήθεια σας. Τι να ψάξω στο Google για να καταφέρω υλοποιήσω το προγραμματάκι και κατά δεύτερον μπορώ να το υλοποιήσω στην κονσόλα ή χρειάζομαι WindowsForm ;;

 

ΥΓ: στη C# θα το κάνω όλο αυτό

Δημοσ.

Θες να κρατάς πολλές λέξεις για να ελέγχεις μετά?

Αν ναι κοιτάξε να δεις δομες δεδομένων. Πίνακες, λίστες. Στα αγγλικά : array, list αντίστοιχα

 

Αν θες μόνο μια σου αρκεί μια μεταβλητή

Δημοσ.

Ωραία. Θα χρειαστείς όπως είπα κάποιο data structure για να κρατάς τις λέξεις που θέλεις. Μετά πρέπει να δεις πως κανείς αναζήτηση σε αυτές τις δομές για να συγκρίνεις την λέξη που ψάχνεις. Αργότερα θα δεις ότι υπάρχουν δομές που είναι πιο γρήγορες για αναζήτηση αλλά δεν χρειάζεται να μπερδεύεσαι από τώρα. Ότι απορία έχεις εδώ είμαστε..

  • Like 1
Δημοσ.

Κοίταξα για lists και array, αλλά θα δουλέψω με lists γιατί δε ξέρω το πλήθος των μεταβλητών που θα χρησιμοποιήσω.
Ουσιαστικα θέλω ο χρήστης να εισάγει κάτι τέτοιο:   " text1 = text2 "

Αλλά θέλω να κάνω το πρόγραμμα έπειτα από αίτημα του χρήστη, να τον ρωτήσει: " text1 = ? " και αν ο χρήστης απαντήσει text2 να βγάλει true, διαφορετικά να βγάλει false. Δεν το σκέφτομαι ως πολύ δύσκολο. Κάνω λάθος, μήπως να το αφήσω για τώρα μέχρι να πάω σε ένα πιο προχωρημένο στάδιο;

Δημοσ.

Ναι σωστό, δικό μου το λάθος απλά μου ήταν λίγο αφύσικο και μπερδεύτηκα.

 

 

Αν βγει το 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 :D

 

 

Κοίταξα για 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

Δημοσ.

Θα μπορούσες να βελτιώσεις αρκετά τον κωδικά σου "διαιρώντας" τις απαιτήσεις του project σου σε συναρτήσεις. Θα ήταν καλό απο τώρα να μπαίνεις στην διαδικασία σκέψης του συναρτησιακού προγραμματισμού.

 

Για παράδειγμα , 

Είναι φανερό οτι προσπαθείς να ελέξεις αν ο χρήστης έχει καταχωρήσει τον σωστό τελεστή πράξης. Βάλε ολη την λογική μέσα σε μία συνάρτηση που θα επιστρέφει boolean και θα δέχεται τον τελεστή.

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

 

Επίσης προσπάθησε τα ονοματα των μεταβλητων σου να περιγράφουν ακριβώς το τι προκειται να αποθηκευτεί στην μεταβλητή.Να αποφεύγεις ονοματα μεταβλητών οπως a ,b ,c n1 , n2

 

Φιλικά

Δημοσ.

 

Για μένα ένα τέτοιο 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.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...