|
Вопрос # 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;
- Begin
- clrscr;
- randomize;
- for i:=1 to n do
- begin
- for j:=1 to n do
- begin
- a[i,j]:= -2+random(4)+random;
- 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.
 |
Вопрос задал: 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] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|