Практикум по курсу Основы программирования — различия между версиями
Bravit (обсуждение | вклад) (→Использование операторов цикла) |
Bravit (обсуждение | вклад) (→Функции и основы тестирования) |
||
Строка 237: | Строка 237: | ||
== Функции и основы тестирования == | == Функции и основы тестирования == | ||
+ | '''Рекомендации к выполнению''' | ||
+ | |||
+ | а) оформление решений, именование | ||
+ | |||
+ | б) ограничение на использование ввода/вывода в функциях | ||
+ | |||
+ | в) тестирование функции: запуск с разными значениями аргументов, подбор тестовых данных | ||
+ | |||
+ | г) применение Assert для тестирования функций (с целочисленными и вещественными значениями) | ||
+ | |||
+ | д) ''test driven development'' | ||
+ | |||
+ | # Напишите функции вычисления длины окружности (CircleLength) и площади круга (CircleSquare) по заданному радиусу. | ||
+ | # Напишите функцию вычисления расстояния между двумя точками, заданными своими координатами (Distance). | ||
+ | # Напишите функцию, вычисляющую площадь треугольника, заданного координатами своих вершин (TriangleSquare). При вычислении воспользуйтесь функцией Distance и формулой Герона. | ||
+ | # Напишите функцию, вычисляющую возраст человека в годах по заданному возрасту в месяцах. | ||
+ | # Напишите функцию, определяющую, сколько месяцев осталось до дня рождения человека, если известен его возраст в месяцах. | ||
+ | # Напишите функции, вычисляющие первую и вторую цифры заданного двузначного числа. | ||
+ | # Напишите функцию, вычисляющую последнюю цифру заданного числа. | ||
+ | # Напишите функцию, возвращающую трехзначное число по известным цифрам. | ||
+ | # Напишите функции, вычисляющие температуру Фаренгейта по заданной температуре Цельсия и наоборот. | ||
+ | # Напишите функцию вычисления площади кольца (RingSquare), ограниченного двумя окружностями заданных радиусов. | ||
+ | # Напишите функцию, вычисляющую сумму цифр заданного двузначного числа. | ||
+ | # Напишите функцию, возвращающую двухзначное число по известным цифрам. | ||
== Процедуры, передача параметров == | == Процедуры, передача параметров == |
Версия 11:10, 27 июля 2009
Содержание
- 1 Первый семестр
- 1.1 Простейший ввод/вывод, оператор присваивания, вычисление значения выражения
- 1.2 Операции с целыми числами
- 1.3 Логические операции, условный оператор
- 1.4 Использование операторов цикла
- 1.5 Функции и основы тестирования
- 1.6 Процедуры, передача параметров
- 1.7 Модули
- 1.8 Массивы
- 1.9 Записи
- 1.10 Графика
- 2 Второй семестр
Первый семестр
Простейший ввод/вывод, оператор присваивания, вычисление значения выражения
Рекомендации к выполнению
а) Следует уделять внимание оформлению собственных решений (пустые строки, отступы, комментарии), ориентируясь на предоставленные образцы.
б) Переменные следует объявлять непосредственно перед их использованием (переменные для исходных данных в блоке ввода данных, вспомогательные переменные — в блоке вычислений).
в) Решения большинства заданий из этого пункта имеют следующую структуру:
- Ввод исходных данных
- Вычисление результата
- Вывод результата
Блоки решения можно выделять пустыми строками и сопровождать комментариями.
1. Рассмотрите пример, создайте файл с этой программой и запустите ее на выполнение:
// Программа, печатающая приветствие - это комментарий к программе
program Hello;
begin
Writeln('Привет, мир');
end.
2. Создайте файл и сохраните его с именем name.pas. В этом файле напишите программу, выводящую ваше имя и фамилию.
3. Изучите пример, демонстрирующий использование вещественных переменных:
// Использование вещественных переменных
begin
// Объявление переменной с одновременным присваиванием значения
var a:real := 10.1;
// Вывод значения переменной
Writeln('a = ', a);
// Присваивание переменной нового значения
a := 5;
// Увеличение значения переменной
a += 0.6;
// Вывод значения переменной
Writeln('a = ', a);
end.
4. Объявите вещественную переменную a со значением 1.5. Увеличьте ее в три раза и выведите новое значение. Объявите переменную b и присвойте ей удвоенное значение переменной a, выведите ее значение. Обнулите значение переменной a и вновь выведите ее значение. Вычислите сумму значений переменных a и b.
5. Рассмотрите примеры с вычислением периметра квадрата и периметра и длины гипотенузы прямоугольного треугольника:
// Вычисление периметра квадрата по заданной стороне
begin
Writeln('Введите длину стороны квадрата:');
// Объявление переменной для хранения длины стороны
var a: real;
// Ввод длины стороны
Read(a);
// Вычисление периметра
var P: real := 4 * a;
Writeln('Периметр P = ', P);
end.
// Вычисление гипотенузы и периметра прямоугольного треугольника по заданным катетам
begin
Writeln('Введите длины катетов (два числа, разделенные пробелом):');
// Объявление переменных для хранения катетов
var a, b: real;
Read(a, b);
// Тип переменной c определяется автоматически, как результат вычислений
// sqrt - функция вычисления квадратного корня
var c := sqrt(a*a + b*b);
Writeln('Гипотенуза c = ', c);
// Вычисление периметра треугольника
var P := a + b + c;
Writeln('Периметр P = ', P);
end.
6. Напишите программу, вычисляющую периметр и площадь прямоугольника по заданным длинам сторон.
7. Вычислите синус и косинус угла, заданного в радианах.
8. Вычислите значение выражения по заданным a, b и c: <math>\frac{a+b}{a-b}+\sqrt{\frac{c}{2}}</math>.
9. Вычислите значение логарифма числа 1024 по основанию 2, пользуясь функцией ln, вычисляющей натуральный логарифм заданного числа, и формулой: <math>\log_a b = \frac{\ln b}{\ln a}</math>.
10. Известна скорость лодки и пройденный ею путь. Вычислите время движения лодки.
11. Вычислите значение выражения: <math>\frac{x+\sin x}{y-\sin z} + \ln(x+\sin x)</math>.
12. Вычислите длину окружности и площадь круга заданного радиуса.
13. Найти расстояние между двумя точками с заданными координатами <math>(x_1, y_1)</math> и <math>(x_2, y_2)</math> на плоскости.
Расстояние вычисляется по формуле <math>d=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}</math>.
14. Даны длины сторон треугольника. Вычислите его площадь, пользуясь формулой Герона <math>S=\sqrt{p(p-a)(p-b)(p-c)}</math>, где p — полупериметр.
15. Дана температура в градусах Цельсия, вычислите соответствующую ей температуру в градусах Фаренгейта. Шкалы Цельсия и Фаренгейта связаны соотношением <math>t^{\circ}C = \frac{5}{9}(t^{\circ}F-32)</math>.
16. Вычислите значение функции y = 3x6 – 6x2 – 7 для нескольких заданных x. Воспользуйтесь вспомогательной переменной.
17. Вычислите значение функции y = 4(x–3)6 – 7(x–3)3 + 2 для нескольких заданных x. Воспользуйтесь вспомогательной переменной для (x–3)3.
18. Вычислите длину окружности и площадь круга заданного радиуса. Используйте константу (const Pi=3.14159265;) для числа π.
19. Даны радиусы двух концентрических окружностей. Вычислите площадь кольца, заключенного между ними.
Операции с целыми числами
- Определить возраст человека в годах по возрасту, заданному в месяцах.
- Определить, сколько месяцев осталось до дня рождения человека, если известен его возраст в месяцах.
- Вычислить первую и вторую цифру заданного двузначного целого числа.
- Вычислить сумму цифр заданного двузначного числа.
- Определить последнюю цифру заданного целого числа.
- Вычислить сумму цифр заданного трехзначного числа.
- Даны две цифры, построить соответствующее двузначное число.
- Даны три цифры, построить соответствующее трехзначное число.
Логические операции, условный оператор
Рекомендации к выполнению
а) Есть два способа проверки четности и нечетности. В первом способе вычисляется остаток от деления на 2 и сравнивается с нулем. Если остаток равен нулю, то число четное, если не равен, то нечетное.
if a mod 2 <> 0 then
Writeln('Число четное')
else
Writeln('Число нечетное');
Второй способ заключается в использовании стандартной функции odd, возвращающей истинное значение, если переданное ей число является нечетным. Для проверки четности достаточно добавить операцию not.
if not odd(a) then
Writeln('Число четное')
else
Writeln('Число нечетное');
Второй способ обычно более предпочтителен.
б) Если в задаче требуется определить истинность некоторого утверждения, то следует выводить логическое значение (True или False). Например, при определении нечетности каждого из двух заданных чисел лучше вместо
if odd(a) and odd(b) then
Write('да')
else
Write('нет');
написать так:
// Переменная по умолчанию будет иметь тип boolean
var numbersAreOdd := odd(a) and odd(b);
Write(numbersAreOdd);
1. Дано целое число a. Если оно является четным, увеличить его в два раза. Вывести значение числа a.
2. Определить номер наибольшего из двух заданных чисел a и b.
3. Даны точки A, B и C, расположенные на числовой оси. Определить координату точки, расположенную ближе всего к точке A.
4. Вычислить значение условного выражения для заданного значения x:
<math>y = \begin{cases} -x, & x \le\; 0 \\ x^2, & 0 < x < 2 \\ 4, & x \ge\; 0 \end{cases}</math>
5. Определить, является ли заданное число четным.
6. Определить, являются ли оба заданных числа четными.
7. Определить номер координатной четверти, в которой находится точка с координатами (x, y).
8. Определить, можно ли составить треугольник из трех отрезков заданной длины.
9. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной сумму этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B.
10. Даны два числа. Вывести вначале большее, а затем меньшее из них.
11. Даны три числа. Найти сумму двух наибольших из них.
Использование операторов цикла
Простейшие задачи на использование циклов for и while
- Дано целое число N. Выведите N символов '*'.
- Даны два целых числа A и B (A < B). Выведите в порядке возрастания все целые числа, расположенные между A и B (не включая числа A и B), а также количество N этих чисел.
- Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления.
- Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1, 2, …, 10 кг конфет.
- Проверить, является ли заданное число степенью тройки. Указание: пока число делится на три, нужно делить его на три, а после этого проверить оставшееся значение, если останется единица, то число является степенью тройки.
- Дано вещественное число — цена 1 кг конфет. Вывести стоимость 0.1, 0.2, …, 1 кг конфет.
- Даны два числа. Выведите квадраты всех чисел, расположенных между A и B, включая сами эти числа.
- Определите наибольшее целое число, квадрат которого не превосходит заданное число.
- Определите наименьшее целое число, квадрат которого больше заданного числа.
- Определить количество цифр заданного целого числа
- Вычислить сумму цифр заданного целого числа
- Вычислить произведение цифр заданного целого числа
Суммирование конечных числовых последовательностей
Рекомендации к выполнению
а) Отладочная печать
б) Пошаговое выполнение программы
в) Слежение за значениями переменных
Вычисление рекуррентных числовых последовательностей
Вычисления с заданной точностью
Обработка последовательностей чисел
Вложенные циклы
Функции и основы тестирования
Рекомендации к выполнению
а) оформление решений, именование
б) ограничение на использование ввода/вывода в функциях
в) тестирование функции: запуск с разными значениями аргументов, подбор тестовых данных
г) применение Assert для тестирования функций (с целочисленными и вещественными значениями)
д) test driven development
- Напишите функции вычисления длины окружности (CircleLength) и площади круга (CircleSquare) по заданному радиусу.
- Напишите функцию вычисления расстояния между двумя точками, заданными своими координатами (Distance).
- Напишите функцию, вычисляющую площадь треугольника, заданного координатами своих вершин (TriangleSquare). При вычислении воспользуйтесь функцией Distance и формулой Герона.
- Напишите функцию, вычисляющую возраст человека в годах по заданному возрасту в месяцах.
- Напишите функцию, определяющую, сколько месяцев осталось до дня рождения человека, если известен его возраст в месяцах.
- Напишите функции, вычисляющие первую и вторую цифры заданного двузначного числа.
- Напишите функцию, вычисляющую последнюю цифру заданного числа.
- Напишите функцию, возвращающую трехзначное число по известным цифрам.
- Напишите функции, вычисляющие температуру Фаренгейта по заданной температуре Цельсия и наоборот.
- Напишите функцию вычисления площади кольца (RingSquare), ограниченного двумя окружностями заданных радиусов.
- Напишите функцию, вычисляющую сумму цифр заданного двузначного числа.
- Напишите функцию, возвращающую двухзначное число по известным цифрам.