jimmysnn_17 Δημοσ. 24 Οκτωβρίου 2009 Δημοσ. 24 Οκτωβρίου 2009 καλησπέρα σας θέλω να φτιάξω ένα πίνακα 3x4 ο οποίος να περιέχει τυχαίους αριθμούς από το 1-9 (αλλά να περιέχει όλα τα νούμερα από το 1-9. έχω κάνει το εξής: >int dim_pinaka() { int i,j; srand((long) 2005143); //arxikopioume th genitria //dimiourgia pinaka me tixaious arithmous for (i=0; i<3; i++) for (j=0; j<4; j++) { a[i][j]= 1 + rand() %9; } //midenizo ena tetragonaki i = rand() %9; j = rand() %9; a[i][j] = NULL; } μηπως εχει κανεις καμια ιδεα??
Evgenios1 Δημοσ. 25 Οκτωβρίου 2009 Δημοσ. 25 Οκτωβρίου 2009 καλησπέρα σας θέλω να φτιάξω ένα πίνακα 3x4 ο οποίος να περιέχει τυχαίους αριθμούς από το 1-9 (αλλά να περιέχει όλα τα νούμερα από το 1-9. έχω κάνει το εξής: >int dim_pinaka() { int i,j; srand((long) 2005143); //arxikopioume th genitria //dimiourgia pinaka me tixaious arithmous for (i=0; i<3; i++) for (j=0; j<4; j++) { a[i][j]= 1 + rand() %9; } //midenizo ena tetragonaki i = rand() %9; j = rand() %9; a[i][j] = NULL; } μηπως εχει κανεις καμια ιδεα?? Το "a" που ειναι?
jimmysnn_17 Δημοσ. 25 Οκτωβρίου 2009 Μέλος Δημοσ. 25 Οκτωβρίου 2009 αν εννοείς που το εχω δηλώσει είναι έξω απο τη main οπότε δεν υπαρχει πρόβλημα
Directx Δημοσ. 25 Οκτωβρίου 2009 Δημοσ. 25 Οκτωβρίου 2009 καλησπέρα σας θέλω να φτιάξω ένα πίνακα 3x4 ο οποίος να περιέχει τυχαίους αριθμούς από το 1-9 (αλλά να περιέχει όλα τα νούμερα από το 1-9. έχω κάνει το εξής: >int dim_pinaka() { int i,j; srand((long) 2005143); //arxikopioume th genitria //dimiourgia pinaka me tixaious arithmous for (i=0; i<3; i++) for (j=0; j<4; j++) { a[i][j]= 1 + rand() %9; } //midenizo ena tetragonaki i = rand() %9; j = rand() %9; a[i][j] = NULL; } μηπως εχει κανεις καμια ιδεα?? Το rand() % 9 επιστρέφει τιμές από 0 ως 8 - οπότε άλλαξε το σε 10 ώστε να πάρεις 0 ως 9. Τα i = rand() %9, j = rand() %9, αν ο πίνακας σου δεν έχει το ανάλογο μέγεθος προφανώς θα οδηγήσουν σε σφάλμα, οπότε αν είναι πχ. ένα a[3][4] το i = rand() % 3 και το j = rand() % 4.
Technology fan Δημοσ. 25 Οκτωβρίου 2009 Δημοσ. 25 Οκτωβρίου 2009 Προφανως το πρόβλημα σου είναι οτι θέλεις να περιέχει ολα τα νούμερα? αλλα μιλάμε για 3Χ4 δηλαδή για 12 τυχαίες τιμές δηλαδή θέλεις να μπούνε τυχαία όλα τα νούμερα? δηλάδή 3 στοιχεία θα μπούνε διπλά ή δε σε περάζει να είναι και τριπλά?.. μπορείς να έχεις ένα counter για τα διπλά/τριπλά στοιχεία μέχρι να μπουν 3 και ύστερα με ένα while να παίρνεις διαφορετικές τιμές απο αυτά που υπάρχουν ήδη στο πίνακα!
georgemarios Δημοσ. 25 Οκτωβρίου 2009 Δημοσ. 25 Οκτωβρίου 2009 αν πρέπει οπωσδήποτε κάθε αριθμός να υπάρχει έστω και μια φορά, μια λύση θα ήταν να κρατήσεις ρεζερβέ 10 τυχαίες διαφορετικές θέσεις του πίνακα (θα τις κρατήσεις αυτές τις θέσεις σε ένα άλλο πίνακα για indexing) και να αναθέσεις σε αυτές τις θέσεις από μια τιμή 0 ως 9 (διαφορετικές μεταξύ τους ε) Επίσης, όταν θα γεμίσεις τον υπόλοιπο πίνακα με τυχαίες τιμές, θα πρέπει να τσεκάρεις να μην βάλεις πάλι τιμές σε καμιά από τις προαναφερθείσες 10 θέσεις που κρατησαμε
Evgenios1 Δημοσ. 25 Οκτωβρίου 2009 Δημοσ. 25 Οκτωβρίου 2009 Τσεκαρε τουτο εδω. >[color="#0000ff"]#include[/color] <stdlib.h> [color="#8000ff"]bool[/color] exist([color="#8000ff"]int[/color]*,[color="#8000ff"]int[/color],[color="#8000ff"]int[/color]); [color="#0000ff"][b]void[/b][/color] print([color="#8000ff"]int[/color]*,[color="#8000ff"]int[/color]); [color="#8000ff"]int[/color] main() { [color="#8000ff"]int[/color] a[[color="#ff8000"]9[/color]]; [color="#0000ff"][b]for[/b][/color]([color="#8000ff"]int[/color] i=[color="#ff8000"]0[/color];i<[color="#ff8000"]9[/color];i++) [color="#0000ff"][b]do[/b][/color] a[i] = [color="#ff8000"]1[/color] + ( rand() % [color="#ff8000"]9[/color] ); [color="#0000ff"][b]while[/b][/color](exist(a,a[i],i)); print(a,[color="#ff8000"]9[/color]); getchar(); [color="#0000ff"][b]return[/b][/color] [color="#ff8000"]0[/color]; } [color="#8000ff"]bool[/color] exist([color="#8000ff"]int[/color]* arr,[color="#8000ff"]int[/color] obj,[color="#8000ff"]int[/color] len) { [color="#0000ff"][b]for[/b][/color]([color="#8000ff"]int[/color] i=[color="#ff8000"]0[/color];i<len;i++) [color="#0000ff"][b]if[/b][/color](arr[i]==obj) [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]true[/b][/color]; [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]false[/b][/color]; } [color="#0000ff"][b]void[/b][/color] print([color="#8000ff"]int[/color]* arr,[color="#8000ff"]int[/color] len) { [color="#0000ff"][b]for[/b][/color]([color="#8000ff"]int[/color] i = [color="#ff8000"]0[/color] ; i < len; i++) printf([color="#a31515"]"%d\n"[/color],*(arr+i)); } Αλλαξε το for loop για να δουλεψει σε c. out > 6 9 8 5 2 4 1 3 7
virxen75 Δημοσ. 25 Οκτωβρίου 2009 Δημοσ. 25 Οκτωβρίου 2009 δεν επεξηγείς επαρκώς το τι θες να κάνεις αν κατάλαβα καλά το ερώτημα ψάχνεις κάτι τέτοιο > #include <stdio.h> #include <time.h> #include <stdlib.h> void dim_pinaka(); int a[3][4];//ο πινακας σου int randoms[10];//πίνακας που μας λέει 0=δεν χρησιμοποιήθηκε,1=χρησιμοποιήθηκε //π.χ. αν βάλω στον πίνακα α το 1===>randoms[1]=1 int main(){ int i,j; for (i=0; i<10; i++) randoms[i]=0; //μηδενίζω τον πίνακα for (i=0; i<3; i++) for (j=0; j<4; j++) a[i][j]= 0;//ομοίως dim_pinaka();//καλώ την συνάρτηση γεμίσματος for (i=0; i<3; i++){ for (j=0; j<4; j++) printf(" %d",a[i][j]);//τυπώνω τον πίνακα printf("\n"); } system("pause"); return 0; } void dim_pinaka(){ int i,j,random,count=0; srand(time(NULL)); //arxikopioume th genitria //dimiourgia pinaka me tixaious arithmous for (i=0; i<3; i++) for (j=0; j<4; j++) { random=-1; while (random<0){ random=1 + rand() %9;//ο τυχαίος 1-9 if (randoms[random]==1 && count<10){random=-1;}//αν χρησιμοποιήθηκε ήδη //και δεν τελειώσανε οι 9 από τις 12 θέσεις του πίνακα βρες άλλο τυχαίο 1-9 if (randoms[random]==0){count++;randoms[random]=1;} //αν δεν χρησιμποιήθηκε ακόμα,πρόσθεσε +1 στο σύνολο,βάλε την ένδειξη χρησιμοποι- /-ήθηκε στον randoms } a[i][j]= random;//αφού βρήκα αυτό που ήθελα βάλε το στον α } //midenizo ena tetragonaki //i = rand() %9; //j = rand() %9; //a[i][j] = NULL; }
bxenos Δημοσ. 25 Οκτωβρίου 2009 Δημοσ. 25 Οκτωβρίου 2009 keep it small and elegant...an other solution > { int a[3][4],i,j,k; memset(a,0,sizeof(a)); srand(time(NULL)); //απόδοσε σε τυχαίες θέσεις στον πίνακα, τους αριθμους 1 εως και 9 απο μια φορά for(k=1;k<=9;k++){ do{ i = rand() % 3; j = rand() % 4; }while(a[i][j]);//ψαξε αχρησιμοποίητη θέση a[i][j] = k;//για να βάλεις τον k } //απόδοσε στις υπόλοιπες θέσεις τυχαίους αριθμους απο 1 εως και 9 //και ταυτόχρονα τυπωσε και τα περιεχόμενα στην οθόνη for(i=0;i<3;i++){ for(j=0;j<4;j++){ if(a[i][j]==0)//αν είναι αχρησιμοποίητη θέση a[i][j] = (rand() % 9) + 1;//βαλε τυχαίο αριθμο printf("%d\t",a[i][j]); } putchar('\n'); } }
jimmysnn_17 Δημοσ. 26 Οκτωβρίου 2009 Μέλος Δημοσ. 26 Οκτωβρίου 2009 Ευχαριστώ πολύ για τη πολύτιμη βοήθεια σας!!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.