четвер, 11 січня 2018 р.

Алгоритми з логічними типами змінних

Задачі з використанням логічних змінних

Цей алгоритм використовується, якщо для деякої послідовності чисел потрібно на деяке запитання відповісти: „так” чи „ні”.

Приклад 1

Дано n цілих чисел. З’ясуйте, чи є в цій послідовності хоча б одне число 0.
Дано: кількість чисел та самі числа.
Знайти: Якщо серед чисел є 0, то надрукувати "yes", якщо немає 0, то надрукувати "no".

Змінні:

Вхідні:
  • n – кількість чисел (цілого типу)
  • a – число (цілого типу)
Вихідні:
  • f – ознака (логічного типу). Якщо значення цієї змінної дорівнює true, то серед чисел є 0, якщо значення цієї змінної дорівнює false, то серед чисел немає 0.
Проміжні:
  • – параметр циклу (цілого типу)

Алгоритм

  1. Спочатку потрібно присвоїти початкове значення ознаці f:=false. Тобто вважаємо, що нулів серед чисел немає. Якщо зустрінемо нуль, змінимо це значення на протилежне.
  2. Вводимо n – кількість чисел, що будемо вводити. Це значення буде визначати кількість витків циклу.
  3. У циклі for i:=1 to n do у операторних дужках будемо виконувати такі дії:
    • Оператор read(a) вводить число у змінну a.
    • Якщо введене число 0, то змінюємо значення змінної на f:=true. Якщо введене число не 0, то нічого не робимо, тобто значення f не змінюється.Обов’язково використовувати неповний умовний оператор!
    • Чисел буде n. Але кожне наступне число ми будемо вводити в одну і ту ж змінну, затираючи попереднє.
  4. Коли цикл закінчиться, тобто будуть введені всі n чисел, значення змінної (ознаки) або залишиться початковим false (якщо серед чисел немає 0), або зміниться на true (якщо серед чисел є один чи декілька 0).
  5. Після завершення циклу потрібно перевірити значення змінної f.
    • Якщо f=false, то надрукувати no.
    • Якщо f=true, то надрукувати yes.
  6. Для перевірки значення логічної змінної можна не використовувати операцію «=». Тому:
    • if f відповідає if f=true
    • if not f відповідає if f=false.

Блок–схема програми

Програма

 var i,n,a:integer; f:boolean;
begin
 f:=false; read(n);
 for i:=1 to n do
 begin
   read(a);
   if a=0 then f:=true;
 end;
   if f then writeln('yes')else writeln('no');
end.

Результати роботи програми

ВвідВідповідьПояснення
15
1 2 3 4 5
No5 – кількість чисел. 1 2 3 4 5 – самі числа. Серед них немає 0, тому No
24
1 3 7 0
Yes4 – кількість чисел. 1 3 7 0 – самі числа. Серед них є 0, тому Yes
36
1 0 2 0 0 9
Yes6 – кількість чисел. 1 0 2 0 3 9 – самі числа. Серед них є три 0, тому Yes

Приклад 2

Дано n чисел. З’ясуйте, чи всі вони 0.
Дано: кількість чисел та самі числа
Знайти: Якщо всі числа 0, то надрукувати "yes", якщо є не 0, то надрукувати "no"

Змінні:

Вхідні:
  • n – кількість чисел (цілого типу)
  • a – число (цілого типу)
Вихідні:
  • – ознака (логічного типу). Якщо значення цієї змінної дорівнює true, то всі числа 0, якщо значення цієї змінної дорівнює false, то серед чисел є не 0.
Проміжні:
  • i – параметр циклу (цілого типу)

Алгоритм

  1. Спочатку потрібно присвоїти початкове значення ознаці f:=true. На відміну від попереднього прикладу вважаємо, що всі числа нулі. Тоді якщо зустрінемо не нуль, змінимо це значення на протилежне.
  2. Вводимо n – кількість чисел, що будемо вводити. Це значення буде визначати кількість витків циклу.
  3. У циклі for i:=1 to n do у операторних дужках будемо виконувати такі дії:
    • Оператор read(a) вводить число у змінну a.
    • Якщо введене число не 0, то змінюємо значення змінної на f:=false. Якщо введене число 0, то нічого не робимо, тобто значення f не змінюється.
  4. Коли цикл закінчиться, тобто будуть введені всі n чисел, значення змінної f (ознаки) або залишиться початковим true (якщо всі числа нулі, тобто серед чисел немає не 0), або зміниться на false (якщо серед чисел є одно чи декілька не 0).
  5. Після завершення циклу потрібно перевірити значення змінної f.
    • Якщо f=false, то надрукувати no.
    • Якщо f=true, то надрукувати yes.

Програма

 var i,n,a:integer; f:boolean;
begin
 f:=true; read(n);
 for i:=1 to n do
 begin
   read(a);
   if a<>0 then f:=false;
 end;
 if f then writeln('yes')else writeln('no');
end.

Результати роботи програми

ВвідВідповідьПояснення
15
1 2 3 4 5
No5 – кількість чисел. 1 2 3 4 5 – самі числа. Вони всі не 0, тому No
24
1 0 7 0
No4 – кількість чисел. 1 0 7 0 – самі числа. Серед них є не 0, тому No
36
0 0 0 0 0 0
Yes6 – кількість чисел. 0 0 0 0 0 0 – самі числа. Вони всі 0, тому Yes

Правило використання ознаки

    При складанні програм з використанням ознаки потрібно пам’ятати:
  • Перед циклом (перед перевіркою даних) ознаці потрібно присвоїти початкове значення.
  • У циклі, в процесі перевірки ознака може змінити своє значення тільки на протилежне. Вона не може змінюватись «туди сюди».
  • Після завершення циклу значення ознаки потрібно перевірити. Це значення може залишитися початковим, а може змінитися на протилежне.

Варіанти задач

  1. Дано n символів. Чи є в цій послідовності хоча б один символ „_”?
  2. Ввести з клавіатури n будь-яких чисел. Чи є серед цих n чисел від’ємні числа?
  3. Дано n цілих чисел. З’ясуйте, чи є в цій послідовності хоча б одне число, що закінчується цифрою 5.
  4. Дано n цілих чисел. З’ясуйте, чи є в цій послідовності хоча б одне двохзначне число, що складається з однакових цифр.
  5. Ввести з клавіатури число x та n будь-яких чисел. Чи є серед цих чисел число x?
  6. Дано n символів. Чи є в цій послідовності цифри?
  7. Дано n символів. Чи є в цій послідовності пробіли?
  8. Дано n цілих чисел. Чи всі вони парні?
  9. Дано n цілих чисел. Чи всі вони додатні?
  10. Дано n натуральних чисел. Чи всі вони закінчуються цифрою 3?
  11. Ввести з клавіатури n будь-яких чисел. Чи всі вони трьохзначні?
  12. Дано n символів. Чи всі вони цифри?
  13. Дано n символів. Чи всі вони латинські літери?
  14. Дано n символів. Чи всі вони російські літери?
  15. Дано n цілих чисел. Чи всі вони однакові?
  16. Ввести з клавіатури число x та n будь-яких чисел. Чи всі ці числа дорівнюють x?

Немає коментарів:

Дописати коментар