Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Kos
Народ, помогите плиз, надо решить задачку, а в матрицах я нуб blink.gif (во всяком случае на Паскале).
Даны действительные числа а1, ..,а64; dry.gif
Получить действительную квалратную матрицу порядка 8, элементами которой являются числа а1,...а64, расположенные по схеме:
Kos
по схеме:
.............
:............
.............:
:............
.............:
:............> smile.gif
klem4
Схема у тебя конечно крутая ... может так ?

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
Цитата(klem4 @ 24.12.2005 10:27) *
может так ?

Klem4, спасибо большое, вы единственный форум который не выпендривается, загружая непонятными определениями, а реально помогает, спасибо ещё раз.
Prime
Цитата(Kos @ 24.12.2005 15:17) *

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

А у меня прога не работает unsure.gif !
Negativka
Цитата(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
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
Цитата(volvo @ 24.12.2005 17:29) *

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

Да, с одного и того же компа(админ. клуба), точнее с одного и того же клуба, где работает автор и я, помогать конкретно я ему не буду, потому что он когда-то мне не помог с мат.анализом, а потому я ему не помогу с информатикой mega_chok.gif , увидит сообщение поймёт кто писал, нас не так уж и много там работает dry.gif !
Kos
Цитата(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
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
Volvo, ты гений, спасибо всем за помощь в зачётной работе smile.gif , если бы не вы я бы mega_chok.gif smile.gif .
klem4
только тебе вроде надо было с массивом это все проделать ? Вот по примеру проги 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
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
Volvo, а в чем же тут различие то ?! wacko.gif mega_chok.gif

   i,r,c,T : byte;


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


имею в виду T что там байт, что тут ...
volvo
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
Cialis Nez Bouche
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.