Практикум по курсу Основы программирования — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Функции и основы тестирования)
(изменение структуры)
Строка 127: Строка 127:
 
19. Даны радиусы двух концентрических окружностей. Вычислите площадь кольца, заключенного между ними.
 
19. Даны радиусы двух концентрических окружностей. Вычислите площадь кольца, заключенного между ними.
  
== Операции с целыми числами ==
+
=== Операции с целыми числами ===
  
 
# Определить возраст человека в годах по возрасту, заданному в месяцах.
 
# Определить возраст человека в годах по возрасту, заданному в месяцах.
Строка 137: Строка 137:
 
# Даны две цифры, построить соответствующее двузначное число.  
 
# Даны две цифры, построить соответствующее двузначное число.  
 
# Даны три цифры, построить соответствующее трехзначное число.
 
# Даны три цифры, построить соответствующее трехзначное число.
 +
 +
=== Операции с символами ===
 +
 +
# Определить код заданного символа
 +
# Вывести символ, следующий за данным
 +
# Вывести символ, предшествующий данному
  
 
== Логические операции, условный оператор ==
 
== Логические операции, условный оператор ==
Строка 197: Строка 203:
 
11. Даны три числа. Найти сумму двух наибольших из них.
 
11. Даны три числа. Найти сумму двух наибольших из них.
  
== Использование операторов цикла ==
+
== Циклические операторы ==
  
 
=== Простейшие задачи на использование циклов for и while ===
 
=== Простейшие задачи на использование циклов for и while ===
Строка 236: Строка 242:
 
=== Вложенные циклы ===
 
=== Вложенные циклы ===
  
== Функции и основы тестирования ==
+
== Подпрограммы и модули ==
 +
=== Функции и основы тестирования ===
 
'''Рекомендации к выполнению'''
 
'''Рекомендации к выполнению'''
  
Строка 262: Строка 269:
 
# Напишите функцию, возвращающую двухзначное число по известным цифрам.
 
# Напишите функцию, возвращающую двухзначное число по известным цифрам.
  
== Процедуры, передача параметров ==
+
=== Процедуры, передача параметров по значению и по ссылке ===
 +
 
 +
=== Модули ===
 +
 
 +
== Графика ==
 +
 
 +
== Производные типы данных ==
  
== Модули ==
+
=== Перечисления и диапазонные типы ===
  
== Массивы ==
+
=== Массивы ===
  
== Записи ==
+
=== Записи ===
  
== Графика ==
+
=== Строки ===
  
 
= Второй семестр =
 
= Второй семестр =
  
== Символы и строки ==
+
 
  
 
== Обработка файлов ==
 
== Обработка файлов ==
  
== Указатели и динамическая память, списочные структуры данных ==
+
== Указатели, динамическая память, рекурсия ==
 +
 
 +
=== Cписочные структуры данных ===
 +
 
 +
=== Рекурсия ===
  
== Рекурсия ==
+
=== Деревья ===
  
== Деревья ==
+
== Объектно-ориентированное программирование ==
  
== Использование классов стандартной библиотеки ==
+
=== Использование классов стандартной библиотеки ===
  
 
=== Использование контейнерных классов .NET ===
 
=== Использование контейнерных классов .NET ===
  
== Объектно-базированное программирование ==  
+
=== Определение собственных классов ===  
  
 
=== Чтение и реализация UML-диаграмм ===
 
=== Чтение и реализация UML-диаграмм ===
  
== Генерация и обработка исключений ==
+
=== Генерация и обработка исключений ===
  
== Наследование и полиморфизм ==
+
=== Наследование и полиморфизм ===

Версия 11:22, 27 июля 2009

Содержание

Первый семестр

Простейший ввод/вывод, оператор присваивания, вычисление значения выражения

Рекомендации к выполнению

а) Следует уделять внимание оформлению собственных решений (пустые строки, отступы, комментарии), ориентируясь на предоставленные образцы.

б) Переменные следует объявлять непосредственно перед их использованием (переменные для исходных данных в блоке ввода данных, вспомогательные переменные — в блоке вычислений).

в) Решения большинства заданий из этого пункта имеют следующую структуру:

  1. Ввод исходных данных
  2. Вычисление результата
  3. Вывод результата

Блоки решения можно выделять пустыми строками и сопровождать комментариями.

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. Даны радиусы двух концентрических окружностей. Вычислите площадь кольца, заключенного между ними.

Операции с целыми числами

  1. Определить возраст человека в годах по возрасту, заданному в месяцах.
  2. Определить, сколько месяцев осталось до дня рождения человека, если известен его возраст в месяцах.
  3. Вычислить первую и вторую цифру заданного двузначного целого числа.
  4. Вычислить сумму цифр заданного двузначного числа.
  5. Определить последнюю цифру заданного целого числа.
  6. Вычислить сумму цифр заданного трехзначного числа.
  7. Даны две цифры, построить соответствующее двузначное число.
  8. Даны три цифры, построить соответствующее трехзначное число.

Операции с символами

  1. Определить код заданного символа
  2. Вывести символ, следующий за данным
  3. Вывести символ, предшествующий данному

Логические операции, условный оператор

Рекомендации к выполнению

а) Есть два способа проверки четности и нечетности. В первом способе вычисляется остаток от деления на 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

  1. Дано целое число N. Выведите N символов '*'.
  2. Даны два целых числа A и B (A < B). Выведите в порядке возрастания все целые числа, расположенные между A и B (не включая числа A и B), а также количество N этих чисел.
  3. Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления.
  4. Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1, 2, …, 10 кг конфет.
  5. Проверить, является ли заданное число степенью тройки. Указание: пока число делится на три, нужно делить его на три, а после этого проверить оставшееся значение, если останется единица, то число является степенью тройки.
  6. Дано вещественное число — цена 1 кг конфет. Вывести стоимость 0.1, 0.2, …, 1 кг конфет.
  7. Даны два числа. Выведите квадраты всех чисел, расположенных между A и B, включая сами эти числа.
  8. Определите наибольшее целое число, квадрат которого не превосходит заданное число.
  9. Определите наименьшее целое число, квадрат которого больше заданного числа.
  10. Определить количество цифр заданного целого числа
  11. Вычислить сумму цифр заданного целого числа
  12. Вычислить произведение цифр заданного целого числа

Суммирование конечных числовых последовательностей

Рекомендации к выполнению

а) Отладочная печать

б) Пошаговое выполнение программы

в) Слежение за значениями переменных


Вычисление рекуррентных числовых последовательностей

Вычисления с заданной точностью

Обработка последовательностей чисел

Вложенные циклы

Подпрограммы и модули

Функции и основы тестирования

Рекомендации к выполнению

а) оформление решений, именование

б) ограничение на использование ввода/вывода в функциях

в) тестирование функции: запуск с разными значениями аргументов, подбор тестовых данных

г) применение Assert для тестирования функций (с целочисленными и вещественными значениями)

д) test driven development

  1. Напишите функции вычисления длины окружности (CircleLength) и площади круга (CircleSquare) по заданному радиусу.
  2. Напишите функцию вычисления расстояния между двумя точками, заданными своими координатами (Distance).
  3. Напишите функцию, вычисляющую площадь треугольника, заданного координатами своих вершин (TriangleSquare). При вычислении воспользуйтесь функцией Distance и формулой Герона.
  4. Напишите функцию, вычисляющую возраст человека в годах по заданному возрасту в месяцах.
  5. Напишите функцию, определяющую, сколько месяцев осталось до дня рождения человека, если известен его возраст в месяцах.
  6. Напишите функции, вычисляющие первую и вторую цифры заданного двузначного числа.
  7. Напишите функцию, вычисляющую последнюю цифру заданного числа.
  8. Напишите функцию, возвращающую трехзначное число по известным цифрам.
  9. Напишите функции, вычисляющие температуру Фаренгейта по заданной температуре Цельсия и наоборот.
  10. Напишите функцию вычисления площади кольца (RingSquare), ограниченного двумя окружностями заданных радиусов.
  11. Напишите функцию, вычисляющую сумму цифр заданного двузначного числа.
  12. Напишите функцию, возвращающую двухзначное число по известным цифрам.

Процедуры, передача параметров по значению и по ссылке

Модули

Графика

Производные типы данных

Перечисления и диапазонные типы

Массивы

Записи

Строки

Второй семестр

Обработка файлов

Указатели, динамическая память, рекурсия

Cписочные структуры данных

Рекурсия

Деревья

Объектно-ориентированное программирование

Использование классов стандартной библиотеки

Использование контейнерных классов .NET

Определение собственных классов

Чтение и реализация UML-диаграмм

Генерация и обработка исключений

Наследование и полиморфизм