14139

Запис алгоритмів з використанням вказівки розгалуження мовою програмування

Конспект урока

Информатика, кибернетика и программирование

Тема уроку: Запис алгоритмів з використанням вказівки розгалуження мовою програмування. Мета уроку: Навчити створювати математичні моделі задач складати алгоритми з використанням команди розгалуження та записувати їх мовою програмування.Тип уроку: Розбір задач що

Украинкский

2013-05-21

70.5 KB

3 чел.

Тема уроку: "Запис алгоритмів з використанням вказівки розгалуження мовою програмування."

Мета уроку: Навчити створювати математичні моделі задач, складати алгоритми з використанням команди розгалуження та записувати їх мовою програмування.
Тип уроку: Розбір задач, що потребують для свого розв'язання вказівку розгалуження.

На початку уроку повторити основні поняття за темою "Команда розгалуження" (поняття умови, умови прості та складені, поняття команди розгалуження, її форми, запис мовою програмування та мовою блок-схем).
На цьому уроці пропонується розглянути наступні задачі з використанням команди розгалуження. Зверніть увагу на те, що перед розв'язанням цих задач необхідно з учнями розібрати математичну модель задачі, довівши математичні співвідношення, що приведуть до отримання бажаного результату.

Задача №86.
Умова: Чебурашка вирішив купити килими, щоб застелити кімнату, в якій він мешкав разом з Геною. Їхня прямокутна кімната виявилася розмірами a x b, де a та b - цілі числа. Коли Чебурашка запитав у магазині, які килими є у продажу, то продавець повідомив, що є квадратні килими зі стороною с, де с - ціле число. Яку кількість килимів необхідно придбати Чебурашці, щоб накрити максимальну площу кімнати. Килими не можна накладати та підгинати. Визначити, яка площа кімнати буде ненакритою килимами. Передбачити ситуацію, коли розміри килиму перевищують розміри кімнати.
Очевидно, що якщо довжина сторони килима більша за будь-яку зі сторін кімнати, то застелити її цими килимами неможливо. Крім того, для знаходження кількості килимів, що вміщуються по одній зі сторін кімнати без їх підгинання, необхідно поділити націло довжину кімнати на довжину килима. Загальна кількість килимів знаходиться за наступною формулою:
K = K1 * K2,
де
К1 та К2 - кількості килимів, що вміщуються вздовж двох суміжних сторін кімнати.
Площа, що незакрита килимами, визначається як різниця між площею кімнати та площею всіх куплених килимів.
Програма, що реалізує алгоритм розв'язку даної задачі, має наступний вигляд:

Program Example_86;

Uses crt;

Var a,b,c,S:word;  {a,b – розміри кімнати, с –  

   K,K1,K2 : word;  розміри килима, K1 – кількість   

                   килимів вздовж однієї стіни, К2 –  

                   кількість килимів вздовж другої  

                   стіни, К – загальна кількість  

                   килимів, S – площа кімнати, що

                   не накрита килимами} 

Begin 

 Clrscr;          {Очищення екрану} 

 Write(‘Введіть розміри кімнати: ’);

 Readln(a,b);

 Write(‘Введіть розміри килима: ’);

 Readln(с);

 If (c > a) or (c > b)  

 Then writeln(‘Кімнату неможливо накрити такими

               килимами’)

 Else  

   Begin 

     K1:=a div c;

     K2:=b div c;

     K := K1*K2;

     S := a*b – K*c*c;

     Writeln(‘Кількість куплених килимів  ’, K);

     Writeln(‘Площа кімнати, що ненакрита килимами  ’, S);

   End;

 Readkey;  {Затримка зображення на екрані до  

            натискання будь якої клавіші} 

End.

Задача №89.
Умова: Від річкового вокзалу відійшли одночасно у протилежних напрямках теплохід та турист. Теплохід рухався зі швидкістю V1 км/год, а турист по стежці вздовж річки зі швидкістю V2 км/год. Якщо через N годин турист передумає і вирішить попливти річкою назад за теплоходом зі швидкістю V3 км/год, то чи встигне він підсісти на теплохід, який має за графіком зупинку через Y годин після початку руху і стоїть на цій зупинці Z годин? Зважати на те, що всі події відбувалися протягом однієї доби.
Якщо турист на протязі
N годин рухався в протилежному напрямку від теплоходу, то відстань між ними в той момент, коди турист вирішив наздогнати теплохід, була наступна:
S = (V1 + V2) * N
де
V1 та V2 - швидкості теплоходу та туриста відповідно.
Швидкість, з якою турист почне наздоганяти теплохід - (
V3 - V1) км за годину, де V3 - швидкість, з якою турист попливе навздогін теплоходу. Час, який буде у туриста для наздоганяння, (Y - N + Z) годин, тому що зупинка у теплохода буде за розкладом через Y годин після початку руху, але N годин він вже плив, а Z годин теплохід буде стояти на цій зупинці. Тоді за цей час турист пройде відстань:
St = (V3 - V1) * (Y - N + Z)
Вочевидь, що турист встигне підсісти на теплохід тільки в тому випадку, якщо відстань
St буде не менше, ніж відстань, на яку теплохід перегнав туриста.
Програма, що реалізує запропонований алгоритм, має наступний вигляд:

Program Example_89;

Uses crt;

Var V1,V2,V3:real;  

   N,Y,Z : real;      

Begin 

 Clrscr;          {Очищення екрану} 

 Write(‘Введіть швидкості теплоходу та туриста: ’);

 Readln(V1,V2);

 Write(‘Введіть час, через який турист вирішив  

        підсісти на теплохід: ’);

 Readln(N);

 Write(‘Введіть швидкість, з якою турист буде плисти  

        за теплоходом, час, через який у теплохода  

        зупинка, та тривалість зупинки: ’);

 Readln(V3,Y,Z);

 If (V1<=0)or(V2<=0)or(V3<=0)or(N<=0)or(Y<=0)or(Z<=0)

 Then writeln(‘Помилкові вхідні дані’)

 Else 

   Begin 

     S:=(V1+V2)*N;

     St:=(V3-V1)*(Y-N+Z);

     If St>=S

     Then writeln(‘Турист встигне на теплохід.’)

     Else writeln(‘Турист не встигне на теплохід.’);

   End;

 Readkey;  {Затримка зображення на екрані до  

            натискання будь якої клавіші} 

End.

Задача №90.
Умова: Жили собі дід і баба і був у них город прямокутної форми. Довжина городу була А м, а ширина складала В м. Якось дід посварився з бабою і вирішив поділити город порівну. Тепер у діда квадратний город зі стороною С м, відрізаний скраю, а решта дісталася бабі. Визначити, чи не залишилась баба ошуканою та якої форми дістався їй город - прямокутної чи квадратної?
Взагалі задача має дуже простий розв'язок: адже бабуся не буде ошуканою в тому випадку, якщо площа городу, що залишилася для неї, не буде меншою, ніж площа дідусевого городу, тобто
С^2 <= A*B - C^2
Та це тільки на перший погляд. Насправді в даній задачі може бути велика кількість винятків. Наприклад, якщо дідусь захоче відрізати собі город зі стороною, більшою, ніж сторона загального городу, то це неможливо зробити взагалі. Якщо ж він відріже, то город, що залишиться, може мати квадратну, прямокутну або ніякову форми (дивись малюнок):

Програма, що реалізує запропонований алгоритм, має наступний вигляд:

Program Example_90;

Uses crt;

Var A,B,C:real;     {A,B – розміри городу, С –  

                    розміри дідусевого городу} 

 Begin 

 Clrscr;          {Очищення екрану} 

 Write(‘Введіть розміри городу: ’);

 Readln(A,B);

 Write(‘Введіть довжину сторони дідусевого городу: ’);

 Readln(С);

 If (A<=0)or(B<=0)or(C<=0)

 Then writeln(‘Помилкові вхідні дані’)

 Else 

   Begin 

     If (C>A) or (C>B)

     Then writeln(‘Дідусь не зможе відрізати город  

                  такого розміру.’)

     else 

       begin 

         If A*B-sqr(C)<=sqr(C)

         Then writeln(‘Бабуся ошукана.’)

         Else writeln(‘Бабуся не ошукана.’);

         If (A<>C) and (B<>C)

         Then writeln(‘Город залишився ніякової форми’)

         Else  

           If ((A=C)and(B/2=C))or((B=C)and(A/2=C))

           Then writeln(‘У бабусі квадратний город.’)

           Else writeln(‘У бабусі прямокутний город.’);

   End;

 Readkey;  {Затримка зображення на екрані до  

            натискання будь якої клавіші} 

End.

Задача №91.
Умова: Трьом Товстунам подали на десерт кремові тістечка. Маса одного тістечка складала Х кг, а маса Товстунів відповідно Х1 кг, Х2 кг та Х3 кг. Перший Товстун з'їв N тістечок. Кожний наступний Товстун з'їдав у два рази більше від попереднього, але при цьому він не міг з'їсти більше половини своєї власної ваги. Скільки тістечок було з'їдено Товстунами за обідом?
Зверніть увагу на те, що другий та третій Товстуни за умовою можуть з'їсти тістечок у два рази більше ніж попередній Товстун, але не можуть з'їсти більше половини своєї ваги. Тому фактично в задачі необхідно перевірити, чи не перевищує кількість тістечок, що може з'їсти кожний Товстун, дозволену масу і у відповідності до цього підрахувати кількість тістечок, що були з'їдені.
Наприклад, якщо другий Товстун може з'їсти 2
N тістечок, то вага цієї їжі буде 2NX кг. Але за умовою він не може з'їсти більше половини своєї ваги, тобто більше ніж X1/2 кг. Тому якщо вага тих тістечок, що Товстун може з'їсти не перевищує поріг Х1/2 кг, то ми до загальної кількості тістечок додаємо всі можливі, тобто 2N, якщо ж перевищує, то ми додаємо тільки ту кількість тістечок, що не дозволяє перевищити припустимий поріг, тобто X1/2/X (дозволена вага їжі поділити на вагу одного тістечка). Якщо в цьому випадку число вийде нецілим, то це означає, що Товстун з'їв тістечко не повністю. Щоб такого не трапилось, ми робимо відкидання дробової частини після ділення за допомогою функції trunc.
Програма, що реалізує запропонований алгоритм, має наступний вигляд:

Program Example_91;

Uses crt;

Var X,X1,X2,X3:real;    {Хвага тістечка,  

                        Х1,Х2,Х3 – вага Товстунів} 

   N,Counter : integer;  {N – кількість тістечок, що  

                         зїв перший Товстун;  

                         Counter – загальна кількість  

                         зїдених тістечок}  

 Begin 

 Clrscr;          {Очищення екрану} 

 Write(‘Введіть вагу тістечка: ’);

 Readln(Х);

 Write(‘Введіть вагу Товстунів (відповідно першого,  

        другого та третього): ’);

 Readln(X1, X2, X3);

 Write(‘Введіть кількість тістечок, що з’їв перший  

       Товстун ’);

 Readln(N);

 If (X<=0)or(X1<=0)or(X2<=0)or(X3<=0)or(N<=0)

 Then writeln(‘Помилкові вхідні дані’)

 Else 

   Begin 

     Counter:=N;      {Зїв перший Товстун} 

     If N*2*X<=X2/2

     Then Counter:=Counter+2*N

     Else Counter:= Counter+ trunc(X2/2/X);

     If N*4*X<=X3/2

     Then Counter:=Counter+4*N

     Else Counter:= Counter+ trunc(X3/2/X);

     Writeln(‘Кількість з’їдених тістечок становить: ’,

              Counter);

   End;

 Readkey;  {Затримка зображення на екрані до  

            натискання будь якої клавіші} 

End.

Задача №95.
Умова: В велосипедист Микола, стартувавши з точки (X0, Y0) та рухаючись по прямій A(x - X0) + B(y - Y0) + C = 0, мріє про те, як він покатає на своєму велосипеді сусідку Катрусю. Чи здійсняться мрії Миколи, якщо неподалік, у точці (P, Q), росте дерево?
В даній задачі зовсім немає проблем з вхідними даними, тому що, якщо вважати місцевість, по якій рухається Микола, координатною площиною, то його початкові координати та координати дерева можуть мати будь-яке значення. А мрія Миколчина здійснить тільки в тому випадку, коли координати дерева не співпадуть з точкою на прямій, що задає траєкторію руху Миколи, тобто при підстановці координат дерева у рівняння прямої ми не отримаємо правильну рівність.
Програма, що реалізує запропонований алгоритм, має наступний вигляд:

Program Example_95;

Uses crt;

Var X0,Y0,P,Q:real;   {X0,Y0 – координати точки, з  

                     якої стартував Микола; P,Q –  

                     координати дерева} 

   A,B,C: real;             {A,B,C – коефіцієнти, що задають  

                     рівняння прямої, по якій  

                     рухається Микола}  

 Begin 

 Clrscr;          {Очищення екрану} 

 Write(‘Введіть коефіцієнти рівняння прямої, по якій  

        рухається Микола: ’);

 Readln(A,B,C);

 Write(‘Введіть початкові координати хлопця: ’);

 Readln(X0, Y0);

 Write(‘Введіть координати дерева, що знаходиться на  

        шляху Миколки:  ’);

 Readln(P,Q);

 If A*(P-X0)+B*(Q-Y0)+C=0

 Then writeln(‘Мріям Миколки не здійснитися...’)

 Else writeln(‘Миколки покатає Катрусю на своєму  

              Велосипеді.’)

 Readkey;     {Затримка зображення на екрані до  

               натискання будь якої клавіші} 

End.

Домашнє завдання:

  •  прочитати сторінки 59 - 65 запропонованого підручника;
  •  задачі №87, 88, 93, 94.

4


 

А также другие работы, которые могут Вас заинтересовать

81364. Відповідальність за невиконання рішення, що зобов’язує боржника виконати певні дії, та рішення про поновлення на роботі 22.33 KB
  89 Закону у разі невиконання без поважних причин у встановлений державним виконавцем строк рішення що зобовязує боржника виконати певні дії та рішення про поновлення на роботі державний виконавець виносить постанову про накладення штрафу на боржника фізичну особу від десяти до двадцяти неоподатковуваних мінімумів доходів громадян; на посадових осіб від двадцяти до сорока неоподатковуваних мінімумів доходів громадян; на боржника юридичну особу від сорока до шістдесяти неоподатковуваних мінімумів доходів громадян та встановлює новий...
81365. Звільнення майна боржника з-під арешту, зняття арешту 27.57 KB
  Особа яка вважає що майно на яке накладено арешт належить їй а не боржникові може звернутися до суду з позовом про визнання права на майно і про звільнення майна зпід арешту. У разі прийняття судом рішення про звільнення майна зпід арешту або сплати боржником повної суми боргу за виконавчим документом до реалізації арештованого майна боржника майно звільняється зпід арешту за постановою державного виконавця яка затверджується начальником відповідного органу державної виконавчої служби додаток 40 не пізніше наступного дня коли...
81366. Поняття виконавчого провадження та його місце в системі права України 24.12 KB
  Виконавче провадження це врегульовані законодавством України суспільні відносини що виникають і реалізуються в процесі примусового виконання між органами державної виконавчої служби і посадовими особами які здійснюють примусову реалізацію рішень ухвал постанов судових і несудових органів з одного боку та між особами котрі беруть участь у виконавчому провадженні і залучаються до проведення виконавчих дій з другого боку на підставах у спосіб та в межах встановлених законом. Закону України Про виконавче провадження визначає...
81367. Принципи виконавчого провадження : поняття, зміст та значення 30.61 KB
  Принципи виконавчого провадження це закріплені у правових нормах основні засади керівні положення які визначають організацію органів державної виконавчої служби зміст і спрямованість її діяльності правовий статус учасників виконавчого провадження. На підставі теоретичних положень аналізу чинного законодавства та практики його застосування можна виокремити такі принципи виконавчого провадження: принцип гуманізма полягає у тому що заборонено у будьякій формі посягати на права і свободи фізичних осіб які беруть участь у виконавчому...
81368. Поняття, сутність та елементи правовідносин у виконавчому провадженні 28.23 KB
  Правовідносини у виконавчому провадженні виникають між державним виконавцем з одного боку та іншими субєктами виконавчого провадження стягувачем боржником з іншого. До ознак правовідносин що виникають у виконавчому провадженні слід віднести такі: вони виникають при примусовому виконанні рішень судів та інших юрисдикційних органів та регламентовані законодавством про виконавче провадження; без волі стягувана фізичної або юридичної особи державний виконавець не має права відкривати виконавче провадження. У випадку звернення...
81369. Суб’єкти виконавчого провадження та їх класифікація 25.45 KB
  Субєкти виконавчого провадження субєкти виконавчих правовідносин учасники виконавчого провадження це носії процесуальних прав та обовязків у виконавчому провадженні. Закону учасниками виконавчого провадження є державний виконавець сторони представники сторін прокурор експерти спеціалісти перекладачі субєкти оціночної діяльності субєкти господарювання. Прокурор бере участь у виконавчому провадженні у випадку здійснення представництва інтересів громадянина або держави в суді та відкриття виконавчого провадження на підставі...
81370. Органи і посадові особи Державної виконавчої служби, їх правове становище та повноваження 24.9 KB
  Органами державної виконавчої служби є: Департамент державної виконавчої служби Міністерства юстиції України до складу якого входить відділ примусового виконання рішень; управління державної виконавчої служби Головного управління юстиції Міністерства юстиції України в Автономній Республіці Крим головних управлінь юстиції в областях містах Києві та Севастополі до складу яких входять відділи примусового виконання рішень; районні районні у містах міські міст обласного значення міськрайонні відділи державної виконавчої служби відповідних...
81371. Державний виконавець як обов’язковий суб’єкт виконавчого провадження, його обов’язки та права 29.09 KB
  Державний виконавець у процесі здійснення виконавчого провадження має право: проводити перевірку виконання боржниками рішень що підлягають виконанню відповідно до цього Закону; здійснювати перевірку виконання юридичними особами всіх форм власності фізичними особами фізичними особами підприємцями рішень стосовно працюючих у них боржників; з метою захисту інтересів стягувача одержувати безоплатно від органів установ організацій посадових осіб сторін та учасників виконавчого провадження необхідні для проведення виконавчих дій...
81372. Роль суду у виконавчому провадженні 22.06 KB
  Роль суду у виконавчому провадженні є досить важливою і багатоаспектною. Це полягає в тому що суд не лише здійснює контроль у виконавчому провадженні але й вирішує цілий ряд питань виконавчого провадження. Специфіка судового контролю полягає в тому що він здійснюється лише при розгляді конкретної цивільної справи судом і лише у випадку звернення особи за захистом.