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

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

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

Автор: studentRU 16.12.2008 0:09

Доброго всем времени суток.

Помогите пожалуйста решить 2 задачи на массивы. (Turbo Pascal)

1. Дан массив D(n), n - кратно 3. Поменять местами 1 и 3 элементы, 4 и 6, 7 и 9 и т.д.

-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------

2. Добавить по элементу после каждого второго элемента.

Спасибо...

Автор: Айра 16.12.2008 0:45

по первой:


for i:=1 to n do
begin
t:=a[i];
a[i]:=a[i+2];
a[i+2]:=t;
end;

Автор: studentRU 16.12.2008 1:02

Цитата(Айра @ 15.12.2008 20:45) *

по первой:

for i:=1 to n do
begin
t:=a[i];
a[i]:=a[i+2];
a[i+2]:=t;
end;



через (for) здесь не получается. Я думаю здесь надо через (while) или (repeat)... из-за условия!

Автор: Айра 16.12.2008 1:13

тьфу, точно.. извиняюсь.. сейчас переделаю)

добавлено:


i:=1;
while i<=n-2 do
begin
t:=a[i];
a[i]:=a[i+2];
a[i+2]:=t;
inc(i,3);
end;


Автор: studentRU 16.12.2008 1:37

Цитата(Айра @ 15.12.2008 21:13) *

тьфу, точно.. извиняюсь.. сейчас переделаю)

добавлено:

i:=1;
while i<=n-2 do
begin
t:=a[i];
a[i]:=a[i+2];
a[i+2]:=t;
inc(i,3);
end;




Я уверен что все верно!, но не могли бы вы мне расписать всю программу, а то я мучаюсь.....
Я полагаю что это не составит много времени, а мне поможет...
Спасибо.

Автор: samec 16.12.2008 1:51

ох и ленивые студенты пошли smile.gif


program mas;
const n=21;
var
a:array[1..n] of integer;
i,t:integer;
begin

writeln('Первоначальный массив: ');
for i:=1 to n do
begin
a[i]:=i;
write(a[i]:3);
end;
writeln;
i:=1;
while i<=n-2 do
begin
t:=a[i];
a[i]:=a[i+2];
a[i+2]:=t;
inc(i,3);
end;

writeln('Измененный массив: ');
for i:=1 to n do
write(a[i]:3);
readln;
end.


Автор: studentRU 16.12.2008 2:12

Хочу выразить огромную благодарность! Айре, Самцу за то что уделили немного времени, внимания, и терпения...)))
Вторую задачку попробую сам как ни будь.
Спасибо еще раз!!!
P.S. про студентов вы правы)))))

Автор: samec 16.12.2008 2:41

со второй задачкой у меня вот что получилось:


program mas;
const n=14;
var
a:array[1..n] of integer;
i,t,j,k:integer;
begin
{заполняем первоначальный массив}
writeln('Первоначальный массив: ');
for i:=1 to n div 2 do
begin
a[i]:=i;
write(a[i]:3);
end;
writeln;
{выполняем условие задачи}
{инициализация счетчиков}
i:=0; {очередной элемент массива}
t:=(n div 2); {всего элементов в массиве}
j:=0; {отвечает за каждый второй}

while i <= t do
begin
inc(j); {увеличиваем счетчики}
inc(i);

if(j=3) then {если два элемента миновали, то...}
begin
inc(t); {увеличиваем общее кол-во элементов}
for k:=t downto i+1 do {сдвигаем элементы массива}
a[k]:=a[k-1];
a[i]:=0; {вставляем новый эл-т}
j:=0;
end;
end;

writeln('Полученный массив');
for i:=1 to t do
write(a[i]:3);
readln;
end.


Автор: studentRU 16.12.2008 2:49

Спасибо всем огроиное!!!!! отдельное спасибо за вторую задачу Самцу!
good.gif good.gif good.gif good.gif good.gif good.gif good.gif

Автор: volvo 16.12.2008 3:20

Цитата
через (for) здесь не получается.
Как это не получается? Очень даже получается:

  for i := 0 to (n div 3) - 1 do begin
t := a[3*i + 1];
a[3*i + 1] := a[3*i+3];
a[3*i + 3] := t;
end;