Задача №177.
Умова: Ненажера Стецько пробрався перед обідом
у шкільну їдальню, де вже були накриті столи, і почав швиденько з'їдати ще
тепленьки булочки, що стояли на столах. З першого столу він з'їв x1
булочок, з другого - х2, і, відповідно, з останнього - xn булочок.
Але за ним стежив черговий по їдальні Андрійко та ретельно все фіксував на
своєму калькуляторі: до булочок, з'їдених з першого столу, додав кількість
булочок, що зникли з другого столу, і т.д. Допоможіть крок за кроком відтворити
інформацію, яку дістав Андрійко на своєму калькуляторі.
Очевидно, що при
розв'язанні даної задачі нам на початку роботи програми відома кількість
повторів, тому що ми зразу ж знаємо, скільки столів в їдальні. Крім того,
зауважимо, що для зберігання кількості булочок, що знаходяться на кожному столі,
не треба мати N змінних. Достатньо мати одну, назвемо її, наприклад,
X, в якій тимчасово будемо зберігати відповідну кількість булочок з
чергового столу. І, врешті решт, нам необхідна ще одна змінна, в якій ми будемо
одержувати проміжні обчислення чергового Андрійка (наприклад, Sum). Таким
чином, програма, що розв'язує дану задачу, буде мати наступний вигляд:
Program Example_177;
Uses crt;
Var I,N:word; {I – параметр циклу, N –
кількість столів в їдальні,
тобто кількість повторень}
Sum,X:word; {X – кількість булочок на
черговому столі їдальні, Sum –
загальна кількість булочок, що
з’їв Стецько}
Begin
Clrscr;
Sum:=0; {На початку роботи програми Стецько
ще нічого не з’їв}
Write(‘Введіть кількість столів в їдальні: ’);
Readln(N);
For I:=1 to N do
Begin
Write(‘Введіть кількість булочок на
черговому столі: ’);
Readln(X);
Sum:=Sum+X;
Writeln(‘На даний момент Стецько з”їв
’,Sum,’ булочок.’);
End;
Readkey; {Затримка зображення на екрані}
End.
Задача №183.
Умова: Компанія бабусь поїхала на мотоциклах на
курси комп'ютерної грамотності. Попереду на мотоциклі без глушника їхала одна
бабуся, за нею - дві, потім - три і т.д. Скільки бабусь їхало на заняття, якщо
приголомшені пішоходи всього нарахували N рядів? Чи змогли бабусі зайняти
всі місця у класі, якщо там стояло k рядів по l комп'ютерів в кожному?
Скільки вільних місць залишилося?
Зверніть увагу на те, що фактично ця задача
зводиться до знаходження суми всіх натуральних чисел від 1 до N. В кінці
задачі для повторення команди розгалуження учням пропонується визначити
кількість зайнятих бабусями та вільних місць.
Program Example_183;
Uses crt;
Var I,N,Sum:word; {I – параметр циклу, N –
кількість рядів мотоциклів,
тобто кількість повторень, Sum –
загальна кількість бабусь, що
приїхали на курси}
Place,k,l:word; {k – кількість рядів в
комп’ютерному класі, l –
кількість комп’ютерів в
кожному ряду, Place – кількість
місць, що вистачила для бабусь}
Begin
Clrscr;
Sum:=0;
Write(‘Введіть кількість рядів мотоциклів, що
нарахували пішоходи: ’);
Readln(N);
For I:=1 to N do Sum:=Sum+I;
Writeln(‘Кількість бабусь, що приїхала на курси ’,Sum);
Writeln(‘Кількість комп”ютерів на курсах ’,k*l);
If Sum < k*l Then writeln(‘Бабусі не змогли зайняти всі місця.’)
Else writeln(‘Бабусі зайняли всі місця.’);
Place:=Sum – k*l;
If Place>0
Then writeln(‘Бабусям не вистачило ’,Place,’місць.’);
Readkey; {Затримка зображення на екрані}
End
Задача №189(2).
Умова: Знайти значення
(1 + 0.1)(2 +
0.2)...(9 + 0.9)
В даному випадку, очевидною що кількість повторів буде
дорівнювати 9, тобто результуюча програма буде мати вигляд:
Program Example_189_2;
Uses crt;
Var I:word; {I – параметр циклу}
Rez:real; {Rez – результат обчислень}
Begin
Clrscr;
Rez:=1; {Початкове значення дорівнює 1, тому що
результат являється накопиченням
добутку}
For I:=1 to 9 do Rez:=Rez*(I+0.1*I);
Writeln(‘Rez= ’,Rez:8:2);
Readkey; {Затримка зображення на екрані}
End.
Задача №190(1).
Умова: Дано ціле n. Визначити
n!
Відомо, що n! (вимовляється, як н-факторіал) - це добуток
всіх натуральних чисел від 1 до n. Тому вихідна програма має
вигляд:
Program Example_190_1;
Uses crt;
Var I,n:word; {I – параметр циклу}
Factorial:longint; {Factorial – результат
обчислень}
Begin
Clrscr;
Factorial:=1; {Початкове значення дорівнює 1, тому
що результат являється накопиченням
добутку}
Write(‘Введіть значення n: ’);
Readln(n);
For I:=1 to n do Factorial:=Factorial*I;
Writeln(‘Factorial= ’,Factorial:8:2);
Readkey; {Затримка зображення на екрані}
End.
Задача №190(3).
Умова: Дано ціле n. Визначити
1*3*5*7*…*(2n+1).
Очевидно, що дана програма відрізняється від
попередньої тільки тим, що необхідно знайти добуток тільки непарних натуральних
чисел від 1 до n.
Program Example_190_3;
Uses crt;
Var I,n:word; {I – параметр циклу}
Rez:longint; {Rez – результат обчислень}
Begin
Clrscr;
Rez:=1; {Початкове значення дорівнює 1, тому
що результат являється накопиченням
добутку}
Write(‘Введіть значення n: ’);
Readln(n);
For I:=0 to n do Rez:=rez*(2*I+1);
Writeln(‘Rez= ’,Rez:8:2);
Readkey; {Затримка зображення на екрані}
End.
Задача №190(6).
Умова: Дано ціле n. Визначити
Sin(1)*sin(1+2)*…*sin(1+2+…+n).
Відміна даної програми від всіх
попередніх полягає в тому, що в даному випадку ми маємо два накопичення:
по-перше, відбувається накопичення суми, що знаходиться під знаком sin,
а, по-друге, сам результат являється накопиченням добутку сінусів. Тому для
зберігання цих двох накопичень необхідно мати дві змінні. Результуюча програма
має наступний вигляд:
Program Example_190_6;
Uses crt;
Var I,n:word; {I – параметр циклу}
Rez,Sum:longint; {Rez – результат обчислень,
Sum – проміжне накопичення}
Begin
Clrscr;
Rez:=1; {Початкове значення дорівнює 1, тому
що результат являється накопиченням
добутку}
Sum:=0; {Початкове значення дорівнює 0, тому
що результат являється накопиченням
суми}
Write(‘Введіть значення n: ’);
Readln(n);
For I:=1 to n do
Begin
Sum:=Sum+I; {Накопичення суми}
Rez:=Rez*sin(Sum); {Накопичення добутку}
End;
Writeln(‘Rez= ’,Rez:8:2);
Readkey; {Затримка зображення на екрані}
End.
Задача №191(6).
Умова: За даним натуральним значенням
змінної n обчислити: Для розв'язку
цієї задачі необхідно виконати обчислення, починаючи з самого вкладеного кореня.
Кожен наступний крок обчислюється наступним чином: до попереднього результату
додається двійка і з отриманої суми береться квадратний корінь.
Програма, що
виконує описані обчислення, наведена нижче:
Program Example_191_6;
Uses crt;
Var I,n:word; {I – параметр циклу}
Rez:real; {Rez – результат обчислень}
Begin
Clrscr;
Rez:=0; {Початкове значення дорівнює 0, тому
що результат являється накопиченням
суми}
Write(‘Введіть значення n: ’);
Readln(n);
For I:=1 to n do
Begin
Rez:=sqrt(Rez+2);
End;
Writeln(‘Rez= ’,Rez:8:2);
Readkey; {Затримка зображення на екрані}
End.
Задача №210.
Умова: Дано ціле число n, яке набуває
значень шкільних оцінок. Визначити відповідною кількістю звукових сигналів, яка
саме оцінка була задана ("1" - один звуковий сигнал, "2" - два звукових сигнали
і т.д.). Якщо ж задане число не відповідає значенню шкільної оцінки - подати
довгий звуковий сигнал.
Звуковий сигнал в цій програмі можна подавати за
допомогою процедур керування вбудованим динаміком Sound та
nosound. Нагадуємо, що перша з них викликає звучання ноти заданої частоти
(частота вказується в дужках після процедури), а друга виключає динамік.
Тривалість звучання та паузи між звуками можна задавати процедурою delay,
в якості параметра до якої задається змінна time (значення цієї змінної
можна задати командою присвоєння або введенням з клавіатури).
Program Example_210;
Uses crt;
Var I,n:word; {I – параметр циклу, n – оцінка учня}
Time:word;
Begin
Clrscr;
Write(‘Введіть Вашу оцінку: ’);
Readln(n);
Time:=10000; {Значення цієї змінної залежить
від характеристик комп’ютера, за
яким працює учень, і може бути
підібрана практичним шляхом}
If (n<1) or (n>12)
Then
begin
writeln(‘Ви помилились, такої оцінки не
існує’);
sound(200);
end
Else
For I:=1 to n do
Begin
Sound(200);
Delay(time);
Nousound;
Delay(time);
End;
Readkey; {Затримка зображення на екрані}
End.