Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прграммирование и основы алгоритмизации. Прграм...doc
Скачиваний:
1
Добавлен:
23.09.2019
Размер:
839.68 Кб
Скачать

Var n,I,j:integer; s,y,sr:real; X: array [1..10,1..5] of real;

begin

readln(n); {число вкладов (до 10)}

for i:=1 to n do; for j:=1 to 4 do begin {ввод сведений о вкладах}

write('введите остаток по вкладу номер', i,'за', j ,'квартал');

readln(x[i,j]);

end;

s:=0;

writeln(' Счет № Остатки по кварталам');

writeln(' I II III IV ВСЕГО');

for i:=1 to n do begin {вычисление годового остатка}

y:=(x[i,1]+x[i,2]+x[i,3]+x[i,4])/4; {средний остаток}

if y<=5000 then y:=1.05*y;

if (y>5000) and (y<=10000) then y:=1.1*y;

if y>10000 then y:=1.2*y;

x[i,5]:=x[i,4]+y; {остаток вклада с начислениями}

writeln(i,x[i,1],x[i,2],x[i,3],x[i,4],x[i,5]);

s:=s+x[i,5];

end;

sr:=s/n;

writeln('Сумма всех вкладов в банке = ',s);

writeln('Средний вклад = ',sr);

end.

Данные о вкладах хранятся в массиве Х из N строк и пяти столбцов. Первые четыре элемента каждой i-ой строки (Х[i,1], Х[i,2], Х[i,3], Х[i,4]), хра­нят остат­ки вклада на конец каждого из четырех кварталов года. В последний, пятый элемент строки X[i,5] следует занести вычисленную величину вклада на конец года, который равен остатку вклада на конец последнего квартала Х[i,4], плюс установленный процент от среднего значения вклада Y=(Х[i,1]+ Х[i,2]+Х[i,3]+ Х[i,4])/4 за год. Положим, определено, что на вклад до 5000 предусмотрен процент роста – 5%, на вклад до 10000 – 10%, на вклад свыше 10000 – 20%. Иными словами установлены коэффициенты роста 1.05, 1.1 и 1.2 соответственно. Кроме перечисленного, следует найти сумму всех вкладов в банке S и среднее значение вклада, приходящееся на одного вкладчика (S/N).

Здания для самостоятельного решения

Задание 6.1. В векторе Х найти элемент, максимально близкий к некоторому, произвольно заданному числу Y и его номер.

Задание 6.2. В векторе Х сдвинуть по кольцу его содержимое на 1 клетку, на 2, на К клеток. Подсказка. Здесь понадобится вспомога­тельный массив Y, куда и будем заносить уже сдвинутые данные, а затем возвращать их в Х.

Задание 6.3. Пусть имеется таблица-массив, содержащая сведения о работниках (всего К человек) бригады: Имя, Отработано дней, Должностной оклад, Фактическая зарплата. Рассчитать зарплату для каждого работника.

Задание 6.4. Усложним предыдущее задание. Пусть бригаде установлена премия в Р=100000р., которая делится не поровну, а с учетом коэффициента трудового участи (КТУ). Рассчитайте размер премии для каждого.

З адание 6.5. Имеется прямоугольная матрица X[N,M]. Запол­нить элементы матрицы числами натурального ряда в последо­вательности, указанной на рисунке справа.

З адание 6.6. Запрограммировать процесс выбора в детской считалке. Пусть нужно выбрать случайным образом дежурного по кухне из группы в M человек. Дети становятся в круг и “считаются” от номера 1 по следующему правилу. Из круга по часовой стрелке удаляется с определенным шагом N каждый участник. В конце останется только один – дежурный. Для (см. рисунок) примера M=8, N=3. Тогда последовательно из круга выйдут номера 1,4,7,3,8,6. Наконец останутся только номера 2 и 5 и счет продолжается уже между ними 2→5→2. Таким образом, “повезло” номеру 5. В программе вывести номера всех выбывающих элементов и номер дежурного.

Сортировки в массиве. Сортировка данных является очень распространенной задачей и для нее имеется несколько методов.

Пример 6-3. В векторе X расположить элементы в порядке убывания их зна­че­ний. Алгоритм реализуется при помощи двух вложенных циклов. В наружном цикле последовательно перебираются числа x(i) массива и во внутреннем сравниваются со всеми оставшимися числами x(j) справа от данного. Если выясняется, что какое-то из x(i) меньше сравниваемого, они меняются местами – большее число становится на место меньшего. В программе для наглядности в качестве элементов массива взяты их номера i. Если вектор имеет длину четыре (N=4), будет выполнена следующая последовательность перестановок чисел: 1,2,3,4: при i=1 – 2,1,3,4; 3,1,2,4; 4,1,2,3; при i=2 – 4,2,1,3; 4,3,1,2; при i=3 – 4,3,2,1. Здесь для обмена значений элементов x[i]↔x[j] вводится специальная “транзитная” переменная М для временного хранения данных. Действительно, если использовать только операторы x[i]:=x[j]; x[j]:=x[i] мы получим неверный результат. Хотя х[i] и примет значение х[j], оператор x[j]:=x[i] ничего не изменит, ведь х[i] теперь равен х[j]. С тем, чтобы не потерять исходное значение х[i], оно запоминается в переменной М.

Здания для самостоятельного решения

Задание 6.7. Сортировка выбором. Рассмотренный алгоритм очень прост для программирования, но содержит лишние действия. Очевидно, нет необходимости делать обмен элементов всякий раз, когда встретился больший элемент. На самом деле это нужно выполнить только единожды для максимального элемента из оставшихся. Напишите такую программу.

Задание 6.8. Сортировка обменом. Метод заключается в анализе соседних элементов массива. Если х[i]<х[i+1] элементы меняются местами. По достижении конца массива в нижней клетке окажется самое маленькое значение. Затем процесс повторяется, но уже без последнего элемента и т.д. Такой просмотр вектора нужно выполнить N раз. Однако его можно сократить, если зафиксировать факт прекращения обменов.

Задание 6.9. Пусть имеется таблица работников цеха со столбцами: Имя, Бригада, Отработано дней, Зарплата. Отсортировать любым методом таблицу по возрастанию значений столбца “Отработано дней”.

Задание 6.10. Отсортировать ту же таблицу так, чтобы сначала люди в ней располагались по размеру зарплаты, а затем по числу отработанных дней. Т.е. работники, имеющие одинаковую зарплату, должны идти в порядке количества отработанных ими дней.

Задание 6.11. Отсортировать таблицу по номерам бригад. Подвести итоги для каждой бригады (число работников, число дней, суммарная зарплата) и для всего цеха целиком.

Задание 6.12. Поиск в отсортированном массиве. Очевидно, что найти нужное значение Х в некотором массиве можно сплошным перебором данных. Однако в худшем случае (если искомое значение находится внизу или его нет вовсе) нам придется просмотреть все элементы массива. Если массив отсортирован, имеется гораздо более быстрый алгоритм поиска, называемый бинарным. Массив делится пополам и Х сравнивается со средним элементом. Если Х оказался больше, пополам делится нижняя часть, если нет – верхняя и поиск ведется там т.д. Напишите программу поиска.

Пример 6-4. Заполнить двумерный массив A(N,N) элементами натураль­ного ряда (т.е. числами 1,2,3, и т.д.), начиная с нижнего правого угла в направлении, показанном пунктиром на рис. 6.4а. Чтобы выявить необходимые законы перемещения по матрице, в ее клетках показаны индексы элементов. Способов решения таких такого рода задач может быть несколько.

Заметим, что в зависимости от того, с какой стороны матрицы мы находимся, нам необходимо совершать следующие движения:

1). если у правой стороны матрицы, то вверх на одну клетку и вниз-влево по диагонали до нижней границы;

2). если у нижней границы, то влево на одну клетку и вверх-вправо по диагонали до правой границы;

3). у верхней границы – влево на одну клетку и вниз-влево до левой границы;

4). у левой границы – вверх на одну клетку и вверх-вправо до правой границы.

В любом случае движение прекращается при достижении клетки A(1,1). Результат заполнения массива А показан на рис. 6.4б.

Программа приведена ниже. Здесь ST – номер текущей строки (первонача­льно N, поскольку движение начи­нается с последней ячейки массива A(N,N)), KL – номер текущей колонки (первоначально N), K – растущее значение нату­рального ряда (первоначально 1). Самый внешний цикл (while k<n*n) ограничивает все действия достижением растущим значением натурального ряда K значения N*N, поскольку именно столько клеток имеется в квадратной матрице раз­мерности N. Внутри цикла организованы четыре разные группы операций в зависимости от того, какое из четырех типовых элементарных действий (см. выше) выполняется. Определяет тип действия оператор if/else if, в кото­ром выясня­ется, где именно вы находитесь. Внутри каждого IF организован цикл while, в котором осуществляются необходимые перемещения в матрице в соответст­вии с одним из четырех алгоритмов. По завершении всех действий, т.е. после достижения последней клетки (в нашем случае A(1,1)), выполняется последовательная печать строк матрицы A с заполненными клетками.

program P6-4;

uses crt;