русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Алгоритми нагромадження суми й добутку


Дата додавання: 2014-11-28; переглядів: 791.


Застосовуються, коли потрібно скласти або перемножити обрані дані. У загальному виді ці широко застосовувані алгоритми можна описати так:

  1. для підрахунку кожної суми або добутку описати по одній змінної того ж типу, що суммируемые або дані, що перемножуються;
  2. до циклу змінної-сумі привласнити початкове значення 0, а добутку – значення 1;
  3. у тілі циклу, якщо черговий елемент даних t відповідає умові підсумовування або перемножування, сума накопичується оператором виду s:=s+t;, а добуток – оператором виду p:=p*t;

Очевидно, чому початкове значення добутку – одиниця, а не нуль. Після оператора p:=0; оператор p:=p*t;, розташований у тілі циклу, буде повертати тільки нулі.

Пр. Для функції , знайти арифметичне середнє її позитивних значень і добуток ненульових значень.

Для пошуку арифметичного середнього необхідно спочатку знайти суму s і кількість k позитивних значень функції. Складемо наступну програму:

var x,f,s,p:real;

k:integer;

begin

s:=0;

k:=0;

p:=1;

x:=-5;

while x<=5+1e-6 do begin

if x<0 then f:=sqr(ln(abs(x)))

else if x>0 then f:=sin(sqr(x))

else f:=0;

if f>0 then begin

s:=s+f;

k:=k+1;

end;

if f<>0 then p:=p*f;

x:=x+0.5;

end;

s:=s/k; {тепер в s - шукане середнє}

writeln ('Середнє позитивних =',s:10:6);

writeln ('Добуток ненульових=',p:10:6);

reset (input); readln;

end.

Пр. Написати програму, що імітує роботу касового апарата: користувач у циклі вводить ціну чергового товару або 0 для завершення введення, програма підсумує ціни. По завершенню циклу введення програма нараховує знижку із загальної вартості товару за правилом:

знижки ні, якщо загальна вартість < 10000 руб.;

знижка = 5%, якщо загальна вартість - від 10000 до 20000 руб.;

знижка = 7%, якщо загальна вартість - понад 20000 руб.

Після нарахування знижки виводиться остаточна вартість покупки.

Позначивши загальну вартість покупки s, а ціну чергового товару – t, напишемо наступну програму:

var s,t:real;

begin

writeln;

s:=0; {початкове значення суми!}

repeat

writeln ('Уведіть вартість товару або 0 для завершення введення:');

{$I-}read(t);{$I+}

if (Ioresult<>0) or (t<0) then begin

writeln ('Помилка! Повторите введення');

continue;

end;

if t=0 then break;

{Округляємо t до 2 знаків після коми - на випадок, якщо є копійки}

t:=Round (t*100) / 100;

s:=s+t; {нагромадження суми!}

until false;

{Нарахування знижки й вивід відповіді}

writeln ('Вартість без знижки:',s:8:2);

if s>20000 then s:=s-s*0.07

else if s>10000 then s:=s-s*0.05;

writeln ('Вартість зі знижкою:',s:8:2);

writeln ('Спасибі за покупку!');

reset (input); readln;

end.

Тип даних real обраний для s і t не випадково – вибір integer обмежив би діапазон оброблюваних значень і не дозволив у зручному виді ввести копійки. Перевірки коректності введення, що робляться програмою, знайомі по попередніх прикладах і тому не закомментированы.

 


<== попередня лекція | наступна лекція ==>
Алгоритм організації лічильника | Типові алгоритми пошуку максимуму й мінімуму


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн