Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {дан массив б1, б2,…,б2н. Написать программу построения массивов х1, х2,…,хн и у1, у2,…, ун, элементы которых равны соответственно значениям: б1, б3, … , б 2н-1 и б2, б4, …,б2н.}
- const {раздел объявления констант}
- Izm=100;
- Type
- Tind=1..Izm; {создаём тип «индекс», принимающий значение от 1 до 100}
- Telem=integer; {создаём тип «элемент»}
- TMas=array[TInd] of Telem; {создаём тип «массив» с индексом типа «индекс» и элементами типа «элемент»}
- {=======================================}
- procedure Vvod (var Mas: TMas; n: TInd); {Процедура заполнения массива значениями}
- var i: TInd; {объявляем локальную перемнную типа "Индекс"}
- begin
- writeln ('Введите ', n, ' чисел'); {выводим на экран подсказку для пользователя}
- for i:=1 to n do begin read (Mas[i]); {при помощи цикла заполняем массив}
- end;
- writeln; {пустой оператор ввода - переход на строку вниз}
- end;
- {=======================================}
- procedure Vivod (Mas: TMas; n: TInd); {процедура вывода массива на экран}
- var i: TInd; {Объявляем локальную переменную типа "индекс"}
- begin
- for i:=1 to n do begin {при помощи цикла}
- write (Mas[i], ' '); {выводим последовательно все элементы на экран, разделяя их пробелами}
- end;
- writeln;
- end;
- {=======================================}
- procedure Vivod2 (Mas: TMas; n: real); {специальная процедура вывода для результирующих массивов, нужна по той причине, что в языке Паскаль не реализовано как явное, так и неявное преобразование типа real в порядковые типы}
- var i: TInd; {объявляем локальную перемнную}
- begin
- i:=1;
- While (i<=n) do begin {поскольку размер результирующих массивов получается путём деления, то меняется структура цикла вывода - используем переменную i как счётчик}
- write (Mas[i], ' '); {выводим элементы массива на экран, разделяя их пробелами}
- i:=i+1; {увеличиваем переменную-счётчик}
- end;
- writeln; {}
- end;
- {=======================================}
- procedure Changer (var Mas, Mas1, Mas2: TMas; n:Tind); {процедура, формирующая новые массивы согласно условию}
- var i, j, k: TInd; {объявляем локальные переменные типа "Индекс" - переменная i будет индексом основного массива, j - второго результирующего, k - первого результирующего}
- begin
- Mas1[1]:=Mas[1]; {значение первой ячейки первого результирующего массива по условию всегда равно значению первой ячейки основного массива}
- j:=1; {присваиваем индексу второго массива 2}
- k:=2; {а индексу первого массива - 1}
- for i:=2 to n do begin {со 2 до последней ячейки основного массива}
- if (i mod 2)=0 then begin {если индекс ячейки чётный}
- Mas2[j]:=Mas[i]; {то присваиваем первой свободной ячейке второго результирующего массива значение из данной ячейки основного массива}
- j:=j+1; {увеличиваем индекс}
- end else begin {в противном случае}
- Mas1[k]:=Mas[i]; {делаем всё то же самое для первого массива}
- k:=k+1; {увеличиваем индекс}
- end;
- end;
- end;
- {=======================================}
- var
- n:Tind; {объявляем переменные типа «индекс»}
- Mas, Mas1, Mas2: Tmas; {матрица типа «массив»}
- n1, n2: real; {дополнительные переменные для определения размеров результирующих массивов}
- begin
- writeln ('Введите размер массива');
- readln (n); {считываем размер основного массива}
- Vvod (Mas, n); {заполняем основной массив}
- Vivod (Mas, n); {выводим основной массив на экран}
- Changer (Mas, Mas1, Mas2, n); {вызываем функцию, заполняющую результирующие массивы}
- if (n mod 2) = 0 then begin {вычиялем размер результирующих массивов - если длина основого массива чётна}
- n1:=(n/2); {то размер каждого из результирующих массивов будет в 2 раза меньше размера первого}
- n2:=(n/2); {производим соответсвующие присваивания}
- end else begin {в противном случае}
- n1:=((n+1)/2); {массив для элементов с нечётными номерами будет на 1 больше, чем массив для элементов с нечётными номерами}
- n2:=((n-1)/2); {производим соответсвующие присваивания}
- end;
- Writeln ('Первый массив:'); {выводим все полученные результаты на экран}
- Vivod2 (Mas1, n1);
- Writeln ('Второй массив:');
- Vivod2 (Mas2, n2);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement