BTSGeo Δημοσ. 22 Νοεμβρίου 2012 Μέλος Δημοσ. 22 Νοεμβρίου 2012 οχι δεν ζητας καθόλου πολλά και ελεγα πως το κανει πως το κανει......... χαχα νομιζα οτι εκανε print screen ή κατι τετοιο και λεω δε μπορεί . Ιδού λοιπον το προβλημα σε διαμορφωμενη μορφη : >i=0; while (board[i]!=90) { int zaria; zaria=1+rand()%6; printf("\n i zaria einai: %d",zaria); dice_counter++; printf("\n Ari8mos ripsis No: %d",dice_counter); board[i]='_'; int n; n=artios(i); /*artia grammi*/ if (n==1) { /* kai o deikths den exei alla3ei seira me thn zaria */ if ((artios(i+zaria))== (artios(i))) { i+=zaria; } else { /* kai o deikths exei alla3ei seira me thn zaria */ i+=zaria; i=replace(i); } } /* periti grammi*/ else { /* kai o deikths den exei alla3ei seira me thn zaria */ if ((artios(i+zaria))== (artios(i))) { i-=zaria; } /* kai o deikths exei alla3ei seira me thn zaria */ else { i-=zaria; if (i>99) i=99-(i-99); else {i+=20;} replace(i); } } int flag=0; if (board[i]=='l') { i=i+10; flag=1; } else if (board[i]=='L') { i=i+20; flag=2; } else if (board[i]=='s') { i=i-10; flag=3; } else if (board[i]=='S') { i=i-20; flag=4; } board[i]='*'; int a; printf("\n"); for (a=0;a<100;a++) { printf(" %c",board[a]); if (a%10==9) printf("\n"); } system("pause"); if (flag==1) printf("type of action: ascend because of l\n"); else if (flag==2) printf("type of action: ascend because of L\n"); else if (flag==3) printf("type of action: descend because of s\n"); else if (flag==4) printf("type of action: descend because of S\n"); } printf("\n YOU WIN!!!!!!"); system("pause"); } int artios (int i) { if ((i/10)%2==0) return 1; else { return 0;} } int replace(int i) { return (i/10)*10+9-i%10; }
imitheos Δημοσ. 22 Νοεμβρίου 2012 Δημοσ. 22 Νοεμβρίου 2012 Ωραία. Και μετά από ένα πέρασμα από ένα indenter / beautifier όπως το indentonline.net προκύπτει το παρακάτω. > int main(void) { i = 0; while (board[i] != 90) { int zaria; zaria = 1 + rand() % 6; printf("n i zaria einai: %d", zaria); dice_counter++; printf("n Ari8mos ripsis No: %d", dice_counter); board[i] = '_'; int n; n = artios(i); /* artia grammi */ if (n == 1) { /* kai o deikths den exei alla3ei seira me thn zaria */ if ((artios(i + zaria)) == (artios(i))) { i += zaria; } else { /* kai o deikths exei alla3ei seira me thn zaria */ i += zaria; i = replace(i); } } /* periti grammi */ else { /* kai o deikths den exei alla3ei seira me thn zaria */ if ((artios(i + zaria)) == (artios(i))) { i -= zaria; } /* kai o deikths exei alla3ei seira me thn zaria */ else { i -= zaria; if (i > 99) i = 99 - (i - 99); else { i += 20; } replace(i); } } int flag = 0; if (board[i] == 'l') { i = i + 10; flag = 1; } else if (board[i] == 'L') { i = i + 20; flag = 2; } else if (board[i] == 's') { i = i - 10; flag = 3; } else if (board[i] == 'S') { i = i - 20; flag = 4; } board[i] = '*'; int a; printf("n"); for (a = 0; a < 100; a++) { printf(" %c", board[a]); if (a % 10 == 9) printf("n"); } system("pause"); if (flag == 1) printf("type of action: ascend because of ln"); else if (flag == 2) printf("type of action: ascend because of Ln"); else if (flag == 3) printf("type of action: descend because of sn"); else if (flag == 4) printf("type of action: descend because of Sn"); } printf("n YOU WIN!!!!!!"); system("pause"); } int artios(int i) { if ((i / 10) % 2 == 0) return 1; else { return 0; } } int replace(int i) { return (i / 10) * 10 + 9 - i % 10; } Δεν έχω χρόνο αυτή τη στιγμή να το κοιτάξω αλλά θα είναι πιο εύκολο για όποιον προσπαθήσει. Με μια πρώτη ματιά βλέπω να λείπουν πράγματα όπως η δήλωση του i, του board, κτλ. Έχει και άλλο τμήμα ο κώδικας ?
Star_Light Δημοσ. 22 Νοεμβρίου 2012 Δημοσ. 22 Νοεμβρίου 2012 Για το identation που ειπαν μπορεις αντι του > ...... i-=zaria; if (i>99) i=99-(i-99); else {i+=20;} replace(i); .... να το κάνεις : > i-=zaria; if (i>99) i=99-(i-99); else i+=20; replace(i); Αν στο σωμα της if εχεις μια εντολη προς εκτέλεση δεν χρειάζονται braces... { ..... } . > if( x >= 18 ) [b](A)[/b] puts("Ενήλικος"); if( x >=18) { puts("Ενηλικος"); } [b]([/b] Προτιμητέο το (Α) απο το (Β) .
nilosgr Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 Κακιά (κάκιστη) συνήθεια να παραλείπεις τις αγκύλες σε if, else, for, while. Γιατί σε περίπτωση που θες να προσθέσεις κι άλλη γραμμή (πχ ένα printf() για debug) υπάρχει περίπτωση να το βάλεις πρώτο πρώτο στο body και να ξεχάσεις τις αγκύλες και να "χαλάσεις" το loop (ή την if). Το έχω πάθει και σας αποτρέπω απ το να το κάνετε...!! >if (x == 2) puts("είναι 2!"); else puts("θα το κάνω να είναι 7."); x = 7; //είναι εκτός του else και θα εκτελείται πάντα! printf("%d", x);
imitheos Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 Κακιά (κάκιστη) συνήθεια να παραλείπεις τις αγκύλες σε if, else, for, while. Γιατί σε περίπτωση που θες να προσθέσεις κι άλλη γραμμή (πχ ένα printf() για debug) υπάρχει περίπτωση να το βάλεις πρώτο πρώτο στο body και να ξεχάσεις τις αγκύλες και να χαλάσεις" το loop (ή την if). Το έχω πάθει και σας αποτρέπω απ το να το κάνετε...!! Όταν πάει κάποιος να προσθέσει την γραμμή δεν πέφτει το μάτι του κατευθείαν στο ότι δεν έχει αγκύλες και να τις βάλει ? Ενώ μου έχει ξεφύγει πολλές φορές κάτι και να βρίζω μετά πώς δεν το είδα, ποτέ δεν μου έχει συμβεί σε τέτοιο θέμα με αγκύλη. Είναι βέβαια πιο πολύ θέμα προσωπικού στυλ αλλά πιστεύω πως σε απλές εκφράσεις, ειδικά αν υπάρχουν πολλά branch, οι πολλές αγκύλες κάνουν πιο δυσανάγνωστο τον κώδικα. > int artios(int i) { if ((i / 10) % 2 == 0) return 1; else { return 0; } } Πιο κακό θεωρώ την έλλειψη συνέπειας όπως φαίνεται στην παραπάνω συνάρτηση. Είθισται όταν έστω και ένα branch έχει αγκύλες, να μπαίνουν και στα υπόλοιπα ακόμη και αν έχουν μόνο μία εντολή (εδώ βέβαια όλα τα branch έχουν μία εντολή οπότε μπορούσαν να παραληφθούν οι αγκύλες από το else και να έχουμε πάλι συνέπεια). @OP: Μια και ανέφερα την συνάρτηση, εδώ λες "αν η έκφραση του if είναι αληθής (δηλαδή ισούται με το 1), τότε επίστρεψε 1 αλλιώς επίστρεψε 0" οπότε μπορείς να παραλείψεις εντελώς το if και να έχεις απλά "return ((i / 10) % 2 == 0)". Επίσης, από περιέργεια γιατί διαιρείς με το 10 ?
defacer Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 @OP: Μια και ανέφερα την συνάρτηση, εδώ λες "αν η έκφραση του if είναι αληθής (δηλαδή ισούται με το 1), τότε επίστρεψε 1 αλλιώς επίστρεψε 0" οπότε μπορείς να παραλείψεις εντελώς το if και να έχεις απλά "return ((i / 10) % 2 == 0)". Επίσης, από περιέργεια γιατί διαιρείς με το 10 ? Η οποία διαίρεση με το δέκα είναι μάλιστα και bug?
albNik Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 (επεξεργασμένο) Η οποία διαίρεση με το δέκα είναι μάλιστα και bug? Μάλλον ευνοεί αν είναι άρτιο το προτελευταίο ψηφίο. 0 μέχρι 9 , 20 μέχρι 29 , 40 μέχρι 49... if (i%20<10) Επεξ/σία 23 Νοεμβρίου 2012 από albNik
migf1 Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 Σε τι έτος είστε φίλε BSTGeo (και σε ποια σχολή) ; Η άσκηση είναι ολίγον... σαδιστική. Με πήρε περισσότερη από 1 ώρα αλλά δείχνει να λειτουργεί σωστά, με board οποιασδήποτε διάταξης και μεγέθους, αλλάζοντας τα NROWS και NCOLS (διατηρώ όμως επιφυλάξεις γιατί δεν έκανα εξαντλητικούς ελέγχους). Αποφάσισα να δώσω κώδικα, επειδή είδα πως έδωσες κι εσύ. Θα ήταν ευχής έργο να μην παραδώσετε τον δικό μου κώδικα (δεν ξέρω καν αν σκάει σε τίποτα περίεργες περιπτώσεις) αλλά απλώς να τον δείτε σαν βοήθημα για να γράψετε δικό σας. Οι περισσότερες από τις boolean μεταβλητές στην main() χρησιμοποιούνται κυρίως για πιο αναλυτική έξοδο (αλλά όχι μόνο). Δείγμα εξόδου... Κώδικας & Πλήρης έξοδος: http://ideone.com/u3VMw4 Μόνο κώδικας... > #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <stdbool.h> // C99 #define NROWS 10 #define NCOLS 10 #define BOARD_SIZE (NROWS * NCOLS) #define CHAR_IS_SPECIAL(c) ( NULL != strchr("lLsS", (c)) ) #define IS_EVEN(n) ( 0 == (n) % 2 ) #define ROW_(n) ( (n) / NCOLS ) #define COL_(n) ( (n) % NCOLS ) // portable altenative to Windows' system("pause") // ... to be used with fgets() instead of scanf() #define pressENTER() \ do{ \ int mYcHAr; \ printf("\npress ENTER..."); \ while ( (mYcHAr=getchar()) != '\n' && mYcHAr != EOF ) \ ; \ }while(0) /* ---------------------------------------------------------- */ int snake_it( int pos, int ncols ) { return ROW_(pos) * ncols + (ncols - COL_(pos)) - 1; } /* ---------------------------------------------------------- */ int pos_adjust_onOverflow( int pos, int lastPos ) { int lastRow = ROW_(lastPos); if ( IS_EVEN(lastRow) && pos > lastPos ) { int diff = pos - lastPos; printf( "*** %d overflowed by %d squares ***\n", pos, diff ); pos = lastPos - diff; printf( "*** auto-ajusted to %d (%d,%d) ***\n", pos, ROW_(pos), COL_(pos) ); } else if ( !IS_EVEN(lastRow) && pos > lastPos + (NCOLS-1) ) { int diff = pos - ( lastPos + (NCOLS-1) ); printf( "*** %d overflowed by %d squares ***\n", pos, diff ); pos = lastPos + diff; printf( "*** auto-ajusted to %d (%d,%d) ***\n", pos, ROW_(pos), COL_(pos) ); } return pos; } /* ---------------------------------------------------------- */ void board_print( char board[], int nrows, int ncols, int posBoard[] ) { int i=0, j=0; if ( !board || nrows< 1 || ncols < 1 || !posBoard ) return; // column labels printf( "\n " ); for (j=0; j < ncols; j++) printf( "%d ", j ); putchar('\n'); // row labels for (i=0; i < nrows; i++) { // normal board printf( "%d ", i ); for (j=0; j < ncols; j++ ) printf( "%c ", board[i * ncols + j] ); // positional board putchar('\t'); for (j=0; j < ncols; j++ ) { int n = i * ncols + j; if ( !IS_EVEN(i) && -1 != posBoard[n] ) posBoard[n] = snake_it(n, ncols); printf( "%02d ", posBoard[n]); } putchar('\n'); } } /* ---------------------------------------------------------- */ int main( void ) { int posBoard[bOARD_SIZE] = {0}; for (int i=0; i < BOARD_SIZE; i++) posBoard[i] = i; char board[bOARD_SIZE] = { '*','.','.','l','.','.','.','L','.','.', '.','.','.','.','s','l','.','.','.','.', '.','.','S','.','.','.','.','.','.','S', 'L','.','.','s','.','.','L','.','.','.', '.','.','.','.','l','.','.','S','.','.', '.','.','.','.','.','.','.','.','.','.', '.','.','S','.','.','l','.','s','.','L', '.','.','.','L','.','.','.','.','S','.', '.','l','.','.','.','.','.','.','.','.', '.','.','S','.','.','.','.','S','.','.' }; const int lastPos = IS_EVEN(ROW_(BOARD_SIZE-1)) ? BOARD_SIZE-1 : BOARD_SIZE - NCOLS; int pos = 0, posWas = 0; int rolled = 0, round = 0; bool wasSpecial = false, isSpecial = false; int temp; srand( time(NULL) ); while ( pos != lastPos ) { posWas = pos; // remember previous pos if ( !isSpecial ) { printf( "\nROUND %d _________________\n", ++round ); printf( "was at : (%d,%d) %d (%d)\n", ROW_(posWas), COL_(posWas), IS_EVEN( ROW_(posWas) ) ? posWas : (temp = snake_it(posWas, NCOLS)), posWas ); } // handle special characters wasSpecial = CHAR_IS_SPECIAL( board[pos] ); if ( !wasSpecial ) { rolled = 1 + rand() % 6; printf( "rolled : %d\n", rolled ); } else { if ( 'l' == board[pos] ) // 1 square down rolled = NCOLS; else if ( 'L' == board[pos] ) // 2 squares down rolled = 2 * NCOLS; else if ( 's' == board[pos] ) // 1 square up rolled = -NCOLS; else if ( 'S' == board[pos] ) // 2 squares up rolled = -2 * NCOLS; } // calc the new position (this is way too messy!) if ( wasSpecial ) { pos += rolled; } else { if ( IS_EVEN( ROW_(posWas) ) ) { pos = COL_(posWas) + rolled < NCOLS ? posWas + rolled : ROW_(posWas) == ROW_(lastPos) ? posWas + rolled : snake_it( posWas + rolled, NCOLS ); } else // !IS_EVEN( ROW_(posWas) ) { int diff = COL_(posWas) - rolled; pos = diff >= 0 ? posWas - rolled : posWas + (NCOLS-1) - COL_(posWas) + (-diff); } } pos = pos_adjust_onOverflow( pos, lastPos ); // remember whether new pos contains a special char or not isSpecial = CHAR_IS_SPECIAL( board[pos] ); // update board contents and print it if ( !wasSpecial ) { board[posWas] = '.'; posBoard[posWas] = posWas; } printf( "moved to: (%d,%d) %d (%d), found: %c\n", ROW_(pos), COL_(pos), IS_EVEN( ROW_(pos) ) ? pos : (temp = snake_it(pos, NCOLS)), pos, board[pos] ); if ( !isSpecial ) { board[pos] = '*'; posBoard[pos] = -1; board_print( board, NROWS, NCOLS, posBoard ); pressENTER(); } } puts( "CONGRATS, YOU MADE IT!" ); pressENTER(); exit(0); } Σκέφτηκα πως θα με έπαιρνε λιγότερη ώρα να το φτιάξω μόνος μου παρά να προσπαθήσω να καταλάβω την λογική του δικού σου κώδικα. Κι αυτό διότι η άσκηση έχει πολλά tricky σημεία. Κάποιος με περισσότερη υπομονή ενδεχομένως να μπορέσει να διορθώσει ορισμένα messy σημεία του κώδικά μου, ιδανικά αντικαθιστώντας πολλά από τα if-else με κάποια αριθμητική πράξη (ή πράξεις/τύπο). Αυτή η εναλλαγή βηματισμού γραμμή παρά γραμμή ήταν πολύ σπαστική! Με δυσκόλεψε επίσης και στην διαχείριση της υπερχείλισης στην τελευταία γραμμή (η οποία θέλει διαφορετική αντιμετώπιση ανάλογα με τον αν η τελευταία γραμμή του πίνακα είναι μονή ή ζυγή). UPDATE: Μικρο-αλλαγές + μπήκε στο ideone.com με πλήρη έξοδο. EDIT: Σε τι έτος είστε φίλε BSTGeo (και σε ποια σχολή) ; ... Με λίγο googling βρήκα πως η άσκηση αυτή έχει δοθεί από τον Βασίλη Δημακόπουλο, επίκουρο καθηγητή στο Πανεπιστήμιο Ιωαννίνων. Η πρόθεσή μου είναι να βοηθήσω μελλοντικούς επαγγελματίες του κλάδου. Σε καμία περίπτωση δεν επιθυμώ να αποτελέσω Δούρειο Ίππο για μη σωστή τους εκπαίδευση. Για αυτό σκοπεύω να ενημερώσω τον κο Δημακόπουλο για την ύπαρξη του κώδικα, ώστε να αποφευχθούν φαινόμενα κατά τα οποία κάποιο "έξυπνοι" θελήσουν να παραδώσουν την άσκηση με απλό copy & paste από εδώ. Επίσης, ο παραπάνω κώδικας είναι του ποδαριού, που σημαίνει αφενός ότι ενδέχεται να περιέχει bugs και αφετέρου πως σε αρκετά σημεία του είναι messy (δηλαδή ενδεχομένως να μπορεί να απολοποιηθεί σημαντικά). Καθώς επίσης πως ενδέχεται να περιέχει πράγματα που δεν τα έχετε διδαχθεί ακόμα. Επαναλαμβάνω πως τον ποστάρισα για να πάρτε κάποιες βασικές ιδέες για τις δικές σας υλοποιήσεις όχι για να τον παραδώσετε ως δικό σας. 1
BTSGeo Δημοσ. 23 Νοεμβρίου 2012 Μέλος Δημοσ. 23 Νοεμβρίου 2012 ευχαριστω πολυ για την προσπαθεια κατανόησης του κωδικα μου (που παρεμπιπτόντως δεν εχει βαλθει ολοκληρος... απαντηση στην ερώτηση του imitheos ) και την συμπαραστασή σας προς εμενα. Δηλώνω επίσης οτι δεν πρόκεται σε καμια περίπτωση να αντιγράψω κανενός τον κωδικα απλά διαβάζοντας τα ήδη ποσταρισμενα θα προσπαθήσω μιμουμενος εσας να διαμορφώσω τον δικο μου κώδικα ετσι ωστε να μπορεί να ανταποκρίνεται στα στανταρντ του προβληματος.... Εξαλλου για να αποφευχθουν τυχον παρεξηγήσεις προκειται να ποσταρω τον τελικό μου κωδικα στο forum.... Ειμαι πρώτο ετος στο Ημμυ.
Star_Light Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 EDIT: Με λίγο googling βρήκα πως η άσκηση αυτή έχει δοθεί από τον Βασίλη Δημακόπουλο, επίκουρο καθηγητή στο Πανεπιστήμιο Ιωαννίνων. Η πρόθεσή μου είναι να βοηθήσω μελλοντικούς επαγγελματίες του κλάδου. Σε καμία περίπτωση δεν επιθυμώ να αποτελέσω Δούρειο Ίππο για μη σωστή τους εκπαίδευση. Για αυτό σκοπεύω να ενημερώσω τον κο Δημακόπουλο για την ύπαρξη του κώδικα, ώστε να αποφευχθούν φαινόμενα κατά τα οποία κάποιο "έξυπνοι" θελήσουν να παραδώσουν την άσκηση με απλό copy & paste από εδώ. Επίσης, ο παραπάνω κώδικας είναι του ποδαριού, που σημαίνει αφενός ότι ενδέχεται να περιέχει bugs και αφετέρου πως σε αρκετά σημεία του είναι messy (δηλαδή ενδεχομένως να μπορεί να απολοποιηθεί σημαντικά). Καθώς επίσης πως ενδέχεται να περιέχει πράγματα που δεν τα έχετε διδαχθεί ακόμα. Επαναλαμβάνω πως τον ποστάρισα για να πάρτε κάποιες βασικές ιδέες για τις δικές σας υλοποιήσεις όχι για να τον παραδώσετε ως δικό σας. migf1 και αυτουσιο να τον πανε ακομη αλλαζοντας τα ονοματα των μεταβλητων κτλπ ο καθηγητης αμα δεν κοιμαται ορθιος θα το παρει πρέφα. Μπορει να θεωρησει οτι επεμβαινεις στην δουλεια του με το να του στειλεις email.... εξαρταται και πως θα το συνταξεις βεβαια..... @nilosgr σιγα την κακιστη τακτικη.... εγω βαζω στοιχημα οτι και καλο προγραμματισμο να ξερεις μπορει να σου ξεφυγει ενα ερωτηματικο και να κτυπησει ο comp ε δεν θα παθεις και τιποτα μετα να προσθεσεις ένα εκτος και αν έχει ωρολογιακη βομβα μεσα και καθε δευτερολεπτο ειναι πολυτιμο!!!!! Με αυτη την λογικη πριν γραψεις μια εντολη ξεκινάς με ενα ερωτηματικο για να εισαι σιγουρος οτι δεν θα το ξεχασεις στο τελος και δεν θα κτυπησει ο comp Οσο για αυτους που αντιγραφουν.... η αληθεια ειναι οτι εμενα δεν με ενδιαφερει και πολυ το τι κανουν... επειδη επηρεαζει τους ιδιους στο τελος χωρις να το καταλαβαινουν αλλα αν η κατασταση παει να ξεφυγει και το μισο τμημα πηρε πτυχιο με αντιγραφες τοτε χεσε μεσα... και το επιπεδο της σχολης πεφτει και γελανε οσοι δεν εχουν σπουδασει και έχουν ρατσισμο απεναντι στους πτυχιουχους. Ειδικα αυτοι που θα βγουν εξω και θα καυχηθουν οτι πηραν πτυχιο με αντιγραφη για μενα ειναι πανηγυριώτες , δινουν τροφη για κριτικη του επιπεδου αλλα και της επιλογης καποιου να σπουδασει.... δεν κανεις τετοια λαθη
nilosgr Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 Star_Light, αν ξεχάσεις το semi colon είναι syntax error και θα στο βρει κι ο compiler. Το fault intended instruction όμως πρέπει να το ανακαλύψεις εσύ
albNik Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 Εγώ στη C# βάζω αγκύλες μόνο αν είναι απαραίτητες. To Visual Studio για C# έχει αυτόματο indentation και δεν μπερδεύεσαι ποτέ.
migf1 Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 Όλα τα IDE και οι περισσότεροι programming editors παρέχουν auto-indentation, και όντως βοηθάει πολύ στο συγκεκριμένο. Δεν το έχουν όμως όλοι ενεργοποιημένο, ανάμεσά τους κι εγώ, μιας δυσκολεύει άλλα πράγματα... π.χ. προσωρινές συνειδητά non-indented (για να ξεχωρίζουν άμεσα) προσθήκες για debugging purposes. Σε κώδικες μικρών συναρτήσεων και με καθαρό μυαλό δεν αποτελεί και τόσο πρόβλημα, αλλά σε μεγάλες και με κούραση δεν είναι και τόσο δύσκολο να την πατήσει κανείς. Π.χ... το orginal... > ... while ( arrInt[right] >= pivotValue && left < right ) { // update stats stats->nIterations++; right--; } if ( left < right ) arrInt[left++] = arrInt[right]; while ( arrInt[left] <= pivotValue && left < right ) { // update stats stats->nIterations++; left++; } ... να αλλαχτεί ας πούμε σε ... > ... while ( arrInt[right] >= pivotValue && left < right ) { // update stats stats->nIterations++; right--; } if ( left < right ) arrInt[left++] = arrInt[right]; /* -> */ stats->nComparisons++; while ( arrInt[left] <= pivotValue && left < right ) { // update stats stats->nIterations++; left++; } ... ειδικά αν η προσθήκη της έξτρα γραμμής γίνεται με paste και πάνω από την υπάρχουσα του if (αντί για από κάτω που δείχνει το παράδειγμα)... > ... while ( arrInt[right] >= pivotValue && left < right ) { // update stats stats->nIterations++; right--; } if ( left < right ) // update stats /* -> */ stats->nComparisons++; arrInt[left++] = arrInt[right]; while ( arrInt[left] <= pivotValue && left < right ) { // update stats stats->nIterations++; left++; } ... Προσωπικά προσπαθώ να τις αποφεύγω όταν δεν χρειάζονται, και προφανώς την έχω πατήσει παραπάνω από 1 φορές Σε μεγάλες διακλαδώσεις προσπαθώ να τις βάζω πάντα. Μεγάλο σπάσιμο αποτελεί και η έλλειψη αγκίστρου ανοίγματος, στο παρακάτω στυλ γραφής, ειδικά όταν έχει μεγάλο nesting... > ... else if ( μακριά συνθήκη εδώ ) καμιά 10αριά γραμμές εδώ (με ή χωρίς σχόλια) } ... ή ακόμα χειρότερα, το ανάποδο... > ... else if ( μακριά συνθήκη εδώ ) { // μια μόνο γραμμή εδώ ... διότι περισσότεροι compilers σε αυτές τις περιπτώσεις δείχνουν το error σε κάποιο άγκιστρο ανοίγματος/κλεισίματος που θεωρούν un-matched, που μπορεί να είναι και 2-3 σελίδες πιο πάνω/κάτω ... Εξαλλου για να αποφευχθουν τυχον παρεξηγήσεις προκειται να ποσταρω τον τελικό μου κωδικα στο forum.... Ειμαι πρώτο ετος στο Ημμυ. Προσωπικά δεν το βρίσκω ούτε απαραίτητο ούτε αναγκαίο να δημοσιεύσεις τον τελικό σου κώδικα, φίλε BSTGeo. Η καθηγήτρια (και οι βοηθοί της) ενημερώθηκαν για τη ύπαρξη ενδεικτικής επίλυσης, αλλά και αυτό να μην είχε γίνει και πάλι δεν νομίζω πως χρειάζεται να ποστάρεις δημόσια τον τελικό σου κώδικα, τουλάχιστον όχι πριν την λήξη της προθεσμίας παράδοσης της άσκησης. @StarLight: Νομίζω δεν είναι σωστή προσέγγιση να χαρακτηρίζουμε ότι "κοιμούνται όρθιοι" όσοι καθηγητές δεν σκανάρουν τα φόρα για να δουν αν έχουν δημοσιευτεί ή όχι λύσεις στις ασκήσεις που έχουν δώσει. Οι περισσότεροι καθηγητές έχουν πολύ πιο ενδιαφέροντα κι εποικοδομητικά πράγματα να κάνουν, είτε αφορά τη δουλειά τους είτε τον όποιον ελεύθερο χρόνο τους
Star_Light Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 @migf1 ποιο φορουμ? Αν πανε λεω την ιδια λυση 20-30 ατομα θα το καταλαβει ο καθηγητης με το που θα δει τις λυσεις..... Αν δεν το καταλαβει ειτε σημαινει πως ειναι αλλου οπως ειπα και πιο πανω ή δεν κοιταξε καμια εργασια απο αυτες που έβαλε..... πραγματικα ειναι πολυ καλο τεστ για μενα ηταν αυτο παλιοτερα..... για να δω κατα ποσο ο καθηγητης ενδιαφερεται για τους μαθητες του ή οχι..... έγραφα επιτηδες κατι λαθος μεσα στα πολλα...... και αν το εβρισκε τοτε σημαινε πως οντως ενδιαφεροταν. Πιο ενδιαφεροντα και εποικοδομητικα πραγματα να κανει ενας καθηγητης απο το να ασχολειται με τους μαθητες του? τοτε ας αφησει το καθηγητιλικι και ας παει σε μια εταιρεια. Για μενα φιλε το γεματο προγραμμα των καθηγητων στα πανεπιστημια ειναι λαθος. Ας πανε να γινουν ερευνητες δεν γινεται και καθηγητης και ερευνητης ταυτοχρονα. Πρεπει να πρετοιμασεις καποιους ανθρωπους να βγουνε εξω να ειναι ετοιμοι για δουλεια οπως κανει η Αμερικη και κοιτα τι αναπτυξη - τεχνολογια και οικονομια εχει δεν γινεται επιτελους ολα να τα αφηνουμε στην τυχη σε αυτη την χωρα και να προσδοκουμε ξαφνικα στο "Α! Ειμαστε Ελληνες κάτι θα γινει στο τελος... ή εχουμε ικανοτητα να τουμπαρρυμε καταστασεις και θα τα καταφερουμε κ παλι!"
migf1 Δημοσ. 23 Νοεμβρίου 2012 Δημοσ. 23 Νοεμβρίου 2012 @migf1 ποιο φορουμ? Αν πανε λεω την ιδια λυση 20-30 ατομα θα το καταλαβει ο καθηγητης με το που θα δει τις λυσεις..... Αν δεν το καταλαβει ειτε σημαινει πως ειναι αλλου οπως ειπα και πιο πανω ή δεν κοιταξε καμια εργασια απο αυτες που έβαλε..... Α, αυτό εννοούσες; Ε τότε ναι, δεν το συζητάμε. πραγματικα ειναι πολυ καλο τεστ για μενα ηταν αυτο παλιοτερα..... για να δω κατα ποσο ο καθηγητης ενδιαφερεται για τους μαθητες του ή οχι..... έγραφα επιτηδες κατι λαθος μεσα στα πολλα...... και αν το εβρισκε τοτε σημαινε πως οντως ενδιαφεροταν. Συνήθως τις ασκήσεις τις ελέγχουν οι βοηθοί (αν μιλάμε για πανεπιστήμιο). Πιο ενδιαφεροντα και εποικοδομητικα πραγματα να κανει ενας καθηγητης απο το να ασχολειται με τους μαθητες του? τοτε ας αφησει το καθηγητιλικι και ας παει σε μια εταιρεια. Για μενα φιλε το γεματο προγραμμα των καθηγητων στα πανεπιστημια ειναι λαθος. Ας πανε να γινουν ερευνητες δεν γινεται και καθηγητης και ερευνητης ταυτοχρονα. Πρεπει να πρετοιμασεις καποιους ανθρωπους να βγουνε εξω να ειναι ετοιμη για δουλεια οπως κανει η Αμερικη και κοιτα τι αναπτυξη - τεχνολογια και οικονομια εχει δεν γινεται επιτελους ολα να τα αφηνουμε στην τυχη σε αυτη την χωρα και να προσδοκουμε ξαφνικα στο "Α! Ειμαστε Ελληνες κάτι θα γινει στο τελος... ή εχουμε ικανοτητα να τουμπαορυμε καταστασεις και θα τα καταφερουμε κ παλι!" Αυτό δεν είναι Ελληνικό, παντού έτσι γίνεται. Υπάρχουν διαβαθμίσεις στους καθηγητές όπως εδώ (βοηθοί, λέκτορες, επίκουροι, κλπ) με διαφορετικές αρμοδιότητες κι ευθύνες ο καθένας. Btw, οι με διαφορά σημαντικότερες τεχνολογικές καινοτομίες κατά κανόνα ανακαλύπτονται στις έρευνες και τα πανεπιστήμια.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα