Народ, помогите плиз, надо решить задачку, а в матрицах я нуб (во всяком случае на Паскале).
Даны действительные числа а1, ..,а64;
Получить действительную квалратную матрицу порядка 8, элементами которой являются числа а1,...а64, расположенные по схеме:
по схеме:
.............
:............
.............:
:............
.............:
:............>
Схема у тебя конечно крутая ... может так ?
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.
Negativka, вот результат выполнения твоего цикла:
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.
Volvo, ты гений, спасибо всем за помощь в зачётной работе , если бы не вы я бы .
только тебе вроде надо было с массивом это все проделать ? Вот по примеру проги 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.
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.
klem4, с чего бы это
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;
Volvo, а в чем же тут различие то ?!
i,r,c,T : byte;
i,r,c: integer;
T : byte;
Я знал, что ты заинтересуешься... Компилятору, грубо говоря, начхать, это 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
Cialis Nez Bouche