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

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

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

Автор: TORETO 8.12.2007 16:34

Программа: вводится массив. нужно циклически сдвинуть его на 2 позиции влево.
Проблема: через random вещественные числа вводятся как-то непонятно(как сделать так, чтобы массив сначала выводился как есть в строку, а потом сдвинутый на другой строке?) Хелп


program pila;
uses crt;
const
n=10;
var
x:array[1..n] of real;
i:integer;
begin
clrscr;
randomize;
for i:=1 to n do begin
x[i]:=random(100)-50;
write(x[i]:6:2);
end;
writeln;
for i:=1 to n-2 do begin
x[i]:=x[i+2];
write(x[i]:6:2);
end;
readkey;
end.



Проблема в этой строке:

x[i]:=random(100)-50;
write(x[i]:6:2);



P.S. Массив обязательно вещественный(может его не через random задавать? тогда как сделать так чтобы элементы печатались в одну строку,а не на следующей?)

Автор: Ozzя 8.12.2007 16:38

Цитата
вводится массив. нужно циклически сдвинуть его на 2 позиции влево.

Ты задачу не понял. Нужно не напечатать, а сдвинуть элементы массива.
Было
1 2 3 4 5 6
Стало
5 6 1 2 3 4

Автор: TORETO 8.12.2007 17:01

Цитата(Ozzя @ 8.12.2007 12:38) *

Ты задачу не понял. Нужно не напечатать, а сдвинуть элементы массива.
Было
1 2 3 4 5 6
Стало
5 6 1 2 3 4

Нет
Было
1 2 3 4 5 6
Стало
3 4 5 6

Именно так, я у препода спрашивал

Автор: Ozzя 8.12.2007 17:10

А влево lol.gif
Виноват.
Тогда так
Было
1 2 3 4 5 6
Стало
3 4 5 6 1 2

Циклически означает, что элементы, выходящие за пределы границ, передвигаются в начало (конец) последовательности.

Автор: TORETO 8.12.2007 17:58

А как тогда так сделать, как ты говоришь?Как код будет выглядеть?

Автор: Ozzя 8.12.2007 18:05

http://forum.pascal.net.ru/index.php?showtopic=15786&hl=циклический+сдвиг

Автор: TORETO 11.12.2007 22:04


program gremmi;
uses crt;
const
n=10;
m=2;
var
x:array[1..n] of integer;
y:array[1..n] of integer;
i:integer;
begin
clrscr;
randomize;
for i:=1 to n do begin
x[i]:=random(100);
write(x[i],' ');
end;
writeln;
for i:=1 to m do
y[i]:=x[n-m+i];
for i:=n-m downto 1 do
x[i+m]:=x[i];
for i:=1 to m do
x[i]:=y[i];
for i:=1 to n do
write(x[i],' ');
readln;
end.



Вот примерно так, только двигает не на 2 влево, а вправо.Как сделать влево?