FrAcTaL-gR Δημοσ. 18 Μαρτίου 2008 Δημοσ. 18 Μαρτίου 2008 Χρησιμοποιώ ενα διπλό βρόχο for για να διατρέξω τα στοιχεία ενός πίνακα 2 διαστάσεων. Μόλις βρώ το στοιχείο (που εκ των προτέρων είναι γνωστό οτι υπάρχει) θέλω να ελέγξω με μια if αν ισχύει μια συνθήκη για το στοιχείο αυτό. Αν η συνθήκη είναι αληθής θέλω να εκτελεστούν κάποιες εντολές, αλλιώς θέλω να βγώ άμεσα από το διπλό βρόχο. Αν ήταν μονός ο βρόχος , θα έβαζα μια εντολή break και θα καθάριζα. Τώρα με το διπλό βρόχο έχω μπερδευτεί λίγο. Χρειάζονται 2 εντολές break, και πως αυτές θα τοποθετηθούν στον κώδικα; Ακολουθεί ο κώδικας > int i, j; for ( i = 0; i < κ; i++ ) for ( j = 0; j < κ; j++ ) if ( συνθήκη ) { εντολές }
Moderators Praetorian Δημοσ. 18 Μαρτίου 2008 Moderators Δημοσ. 18 Μαρτίου 2008 Πιθανοί τρόποι > int i, j; for ( i = 0; i < κ; i++ ) { for ( j = 0; j < κ; j++ ) { if ( συνθήκη ) { εντολές } else { i = k; break; } } } ή > int i, j; bool exit_loop = false; for ( i = 0; i < κ; i++ ) { for ( j = 0; j < κ; j++ ) { if ( συνθήκη ) { εντολές } else { exit_loop = true; break; } } if(exit_loop) { break; } }
FrAcTaL-gR Δημοσ. 18 Μαρτίου 2008 Μέλος Δημοσ. 18 Μαρτίου 2008 σε ευχαριστώ φίλε μου για την άμεση απάντηση, αλλά διαπίστωσα οτι δεν διατύπωσα με ακρίβεια τις προθέσεις μου (αρχάριος βλέπεις). Λοιπόν, μόλις βρώ το στοιχείο (που εκ των προτέρων είναι γνωστό οτι υπάρχει) θέλω να ελέγξω με μια if αν ισχύει μια συνθήκη για το στοιχείο αυτό. Αν η συνθήκη είναι αληθής θέλω να εκτελεστούν κάποιες εντολές και επιπλέον να βγω άμεσα από το διπλό βρόχο, αλλιώς θέλω να βγώ άμεσα από το διπλό βρόχο.
antonl Δημοσ. 18 Μαρτίου 2008 Δημοσ. 18 Μαρτίου 2008 Αλλάζοντας λίγο τον κώδικα του Praetorian: > int i, j; for ( i = 0; i < κ; i++ ) { for ( j = 0; j < κ; j++ ) { if ( στοιχείο ) { if ( συνθήκη ) { εντολές } i = k; break; } } } > int i, j; bool exit_loop = false; for ( i = 0; i < κ; i++ ) { for ( j = 0; j < κ; j++ ) { if ( στοιχείο ) { if ( συνθήκη ) { εντολές } exit_loop = true; break; } } if(exit_loop) { break; } }
FrAcTaL-gR Δημοσ. 18 Μαρτίου 2008 Μέλος Δημοσ. 18 Μαρτίου 2008 τελικά βρήκα την άκρη, χρησιμοποιώντας την ιδέα σου Praetorian. ο κώδικας είναι κάπως έτσι. > int i, j; for ( i = 0; i < κ; i++ ) { for ( j = 0; j < κ; j++ ) { if ( συνθήκη ) { εντολές i = k; j = k; } } } ευχαριστώ φίλε ave cesar edit: ευχαριστώ και τον φίλο antonl για το ενδιαφέρον
alkisg Δημοσ. 18 Μαρτίου 2008 Δημοσ. 18 Μαρτίου 2008 Το να αλλάζεις τους μετρητές για να τερματίσει μια επανάληψη δεν είναι σωστός τρόπος, οδηγεί σε ακατανόητο κώδικα. Ή χρησιμοποιήσε την εντολή do, ή την εντολή while, ή βάλε διπλή συνθήκη στις for: for ( j = 0; j < κ && !done; j++ ) όπου το done θα γίνεται true όταν ισχύει η συνθήκη τερματισμού που θέλεις.
FrAcTaL-gR Δημοσ. 18 Μαρτίου 2008 Μέλος Δημοσ. 18 Μαρτίου 2008 Ενδιαφέρουσα η παρατήρηση και τη σημείωσα, ευχαριστώ. Εξ' αρχής σκεφτόμουν να χρησιμοποιήσω 2 while, ένθετες, αλλά είμαι περισσότερο εξοικιωμένος με τη for. Πάντως όλος ο παραπάνω κώδικας αποτελεί μια συνάρτηση , οπότε με τη χρήση κατάλληλων σχολίων, δεν θα υπάρξει πρόβλημα ανάγνωσης του από τρίτους.
georgemarios Δημοσ. 19 Μαρτίου 2008 Δημοσ. 19 Μαρτίου 2008 κοιτα, ο αλκης εχει δικιο αμα συνηθισεις να κανεις "μπακαλιες", ο κωδικας σου συντομα θα γίνει κωλος εδω αυτο γίνεται ακομα και αν προσπαθεις να τα κανεις όλα σωστα....
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.