| 
| 
 | Вопрос # 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |