Advertisement
Domerk

Лаба_массивы

Dec 22nd, 2012
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.42 KB | None | 0 0
  1. {дан массив б1, б2,…,б2н. Написать программу построения массивов х1, х2,…,хн и у1, у2,…, ун, элементы которых равны соответственно значениям: б1, б3, … , б 2н-1 и б2, б4, …,б2н.}
  2.  
  3. const {раздел объявления констант}
  4.         Izm=100;
  5. Type
  6.         Tind=1..Izm; {создаём тип «индекс», принимающий значение от 1 до 100}
  7.         Telem=integer;   {создаём тип «элемент»}
  8.         TMas=array[TInd] of Telem; {создаём тип «массив» с индексом типа «индекс» и элементами типа «элемент»}
  9. {=======================================}      
  10. procedure Vvod (var Mas: TMas; n: TInd); {Процедура заполнения массива значениями}
  11. var i: TInd; {объявляем локальную перемнную типа "Индекс"}
  12. begin
  13.      writeln ('Введите ', n, ' чисел'); {выводим на экран подсказку для пользователя}
  14.      for i:=1 to n do begin read (Mas[i]); {при помощи цикла заполняем массив}
  15.      end;
  16.      writeln; {пустой оператор ввода - переход на строку вниз}
  17. end;    
  18. {=======================================}  
  19. procedure Vivod (Mas: TMas; n: TInd); {процедура вывода массива на экран}
  20. var i: TInd; {Объявляем локальную переменную типа "индекс"}
  21. begin
  22.      for i:=1 to n do begin {при помощи цикла}
  23.      write (Mas[i], '   '); {выводим последовательно все элементы на экран, разделяя их пробелами}
  24.      end;
  25.      writeln;
  26. end;    
  27. {=======================================}  
  28. procedure Vivod2 (Mas: TMas; n: real); {специальная процедура вывода для результирующих массивов, нужна по той причине, что в языке Паскаль не реализовано как явное, так и неявное преобразование типа real в порядковые типы}
  29. var i: TInd; {объявляем локальную перемнную}
  30. begin
  31.      i:=1;
  32.      While (i<=n) do begin {поскольку размер результирующих массивов получается путём деления, то меняется структура цикла вывода - используем переменную i как счётчик}
  33.      write (Mas[i], '   '); {выводим элементы массива на экран, разделяя их пробелами}
  34.      i:=i+1; {увеличиваем переменную-счётчик}
  35.      end;
  36.      writeln; {}
  37. end;
  38. {=======================================}  
  39. procedure Changer (var Mas, Mas1, Mas2: TMas; n:Tind); {процедура, формирующая новые массивы согласно условию}
  40. var i, j, k: TInd; {объявляем локальные переменные типа "Индекс" - переменная i будет индексом основного массива, j - второго результирующего, k - первого результирующего}
  41. begin
  42.      Mas1[1]:=Mas[1]; {значение первой ячейки первого результирующего массива по условию всегда равно значению первой ячейки основного массива}
  43.      j:=1; {присваиваем индексу второго массива 2}
  44.      k:=2; {а индексу первого массива - 1}
  45.      for i:=2 to n do begin {со 2 до последней ячейки основного массива}
  46.          if (i mod 2)=0 then begin  {если индекс ячейки чётный}
  47.                Mas2[j]:=Mas[i];  {то присваиваем первой свободной ячейке второго результирующего массива значение из данной ячейки основного массива}
  48.                j:=j+1; {увеличиваем индекс}
  49.          end else begin {в противном случае}
  50.                Mas1[k]:=Mas[i]; {делаем всё то же самое для первого массива}
  51.                k:=k+1; {увеличиваем индекс}
  52.          end;
  53.      end;
  54. end;    
  55. {=======================================}          
  56. var
  57.         n:Tind; {объявляем переменные типа «индекс»}
  58.         Mas, Mas1, Mas2: Tmas; {матрица типа «массив»}
  59.         n1, n2: real; {дополнительные переменные для определения размеров результирующих массивов}
  60. begin
  61.      writeln ('Введите размер массива');
  62.      readln (n); {считываем размер основного массива}
  63.      Vvod (Mas, n); {заполняем основной массив}
  64.      Vivod (Mas, n); {выводим основной массив на экран}
  65.      Changer (Mas, Mas1, Mas2, n); {вызываем функцию, заполняющую результирующие массивы}
  66.      
  67.      if (n mod 2) = 0 then begin {вычиялем размер результирующих массивов - если длина основого массива чётна}
  68.            n1:=(n/2); {то размер каждого из результирующих массивов будет в 2 раза меньше размера первого}
  69.            n2:=(n/2); {производим соответсвующие присваивания}
  70.      end else begin    {в противном случае}
  71.            n1:=((n+1)/2);  {массив для элементов с нечётными номерами будет на 1 больше, чем массив для элементов с нечётными номерами}
  72.            n2:=((n-1)/2);  {производим соответсвующие присваивания}
  73.      end;
  74.      Writeln ('Первый массив:'); {выводим все полученные результаты на экран}
  75.      Vivod2 (Mas1, n1);
  76.      Writeln ('Второй массив:');
  77.      Vivod2 (Mas2, n2);
  78. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement