Автор: Бронникова Анастасия, Житова Дарья, 10 класс Руководитель: Захарченко Галина Юрьевна, учитель информатики Тема: PASCAL в помощь математике. Образовательное учреждение: МУНИЦИПАЛЬНОЕ ОБЩЕОБРАЗОВТЕЛЬНОЕ УЧРЕЖДЕНИЕ СРЕДНЯЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ШКОЛА № 2 Используемые медиаресурсы: редакторы WORD, POWER POINT, PUBLISHER, ресурсы сети Интернет Цель проекта: помочь учащимся в построении графиков сложных функций. 1) Актуальность темы Проведя опрос среди учащихся 10 - 11 классов (в опросе участвовало 30 уч-ся), какая тема из курса математики на ваш взгляд является самой, сложной мы получили следующие результаты: 1. Задания с параметры – 17 уч-ся; 2. Построение графиков функций – 13 уч-ся. И мы решили помощь нашим учащимся. И разработали программу в среде программирования PASCAL 7.0. Немного истории. Pascal (Паскаль) - язык программирования общего назначения. Создан в 1970 году специалистами Технического Университета в Цюрихе под руководством профессора Никлауса Вирта. Паскаль - именно тот язык программирования, с которого многие начинали свой тернистый путь. Он относительно легок в изучении, прост в понимании и был одним из первых языков программирования со строгой типизацией и наличием средств процедурного программирования. Наше мнение - Pascal дисциплинирует программиста и приучает его мыслить логически. 2) Проблема Простройте график функции y= cosx sinx x. Построение графика вызывает серьезные затруднения, мы начинаем : вспоминать и применять различные формулы тригонометрии; начинаем выполнять расчеты по нахождению значений функций. Построение графика достаточно сложное, а иногда и «муторное» дело, да и линии иногда получаются кривоватые. Зато всех этих проблем лишен компьютер – он без устали может наносить на экран точку за точкой, соединяя их ровной линией. Правда, его нужно научить это делать, задав соответствующую программу 3) Гипотеза Разработать программу в среде PASCAL для построения графиков функций не только для построения графика, но и для самопроверки своих знаний и умений по данной теме. 1 4) Пути решения Необходимо решить следующее задачи: 1. Найти и изучить необходимую литературу. 2. Разработать подпрограмму PROCEDURE, которая позволяет построить систему координат; 3. Воспользоваться подпрограммой FUNCTION. 4. Инициализировать графику. 5. Разработать план проекта. 6. Воплотить проект в жизнь. Для этого мы воспользуемся подпрограммами: процедура(procedure) и функция(function). 1. Процедуры служат для задания последовательности действий, и определения новых значений переменных в программе. Вызов процедуры осуществляется специальным оператором процедуры. Процедура — это независимая именованная часть программ, которую после однократного описания можно многократно вызывать по имени из программы для выполнения определённых действий. Структура процедуры аналогична структуре программы (программа в миниатюре) и включает в себя: 1. заголовок — состоит из зарезервированного слово procedure, идентификатора процедуры (имени), а также списка формальных параметров, который может быть не обязателен, например использование процедуры без формальных параметров (пример 1) и с их наличием в (пример 2, 3); 2. раздел описаний — может отсутствовать; 3. раздел операторов — начинается обязательным словом begin и заканчивается словом end. В конце процедуры после слова end точка с запятой не ставится. Формат процедуры procedure <имя процедуры> (формальные параметры); 2. Функции нужны для вычисления единственного значения некоторого выражения. Вызов функции должен быть операндом в выражении. Структура функции включает в себя: 1. заголовок — состоит из зарезервированного слово function, идентификатора процедуры (имени), а также списка формальных параметров, который может быть не обязателен, тип возвращаемого функцией значения. 2. раздел описания, 3. тело процедуры — в конце процедуры после слова end точка с запятой не ставится. Формат функции 2 function <имя процедуры> (формальные параметры): тип результата; 3. Графический режим. Для работы с графикой в Pascal необходимы два файла – модуль graph.tpu и драйвер графического адаптера egavga.bgi. Найдите эти файлы и запишите их расположение. Для определённости будем считать, что первый находится в каталоге D:\BP\UNITS, а второй – в D:\BP\BGI. Чтобы иметь возможность что-либо нарисовать, надо: 1. подключить модуль GRAPH; 2. указать расположение файла graph.tpu; 3. определить графический драйвер и режим; 4. инициализировать графику; 5. если инициализация прошла без ошибок, можно что-нибудь нарисовать; 6. закрыть графический режим. А теперь реализуем эти действия в Pascal: USES Graph,CRT; {подключение модулей} VAR gd,gm:integer; {gd – гр. драйвер, gm – гр. режим} BEGIN gd:=0; gm:=0; {автоматическое определение гр. драйвера} InitGraph(gd,gm,''); {инициализация графического режима} -----------------------------------------------------------ReadKey; {задержка до нажатия любой клавиши} CloseGraph; {закрытие графического режима} END. 5. Основной проект Единица на экране соответствует одному пикселю и для вывода графика это не удобно, график при этом получается слишком мелкий. Поэтому при выводе графика функции на экран применяются так называемые пользовательские координаты – именно такие координаты мы используем, когда чертим график на бумаге. Итак, мы делаем наш график крупнее. Пусть 1 пользовательская единица равна 50 экранным. Для этого мы: Получаем экранную х - координату точки. Преобразуем ее в пользовательскую (она будет в 50 раз меньше); Находим для нее значение функции (пользовательская у – координата); Преобразуем ее в экранную (увеличив в 50 раз). Для перевода экранных координат в пользовательские и обратно создадим отдельные функции х(р) и у(р). Чтобы график строился в более крупном масштабе, объявим константу k, равную величине масштабной единицы. Функция х(р). 3 Переводит экранные координаты в обычные пользовательские (экранные 1280 х 1024, пользовательские 1280 1024 ). k k Функция у(р). Переводит пользовательские координаты в экранные. А) Программа для создания одного графика функции в одной системе координат. К=50 перевод экранных координат в пользовательские; сх, су: начало координат; F: исходная функция, график которой нужно построить; Х: функция, которая переводит экранные координаты в пользовательские; У: функция, которая переводит пользовательские координаты в экранные; Sk: процедура, которая создает систему координат; Setcolor: определяет цветовую гамму; Line: оператор построения линии; Moveto: перемещение графического указателя в точку (х,у); Lineto: рисование линии от текущего указателя до точки (х,у), текущий указатель при этом перемещается в точку (х,у). Program grafik; Uses crt, graph; Const K=50; Cx=640; Cy=512; Var gd, gm, i: integer; Function f (x: real): real; Begin F:=sin(x)*cos(x)*x; End; Function x (p: integer): real; Begin X:=(p-cx)/k; End; Function y(p: real): integer; Begin Y:=round (-p*k+cy); End; Procedure sk; Begin Setcolor (9); Line (0, cy, 1280,cy); Line (cx, 0, cx, 1024); Setcolor (15); 4 Line (638,462,642,462); Line (690,510,690,514); End; BEGIN Clrscr; Gd:=0; Gm:=0; Initgraph (gd, gm,’’); Sk; Setcolor (14); Moveto (0, y(f(x(0)))); For i:=0 to 1280 do Lineto (I, y(f(x(i)))); Readln; Closegraph; End. Б) Программа для создания нескольких графиков функций в одной системе координат. Program grafik; Uses crt, graph; Const K=50; Cx=640; Cy=512; Var gd, gm, i: integer; Function f (x: real): real; Begin F:=sin(x)*сos(x)*x; End; Function f 2(x:real):real; Begin F2:=2*sin(x)+cos((abs(x))-x; End; Function x (p: integer): real; Begin X:=(p-cx)/k; End; Function y(p: real): integer; Begin Y:=round (-p*k+cy); End; Procedure sk; Begin Setcolor (9); 5 Line (0, cy, 1280, cy); Line (cx, 0, cx, 1024); Setcolor (15); Line (638,462,642,462); Line (690,510,690,514); End; BEGIN Clrscr; Gd:=0; Gm:=0; Initgraph (gd, gm,’’); Sk; Setcolor (14); Moveto (0, y(f(x(0)))); For i:=0 to 1280 do Lineto (I, y(f(x(i)))); Setcolor (11); Moveto (0,y(f2(x(0)))); For i:=0 to 1280 do Lineto (I,y(f2(x(i)))); Readln; Closegraph; End. В) Программа для создания двух графиков функций в двух разных системах координат Program grafik; Uses crt, graph; Const K=50; Cx=320; Cy=512; Сх2=970; Var gd,gm,i:integer; Function f (x:real):real; Begin F:=cos(x); End; Function f 2(x: real): real; Begin F2:=2*cos(2*x); End; Function x (p: nteger): real; Begin X:=(p-cx)/k; 6 End; Function y(p: real):integer; Begin Y:=round (-p*k+cy); End; Function x2 (p: integer): real; Begin X2:=(p-cx2)/k; End; Procedure sk; Begin Setcolor (9); Line (0, cy, 630, cy); Line (cx, 0, cx, 1024); Setcolor (15); Line (640, cy, 1280, cy); Line (cx2, 0, cx2, 1024); End; BEGIN Clrscr; Gd:=0; Gm:=0; Initgraph (gd, gm,’’); Sk; Setcolor (14); Moveto (0, y(f(x(0)))); For i:=0 to 640 do Lineto (I, y(f(x(i)))); Setcolor (11); Moveto (640, y(f2(x(0)))); For i:=690 to 1280 do Lineto (I, y(f2(x(i)))); Readln; Closegraph; End. Г) Программа для создания двух графиков функций в двух разных системах координат + построение сетки (имитация листка в клетку). Xn, xk – начальные и конечные координаты вертикальных линий сетки Yn, yk – начальные и конечные координаты горизонтальных линий сетки Program grafik; Uses crt, graph; Const 7 K=50; Cx=320; Cy=512; Сх2=970; Var gd, gm, i:integer; Function f (x: real): real; Begin F:=sin(x); End; Function f 2(x: real): real; Begin F2:=2*sin(x); End; Function x (p:integer):real; Begin X:=(p-cx)/k; End; Function y(p: real): integer; Begin Y:=round (-p*k+cy); End; Function x2 (p: integer): real; Begin X2:=(p-cx2)/k; End; Procedure sk; Var I, xn, xk, yn, yk: integer; Begin Setlinestyle (3,1,1); Xn:=cx div k; Xk:= (1280 – cx) div k; For i:=-xn to xk do Line (cx+i*k,0,cx+i*k,1024); yn:=cy div k; yk:= (1024 – cy) div k; For i:=-yk to yn do Line (0,cy+i*k,1280,cy+i*k); Setlinestyle (0,1,1); Setcolor (9); Line (0, cy, 630, cy); Line (cx, 0, cx, 1024); Setcolor (15); Line (640, cy, 1280, cy); Line (cx2, 0, cx2, 1024); End; BEGIN 8 Clrscr; Gd:=0; Gm:=0; Initgraph (gd, gm,’’); Sk; Setcolor (14); Moveto (0, y(f(x(0)))); For i:=0 to 640 do Lineto (I, y(f(x(i)))); Setcolor (11); Moveto (640, y(f2(x(0)))); For i:=690 to 1280 do Lineto (I, y(f2(x(i)))); Readln; Closegraph; End. 9 8. Результаты программы А Б 10 В Г 11 Список используемой литературы: 1. Алексеев У.З., Чеснокова О.В. «Турбо Паскаль 7.0», NT Press Москва, 2004 2. Татарникова Л.А. «Основы алгоритмизации и программированию на языке Pascal» Томск, 2008 3. Фаронов В.В. «Турбо Паскаль 7.0 Начальный курс», ОМД Групп Москва, 2003 4. Ресурсы Интернета: www.pascal.dax.ru www.pascaler.wsnet.ru 12