Προς το περιεχόμενο

απορία στη c


jimmysnn_17

Προτεινόμενες αναρτήσεις

Δημοσ.

καλησπέρα σας θέλω να φτιάξω ένα πίνακα 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;
   }

μηπως εχει κανεις καμια ιδεα??

Δημοσ.
καλησπέρα σας θέλω να φτιάξω ένα πίνακα 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" που ειναι?

Δημοσ.
καλησπέρα σας θέλω να φτιάξω ένα πίνακα 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.

Δημοσ.

Προφανως το πρόβλημα σου είναι οτι θέλεις να περιέχει ολα τα νούμερα? αλλα μιλάμε για 3Χ4 δηλαδή για 12 τυχαίες τιμές δηλαδή θέλεις να μπούνε τυχαία όλα τα νούμερα? δηλάδή 3 στοιχεία θα μπούνε διπλά ή δε σε περάζει να είναι και τριπλά?.. μπορείς να έχεις ένα counter για τα διπλά/τριπλά στοιχεία μέχρι να μπουν 3 και ύστερα με ένα while να παίρνεις διαφορετικές τιμές απο αυτά που υπάρχουν ήδη στο πίνακα!

Δημοσ.

αν πρέπει οπωσδήποτε κάθε αριθμός να υπάρχει έστω και μια φορά, μια λύση θα ήταν να κρατήσεις ρεζερβέ 10 τυχαίες διαφορετικές θέσεις του πίνακα (θα τις κρατήσεις αυτές τις θέσεις σε ένα άλλο πίνακα για indexing) και να αναθέσεις σε αυτές τις θέσεις από μια τιμή 0 ως 9 (διαφορετικές μεταξύ τους ε)

Επίσης, όταν θα γεμίσεις τον υπόλοιπο πίνακα με τυχαίες τιμές, θα πρέπει να τσεκάρεις να μην βάλεις πάλι τιμές σε καμιά από τις προαναφερθείσες 10 θέσεις που κρατησαμε

Δημοσ.

Τσεκαρε τουτο εδω.

>[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

Δημοσ.

δεν επεξηγείς επαρκώς το τι θες να κάνεις

 

αν κατάλαβα καλά το ερώτημα ψάχνεις κάτι τέτοιο

 

 

>
   #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;
}



Δημοσ.

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');
      }
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...