Arctic Δημοσ. 9 Φεβρουαρίου 2013 Share Δημοσ. 9 Φεβρουαρίου 2013 Καλησπέρα σας παιδιά, Θέλω να γεμίσω ένα μονοδιάστατο πίνακα 5 κελιών με αριθμούς τους αριθμούς 0,1,2,3,4(δηλαδή να μη υπάρχει σε δύο κελιά ίδιος αριθμός) Το κομμάτι του κώδικα είναι παρακάτω...μου εμφανίζει όμως συνέχεια τους ίδιους αριθμούς με την ίδια σειρά Τι μαλακία κάνω; #include <stdio.h> #include <time.h> int board[5],i,j,flag,temp; int main() { board[0]=rand()%4; for (i=1;i<=4;i++) { do { flag=0; temp=rand()%4; for (j=0;j==i;j++) { if (temp==board[j]) { flag=1; break; } } } while(flag==1); board[i]=temp; } for (i=0;i<=4;i++) { printf("%d\n",board[i]); } system ("PAUSE") } Ακόμη θέλω να εμφανίσω από δομή και δε εμφανίζει αυτό που έχω αποθηκεύσει, εμφανίζει αυτό στη συνημμένη εικόνα. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Technology fan Δημοσ. 9 Φεβρουαρίου 2013 Share Δημοσ. 9 Φεβρουαρίου 2013 βάλε το srand ( time(NULL) ); στην αρχή του προγράμματος... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Arctic Δημοσ. 9 Φεβρουαρίου 2013 Μέλος Share Δημοσ. 9 Φεβρουαρίου 2013 Το έβαλα και δουλεύει τυχαία. Ευχαριστώ Και πάλι όμως υπάρχουν διπλά στοιχεία... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Technology fan Δημοσ. 9 Φεβρουαρίου 2013 Share Δημοσ. 9 Φεβρουαρίου 2013 for (j=0;j==i;j++) μήπως πρέπει να είναι for (j=0;j<i;j++) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Arctic Δημοσ. 9 Φεβρουαρίου 2013 Μέλος Share Δημοσ. 9 Φεβρουαρίου 2013 Αυτό δε ισχύει έτσι κι αλλιώς; Tο i το ξεκινάω από 1 στο πρώτο βρόγχο και το j από 0 στο δεύτερο Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Technology fan Δημοσ. 9 Φεβρουαρίου 2013 Share Δημοσ. 9 Φεβρουαρίου 2013 Όχι δεν ισχύει το i είναι δείκτης που σου υποδηλώνει πόσα στοιχεία έχουν εισαχθεί ενώ το j σου υποδηλώνει πόσα πρέπει να κάνω έλεγχο για την εύρεση διπλοστοιχείων Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Arctic Δημοσ. 9 Φεβρουαρίου 2013 Μέλος Share Δημοσ. 9 Φεβρουαρίου 2013 Ναι αλλά j<i αφού το j=0 και i=1. Δε το τρέχει καθόλου Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Technology fan Δημοσ. 9 Φεβρουαρίου 2013 Share Δημοσ. 9 Φεβρουαρίου 2013 μου φαίνεται δε ξέρεις τι κάνει το for loop for (j=0;j<i;j++){ 'Kwdikas'} j=0, οσο j<i τρεξε το 'Kwdikas' και αύξησε το j κατα ένα. Αμά το αλλάξεις τι σφάλμα σου βγάζει? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Arctic Δημοσ. 9 Φεβρουαρίου 2013 Μέλος Share Δημοσ. 9 Φεβρουαρίου 2013 Καλά μεγάλη μαλακία-κόλλημα μου... Σορρυ Μετά τρέχει αλλά φαίνεται σαν να υπάρχει ατέρμων βρόγχος... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
nilosgr Δημοσ. 9 Φεβρουαρίου 2013 Share Δημοσ. 9 Φεβρουαρίου 2013 Το κανείς "λίγο ανάποδα" φίλε... Μια καλή ιδέα θα ήταν να γεμίζεις τον πίνακα με {0, 1, 2, 3, 4} και μετά να κάνει swap το κάθε στοιχείο με ένα άλλο τυχαίο. (κάπως έτσι δουλεύει νομίζω και η Collections.shuffle() της java) 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
albNik Δημοσ. 9 Φεβρουαρίου 2013 Share Δημοσ. 9 Φεβρουαρίου 2013 Ένας άλλος τρόπος για σχετικά "αμερόληπτο" ανακάτεμα . Οι 5 αριθμοί έχουν 5!=120 συνδυασμούς. α) διάλεξε έναν τυχαίο αριθμό 0 - 119 δλδ rand()%120 β) βάλε στον πίνακα τον συνδυασμό που αντιστοιχεί σε αυτό το νούμερο. Tο n! πρέπει να χωράει σε int η long (να μην έχεις πολλά κελιά ) Για το β) δεν χρειάζεται να απαριθμήσεις ένα-ένα τους συνδυασμούς . δες και εδώ http://projecteuler.net/problem=24 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Arctic Δημοσ. 9 Φεβρουαρίου 2013 Μέλος Share Δημοσ. 9 Φεβρουαρίου 2013 Παιδιά ευχαριστώ πολύ για τις απαντήσεις, το έλυσα αλλιώς, μπακαλίστικα μεν αλλά.... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
nilosgr Δημοσ. 9 Φεβρουαρίου 2013 Share Δημοσ. 9 Φεβρουαρίου 2013 Ένας άλλος τρόπος για σχετικά "αμερόληπτο" ανακάτεμα . Οι 5 αριθμοί έχουν 5!=120 συνδυασμούς. α) διάλεξε έναν τυχαίο αριθμό 0 - 119 δλδ rand()%120 β) βάλε στον πίνακα τον συνδυασμό που αντιστοιχεί σε αυτό το νούμερο. Tο n! πρέπει να χωράει σε int η long (να μην έχεις πολλά κελιά ) Για το β) δεν χρειάζεται να απαριθμήσεις ένα-ένα τους συνδυασμούς . δες και εδώ http://projecteuler.net/problem=24 Σαν ιδεα ειναι καλο, αλλα σαν υλοποιηση καπως περιπλοκο, εκτος αν κανεις "καταχρηση" του % Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
akisk Δημοσ. 9 Φεβρουαρίου 2013 Share Δημοσ. 9 Φεβρουαρίου 2013 Ας βάλω και εγώ κώδικα από αντίστοιχο θέμα (shuffle).. #include <stdio.h> #include <stdlib.h> #include <time.h> #define BOARDSIZE 10 void swap(int *, int *); void populateBoard(int *, int); void shuffleBoard(int *, int); void printBoard(int *, int); int continueOrStop(void); int main(int argc, char *argv[]) { srand ((unsigned)time(NULL)); int board[BOARDSIZE]; printf("Populating board...\n"); populateBoard(board, BOARDSIZE); printBoard(board, BOARDSIZE); printf("Shuffling...\n"); shuffleBoard(board, BOARDSIZE); printBoard(board, BOARDSIZE); while(continueOrStop()) { printf("Shuffling...\n"); shuffleBoard(board, BOARDSIZE); printBoard(board, BOARDSIZE); } } void swap(int *i, int *j) { *i += *j; *j = *i - *j; *i -= *j; } void populateBoard(int board[], int boardSize) { int i; for(i = 0; i < boardSize; i++) board[i] = i; } void shuffleBoard(int board[], int boardSize) { int numberA, numberB; for(numberA = 0; numberA < boardSize; numberA++) { numberB = rand() % boardSize; if(numberB != numberA) swap(&board[numberA], &board[numberB]); } } void printBoard(int board[], int boardSize) { int i; for (i = 0; i < boardSize; i++) printf("%d ", board[i]); printf("\n"); } int continueOrStop(void) { printf("Continue (y/n)?: "); while (1) { char c = getchar(); if (c == 'y' || c == 'Y') return 1; else if (c == 'n' || c == 'N') return 0; } } Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Lanike71 Δημοσ. 9 Φεβρουαρίου 2013 Share Δημοσ. 9 Φεβρουαρίου 2013 Ένας άλλος τρόπος για σχετικά "αμερόληπτο" ανακάτεμα . Οι 5 αριθμοί έχουν 5!=120 συνδυασμούς. α) διάλεξε έναν τυχαίο αριθμό 0 - 119 δλδ rand()%120 β) βάλε στον πίνακα τον συνδυασμό που αντιστοιχεί σε αυτό το νούμερο. Tο n! πρέπει να χωράει σε int η long (να μην έχεις πολλά κελιά ) Για το β) δεν χρειάζεται να απαριθμήσεις ένα-ένα τους συνδυασμούς . δες και εδώ http://projecteuler.net/problem=24 Έξυπνο για να θυμόμαστε λίγο και τη Συνδυαστική,αλλά κατάχρηση όσο αφορά τον προγραμματισμό. Σκέψου να είχες πίνακα με 1000 αριθμούς...1000! Η λύση του Nilos με το shuffle θεωρώ είναι το πιο εύκολο και ταχύ. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα