ST0RM Δημοσ. 5 Φεβρουαρίου 2016 Δημοσ. 5 Φεβρουαρίου 2016 Γεια σας !! Ειμαι σχετικα newbie στην C#. Γι'αυτο παρακαλω οχι hate-posts.Σημερα το μεσημερι για να περασει η ωρα, αλλα και για εξασκηση εκανα αυτη την αριθμομηχανη: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace arithmomixani { class Program { static void Main(string[] args) { //dilosi int b; int arithmos1; int arithmos2; string AskExit; int exit; //dilwsi timwn b = 0; exit = 0; do { Console.WriteLine("Ti praksi theleis na kaneis ?? Polaplasiasmo ?(*) Diairesi ?( prosthesi (+) i afairesi (-) ??"); string methodos = Console.ReadLine(); if (methodos == "*") { Console.WriteLine("Dwste ton prwto arithmo"); arithmos1 = int.Parse(Console.ReadLine()); Console.WriteLine("Dwste ton deftero arithmo"); arithmos2 = int.Parse(Console.ReadLine()); Console.WriteLine("To apotelesma tis praksis einai: {0}", arithmos1 * arithmos2); b++; // erwtisi telous(begin) Console.WriteLine("teleiosate tis prakseis ? (yes/no)"); AskExit = Console.ReadLine(); if (AskExit == "yes") { exit = 1; } // erwitisi telous(end) } else if (methodos == "+") { Console.WriteLine("Dwste ton prwto arithmo"); arithmos1 = int.Parse(Console.ReadLine()); Console.WriteLine("Dwste ton deftero arithmo"); arithmos2 = int.Parse(Console.ReadLine()); Console.WriteLine("To apotelesma tis praksis einai: {0}", arithmos1 + arithmos2); b++; // erwtisi telous(begin) Console.WriteLine("teleiosate tis prakseis ? (yes/no)"); AskExit = Console.ReadLine(); if (AskExit == "yes") { exit = 1; } // erwitisi telous(end) } else if (methodos == ":") { Console.WriteLine("Dwste ton prwto arithmo"); arithmos1 = int.Parse(Console.ReadLine()); Console.WriteLine("Dwste ton deftero arithmo"); arithmos2 = int.Parse(Console.ReadLine()); Console.WriteLine("To apotelesma tis praksis einai: {0}", arithmos1 / arithmos2); b++; // erwtisi telous(begin) Console.WriteLine("teleiosate tis prakseis ? (yes/no)"); AskExit = Console.ReadLine(); if (AskExit == "yes") { exit = 1; } // erwitisi telous(end) } else if (methodos == "-") { Console.WriteLine("Dwste ton prwto arithmo"); arithmos1 = int.Parse(Console.ReadLine()); Console.WriteLine("Dwste ton deftero arithmo"); arithmos2 = int.Parse(Console.ReadLine()); Console.WriteLine("To apotelesma tis praksis einai: {0}", arithmos1 - arithmos2); b++; // erwtisi telous(begin) Console.WriteLine("teleiosate tis prakseis ? (yes/no)"); AskExit = Console.ReadLine(); if (AskExit == "yes") { exit = 1; } // erwitisi telous(end) } else { Console.WriteLine("I praksi pou dwsate den uparxei."); } } while (exit == 0); Console.WriteLine("\n============"); Console.WriteLine("Kanate sunolika {0} prakseis",; Console.WriteLine("============"); Console.ReadKey(); } } } Ξερω οτι ειναι παρα πολυ απλο. H ιδεα ηταν μια απλη αριθμομηχανη η οποια θα κανεις υπολογισμους απλους και θα μετραει ποσες πραξεις εχεις κανει στο συνολο.Πειτε μου γνωμες για το πως θα μπορουσα να κανω ΑΠΛΑ ποιο ΑΠΛΟ τον κωδικα. Συγγνωμη για τα σχολια απλα τα εχω για να μπορω αμεσως να καταλαβω τι στο καλο εχω γραψει εκει μεσα. Γιατι ειμαι λιγο βαρυ παιδι στην μνημη.... Επισης πειτε μου αν εχετε καποια αλλη ιδεα για καποιο χαζο-προγραμμα για να πειραματιζομαι στην C#. Θα σας ειμαι υποχρεος Ευχαριστω !
Papakaliati Δημοσ. 5 Φεβρουαρίου 2016 Δημοσ. 5 Φεβρουαρίου 2016 Ενας απο τους καλυτερους τροπους να δεις πως λειτουργει ενα προγραμμα, ειναι να το χαλασεις και να το φτιαξεις. Στην συγκεκριμενη περιπτωση δεν χρειαζεται να προσπαθησεις να προσπαθησεις και πολυ. Δοκιμασε απλα αντι για αριθμο να δωσεις γραμμα, δες τι γινεται, και προσπαθησε να καταλαβεις γιατι. 3
Επισκέπτης Δημοσ. 5 Φεβρουαρίου 2016 Δημοσ. 5 Φεβρουαρίου 2016 Γι αρχή αξιοποίησε τα arguments. Δηλαδή ο πίνακας (string[] args) που περνάει στην Main αυτόματα αφορά τα command line arguments. Μπορείς ας πούμε να τρέχεις το πρόγραμμα σου γράφοντας arithmomixani 3 5 +. Το 3 θα πάει στο args[0], το 5 στο args[1] κ.ο.κ. Έτσι κάνεις έναν έλεγχο τι πράξη ζητά ο χρήστης και την εκτελείς αμέσως. Το πρόγραμμα σου θα μειωθεί στο 1/5 τουλάχιστον. Τώρα τι προγράμματα να φτιάξεις; Κοίτα τι εργασίες κάνεις συχνά και προσπάθησε να φτιάξεις προγραμματάκια που να τις καλύπτουν. Όλοι κάπως έτσι ξεκινήσαμε.
M2000 Δημοσ. 5 Φεβρουαρίου 2016 Δημοσ. 5 Φεβρουαρίου 2016 Είμαι πάντα όλο ιδέες! Αλλάζεις την δομή if elseif .. με μια τύπου select (switch στη C# https://msdn.microsoft.com/en-us/library/06tc147t.aspx) Δεν θέλω να με ρωτάει. Να βγάζει αυτό: ? και μετά να γράφω ένα τύπο 10+4*5+30 Παρενθέσεις δεν θα παίρνει! αλλά όταν βρίσκει + ή - τότε θα είναι σαν να βρίσκεται στο ? ενώ αν βρίσκει * και / θα κάνει την πράξη. Δεν είναι ανάγκη να χρησιμοποιήσεις αναδρομή. βάλε έναν πίνακα εκατό θέσεων για να κρατάει τα πριν το ? αποτελέσματα και μετά μόλις φθάσεις στο τέλος, κάνει μια σούμα σε όλα! 1
defacer Δημοσ. 5 Φεβρουαρίου 2016 Δημοσ. 5 Φεβρουαρίου 2016 Συγγνωμη για τα σχολια απλα τα εχω για να μπορω αμεσως να καταλαβω τι στο καλο εχω γραψει εκει μεσα. Αυτό είναι ήδη ένα πολύ ισχυρό hint για το τι πρέπει να κάνεις. Οι προτάσεις μου για αρχή: Οι τέσσερις πράξεις που έχεις πηγαίνει καθεμιά σε δική της method, όχι τα πάντα σαβούρα μέσα στη main. Βασικός κανόνας στον προγραμματισμό: DRY (Don't Repeat Yourself). Έχεις τον ίδιο ακριβώς κώδικα 4 φορές να ρωτάει αν θέλουμε άλλη πράξη. Αυτό δεν έπρεπε βέβαια να είναι μέσα σε κάθε if αλλά μέσα στο ίδιο το while αφού πάντα θέλεις να γίνεται. Βάλτο λοιπόν σε μια δική του method την οποία θα καλείς όχι από τις 4 προηγούμενες αλλά στο τέλος του while. To if (methodos == "*") είναι άσχημο, και σε περιορίζει επειδή κάνεις συγκρίσεις όχι στο επίπεδο "αν η πράξη είναι πολλαπλασιασμός" αλλά "αν η είσοδος του χρήστη είναι αστεράκι (το οποίο τυχαίνει πολλές φορές να αναπαριστά τον πολλαπλασιασμό). Θα ήταν πολύ προτιμότερο να έχεις αντί γι' αυτό if (operation == Operations.Multiplication), το οποίο διαβάζεται νεράκι. Κάνε λοιπόν μια enum Operations (διάβασε τι είναι enum αν χρειάζεται) και γράψε λίγο κώδικα εκεί στο ReadLine που να αντιστοιχίζει την είσοδο του χρήστη σε τιμή της enum Operations. Μετά άλλαξε τα if. Φυσικά υπάρχει ακόμα περισσότερο περιθώριο βελτίωσης, αλλά φτάσε αν θες πρώτα εκεί, ξαναπόσταρε τι έχεις και εδώ είμαστε να συζητήσουμε τις διαφορές πριν/μετά και να προχωρήσουμε με δεύτερο κύκλο βελτιώσεων. Είμαι πάντα όλο ιδέες! Όντως είσαι πάντα όλο... ιδέες. "Πειτε μου γνωμες για το πως θα μπορουσα να κανω ΑΠΛΑ ποιο ΑΠΛΟ τον κωδικα" είπε το παιδί. Και τα κεφαλαία μόνος του τα έβαλε. 1
dios231 Δημοσ. 5 Φεβρουαρίου 2016 Δημοσ. 5 Φεβρουαρίου 2016 Λιγο πολυ οτι σου ειπε ο defacer, - 4 μεθοδους οπου η καθε μια ξεχωριστα θα υλοποιει την καθε πραξη (π.χ operationPlus(int a, int b ) κτλ) - θα μπορουσες την exit να την δηλωσεις σαν boolean - στην διαιρεση να ελενχεις αν εχεις παρανομαστη 0Τελος να προσθεσω οτι ο κωδικας σου μπορει να δουλεψει αλλα αφου γραφεις σε C# καλο θα ηταν σιγα σιγα να μπαινεις στο πνευμα του αντικειμενοστραφους προγραμματισμου. Ενα πραγματκα φοβερο video που θα σε βοηθησει ειναι Site: αυτο καθως και Site: αυτο . Ο θειος Μπομπ εξηγει πραγματα που ακομα μπορει να μην τα καταλαβαινεις αλλα πιστευω οτι οσο πιο νωρις εμπεδωσεις 2-3 concepts απο αυτα που θα ακουσεις, θα σε βοηθησουν παρα πολυ. 1
παπι Δημοσ. 6 Φεβρουαρίου 2016 Δημοσ. 6 Φεβρουαρίου 2016 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace arithmomixani { enum Operator { Add,Sub,Mult,Div } struct Pair { public double First; public double Second; } class Program { static Operator ReadOperator() { Console.WriteLine("Ti praksi theleis na kaneis ?? Polaplasiasmo ?(*) Diairesi ?( prosthesi (+) i afairesi (-) ??"); switch(Console.ReadLine()) { case "+": return Operator.Add; case "-": return Operator.Sub; case "*": return Operator.Mult; case "/": return Operator.Div; default: return ReadOperator(); } } static Pair ReadPair() { Pair p = new Pair(); try { Console.WriteLine("Dwste ton prwto arithmo"); p.First = double.Parse(Console.ReadLine()); Console.WriteLine("Dwste ton deftero arithmo"); p.Second = double.Parse(Console.ReadLine()); } catch(Exception e) { return ReadPair(); } return p; } static double Calc(Operator o, Pair p) { switch(o) { case Operator.Add: return p.First + p.Second; case Operator.Sub: return p.First - p.Second; case Operator.Mult: return p.First * p.Second; case Operator.Div: return p.Second == 0.0 ? double.NaN : p.First / p.Second; default: return 0.0; } } static void Main(string[] args) { int b = 0; for(; { b++; var oper = ReadOperator(); var pair = ReadPair(); var res = Calc(oper, pair); Console.WriteLine("To apotelesma tis praksis einai: {0}", res); // erwtisi telous(begin) Console.WriteLine("teleiosate tis prakseis ? (yes/no)"); if (Console.ReadLine() == "yes") break; // erwitisi telous(end) } /* //dilosi int b; int arithmos1; int arithmos2; string AskExit; int exit; //dilwsi timwn b = 0; exit = 0; do { Console.WriteLine("Ti praksi theleis na kaneis ?? Polaplasiasmo ?(*) Diairesi ?( prosthesi (+) i afairesi (-) ??"); string methodos = Console.ReadLine(); if (methodos == "*") { Console.WriteLine("Dwste ton prwto arithmo"); arithmos1 = int.Parse(Console.ReadLine()); Console.WriteLine("Dwste ton deftero arithmo"); arithmos2 = int.Parse(Console.ReadLine()); Console.WriteLine("To apotelesma tis praksis einai: {0}", arithmos1 * arithmos2); b++; // erwtisi telous(begin) Console.WriteLine("teleiosate tis prakseis ? (yes/no)"); AskExit = Console.ReadLine(); if (AskExit == "yes") { exit = 1; } // erwitisi telous(end) } else if (methodos == "+") { Console.WriteLine("Dwste ton prwto arithmo"); arithmos1 = int.Parse(Console.ReadLine()); Console.WriteLine("Dwste ton deftero arithmo"); arithmos2 = int.Parse(Console.ReadLine()); Console.WriteLine("To apotelesma tis praksis einai: {0}", arithmos1 + arithmos2); b++; // erwtisi telous(begin) Console.WriteLine("teleiosate tis prakseis ? (yes/no)"); AskExit = Console.ReadLine(); if (AskExit == "yes") { exit = 1; } // erwitisi telous(end) } else if (methodos == ":") { Console.WriteLine("Dwste ton prwto arithmo"); arithmos1 = int.Parse(Console.ReadLine()); Console.WriteLine("Dwste ton deftero arithmo"); arithmos2 = int.Parse(Console.ReadLine()); Console.WriteLine("To apotelesma tis praksis einai: {0}", arithmos1 / arithmos2); b++; // erwtisi telous(begin) Console.WriteLine("teleiosate tis prakseis ? (yes/no)"); AskExit = Console.ReadLine(); if (AskExit == "yes") { exit = 1; } // erwitisi telous(end) } else if (methodos == "-") { Console.WriteLine("Dwste ton prwto arithmo"); arithmos1 = int.Parse(Console.ReadLine()); Console.WriteLine("Dwste ton deftero arithmo"); arithmos2 = int.Parse(Console.ReadLine()); Console.WriteLine("To apotelesma tis praksis einai: {0}", arithmos1 - arithmos2); b++; // erwtisi telous(begin) Console.WriteLine("teleiosate tis prakseis ? (yes/no)"); AskExit = Console.ReadLine(); if (AskExit == "yes") { exit = 1; } // erwitisi telous(end) } else { Console.WriteLine("I praksi pou dwsate den uparxei."); } } while (exit == 0); */ Console.WriteLine("\n============"); Console.WriteLine("Kanate sunolika {0} prakseis", ; Console.WriteLine("============"); Console.ReadKey(); } } } θα με σφαξει ο αλλος με το "error handling" 1
M2000 Δημοσ. 6 Φεβρουαρίου 2016 Δημοσ. 6 Φεβρουαρίου 2016 Ορέ Defacer όλο με μαλώνεις! Ορίστε για απλότητα: Στη Μ2000 η απάντηση είναι αυτή...και δουλεύει και με επιστροφή λάθους! Input A$ Try ok { Print Eval(A$) } If not ok then Print "Την έκανες την Πατάτα" Γιατί σε interpreter είναι απλό να έχεις μια eval() 3
ST0RM Δημοσ. 6 Φεβρουαρίου 2016 Μέλος Δημοσ. 6 Φεβρουαρίου 2016 Ενας απο τους καλυτερους τροπους να δεις πως λειτουργει ενα προγραμμα, ειναι να το χαλασεις και να το φτιαξεις. Στην συγκεκριμενη περιπτωση δεν χρειαζεται να προσπαθησεις να προσπαθησεις και πολυ. Δοκιμασε απλα αντι για αριθμο να δωσεις γραμμα, δες τι γινεται, και προσπαθησε να καταλαβεις γιατι. Καλη ιδεα. Θα το δοκιμασω Γι αρχή αξιοποίησε τα arguments. Δηλαδή ο πίνακας (string[] args) που περνάει στην Main αυτόματα αφορά τα command line arguments. Μπορείς ας πούμε να τρέχεις το πρόγραμμα σου γράφοντας arithmomixani 3 5 +. Το 3 θα πάει στο args[0], το 5 στο args[1] κ.ο.κ. Έτσι κάνεις έναν έλεγχο τι πράξη ζητά ο χρήστης και την εκτελείς αμέσως. Το πρόγραμμα σου θα μειωθεί στο 1/5 τουλάχιστον. Τώρα τι προγράμματα να φτιάξεις; Κοίτα τι εργασίες κάνεις συχνά και προσπάθησε να φτιάξεις προγραμματάκια που να τις καλύπτουν. Όλοι κάπως έτσι ξεκινήσαμε. Συγγνωμη αλλα μαλλον ειμαι πολυ noob και δεν καταλαβαινω τι εννοεις. Αλλα θα το ψαξω Είμαι πάντα όλο ιδέες! Αλλάζεις την δομή if elseif .. με μια τύπου select (switch στη C# https://msdn.microsoft.com/en-us/library/06tc147t.aspx) Δεν θέλω να με ρωτάει. Να βγάζει αυτό: ? και μετά να γράφω ένα τύπο 10+4*5+30 Παρενθέσεις δεν θα παίρνει! αλλά όταν βρίσκει + ή - τότε θα είναι σαν να βρίσκεται στο ? ενώ αν βρίσκει * και / θα κάνει την πράξη. Δεν είναι ανάγκη να χρησιμοποιήσεις αναδρομή. βάλε έναν πίνακα εκατό θέσεων για να κρατάει τα πριν το ? αποτελέσματα και μετά μόλις φθάσεις στο τέλος, κάνει μια σούμα σε όλα! No idea how to do this Αυτό είναι ήδη ένα πολύ ισχυρό hint για το τι πρέπει να κάνεις. Οι προτάσεις μου για αρχή: Οι τέσσερις πράξεις που έχεις πηγαίνει καθεμιά σε δική της method, όχι τα πάντα σαβούρα μέσα στη main. Βασικός κανόνας στον προγραμματισμό: DRY (Don't Repeat Yourself). Έχεις τον ίδιο ακριβώς κώδικα 4 φορές να ρωτάει αν θέλουμε άλλη πράξη. Αυτό δεν έπρεπε βέβαια να είναι μέσα σε κάθε if αλλά μέσα στο ίδιο το while αφού πάντα θέλεις να γίνεται. Βάλτο λοιπόν σε μια δική του method την οποία θα καλείς όχι από τις 4 προηγούμενες αλλά στο τέλος του while. To if (methodos == "*") είναι άσχημο, και σε περιορίζει επειδή κάνεις συγκρίσεις όχι στο επίπεδο "αν η πράξη είναι πολλαπλασιασμός" αλλά "αν η είσοδος του χρήστη είναι αστεράκι (το οποίο τυχαίνει πολλές φορές να αναπαριστά τον πολλαπλασιασμό). Θα ήταν πολύ προτιμότερο να έχεις αντί γι' αυτό if (operation == Operations.Multiplication), το οποίο διαβάζεται νεράκι. Κάνε λοιπόν μια enum Operations (διάβασε τι είναι enum αν χρειάζεται) και γράψε λίγο κώδικα εκεί στο ReadLine που να αντιστοιχίζει την είσοδο του χρήστη σε τιμή της enum Operations. Μετά άλλαξε τα if. Φυσικά υπάρχει ακόμα περισσότερο περιθώριο βελτίωσης, αλλά φτάσε αν θες πρώτα εκεί, ξαναπόσταρε τι έχεις και εδώ είμαστε να συζητήσουμε τις διαφορές πριν/μετά και να προχωρήσουμε με δεύτερο κύκλο βελτιώσεων. Όντως είσαι πάντα όλο... ιδέες. "Πειτε μου γνωμες για το πως θα μπορουσα να κανω ΑΠΛΑ ποιο ΑΠΛΟ τον κωδικα" είπε το παιδί. Και τα κεφαλαία μόνος του τα έβαλε. Η ερωτηση μου ειναι η εξης. Και εγω δεν ηθελα να μπει ο ιδιος κωδικας 4 φορες, αλλα οτι αλλο και να εκανα δεν δουλευε. Αν εβαζα τον κωδικα στο τελος του while, τον εκτελουσε παντα. Ακομα κι οταν δεν επρεπε ρωτουσε αν θελω να συνεχισω. Εξω απο το loop μου βγαζει θεματακια παλι. Το δευτερο μερος που ειπες δεν το καταλαβα πολυ. Τι θα αλλαξει αν δηλαδη βαλω το (operation == Operations.Multiplication) ?? Ναι θα δω τι ειναι το Enum. Λιγο πολυ οτι σου ειπε ο defacer, - 4 μεθοδους οπου η καθε μια ξεχωριστα θα υλοποιει την καθε πραξη (π.χ operationPlus(int a, int b ) κτλ) - θα μπορουσες την exit να την δηλωσεις σαν boolean - στην διαιρεση να ελενχεις αν εχεις παρανομαστη 0 Τελος να προσθεσω οτι ο κωδικας σου μπορει να δουλεψει αλλα αφου γραφεις σε C# καλο θα ηταν σιγα σιγα να μπαινεις στο πνευμα του αντικειμενοστραφους προγραμματισμου. Ενα πραγματκα φοβερο video που θα σε βοηθησει ειναι Site: αυτο καθως και Site: αυτο . Ο θειος Μπομπ εξηγει πραγματα που ακομα μπορει να μην τα καταλαβαινεις αλλα πιστευω οτι οσο πιο νωρις εμπεδωσεις 2-3 concepts απο αυτα που θα ακουσεις, θα σε βοηθησουν παρα πολυ. Ναι.... καλο αλλα δεν ξερω κατα ποσο θα πρεπει να μπλεξω τωρα σε αυτα που λεει ο θεος Μπομπ Μηπως παρα ειναι νωρις ??
M2000 Δημοσ. 6 Φεβρουαρίου 2016 Δημοσ. 6 Φεβρουαρίου 2016 @STORM Δες με τη φαντασία σου το πρόγραμμα! Υπάρχουν δυο πίνακες ένας Γινόμενα, και ένας Πρόσημα. Δες ότι υπάρχουν δυο εργάτες (διαδικασίες), ο ένας περιμένει στο ? να πάρει νούμερο για να τον γράψει στον πίνακα σε μια θέση Ι. Το παίρνει λοιπόν και περιμένει το σύμβολο πράξης. Αν αυτό είναι επί ή δια τότε δίνει τη δουλειά στο δεύτερο εργάτη, δίνοντας το Ι και το σύμβολο. Αυτός ο δεύτερος ζητάει το δεύτερο νούμερο. Το παίρνει και εκτελεί την διαίρεση και αφήνει το αποτέσμα στη θέση Ι του πίνακα και περιμένει το επόμενο σύμβολο. Αν πατήσεις = ή + 'η - η δική του δουλειά τελειώνει, και ενημερώνει τον πρώτο εργάτη για το σύμβολο που έχει πάρει. Ο πρώτος εργάτης αν δει το = τότε πάει και προσθέτει όλα τα προηγούμενα (δες παρακάτω πως). Αν δει το + τότε αυξάνει το Ι και βάζει στο πίνακα πρόσημα το 1, αν δει το - βάζει στα πίνακα πρόσημα το -1, και στις δυο περίπτωσεις ζητάει πάλι νούμερο. Για να προσθέσει κάνει αυτό σούμα=0 Για ι=αρχή ως τέλος : Σούμα=Σούμα+Γινόμενο(ι)*Πρόσημο(ι) : Επόμενο Ι. Βέβαια ο δεύτερος εργάτης μπορεί να δέχεται το C (Clear) ώστε το τελευταίο γινόμενο να ξαναμπεί, ή το E (Erase) για να σβήσουν όλα τα μερικά γινόμενα. Δηλαδή καλό είναι το πρόγραμμα να έχει τρόπο διακοπής εκτέλεσης. Σε περίπτωση λάθους με διαίρεση με το μηδέν ο δεύτερος εργάτης θα σβήνει το γινόμενο και θα το ζητάει πάλι! Το έγραψα με τρόπο ώστε ο αναγνώστης να μπει στη θέση του προγραμματιστή. Ο προγραμματιστής είναι αυτός που διευθύνει τα μέρη του προγράμματος και πρέπει να κάνουν αυτό που θέλει. Πριν γράψει κανείς κώδικα πρέπει να ξεκαθαρίσει πόσους εργάτες χρειάζεται και τι πρόγραμμα θα τους δώσει να κάνουν! Άλλο πράγμα το τεχνικό θέμα, το τι εντολές θα χρειαστεί κανείς και σε ποια γλώσσα και άλλο το πραγματικό ζήτημα. Δεν μιλάμε για τυποποιημένο αλγόριθμο. Ούτε καν μου αρέσει η χρήση της λέξης αλγόριθμος εδώ. Μόνο μία ταιριάζει: Προγραμματισμός. Αυτό είναι προγραμματισμός, όχι το τεχνικό κομμάτι (που σίγουρα είναι το χρονοβόρο-κοστοβόρο) αλλά η άσκηση "διεύθυνσης"...στις σκέψεις..Αυτό το λέω Mind Managment...
Giorgos65ert Δημοσ. 6 Φεβρουαρίου 2016 Δημοσ. 6 Φεβρουαρίου 2016 Επισης πειτε μου αν εχετε καποια αλλη ιδεα για καποιο χαζο-προγραμμα για να πειραματιζομαι στην C#. Θα σας ειμαι υποχρεος Είχα μια ιδέα καθώς είμαι λίγο αλανταλο στο να κρατάω σημειώσεις στο χαρτί και σκεφτικά γιατί να μην φτιάξω ένα πρόγραμμα που θα φτιάχνω κατηγορίες και θα βάζω σημειώσεις , ασκήσεις και ότι μου κατεβεί; π.χ.: Μαθηματικά -> Σημειώσεις | Ασκήσεις --------------------------------- Μαθηματικά - Σημειώσεις -> Τίτλος σημείωσης Περιεχόμενο: Mpla mpla mplaaa ... ---------------------------------- Μαθηματικά - Ασκήσεις -> Τίτλος άσκησης Περιεχόμενο: mpla mpla mpla... άλλα να μπορείς να κάνεις edit , insert , save , export as pdf .... Άλλα αυτό θα το έκανα με c++ + sqlite/mysql + libs pdf + gui(Qt). (Τελικά βαριόμουνα και το παράτησα ) Άλλα μπορείς να το κάνεις και σε C# και για αρχή μόνο με struct's η classes και σε console μετά αν θες του κάνεις ότι αλλαγή θες. Και αν θες να κάνεις και feature save μπορείς να το κάνεις με ένα .txt η κατά προτίμηση .json σε json θα είναι πολύ πιο βολικό οπού θα αποθηκεύεις τα δεδομένα.
M2000 Δημοσ. 6 Φεβρουαρίου 2016 Δημοσ. 6 Φεβρουαρίου 2016 Άνοιξες μεγάλο θέμα με το αρχεία! Πρέπει όμως να ξέρει να χειρίζεται αρχεία! Γενικά όταν μιλάμε για γλώσσα και χρήση αρχείων έχουμε να κάνουμε με τρία πράγματα: 1. Πώς κοιτάμε αν υπάρχει ένα αρχείο, Πώς ξέρουμε ποιος είναι ο τρέχον φάκελος και πώς τον αλλάζουμε. Πως κοιτάμε αν υπάρχει φάκελος, πώς δημιουργούμε. 2. Πώς γράφουμε σε ένα αρχείο χαρακτήρων, με ASCII και πώς με άλλη κωδικοποίηση, και πως διαβάζουμε ανάλογα. Πως γράφουμε/διαβάζουμε αρχείο τυχαίας προσπέλασης σταθερού πλάτους εγγραφής. 3. Πως χρησιμοποιώ έτοιμα αντικείμενα, π.χ. ADO ή βιβλιοθήκες για Βάσεις δεδομένων (δηλαδή αντί να καταφύγουμε σε αρχεία πάμε σε βάσεις δεδομένων). Οπωσδήποτε το 1 χρειάζεται είτε πάμε στο 2 είτε στο 3 Και οι τρεις ενότητες είναι σχετικές με το σύστημα και τη γλώσσα. Για το 3 πρέπει η γλώσσα να μπορεί να χρησιμοποιεί εξωτερικά dll ή COM αντικείμενα (που και αυτά dlll είναι στο βάθος). Τα xml και json γράφουν σε utf-8 (αν κάνω λάθος διορθώστε), οπότε έχουν το πλεονέκτημα να διαβάζονται από παντού. Το 2 το έχουν όλες οι γλώσσες (εκτός από τις κακογραμμένες ή ειδικού σκοπού βλέπε ΓΛΩΣΣΑ του σχολείου, που για μένα είναι και τα δυο..και κακογραμμένη ως ορισμός γλώσσας, γιατί ουδέποτε έδωσαν δικό τους περιβάλλον, ό,τι υπάρχει είναι βοήθημα τρίτων πάνω στο κακογραμμένο σχέδιο) αλλά όπως η Vb6 δεν το έχουν σε WIDE/Unicode χαρακτήρες (δεν είναι το ίδιο), αλλά μόνο σε 8bit (ANSI/ASCII). (Η Μ2000 αν και γράφτηκε με Vb6 έχει αρχεία Unicode σειριακά, και μπορεί να φορτώσει αρχεία άμεσα σε UTF-8, UTF-16LE, UTF-16BE, ANSI με αυτόματη αναγνώριση) Ένας 4ος τρόπος που δεν αναφέρω που είναι η βάση για όλα τα παραπάνω είναι τα δυαδικά αρχεία. Δηλαδή αρχεία που τα διαβάζουμε σαν μνήμη! (Αυτά έχουν εξαιρεθεί από την Μ2000, αν και εσωτερικά τα χρησιμοποιεί). Εκεί ένας ακέραιος θα γραφτεί όπως και στη μνήμη, όσα bytes είναι, ή ένας πραγματικός επίσης το ίδιο. Ο μόνος τρόπος να διαβαστεί ένα τέτοιο αρχείο (δεν υπάρχουν headers/captions (επικεφαλίδες/προσδιορισμοί) στα στοιχεία, είναι το πρόγραμμα που το γνωρίζει, που το φτιάχνει, ή και που το διαβάζει. Όλα σχετίζονται με την θέση που έχουν και τα γνωρίζει το πρόγραμμα που τα γράφει και τα διαβάζει. Δυαδικό αρχείο είναι και το EXE, αλλά και το JPG.
Giorgos65ert Δημοσ. 6 Φεβρουαρίου 2016 Δημοσ. 6 Φεβρουαρίου 2016 Άνοιξες μεγάλο θέμα με το αρχεία! Πρέπει όμως να ξέρει να χειρίζεται αρχεία! Γενικά όταν μιλάμε για γλώσσα και χρήση αρχείων έχουμε να κάνουμε με τρία πράγματα: 1. Πώς κοιτάμε αν υπάρχει ένα αρχείο, Πώς ξέρουμε ποιος είναι ο τρέχον φάκελος και πώς τον αλλάζουμε. Πως κοιτάμε αν υπάρχει φάκελος, πώς δημιουργούμε. 2. Πώς γράφουμε σε ένα αρχείο χαρακτήρων, με ASCII και πώς με άλλη κωδικοποίηση, και πως διαβάζουμε ανάλογα. Πως γράφουμε/διαβάζουμε αρχείο τυχαίας προσπέλασης σταθερού πλάτους εγγραφής. 3. Πως χρησιμοποιώ έτοιμα αντικείμενα, π.χ. ADO ή βιβλιοθήκες για Βάσεις δεδομένων (δηλαδή αντί να καταφύγουμε σε αρχεία πάμε σε βάσεις δεδομένων). Οπωσδήποτε το 1 χρειάζεται είτε πάμε στο 2 είτε στο 3 Και οι τρεις ενότητες είναι σχετικές με το σύστημα και τη γλώσσα. Για το 3 πρέπει η γλώσσα να μπορεί να χρησιμοποιεί εξωτερικά dll ή COM αντικείμενα (που και αυτά dlll είναι στο βάθος). Τα xml και json γράφουν σε utf-8 (αν κάνω λάθος διορθώστε), οπότε έχουν το πλεονέκτημα να διαβάζονται από παντού. Το 2 το έχουν όλες οι γλώσσες (εκτός από τις κακογραμμένες ή ειδικού σκοπού βλέπε ΓΛΩΣΣΑ του σχολείου, που για μένα είναι και τα δυο..και κακογραμμένη ως ορισμός γλώσσας, γιατί ουδέποτε έδωσαν δικό τους περιβάλλον, ό,τι υπάρχει είναι βοήθημα τρίτων πάνω στο κακογραμμένο σχέδιο) αλλά όπως η Vb6 δεν το έχουν σε WIDE/Unicode χαρακτήρες (δεν είναι το ίδιο), αλλά μόνο σε 8bit (ANSI/ASCII). (Η Μ2000 αν και γράφτηκε με Vb6 έχει αρχεία Unicode σειριακά, και μπορεί να φορτώσει αρχεία άμεσα σε UTF-8, UTF-16LE, UTF-16BE, ANSI με αυτόματη αναγνώριση) Ένας 4ος τρόπος που δεν αναφέρω που είναι η βάση για όλα τα παραπάνω είναι τα δυαδικά αρχεία. Δηλαδή αρχεία που τα διαβάζουμε σαν μνήμη! (Αυτά έχουν εξαιρεθεί από την Μ2000, αν και εσωτερικά τα χρησιμοποιεί). Εκεί ένας ακέραιος θα γραφτεί όπως και στη μνήμη, όσα bytes είναι, ή ένας πραγματικός επίσης το ίδιο. Ο μόνος τρόπος να διαβαστεί ένα τέτοιο αρχείο (δεν υπάρχουν headers/captions (επικεφαλίδες/προσδιορισμοί) στα στοιχεία, είναι το πρόγραμμα που το γνωρίζει, που το φτιάχνει, ή και που το διαβάζει. Όλα σχετίζονται με την θέση που έχουν και τα γνωρίζει το πρόγραμμα που τα γράφει και τα διαβάζει. Δυαδικό αρχείο είναι και το EXE, αλλά και το JPG. Ένταξη τώρα δεν νομίζω να είναι και τόσο τραγικό το θέμα με τα αρχεία, νομίζω οτι αν κάτσει και ασχοληθεί με τα έτοιμα πράγματα της C# όπως IO.File,FileStream... θα τα δει στην πορεία αυτά. [Offtopic] Ερώτηση: Η ΓΛΏΣΣΑ γίνετε να διαβάζει αρχεία? Επίσης γιατί είναι κακογραμμένη? αν είναι κακογραμμένη γιατί την χρησιμοποιούν τα σχολειά και όχι VB6 και ανώτερη? [/Offtopic]
παπι Δημοσ. 6 Φεβρουαρίου 2016 Δημοσ. 6 Φεβρουαρίου 2016 Επισης πειτε μου αν εχετε καποια αλλη ιδεα για καποιο χαζο-προγραμμα για να πειραματιζομαι στην C#. Θα σας ειμαι υποχρεος Ευχαριστω ! https://msdn.microsoft.com/en-us/library/x53a06bb.aspx εδω εισαι. Αν δεις τι κανουν αυτα, θα μαθεις αρκετα και διαφορα.
defacer Δημοσ. 6 Φεβρουαρίου 2016 Δημοσ. 6 Φεβρουαρίου 2016 Κρίμα το thread του παιδιού ε; Η ερωτηση μου ειναι η εξης. Και εγω δεν ηθελα να μπει ο ιδιος κωδικας 4 φορες, αλλα οτι αλλο και να εκανα δεν δουλευε. Αν εβαζα τον κωδικα στο τελος του while, τον εκτελουσε παντα. Ακομα κι οταν δεν επρεπε ρωτουσε αν θελω να συνεχισω. Υπάρχει μόνο μία περίπτωση που δε θέλεις να γίνει η ερώτηση, αυτή είναι όταν σου δώσουν είσοδο που δεν αντιστοιχεί σε υποστηριζόμενη πράξη.Ο προφανής άμεσος τρόπος να το διορθώσεις αυτό είναι με την continue; η οποία σε επιστρέφει αμέσως στην αρχή του loop. Επομένως κάνεις κάτι του στυλ while { ... if (πρόσθεση) { ... } elseif (αφαίρεση) { ... } ... else { δεν ξέρω τι μου λες; continue; } θέλεις να συνεχίσεις; } και το πρόβλημα λύνεται σε πρώτη φάση και είσαι DRY. Το δευτερο μερος που ειπες δεν το καταλαβα πολυ. Τι θα αλλαξει αν δηλαδη βαλω το (operation == Operations.Multiplication) ?? Αρκετά πράγματα τα οποία δεν είναι προφανή σε σένα αυτή τη στιγμή. 1. Ο κώδικας θα διαβάζεται πιο εύκολα. Ένα ζητούμενο στη φάση που είσαι είναι να φτάσεις τον κώδικα να είναι ωραίος και ευανάγνωστος σε σημείο που βλέποντας το πριν/μετά να σκέφτεσαι α) ότι κατανοείς πλήρως το μετά και τώρα που το είδες μια φορά απο δω και πέρα το γράφεις έτσι και στον ύπνο σου και β) τι αηδία ήταν το πριν και πώς είναι ποτέ δυνατόν να σου φαινόταν καλό. Αν θέλεις να εξελιχθείς και να φτάσεις υψηλά επίπεδα αυτή είναι μια διαδικασία που θα πρέπει να την περάσεις αμέτρητες φορές, οπότε ξεκίνα από τώρα. Γι' αυτό σου είπα κάνε αυτό και το άλλο και δώστα εδώ να συγκρίνουμε. Ίσως να μη καταλαβαίνεις τώρα γιατί σου λέω να το κάνεις αυτό (θα σε ανάγκαζα να το κάνεις αν αυτό ήταν μάθημα) αλλά αν δεν το κάνεις όσες γνώσεις και να καταφέρεις να αποκτήσεις, πάντα θα είσαι "γκασμάς". 2. Παρεμπιπτόντως, αυτό θα σου λύσει μετά από λίγες επαναλήψεις και το ζήτημα "έβαλα σχόλια για να καταλαβαίνω". Αν ένα τόσο απλό πρόγραμμα δεν είναι άμεσα κατανοητό το τι κάνει, πάει να πει ότι έχει περιθώριο να γραφτεί καλύτερα. Αυτό το ξέρεις ήδη, απλά ίσως δεν έκανες τη σύνδεση με τα σχόλια. 3. Είναι μια συνήθεια που πρέπει να αποκτήσεις. Σε ένα τόσο απλό πρόγραμμα μπορεί να κάνεις τη δουλειά σου εξίσου και με μπακαλιές, σε κάτι πιο σύνθετο you never had a chance αν προσπαθήσεις. Απλά θα καταλήξεις να μαζοχίζεσαι αμέτρητες ώρες για να κάνεις ένα πρόγραμμα που φτύνεις αίμα για να του κάνεις αργότερα κάποια μετατροπή. 4. Κάνοντας αυτή τη μετατροπή θα είσαι εξαναγκασμένος να χειριστείς την περίπτωση "λάθος είσοδος" αμέσως μετά τη λάθος είσοδο, δηλαδή όσο πιο κοντά στο πρόβλημα είναι δυνατόν. Για παράδειγμα, το continue θα πάει εκεί ψηλά πολύ κοντά στην αρχή του loop, οπότε για όλο το υπόλοιπο του loop όσο μεγάλο κι αν είναι αυτό ο αναγνώστης ξέρει ότι τώρα έχουμε ένα operation που είναι σωστό και δεν υπάρχει καμία άλλη περίπτωση να εξετάσουμε -- ενώ όπως το έχεις τώρα, για να μου λυθεί η απορία "και τι γίνεται αν ο χρήστης δώσει βλακείες" πρέπει να διαβάζω μέχρι το τέλος του loop έχοντας υπόψη μη μου ξεφύγει τίποτα που θα μπορούσε να έχει σημασία. Και πάλι, σε ένα τόσο απλό πρόγραμμα η διαφορά δεν είναι μεγάλη αλλά είναι μια συνήθεια που πρέπει να αποκτήσεις γιατί σε πιο σύνθετα προγράμματα χάνεται η μπάλα. Και σίγουρα άλλα πράγματα που δε μου προκύπτουν αυτή τη στιγμή, αλλά νομίζω καταλαβαίνεις ήδη το πνεύμα. Ορέ Defacer όλο με μαλώνεις! Ορίστε για απλότητα: Στη Μ2000 η απάντηση είναι αυτή...και δουλεύει και με επιστροφή λάθους! Μετα συγχωρήσεως, χέστηκα πώς είναι στη M2000. Κάποιος έχει κάνει ήδη ένα topic για τη M2000, δεν το ποστάρεις εκεί καλύτερα; Επίσης, άμα είναι να μου έχει κάποιος μια έτοιμη function που κάνει μια δουλεία τότε α) ξέρω και γω να την καλέσω και β) είμαι αναγκασμένος να υποστώ τις όποιες συνέπειες των επιλογών του συγγραφέα της.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα