Автор работы: Пользователь скрыл имя, 26 Октября 2011 в 20:44, лекция
Массив — это структура данных, которую можно рассматривать как набор переменных одинакового типа, имеющих общее имя. Массивы бывают одномерные и многомерные. Доступ к элементам массива осуществляется по индексу.
Массив в программах должен быть объявлен. Это делается следующим образом:
<имя>: array [<н_индекс>..<в_индекс>] of <тип>;
Листинг 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 этими монетами, то есть N — это число решений уравнения A1X1 + … + 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. Составить программу для вычисления
полинома y = 2x8 – x6 – 4x5 – 5x2 + 6x
Формула
Горнера для полинома n-й степени
y = a1xn + a2xn–1 + … + anx +
y = (…((a1x + a2)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,
Рассмотрим два варианта. В первом варианте используется дополнительный массив того же размера, что и исходный. Во втором варианте используется дополнительная память только для одного элемента массива.
Листинг 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 | Козлов А. |
Формула для расчета варианта:
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. Дано натуральное число n ≤ 999999. Заполнить массив его цифрами, расположенными в обратном порядке (первый элемент равен последней цифре, второй — предпоследней и т. д.). Элементы массива, являющиеся цифрами числа n, вывести на экран.
697. Заполнить массив:
а) двадцатью первыми натуральными числами, делящимися нацело на 13 или на 17 и большими 300;
б) тридцатью первыми простыми числами.
698. Составить программу вывода на экран любого элемента массива.