Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Степан / Информатика / Паскаль (Яньков).doc
Скачиваний:
70
Добавлен:
20.04.2015
Размер:
660.99 Кб
Скачать

З

program P6-2;

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.1*y;

if (y>5000) and (y<=10000) then y:=1.15*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.

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

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

Задание. Пусть имеется таблица, содержащая сведения о работниках бригады: Имя, Отработано дней, Зарплата. Известна также сумма, которую заработала бригадаS. Рассчитать зарплату для каждого работника. Усложним задачу. Пусть зарплата увеличивается на 10% тем, кто отработал больше 20-ти дней (при прежнемS). Во всех случаях сумма всех зарплат работников должна быть в точности равнаS.

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

Алгоритм 1.Создается массив Х длиной в несколько раз больше чемM. Обозначим его размерностьMM(в программе задайте ММ=30). Первые егоMэлементов заполняются последовательными числами от 1 доM. Остальные элементы отM+1 доMMостаются пока пустыми (=0). СтроитсяFOR-цикл перебора всех элементовX. В нем, если номер элементаIминус 1 кратенN, этот номер (он подчеркнут) печатается и человек выбывает. Если нет, элемент переносится в правый конец занятой части массива Х (в первую свободную клетку). Если встретился элемент =0, значит произошла обработка всех чисел и процесс прекращается. На рисунке показана динамика изменения массива Х. Первоначально в нем заняты только клетки с 1 по 8. Цифры 1,4,7 печатаются, а остальное (2,3,5,6,8) последовательно переносится в свободную область Х, из которой печатаются цифры 3 и 8 и т.д. пока не будут выведены все цифры. После 22-ой ячейки остаются ещеMM-22 пустых клеток. Их просматривать не нужно и для этого в цикле должен быть предусмотрен выход приX[i]=0.

Х

1

2

3

4

5

6

7

8

2

3

5

6

8

2

5

6

2

5

2

5

5

5

дальше нули

1

4

7

3

8

6

2

5

выбывание

i:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Алгоритм 2.Возможен и другой алгоритм, заключающийся в том, что, как и в жизни, мы будем ходить по кругу из элементов массива Х размерностиM. Каждый раз, когда человек выбывает, мы печатаем его номер и (чтобы не забыть, что он выбыл) заменяем содержимое соответствующей ячейки на 0. Здесь введем переменные:I=1 – номер каждого элемента в круге,J=1 – номер только не удаленного элемента (клетки, содержащие 0 игнорируются),L=0 число уже отобранных клеток.

1). Организуем хождение по кругу. Строим WHILE-цикл в котором переменнаяIменяется от 1 доM(т.е 1..M, 1..M, и т.д.). В циклеI=I+1 всегда иJ=J+1 – только для непустых клеток.

2). Внутри цикла, каждый раз, когда Jстановится кратнымK, ячейка Х(J) печатается и очищается Х[I]=0,L=L+1.

3). Вычисления прекращаются при L=M.

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