Расшифруйте слово
if <условие> then begin
Команды 1;
end
else begin
Команды 2;
end;
if <условие> then
begin
Команды;
end;
Задано число x. Нужно определить, является ли оно положительным или нет, и вывести соответствующее сообщение.
Алгоритм решения задачи.
1. Ввод исходных данных.
2. Проверка значения выражения (x > 0).
3. Вывод результата.
Программа
var x: integer;
begin
write('Введите x = '); read(x);
if x > 0 then
write('положительное')
else
write('не положительное');
end.
Тестирование
В момент времени 00:00 на светофоре для пешеходов включили зеленый сигнал. Далее сигнал светофора сменяется каждую минуту: 1 минуту горит зеленый сигнал, 1 минуту — красный. Известно, что с момента включения светофора прошло m минут. Требуется нарисовать светофор с включенным сигналом в соответствии с введенным значением времени.
Алгоритм решения задачи.
Рисование светофора (прямоугольник и 2 круга) с выключенными сигналами.
Ввод исходных данных.
Цвет сигнала будет зависеть от того, четным или нечетным будет значение m. Если m четное — сигнал зеленый (закрашиваем нижний круг), если нечетное — красный (закрашиваем верхний круг).
Закрасим нужный круг цветом в зависимости от четности m.
Программа
uses GraphABC;
var m:integer;
begin
Rectangle(250,50,390,250);
SetBrushColor(clBlack);
Circle(320,100,30);
Circle(320,200,30);
SetBrushColor(clWhite);
writeln('Введите время');
read(m);
writeln(m);
if m mod 2 = 1 then
FloodFill(320,100,clRed)
else
FloodFill(320,200,clGreen);
end.
Тестирование
Таня и Катя живут в разных домах. Им стало интересно, кто из них живет ближе к школе. Они разместили на карте прямоугольную систему координат так, чтобы школа имела координаты (0; 0). Известно, что Танин дом имеет координаты (x1; y1), а Катин (x2; y2). Девочки ходят в школу по прямой и проходят разные расстояния. Нужно написать программу, которая определит, чей дом ближе к школе.
Алгоритм решения задачи
1. Ввод координат домов.
2. Вычисление расстояний до школы:
r_ T (от Таниного дома) и r_K (от Катиного дома). Для вычисления воспользуемся теоремой Пифагора:
3. Сравнение расстояний. Вывод ответа.
Программа
Var x1, y1, x2, y2, r_T, r_K: real;
begin
writeln('Танин дом'); read(x1,y1);
writeln('Катин дом'); read(x2,y2);
r_T:= sqrt(x1*x1+y1*y1);
r_K:= sqrt(x2*x2+y2*y2);
if r_T < r_K then
writeln('Танин дом ближе')
else
writeln('Катин дом ближе');
end.
Тестирование
Вася начал заниматься стрельбой из лука. Для тренировки он решил создать модель мишени, которая будет реагировать на лазер. Мишень представляет собой два круга (стреляет Вася пока не очень хорошо) разного радиуса с общим центром. Если Вася попал в маленький круг, то круг загорается зеленым. Большой круг при попадании в него загорается желтым. Если Вася не попал ни в один из кругов, то область вне кругов загорается красным. Необходимо реализовать компьютерную модель Васиной мишени (при попадании на границу круга ничего не должно происходить).
Алгоритм решения задачи
Рисование мишени: 2 круга радиусов R_b = 150 и R_m = 75 с центром в точке (x0; y0), x0 = 320, y0 = 240. Сначала рисуем круг большего радиуса.
Ввод данных: координаты точки выстрела.
Цвет рисунка будет зависеть от того, в какую область относительно кругов попала точка. Возможны 3 случая:
точка внутри маленького круга. Длина отрезка между точкой и центром круга меньше радиуса. По теореме Пифагора: (x − x0)^2 + (y − y0)^2 < R_m^2;
если условие а) не выполняется, проверяем, принадлежит ли точка большому кругу: (x − x0)^2 + (y − y0)^2 < R_b^2;
если условия а) и б) не выполняются, то Вася не попал в мишень.
Для сокращения записи определим переменную z = (x − x0)^2 + (y − y0)^2.
Закрасим нужную область цветом в зависимости от проверки условий.
Программа
uses GraphABC;
var x,y, x0, y0, R_b, R_m, z: integer;
begin
x0 := 320; y0 := 240;
R_b := 150; R_m := 75;
Circle(x0,y0,R_b);
Circle(x0,y0,R_m);
writeln('Выстрел');
read(x,y);
writeln(x,' ',y);
z := sqr(x-x0)+sqr(y-y0);
if z < sqr(R_m) then
FloodFill(x,y,clLightGreen)
else
if z < sqr(R_b) then
FloodFill(x,y,clYellow)
else
FloodFill(x,y,clRed);
end.
Тестирование
Проверить, является ли введенное число трехзначным, и если да, то вывести цифры этого числа в отдельных строках.
Алгоритм решения задачи.
Ввод исходного числа.
Проверка числа. Число a является трехзначным, если 99 < a < 1000.
Если число трехзначное, выделяем его цифры:
для выделения первой цифры a1 находим целую часть от деления числа a на 100;
для выделения второй цифры a2 числа a находим остаток от его деления на 100, а затем целую часть oт деления полученного остатка на 10;
последняя цифра числа a3 является остатком от деления числа a на 10.
Вывод результата.
Программа
var a, a1, a2, a3: integer;
begin
write('Введите a = ');
read(a);
if (a > 99) and (a < 1000) then
begin
//Первая цифра
a1 := a div 100;
//Вторая цифра
a2 := a mod 100 div 10;
//Третья цифра
a3 := a mod 10;
writeln(a1);
writeln(a2);
writeln(a3);
end
else
writeln('не трехзначное');
end.
Тестирование
1. В предложенном программном коде перемешались строки. Восстановите последовательность строк и протестируйте программу.
end.
write('Введите x =');
var x: integer;
else writeln('Число не четное');
read(x);
begin
writeln('Число четное')
if x mod 2 = 0 then
2. Составьте программу по предложенной схеме.
3. Для примера 16.1.
Скопируйте программу в среду программирования. Расставьте комментарии к программе.
// вывод ответа при ложном условии
// проверка условия
// описание переменных
// вывод ответа при истинном условии
// ввод данных
Ответьте на вопрос "Можно ли изменить логическое выражение в операторе ветвления в примере 16.1 так, чтобы сообщения ꞌположительноеꞌ и ꞌне положительноеꞌ пришлось поменять местами?". Ответ запишите в виде комментариев к программе. Если да, то как это сделать?
Запишите алгоритм в рабочую тетрадь и зарисуйте блок-схему для данного алгоритма. Результат покажите учителю.
Подключите графический режим Измените программу так, чтобы сообщение ꞌположительноеꞌ выводилось красным цветом, а сообщение ꞌне положительноеꞌ ('отрицательное') — синим.
Внесите изменения, чтобы для числа рассматривались три случая: ꞌположительноеꞌ, ꞌотрицательноеꞌ, ꞌравно нулюꞌ? Сообщение ꞌравно нулюꞌ выводиться черным цветом.
4. Для примера 16.2.
Измените программу так, чтобы четность (нечетность) числа проверялась с использованием функции odd.
Добавьте комментарии к строкам программы, поясняя их назначение.
Измените программу для решения задачи "Если число четное, то нарисовать на экране зеленый прямоугольник, а если нечетное, то красный круг".
5. Для примера 16.3.
Добавьте в программу проверку корректности исходных данных: координаты домов должны быть такими, чтобы расстояния до школы были разными. Если расстояния одинаковы, то вывести сообщение ꞌКоординаты введены неверноꞌ, а если разные, то вывести ответ.
Какие изменения понадобится внести в программу, если допустить, что девочки могут проходить одинаковые расстояния? Внесите изменения в программу и проверьте правильность ее работы.
Запишите в комментариях в конце программы ваши тесты проверки ее работы. Например в таком виде:
// x1 | y1 | x2 | y2 | Результат
// 2.3 4.5 -2.1 4.9 Танин дом ближе
6. Для примера 16.4
Для усложнения тренировок Вася решил менять местоположение мишени и радиусы кругов. Добавьте в программу возможность ввода радиусов большого и маленького кругов, а также центра мишени. Проверьте правильность работы программы на различных наборах исходных данных.
7. Для примера 16.5.
Как известно, многие задачи имеют не единственное решение. Так, Юля нашла другой способ вычисления второй цифры трехзначного числа. Какую из команд использовала Юля? Объясните, что получится при выполнении каждой из приведенных команд.
1) a2:=a mod 10 div 10;
2) a2:=a div 10 mod 10;
3) a2:=a div 100 mod 10.
Программу изменили. Сформулируйте условие задачи, которая решается с помощью программы, записанной ниже. Скопируйте программный код в среду программирования. В начале документа в комментариях запишите ваше условие задачи.
var a, a1, a2, a3: integer;
begin
write(ꞌВведите a = ꞌ); read(a);
if (a > 99) and (a < 1000) then
begin
a1 := a div 100;// Первая цифра
a2 := a mod 100 div 10;// Вторая цифра
a3 := a mod 10;// Третья цифра
if a1 mod 2 = 0 then writeln(a1,ꞌ— четная ꞌ);
if a2 mod 2 = 0 then writeln(a2,ꞌ— четная ꞌ);
if a3 mod 2 = 0 then writeln(a3, ꞌ— четнаяꞌ);
if odd(a1) and odd(a2) and odd(a3) then writeln(ꞌнет четных цифрꞌ);
end
else
writeln(ꞌне трехзначноеꞌ);
end.
Программу проверили для некоторых случаев. Все ли возможные ситуации рассмотрели? Что нужно добавить? Внесите изменения в программу.