|
Вопрос # 5 416/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
Дан двумерный массив 10*10 заполненый нолями,
нужно заменит случайным образом некоторые ноли на еденицы, но не больше десяти едениц как сделать не врубаюсь((
 |
Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 16 июня 2011, 16:44
Состояние вопроса: решён, ответов: 1.
|
Ответ #1. Отвечает эксперт: Gooddy
Здравствуйте, ierihon1!
Решение простое: в цикле 10 раз заполняем случайный элемент единицей.
Не заполнит гарантировано 10 элементов, но заполнит от 1 до 10 точно (на практике будет заполнено 7-10 элементов).
Приложение: Переключить в обычный режим-
-
- procedure FillArray(var ArrayToFill: array of ...);
- var
- TotalCount: Byte;
- x, y: Integer;
- begin
- Randomize;
- for TotalCount := 1 to 10 do
- begin
- x := Random()*10;
- y := Random()*10;
- ArrayToFill[ x, y ] := 1;
- end;
- end;
 |
Ответ отправил: Gooddy (статус: 3-ий класс)
Время отправки: 16 июня 2011, 16:56
Оценка за ответ: 4
Комментарий к оценке: Но нужно чтобы именно заданное количество... Но спасибо за помощь)
|
Мини-форум вопроса
Всего сообщений: 37; последнее сообщение — 17 июня 2011, 09:35; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 17:02 [#1]:
нужно заменит случайным образом некоторые ноли на еденицы, но не больше десяти едениц как сделать не врубаюсь((
В вопросике ошибка. Написали бы 10 я бы и написал код для 10. Сейчас поправлю.
Чисти код! Чисти код! Чисти код!
|
|
ierihon1 (статус: 1-ый класс), 16 июня 2011, 17:04 [#2]:
Да и правда чуть неправильно сформулировал)
|
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 17:06 [#3]:
Не давать коду массив, в котором более 90% заполнено единицами - зависнет. Если не известно, что будет в массиве - лучше сделать проверку.
procedure FillArray(var ArrayToFill: array of ...);
var
TotalCount: Byte;
x, y: Integer;
begin
Randomize;
TotalCount := 1;
while ( TotalCount <= 10 ) do
begin
x := Random()*10;
y := Random()*10;
if ( ArrayToFill[ x, y ] <> 1 ) then
begin
ArrayToFill[ x, y ] := 1;
Inc(TotalCount);
end;
end;
end;
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 16 июня 2011, 17:07 [#4]:
Цитата (ierihon1):
Да и правда чуть неправильно сформулировал)
А как правильно-то?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 17:08 [#5]:
Правильно: в нулевую матрицу подставить 10 единиц случайным образом.
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 17:09 [#6]:
Кстати. По моему коду видно что я грешу магическими числами
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 16 июня 2011, 17:13 [#7]:
Random()*10; - улыбнуло.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 17:14 [#8]:
min@y™: RandomRange в модуле math - лишние 500 байт.
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 17:15 [#9]:
ierihon1: можно заменить Range*10 на Math.RandomRange(0,9), заодно округлять не придётся.
Чисти код! Чисти код! Чисти код!
|
|
ierihon1 (статус: 1-ый класс), 16 июня 2011, 17:21 [#10]:
Хм.. Что то не совсем так... иногда выдаёт десять но чаще 9.. иногда даже 7..
|
16 июня 2011, 17:23: Вопрос перемещён из тематического раздела Pascal » Программирование на Pascal в раздел Лабораторный практикум » Pascal модератором Ерёмин А.А.
|
ierihon1 (статус: 1-ый класс), 16 июня 2011, 17:25 [#11]:
Вот хотя бы спросили бы что правда ли это лабораторный практикум... я ж даже не учусь ни в коледже ни в универе ещё какая это может быть лаба?)))
|
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 17:42 [#12]:
Новый код выдаёт меньше 10 единиц?
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 17:43 [#13]:
Условие задачи очень похоже на задания преподов они любят давать задачки на заполнение массива всякой хренью.
Чисти код! Чисти код! Чисти код!
|
|
ierihon1 (статус: 1-ый класс), 16 июня 2011, 17:48 [#14]:
Ну я задался проблемой написания игры "Сапёр" и да выдаёт то 7 то 9 иногда только 10..
|
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 17:51 [#15]:
procedure CreateArray( var ArrayToCreate: TArray );
var
x, y: Byte;
begin
for x := 0 to 9 do
for y := 0 to 9 do
ArrayToCreate[x, y] := 0;
end;
procedure PrintArray( var ArrayToPrint: TArray );
var
x, y: Byte;
begin
for x := 0 to 9 do
for y := 0 to 9 do
Form1.Memo1.Lines.Add( '[' + IntToStr( x ) + ', ' + IntToStr( y ) +
']' + ': ' + IntToStr( ArrayToPrint[x, y] ) );
end;
procedure FillArray( var ArrayToFill: TArray );
var
TotalCount: Byte;
x, y: Integer;
begin
Randomize;
TotalCount := 1;
while ( TotalCount <= 10 ) do
begin
x := RandomRange( 0, 9 );
y := RandomRange( 0, 9 );
if ( ArrayToFill[x, y] <> 1 ) then
begin
ArrayToFill[x, y] := 1;
Inc( TotalCount );
end;
end;
end;
procedure Tform1.Button1click( Sender: TObject );
var
WorkArray: TArray;
begin
CreateArray( WorkArray );
PrintArray( WorkArray );
FillArray( WorkArray );
PrintArray( WorkArray );
end;
Стабильно - 10 элементов.
Ты же код не просто скопипастил, покажи как ты его отредактировал.
Чисти код! Чисти код! Чисти код!
|
|
ierihon1 (статус: 1-ый класс), 16 июня 2011, 17:53 [#16]:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
type
TMatrix = array [0..9,0..9] of integer;
var M:Tmatrix;
procedure MakeMatrix;
var i,j:integer;
begin
for i := 0 to 9 do
for j := 0 to 9 do
M[i,j] := 0;
end;
procedure FillArray(K:TMatrix);
var TotalCount: Byte;
x,y: Integer;
begin
TotalCount := 0;
while ( TotalCount < 10 ) do
begin
x := Random(10);
y := random(10);
if ( K[ x, y ] <> 1 ) then
begin
M[ x, y ] := 1;
Inc(TotalCount);
end;
end;
end;
Procedure WriteMatrix;
var i,j:Integer;
begin
for i := 0 to 9 do
begin
for j := 0 to 9 do
Write(M[i,j]);
writeln;
end;
end;
begin
randomize;
MakeMatrix;
FillArray(M);
WriteMatrix;
readln;
end.
вот так
|
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 17:56 [#17]:
FillArray(var K:TMatrix);
K[ x, y ] := 1;
Пробуй
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 16 июня 2011, 18:01 [#18]:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
type
TMatrix = array [0..9,0..9] of integer;
var M:Tmatrix;
procedure MakeMatrix;
var i,j:integer;
begin
for i := 0 to 9 do
for j := 0 to 9 do
M[i,j] := 0;
end;
procedure FillArray;
var TotalCount: Byte;
x,y: Integer;
begin
TotalCount := 0;
while ( TotalCount < 10 ) do
begin
x := RandomRange(0,9);
y := RandomRange(0,9);
if ( M[ x, y ] <> 1 ) then
begin
M[ x, y ] := 1;
Inc(TotalCount);
end;
end;
end;
Procedure WriteMatrix;
var i,j:Integer;
begin
for i := 0 to 9 do
begin
for j := 0 to 9 do
Write(M[i,j]);
writeln;
end;
end;
begin
randomize;
MakeMatrix;
FillArray();
WriteMatrix;
readln;
end.
Стабильно 10 мин.
Чисти код! Чисти код! Чисти код!
|
|
ierihon1 (статус: 1-ый класс), 16 июня 2011, 18:02 [#19]:
if ( K[ x, y ] <> 1 ) then
begin
M[ x, y ] := 1;
Inc(TotalCount);
end;
только сейчас заметил блин))
должно то быть так
if ( M[ x, y ] <> 1 ) then
begin
M[ x, y ] := 1;
Inc(TotalCount);
end;
|
|
ierihon1 (статус: 1-ый класс), 16 июня 2011, 18:04 [#20]:
Gooddy: №18 сообщение отправь как ответ поставлю пятёрку)
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|