Консультация № 180810
16.11.2010, 23:18
114.52 руб.
0 4 2
Уважаемые эксперты! Помогите с решением этой задачи по программированию.
Работаю под Windows Xp на Turbo Pascal.
Вот задача.
Даны действительные числа а1, а2, ...а64. Получить действительную квадратную матрицу порядка 8, элементами которой являются числа а1, а2, ...а64, расположенные в соответствии с рисунком ( прикреплен).

Обсуждение

Неизвестный
16.11.2010, 23:26
общий
Ещё будет одна просьба, к основным моментам программы дайте пожалуйста пояснения.
Вот прямая ссылка на фото задания
http://imgsrc.ru/artuxa/20625049.html
Прикрепленные файлы:
78860e992e2ac23a4709fcfe20610405.jpg
Неизвестный
17.11.2010, 00:08
общий
это ответ
Здравствуйте, Маша Гришина!
Программа. Проверял во FreePascal.
Код:
program P_180810;

const
{ Размерность}
DIM=8;

type
{ Тип для матрицы }
TMatrix=array[1..8,1..8]of Double;

var
Matrix:TMatrix;
I,J,C,H:Integer;
D:Double;

begin
I:=0;
H:=1;
{ Заполняем матрицу в порядке согласно условия }
for J:=1 to DIM do begin
C:=DIM;
while C>0 do begin
I:=I+H;
Write('A[',I,',',J,']=');
ReadLn(D);
Matrix[I][J]:=D;
Dec(C);
end;
I:=I+H;
H:=-H;
end;
{ Выводим }
WriteLn('Matrix:');
for I:=1 to DIM do begin
for J:=1 to DIM do begin
Write(Matrix[I][J]:7:3,' ');
end;
WriteLn;
end;
ReadLn;
end.

Пример работы:
Код:
/home/.../Pascal/P_180810
A[1,1]=1
A[2,1]=2
A[3,1]=3
A[4,1]=4
A[5,1]=5
A[6,1]=6
A[7,1]=7
A[8,1]=8
A[8,2]=9
A[7,2]=10
A[6,2]=11
A[5,2]=12
A[4,2]=13
A[3,2]=14
A[2,2]=15
A[1,2]=16
A[1,3]=17
A[2,3]=18
A[3,3]=19
A[4,3]=20
A[5,3]=21
A[6,3]=22
A[7,3]=23
A[8,3]=24
A[8,4]=25
A[7,4]=26
A[6,4]=27
A[5,4]=28
A[4,4]=29
A[3,4]=30
A[2,4]=31
A[1,4]=32
A[1,5]=33
A[2,5]=34
A[3,5]=35
A[4,5]=36
A[5,5]=37
A[6,5]=38
A[7,5]=39
A[8,5]=40
A[8,6]=41
A[7,6]=42
A[6,6]=43
A[5,6]=44
A[4,6]=45
A[3,6]=46
A[2,6]=47
A[1,6]=48
A[1,7]=49
A[2,7]=50
A[3,7]=51
A[4,7]=52
A[5,7]=53
A[6,7]=54
A[7,7]=55
A[8,7]=56
A[8,8]=57
A[7,8]=58
A[6,8]=59
A[5,8]=60
A[4,8]=61
A[3,8]=62
A[2,8]=63
A[1,8]=64
Matrix:
1.000 16.000 17.000 32.000 33.000 48.000 49.000 64.000
2.000 15.000 18.000 31.000 34.000 47.000 50.000 63.000
3.000 14.000 19.000 30.000 35.000 46.000 51.000 62.000
4.000 13.000 20.000 29.000 36.000 45.000 52.000 61.000
5.000 12.000 21.000 28.000 37.000 44.000 53.000 60.000
6.000 11.000 22.000 27.000 38.000 43.000 54.000 59.000
7.000 10.000 23.000 26.000 39.000 42.000 55.000 58.000
8.000 9.000 24.000 25.000 40.000 41.000 56.000 57.000
2
Меня порадовала оперативность. Думала что помощь буду ждать неделю....<br>Программа в турбо паскале не заработала.<br>Компилятор пишет ошибку.<br>Error 116: Must be in 8087 mode to compile this.<br>Мне больше понравился второй ответ от Andrew Kovalchuk.
Неизвестный
17.11.2010, 00:41
общий
это ответ
Здравствуйте, Маша Гришина!
Предлагаемое решение проверялось в Turbo Pascal 7.0
Код:
Uses
Crt;
Const
MaxRange = 8; {размер матрицы}
SqrMaxRange = MaxRange * MaxRange; {количество элементов в квадратной матрице}
Var
sAr: Array[1..SqrMaxRange] of Real; {исходный массив элементов}
Ar: Array[1..MaxRange, 1..MaxRange] of Real; {результирующий массив}
i, r, c: Byte; {счетчики}
begin
ClrScr; {очистка экрана}
Randomize; {инициализация генератора псевдослучайных чисел}

{initialize varialble}
for i := 1 to SqrMaxRange do
begin {заполнение исходного массива случайной последовательностью действительных чисел}
sAr[i] := Random;
Write(sAr[i]:5:2); {с выводом элементов массива на экран}
end;
writeln;

{solving}
for r := 1 to MaxRange do
begin {последовательно пройдем по всем строкам квадратной матрицы}
for c := 1 to MaxRange do
begin {и заполним каждый элемент строки вычисляя индекс следующим образом}
if odd(c) then {для нечетных номеров колонки}
Ar[r, c] := sAr[(c-1) * MaxRange + r]
else {для четных номеров}
Ar[r, c] := sAr[c * MaxRange - r + 1];
Write(Ar[r, c]:5:2);
end;
WriteLn;
end; {что и даст такую последовательность, которая изображена на рисунке}

readkey; {ожидать нажатия пользователем любой клавиши}
end.
5
Спасибо вам огромное.<br>Понравилось: оперативность, подробные пояснения,генератор псевдослучайных чисел!!!!<br>Всё сразу заработало.
Неизвестный
19.11.2010, 09:39
общий
Компилятор пишет ошибку.
Error 116: Must be in 8087 mode to compile this.
Для этого достаточно в настройках компилятора было включить Numeric Processing 8087/80287 Mode.
Форма ответа