migf1 Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Σωστός....!!!! Όχι και τόσο, στο 2ο σνίπετ κάνω κι εγώ 1 τζάμπα iteration... θέλει --i αντί για i--
Timonkaipumpa Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Λεπτομέρειες.. Το όλο παιχνίδι εδώ ήταν τα 3 - 4 λεπτά για να σκεφτεί κανείς για κάτι τόσο trivial μία λύση που να είναι μάγκικη με χρήση των ιδιοτήτων των επαναληπτικών δομών. Και τα snippets σου ήταν αρκετά ωραία!
gon1332 Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 float prod = 1.f; int i = 10; while (prod *= i, i-- != 1); printf( "%.15f\n", 1.f/prod ); EDIT: http://www.insomnia.gr/topic/515793-εχω-κολλησει-σε-μια-ασκηση-της-c/page-2#entry52939719 Σε αυτό το παράδειγμα, πρώτη φορά βλέπω την while να χρησιμοποιείται έτσι. Νόμιζα ότι μπορούσε να λάβει μόνο ένα statement. Πως δουλεύει το "," σε αυτή την περίπτωση;
Moderators Kercyn Δημοσ. 26 Ιανουαρίου 2014 Moderators Δημοσ. 26 Ιανουαρίου 2014 Σε αυτό το παράδειγμα, πρώτη φορά βλέπω την while να χρησιμοποιείται έτσι. Νόμιζα ότι μπορούσε να λάβει μόνο ένα statement. Πως δουλεύει το "," σε αυτή την περίπτωση; Σαν AND.
Ilias95 Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Δουλεύει ακριβώς όπως ο τελεστής &&; Δηλαδή αν αποτύχει η πρώτη σύγκριση πριν το κόμμα η δεύτερη έκφραση θα υπολογιστεί ή όχι;
gon1332 Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Διάβασα το wiki και αν το κατάλαβα καλά (κυρίως εδώ), πρέπει να δουλεύει όπως χρησιμοποιείται το κόμμα στο παράδειγμα του wiki με την if: if (y = f(x), y > x) { ... // statements involving x and y } Εδώ το prod δουλεύει σα βοηθητική μεταβλητή για να περάσουμε στο κυρίως μέρος το οποίο βρίσκεται μετά το comma seperator. while (prod *= i, i-- != 1); Ας με διορθώσει κάποιος αν δεν κατάλαβα καλά.
παπι Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Δουλεύει ακριβώς όπως ο τελεστής &&; Δηλαδή αν αποτύχει η πρώτη σύγκριση πριν το κόμμα η δεύτερη έκφραση θα υπολογιστεί ή όχι; καμια σχεση.
Ilias95 Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 καμια σχεση. Δηλαδή δεν ισχύει ότι δουλεύει σαν and όπως γράφτηκε παραπάνω; Γίνε πιο συγκεκριμένος.
geomagas Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Τα φώτα σου παπι! Κρατώ την αναπνοή μου εδώ πέρα!
παπι Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Ποια φωτα μου; Η while δεν εχει καποια "σπεσιαλ" συνταξη με , αρα; Αρα ψαχνουμε το τι κανει ο comma operator και βου α λα.
gon1332 Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Ποια φωτα μου; Η while δεν εχει καποια "σπεσιαλ" συνταξη με , αρα; Αρα ψαχνουμε το τι κανει ο comma operator και βου α λα. Άρα εκτελούνται με τη σειρά; Όπως και οι αρχικοποιήσεις σε ένα for loop;
παπι Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 "εκτελουνται" με την σειρα, και σου επιστρεφει το τελευταιο. Πχ τι εχουμε εδω; int i = (1,2,3); i = 3
migf1 Δημοσ. 27 Ιανουαρίου 2014 Δημοσ. 27 Ιανουαρίου 2014 Χμ, για να είμαι ειλικρινής δεν το περίμενα πως θα δημιουργούσε τόσες απορίες ο τελεστής , Αυτό που κάνει στο συγκεκριμένο σνίπετ είναι να υπολογίζει το εκάστοτε επιμέρους prod σε κάθε επανάληψη, χωρίς να επηρεάζει το boolean evaluation της συνθήκης του βρόχου. H τιμή του υπολογισμού, δηλαδή η τιμή του εκάστοτε επιμέρους prod, θα συμμετείχε ως boolean στη συνθήκη του βρόχου μόνο αν ο υπολογισμός ήταν ο τελευταίος όρος του τελεστή , Γενικώς, οι όροι του τελεστή , υπολογίζονται πάντα κανονικά αλλά ως boolean αξιολογείται μονάχα η τιμή του τελευταίου όρου (ή αν φύγουμε από τη λογική της συνθήκης, όλοι οι όροι υπολογίζονται αλλά ως τελική τιμή δίνεται πάντα ο υπολογισμός του τελευταίου όρου). ΥΓ. Ελπίζω να μη σας μπέρδεψα χειρότερα.
ZAKKWYLDE Δημοσ. 27 Ιανουαρίου 2014 Δημοσ. 27 Ιανουαρίου 2014 while (prod *= i, i-- != 1); Αν δεν κάνω λάθος το παραπάνω κάνει το εξής με τη σειρά: 1. υπολογίζει το prod*=1 2. υπολογίζει το i-- και το συγκρίνει με το 1 3. επιστρέφει τη τιμή της σύγκρισης για να δει αν θα συνεχίσει το loop. Κάπως αλλιώς θα γραφόταν έτσι: do { prod *= i; } while(i-- != 1);
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα