Автор: Татьяна Николаевна Симонова
Должность: учитель информатики
Учебное заведение: Муниципальное бюджетное общеобразовательное учреждение "Центр образования №19" г. Тулы
Населённый пункт: Тула
Наименование материала: методическая разработка
Тема: Программирование: одна задача - много знаний!
Раздел: среднее образование
Муниципальное бюджетное общеобразовательное учреждение
«Центр образования №19»
Информатика и ИКТ
Практические работы по программированию
(9-11 классы)
Автор: Симонова Татьяна Николаевна
2018
Введение
Формулируем единую задачу для всей серии практических работ:
Из пушки произвести выстрел по заданной цели. Провести анализ:
1.Определить разброс по углу пуска при заданной начальной скорости снаряда.
2.Определить разброс по скорости при заданном угле пуска.
Требования к модели :
Наглядный и удобный вывод результатов.
Допущения:
Сопротивлением воздуха можно пренебречь.
Ускорение свободного падения считаем постоянным.
Модель работает только в вертикальной плоскости.
Описательная модель:
X=V
0
*cos(a)*t;
Y=V
0
*sin(a)*t-gt
2
/2;
X
a
Y
V
0
Практическая работа №1
Задача:
вывести на экран траекторию движения снаряда при следующих исходных
данных:
Начальная скорость = 80 м/с
Угол пуска = 60 градусов
Время полета = 20 сек.
Решение:
Программа
Результат выполнения программы
program s1;
uses crt;
var a,v,x,y:real;
i,t:integer;
const g=9.81;
begin
v:=80;
a:=60*3.14/180;
for t:=1 to 20 do
begin
x:=v*t*cos(a);
y:=v*t*sin(a)-g*t*t/2;
writeln(t,' ',x,' ',y);
end;
end.
Практическая работа №2
Проанализируем результат выполнения программы.
Недостатки:
1.Ненаглядный вывод результатов («плавающие» колонки, много знаков после запятой).
2.Координата по оси «y» становится отрицательной (снаряд уходит под землю).
Задача: Устранить недостатки, используя форматный вывод и цикл «до» (оператор while).
Решение:
Программа
Результат выполнения программы
program s1;
uses crt;
var a,v,x,y,t:real;
i:integer;
const g=9.81;
begin
v:=80;
a:=60*3.14/180;
t:=0;
while y>=0 do
begin
t:=t+1;
x:=v*t*cos(a);
y:=v*t*sin(a)-g*t*t/2;
writeln(t:3:0,' ',x:10:2,' ',y:10:2);
end;
end.
Практическая работа №3.
Проанализируем результат выполнения программы:
Вывод результатов удовлетворителен, таблица наглядна. Однако возникает желание
визуализировать траекторию движения.
Задача: нарисовать траекторию движения снаряда.
Действия:
Подключить графический модуль
В цикл добавить оператор, последовательно соединяющий точки (Х,У).
Решение:
Программа
Результат выполнения программы
program s1;
uses GraphABC;
var a,v,x,y,t:real;
i:integer;
const g=9.81;
begin
v:=80;
a:=60*3.14/180;
t:=0;
MoveTo(0,0);
while y>=0 do
begin
t:=t+1;
x:=v*t*cos(a);
y:=v*t*sin(a)-g*t*t/2;
writeln(t:5:1,' ',x:10:2,' ',y:10:2);
LineTo(round(x),round(y));
end;
end.
Таблица осталась без изменений.
PS. Скорее всего учащиеся не обратят сразу внимание на тип параметров процедуры
LineTo(x,y:integer) и не поставят округление (round(x),round(y)). Тем лучше! Одной
проблемой больше, т.к. задача решаться не будет.
Практическая работа №4.
Анализируем результат выполнения предыдущей программы.
Недостаток очевиден: график перевернут (вертикальная ось направлена вниз).
Задача:
внести изменения в программу, которые приведут к нормальному отображению
траектории (подсказка: новых операторов не потребуется, достаточно выполнить
симметричные преобразования и сместить график вниз);
нарисовать неподвижную цель с заданными параметрами в воздухе (вертикальную
линию над уровнем «земли») и оси координат;
траекторию снаряда изобразить красным цветом.
Решение:
Программа
Результат выполнения программы
program s1;
uses GraphABC;
var a,v,x,y,t:real;
i:integer;
const g=9.81;
begin
v:=80;
a:=60*3.14/180;
t:=0;
Line(0,0,0,350);
LineTo(600,350);
Line(300,150,300,250);
SetPenColor(clRed);
MoveTo(0,350);
while y>=0 do
begin
t:=t+1;
x:=v*t*cos(a);
y:=v*t*sin(a)-g*t*t/2;
writeln(t:5:1,' ',x:10:2,' ',y:10:2);
LineTo(round(x),round(350-y));
end;
end.
Таблица осталась без изменений.
Практическая работа №5.
Обратимся к общей постановке задачи:
Из пушки произвести выстрел по заданной цели. Провести анализ:
1.Определить разброс по углу пуска при заданной начальной скорости снаряда.
2.Определить разброс по скорости при заданном угле пуска.
Уточняем задачу:
разброс по углу пуска должен определяться в результате одного запуска
программы
разброс по начальной скорости должен определяться в результате одного запуска
программы
Решение:
В программе используем структуру вложенных циклов:
во внешнем цикле вычисляется новый угол (скорость), во внутреннем рассчитывается
траектория.
Шаг изменения угла (скорости) подбирается в процессе отладки программы.
Определение разброса угла пуска.
Программа
Результат выполнения программы
program s5;
uses GraphABC;
var a,da,v,x,y:real;
i,j,t:integer;
const g=9.81;
begin
v:=80;
a:=33*3.14/180;
da:=2*3.14/180;
Line(0,0,0,350);
LineTo(600,350);
Line(300,150,300,250);
writeln('начальная скорость ',v);
For i:=1 to 10 do begin
t:=0;
a:=a+da;
x:=0;
y:=0;
MoveTo(0,350);
while y>=0 do
begin
LineTo(round(x),round(350-y));
t:=t+1;
x:=v*t*cos(a);
y:=v*t*sin(a)-g*t*t/2;
end;
writeln(i,' угол пуска',a*180/3.14:10:2);
end;
end.
Вывод: при углах пуска, лежащих в диапазоне от 35 до 51 градусов, и начальной скорости
80 м/с цель будет поражена.
Определение разброса начальной скорости.
Программа
Результат выполнения программы
program s5;
uses GraphABC;
var a,da,v,x,y:real;
i,j,t:integer;
const g=9.81;
begin
v:=64;
a:=60*3.14/180;
da:=2*3.14/180;
Line(0,0,0,350);
LineTo(600,350);
Line(300,150,300,250);
writeln('угол пуска ',a*180/3.14:10:2);
For i:=1 to 10 do begin
t:=0;
v:=v+1;
x:=0;
y:=0;
MoveTo(0,350);
while y>=0 do
begin
LineTo(round(x),round(350-y));
t:=t+1;
x:=v*t*cos(a);
y:=v*t*sin(a)-g*t*t/2;
end;
writeln(i,' скорость ',v:10:2);
end;
end.
Вывод: при скорости, лежащей в диапазоне от 65 до 74 м/с, и начальном угле пуска 60
градусов цель будет поражена.
Домашняя практическая работа:
Задайте для каждой траектории «случайный цвет».
Сформулируйте задание (ряд вопросов), которое можно выполнить, используя
построенную модель.
*Проведите моделирование : ответьте на свои вопросы.
Список источников:
Н. Д. Угринович. Информатика и ИКТ. Профильный уровен: учебник для 11 класса.
М.:БИНОМ. Лаборатория знаний, 2009.
Н.И. АМЕЛИНА, А.А. ЧЕКУЛАЕВА, М.И. ЧЕРДЫНЦЕВА. ГРАФИКА В СИСТЕМЕ
PascalABC. Федеральное государственное образовательное учреждение высшего
профессионального образования«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ», 2008.