Розробка уроку — практичної роботи

Тема: складання та виконання алгоритмів з використанням величин логічного типу в навчальному середовищі програмування Free Pascal.

Мета: навчитися складати та виконувати алгоритми з використанням величин логічного типу в середовищі програмування Free Pascal.

Учень повинен вміти:

Обладнання: ПК із встановленим ОС й інтегрованим середовищем програмування Free Pascal.

Структура уроку

  1. Організаційний момент.
  2. Актуалізація опорних знань.
  3. Інструктаж з ТБ.
  4. Вироблення практичних навичок.
  5. Підбиття підсумків уроку, виставлення оцінок.
  6. Домашнє завдання.

Хід уроку

1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.

2. Актуалізація опорних знань

  1. Що таке Free Pascal?
  2. Що таке компіляція?
  3. Що таке стала (величина)?
  4. Що таке змінна (величина)?
  5. Яких значень може набувати тип Boolean?

3. Вивчення нового матеріалу
Скласти алгоритми й програми розв'язання завдань, порівняти з демон­страційними розв'язаннями. У разі потреби завдання 3 вчитель може задати на самостійне опрацювання додому.

Завдання 1. Дано три цілих числа: A, B, C. Перевірити істинність висловлювання: «Число B розташоване між числами A і C».

Алгоритм

  1. Ввести числа A, B, C.
  2. Булевій змінній L надати величину такого виразу:
    (A < B) and (B < C) or (A > B) and (B > C).
  3. Вивести величину L.
Програма
					 
var a,b,c: longint;
        l: boolean;
BEGIN 
  write('Ведіть числа A, B та C ');
  readln(A,B,C);
  L:=(A<B) and (B<C) or (A>B) and (B>C);
  writeln('Число B знаходиться між числами A та C: ', L);
END.

Завдання 2. Є 26 лампочок, прозначених малими літерами латиниці, що незалежно під'єднані до електричної мережі. У початковий момент усіх їх вимкнено. Вхідний файл містить послідовність малих літер латиниці, що задає послідовність перемикань вимикачів відповідних ламп. Визначити, скільки ламп буде увікнено після таких маніпуляцій і яку найбільшу кількість ламп буде увімкнено протягом цих маніпуляцій.

Алгоритм

  1. Надати величин n_= 0, m_= 0.
  2. Булевим змінним, позначени літерами латиниці, надати значення false.
  3. Поки вхідні дані не закінчилися, робити таке:
    • зчитати символ;
    • змінити величину булевої змінної, чию назву зчитано, на протилежне;
    • якщо змінене значення true, збільшити n_ на 1,
      інакше — зменшити n_ на 1;
    • якщо m_<n_, змінити величину m_ на величину n_.
  4. Вивести значення n_ і m.

Примітка. У поданій далі програмі пункти алгоритму 1 і 2 не відображено, бо булевим змінним на початку виконання програми у середовищі Free Pascal надають значень false, цілим — 0 як усталено. Частину пункту 3 реалізовано за допомогою процедури change.

Програма

var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,
  p,q,r,s,t,u,v,w,x,y,z: boolean;
  n_,       {остаточна кількість увімкнених ламп}
  m_: byte; {найбільша кількість увімкнених ламп}
  ch: char; {зчитаний символ}
  fi: text; {вхідний або вихідний файл}
    
procedure change(var a: boolean);
begin
  a:=not a;
  if a then inc(n_)
       else dec(n_);
  if n_>m_ then m_:=n_
end;
BEGIN 
  assign(fi,'lamps.in');
  reset (fi);
  while not eof(fi) do
  begin
    read(fi,ch);
    case ch of
      'a': change(a);
      'b': change(b);
      'c': change(c);
      'd': change(d);
      'e': change(e);
      'f': change(f);
      'g': change(g);
      'h': change(h);
      'i': change(i);
      'j': change(j);
      'k': change(k);
      'l': change(l);
      'm': change(m);
      'n': change(n);
      'o': change(o);
      'p': change(p);
      'q': change(q);
      'r': change(r);
      's': change(s);
      't': change(t);
      'u': change(u);
      'v': change(v);
      'w': change(w);
      'x': change(x);
      'y': change(y);
      'z': change(z);
    end; 
  END;
  close  (fi);
  assign (fi,'lamps.out');
  rewrite(fi);
  writeln(fi,n_,' ',m_);
  close  (fi);
END.

Завдання 3. Вхідний (як завгодно великий) файл містить послідовність чисел зі значеннями у межах діапазону базового типу longint. Встановити тип впорядкованості послідовності: стала, зростає, спадає, не зростає, не спадає, не впорядкована.

Алгоритм

  1. Надати булевим змінним lt, gt, leq, geq початкового значення true.

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

  2. Прочитати (перший) член послідовності й надати змінній а його значення.

  3. Повторювати до закінчення файлу або до одночасної хибності змінних leq і geq (тобто до з'ясування, що послідовність невпорядкована):

    • прочитати наступний член послідовності й надати змінній b його значення;

    • замінити значення:

      • lt — на lt and (b< a);
      • gt — на gt and (b> a);
      • leq — на leq and (b<=a);
      • geq — на geq and (b>=a).
  4. Якщо справджується lt, тоді вивести 'Послідовність спадає', інакше
    якщо справджується gt, тоді вивести 'Послідовність зростає', інакше
    якщо справджуються leq і geq, тоді вивести 'Послідовність стала', інакше
    якщо справджується leq, тоді вивести 'Послідовність не зростає', інакше
    якщо справджується geq, тоді вивести 'Послідовність не спадає', інакше
    вивести 'Послідовність не впорядкована'.

Програма

var lt,     {Чи послідовність: спадає}
    gt,                       {зростає}
   leq,                       {не зростає}
   geq: boolean;              {не спадає}
  a,       {попередній член послідовності}
  b: longint;{поточний член послідовності}
  fi: text;    {вхідний або вихідний файл}

BEGIN
  lt :=true;
  gt :=true;
  leq:=true;
  geq:=true;
  assign(fi,'sequence.in');
  reset (fi);
  read(fi,a);
  repeat
    read(fi,b);
    lt :=lt  and (b< a);
    gt :=gt  and (b> a);
    leq:=leq and (b<=a);
    geq:=geq and (b>=a);
    a:=b
  until (not leq) and (not geq) or seekeof(fi);
  close  (fi);
  assign (fi,'sequence.out');
  rewrite(fi);
  write(fi,'Послідовність ');
  if lt then writeln (fi,'спадає')  else
  if gt then writeln (fi,'зростає') else
  if leq and geq then writeln (fi,'стала') else
  if leq then writeln (fi,'не зростає') else
  if geq then writeln (fi,'не спадає')
         else writeln (fi,'не впорядкована');
  close  (fi);
END.

4. Інструктаж з ТБ
5. Закріплення вивченого матеріалу

Завантажити інтегроване середовище програмування Free Pascal. Для кожного із завдань 1, 2 і 3 виконати вказівку меню File / New. Набравши текст прогами, компілювати (Alt + F9) й виправляти доти, поки результат компіляції не стане успішним. Запускати на виконання програму (Ctrl + F9) і вводити всі змістовно різні вхідні дані, для яких шлях галуженнями алгоритму різний. У разі помилкових результатів:

Про успішне виконання кожного завдання повідомляти вчителя підняттям руки.

6. Підбиття підсумків уроку
Виставлення оцінок.

7. Домашнє завдання

Завдання 4. Вхідний файл містить послідовність чисел зі значеннями у межах діапазону базового типу int64. Встановити, чи є послідовність арифметичною прогресією, тобто чи різниця двох послідовних членів є сталою.


Текст упорядкував Мельник Володимир Михайлович, вчитель спеціалізованої школи І–ІІІ ступенів № 320 з поглибленим вивченням української мови Деснянського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 17.03.2014 по 04.04.2014.