Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник.docx
Скачиваний:
37
Добавлен:
21.12.2018
Размер:
2.15 Mб
Скачать

Вычисление площади поверхности цилиндра

Задача:

Допустим, организации часто требуется красить баки цилиндрической формы. При этом они красят только верхнюю часть и стенки с внешней стороны.

Организации требуется программа, которая бы определяла, сколько банок краски необходимо для покраски того или иного бака.

Алгоритм решения задачи:

Программа должна запрашивать у пользователя следующую информацию:

  • диаметр бака;

  • высота бака;

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

В результате программа должна выдавать количество требуемых банок. При получении дробного числа округление должно всегда происходить в большую сторону.

Площадь крыши бака (круга) вычисляется по формуле p * d2 /4 (где p – число пи, d - диаметр).

Площадь боковой поверхности цилиндра: p * d * h (где h – высота).

Программа на языке Паскаль:

const pi = 3.14;

var

d, h, b: real;

top, wall, q: real;

q_int: integer;

begin

write('Диаметр: ');

readln(d);

write('Высота: ');

readln(h);

write('Окрашиваемая площадь одной банкой: ');

readln(b);

top := pi * sqr(d) / 4.0;

wall := pi * d * h;

q := (top + wall) / b;

q_int := trunc(q) + 1;

write('Количество банок: ', q_int);

readln

end.

Примечания:

Стандартная функция trunc выполняет "отбрасывание" дробной части и возвращает целое число.

"Заем". Арифметические выражения, возведение в степень

Алгоритм решения задачи:

Месячная выплата m по займу в s рублей на n лет под процент p вычисляется по формуле:

m = (s * r * (1 + r)n) / (12 * ((1 + r)n – 1)), где r = p / 100.

Программа, вычисляющая значение m (месячную выплату) по известным s (сумме займа), p (проценту) и n (количеству лет), может выглядеть так:

Программа на языке Паскаль:

var

m, s, p, n, r, a: real;

begin

write('Величина заема : ');

readln(s);

write('Процент: ');

readln(p);

write('Количество лет: ');

readln(n);

r := p / 100;

a := exp(ln(1 + r) * n);

m := (s * r * a) / (12 * (a - 1));

m := trunc(100 * m + 0.5) / 100;

writeln;

writeln('Месячная выплата: ', m:5:2);

writeln('Прибыль банка: ', m * 12 * n - s:5:2);

readln

end.

Примечания:

Выражение exp(ln(1 + r) * n) вычисляет (1 + r)n.

Выражение trunc(100 * m + 0.5) / 100 выполняет округление до копейки.

6.Массивы Определить количество элементов массива, значение которых больше соседних элементов

Задача:

Пользователь вводит n элементов массива. Требуется определить количество элементов, значение которых больше, чем у соседних элементов массива.

Описание переменных:

m - количество реальных элементов массива;

qty - количество элементов массива, значение которых больше, чем у соседей.

Алгоритм решения задачи:

  1. Считываем числа с помощью процедуры read() и помещаем их в массив.

  2. Переменной qty присваиваем значение 0.

  3. Переменной i, которая обозначает индекс массива, присваиваем значение 2, т.к проверять первый элемент массива не имеет смысла (у него нет левого соседа).

  4. В условии цикла выражение i < m говорит о том, что последний элемент массива также не проверяется, т.к. у него нет правого соседа.

  5. Если очередной элемент массива (arr[i]) больше предшествующего (arr[i-1]) и очередной элемент массива (arr[i]) больше последующего (arr[i+1]), то ...

  6. ... увеличить значение qty на единицу и ...

  7. ... увеличить значение i на 2, т.к проверять следующий элемент нет смысла, т.к. уже известно, что он меньше левого соседа.

  8. Иначе (если условие не выполнилось) перейти к следующему элементу массива (i := i + 1).

  9. Вывести значение qty на экран.

Это не оптимальный алгоритм, но короткий.

Программа на языке Паскаль:

const

n = 100;

var

arr: array[1..n] of integer;

i, m, qty: byte;

begin

write('Количество элементов массива: ');

readln(m);

write('Элементы массива через пробел: ');

for i:=1 to m do

read(arr[i]);

readln;

qty := 0;

i := 2;

while i < m do

if (arr[i] > arr[i-1]) and (arr[i] > arr[i+1]) then begin

qty := qty + 1;

i := i + 2

end

else

i := i + 1;

writeln('Кол-во элементов, которые больше соседей: ', qty);

readln;

end.

Примечания:

Пример выполнения программы:

Количество элементов массива: 6

Элементы массива через пробел: 3 4 2 3 7 6

Количество элементов, которые больше соседей: 2

Получается 2, т.к. только четверка и семерка больше обоих своих соседей.