Использование точек останова
Пошаговый режим удобен в том случае, если программа небольшая. Для больших программ количество шагов оказывается настолько велико, что практически невозможно проследить пошаговый ход ее выполнения от начала до конца. Но пошаговый режим незаменим при отладке программы, особенно на тех ее участках, где она работает неверно. Поэтому поступают следующим образом. Отлаженные участки выполняются обычным «сквозным» способом, а не отлаженные пошаговым. Для этого на первом операторе интересующего нас не отлаженного участка устанавливается точка останова (команда Debug –> Add breakpoint), после чего программа запускается на выполнение (команда Run -> Run), которое будет происходить в обычном режиме до тех пор, пока не будет достигнут оператор с установленной на нем точкой останова. Выполнение приостанавливается. После этого можно пошагово «пройти» интересующий участок, а затем либо продолжить «сквозное» выполнение (команда Run -> Run), либо прервать программу (команда Run -> Program reset). Точек останова может быть несколько, и программа будет приостанавливаться каждый раз, когда достигнет какой-либо из них.
Задание: проверить работу точек останова на примере:
1. Набрать программу – пример.
2. Установить курсор в строку с оператором if и поставить на нем точку останова (команда Debug -> Add breakpoint).
3. Запустить программу на выполнение (команда Run -> Run). Достигнув оператора if, выполнение программы должно приостановиться.
4. Завершить ее выполнение в пошаговом режиме (команда Run -> Step over).
5. Отменить точку останова (команда Debug –> Breakpoints).
6. Запустить программу (команда Run -> Run) – она выполнится без остановок до конца.
Примеры выполнения задач
Задача 1. Переменные A, B, C имеют положительные значения. Определить можно ли построить треугольник с длинами сторон A, B, C.
Напоминание: треугольник можно построить если сумма длин двух любых его сторон больше длины третьей стороны.
Система тестов:
№ | Значении A | Значение B | Значение C | Результаты |
Построить нельзя | ||||
Построить нельзя | ||||
Построить можно | ||||
Построить можно |
Решение задачи:
Program Treugoln_suchestvuet;
var
a, b, c:real;
begin
Writeln(' Введите стороны треугольника a, b, c');
Readln(a, b, c);
if (a+b>c) and (c+b>a) and (a+c>b) then
writeln(' Построить можно')
else
writeln(' Построить нельзя');
readln;
readln;
end.
Задача 2. Даны координаты точки (x, y). Определить, в какой четверти координатной плоскости находится точка, и напечатать номер четверти.
Система тестов:
№ | Значение x | Значение y | Результаты |
Точка в центре | |||
Точка на оси Ox | |||
Точка на оси Oy | |||
Первая | |||
-2 | Вторая | ||
-2 | -2 | Третья | |
-1 | Четвертая |
Решение задачи:
Program Points;
var
x, y: real;
begin
Writeln(' Введите координаты');
Readln(x, y);
if (x=0) and (y=0) then
writeln(' Точка в центре');
if (x<>0) and (y=0) then
writeln(' Точка на оси Ox');
if (x=0) and (y<>0) then
writeln(' Точка на оси Oy');
if (x>0) and(y>0) then
writeln(' Первая');
if (x<0) and(y>0) then
writeln(' Вторая');
if (x<0) and(y<0) then
writeln(' Третья');
if (x>0) and(y<0) then
writeln(' Четвертая');
readln;
end.
Задача 3. Решить квадратное уравнение ах2+Ьх+с=0.
Система тестов:
№ | Проверяемый случай | Коэффициенты | Результаты | ||
а | b | с | |||
d>0 | -5 | X1 = 3, х2 = 2 | |||
d=0 | Корни равны: x1 = -1, х2= -1 | ||||
d<0 | Действительных корней нет | ||||
а=0, b=0, c=0 | Все коэффициенты равны нулю, х – любое число. | ||||
а=0, b=0, c≠0 | Неправильное уравнение | ||||
а=0, b≠0, c≠0 | Линейное уравнение. Один корень: х = -0,25 | ||||
а≠0,b≠0,с=0 | X1 = 0, х2 = -0,25 |
Решение задачи:
Program Kvadratnoe_uravnenie;
Var
a, b, с, d, x1, x2 : Real;
begin
Writeln(' Введите коэффициенты уравнения a, b, c ');
Readln(a,b,c);
if (a=0) and (b=0) and (c=0) then
Writeln(' Bce коэффициенты равны нулю.
x — любое число. ');
if (a=0) and (b<>0) then
Writeln(' Линейное уравнение.
Один корень: х= ' , (-с/b):6:2);
if (a=0) and (b=0) and (c<>0) then
Writeln('Heпpaвильнoe уравнение. ');
if (a<>0) then
begin
D:= b*b - 4*a*c;
if D > 0 then
begin
x1:=(-b+Sqrt(D)) / (2*a);
x2:=(-b- Sqrt(D)) / (2*a);
WriteLn('x1=',x1:6;2 ,' x2=',x2:6:2);
End;
if D = 0 then
Writeln('Kopни равны: x1=x2=', -b/(2*a):6:2);
if D < 0 then
WriteLn(' Дeйcтвитeльныx корней нет. ');
end;
ReadLn;
end.
Задания для самостоятельного выполнения
1. Написать программу вычисления площади кольца. Программа должна проверять правильность исходных данных. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом):
Вычисление площади кольца.
Введите радиус кольца (см) —> 3.5
Радиус отверстия (см) —> 7
Ошибка! Радиус отверстия не может быть больше радиуса кольца.
2. Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 10% предоставляется, если сумма покупки больше 1000 руб. Ниже представлен рекомендуемый вид экрана во время работы программы:
Вычисление стоимости покупки с учетом скидки.
Введите сумму покупки и нажмите <Enter> -> 1200
Вам предоставляется скидка 10%
Сумма покупки с учетом скидки: 1080.00 руб.
3. Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 3% предоставляется в том случае, если сумма покупки больше 500 руб., в 5% — если сумма больше 1000 руб.
Рекомендуемый вид экрана во время работы программы:
Вычисление стоимости покупки с учетом скидки.
Введите сумму покупки и нажмите <Enter> -> 640
Вам предоставляется скидка 3%
Сумма покупки с учетом скидки: 620.80 руб.
4 . Определить, являются ли значения целочисленных переменных N и М кратными 3. Если оба значения кратны 3, то вычислить их сумму, в противном случае - разность.
5. Даны целые числа x, y. Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то единицей.
6. Выяснить, принадлежит ли точка с координатами (x,y) квадрату со стороной A и с центром в начале координат.
7. Даны два целых числа x и y. Если x четное число и Y не четное число то оба эти числа заменить мх модулями. Если x положительное нечетное число и Y положительное четное число то оба эти числа увеличить на 2. Во всех остальных случаях числа оставить без изменения.
8. Выяснить, принадлежит ли точка с координатами (x,y) области, ограниченной окружностью x +y =10 и параболой y=x .
9. Даны значения a,b и c. Удвоить эти числа, если a>b>c, и заменить их абсолютными значениями, если это не так.
10. Отсортировать значения переменных a,b,c по возрастанию.
11. Даны действительные числа a, b, c и x, y. Выяснить, пройдет ли кирпич с ребрами a,b,c в прямоугольное отверстие со сторонами x и y.
12. Дано целое трехзначное число. Определить, все ли цифры этого числа различны.
13. Выяснить поместится ли квадрат со стороной А внутрь окружности радиусом R и если он не помещается, то выяснить поместится ли окружность внутрь квадрата.
14. Переменные X,Y,Z имеют положительные значения. Определить можно ли построить треугольник с длинами сторон X,Y,Z. И если можно, токаой он получится: прямоугольный, остроугольный или тупоугольный.
15. Даны числа а1,в1,с1,а2,в2,с2. Напечатать координаты точки пересечения прямых, описываемых уравнениями а1х+в1y=c1 и а2х+в2y=с2, либо сообщить, что эти прямые совпадают, или не пересекаются.
16. Выяснить, принадлежит ли точка с координатами (x,y) области, ограниченной окружностью x^2+y^2=r и параболой y=1/x .
17. Выяснить, принадлежит ли точка с координатами (x,y) области, ограниченной кривой y=sqrt(x) и x=3.
18. Выяснить можно ли построить треугольник из отрезков с длинами a,b,c и если треугольник существует, выяснить является ли он тупоугольным или прямоугольным.
19. Выяснить поместится ли прямоугольник со сторонами А и В внутрь окружности радиусом R и если он не помещается, то выяснить поместится ли окружность внутрь квадрата.
20. Заданы площади круга и квадрата. Определить поместится ли квадрат внутрь круга
21. Определить, есть ли среди цифр заданного четырехзначного числа одинаковые.
22. Выяснить, можно ли построить параллелограмм из отрезков с длинами a,b,c,d.
23. Выбрать наибольшее из трех заданных чисел.
24. Два прямоугольника заданы длинами их сторон. Выяснить можно ли первый прямоугольник целиком поместить во втором. Стороны прямоугольников параллельны.
Лабораторная работа № 4. Введение в циклы
Цель работы: Научиться выделять циклические участки в программах.
Задачи:
¾ понять принципы формирования циклов;
¾ научиться выявлять повторяющийся участок в коде программы;
¾ научиться вводить дополнительную переменную для образования повторяющихся участков.
Порядок выполнения работы:
1. Перед выполнением работы, обязательно, прочитать конспект лекций по теме «Циклы».
2. Получить дополнительные теоретические знания из источников: [4: Тема 6], [9: Параграф 5.1].
3. Внимательно разобрать представленные примеры решения задач;
4. Самостоятельно выполнить предложенные задачи.
Внимание: переходить к выполнению пунктов 3 и 4 только после тщательной проработки пунктов 1 и 2.
Примеры решения задач
Задача 1. Дано натуральное n. Написать программу вычисления Х в 10-й степени.
Решение задачи:
Program x_v_stepeni_4;
var
x, y : real;
begin
Writeln(' Введите число x ');
Readln(x);
y:=1; {x }
y:=y*x; {x }
y:=y*x; {x }
y:=y*x; {x }
y:=y*x; {x }
writeln(' x в степени 4 равно ',y);
Readln;
end.
Приведенный фрагмент программы возводит Х в 4-ю степень. Для того чтобы возвести Х в 10-ю степень, необходимо всего лишь повторить (скопировать) выделенную строку 10 раз
Задача 2. Дана последовательность 10 чисел. Определить произведение всех введенных отрицательных чисел.
Решение задачи:
Упростим задачу: Дана последовательность 3 чисел. Определить произведение всех введенных отрицательных чисел.
Program Proizved_3_otricat_chisel;
var
x, p : real;
begin
P:=1;
Writeln(' Введите число x ');
Readln(x);
if x<0 then
p := р * x;
Writeln(' Введите число x ');
Readln(x);
if x<0 then
p := р * x;
Writeln(‘Введите число x?’);
Readln(x);
if x<0 then
p := р * x;
writeln('P= ',p);
Readln;
end.
Для решения задачи необходимо повторить (скопировать), выделенный фрагмент программы 10 раз
Задача 3. Вычислить S=1+2+3+4+....+10.
Упростим задачу: S=1+2+3+4.
Способ 1:
Program Summa;
var
s : integer;
begin
s:=0;
s:=s+1;
s:=s+2;
s:=s+3;
s:=s+4;
writeln(' S= ',s);
Readln;
end.
В данном коде программы нет явного повторения строк (бери и копируй). Поэтому чтобы свести строки к явному повторению необходимо всегда использовать следующий прием:
1. Неповторяющийся участок заменим переменной.
2. Для того чтобы в этой переменной возникали необходимые значения и правильность программы не нарушилась, введем для нее математическое выражение по которому машина сама будет формировать в переменной необходимые значения. Изменим код задачи 3, введя дополнительную переменную i, в результате программа будет иметь вид, представленный в способе 2.
Способ 2:
Program Summa;
var
s, i : integer;
begin
s:=0; i:=1;
s:=s+i;
i:=i+1;
s:=s+i;
i:=i+1;
s:=s+i;
i:=i+1;
s:=s+i;
i:=i+1;
writeln('S= ',s);
Readln;
end.
Таким образом, получен код с явным повторением строк. Для того чтобы решить поставленную ранее задачу необходимо 10 раз скопировать выделенный участок кода.
Задача 4. Дано натуральное n. Написать программу вычисления значений S=1+1/(1*2)+1/(1*2*3)+....+1/(7!)
Решение задачи:
Шаг 1.
Program Summa2;
var
s : integer;
begin
s:=1;
s:=s+1/(1*2);
s:=s+1/(1*2*3);
s:=s+1/(1*2*3*4);
writeln('S= ', s);
Readln;
end.
Шаг 2. Вводим дополнительную переменную i.
Program Summa2;
var
s, i : integer;
begin
s:=1;i:=1;
i:=i*2;
s:=s+1/i;
i:=i*3;
s:=s+1/i;
i:=i*4;
s:=s+1/i;
writeln('S= ',s);
Readln;
end.
Шаг 3. Вводим еще одну дополнительную переменную j.
Program Summa2;
var
s, i, j : integer;
begin
s:=1; i:=1; j:=1;
j:=j+1;
i:=i*j;
s:=s+1/i;
j:=j+1;
i:=i*j;
s:=s+1/i;
j:=j+1;
i:=i*j;
s:=s+1/i;
writeln('S= ',s);
Readln;
end.
Выделенный участок необходимо скопировать для 4! – 3 раза, а для 7! – 6 раз.
Задания для самостоятельного выполнения
1. Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел.
2. Среди введенных с клавиатуры 6 чисел подсчитать количество положительных и количество отрицательных чисел.
3. Вычислить S=1+1/2+1/3+1/4+....+1/10.
4. Вычислить S=1+(1*2)+ (2*3)+ (3*4)+....+ (9*10).
5. Вычислить S=1+1/3+ 2/5+ 3/7+....+ 6/13.
6. Вычислить S=1+1/(1*2)+ 2/(1*2*3)+ 3/4!+....+ 5/6!.
7. В промежутке 20…32 найти все числа кратные числу S, введенному с клавиатуры.
8. Составить программу, печатающую все делители числа 15 в порядке убывания.
9. Среди введенных с клавиатуры 6 чисел найти количество четных чисел и их среднее арифметическое.
10. Среди введенных с клавиатуры 6 чисел найти максимальное и минимальное из введенных чисел.
11. Дана последовательность 8 чисел. Определить сколько раз в этой последовательности изменяется знак числа.
12. Составить программу, проверяющую, является ли последовательность из 10 целых чисел, вводимых с клавиатуры, монотонно возрастающей.
13. Дано целое четырехзначное число n. Найти сумму цифр числа n.
14. Дана последовательность из 10 чисел. Определить количество чисел в наиболее длинной последовательности нулей.
Лабораторная работа № 5. Циклические структуры
Цель работы: Закрепление навыков в программирование циклических процессов.
Задачи:
¾ изучить принципы работы цикла for;
¾ изучить принципы работы цикла repeat;
¾ изучить принципы работы цикла while;
¾ разобраться с условиями входа и завершения каждой циклической конструкции;
¾ определить для себя в каких случаях, какую циклическую конструкцию лучше использовать.
Порядок выполнения работы:
1. Перед выполнением работы, обязательно, прочитать конспект лекций по теме «Циклы».
2. Ознакомиться с представленными в лабораторной работе теоретическими сведениями.
3. Получить дополнительные теоретические знания из источников: [4: Тема 6], [7: Занятие 6 - 9], [8: Глава 3, Семинар 3], [9: Параграф 5 - 7].
4. Реализовать на ЭВМ разобранные примеры;
5. Самостоятельно выполнить предложенные задачи.
Внимание: переходить к выполнению пунктов 4 и 5 только после тщательной проработки пунктов 1 – 3.