четвер, 6 травня 2021 р.

Дистанційна освіта з інформатики 11.05.2021-16.09.2021

 

Дистанційна освіта з інформатики за травень 2021 року

в період

11.05.2021-16.09.2021

Теоретична частина

Створення та аналіз математичної моделі  квадратних рівнянь з параметром для "коректного" опрацювання  в алгоритмі пошуку коренів із відомими властивостями.

Запитання 1. Як аналізувати математичні моделі лінійних рівнянь з параметрами, якщо корені рівняння мають бути тільки від’ємними числами?

Відповідь. Продемонструємо зразок аналізу такого лінійного рівняння з параметром.

 

Завдання 1. Знайти такі значеннях параметра  а, при яких рівняння

-4х + 5а +8= -3а+2ах-10

 з невідомим  х має тільки від’ємні корені. Створити та реалізувати алгоритми мовою програмування Python3 для пошуку унікальних коренів лінійних рівнянь з параметром відповідно вказаним властивостям коренів рівняння.

 

Аналіз математичної моделі.

 

-4х + 5а +8= -3а+2ах-10

-4х -2ах+ 5а +8= -3а-10

-4х -2ах = -3а-10-5а-8

-2(2+а)х = -8а-18

-2(2+а)х = -2(4а+9)

(2+а)х = (4а+9)

 

Якщо 2+а=0, тобто а =-2,   тоді 4*(-2)+9=1. Отримаємо: 0х=1.

Якщо а= -2, то дане рівняння немає коренів.

 

(2+а)х = (4а+9)

х = (4а+9)/(2+а).  Знайдемо нулі чисельника  і нулі знаменника. Це такі числа:  а= -2.25;  а= -2.

Відповідно умові задачі, має виконувати нерівність:  (4а+9)/(2+а)<0, тобто корені рівняння мають бути від’ємними числами. Розглянемо два випадки: а)чисельник - це додатне число, знаменник - це від’ємне число; б) чисельник - це від’ємне число, знаменник - це додатне число;

Випадок 1. Система двох нерівностей: 4а+9<0     i    2+а>0,  система немає розв’язків.

Випадок 2. Система двох нерівностей: 4а+9>0     i    2+а<0,  розв’язки системи: ає(-2.25; -2)

aбо -2.25<a<-2.

Відповідь:  Якщо параметр -2.25 <a< -2, то рівняння

-4х + 5а +8= -3а+2ах-10

 з невідомим  х має тільки від’ємний корінь х = (4а+9)/(2+а).

 

Реалізація мовою програмування Python3.

 

print('Якщо множина параметрa -2.25 <a< -2, то рівняння')

print('то  корінь х = (4а+9)/(2+а)   для  даного рівняння') 

print('-4х + 5а +8= -3а+2ах-10 знаходяться на інтервалах: -оо <х<0.')

k=300; a1=-2.25; a2=-2; h=(a2-a1)/k; a=['None']*k;

for j in range(3,k):

    a[j]=float(-2.25+float(h*j))

    z=float((4*a[j]+9))

    u=float(2+a[j])

    x=float(z/u)

    print(j,'-ий випадок. Якщо параметр a=',a[j],' то корінь рівняння x(a)=',x)

 

Протестувати програму декілька разів.

Тест 1. Якщо k=5.

Тест 2. Якщо k=10.

Тест 3. Якщо k=100.

 

Запитання 2. Як аналізувати математичні моделі лінійних рівнянь з параметрами, якщо корені рівняння мають бути тільки додатними числами?

Відповідь. Продемонструємо зразок аналізу такого лінійного рівняння з параметром.

Завдання 2. Знайти усі такі значеннях параметра  а, при яких рівняння

-3ах + 4а = -2а+4х-4   

з невідомим  х має тільки додатні корені. Створити та реалізувати алгоритми мовою програмування Python3 для пошуку унікальних коренів лінійних рівнянь з параметром відповідно вказаним властивостям коренів рівняння.

 

Аналіз математичної моделі.

-3ах + 4а = -2а+4х-4

-3ах-4х= - 4а -2а+-4   

-(3а+4)х=-(6а+4)

(3а+4)х=(6а+4)

х=(6а+4)/(3a+4), якщо а< >-4/3

 

 

Якщо а=-4/3,  тоді 6*(-4/3)+4=-4. Отримаємо: 0х=-4.

Якщо а= -4/3, то дане рівняння немає коренів.

 

(4+3а)х = (4+6a)

х = (6а+4)/(4+3а).  Знайдемо нулі чисельника  і нулі знаменника. Це такі числа:  а= -4/3;  а= -2/3.

Відповідно умові задачі, має виконувати нерівність:  (6а+4)/(4+3а)>0, тобто корені рівняння мають бути додатними числами. Розглянемо два випадки: а)чисельник - це додатне число, знаменник - це додатне число; б) чисельник - це від’ємне число, знаменник - це від’ємне число;

Випадок 1. Система двох нерівностей: 6а+4>0     i    4+3а>0,  система має розв’язки ає( -2/3; +oo) .

Випадок 2. Система двох нерівностей: 6а+4<0     i    4+3а<0,  розв’язки системи: ає(-oo; -4/3)

Таким чином, маємо таку множину параметрів: aбо a<-4/3 або a>-2/3

Відповідь:  Якщо параметр a<-4/3 або a>-2/3, то рівняння

-3ах + 4а = -2а+4х-4

 з невідомим  х має тільки додатний  корінь х = (6а+4)/4+3а).

 

Реалізація мовою програмування Python3.

 

print('Якщо параметр a<-4/3 або a>-2/3, то рівняння -3ах + 4а = -2а+4х-4 ')

print(' має додатний корінь х = (6а+4)/(4+3а) ') 

print(' Корені рівняння для цього випадку:')

k=300; a1=-4/3; a2=-2/3;  h=10/k; a=['None']*k;  b=['None']*k;

for j in range(3,k):

    a[j]=float(a1-float(h*j));  b[j]=float(a2+float(h*j));

    za=float((6*a[j]+4));    zb=float((6*b[j]+4)); 

    ua=float(4+3*a[j]);     ub=float(4+3*b[j]);      

    xa=float(za/ua);          xb=float(zb/ub);   

    print(j,'-ий випадок. Якщо параметр a1=',a[j],' то корінь рівняння x(a1)=',xa)

    print(j,'-ий випадок. Якщо параметр a2=',b[j],' то корінь рівняння x(a2)=',xb)

 

Протестувати програму декілька разів.

Тест 1. Якщо k=13.

Тест 2. Якщо k=19.

Тест 3. Якщо k=20.

Запитання 3. Як аналізувати математичні моделі лінійних рівнянь з параметрами, якщо корені рівняння мають бути тільки протилежними числами?

Відповідь. Продемонструємо зразок аналізу такого лінійного рівняння з параметром.

Завдання 3.Знайти усі значення  параметра  а, при яких  рівняння |аx-3a|=5+2а

з невідомим  х має лише  протилежні корені. Створити та реалізувати алгоритми мовою програмування Python3 для пошуку унікальних коренів лінійних рівнянь з параметром відповідно вказаним властивостям коренів рівняння.

 

Аналіз математичної моделі.

|аx-3a|=5+2а

аx-3a=5+2а;      аx-3a=-5-2а;

а(x-3)=5+2а;      а(x-3)=-5-2а;  

а)якщо а=0, то рівняння немає розв’язків. Тому, що

0*(х-3)=5;           0*(х-3)=-5    

б)якщо а< >0, то рівняння має розв’язки.

x1=5/а+5;         x2=-5/а+1;     

Відповідно умові завдання, отримаємо рівняння для двох протилежних коренів:

5/а+5=-(-5/а+1)

5/а-5/а = 4;                

0<>4

Таким чином, не існує таких  параметрів а, при якому дане рівняння мало би два корені у вигляді протилежних чисел.

 

Реалізація мовою програмування Python3.

 

print('Якщо параметр a-дійсне число, то рівняння |аx-3a|=5+2а')

print('при a<>0 має два корені x1=5/а+5; x2=-5/а+1;       ') 

print(' Корені цього рівняння не можуть бути протилежними числами:')

k=5; a1=-0.5; a2=0.5;  h=10/k; a=['None']*k;  b=['None']*k;

for j in range(3,k,2):

    a[j]=float(a1-float(h*j));  b[j]=float(a2+float(h*j));

    x1=float((5/a[j]+5));    x2=float((-5/a[j]+1));

    print(j,'-ий випадок. Якщо параметр a1=',a[j],' то корінь рівняння x1(a1)=',x1, 'x2(a1)=',x2)

    if x1==-x2:

        print('Рівняння має протилежні корені: x1(a1)=',x1, 'x2(a1)=',x2)

    else:

        print('Рівняння немає протилежні корені')

    x3=float((5/b[j]+5));    x4=float((-5/b[j]+1)); 

    print(j+1,'-ий випадок. Якщо параметр a2=',b[j],' то корінь рівняння x3(a2)=',x3, 'x4(a2)=',x4)

    if x3==-x4:

        print('Рівняння має протилежні корені: x3(a1)=',x3, 'x4(a1)=',x4)

    else:

        print('Рівняння немає протилежні корені')

 

Протестувати програму декілька разів.

Тест 1. Якщо k=40.

Тест 2. Якщо k=10.

Тест 3. Якщо k=90.

 

Запитання 4. Як аналізувати математичні моделі лінійних рівнянь з параметрами, якщо корені рівняння мають бути тільки непарними числами?

Відповідь. Продемонструємо зразок аналізу такого лінійного рівняння з параметром.

Завдання 4. Знайти усі значення  параметра  а, при яких  рівняння

-4ах + 5а = -6а+3х-2   

з невідомим  х має  тільки непарні корені. Створити та реалізувати алгоритми мовою програмування Python3 для пошуку унікальних коренів лінійних рівнянь з параметром відповідно вказаним властивостям коренів рівняння.

 

Аналіз математичної моделі.

-4ах + 5а = -6а+3х-2   

-4ах-3x = -6а-5a-2   

-(+3)x = -(11а+2)  

(+3)x = (11а+2) 

Якщо а =-0.75 то рівняння немає коренів.

Якщо а <>-0.75 то рівняння має корінь.

x = (11а+2)/(+3)   

Відповідно умові завдання, отримаємо рівняння для непарних чисел:

2m-1= (11а+2)/(+3) ,   де m - ціле число

Звідси,

А=(6m-5)/( 15-8m),   де m - ціле число

Таким чином, при таких  параметрів а=(6m-5)/( 15-8m),    

де m - ціле число дане рівняння  -4ах + 5а = -6а+3х-2   

має непарний корінь  у вигляді  2m-1=(11а+2)/(+3) .

 

 

Реалізація мовою програмування Python3.

 

print('Якщо параметри а=(6m-5)/(15-8m),   де m - ціле число, дане рівняння:  -4ах + 5а = -6а+3х-2 ')

print('має непарний корінь  у вигляді  х=2m-1=(11а+2)/(4а+3)    ') 

print('Корені цього рівняння можуть бути непарними числами:')

k=10; a1=-0.5; a2=0.5;  h=10/k; a=['None']*k;

for j in range(0,k,1):

    a[j]=float(6*j-5)/float(15-8*j); 

    x1=float(11*a[j]+2)/float((4*a[j]+3));

    print(j,'-ий випадок. Якщо параметр a1=',a[j],' то корінь рівняння x1(a1)=',round(x1,0))

 

Протестувати програму декілька разів.

Тест 1. Якщо k=14.

Тест 2. Якщо k=20.

Тест 3. Якщо k=50.

 

Запитання 5. Як аналізувати математичні моделі лінійних рівнянь з параметрами, якщо корені рівняння мають бути тільки парними числами?

Відповідь. Продемонструємо зразок аналізу такого лінійного рівняння з параметром.

Завдання 5. Знайти усі значення  параметра  а, при яких  рівняння

-5ах + а = -2а+х-1  

з невідомим  х має  тільки парні корені. Створити та реалізувати алгоритми мовою програмування Python3 для пошуку унікальних коренів лінійних рівнянь з параметром відповідно вказаним властивостям коренів рівняння.

Аналіз математичної моделі.

-5ах + а = -2а+х-1  

-5ах -x = -2а-a-1  

-(5a-1)x =-(3a+1)

Якщо а =0.2 то рівняння немає коренів.

Якщо а <>0.2 то рівняння має корінь.

x=(3a+1)/(5a-1)

Відповідно умові завдання, отримаємо рівняння для парних чисел:

2m=(3a+1)/(5a-1),   де m - ціле число

Звідси,

a=(2m+1)/(10m-3),   де m - ціле число

Таким чином, при таких  параметрів а=(2m+1)/(10m-3),    

де m - ціле число дане рівняння  -5ах + а = -2а+х-1  

має парний корінь  у вигляді  2m=(3a+1)/(5a-1).

 

Реалізація мовою програмування Python3.

 

print('Якщо  параметри а=(2m+1)/(10m-3),де m - ціле число дане рівняння  -5ах + а = -2а+х-1    ')

print('має парний корінь  у вигляді  2m=(3a+1)/(5a-1).   ') 

print('Корені цього рівняння можуть бути парними числами:')

k=10; a1=-0.5; a2=0.5;  h=10/k; a=['None']*k;

for j in range(0,k,1):

    a[j]=float(2*j+1)/float(10*j-3); 

    x1=float(3*a[j]+1)/float((5*a[j]-1));

    print(j,'-ий випадок. Якщо параметр a1=',a[j],' то корінь рівняння x1(a1)=',round(x1,0))

 

Протестувати програму декілька разів.

Тест 1. Якщо k=20.

Тест 2. Якщо k=15.

Тест 3. Якщо k=70.

  





Практична частина


Задача А1. Скласти програму розв’язання квадратного рівняння.

Розв’язання :              В загальному вигляді квадратне рівняння має вигляд:

                                                                                                              ax2 + bx + c = 0

Згадаймо, як ми його розв’язуємо на уроках математики і точно так само розв’яжемо на мові програмування з тією відмінністю, що на уроках  математики ви розв’язували конкретне рівняння, а наша програма зможе розв’язати будь–яке квадратне рівняння (на множині дійсних чисел). Всі пояснення в коментарях до програми, але нам хотілося б, щоб ви найбільшу увагу звернули на розміщення і використання команд розгалуження.

Реалізація

 

 

program kwur;

label 10,20,30;

var a,b,c,d,x1,x2 : real;

begin

  writeln( ‘ Програма розв’’язує квадратнi рiвняння! ’);

  writeln(‘ Загальний вигляд квадратного рiвняння: ’);

  writeln( ‘        Ax*x + B*x + C = 0 ’);

  writeln( ‘ Введiть коефiцiєнти: ’);

  10: write( ‘A = ’);readln(a);

      if a = 0 then begin

                      writeln( ‘Цей випадок роз’’вяжiть самi. ’);

                      goto 10;

                    end;

  20: write( ‘B = ’);readln(b);

      if b = 0 then begin

                      writeln( ‘ Цей випадок розв’’яжiть самi. ’);

                      goto 20;

                    end;

  30: write( ‘C = ’);readln(c);

      if c = 0 then begin

                      writeln( ‘ Цей випадок розв’’яжiть самi. ’);

                      goto 30;

                    end;

  d := b*b - 4*a*c;

  if d > 0 then begin

                  writeln( ‘ Рiвняння має два коренi: ’);

                  x1 := (-b-sqrt(d))/(2*a);

                  x2 := (-b+sqrt(d))/(2*a);

                  writeln( ‘x1 = ’,x1:2:2, ‘  x2 = ’,x2:2:2);

                end

  else if d = 0 then begin

                       writeln( ‘ Рiвняння має один корiнь: ’);

                       x1 := -b/(2*a);

                       writeln( ‘x = ’,x1:2:2);

                     end

       else writeln( ‘ Дане рiвняння коренiв не має. ’);

  readln;

end.

 

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

 

Детально розібравшись з усіма видами запису команди розгалуження на прикладі щойно приведеної програми ви позбавите себе від неприємних несподіванок у майбутньому.

 

 

Задача А2. На площині задано три точки своїми координатами. Чи лежать точки на одній прямій.

Розв’язання: Розв’язок здається напрошується: знайти відстань між всіма трьома точками і якщо сума двох з них дорівнює третій, то точки лежать на одній прямій, в противному випадку – ні. Що ж , перевіряємо:

 

Реалізація

 

 

program pixel3;

var x1,x2,x3,y1,y2,y3 : integer;

    d1,d2,d3 : real;

begin

  writeln('Координати точки А:');

  write('Ха = ');readln(x1);

  write('Ya = ');readln(y1);

  writeln('Координати точки B:');

  write('Хb = ');readln(x1);

  write('Yb = ');readln(y1);

  writeln('Координати точки C:');

  write('Хc = ');readln(x1);

  write('Yc = ');readln(y1);

{  Перевірка на підставі описаного вище способу }

  d1 := sqrt(sqr(x1-x2)+sqr(y1-y2));

  d2 := sqrt(sqr(x1-x3)+sqr(y1-y3));

  d3 := sqrt(sqr(x2-x3)+sqr(y3-y3));

  if (d1 = d2 + d3) or (d2 = d1 + d3) or (d3 = d1+d2)

                 then writeln('На однiй прямiй.')

  else writeln('Не на однiй прямiй.');

  readln

end.

 

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

 

 

Але давайте подумаємо, чи не можна розв’язати задачу іншим способом? Виявляється можна, для цього потрібно просто пам’ятати рівняння прямої, що проходить через дві точки виражене через координати, яке вивчалось на уроках геометрії. Ви можете сказати: так то через дві точки, а в нас їх аж три! Вірно, тим краще! Чому – спробуйте здогадатись самі і лише після цього приступайте до самостійної реалізації запропонованого способу. Якщо ж ні – то вам пропонується другий варіант розв’язання, детально розібравшись з яким ви, мабуть, вже не забудете рівняння прямої. Отже, спосіб другий:

Реалізація

 

 

program pixel3а;

var x1,x2,x3,y1,y2,y3 : integer;

begin

  writeln('Координати точки А:');

  write('Ха = ');readln(x1);

  write('Ya = ');readln(y1);

  writeln('Координати точки B:');

  write('Хb = ');readln(x2);

  write('Yb = ');readln(y2);

  writeln('Координати точки C:');

  write('Хc = ');readln(x3);

  write('Yc = ');readln(y3);

{  Перевірка на підставі рівняння прямої }

   if (х1 – х2)*(х3 – х2) –  (у1 – у2) * (у3 – у2) = 0

                then writeln('На однiй прямiй.')

  else writeln('Не на однiй прямiй.');

  readln

end.

 

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

 

Зверніть увагу на скільки стало менше змінних і виконуваних операцій. Ідея ж розв’язку полягала в тому, що ми до відомого рівняння прямої застосували правило пропорції і перенесли співмножники в одну сторону, в результаті чого отримали лінійне рівняння з двома невідомими. Після цього замість довільної точки прямої (х,у)  підставили значення координат третьої точки. Якщо точка належить прямій, то отримане рівняння повинно дорівнювати нулю.

                Дану просту задачу ми привели з однією метою: відмітити той важливий момент, що очевидне не завжди найкраще. Крім того, потрібно завжди дотримуватись правила (і не тільки при програмуванні): рішив поставлену задачу – добре, але пошукай інший спосіб – практично завжди він є! Знайшовши декілька способів розв’язання постав себе перед вибором – а який з них кращий? Ось вам ще одна демонстрація необхідності робити вибір в реальному житті. А якщо дотримуватись цього правила при вирішенні життєвих проблем, то запевняємо – успіх вам гарантовано!

Розглянемо ще одну цікаву задачу, яка також легко розв’язується з застосуванням рівняння прямої.

 

Задача А3. Два відрізки задано координатами своїх кінців. Визначити, чи перетинаються дані відрізки.

Розв’язання: Згадайте те, про що ми говорили раніше: очевидне не завжди найкраще! А це значить, що нам не потрібно шукати точку перетину відрізків, ми поступимо іншим чином. Будемо розглядати точки кінців одного відрізку відносно іншого відрізку. З геометрії відомо, що два відрізки перетинаються тоді і тільки тоді, коли кінці одного відрізку лежать в різних півплощинах відносно прямої, що проходить через інший відрізок. Причому потрібно розглядати обидва відрізка. Той факт, що дві точки лежать відносно прямої в різних півплощинах можна записати з використанням рівняння прямої таким чином:

Для точок С і D відносно прямої АВ:  

((Xc-Xa)(Xb-Xa) - (Yc-Ya)(Yb-Ya))Ч((Xd-Xa)(Xb-Xa) - (Yd-Ya)(Yb-Ya))<0

Для точок A і B відносно прямої CD:        

((Xa-Xc)(Xd-Xc) - (Ya-Yc)(Yd-Yc))Ч((Xb-Xc)(Xd-Xc) - (Yb-Yc)(Yd-Yb))<0

Щоб передбачити випадок, коли обидва відрізки лежать на одній прямій, або випадок, коли один відрізок одним своїм кінцем лежить на іншому відрізку, в сформульовані умови необхідно ще добавити перевірку на рівність нулю (див. попередню задачу). В завершеному вигляді маємо таку програму:

Реалізація

 

program line2;

var x1,x2,x3,x4,y1,y2,y3,y4 : integer;

begin

  writeln('Координати точки А:');

  write('Ха = ');readln(x1);

  write('Ya = ');readln(y1);

  writeln('Координати точки B:');

  write('Хb = ');readln(x2);

  write('Yb = ');readln(y2);

  writeln('Координати точки C:');

  write('Хc = ');readln(x3);

  write('Yc = ');readln(y3);

  writeln('Координати точки D:');

  write('Хd = ');readln(x4);

  write('Yd = ');readln(y4);

  if (((x3-x1)*(x2-x1)-(y3-y1)*(y2-y1))*((x4-x1)*(x2-x1)-(y4-y1)*(y2-y1))<=0) and

     (((x1-x3)*(x4-x3)-(y1-y3)*(y4-y3))*((x2-x3)*(x4-x3)-(y2-y3)*(y4-y3))<=0)

    then writeln('Перетинаються.')

  else writeln('Не перетинаються');

  readln

end.

 

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

 

Задача А4. Вистроїти учнів класу по зросту – від вищих до нижчих.

Для спрощення вважати, що в класі навчаються тільки хлопці.

 

Реалізація

 

Program sort1;

         uses dos, crt;

const b : array[1..10] of byte =

   (172,165,180,174,182,179,183,185,176,181);

         var a : array[1..10] of byte;

                i, j, n : integer;

       k : byte;

         begin

            clrscr;

         for i:=1 to 10 do a[i]:=b[i];     

 { Нижче реалізовано

алгоритм сортування методом обміну }

            n:=10;

            for i:=1 to n-1 do

           begin

              for j := i+1 to n  do

               if a[i]<a[j] then

                begin

                    k := a[j];

                       a[j] := a[i];

                    a[i] := k;

                end;

 

            end;           { Кінець сортування }

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

 

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




































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

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