Практикум по курсу Основы программирования — различия между версиями
Bravit (обсуждение | вклад) м |
Avalanche (обсуждение | вклад) |
||
Строка 367: | Строка 367: | ||
=== Наследование и полиморфизм === | === Наследование и полиморфизм === | ||
+ | |||
+ | [[Категория:Основы программирования]] |
Версия 02:56, 12 августа 2009
Содержание
- 1 Первый семестр
- 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), ограниченного двумя окружностями заданных радиусов.
- Напишите функцию, вычисляющую сумму цифр заданного двузначного числа.
- Напишите функцию, возвращающую двухзначное число по известным цифрам.
Процедуры, передача параметров по значению и по ссылке
Модули
Графика
Рекомендации к выполнению
Перед выполнением заданий ознакомьтесь с примерами использования графики из стандартной поставки PascalABC.NET.
1. Нарисуйте окружность, центр которой расположен в центре графического окна, а диаметр равен высоте окна. Указание. Следует воспользоваться свойствами Window.Width, Window.Height и процедурой Circle.
2. Нарисуйте диагонали графического окна (процедура Line).
3. Нарисуйте два прямоугольника — в левом верхнем и правом нижнем углах графического окна (процедура Rectangle).
4. Напишите процедуру, которая рисует прямоугольник с диагоналями:
procedure RectWithDiags(x, y, width, height: integer);
Здесь x, y – координаты верхнего левого угла прямоугольника; width, height – ширина и высота прямоугольника.
5. Напишите процедуру, которая рисует окружность с красным крестом в центре:
procedure CircleWithCross(x, y, r: integer);
Здесь x, y – координаты центра окружности; r – радиус окружности.
Указание. Для установки цвета пера воспользуйтесь свойством Pen.Color, а для установки его ширины — свойством Pen.Width:
Pen.Color := Color.Red;
Pen.Width := 5;
6. Нарисуйте горизонтальный ряд из одинаковых квадратов. Попытайтесь предварительно определить, как изменяются координаты левых верхних углов квадратов, и записать рисование квадратов в цикл:
procedure SquaresRow(x0, y0, N, width, dist:nteger);
Здесь x0, y0 – координаты левого верхнего угла первого квадрата; N – количество квадратов; width – ширина одного квадрата; dist – расстояние между двумя соседними квадратами.
7. Напишите процедуру, рисующую N концентрических окружностей (окружностей с общим центром и разными радиусами):
procedure InnerCircles(x, y, minR, step, N: integer);
Здесь x, y – координаты центра всех окружностей; minR – радиус наименьшей окружности; step – величина, на которую отличаются радиусы двух соседних окружностей; N – количество окружностей.
Указание. В решении установить стиль прозрачной кисти, чтобы каждая новая окружность не закрашивала предыдущую:
Brush.Style := bsClear;
Можно также рисовать окружности от внешней к внутренней.
8. Напишите процедуру FramedTextOut, которая выводит текст в рамке.
9. Напишите процедуру TextOutRightBottomCorner, которая выводит заданный текст в правый нижний угол графического окна. Текст должен располагаться в указанном месте независимо от своего размера.
10. Напишите процедуру
CharInCircleOut(x,y: integer; c: char)
которая выводит переданный ей символ в центре круга.
11. Нарисуйте циферблат с делениями в виде отрезков.
12. Нарисуйте черный прямоугольник у левого края графического окна и переместите его к правому краю.
13. Напишите процедуру, которая выводит заданный текст в центре графического окна.
14. Напишите процедуру, которая выводит заданный текст в каждом из четырех углов графического окна.
15. Нарисуйте круг в левом верхнем углу графического окна и переместите его в правый нижний угол. Предварительно рассчитайте, как должны изменяться координаты центра круга, чтобы движение было равномерным.