Училище за учители
МЕЖДУПРЕДМЕТНИТЕ ВРЪЗКИ – МОТИВИРАЩ ФАКТОР ЗА НОВО КАЧЕСТВО
Резюме. Настоящата работа включва изследване на състезателни задачи по информатика, давани на първите за учебната година национални състезания по информатика за състезателна група Е (IV – V клас), чиито условия наподобяват математически модели. Описан е подход за интегриране на знания и умения по математика и информатика чрез създаване на компютърни програми за решаване на линейни (аритметични) уравнения с едно неизвестно. Това са уравнения от вида a+x=b, x-a=b, a-x=b, a*x=b, x/a=b и a/x=b, където а и b са дадени естествени числа, а неизвестното х се търси в множеството, състоящо се от всички естествени числа. Този тип задачи за 10 – 11-годишните ученици са познати като намиране на неизвестно число и по-точно – намиране на неизвестно събираемо, умаляемо, умалител, делимо, делител и множител. С помощта на метода на инверсия, прилаган за решаване на аритметични уравнения в математиката могат да се съставят компютърни програми, написани на езика С++, решаващи задачи, в които се търси една неизвестна величина в съставно аритметично уравнение с една, две, три и повече операции. Работата е предназначена за учители по математика и информатика.
Ключови думи: inversion; composite arithmetic equation; unknown variable; competitive informatics
Състояние на проблема
Задачите, давани на национални състезания и олимпиади по информатика, винаги са били обект на изследване. В изследванията дотук обаче се стъпва на авторските решения и анализи. Опитът от работата ни с четвъртокласници, които се занимават извънкласно с математика още от първи клас, показва, че същите правят далеч по-ясни и разбираеми за „малките ученици“ решения, прилагайки знанията си дотук от математиката.
В (Staribratov & Dimitrova, 2014) е представена система от типови задачи, в които се изисква образуване на числови редици по определено правило, както и пресмятане на сума и произведение на членовете на така образуваните редици.
Тази разработка беше предизвикана от начините за решаване на задача НОИ1, Е3_2012 (infos, 2012), в която авторът прави решение, използвайки свойствата на Гаусовите суми. Средното аритметично за четните числа в интервала е равно на средното аритметично на краищата му. Остава само краищата да се направят четни числа.
#include <iostream> using namespace std; int main()
{long int n,k,br,sum; cin>>n>>k;
if (n%2)n++;
if(k%2)k--;
cout<<(n+k)/2<<endl;
}
Решението, което правят учениците е:
# include <iostream> using namespace std;
int main ()
{ long long m, n, s=0, br=0,ch, i;
cin>>m>>n;
for (i=m; i<=n; i++)
{ if (i%2==0){s=s+i;br++;}
} cout<<s/br<<endl;
return 0;
}
Това решение е първото, което идва наум на един ученик от IV – V клас, който посещава школа по състезателна информатика, понеже там се учи какво е цикъл и за тях не е проблем да програмират повтарящи се действия в интервал. Решението покрива всички тестови примери, но на два от тестовете надвишава т. нар. „time limit“. В тази връзка, ученикът, ако не е посещавал извънкласна форма на обучение по математика, няма как да направи по-ефикасно решение.
Разработка (Gourov & Dimitrova, 2015) e посветена на описанието на един подход за интегриране на знания и умения по математика и информатика чрез създаване на компютърни програми за решаване на диофантови уравнения. Ако се приложи описаната методика, ще се намали сложността на алгоритъма за решаване на този тип задачи.
В настоящата разработка вниманието се насочва към задача ЕТ_Е2_2011 (infos, 2011) – „Намислих си число“.
Авторът на задачата предлага два начина за решение на задачата:
Да разгледаме уравнението:
(x:a – a):a – a = b
(x:a – a):a = b+ a
(x:a – a) = (b + a).a
x:a = (b + a).a + a
x =( (b + a).a + a).a
Задачата се свежда само до пресмятането на формулата и извеждането на резултата:
cin>>a>>b;
cout<<((b + a)*a + a)*a<<endl;
Учениците не е необходимо да имат знания за уравнения. Лесно е да се досетим, че за да пресметнем търсеното число, трябва да извършим обратните действия, т.е. към полученото число b да добавим числото a и след това да извършим тези действия още веднъж.
Решение на автора:
#include <iostream>
using namespace std;
int main()
{int a,b,x;
cin>>a>>b;
x=b+a;
x=x*a;
x=x+a;
x=x*a;
cout<<x<<endl;
}
Както се вижда, авторът предлага задачата да се реши или като задача по математика от типа „намиране на неизвестно“, или чрез линеен алгоритъм, който учениците могат да съставят само ако направят съответните логически разсъждения. Всъщност вторият начин е типична инверсия. За да се реши задачата по първия начин, е необходимо да се направят необходимите пресмятания на лист хартия, както в часовете по математика. Полученият израз пресмята резултата, който се извежда в конзолата посредством оператора cout. Децата на 10 – 11-годишна възраст много често правят технически грешки (например не обръщат знака при прехвърляне на дадена стойност от другата страна на равенството или не спазват приоритета на операциите) при пресмятане на изрази.
На Есенния турнир 2011 в състезателна група Е са се явили общо 71 деца. Въпреки че задачата е с коефициент на трудност k=-0.76 (Staribratov & Dimitrova, 2013), което я определя като лесна, по този начин са я решили 39 състезатели. По втория начин – 9, а 22 – не са успели да я решат.
Фигура 1
Стойността на коефициента k ни дава да заключим, че този тип задачи са подходящи за тази възрастова група, но от диаграмата се вижда, че близо 1/3 от учениците не са успели да се справят, а само 13% са я решили логически. В разработката представяме успешен методически модел за решаване на аритметични уравнения с една, две, три и повече операции по информатика, който се основава на модела на инверсията в математиката.
Педагогически подход
Понятието „инверсия“ означава 1спец. изменение на обикновения ред на думите в изречение или словосъчетание, използвано като стилистичен похват; 2в метереологията – покачване на температурата в атмосферата от долу нагоре; 3в химията – разлагане на водни разтвори на обикновената захар с помощта на киселина и ензими; 4в музиката – повторение на темата или на мотива с противоположна посока на интервалите (Тълковен речник).
В математиката инверсията е метод, който се прилага при извършване на аритметични преобразувания, и по-точно в пресмятане на аритметични уравнения.
Методически този метод се представя по следния начин (Lalchev, 2009).
Представяне на елементарни аритметични (адитивни и мултипликативни) преобразувания (таблица 1 и таблица 2).
Таблица 1. Адитивни преобразувания
Таблица 2. Мултипликативни преобразувания
Композиция на преобразуванията се извършва с помощта на моделите, представени в таблици 3, 4, 5 и 6.
Таблица 3. Преобразувания на изрази
Таблица 4. Преобразувания на уравнения с едно неизвестно
Таблица 5. Преобразуване на съставно аритметично уравнение
Таблица 6. Съответствие на прави и обратни преобразувания
Първите алгоритми, които учениците започват да съставят във вид на програми, са линейните. В примерната учебна програма за V клас (infos, 2009) от линейни алгоритми са заложени следните теми: задачи за изчисление, отделяне цифрите на число, преобразуване на мерни единици. Тема, по която се работи в школите в България, но не е отразена, е „пресмятане по формула“. Тук учениците решават задачи, свързани с пресмятане на лице и обиколка на познатите им от математиката равнинни фигури (триъгълник, квадрат, правоъгълник, кръг).
В изложението ще представим методика за изучаване на аритметични уравнения с една, две, три и повече операции в информатиката. Първа основна задача е съответно за решаване на уравнения с една операция, втора основна задача – за решаване на уравнения с две операции, трета основна задача – за решаване на уравнения с три операции, и четвърта основна задача – за решаване на уравнения с четири операции. След всяка основна задача са представени допълнителни задачи, изчерпващи останалите случаи от разглежданата основна задача. Представените решения са на езика С++ в среда за програмиране Code::Blocks 13.12.
Дидактическа система от задачи
Първа основна задача:
Да се намери стойността на х в уравнението х+а = b, където а и b се въвеждат последователно от клавиатурата. Стойностите на величините а, b и х са в множеството на целите числа.
Примерен вход: 90 75 Примерен изход: -15
Математическо описание на решението на задачата
За математическото решение на задачата ще използваме модела от таблици 4 и 6. Нека решим задачата, използвайки примерния вход.
Тогава:
Получаваме х=-15.
Нека решим задачата в общия случай:
За х получаваме, че е равно на b-a.
Решение на задачата на езика на С++:
# include <iostream>
using namespace std;
int main()
{
int a, b, x;
cin>>a>>b;
x = b-a;
cout<<x<<endl;
return 0;
}
Допълнителни задачи:
Да се намери стойността на х в уравненията
а) a+x = b; б) x-a = b; в) a-x = b; г) x*a = b; д) a*x = b; е) x/a = b; ж) a/x = b; където а и b се въвеждат от клавиатурата. Стойностите на величините а, b и х са в множеството на целите числа.
Втора основна задача:
Да се намери стойността на х в уравнението (а-x)*b = c, където а, b и c се въвеждат последователно от клавиатурата. Стойностите на величините а, b, c и х са в множеството на целите числа.
Примерен вход: 65 3 150 Примерен изход 15
Математическо описание на решението на задачата:
За математическото решение на задачата ще използваме модела от таблици 3 и 6. Нека решим задачата, използвайки примерния вход.
Окончателно за x получаваме стойност 15.
Нека видим как изглежда таблицата в общия случай:
Анализ на решението на задачата
Попълвайки таблицата за общия случай, получаваме междинна стойност за х. Тогава можем да образуваме два израза: x = c/b и x = ax.
Решение на задачата на езика на С++:
# include <iostream> using namespace std;
int main()
{ int a, b, c, x;
cin>>a>>b>>c;
x = c/b;
x = a-x;
cout<<x<<endl;
return 0;
}
Допълнителни задачи:
Да се намери стойността на х в уравненията
а) (a+x)/b = c; б) a-(b/x)=c; в) a* (b-x)=c,
където а, b и c се въвеждат от клавиатурата. Стойностите на величините а, b,с и х са в множеството на целите числа.
Трета основна задача:
Да се намери стойността на х в уравнението (a*(b-x))/c = d , където а, b, c и d се въвеждат последователно от клавиатурата. Стойностите на величините а, b, c, d и х са в множеството на целите числа.
Примерен вход: 45 16 4 90 Примерен изход: 8
Математически модел на решението на задачата
За математическото решение на задачата ще използваме модела от таблици 3 и 6. Нека решим задачата, използвайки примерния вход.
Окончателно получаваме х=8.
Нека да видим как изглежда таблицата в общия случай:
Анализ на решението на задачата
Попълвайки таблицата за общия случай, получаваме следните междинни стойности за х. Тогава можем да образуваме изразите x = d*c, x = x/a и x = b-x.
Решение на задачата на езика на С++:
# include <iostream>
using namespace std;
int main()
{
int a, b, c, d, x;
cin>>a>>b>>c>>d;
x = d*c;
x = x/a;
x = b-x;
cout<<x<<endl;
return 0;
}
Допълнителни задачи:
Да се намери стойността на х в уравненията
а) a / (b * ( c/x )) = d; б) ((a-x) - b) – c = d,
където а, b, c и d се въвеждат от клавиатурата. Стойностите на величините а, b,с, d и х са в множеството на целите числа.
Четвърта основна задача:
Да се намери стойността на х в уравнението ((a – ((b – ((( x/c ) +d) *e)) * f )) * g) –h = i , където а, b, c, d, e, f, g, h, и i се въвеждат последователно от клавиатурата. Стойностите на величините а, b, c, d, i, f, g, h, i и х са в множеството на целите числа.
Примерен вход: 100 90 5 7 3 10 5 39 11 Примерен изход: 100
Математическо описание на решението на задачата
За математическото решение на задачата ще използваме модела от таблици 1, 2 и 5. Нека решим задачата, използвайки примерния вход.
Нека да видим как изглежда таблицата в общия случай:
Анализ на решението на задачата
Попълвайки таблицата за общия случай, получаваме следните междинни стойности за х. Тогава можем да образуваме изразите x = i+h; x = x/g; x= ax; x = x/f; x = b-x; x = x/e; x = x-d; и x = x*c.
Решение на задачата на езика на С:
# include <iostream>
using namespace std;
int main()
{
int a, b, c, d, e, f, g, h, i, x;
cin>>a>>b>>c>>d>>e>>f>>g>>h>>i;
x = i+h;
x = x/g;
x= a-x;
x = x/f;
x = b-x;
x = x/e;
x = x-d;
x = x*c;
cout<<x<<endl;
return 0;
}
Допълнителни задачи:
Да се намери стойността на х в уравненията
а) (a – (((((b / (x/c))*d ) -e) + f)/g)) + h = i;
б) ((a – ((((b – (x*c))/d) + e) /f)) /g) – h = i,
където а, b, c, d, e, f, g, h и i се въвеждат последователно от клавиатурата. Стойностите на величините а, b, c, d, i, f, g, h, i и х са в множеството на целите числа.
Заключение
Темата допълва знанията на учениците от IV – V клас за линейни алгоритми. Учениците придобиват знания и умения за решаване на уравнения с едно неизвестно с една, две, три и повече операции, които са известни в математиката и реално съществуват като тип състезателни задачи по информатиката за състезателна група Е.
NOTES/БЕЛЕЖКИ
1. infos (2012). http://www.math.bas.bg/infos/files/2012-01-05-E3.pdf
2. infos (2011). http://www.math.bas.bg/infos/files/2011-11-27-E2.pdf
3. infos (2009) http://www.math.bas.bg/infos/files/2009-11-10-u4ebnaprograma5kl_competitions_v1.pdf
REFERENCES/ЛИТЕРАТУРА
Garov, K. & Dimitrova, T. (2015). Integrirane na znaniya i umeniya po matematika i informatika chrez sazdavane na kompyutarni programi za reshavane na diofantovi uravneniya. Matematika i matematichesko obrazovanie, 44. Proletna konferentsiya na SMB, ISSN 1313-3330, str. 320 – 326 [Гъров, К. & Димитрова, Ц. (2015). Интегриране на знания и умения по математика и информатика чрез създаване на компютърни програми за решаване на диофантови уравнения. Математика и математическо образование, 44. Пролетна конференция на СМБ, ISSN 1313 – 3330, стр. 320 – 326]
Lalchev, Z. (2009). Matematika v zadachi i metodi, kniga 2, Sofia: Universitetsko izdatelstvo „Sv. Kliment Ohridski”. [Лалчев, З. (2009). Математика в задачи и методи, книга 2, София: Университетско издателство „Св. Климент Охридски“]
Staribratov, I. & Dimitrova, T. (2013) Sastezatelni zadachi po informatika za IV – V klas. Matematics and Informatics, vol. LVI, issue 3, ISSN 1310 – 2230 [Старибратов, И. & Димитрова, Ц. (2013) Състезателни задачи по информатика за IV – V клас. Математика и информатика, година LVI, книжка 3, ISSN 1310 – 2230]
Staribratov, I. & Dimitrova, Ts., (2014). Programirane na chislovi reditsi. Matematics and Informatics, vol LVII, issue 3 , ISSN 1310 – 2230 (Print), ISSN 1314 – 8532 (Online) [Старибратов, И. & Димитрова, Ц., (2014). Програмиране на числови редици. Математика и информатика, година LVII, Книжка 3 , ISSN 1310 – 2230 (Print), ISSN 1314 – 8532 (Online) ]