Напоминание

Программирование: одна задача - много знаний!


Автор: Татьяна Николаевна Симонова
Должность: учитель информатики
Учебное заведение: Муниципальное бюджетное общеобразовательное учреждение "Центр образования №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.



В раздел образования