Народ, помогите плиз, надо решить задачку, а в матрицах я нуб (во всяком случае на Паскале). Даны действительные числа а1, ..,а64; Получить действительную квалратную матрицу порядка 8, элементами которой являются числа а1,...а64, расположенные по схеме:
Kos
24.12.2005 4:01
по схеме: ............. :............ .............: :............ .............: :............>
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, спасибо большое, вы единственный форум который не выпендривается, загружая непонятными определениями, а реально помогает, спасибо ещё раз.
А у меня прога не работает !
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;
Если бы автор (то есть ты же, судя по IP) не изгалялся в ответах типа "сам-себе", а привел нормально матрицу, которую он хочет видеть как результат, можно было бы даже сказать, устроит его какой-нибудь из приведенных вариантов, или нет... А так - гадание на кофейной гуще...
Negativka
25.12.2005 21:43
Цитата(volvo @ 24.12.2005 17:29)
Negativka, вот результат выполнения твоего цикла: Если бы автор (то есть ты же, судя по IP) не изгалялся в ответах типа "сам-себе", а привел нормально матрицу, которую он хочет видеть как результат, можно было бы даже сказать, устроит его какой-нибудь из приведенных вариантов, или нет... А так - гадание на кофейной гуще...
Да, с одного и того же компа(админ. клуба), точнее с одного и того же клуба, где работает автор и я, помогать конкретно я ему не буду, потому что он когда-то мне не помог с мат.анализом, а потому я ему не помогу с информатикой , увидит сообщение поймёт кто писал, нас не так уж и много там работает !
Kos
27.12.2005 0:35
Цитата(Kos @ 24.12.2005 0:01)
по схеме: ............. :............ .............: :............ .............: :............>
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, ты гений, спасибо всем за помощь в зачётной работе , если бы не вы я бы .
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, с чего бы это
Цитата
должна вылелать с ошибкой
?
Цикличность байта сохраняется, так что все будет работать... А вот так - не будет (на 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, а в чем же тут различие то ?!
i,r,c,T : byte;
i,r,c: integer; T : byte;
имею в виду T что там байт, что тут ...
volvo
27.12.2005 14:47
Я знал, что ты заинтересуешься... Компилятору, грубо говоря, начхать, это 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
generic zithromax over the count
19.12.2021 13:45
Cialis Nez Bouche
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.