Программирование Задания 8, 21,24,27 1.7 Языки программирования 1.7.1. Типы данных 1.7.2.Основные конструкции языка программирования. Система программирования 1.7.3 Основные этапы разработки программ. Разбиение задачи на подзадачи Количество заданий 4 Максимальный первичный балл 9 Процент 25 8 (базовый уровень, время – 3 мин) Проверяемые элементы содержания: знание основных конструкций языка программирования, понятия переменной, оператора присваивания Что нужно знать: переменная – это величина, имеющая постоянное имя и значение, которое изменяется в процессе выполнения программы; переменная величина характеризуется типом, который определяет множество допустимых значений этой величины и множество допустимых операций над величиной; оператор присваивания служит для записи значения в переменную; Основные теоретические знания Что нужно знать: к основным алгоритмическим конструкциям программирования относятся: линейная, разветвляющаяся и циклическая; цикл с параметром (со счетчиком): for i:=1 to N do begin { что-то делаем } end; цикл с предусловием: while { условие } do begin { что-то делаем } end; цикл с постусловием: repeat { что-то делаем } until { условие }; языка Что нужно уметь: • выполнять ручную прокрутку программы • выделять переменную цикла, от изменения которой зависит количество шагов цикла • определять количество шагов цикла • определять переменную, которая выводится на экран • Что нужно знать: • формулу для вычисления n-ого элемента арифметической прогрессии: • формулу для вычисления суммы первых членов арифметической прогрессии: Определите, что будет напечатано в результате работы следующего фрагмента программы: s:=0; Значение S Значение k Проверка k:=0; условия (переменная while s< 1024 do цикла) begin 0 0 0<1024 (да) s:=s+10; k:=k+1; 0+10=10 0+1=1 10<1024 (да) end; 10+10=20 1+1=2 20<1024 (да) write(k); 20+10=30 2+1=3 30<1024 (да) … 1020+10=1030 102+1=103 1030<1024 (нет) 1030/10=103 Ответ: 103 Определите, что будет напечатано в результате работы следующего фрагмента программы: var k, s: integer; begin k:=5; s:=2; while k < 120 do begin s:=s+k; k:=k+2; end; write(s); end. Значение k Значение s Проверка условия (переменная цикла) 5 2 5<120 (да) 5+2=7 2+5=7 7<120 (да) 7+2=9 7+7=14 9<120 (да) 9+2=11 … 119+2=121 S=2, S=S+5+7+9+..+119 a1=5, an=119, d=2, an=a1+(n-1)d, n=58 S=2+(5+119)58/2=3598 14+9=23 23<120 (да) ? 121<120 (нет) Ответ: 3598 При каком наибольшем введенном числе d после выполнения программы будет напечатано 55? var n, s, d: integer; begin readln(d); n := 0; s := 0; while s <= 365 do begin s := s + d; n := n + 5 end; write(n) end. Ответ: 36 Значение s Значение n Проверка условия (переменная цикла) 0 0 0<=365 (да) 0+d=d 0+5=5 d<=365 (да) d+d=2d 5+5=10 2d<=365 (да) 2d+d=3d … 10+5=15 3d<=365 (да) nd 55 nd<=365 (нет) Количество шагов цикла (55-0)/5=11, S=11d 10d<=365, 11d>365, d<365/10=36,5, d>365/1133,2 34<=d<=36 21 (повышенный уровень, время – 6 мин) Проверяемые элементы содержания: умение анализировать программу, использующую процедуры и функции 1.Понятие подпрограммы. Подпрограмма (от англ. subroutine) − это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы, имеющая собственное имя. Подпрограмма записывается один раз, но может использоваться многократно при упоминании ее имени в тексте программы. 2.Назначение подпрограммы Подпрограмма появилась как средство оптимизации программы по объёму занимаемой памяти: каждая подпрограмма описывается в программе один раз, а обращаться к ней можно многократно. Главное назначение подпрограммы: структуризация программы с целью удобства её читаемости и отладки. Иллюстрация понятия подпрограммы 3.Виды подпрограмм Подпрограммы реализуются в виде функций и процедур. Функция (Function) ─ это подпрограмма, результат выполнения которой есть единственное (скалярное) значение, присваиваемое имени этой функции. Процедура (Procedure) ─ это подпрограмма, имеющая любое количество входных и выходных данных. 4.Описание подпрограммы Подпрограмма описывается в разделе описаний программы. Функция Процедура Function <имя> (<список Procedure <имя> (<список формальных формальных параметров>); параметров>): <тип>; <раздел описаний <раздел описаний функции> процедуры> begin begin <раздел операторов>; <раздел операторов> <имя>:=<выражение> end; end; 5.Обращение к подпрограмме Функция Имя (список фактических параметров) Обращение к функции включается в качестве операнда в выражение, стоящее в правой части оператора присваивания. Процедура Имя (список фактических параметров) Обращение к процедуре является самостоятельным оператором, который называется оператором вызова процедуры. Оформите в виде подпрограммы-функции алгоритм вычисления тангенса tgx Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Ответ: 4 Напишите в ответе наименьшее значение входной переменной k, при котором программа выдает тот же ответ, что и при входном значении k=64. При k=64 программа выведет i=7, так как 72<64. При k=65 программа выведет i=8. При k=49 программа выведет i=6. Вопрос: при каких k, программа выведет 7? Это числа из диапазона [50;64]. 24 (повышенный уровень, время – 3- мин) Проверяемые элементы содержания: умение прочесть фрагмент программы и исправить допущенные ошибки Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y - действительные числа) и определяет принадлежность точки заштрихованной на рисунке области, включая ее границы. Программист торопился и написал программу неправильно. var x,y: real; begin readln (x,y); if x*x+y*y>=4 then if x>=−2 then if y<=−x then write ('принадлежит') else write ('не принадлежит'); end. 1) Приведите пример таких чисел x, y при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы). Умение прочесть фрагмент программы на языке программирования и исправить допущенные ошибки • Уравнение окружности радиуса r>0 с центром в точке (a;b) в прямоугольной системе координат имеет вид (x-a)2+(y-b)2=r2 . Если точка с координатами (x;y) лежит вне круга, границей которого является окружность, то (x-a)2+(y-b)2>r2 . Если точка с координатами (x;y) лежит внутри круга, границей которого является окружность, то (x-a)2+(yb)2<r2 . • Прямая ax+by+c=0 разбивает всю координатную плоскость на две полуплоскости, в одной из которых ax+by+c>0, а в другой ax+by+c<0. Для того чтобы узнать, какая именно из плоскостей задается данным неравенством, следует взять не лежащую на ней точку M(x;y) и проверить выполнимость неравенства. Если неравенство истинно в точке M, то им задается полуплоскость, в которой лежит точка M, а если нет, то противоположная полуплоскость. Умение прочесть фрагмент программы на языке программирования и исправить допущенные ошибки Правильное решение задания: Умение прочесть фрагмент программы на языке программирования и исправить допущенные ошибки Второй вариант правильного решения: var x,y: real; begin readln (x,y); if (x*x+y*y>=4) and (x>=−2) and (y>=0) and (y<=−x) then write (‘принадлежит’) else write (‘не принадлежит’); end. Умение прочесть фрагмент программы на языке программирования и исправить допущенные ошибки Умение прочесть фрагмент программы на языке программирования и исправить допущенные ошибки Требовалось написать программу, которая вводит с клавиатуры натуральное число N, не превышающее 109, и выводит сумму чётных цифр в десятичной записи этого числа или 0, если чётных цифр нет. Последовательно выполните следующее. 1. Напишите, что выведет эта программа при вводе числа 1984. 2. Приведите пример числа, при вводе которого программа выдаст верный ответ. 3. Найдите в программе все ошибки (их может быть одна или несколько). • В презентации использованы материала с сайта • http://kpolyakov.spb.ru/ • http://www.fipi.ru/ • разработки автора, опубликованные в ряде выпусков журнала “Информатика и образование”.