Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Матрицы

Автор: Kos 24.12.2005 3:58

Народ, помогите плиз, надо решить задачку, а в матрицах я нуб blink.gif (во всяком случае на Паскале).
Даны действительные числа а1, ..,а64; dry.gif
Получить действительную квалратную матрицу порядка 8, элементами которой являются числа а1,...а64, расположенные по схеме:

Автор: Kos 24.12.2005 4:01

по схеме:
.............
:............
.............:
:............
.............:
:............> smile.gif

Автор: klem4 24.12.2005 14:27

Схема у тебя конечно крутая ... может так ?

uses crt;

const
n=16;

var
a : array[1..n] of integer;
b : array[1..round(sqrt(n)), 1..round(sqrt(n))] of integer;
i,r,c : byte;
begin
clrscr;
r := 1;
c := 0;
for i := 1 to n do begin
readln(a[i]);
inc(c );
if c > (round(sqrt(n))) then begin
c := 1;
inc(r );
end;
b[r,c] := a[i];
end;

writeln;

for r := 1 to round(sqrt(n)) do begin
writeln;
for c := 1 to round(sqrt(n)) do write(b[r,c]:3,' ');
end;

readln


end.

Автор: Kos 24.12.2005 19:17

Цитата(klem4 @ 24.12.2005 10:27) *
может так ?

Klem4, спасибо большое, вы единственный форум который не выпендривается, загружая непонятными определениями, а реально помогает, спасибо ещё раз.

Автор: Prime 24.12.2005 20:44

Цитата(Kos @ 24.12.2005 15:17) *

Klem4, спасибо большое, вы единственный форум который не выпендривается, загружая непонятными определениями, а реально помогает, спасибо ещё раз.

А у меня прога не работает unsure.gif !

Автор: Negativka 24.12.2005 21:17

Цитата(klem4 @ 24.12.2005 10:27) *

Схема у тебя конечно крутая ... может так ?


Нет, скорее надо ввести етот цикл:
Код
i:=1;for J:=1 to 8 do if Odd(J) then for k:=1 to 8 do begin A[j, k]:=i; i:=1+1; end else for k:=8 to 1 do begin A[j, k]:=i; i:=1+1; end;


Если я не ошибаюсь конечно smile.gif .

Автор: volvo 24.12.2005 21:29

Negativka, вот результат выполнения твоего цикла:

Цитата
1 2 2 2 2 2 2 2
0 0 0 0 0 0 0 0
2 2 2 2 2 2 2 2
0 0 0 0 0 0 0 0
2 2 2 2 2 2 2 2
0 0 0 0 0 0 0 0
2 2 2 2 2 2 2 2
0 0 0 0 0 0 0 0


Если бы автор (то есть ты же, судя по IP) не изгалялся в ответах типа "сам-себе", а привел нормально матрицу, которую он хочет видеть как результат, можно было бы даже сказать, устроит его какой-нибудь из приведенных вариантов, или нет... А так - гадание на кофейной гуще...

Автор: Negativka 25.12.2005 21:43

Цитата(volvo @ 24.12.2005 17:29) *

Negativka, вот результат выполнения твоего цикла:
Если бы автор (то есть ты же, судя по IP) не изгалялся в ответах типа "сам-себе", а привел нормально матрицу, которую он хочет видеть как результат, можно было бы даже сказать, устроит его какой-нибудь из приведенных вариантов, или нет... А так - гадание на кофейной гуще...

Да, с одного и того же компа(админ. клуба), точнее с одного и того же клуба, где работает автор и я, помогать конкретно я ему не буду, потому что он когда-то мне не помог с мат.анализом, а потому я ему не помогу с информатикой mega_chok.gif , увидит сообщение поймёт кто писал, нас не так уж и много там работает dry.gif !

Автор: Kos 27.12.2005 0:35

Цитата(Kos @ 24.12.2005 0:01) *

по схеме:
.............
:............
.............:
:............
.............:
:............> smile.gif

точная схема:
а8 а7 а6 а5 а4 а3 а2 а1
а9 а10 а11 а12 а13 а14 а15 а16
а24 а23 а22 а21 а20 а19 а18 а17
а25 а26 а27 а28 а29 а30 а31 а32
а40 а39 а38 а37 а36 а35 а34 а33
а41 а42 а43 а44 а45 а46 а47 а48
а56 а55 а54 а53 а52 а51 а50 а49
а57 а58 а59 а60 а61 а62 а63 а64
а72 а71 а70 а69 а68 а67 а66 а65
а73 а74 а75 а76 а77 а78 а79 а80
а88 а87 а86 а85 а84 а83 а82 а81
А Negativka, уже врядли сядит за это кресло , полез туда куда его не просили.

Автор: volvo 27.12.2005 0:49

const
n = 8;
var
a: array[1 .. n, 1 .. n] of integer;
i, j, k, T, count: integer;
begin
T := 1;
count := 1;
for i := 1 to n do begin
T := - T;
if odd(i) then j := n else j := 1;
for k := 1 to n do begin
a[i, j] := count;
inc(count); j := j + T;
end;
end;

for i := 1 to n do begin
for j := 1 to n do
write(a[i, j]:4);
writeln;
end;

end.

Автор: Kos 27.12.2005 2:06

Volvo, ты гений, спасибо всем за помощь в зачётной работе smile.gif , если бы не вы я бы mega_chok.gif smile.gif .

Автор: klem4 27.12.2005 2:56

только тебе вроде надо было с массивом это все проделать ? Вот по примеру проги volvo сделал, можно мне кажется еще упростить .. попробуй сам сделать

 uses crt;

const
n=16;
var
a : array[1..n] of integer;
b : array[1..round(sqrt(n)), 1..round(sqrt(n))] of integer;
i,r,c,T : shortint;
begin

clrscr;

for i := 1 to n do readln(a[i]);

r := 1;
c := round(sqrt(n));
T := -1;

for i := 1 to n do begin

if (c>round(sqrt(n))) or (c<1) then begin
inc( r );
T := -T;
inc(c,T);
end;

b[r,c] := a[i];

inc(c,T);

end;

writeln;

for r := 1 to round(sqrt(n)) do begin
writeln;
for c := 1 to round(sqrt(n)) do write(b[r,c]:3,' ');
end;

readln

end.


кстати, вот таже самая программа, но в ней есть отличие в одной строчке, прикотором правильно работать программа ну ни как не может и по идее должна вылелать с ошибкой, но отрабатывает на ура, компилятор соответственно FPC ;)

uses crt;

const
n=16;
var
a : array[1..n] of integer;
b : array[1..round(sqrt(n)), 1..round(sqrt(n))] of integer;
i,r,c,T : byte;
begin

clrscr;

for i := 1 to n do readln(a[i]);

r := 1;
c := round(sqrt(n));
T := -1;

for i := 1 to n do begin

if (c>round(sqrt(n))) or (c<1) then begin
inc( r );
T := -T;
inc(c,T);
end;

b[r,c] := a[i];

inc(c,T);

end;

writeln;

for r := 1 to round(sqrt(n)) do begin
writeln;
for c := 1 to round(sqrt(n)) do write(b[r,c]:3,' ');
end;

readln

end.

Автор: volvo 27.12.2005 3:54

klem4, с чего бы это

Цитата
должна вылелать с ошибкой
? blink.gif

Цикличность байта сохраняется, так что все будет работать... А вот так - не будет (на Segmentation Fault нарвешься):
var
a : array[1..n] of integer;
b : array[1..round(sqrt(n)), 1..round(sqrt(n))] of integer;
i,r,c: integer;
T : byte;

Автор: klem4 27.12.2005 14:03

Volvo, а в чем же тут различие то ?! wacko.gif mega_chok.gif

   i,r,c,T : byte;


  i,r,c: integer;
T : byte;


имею в виду T что там байт, что тут ...

Автор: volvo 27.12.2005 14:47

smile.gif Я знал, что ты заинтересуешься... Компилятору, грубо говоря, начхать, это Byte или ShortInt... Главное - чтобы выполнялось следующее: или тип T предназначен для работы с отрицательными числами, тогда при любом типе C все сработает; или тип Т не предназначен для хранения отрицательных чисел, имеет размер в 1 байт, и тип С имеет размер в 1 байт... А все остальное (названия типов) - важно для тебя, а не для компилятора... Он все равно работает с битовым представлением числа...

Смотри, что происходит:
1) описание где ВСЕ переменные - Byte
допустим, C = 6 и T = -1 (ну, то есть 255, если эту ячейку считать как Byte)
C = C + T; { = 6 + 255 = 261, правда? Но ведь 261 состоит из 2-х байт = 256*1 + 5, старший байт потерялся, младший что содержит? C - T, как и положено }

2) описание, где C: Integer... А вот тут - проблемы... Старший байт-то не теряется, поэтому после первого же "вычитания" у тебя идет попытка обратиться к элементу, лежащему далеко за пределами массива... Результат я тебе привел выше: SF

blum.gif

Автор: generic zithromax over the count 19.12.2021 13:45

Cialis Nez Bouche