Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 20.11.2011
Сообщений: 17
1

Рандом в двумерном массиве. Не могу поймать ошибку

08.09.2012, 21:12. Просмотров 950. Ответов 1
Метки нет (Все метки)


Есть массив 10x10, заполнен нулями (порядковые номера от 0 до 99), нужно рандомно заполнить этот массив единицами вместо нулей.
Для этого сделал впомогательный массив free, в котором находятся номера тех элементов исходного массива, которые еще нулевые (от 0 до 99).
Вот код прогораммы:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
var i,j, n, r1, r2, s:integer;
a:array[1..10,0..10] of integer;
free, p,r:array[1..100] of integer;
pre, post, u:longint;
 
begin
  { TODO -oUser -cConsole Main : Insert code here }
  {начальное заполнение}
for i:=0 to 9 do
  for j:=0 to 9 do
  a[i,j]:=0;
 
for i:=0 to 9 do begin
  for j:=0 to 9 do
  write(a[i,j]);
  writeln;
  end;
n:=99;
 
for i:=0 to n do
  free[i]:=i;
 
 writeln;
 writeln;
  for i:=0 to n do write(free[i],' ');
 
 
randomize;
{while n<>0 do begin}
u:=random(n);
 
writeln;
  write(u);
writeln;
 
pre:= u div 10;
post:= u mod 10;
p[1]:=u;
 
for i:=u to n-1 do
  free[i]:=free[i+1];
 
a[pre,post]:=1;
     writeln;
     writeln;
for i:=0 to 9 do begin
  for j:=0 to 9 do
  write(a[i,j]);
  writeln;
  end;
 
  writeln;
  writeln;
  for i:=0 to n do write(free[i],' ');
 n:=n-1;
 
for s:=1 to 60 do begin
writeln;
writeln;
  u:=random(n);
 
writeln;
      write(u);
writeln;
 
pre:= u div 10;
post:= u mod 10;
p[2]:=u;
 if p[2]>p[1] then u:=u-1;
 
for i:=u to n-1 do
  free[i]:=free[i+1];
 
a[pre,post]:=1;
     writeln;
     writeln;
 
for i:=0 to 9 do begin
  for j:=0 to 9 do
  write(a[i,j]);
  writeln;
  end;
 
  writeln;
  writeln;
  for i:=0 to n do write(free[i],' ');
 
  n:=n-1;
  p[1]:=p[2];
end;
  readln;
  readln;
end.
[/CODE]

проблема в том что почему то элемент [0,9] превращается из нуля в число, которое соотв. кол-ву оставшихся нулевых элементов.
Не понимаю как оно туда попадает oO
Помогите пожалуйста разобраться)

Добавлено через 33 минуты
без цикла все работает нормально (если неск раз код продублировать), как только ставлю цикл (по s) так и начинается с [0,9] элементом
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2012, 21:12
Ответы с готовыми решениями:

Поиск нулей в двумерном массиве. Не могу найти ошибку в коде
Дан двумерный массив. Заполнен единицами и нулями. Например такой: 0 0 1 1 1 0 1 1 1 ...

Рандом в двумерном массиве
Есть определенные значение , пять интов = 7 , 6 интов = 3 , и 10 интов = 5; как их рандомно...

Подправьте рандом в двумерном массиве (матрице)
#include&lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;time.h&gt; #include&lt;iomanip&gt; using namespace...

Закрывается программа. Не могу поймать ошибку
public string FileName { get { return FileName; } set ...

1
Модератор
62951 / 46963 / 32363
Регистрация: 18.05.2008
Сообщений: 113,808
08.09.2012, 21:53 2
Какая-то каша в голове и соответственно в коде, Вы хоть с размерами массивов разберитесь
Pascal
1
2
3
4
5
a:array[1..10,0..10] of integer;
....................................
for i:=0 to 9 do
for j:=0 to 9 do
  a[i,j]:=0;
Спрашивается откуда взялись нулевые индексы?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2012, 21:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Не могу понять ошибку. неповторимый рандом
Не могу понять ошибку. неповторимый рандом. Хочу сделать чтобы цифр для массива задавались рандомно...

Найти ошибку в двумерном массиве при выводе
условие задачи: В матрице удалить все столбцы, в которых первый элемент больше последнего ошибка:...

Обмен столбцов в двумерном массиве (найти ошибку в программе)
Задача: Дан двумерный массив целых чисел. Нужно поменять местами первый столбец со столбцом, в...

Задача "Максимальный подпалиндром" не могу поймать ошибку.
Палиндромом называется строка, которая одинаково читается как слева направо, так и справа налево....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.