
- •Краткий курс лекций
- •1Fns 12017 Алгоритмы, структуры данных и языки программирование
- •1. Основные понятия и определения
- •Лекция 2. Алгоритмический язык Турбо Паскаль 7.0.
- •Лекция 6. Перечислимый и ограниченный типы. Строки
- •1) Переменная типа "массив" (или просто массив) является совокупностью компонентов одного и того же типа, называемых элементами массива.
- •2) Каждый элемент массива может быть явно обозначен, и к нему имеется прямой доступ.
- •3) Число элементов массива определяется при его описании и в дальнейшем не меняется – массив является статическим.
- •Лекция 8. Файлы
- •1) Переменная типа "файл" (файловая переменная) позволяет получить доступ к элементам совокупности одного и того же типа, расположенным, обычно, на внешнем носителе (диске).
- •План практических занятий
- •1Fns 12017 Алгоритмы, структуры данных и языки программирование
- •Самостоятельная работа студентов
- •1Fns 12017 Алгоритмы, структуры данных и языки программирование
- •Самостоятельная работа студентов по дисциплине «Алгоритмы, структуры данных и языки программирования»
- •Экзаменационные вопросы по курсу «Алгоритмы, структуры данных и языки программирования»
План практических занятий
1Fns 12017 Алгоритмы, структуры данных и языки программирование
(шифр и наименование модуля)
по дисциплине ASDYaP1202 Алгоритмы, структуры данных и языки программирование
(код и полное наименование дисциплины по рабочему учебному плану)
для студентов специальности 5В070300 Информационные системы
(шифр и наименование специальности/специализации)
Астана
2012
Практическое занятие №1
Операции. Стандартные функции. Выражения
1. Запишите арифметические выражения по правилам языка Турбо Паскаль:
|
|
|
|
2. Напишите на языке Турбо Паскаль вычисление длины биссектрисы треугольника. Если в треугольнике ABC |AB|=c, |AC|=b, угол BAC=, то длина биссектрисы вычисляется по формуле:
3. Напишите на языке Турбо Паскаль вычисление длины медианы треугольника. Если в треугольнике ABC |BC|=a, |AC|=b, |AB|=c, то длина медианы к стороне BC вычисляется по формуле:
4. Напишите на языке Турбо Паскаль вычисление длины высоты треугольника. Если в треугольнике ABC |BC|=a, |AC|=b, |AB|=c, угол BAC=, то длина высоты из вершины A вычисляется по формуле:
5. Выписать на языке Турбо Паскаль вычисление площади треугольника по трём сторонам (формула Герона), радиусов вписанной и описанной вокруг треугольника окружностей.
6. Цветочная клумба имеет форму круга. Вычислить её периметр и площадь, если известен радиус.
7. Вычислить длину гипотенузы и площадь прямоугольного треугольника по двум заданным катетам.
8. Участок леса имеет форму равнобедренной трапеции. Вычислить её периметр и площадь по заданным сторонам.
9. Составьте таблицы истинности для логических утверждений:
а) not A and not B;
б) not A or not B;
в) A and not B;
г) A or not B;
д) A or B and not A;
е) (A or B) and not A.
10. Напишите логические выражения, принимающие значения True лишь при выполнении следующих условий:
а) переменная M целого типа делится на 7 без остатка;
б) переменная M целого типа делится без остатка на 3 и 5;
в) переменная M делится на 3 или на 5 без остатка;
г) значение целой переменной L оканчивается на 1, 3, 7 или 9;
д) значения переменных K, L, M равны между собой;
е) из переменных K, L, M только две равны между собой.
Контрольные вопросы:
1. Перечислите операции с целыми значениями. В каких операциях операнды могут принимать только целые значения?
2. Перечислите логические операции. Что может быть операндом при такой операции? Какие значения принимает результат?
3. Какие операции можно вычислять с вещественными значениями?
4. Перечислите стандартные математические функции. Какие типы может иметь их аргумент?
5. Как организовать возведение в степень?
6. Перечислите стандартные функции преобразования типов. Какие два способа преобразования вещественных значений в целые?
7. Каков порядок вычисления выражений? Что такое элементарное выражение?
Практическое занятие №2
Структура программы. Инструкции присваивания и ввода/вывода. Пустая инструкция
опросы:
1. Вычислите значение выражения:
где a, b, c – заданные неотрицательные числа, и b ≠ c. Результат выведите на экран.
2. Проверьте принадлежность заданной точки (x0, y0) графику функции y = -x2 + 5x + 2. Результат (True или False) выведите на экран.
3. Вычислите высоту треугольника, опущенную на сторону a, по известным значениям длин его сторон a, b и c.
4. Дана гипотенуза и катет прямоугольного треугольника. Найти второй катет и радиус вписанной окружности.
5. Даны вещественные A, B и h. Найти и напечатать целое N – максимальное число отрезков длины h, на которые можно разбить отрезок [A, B].
6. Напишите программу, проверяющую законы де Моргана:
not (X and Y) = not X or not Y
not (X or Y) = not X and not Y
7. Напишите программу, демонстрирующую работу побитовых операций: not, and, or, xor, shr, shl. Операции примените к переменным типа Byte. Объясните полученные результаты.
8. Вычислить расстояние между двумя точками с координатами (x1, y1, z1) и (x2, y2, z2).
9. Найти сумму членов арифметической прогрессии
a, a + d, a + 2d, …, a + (n - 1)d
по данным значениям a, d, n.
10. Найти сумму членов геометрической прогрессии
b, b • q, b • q2, …, b • qn-1
по данным значениям b, q, n.
11. Написать программу преобразования исходной простой дроби, заданной парой целых значений P (числитель) и Q (знаменатель), в смешанную дробь. Результат должен иметь вид: I_+_C_/_Z, где I – целая часть, C – числитель, Z – знаменатель.
Контрольные вопросы:
1. Из каких разделов состоит программа?
2. В чём разница между простыми и структурными инструкциями?
3. Как выполняется инструкция присваивания, и какие особенности присваивания для данных разных типов?
4. Какова разница между потоковым и построчным вводом?
5. Какова разница между потоковым и построчным выводом?
6. Как форматировать вывод?
7. Какая инструкция называется пустой?
Практическое занятие №3
Блок. Ветвление. Инструкции альтернативы и варианта
1. Составьте программу вычислений значений функции:
y = |x - 2| + |x + 5|
2. Составьте программу вычислений значения
n/3, если n кратно 3;
X = n2, если n при делении на 3 даёт остаток 1;
n-2, если n при делении на 3 даёт остаток 2.
3. Даны действительные числа x, y, z. Выяснить, существует ли треугольник с длинами сторон x, y, z.
4. Заданы значения переменных r, a. Составить программу, определяющую, поместится ли круг радиусом r в квадрате со стороной a. Если да, то присвоить переменной Yes – значение True, если нет – False.
5. Для заданного числа a найти корень уравнения f(x) = 0, где
6. Даны числа a1, b1, c1, a2, b2, c2. Напечатать координаты точки пересечения прямых, описываемых уравнениями
a1 x + b1 y = c1 и a2 x + b2 y = c2
либо сообщить, что эти прямые совпадают, не пересекаются или вовсе не существуют.
7. Даны числа a, b и c (a ≠ 0). Найти вещественные корни уравнения a x4 + b x2 + c = 0. Если корней нет, то сообщить об этом.
8. Для целого числа k от 1 до 99 напечатать фразу "мне k лет", учитывая при этом, что при некоторых значениях k слово "лет" надо заменить словом "год" или "года".
9. Для натурального числа k напечатать фразу "мы нашли k грибов в лесу", согласовав окончание слова "гриб" с числом k.
10. Даны целые числа а, b, c. Если a ≤ b ≤ c, то все числа заменить их квадратами, если a > b > c, то каждое число заменить наибольшим из них, в противном случае сменить знак каждого числа.
11. Составьте программу, которая определяет, является ли введённый символ гласной или согласной буквой английского алфавита.
12. Ввести номер дня недели. Вывести его название.
13. Написать вычисление функции sign(x, y). Её значение равно |x|, если y ≥ 0, и -|x|, если y < 0.
Контрольные вопросы:
1. Что такое инструкция блока?
2. Как выполняется инструкция if-then-else?
3. Как выполняется инструкция case-of-end?
4. Как вкладывать одну инструкцию if в другую?
5. Когда инструкция case предпочтительнее инструкции if?
Практическое занятие №4
Циклы. Инструкция безусловного перехода, метки
1. Напишите программу, которая печатает строку из 25 звёздочек "*", используя инструкцию
а) for;
б) repeat;
в) while.
2. Составьте программу для вычисления произведения:
3. Вычислите приближённо значение суммы (справа приведено её точное значение, с которым можно сравнить полученный ответ):
4. Напишите программу, которая проверяет, является ли число, введённое с клавиатуры, простым (выполните задание тремя способами, используя инструкции for, repeat, while).
5. Дано действительное число a, натуральное число n. Вычислить:
6. Дано натуральное число n (n>100). Определить:
а) количество цифр в нём;
б) сумму его цифр;
в) среднее арифметическое его цифр;
г) его первую цифру;
д) сумму его первой и последней цифры.
7. Напечатать таблицу значений функций sin x и cos x на отрезке [0, 1] с шагом 0,1 в следующем виде (считать, что при печати на каждое вещественное число отводится по 6 позиций строки):
x |
sin x |
cos x |
0.0000 |
0.0000 |
1.0000 |
0.1000 |
0.0998 |
0.9950 |
… |
… |
… |
1.000 |
0.8415 |
0.5403 |
8. Вычислить по схеме Горнера:
а) y = x10 + 2x9 + 3x8 + … + 10x + 11;
б) y = 11x10 + 10x9 + 9x8 + … + 2x + 1.
9. Даны натуральное число n и вещественные числа t, a0, a1, …, an. Вычислить значение многочлена
a0 xn + a1 xn-1 + … + an-1 x + an
и его производной в точке t2 + 0,5, используя схему Горнера.
10. Не используя стандартные функции (за исключением Abs), вычислить с точностью eps > 0:
а) ex = 1 + x / 1! + x2 / 2! + … + xn / n! + …;
б) sh x = x + x3 / 3! + x5 / 5! + … + x 2n+1 / (2n+1)! + …;
в) ch x = 1 + x2 / 2! + x4 / 4! + … + x 2n / (2n)! + …;
г) sin x = x - x3 / 3! + x5 / 5! - … + (-1)n x 2n+1 / (2n+1)! + …;
д) cos x = 1 - x2 / 2! + x4 / 4! - … + (-1)n x 2n / (2n)! + …;
е) ln(1 + x) = x - x2 / 2 + x3 / 3 - … + (-1)n-1 x n / n! + … (|x|<1);
ж) arctg x = x - x3 / 3 + x5 / 5 - … + (-1)n x 2n+1 / (2n+1) + … (|x|<1).
Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше eps, – все последующие слагаемые можно уже не учитывать.
11. Из чисел от 10 до 99 вывести те, сумма цифр которых равна n (0 < n ≤ 18).
12. В трёхзначном числе зачеркнули первую цифру слева, когда полученное двузначное число умножили на 7, то получили данное число. Найти это число.
13. Дано натуральное число n (n ≤ 9999). Определить, является ли оно палиндромом (“перевёртышем”), с учётом всех четырёх цифр. Например, палиндромами являются числа: 2222, 6116, 0440.
14. Написать программу, печатающую таблицу умножения в шестнадцатеричной системе счисления от 1 до F16 (от 1 до 1510).
15. Написать три программы. Дано натуральное k. Напечатать k-ю цифру последовательности
а) 12345678910111213…, в которой выписаны подряд все натуральные числа;
б) 149162536…, в которой выписаны подряд квадраты всех натуральных чисел;
в) 1123581321…, в которой выписаны подряд все числа Фибоначчи.
16. Дано натуральное число n (n ≤ 100). Напечатать все различные пифагоровы тройки натуральных чисел k, l, m (k ≤ n, l ≤ n, m ≤ n), то есть числа, для которых верным является равенство k2 + l2 = m2.
Контрольные вопросы:
1. Как выполняются инструкции циклов while-do, repeat-until, for-to-do и for-down-do?
2. В каких случаях в программе может быть использована инструкция for?
3. Какие инструкции используются в том случае, если число повторений последовательности действий определяется ходом вычислений? В чём их отличие?
4. Как и где объявляется метка, используемая инструкцией goto?
5. Когда нежелательно и когда желательно использовать goto?
Практическое занятие №5
Перечислимый и ограниченный типы. Массивы
1. Подсчитать количество элементов целочисленного массива (x1, x2, …, xn), кратных трём.
2. Составить программу вычисления среднего арифметического элементов массива (x1, x2, …, xn), n ≤ 100.
3. Найти наибольший элемент матрицы A(5, 10) и номер строки и столбца, на пересечении которых он находится.
4. Дана вещественная квадратная матрица. Сформировать вектор, в котором элементы вычисляются как разность наибольших и наименьших элементов соответствующих строк.
5. Дана квадратная матрица порядка n. Построить массив b1, b2, …, bn, в котором bi=1, когда в i-м столбце есть хотя бы один отрицательный элемент, и bi=0 в противном случае.
6. Дана матрица размерности mn. Переставляя её строки и столбцы, добиться того, чтобы наибольший элемент (один из них) оказался в левом верхнем углу.
7. Дана действительная матрица mn. Сформируйте вектор b, в котором элементы bi вычисляются как среднее арифметическое элементов соответствующих столбцов.
8. Элементы массива x циклически сдвинуть на k позиций влево. Это значит, что в новом массиве x': x1' = xk+1, x2' = xk+2, …, xn-k' = xn, xn-k+1' = x1, xn-k+2' = x2, …, xn' = xk.
9. Дан массив целых чисел. Определить в нём количество инверсий (то есть таких пар элементов, в которых большее число находится слева от меньшего: xi > xj при i < j).
10. Элемент матрицы назовём седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своём столбце или, наоборот, является наибольшим в своей строке и одновременно наименьшим в своём столбце. Для заданной целой матрицы размером mn напечатать индексы всех её седловых точек.
11. Дан перечислимый тип и массив:
type DenNedeli = (Pn, Vt, Sr, Cht, Pt, Sb, Vs);
var God: array[1..365] of DenNedeli;
Присвоить каждому элементу God[K] название того дня недели, на который приходится K-й по счёту день невисокосного года, если известно, что 1 января – среда (God[1] := Sr, God[2] := Cht и т. д.).
12. Даны перечислимые типы и массив:
type
Mesyac = (Yan, Fev, Mar, Apr, May, Iyun, Iyul, Avg, Sen, Okt, Noya, Dek);
DenNedeli = (Pn, Vt, Sr, Cht, Pt, Sb, Vs, Net);
var Kalen: array[Mesyac, 1..31] of DenNedeli;
Заполнить календарь Kalen соответствующими днями недели (для несуществующих дат указать Net) при условии, что год невисокосный и 1 января – понедельник (Kalen[Yan, 1] := Pn; Kalen[Yan, 2] := Vt; …; Kalen[Fev, 29] := Net; …).
Контрольные вопросы:
1. Что такое перечислимый тип? Чем он отличается от других порядковых типов? Что такое безымянный тип?
2. Как в программе объявляется ограниченный тип? Что такое базовый тип? Какие типы можно использовать в качестве базового?
3. Что такое тип "массив"? Как объявляется многомерный массив?
4. Что такое элемент массива?
5. Как реализуется ввод/вывод массива?
Практическое занятие №6
Строки
1. Дан текст.
а) Подсчитать количество символов "!" и "?" в данной строке.
б) Подсчитать число букв "о" в последнем слове данной строки.
в) Найдите количество слов, начинающихся с буквы "м".
г) Найдите количество слов с удвоенной буквой "н".
д) Найти длину самого длинного слова.
2. Напишите программу, которая во введённой с клавиатуры строке преобразует строчные буквы русского алфавита в прописные. (Учтите, что функция UpCase с символами русского алфавита не работает).
3. Дана строка s и строка s1. Найти первое вхождение s1 в s справа и удалить его из s.
4. Дана строка символов. Напечатать только строчные русские буквы, входящие в этот текст.
5. Дан текст из строчных русских букв. Напечатать этот текст прописными русскими буквами.
6. Дан текст из прописных русских букв. Определить, упорядочены ли эти буквы по алфавиту.
7. Напечатать в алфавитном порядке все различные строчные русские буквы, входящие в заданный текст из не более чем 255 литер.
8. Дана строка символов из латинских букв. Напечатать её, предварительно преобразовав следующим образом:
а) все вхождения abc заменить на def;
б) удалить все вхождения w, если такие есть (образовавшиеся "дыры" заполнить последующими буквами, а в конец добавить пробелы);
в) удалить все вхождения th;
г) заменить на ks все вхождения x, если такие есть;
д) после каждой буквы q добавить букву u;
е) заменить все вхождения ph на f, а все вхождения ed на ing.
Контрольные вопросы:
1. Что такое строковый тип? Какие способы его объявления?
2. Как изображаются строковые константы? Как изображается в них символ апострофа?
3. Что такое элемент строки? Какова структура строковой переменной?
4. В чём отличие массива символов от строки?
5. Какие операции определены над символами, и какие – над строками?
Практическое занятие №7
Файловый тип. Текстовые файлы
1. Прямая на плоскости задаётся уравнением ax+by+c=0, где a и b одновременно не равны нулю. Будем рассматривать только прямые, для которых коэффициенты a, b, c – целые числа. Пусть f – файл, содержащий коэффициенты нескольких прямых (не менее трёх). Переписать из файла f в файл g коэффициенты тех прямых, которые
а) параллельны первой из прямых, заданных в файле f;
б) параллельны первой из прямых, заданных в файле f, и различны.
2. Дан текстовой файл f. Записать в перевёрнутом виде строки файла f в файл g. Порядок строк в файле g должен
а) совпадать с порядком исходных строк в файле f;
б) быть обратным по отношению к порядку строк исходного файла.
3. Даны два текстовых файла f и g. Определите, совпадают ли компоненты файла f с компонентами файла g. Если нет, то получить номер первой строки и позицию первого символа в этой строке, в которых файлы f и g отличаются между собой. В случае, когда один из файлов имеет n строк (n ≥ 0) и повторяет начало другого (более длинного) файла, ответом должны быть числа n+1 и 1.
4. Дан текстовой файл f. Найти максимальную длину его строк.
5. Дан текстовой файл f. Подсчитать число строк, которые начинаются и оканчиваются одной и той же литерой.
6. Дан текстовой файл f. Переписать его содержимое в текстовой файл g, но без пустых строк.
7. Считая, что в текстовом файле f длины строк не превосходят 80, переписать все строки в текстовой файл f80, дополняя короткие строки пробелами справа, чтобы они все имели одинаковую длину 80.
8. В текстовом файле f записана непустая последовательность вещественных чисел, разделённых пробелами. Найти среди них максимальное, не используя массив.
9. В текстовом файле f записана непустая последовательность целых чисел, разделённых пробелами. Переписать из этого файла в текстовой файл g все положительные числа.
10. Переписать содержимое текстового файла f в текстовой файл g, вставляя в начало каждой строки её порядковый номер (он должен занимать 4 позиции) и пробел.
Контрольные вопросы:
1. Что такое файловый тип?
2. Какие виды файлов существуют в Турбо Паскале?
3. Какие действия осуществляются с файлами?
4. Что такое подсоединение к файлу? Что такое логические устройства?
5. Что такое открытие файла?
6. Что такое закрытие файла?
7. Что такое ввод/вывод, и что такое текущая позиция файла?
8. Что такое текстовой файл? Каковы его отличительные особенности?
9. Какие виды позиционирования осуществляются с текстовыми файлами?
Практическое занятие №8
Типизированные и нетипизированные файлы
1. Дан файл, компоненты которого являются целыми числами. Найти:
а) наибольшее (наименьшее) из значений компонентов;
б) среднее арифметическое значений компонентов;
в) все чётные компоненты (все компоненты, кратные трём);
г) последний компонент файла;
д) компоненты, являющиеся точными квадратами.
2. Дан файл, компоненты которого являются действительными числами. Найти:
а) наибольшее из значений модулей компонентов;
б) разность первого и последнего компонентов;
в) количество отрицательных чисел среди компонентов;
г) сумму компонентов с чётными номерами;
д) количество элементов файла, меньших среднего арифметического всех элементов этого файла.
3. Дан символьный файл f:
а) записать в файл g компоненты файла f в обратном порядке;
б) получить файл g, образованный из f заменой всех прописных (больших) букв одноимёнными строчными (малыми) буквами;
в) добавить в его конец символы e, n, d;
г) найти самое длинное слово (словом будем считать любую последовательность непробельных символов, а символ пробела – разделителем);
д) посчитать количество слов в этом файле;
е) удалить все однобуквенные слова и лишние пробелы, результат записать в файл g;
ж) посчитать число вхождений в файл сочетаний ab;
з) удвоить каждый символ цифры, результат записать в файл g;
и) оставить только первые вхождения каждого символа, результат записать в файл g;
к) проверить, упорядочены ли его элементы по возрастанию, выдать на экран 'Да', если это так, а иначе выдать 'Нет'.
4. Задания 1 – 3 реализовать с помощью типизированных и нетипизированных файлов.
Контрольные вопросы:
1. Что такое типизированный файл? Чем он отличается от текстового файла?
2. Что такое нетипизированный файл? Чем он отличается от типизированного файла?
3. Какие виды позиционирования осуществляются с типизированными и нетипизированными файлами?
4. Что такое текущая позиция в файле, и как нумеруются элементы (записи) в типизированном (нетипизированном) файле?
Практическое занятие №9
Множества. Записи
1. Дана строка s. Подсчитайте общее количество цифр и знаков '+', '-' и '*', входящих в эту строку.
2. Дано множество A:
var A: set of 0..99;
Подсчитайте количество элементов в этом множестве.
3. Дано множество A:
var A: set of 'a'..'z';
Напечатайте в алфавитном порядке все элементы этого множества.
4. Дана матрица A и множества K и L:
const N = 3;
type TNomer = 1..N;
var
A: array[TNomer,TNomer] of Integer;
K, L: set of TNomer;
Найдите сумму тех элементов матрицы A, номера строк которых принадлежат множеству K, а номера столбцов – множеству L.
5. Не используя дополнительные переменные, поменять местами значения переменных-множеств A и B.
6. Дано натуральное число n. Напечатать в возрастающем порядке все цифры, не входящие в десятичную запись этого числа.
7. Дан текст из строчных латинских букв. Напечатать все буквы, входящие в текст не менее двух раз.
8. Дан текст из строчных латинских букв. Напечатать все буквы, входящие в текст по одному разу.
9. Дан текст. В алфавитном порядке напечатать (по разу) все строчные русские гласные буквы (а, е, ё, и, о, у, ы, э, ю, я), входящие в этот текст.
10. Дан текст из строчных латинских букв. Определите, каких букв больше: гласных (a, e, i, o, u) или согласных.
11. В данном массиве значений из диапазона от 1 до 50 найти количество чисел Фибоначчи и количество чисел, в десятичной записи которых первая значащая цифра 1 или 2.
12. После поступления в ВУЗ о студентах собрана информация: фамилия, имя и отчество; какую школу и в каком году закончил; какой иностранный язык изучал; средний балл аттестата; нуждается ли в общежитии. Составьте программу, которая:
а) определяет, сколько человек изучали французский язык;
б) составляет список студентов, нуждающихся в общежитии;
в) определяет, сколько человек имеет средний балл аттестата не менее 4,5.
13. Дан файл f, который содержит номера телефонов сотрудников учреждения: указывается фамилия сотрудника, его инициалы и номер телефона. Найти телефон сотрудника по его фамилии и инициалам.
14. Написать программу, которая собирает информацию об итогах экзаменационной сессии: номер группы, оценки по мат. анализу, алгебре, информатике, фамилию студента. Затем печатается фамилия студента-задолжника и номер его группы, и выводится средний балл по всем трём дисциплинам по всему потоку.
15. Найти корни квадратного трёхчлена с заданными комплексными коэффициентами.
16. Дано комплексное число z (пара вещественных чисел) и вещественное число ε > 0. Вычислить с точностью ε значение следующей комплексной функции:
а) ez = 1 + z / 1! + z2 / 2! + … + zn / n! + …;
б) sh z = z + z3 / 3! + z5 / 5! + … + z 2n+1 / (2n+1)! + …;
в) ch z = 1 + z2 / 2! + z4 / 4! + … + z 2n / (2n)! + …;
г) sin z = z - z3 / 3! + z5 / 5! - … + (-1)n z 2n+1 / (2n+1)! + …;
д) cos z = 1 - z2 / 2! + z4 / 4! - … + (-1)n z 2n / (2n)! + …;
е) ln(1 + z) = z - z2 / 2 + z3 / 3 - … + (-1)n-1 z n / n! + … (|z|<1);
ж) arctg z = z - z3 / 3 + z5 / 5 - … + (-1)n z 2n+1 / (2n+1) + … (|z|<1).
Контрольные вопросы:
1. Что такое множественный тип?
2. Какие типы используются в качестве базовых при объявлении типа "множество"?
3. Что такое конструктор множества?
4. Какие операции определены над множествами?
5. В чём сходство и в чём отличие множества и массива?
6. Что такое тип запись?
7. Какие действия определены для записей?
8. В чём сходство и в чём отличие записи и массива?
9. Что такое инструкция присоединения?
Практическое занятие №10
Подпрограммы-процедуры. Локальность имён. Параметры. Подпрограммы-функции. Побочный эффект
1. Даны два одномерных массива из целых чисел. Напишите процедуру отыскания элементов, принадлежащих: а) первому и второму массивам; б) первому или второму массивам; в) первому массиву, но не принадлежащих второму массиву.
2. Даны действительные числа x1, y1, x2, y2,…, xN, yN (N>2). Найдите периметр N-угольника, вершины которого имеют соответственно координаты (x1, y1), (x2, y2), …, (xN, yN).
3. Даны координаты вершин двух треугольников. Определить, какой из них имеет большую площадь.
4. Вычислите суммы положительных и отрицательных чисел, записанных в текстовом файле, и выведите на печать значения сумм и количества тех и других чисел.
5. Составьте
программу подсчёта числа сочетаний
C(n,m) =
.
Создайте функцию вычисления факториала
числа Fact(n).
6. Напишите программу нахождения наибольшего общего делителя трёх чисел.
7. Найти наименьшее общее кратное четырёх заданных натуральных чисел.
8. Составьте подпрограмму распознания по трём заданным вещественным значениям a, b, c являются ли они сторонами прямоугольного треугольника. Если это так, подпрограмма должна также посчитать его площадь s.
9. Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны треугольника.
10. Для произвольного вещественного вектора x=(x1, x2, …, xn) проверить соотношения между нормами:
||x||1
≤ ||x||2 ≤ ||x||C ≤
||x||2
≤ n ||x||1
11. Даны три вещественные матрицы n*n. Напечатать ту из них, норма которой наименьшая.
12. Даны n-элементные вещественные векторы x и y и матрицы A, B, C порядка n*n. Вычислить комбинацию скалярных произведений (Ax, By) + (Cx, y) / (x, By).
13. Даны n-элементные вещественные векторы x, y, z и матрицы A, B, C порядка n*n. Вычислить вектор u = Ax + By - Cz.
Контрольные вопросы:
1. Что такое подпрограмма, и каков механизм её работы?
2. Что такое область видимости и область существования?
3. Что такое локальные имена?
4. Что такое глобальные имена, и в чём заключается их "перекрытие" локальными именами?
5. Для чего нужны фактические и формальные параметры, и какое соответствие должно соблюдаться между ними? Формальные параметры подпрограмм являются локальными?
6. Как передавать параметры с неименованными типами?
7. Какие бывают подпрограммы, и где они определяются?
8. Какова структура процедуры, и как процедура вызывается?
9. Какие виды передачи параметров есть в Паскале, и в чём они различаются?
10. Какова структура функции, и как функция вызывается?
11. Как возвращается значение функции, и какого типа оно может быть?
12. Что такое побочный эффект? Может ли быть побочный эффект при использовании глобальных имён?
Практическое занятие №11
Процедурный тип. Рекурсия
1. Написать функцию Root(f,a,b,Eps), которая методом деления отрезка пополам находит с точностью Eps корень уравнения f(x)=0 на отрезке [a, b]. Считать, что Eps>0, a<b, f(a) •_f(b)<0 и f(x) – непрерывная и монотонная функция на отрезке [a, b].
2. Написать функцию Newton(f,df,a,b,Eps), которая методом касательных (Ньютона) находит с точностью Eps корень уравнения f(x)=0 на отрезке [a, b]. Считать, что Eps>0, a<b, f(a)•_f(b)<0, f(x) – непрерывно дифференцируемая и монотонная функция на отрезке [a, b], а df(x) – её производная.
3. Дано n различных натуральных чисел (n<6). Написать рекурсивную процедуру, печатающую все перестановки этих чисел.
4. Описать рекурсивную функцию digits без параметров, которая подсчитывает количество цифр в тексте, заданном во входном символьном файле.
5. Рекурсивно
описать функцию C(m, n), где 0 ≤ m ≤
n, для вычисления биномиального
коэффициента
по
следующей формуле:
6. Во входном файле задана последовательность положительных вещественных чисел, за которой следует отрицательное число. Описать рекурсивную функцию sum без параметров для нахождения суммы этих положительных чисел.
7. Напечатать в обратном порядке заданный во входном файле текст.
8. Дана последовательность ненулевых целых чисел, за которой следует 0. Напечатать сначала все отрицательные числа этой последовательности, а затем – все положительные (в любом порядке).
9. Даны неотрицательные целые числа n, m. Вычислить функцию Аккермана:
m + 1, если n = 0,
A(n, m) = A(n - 1, 1), если n > 0, m = 0,
A(n - 1, A(n, m - 1)), если n > 0, m > 0.
10. Числа Фибоначчи определяются следующим образом:
u1 = u2 = 1, un = un-1 + un-2, для n = 3, 4, 5, …
Написать рекурсивную функцию, вычисляющую un для заданного n.
11. Напишите рекурсивную функцию вычисления наибольшего общего делителя двух натуральных чисел, основанную на соотношении: НОД(n, m) = НОД(n, r), где r – остаток от деления n на m. Чем эта функция хуже нерекурсивной?
12. Напишите рекурсивную логическую функцию simm(s, i, j), проверяющую, является ли симметричной часть строки s, начинающаяся i-м и кончающаяся j-м её элементами.
13. Напишите рекурсивную процедуру Strange(N), где N – целое. Процедура завершает работу при N=1, при чётном N вызывается Strange(N/2), при нечётном N вызывается Strange((3•N+1)/2). Программа должна напечатать число рекурсивных вызовов этой процедуры.
Контрольные вопросы:
1. Что такое процедурный тип, для чего он нужен? Какие действия разрешены с переменными этого типа?
2. Какие модели памяти допускаются в Турбо Паскале, и какие ограничения в связи с этим накладываются?
3. Можно ли передавать в качестве параметров подпрограмм имена стандартных функций?
4. Что такое рекурсия, и какова методика создания рекурсивных программ?
5. Что такое стек, и почему он обеспечивает рекурсию?
Практическое занятие №12
Модули
1. Создайте модуль, включающий в себя подпрограммы, выполняющие умножение матрицы на число, сложение, умножение и транспонирование матриц.
2. Создайте модуль, включающий в себя подпрограммы определения типа треугольника, вычисления его периметра и площади.
3. Создайте модуль, включающий в себя подпрограммы определения типа четырёхугольника, вычисления его периметра и площади.
4. Создайте модуль, включающий в себя подпрограммы вычисления длины окружности и площади круга, длины и площади эллипса, длины дуги окружности и эллипса, площади сектора круга и эллипса.
Контрольные вопросы:
1. Что такое модуль? Где он размещается, и как подключается?
2. Какова структура модуля?
3. Каковы области видимости различных объектов модуля?
4. Какие имеются режимы компиляции модулей? Чем они отличаются?
5. В каком порядке осуществляется подключение модулей?
6. Какие стандартные модули есть в Турбо Паскале?
Практическое занятие №13
Ссылочный тип. Динамические переменные
1. Даны два динамических вектора A и B из N элементов. Найти их скалярное произведение и освободить память после этого. Проконтролируйте объём свободной памяти в начале и конце работы.
2. Даны две динамических матрицы A и B размерности MN. Найти их сумму и записать в динамическую матрицу C. Матрицу C записать в файл и после этого освободить всю динамическую память.
3. Дана динамическая матрица. Найти максимальное и минимальное из чисел, встречающихся в ней более одного раза. При неудачном поиске выдать сообщение о том, что все элементы различные. Освободить память после этого.
Контрольные вопросы:
1. Что такое ссылка, и какие виды указателей существуют?
2. Какая существует константа ссылочного типа?
3. Какие действия и операции связаны с указателями?
4. Что такое динамическая переменная?
5. Какие процедуры отвечают за захват и освобождение динамической памяти, и что при этом происходит?
6. Какие типичные ошибки совершаются при операциях с динамическими переменными?
7. Какие дополнительные стандартные функции бывают полезны при работе с динамическими переменными?
Министерство образования и науки Республики Казахстан
Евразийский национальный университет им. Л.Н. Гумилева
Кафедра Информационных систем
(наименование кафедры)