Одномерные массивы

Автор работы: Пользователь скрыл имя, 26 Октября 2011 в 20:44, лекция

Краткое описание

Массив — это структура данных, которую можно рассматривать как набор переменных одинакового типа, имеющих общее имя. Массивы бывают одномерные и многомерные. Доступ к элементам массива осуществляется по индексу.
Массив в программах должен быть объявлен. Это делается следующим образом:
<имя>: array [<н_индекс>..<в_индекс>] of <тип>;

Содержимое работы - 1 файл

Массивы.doc

— 295.00 Кб (Скачать файл)

Листинг 14.

var k,n,i,r: byte;

    new: LongInt;

    d,q: array [-2..100] of LongInt;

BEGIN

  write('Введите начальное кол-во роботов и кол-во лет -> ');

  readln(k,n);

  write('Всего роботов: ');

  if k<3 then

    if n in [0,1,2] then write(k) else write ('0')

       else

         begin

           d[-2]:=0; d[-1]:=0; d[0]:=k; q[0]:=k;

           for i:=1 to n do

             begin

               r:=q[i-1] mod 5;

               new:=q[i-1] div 5*9+r;

               if r in [3,4] then inc(new,5-r);

               d[i]:=new;

               q[i]:=q[i-1]+new-d[i-3]

             end;

           write(q[n])

         end;

END.

Пример 15. Даны натуральные числа А1, …, А10. Предположим, что имеется 10 видов монет достоинством А1, …, А10. Обозначим через N число способов, которыми можно выплатить сумму K этими монетами, то есть — это число решений уравнения A1X+ … + A10X10 K, где Xi может принимать целые неотрицательные значения. Требуется найти N [32].

Листинг 15.

label 1;

var a,b,c: array [1..10] of integer;

    i,j,n,s,k: integer;

BEGIN

  write('Введите  сумму -> ');

  readln(k);

  for i:=1 to 10 do

    begin

      write('a[',i,'] = ');

      readln(a[i])

    end;

  for i:=1 to 10 do

    b[i]:=k div a[i];

  n:=0;

  for i:=1 to 10 do

    c[i]:=0;

  1: s:=0;

  for i:=1 to 10 do

   s:=s+a[i]*c[i];

  if s=k then inc(n);

  for i:=10 downto 1 do

    begin

      if c[i]=b[i] then

        for j:=i to 10 do

          c[j]:=0 else

            begin

              c[i]:=c[i]+1;

              goto 1

            end;

    end;

  writeln('N = ',n);

END.

Пример 16. Составить программу для вычисления полинома = 2x– x– 4x– 5x+ 6+ 1, используя формулу Горнера [5].

Формула Горнера для полинома n-й степени a1xa2xn–1 + … + anan+1 выглядит следующим образом:

      = (…((a1a2)x + a3)x + … + an)x + an+1

Листинг 16.

var a: array [1..10] of real;

    md,i: integer;

    x,y: real;

BEGIN

  write('Введите  старшую степень полинома

         (она не должна быть больше 9) -> ');

  readln(md);

  writeln('Введите  коэффициенты полинома

           (начиная с коэффициента при

           свободном члене) ');

  for i:=1 to md do

    read(a[i]);

  y:=a[1];

  for i:=2 to md do

    begin

      x:=i;

      y:=y*x+a[i]

    end;

  writeln(y:8:6);

END.

Пример 17. Заданный массив А сдвинуть циклически на m элементов вправо [7].

При циклическом  сдвиге вправо выталкиваемые элементы с конца массива заполняют  освобождающиеся места в начале массива. Например, при сдвиге вправо на 3 разряда массива А (1, 2, 3, 4, 5, 6, 7) получаем массив А (5, 6, 7, 1, 2, 3, 4).

Рассмотрим два варианта. В первом варианте используется дополнительный массив того же размера, что и исходный. Во втором варианте используется дополнительная память только для одного элемента массива.

Листинг 17.1.

const n=5;

var a,b: array [1..n] of integer;

    i,c,k: integer;

BEGIN

  write('На сколько элементов сдвигать вправо? -> ');

  readln(c);

  for i:=1 to n do

    begin

      a[i]:=random(20)-3;

      write(a[i]:4)

    end;

    writeln;

  for i:=1 to n do

    begin

      k:=(i+c-1) mod n+1;

      b[k]:=a[i]

    end;

  for i:=1 to n do

    write(b[i]:4)

END.

Листинг 17.2.

const n=5;

var a: array [1..n] of integer;

    i,c,k,j: integer;

BEGIN

  write('На сколько сдвигать вправо -> ');

  readln(c);

  for i:=1 to n do

    begin

      a[i]:=random(20)-3;

      write(a[i]:4)

    end;

    writeln;

  for i:=1 to c do

    begin

      k:=a[n];

      for j:=n downto 2 do

        a[j]:=a[j-1];

        a[1]:=k

    end;

  for i:=1 to n do

    write(a[i]:4);

END.

Пример 18. Билет с шестизначным цифровым номером считается «счастливым», если сумма трех старших цифр совпадает с сумой трех младших цифр. В предположении, что в билетной кассе находится миллион билетов с номерами от 000000 до 999999, надо определить количество потенциально осчастливленных пассажиров [18].

Можно организовать шесть вложенных циклов, в каждом из которых перебирается очередная цифра номера. В самом внутреннем цикле можно проверять суммы старших и младших цифр номера и вести подсчет счастливых билетов, но такая проверка нерациональна. Гораздо меньше операций можно проделать, если подсчитать, сколько раз сумма трех цифр равна 0, 1, 2, …, 27.

Листинг 18.

const m=9;

var b: array [0..3*m] of integer;

    a1,a2,a3,k: integer;

    n: longint;

BEGIN

  for a1:=0 to m do

    for a2:=0 to m do

      for a3:=0 to m do

        inc(b[a1+a2+a3]);

  for k:=0 to 3*m do

    n:=n+b[k]*b[k];

  writeln('Количество счастливых билетов = ',n);

END.

В результате получим ответ: 55 252 билета.

 

Список  студентов

1 Тимер-Булатов  Б.
2 Щепинский Д.
3 Тиш Д.
4 Карпишин Н.
5 Омельченко А.
6 Мирза С.
7 Миховская Т.
8 Будников М.
9 Харченко Б.
10 Соколик Б.
11 Козлов А.

Каждому студенту необходимо выполнить по 10 заданий

 

Формула для расчета варианта:

N + (K - 1)*11 + 686, где

N – номер студента по списку (1..11),

K – номер выполняемого по счету задания (1..10)

______________________________________________________________________

Задания

 

687. Заполнить массив из восьми элементов следующими значениями: первый элемент массива равен 37, второй — 0, третий — 50, четвертый — 46, пятый — 34, шестой — 46, седьмой — 0, восьмой — 13.

688. Заполнить массив из десяти элементов значениями, вводимыми с клавиатуры в ходе выполнения программы.

689. Заполнить массив из пятнадцати элементов случайным образом:

а) вещественными значениями, лежащими в диапазоне от 0 до 1;

б) вещественными значениями х (22 ≤ х < 23);

в) вещественными значениями х (0 ≤ х < 10);

г) вещественными значениями х (–50 ≤ х < 50);

д) целыми значениями, лежащими в диапазоне от 0 до 10 включительно.

690. Массив предназначен для хранения значений роста двенадцати человек. С помощью датчика случайных чисел заполнить массив целыми значениями, лежащими в диапазоне от 163 до 190 включительно.

691. Заполнить массив из двенадцати элементов следующим образом: 1, 2, ..., 12.

692. Заполнить массив из двадцати элементов следующим образом: 20, 19, ..., 1.

693. Заполнить массив из восьми элементов таким образом, чтобы значения элементов при просмотре массива слева направо образовывали:

а) убывающую последовательность;

б) возрастающую последовательность.

694. Заполнить массив:

а) десятью первыми членами арифметической прогрессии (первый член прогрессии — а, ее разность — р);

б) двадцатью первыми членами геометрической прогрессии (первый член прогрессии — а, ее знаменатель — z);

в) двенадцатью первыми членами последовательности Фибоначчи (последовательности, в которой первые два члена равны 1, а каждый следующий равен сумме двух предыдущих).

695. Используя датчик случайных чисел, заполнить массив из двадцати элементов неповторяющимися числами.

696. Дано натуральное число ≤ 999999. Заполнить массив его цифрами, расположенными в обратном порядке (первый элемент равен последней цифре, второй — предпоследней и т. д.). Элементы массива, являющиеся цифрами числа n, вывести на экран.

697. Заполнить массив:

а) двадцатью первыми натуральными числами, делящимися нацело на 13 или на 17 и большими 300;

б) тридцатью первыми простыми числами.

698. Составить программу вывода на экран любого элемента массива.

Информация о работе Одномерные массивы