| 
| 
 | Вопрос # 5 682/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Помогите с решением задачки завтра нужно сдавать!Очень надеюсь на вашу помощь. У меня вопрос в том почему неполучается зарандомить змейку.Преподаватель сказал что нужно обязательно через рандом и что бы на экран выводилась сразу змейка заполненая случайными числами от
 -2 до 2 .Паскаль
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим program matrix;uses crt;const n=8;var a:array[1..n,1..n] of real;    sum,max,min:real;    i,j:integer;Beginclrscr;randomize;for i:=1 to n dobeginfor j:=1 to n dobegin a[i,j]:= -2+random(4)+random;if i mod 2=1 then a[i,j]:=(i-1)*n+jelse a[i,j]:=i*n-j+1;write(a[i,j]:7:2);end;writeln;end;end.
|  |   Вопрос задал: SHEV (статус: Посетитель)Вопрос отправлен: 19 октября 2011, 16:37
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Стоило отформатировать код и глянуть на него, всё сразу стало понятно.
 program matrix;
 
uses
  crt;
 
const
  n = 8;
 
var
  a: array[1..n, 1..n] of real;
  sum, max, min: real;
  i, j: integer;
 
begin
  clrscr;
  randomize;
 
  for i:= 1 to n do
    begin
      for j:= 1 to n do
        begin
          { диапазон значений: -2.0 <= a[i, j] < 2.0
            Хотя не проще ли так?
            a[i, j]:= 2 * (Random - Random); }
          a[i, j]:= -2 + random(4) + random;
 
          { а вот тут у тебя полученной рандомное значение a[i, j]
            затирается новым значением В ЛЮБОМ СЛУЧАЕ. }
          if i mod 2 = 1
            then a[i, j]:= (i - 1) * n + j
            else a[i, j]:= i * n - j + 1;
 
          write(a[i, j]: 7: 2);
        end;
 
      writeln;
    end;
end.
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 19 октября 2011, 17:04
 Оценка за ответ: 4
 Комментарий к оценке: Так что же нужно сделать что бы оно не затиралось? |  
 Мини-форум вопросаВсего сообщений: 21; последнее сообщение — 21 октября 2011, 11:51; участников в обсуждении: 3. Страницы: [1] [2] [Следующая »]  
|   | min@y™ (статус: Доктор наук), 19 октября 2011, 16:51 [#1]:А что конкретно не работает-то? Выдаётся какая-то ошибка или что? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | SHEV (статус: Посетитель), 19 октября 2011, 17:04 [#2]:ну она получается заполняется целыми числами а мне нужно случайными вещественными ошибки нет. Описать матрицу вещественных элементов 8х8 в диапазоне от -2 до 2 .только что бы исходная матрица была сразу змейкой. Проще говоря змейка не рандомиться |  
|   | min@y™ (статус: Доктор наук), 19 октября 2011, 17:08 [#3]: Цитата (SHEV): ну она получается заполняется целыми числами а мне нужно случайными вещественными ошибки нет. Описать матрицу вещественных элементов 8х8 в диапазоне от -2 до 2 .только что бы исходная матрица была сразу змейкой. Проще говоря змейка не рандомиться  Бесплатный совет на будущее: форматируй исходники по-человечески, чтобы и тебе, и другим людЯм легче было их анализировать. Я понял, в чём дело, только когда привёл твою писанину в божеский вид.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 19 октября 2011, 17:12 [#4]: Цитата (SHEV): Так что же нужно сделать что бы оно не затиралось?  Убрать лишние присваивания. Я не могу понять, зачем они?
 
 if i mod 2 = 1
  then a[i, j]:= (i - 1) * n + j
  else a[i, j]:= i * n - j + 1; Цитата (SHEV): Оценка за ответ: 4 За что 4?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | SHEV (статус: Посетитель), 19 октября 2011, 17:16 [#5]:Мало что ли?))))давай 5 поставлю))))))))))) |  
|   | SHEV (статус: Посетитель), 19 октября 2011, 17:20 [#6]:если массив запоняется четными значениями то (i-1)*n+j,иначе i*-j+1;
 Если я уберу присваивание условие перестанет работать
 |  
|   | SHEV (статус: Посетитель), 19 октября 2011, 17:20 [#7]:я просто не знаю как проще сделать(((((((((( |  
|   | SHEV (статус: Посетитель), 19 октября 2011, 17:36 [#8]:По этому и помощи прошу |  
|   | bugmenot (статус: 3-ий класс), 19 октября 2011, 17:38 [#9]:Два раза Random, чтобы в два раза случайнее было? 
 Формула же: From + Random(To - From)
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | SHEV (статус: Посетитель), 19 октября 2011, 17:45 [#10]:Формулу генератора можно поменять дело в том что змейка не заполняется этим самым рандомом |  19 октября 2011, 18:54: Вопрос перемещён из тематического раздела Pascal » Общие вопросы в раздел Лабораторный практикум » Pascal модератором Ерёмин А.А. 
|   | min@y™ (статус: Доктор наук), 19 октября 2011, 20:20 [#11]: Цитата (SHEV): Мало что ли?))))давай 5 поставлю)))))))))))  Зачем столько скобок? Нажми сюда.
 Меня интересует, почему 4. Именно ПОЧЕМУ.
 
 Цитата (SHEV): если массив запоняется четными значениями то (i-1)*n+j,иначе i*-j+1; Если я уберу присваивание условие перестанет работать  Что за хрень? Тебе надо заполнить массив случайными вещественными значениями в диапазоне [-2; 2) или целыми, зависящими от индексов массива? Определись уже.
 
 Цитата (SHEV): только что бы исходная матрица была сразу змейкой. Проще говоря змейка не рандомиться  "Змейкой" - это как?
 Зачем ты присваиваешь элементу матрицы случайное значение (как надо), а потом тут же затираешь его некой целой величиной? Объясни-ка давай. А то мне телепатор отключили за неуплату. А ещё лучше - скопипасть сюда точное условие задачи.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 19 октября 2011, 20:30 [#12]: Цитата (SHEV): если массив запоняется четными значениями то (i-1)*n+j,иначе i*-j+1; Если я уберу присваивание условие перестанет работать  А зачем? ЗАЧЕМ всё это?
 
 Цитата (SHEV): я просто не знаю как проще сделать((((((((((  А я до сих пор не понимаю, ЧТО ты хочешь сделать.
 
 Цитата (SHEV): По этому и помощи прошу  "поэтому" пишется слитно. Ты просишь помощи, но не говоришь, что тебе нужно. Как тебе помочь?
 
 Цитата (bugmenot): Формула же: From + Random(To - From)  Результат Random(x) = целое число в диапазоне 0..X - 1. © Матчасть. Твой КО.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | SHEV (статус: Посетитель), 19 октября 2011, 23:03 [#13]:Вот собственно условия задачи 1.Описать матрицу 8х8 вещественных элементов
 2.Заполнить элементы матрицы согласно варианту случайными вещественными числами в диапазоне от -N до N, где N -вариант (в моем случае вариант 2)
 3.Распечатать элементы с помощью подпрограммы с указанием сумм по каждой строке и каждому столбцу,а так же общей суммы
 4.Поменять местами строки с минимальной и максимальной суммами
 |  
|   | min@y™ (статус: Доктор наук), 20 октября 2011, 08:27 [#14]:Тогда объясни, к какому пункту относится вот этот кусок кода: 
 if i mod 2 = 1
  then a[i, j]:= (i - 1) * n + j
  else a[i, j]:= i * n - j + 1; Цитата (SHEV): 3.Распечатать элементы Ты уверен, что именно "распечатать"? Конечно, это можно сделать и на турбо-паскале, если есть принтер, подключенный через LPT-порт, но, всё-таки, наверное, нужно просто вывести на экран, а?
 
 Цитата (SHEV): с помощью подпрограммы Не вижу в коде подпрограммы печати. Где она?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 20 октября 2011, 09:39 [#15]:Чтобы окончательно разбудить мозги и ради прикола: 
 {
Вот собственно условия задачи
1.Описать матрицу 8х8 вещественных элементов
2.Заполнить элементы матрицы согласно варианту случайными вещественными
  числами в диапазоне от -N до N, где N -вариант (в моем случае вариант 2)
3.Распечатать элементы с помощью подпрограммы с указанием сумм по каждой строке
  и каждому столбцу,а так же общей суммы
4.Поменять местами строки с минимальной и максимальной суммами
}
 
program p5682;
 
uses
  Crt;
 
const
  N = 8;
 
type
  TMatrix = array[0..N - 1, 0..N - 1] of Real;
 
procedure MakeMatrix(var X: TMatrix);
var
  Row, Col: Integer;
begin
 
  for Row:= 0 to N - 1 do
    for Col:= 0 to N - 1 do
      X[Row, Col]:= 4 * Random - 2;
end;
 
procedure PrintMatrix(const X: TMatrix; out MinRow, MaxRow: Integer);
var
  Row, Col: Integer;
  RowSum, Min, Max, Total: Real;
  ColSum: array[0..N - 1] of Real;
begin
  Min:= +3.0;
  Max:= -3.0;
  MinRow:= 0;
  MaxRow:= 0;
  Total:= 0;
 
  for Col:= 0 to N - 1 do {FillChar(ColSum, sizeof(ColSum), 0);}
    ColSum[Col]:= 0;
 
  for Row:= 0 to N - 1 do
    begin
      RowSum:= 0.0;
 
      for Col:= 0 to N - 1 do
        begin
          Write(X[Row, Col]: 6: 2);
          RowSum:= RowSum + X[Row, Col];
          ColSum[Col]:= ColSum[Col] + X[Row, Col];
          Total:= Total + X[Row, Col];
        end;
 
      if RowSum < Min
        then begin
               Min:= RowSum;
               MinRow:= Row;
             end;
 
      if RowSum > Max
        then begin
               Max:= RowSum;
               MaxRow:= Row;
             end;
 
      WriteLn('  RowSum = ', RowSum: 7: 2);
    end;
 
  for Col:= 0 to N - 1 do
    Write(ColSum[Col]: 6: 2);
 
  WriteLn(' <--- Sum of Cols');
  WriteLn(' Total sum:', Total: 6: 2, '; MinRow: ', MinRow, ' (', Min: 0: 2, '); MaxRow: ', MaxRow, ' (', Max: 0: 2,
')');
  WriteLn;
end;
 
procedure ExchangeMatrixRows(var X: TMatrix; const MinRow, MaxRow: Integer);
var
  Temp: Real;
  Col: Integer;
begin
  if MinRow = MaxRow
    then Exit;
 
  for Col:= 0 to N - 1 do
    begin
      Temp:= X[MinRow, Col];
      X[MinRow, Col]:= X[MaxRow, Col];
      X[MaxRow, Col]:= Temp;
    end;
end;
 
var
  X: TMatrix;
  MinRow, MaxRow: Integer;
 
begin
  Randomize;
  MakeMatrix(X);
  PrintMatrix(X, MinRow, MaxRow);
  ExchangeMatrixRows(X, MinRow, MaxRow);
  PrintMatrix(X, MinRow, MaxRow);
 
  ReadLn;
end.Alt + F5:
 
 
  -2.00 -1.87  1.44 -1.19 -0.91  0.69 -0.73 -1.35  RowSum =   -5.92
 -0.51 -0.30 -1.67 -0.10 -1.72  1.36 -1.76 -0.83  RowSum =   -5.52
  1.67 -0.53  1.10 -0.69  0.79  1.38  0.87 -0.77  RowSum =    3.82
 -1.35 -0.68 -0.14 -1.01  1.30 -0.88 -0.07 -1.40  RowSum =   -4.24
  1.50 -0.85  1.09  1.91 -0.03  1.55  1.31 -1.92  RowSum =    4.56
 -1.44 -1.43  0.00 -1.91  0.37 -1.96  1.10  0.60  RowSum =   -4.66
  1.08  0.83  0.23 -1.18  0.72  0.37  1.82  0.58  RowSum =    4.46
  1.99 -1.02  0.70 -0.82 -1.66  1.09 -0.02  1.53  RowSum =    1.80
  0.95 -5.85  2.76 -4.99 -1.12  3.59  2.52 -3.57 <--- Sum of Cols
 Total sum: -5.71; MinRow: 0 (-5.92); MaxRow: 4 (4.56)
 
  1.50 -0.85  1.09  1.91 -0.03  1.55  1.31 -1.92  RowSum =    4.56
 -0.51 -0.30 -1.67 -0.10 -1.72  1.36 -1.76 -0.83  RowSum =   -5.52
  1.67 -0.53  1.10 -0.69  0.79  1.38  0.87 -0.77  RowSum =    3.82
 -1.35 -0.68 -0.14 -1.01  1.30 -0.88 -0.07 -1.40  RowSum =   -4.24
 -2.00 -1.87  1.44 -1.19 -0.91  0.69 -0.73 -1.35  RowSum =   -5.92
 -1.44 -1.43  0.00 -1.91  0.37 -1.96  1.10  0.60  RowSum =   -4.66
  1.08  0.83  0.23 -1.18  0.72  0.37  1.82  0.58  RowSum =    4.46
  1.99 -1.02  0.70 -0.82 -1.66  1.09 -0.02  1.53  RowSum =    1.80
  0.95 -5.85  2.76 -4.99 -1.12  3.59  2.52 -3.57 <--- Sum of Cols
 Total sum: -5.71; MinRow: 4 (-5.92); MaxRow: 0 (4.56) Можешь тащить преподу и сдавать! ГЫГЫГЫГЫ
   Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 20 октября 2011, 20:12 [#16]: Цитата (min@y™): Результат Random(x) = целое число в диапазоне 0..X - 1.Ты меня пытался чем-то удивить? 
 Или поциэнт не осиливает даже [0..1) на N умножить?
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | min@y™ (статус: Доктор наук), 20 октября 2011, 20:37 [#17]: Цитата (bugmenot): Ты меня пытался чем-то удивить?Или поциэнт не осиливает даже [0..1) на N уиножить?
 Твои слова?
 
 Цитата (bugmenot): Формула же: From + Random(To - From)
 
 Как по твоей формуле получить вещественные числа в диапазоне [-N...N)?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 20 октября 2011, 20:56 [#18]: Цитата (min@y™): Как по твоей формуле получить вещественные числаС минимальными изменениями. Могу покормить с ложечки, но за напиток. виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | min@y™ (статус: Доктор наук), 20 октября 2011, 21:05 [#19]: Цитата (bugmenot): С минимальными изменениями. Ээээээ, нэт, дарагой! Мнэ интэрэсна имэнно эта формула, шайтанама!
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | SHEV (статус: Посетитель), 21 октября 2011, 11:17 [#20]:Эта формула работает тогда когда ,изначально исходная матрица просто забита случайными числами потом  перевожу ее в одномерный массив и тогда получается змейка, а что на с чет рандома почему так (по тому что если вводить другую формулу  числа после запятой обнуляются) вот примерно так: 
 if i mod 2=1 then a[i,j]:=b[(i-1)*n+j]
 змейка
 else a[i,j]:=b[i*n-j+1]
 
 до змейки уже забита матрица рандомом
 просто предод говорит что это через жо.. , сделай проще говорит
 |  Страницы: [1] [2] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |