2016-04-29 2 views
-3

У меня есть проект в C, и мне нужно найти способ поставить нуль в 10 случайных позициях 2d массива, скажем pinakas[3][10]. Позвольте мне привести некоторый код, чтобы лучше объяснить себе:try put 0 in 10 random position of 2d array

int main(int argc, char *argv[]) { 
    int i,j,x,y; 
    int pinakas[3][10]; 
    for (i=0;i<3;i++) 
    { 
     for(j=0;j<10;j++) 
     { 
      pinakas[i][j]=1; 
     } 
    } 
    for (i=0;i<10;i++) 
    { do 
     { 
     int x=rand()%2; 
     int y=rand()%9; 
     } 
      while (pinakas[x][y]=0); 
      pinakas[x][y]=0; 
    } 
    for (i=0;i<3;i++) 
    { 
     for(j=0;j<10;j++) 
     { 
      printf("%d\n",pinakas[i][j]); 
     } 
    } 
    return 0; 
} 

Сначала я поставил из них в каждой позиции массива, то им пытаются найти способ поставить нули в 10 случайных позициях массива. Большое спасибо.

+0

NAA: 'int x = rand()% 3; int y = rand()% 10; ' –

+1

В чем вопрос? –

+1

Если ваш вопрос закрыт, правильный подход - отредактировать его (как и вы), а не публиковать новый вопрос. При этом ваш вопрос все еще остается неясным после редактирования, и в этом случае он не будет вновь открыт. – Lundin

ответ

3

Часть

do 
{ 
    int x=rand()%2; 
    int y=rand()%9; 
} 
while (pinakas[x][y]=0); 

даст EROR потому, что х и у объявлены в замке и не будет известно за пределами theblock. Попробуйте:

int x, y; 
do 
{ 
    x=rand()%3; 
    y=rand()%10; 
} 
while (pinakas[x][y]==0); 

Отметим также использование ==, который comparisson, где только = это назначение.

Наконец, чтобы поставить 0 в 10 случайных местах массива, вы должны/могли бы сделать:

int x, y, i=0; 
do 
{ 
    x=rand()%3; 
    y=rand()%10; 
    if (pinakas[x][y]!=0) { 
     pinakas[x][y]= 0; 
     i++; 
    } 
} 
while (i<10); 

EDIT: Как вы жалуетесь, что вы получите только 7 нулей (whch невозможно), то здесь следует за EXACT CODE скопировать и вставить для вас:

int main(int argc, char *argv[]) 
{ 
    int i,j,x,y; 
    int pinakas[3][10]; 
    for (i=0;i<3;i++) 
    { 
     for(j=0;j<10;j++) 
     { 
      pinakas[i][j]=1; 
     } 
    } 
    i=0; 
    do 
    { 
     x=rand()%3; 
     y=rand()%10; 
     if (pinakas[x][y]!=0) { 
      pinakas[x][y]= 0; 
      i++; 
     } 
    } 
    while (i<10); 
    x=0; 
    for (i=0;i<3;i++) 
    { 
     for(j=0;j<10;j++) 
     { 
      printf("[%d,%d] = %d\n",i,j,pinakas[i][j]); 
      if (pinakas[i][j]==0) x++; 
     } 
    } 
    printf ("%d zeroes\n",x); 
    return 0; 
} 

на моей системе это печатает 10.

+0

большое спасибо за ваш ответ. этот способ не гарантирует, что у меня будет десять нулей, вместо этого он даст мне 7 нулей. что касается rand, я думал, что rand()% 2 даст мне случайное число между 0,1,2 в отличие от rand()% 3, которое даст мне случайное число между 0,1,2,3. поэтому я думал, что мы не хотим, чтобы наш «Х» когда-либо был 3 – Harry

+0

Код помещает 10 нулей в ваш массив в соответствии с логикой кода. Следите за своими опечатками! Пожалуйста, найдите оператора мод или попробуйте запомнить его из основной арифметики: какова остальная часть деления 8 на 3? 9 на 3? –

+0

Вы, безусловно, прав насчет модов, спасибо большое :) – Harry

0

Я поставил комментарии за ошибки, которые вы сделали

for (i=0;i<10;i++){ 
    do{ 
    int x=rand()%2; //should be % 3 
    int y=rand()%9; //should be % 10 
    } while (pinakas[x][y]=0); //you need double equals for comparison 
    pinakas[x][y]=0; //x an y are out of scope here 
}