Контрольное задание №5. Найти корень уравнения F(X) = 0 на интервале изоляции [A,B], воспользовавшись методом итерации. Работу выполнить в соответствии с представленными ниже пояснениями.
Таблица 5
№Уравнение F(X) = 0AB1 232 023 0,414 00,55 126 -0,507 00,98 349 1210 00,911 0112 1213 1,2214 3415 1216 01,517 1318 00,919 0,5120 12 21 01 22 23№Уравнение F(X) = 0AB 23 0,41 24 -1-0,2 25 23 26 0,21 27 12 28 12 29 00,9 30 23
Пояснения.
A. Подготовка уравнения, пригодного для итерации
Заданное уравнение F(X)=0 при решении методом итерации должно быть преобразовано к виду Х=φ(X), для которого обязательно выполнение условиясходимости, записанного в видеφ'(Х)1, то есть модуль производной от φ(X) на заданном интервале изоляции корня [A,B] должен быть меньше 1. Возможны два способа получения уравнения вида Х = φ(X).
Первыйспособ заключается в простом выделении какого-либо Xиз исходного уравнения F(X) = 0, как это было сделано в примере первого задания данной работы. После этого необходимо взять производную от правой части полученного уравнения φ'(X) и подставить в нее поочередно X=A и X=B. Если при этом |φ'(A)|<1 и |φ'(B)|<1, то уравнение Х=φ(X) считается пригодным для решения методом итерации. Однако такой подход равносилен лотерее: можно выделять различные Xиз исходного уравнения, но так и не получить решение, удовлетворяющее условию сходимости.
Второйспособ дает гарантированное решение, поскольку в основе его изначально заложено выполнение условия сходимости. Заключается он в следующем.
Исходное уравнение F(X) = 0 заменяется на эквивалентное:
Х = Х – F(X) / K,
где К – коэффициент, обеспечивающий сходимость итерационного процесса, выбирается на основании двух требований:
знак Кдолжен совпадать со знаком производной F'(X) на данном интервале изоляции корня [A,B];
значение К по модулю должно быть больше половины максимального значения модуля производной на интервале изоляции корня [A,B]:
Например, при решении уравнения F(X)=X3–X–1 = 0 на интервале [1,2] находим:
F' (X) = 3X2-1 0 , то есть К должен быть положительным;
F' (X )max = 11 , то есть К 11/2. Возьмём К = 6.
Тогда окончательное уравнение, пригодное для решения методом итерации, будет иметь вид
, где K=6.
Б. Реализация вычислительного процесса
При разработке программы необходимо выполнить следующее.
В качестве начальногоприближения Х0 взять любое число из интервала [A,B], например Х0 = (А+В) /2.
Степеньточности расчёта Е выбрать такой, чтобы обеспечить достоверность на менее четырёх старших разрядов в искомом результате.
Во избежание «зацикливания» предусмотреть ограничениемаксимальногоколичестваитераций, заканчивая вычисления при числе итераций более 100.
Предусмотреть вывод вычисляемого корня и количества затраченных итераций.
-
Произвести следующий вычислительный эксперимент:
Если уравнение для итерации получено первым способом, то построить зависимость количества итераций от значения степени точности вычислений E.
Если уравнение для итерации получено вторым способом, то построить зависимость (график) количества итераций от коэффициента сходимости K и найти область значений K, в которой количество итераций будет минимально.
Работа № 6. Сложные циклы
Сложным, или кратным, иливложенным называется цикл с несколькими независимыми друг от друга параметрами циклов. Организуются такие циклы путем вложения одного простого цикла внутрь другого, то есть образованием конструкции «циклвцикле». Количество вложений практически не ограничивается.
Задание. Разработать блок-схемы и составить программы вычисления нижеследующих функций.
Сосчитать значения функции Z:
для X = X1 , X2 , … , X10; Y = Y1 , Y2 , … , Y6 .
Блок-схема решения задачи представлена на рис.18 в двух вариантах.
Рассчитать таблицу корней кубических для значений Мот 10 до 1000 с шагом 5. Расчёт вести методом последовательных приближений по формуле
с заданной степенью точности Е. В качестве начальных приближений принимать X0 = М/5 .
Пояснение. Блок-схема решения приведена на рис. 19 и представляет собой арифметический цикл с простой переменной, организующий задание и изменение M, внутрь которого вложен итерационный цикл вычисления кубического корня из M.
3.
для X=X1, X2,…,X10 ; 3 ≤ Y≤ 5; Y = 0,25.
Все результаты сохранить в массиве Z1. Сосчитать сумму и количество результатов Z .
4.
для X=X1 , X2 ,…,X10 ; Y=Y1, Y2, …,Y5.
Результаты сохранить в двумерном массиве Z2, содержащем три столбца: X, Y, Z. Найти минимальный и максимальный результаты, выбрать из них максимальный по модулю.
5. Найти действительные корни уравнения
методом итерации с заданной степень точности E на отрезке [0, π/A ] для A = A1, A2, …, A45.
Результаты сохранить в массиве Y. Отыскать минимальное значение корня и его аргумент A .
6. Расcчитать значение суммы ряда
для всех Х в интервале от –0,8 до 0,8 с шагом 0,1. Вычисление суммы производить с заданной степенью точности Е=10-4 .
7. Для матрицы А (1020) рассчитать средние арифметические значения отрицательных элементов каждой строки и средние геометрические значения положительных элементов каждой строки. Из результатов вычислений сформировать массив A1 средних арифметических и массив А2 средних геометрических.
Контрольное задание №6. Вычислить сумму членов ряда
для одиннадцати равноотстоящих значений X на интервале [XH , XK]. Общая формула для К-го члена ряда приведена в табл. 6, а величина К принимает следующие значения:
а) К = 0 ,1, 2, 3, ... , N
для вариантов 1,3,5,6,7,9,10,11,13,17,19,20,21,22,25;
б) К = 1, 2, 3, ... , N
для вариантов 2,4,8,12,14,15,16,18,23,24,26,27,28,29,30.
Для контроля правильности нахождения суммы при каждом X предусмотреть одновременное вычисление и вывод значения функции Y=F(X), представляющей точное значение соответствующей суммы ряда при N .
Пояснение. Алгоритм решения задачи представляет собой сложный цикл, в котором внутренний цикл должен вычислять ряд (суммировать члены ряда) при заданном фиксированном аргументе X, а внешний организует задание и изменение X в интервале от ХН до ХК.
В ряде случаев вычисление очередного члена ряда по общей формуле затруднено. Наиболее часто такими причинами являются:
– наличие факториала K!, для расчета которого пришлось бы организовать специальный цикл, осуществляющий вычисление произведения сомножителей целого типа от 1 до K;
– наличие сомножителя в виде аргумента X в целой степени. В этом случае обычное возведение в степень через логарифмирование, во-первых, может быть не целесообразно по времени вычислений, а во-вторых, может быть совершенно непригодно для отрицательных аргументов, что приведет к организации цикла вычисления произведения многих сомножителей.
Поэтому в подобных случаях целесообразно использовать рекуррентныесоотношения, то есть вычислять каждый последующий член ряда через предыдущий. Это позволяет существенно упростить программу и сократить объем вычислительных операций.
Например, пусть общая формула для К-го члена ряда имеет вид
.
В формуле присутствуют оба отмеченных выше «неудобных случая» и факториал, и целая степень аргумента. Поэтому следует получить рекуррентную формулу для (K+1)-гo члена ряда. Для этого выполним замену K на K+1 и в образованной формуле выделим в качестве сомножителя предыдущий член ряда:
.
Последняя формула чрезвычайно проста для вычислений, а ее реализация приведена в первом примере работы №5.
В некоторых случаях рекуррентные соотношения полезно записывать не для полной формулы члена ряда, а только для ее части, выделенной в отдельный сомножитель, а оставшуюся часть вычислять непосредственно. Например, если
, то полагаем и вычисляем рекуррентно , а сомножитель непосредственно.
В случае знакопеременныхрядов, содержащих (-1) в степени, зависящей от номера члена ряда, в простейшем случае можно выделить отдельный сомножитель только для вычисления такой степени. Например, если в формуле для члена ряда выделить сомножитель
,
то рекуррентная формула для него будет иметь вид
.
То есть в этом случае учет смены знака в программе сводится к тривиальной операции С= С для знакопеременного сомножителя.
Работа № 7. Работа с двумерным массивом
В повседневной практике очень часто информацию представляют в виде таблиц, состоящих из строк и столбцов. В программировании такие таблицы реализуются с помощью двумерных массивов. Большинство операций с массивами сопровождается последовательным перебором их элементов по обоим измерениям, то есть организацией двойных вложенных циклов. Таким образом, решение задач обработки массивов сводится к построению программ со сложными циклами и данная работа является продолжением предыдущей темы «Сложные циклы».
Задание. Напишите программу, которая выполняет следующие действия:
читает с клавиатуры значения элементов матриц А(6х6) и В(3х3);
транспонирует матрицы (заменяет строки на столбцы);
выводит результаты на экран в форматированном виде;
читает с клавиатуры значения элементов матриц А(5х5) и В(4х4);
формирует массив С из минимальных значений элементов строк матриц А и В;
выводит значения элементов массива С на экран;
читает с клавиатуры значения элементов матриц А(4х4) и В(3х3);
преобразует матрицы таким образом, что последние строки становятся первыми;
формирует массив С из минимальных значений элементов строк матриц А и В;
выводит значения элементов массива С на экран;
вводит с клавиатуры числа в матрицы А(3х3), В(4х4);
заменяет в матрицах отрицательные числа на нули;
отыскивает максимальные значения столбцов и размещает их в первой строке соответствующего им столбца со сдвигом всех остальных чисел вниз по этому столбцу;
выводит матрицы на экран в форматированном виде.
Контрольное задание №7. Организовать программу обработки двумерного массива А(6х6) – квадратной матрицы из шести строк и шести столбцов – в соответствии с заданным вариантом.
A1,1 A1,6
11-243-4351
-142-718-2910
101245-7-311
6114441-34
19-23917152
137-1032513
A6,1 A6,6
Выделить в отдельные массивы элементы матрицы A, заключенные в прямоугольниках с вершинами A1,1 - A1,3 - A3,3 - A3,1иA4,4 - A4,6 -A6,6 -A6,4 . Произвести их поэлементное сложение.
Перебирая элементы строк массива, найти в них первый элемент, удовлетворяющий требованию Ai,j> 40. Сформировать массив из элементов, расположенных выше и левее найденного элемента, и найти для них среднее арифметическое всех элементов.
Найти минимальный и максимальный по модулю элементы матрицы А. Выделить в новый массив прямоугольную область, на концах диагонали которой располагались бы найденные экстремальные значения. Инвертировать (заменить) знаки элементов нового массива.
Из положительных элементов матрицы A сформировать новую, исключив все отрицательные элементы со сдвигом оставшихся влево по строкам. Строки новой матрицы с недостаточным количеством элементов дополнить нулями.
Выделить треугольную область матрицы A, расположенную выше главной диагонали от A6,1 до A1,6 , исключив элементы самой диагонали. Свободную область полученной матрицы дополнить элементами, расположенными симметрично новой диагонали, и просуммировать все элементы новой матрицы.
Выделить из исходной матрицы две новые, используя элементы, одни из которых расположены выше двух верхних отрезков главных диагоналей матрицы A6,1 - A1,6 иA1,1 - A6,6 , а другие – ниже двух других (нижних) отрезков этих диагоналей. Элементы самих диагоналей из рассмотрения исключить. В качестве недостающих элементов использовать нулевые. Для каждой новой матрицы вычислить среднее арифметическое всех элементов.
Из кратных числу 3 значений элементов матрицы A сформировать новую, заменив все остальные элементы единицами. Вычислить произведение всех элементов новой матрицы.
Выделить в отдельные массивы элементы матрицы A, заключенные в прямоугольниках с вершинами A4,1 - A4,3 - A6,3 –A6,1иA1,4 - A1,6 -A3,6 -A3,4 . Произвести их поэлементное вычитание.
Перебирая элементы строк массива, найти в них первый элемент, удовлетворяющий требованию Ai,j= -7. Сформировать матрицу из элементов, расположенных ниже и правее найденного элемента, и найти для них среднее геометрическое модулей всех элементов.
Найти минимальный и максимальный отрицательные элементы массива А. Выделить в новый массив прямоугольную область, на концах диагонали которой располагались бы найденные экстремальные значения. Рассчитать количество отрицательных элементов нового массива.
Из отрицательных элементов матрицы A сформировать новую, исключив все положительные элементы со сдвигом оставшихся вверх по столбцам. Столбцы новой матрицы с недостаточным количеством элементов дополнить единицей с минусом.
Выделить треугольную область матрицы A, расположенную ниже диагонали матрицы от A6,1 до A1,6 , исключив элементы самой диагонали. Свободную область полученной матрицы дополнить элементами, расположенными симметрично новой диагонали, и перемножить все элементы новой матрицы.
Выделить из исходной матрицы две новые, используя элементы, одни из которых расположены левее двух левых отрезков главных диагоналей матрицы A6,1 - A1,6 иA1,1 - A6,6 , а другие – правее двух других (правых) отрезков этих диагоналей. Элементы самих диагоналей из рассмотрения исключить. Свободные элементы заменить нулями. Для каждой новой матрицы вычислить сумму всех элементов.
Из четных значений элементов матрицы A сформировать новую, заменив нечетные значения нулями. Вычислить сумму всех элементов новой матрицы.
Сформировать новую матрицу, расположив сначала элементы строк матрицы в обратном порядке, а затем выполнить ее транспонирование (замену строк на столбцы). Вычислить сумму элементов первых трех рядов полученной матрицы.
Выделить в отдельные массивы элементы матрицы A, заключенные в прямоугольниках с вершинами A1,1 - A1,3 - A3,3 - A3,1иA4,1 - A4,3 -A6,3 -A6,1 . Произвести их поэлементное умножение.
Перебирая элементы столбцов массива, найти в них первый элемент, кратный числу 22. Сформировать матрицу из элементов, расположенных выше и правее найденного элемента, и найти сумму всех ее элементов.
Найти минимальный и максимальный положительные элементы матрицы А. Выделить в новый массив прямоугольную область, на концах диагонали которой располагались бы найденные экстремальные значения. Рассчитать сумму элементов нового массива.
Из положительных элементов матрицы A сформировать новую, заменив все отрицательные элементы нулями и переписав элементы полученных строк в обратном порядке.
Выделить треугольную область матрицы A, расположенную выше главной диагонали от A1,1 до A6,6 , исключив элементы самой диагонали. Незаполненную область полученной матрицы дополнить элементами, расположенными симметрично новой диагонали, и просуммировать все элементы новой матрицы.
Выделить элементы двух матриц, одни из которых расположены выше двух верхних отрезков главных диагоналей матрицы A6,1 - A1,6 иA1,1 - A6,6 , а другие – ниже двух других (нижних) отрезков этих диагоналей. Элементы самих диагоналей из рассмотрения исключить. Свободные элементы заменить единицами. Для каждой новой матрицы вычислить сумму всех элементов.
Из некратных числу 3 элементов матрицы A сформировать новую, заменив все остальные элементы единицами. Вычислить среднее геометрическое всех элементов новой матрицы.
Сформировать новую матрицу, сначала выполнив ее транспонирование (замену строк на столбцы), а затем расположив элементы столбцов матрицы в обратном порядке. Вычислить среднее арифметическое всех элементов первых трех столбцов полученной матрицы.
Выделить в отдельные массивы элементы матрицы A, заключенные в прямоугольниках с вершинами A1,4 - A1,6 - A3,6 - A3,4иA4,4 –A4,6 -A6,6 -A6,4 . Произвести их поэлементное деление.
Перебирая элементы столбцов матрицы A,найти в них последний элемент, кратный числу 11. Сформировать массив из элементов, расположенных ниже и левее найденного элемента, и найти среднее арифметическое всех его элементов.
-
Найти минимальный положительный и максимальный по модулю элементы массива А. Выделить в новый массив прямоугольную область, на концах диагонали которой располагались бы найденные экстремальные значения. Найти произведение элементов нового массива, удваивая при этом его отрицательные значения.
Из отрицательных элементов матрицы A сформировать новую, заменив все положительные элементы на единицу с минусом и переписав элементы полученных столбцов в обратным порядке.
Выделить треугольную область матрицы A, расположенную ниже диагонали матрицы от A1,1 до A6,6 , исключив элементы самой диагонали. Свободную область полученной матрицы дополнить элементами, расположенными симметрично новой диагонали, и перемножить все элементы новой матрицы.
Выделить элементы двух матриц, одни из которых расположены левее двух левых отрезков главных диагоналей матрицы A6,1 - A1,6 иA1,1 - A6,6 , а другие – правее двух других (правых) отрезков этих диагоналей. Элементы самих диагоналей из рассмотрения исключить. Свободные элементы заменить нулями. Для новых матриц вычислить среднее арифметическое всех элементов.
Из нечетных значений элементов матрицы A сформировать новую, заменив все остальные элементы нулями. Вычислить среднее арифметическое всех элементов новой матрицы.
Работа № 8. Функции и подпрограммы
Задание. Разработать блок-схемы и составить программы вычисления нижеследующих функций.
I. Составить программу вычисления функции
Для вычисления корня квадратного из сумм идентичных по форме слагаемых организовать подпрограмму.
2. Составить программу вычисления функции
,
если значения X заданы массивом из 50 элементов.
Для вычисления логарифма организовать подпрограмму, воспользовавшись соотношением logP Q = ln Q / ln P.
3. Даны три массива X, Y, и Z из 10,20 и 30 элементов соответственно.
Составить программы вычисления функций:
a)
б)
в)
Для вычисления сумм, произведений и максимальных значений организовать подпрограммы.
4. Составить программу вычисления функции
где Xmax и Xmin - наибольший и наименьший элементы массива X(50);
Ymax и Ymin - наибольший и наименьший элементы массива Y(100).
Нахождение наибольшего и наименьшего элемента любого массива организовать в одной программе.
Контрольное задание № 8. Составить программы решения нижеследующих задач. Для однотипных, повторяющихся в реализуемом алгоритме вычислительных операций (нахождения сумм, произведений, количеств, экстремальных значений, операции над векторами и матрицами, сортировка массивов и др.) организовать подпрограммы.
Даны четыре вектора – четыре одномерных массива:
А= 2,5; -0,3; 5,6; 9,4; -8,0;
В= 0,1; 7,25; 1,12; -4,7; -3,14;
С= 1,1; 2,87; -5,5; -3 3; 6,0; 7,25; -0,15; 9,1; 8,0; 4,5;
D= 9,15; -1,8; 6,33; -7,7; 5,1; -0,5; -2,75; 4,8; 2,2; 9,9.
Сформировать новый массив из сумм элементов массивов А, B, С, D и найти у него сумму элементов.
2. Сформировать новый массив из произведений элементов массивов А, В, С, D задания №1и найти у него произведение элементов.
3. Сформировать новый массив из минимальных значений элементов массивов задания №1 и найти у него минимальный элемент.
4. Сформировать новый массив из максимальных значений элементов массивов задания №1 и найти у него максимальный элемент.
5. Сформировать новый массив из средних арифметических отрицательных элементов массивов задания №1 и найти для него среднее арифметическое.
6. Сформировать новый массив из средних геометрических положительных элементов массивов задания №1 и найти для него среднее геометрическое .
7. Определить для каждого из массивов задания №1 количество элементов, попадающих в интервал [-5, 5]. Из полученных количеств организовать новый массив и найти сумму его элементов.
8. Определить количество отрицательных и положительных элементов в каждом из массивов задания №1. Сформировать два новых массива из этих количеств соответственно для отрицательных и
положительных элементов и найти суммы их элементов.
9. Найти длину для каждого вектора задания №1 по формуле . Из вычисленных длин сформировать новый массив и определить среднее арифметическое его элементов.
10. Вычислить скалярные произведения А · В и С · D векторов задания №1. Найти наименьшее из них и увеличить на эту величину все элементы указанных векторов.
11. Расположить элементы массивов задания №1 в порядке возрастания. Из второго и предпоследнего элементов каждого упорядоченного массива сформировать новый массив и найти сумму его элементов.
12. Расположить элементы массивов задания №1 в порядке убывания. Из всех первых и последних элементов с четными номерами сформировать новый массив и найти произведение его элементов.
13. Вычислить суммы А + В и С + D векторов задания №1. Для каждого нового вектора определить количество отрицательных элементов.
14. Вычислить разности А - В и С–D векторов задания №1. Для каждого нового вектора определить сумму положительных элементов.
15. Вычислить суммы А + В и С + В векторов задания №1.Для каждого нового вектора вычислить длину по формуле .
16. Для экспериментальных значений случайных величин А,В,C,D, описанных массивами задания №1, вычислить математические ожидания по формуле
и найти наибольшее из них.
17. Найти наибольшее из скалярных произведений векторов AC·BD и ADBC. Двойные буквы имен векторов означают, что координаты каждого вектора образуются из элементов одноименного с первой буквой массива задания №1, к которым дописаны элементы массива того же задания, соответствующего второй букве.
18. Вычислить значения и для элементов массивов задания №1 и напечатать наибольшее из них.
19. Найти минимальные по модулю значения элементов массивов задания №1, сформировать из них новый массив и определить в нем наименьший элемент.
20. Даны три матрицы (двумерные массивы):
, , .
Сформировать одномерный массив из сумм элементов массивов A,B,C и вычислить у него сумму элементов.
21. Вычислить следы матриц (суммы элементов главной диагонали) задания №20 и сформировать из них массив, упорядочив элементы в порядке возрастания.
22. Сформировать массив из максимальных значений элементов массивов задания №20и найти у него максимальный элемент.
23. Выполнить транспонирование матриц (замену строк на столбцы) задания №20 и определить, какие из матриц являются симметрическими (т.е. выявить матрицы, которые после транспонирования остаются равными исходной).
24. Вычислить, напечатать и запомнить в массив значения функции
Y = P1+ Р2·X+РЗ·X2
– для всех X на интервале [1,2] с шагом 0,1, где Р1, Р2, РЗ произведения положительных элементов массивов А,В,С задания №20.
25. Вычислить, напечатать и запомнить в массив значения функции
Y= A1·cos(B1·T + C1)
– для всех Т на интервале [0,π ] с шагом 0,1π, где A1,B1,C1 минимальные значения элементов массивов А,В,С задания №20.
26. Сформировать одномерный массив из значений средних геометрических модулей отрицательных и положительных элементов массивов задания №20 и вычислить для него среднее геометрическое.
27. Сформировать одномерный массив из значений средних арифметических отрицательных и положительных элементов массивов задания №20 и вычислить для него среднее арифметическое.
28. Определить количество отрицательных и положительных элементов в каждом из массивов задания №20 и сформировать из найденных значений новый массив, запоминая в него количество отрицательных элементов со знаком минус.
29. Упорядочить элементы каждой строки массивов задания №20 в порядке возрастания и напечатать элементы главных диагоналей.
30. Упорядочить элементы каждого столбца массивов задания №20 в порядке убывания и напечатать элементы главных диагоналей.
Работа № 9. Модули и файлы
Контрольное задание №9. Организовать программу, включающую в себя модули для вычисления контрольных заданий лабораторных работ, указанных в табл. 7. Предусмотреть сохранение результатов расчетов вместе с исходными данными в текстовых файлах, а также возможность просмотра таких файлов. Работу выполнить в соответствии с представленными ниже пояснениями.
Таблица №7.
№ п/пРаботы№ п/пРаботы№ п/пРаботы12,3,4112,3,5212,3,622,8,7128,4,5228,4,632,4,7132,5,6232,5,742,6,8143,4,5243,4,653,4,7153,5,6253,5,863,6,8164,8,6264,5,774,6,7175,6,7275,6,285,6,3185,6,4286,7,296,7,5198,7,4296,7,3104,5,2204,5,3307,5,8
Пояснения. При подготовке данного задания необходимо использовать программы, полученные ранее в результате выполнения контрольных работ, перечисленных в табл. 7.
Контрольное задание необходимо выполнять поэтапно, в соответствии с пунктами нижеследующих указаний.
Оформить программы трех лабораторных работ, указанных в табл. 9, в виде трех подпрограмм. Свести все подпрограммы в один файл и оформить его в виде модуля с именем, явно соответствующим номеру выполняемого варианта, например Unit15 для пятнадцатого варианта. Модуль откомпилировать.
Главную программу выполнить в виде вызывающей программы, обращающейся к подпрограммам организованного модуля с помощью меню, например, следующего вида:
РАСЧЕТЫ
Работа № 1
Работа № 2
Работа № 3
Выход
Проверить работоспособность полученной программы и показать ее ведущему преподавателю.
Модифицировать программу так, чтобы все исходные данные, в том числе полученные в диалоге с пользователем, и все результаты вычислений в каждой подпрограмме записывались в текстовый файл, а вывод на экран остался без изменений. Операции записи информации в текстовые файлы реализовать внутри расчетных процедур каждой лабораторной работы. Имя каждого текстового файла задать с явным указанием на номер варианта и номер работы в подпрограмме. Например, R15_7.txt
Организовать возможность просмотра сформированных итоговых текстовых файлов, а также файлов главной программы и программы модуля, модифицировав соответствующим образом меню вызывающей программы, например, к следующему виду:
Выполнение работы № 1 6. Результаты работы № 1
Выполнение работы № 2 7. Результаты работы № 2
Выполнение работы № 3 8. Результаты работы № 3
Текст главной программы 9. Выход
Текст модуля
При выводе текста, не умещающегося в окне вывода, предусмотреть постраничный вывод.
Окончательный вариант программы представить ведущему преподавателю.
Работа № 10. Строковые переменные
Задание. Разработать программы, реализующие вычисления с данными строкового типа.
Подсчитать количество открывающих и количество закрывающих круглых скобок во вводимом арифметическом выражении. Выдать сообщение об ошибке в случае их неравенства.
Подсчитать общее число символов +, -, *, / во вводимой с клавиатуры строке. Заменить знак операции обычного деления на целочисленное.
Во вводимой строке заменить все пробелы на знак подчеркивания «_» и выделить подстроку, которая содержится после первого символа точки с запятой.
Во вводимой строке символов, состоящей из наборов цифр, разделенных пробелами, подсчитать среднее арифметическое всех наборов.
Составить программу синтаксического анализа вводимых с клавиатуры простых переменных (то есть переменных, состоящих из последовательности букв и цифр, начинающейся с буквы).
Составить программу синтаксического анализа чисел, вводимых с клавиатуры. Предусмотреть ввод чисел со знаком или без знака, целых или действительных в естественной форме (с фиксированной запятой).
Составить синтаксический анализатор для строки программы, содержащей описание простых односимвольных переменных целого или действительного типа.
Составить синтаксический анализатор для строки программы, содержащей описание переменных типа «строказаданной длины». Имена переменных состоят не более чем из одного символа.
Составить программу, которая читает построчно текст вводимой с клавиатуры программы на Паскале, отыскивает оператор цикла вида FORi:=inTOikDO и производит его синтаксический контроль (для языка С++ соответственно - FOR(i=in;i<ik;i++).
Разработать программу, читающую с клавиатуры римское число и переводящую его в форму эквивалентного десятичного числа.
Контрольное задание №10. Составить программу обработки символьной информации в соответствии с вариантом, заданным преподавателем.
-
Дана строка символов, состоящая из цифр и пробелов. Группы цифр, не содержащих пробелов внутри себя, будем называть словами. Требуется найти самое короткое и самое длинное слово в строке, переместить их соответственно в начало и в конец строки, и, рассматривая эти слова как числа, определить их сумму.
Дана строка символов, состоящая из нулей, единиц и пробелов. Группы нулей и единиц, не содержащих пробелов внутри себя, будем называть словами. Требуется определить количество слов в строке. Рассматривая слова как числа, определить количество слов, кратных пяти (делящихся на 5 без остатка), и переместить эти слова в начало строки.
Даны две строки символов, состоящих из цифр, букв и пробелов. Группу символов, не содержащих пробелов внутри себя, будем называть словами. Составить программу переформирования строк так, чтобы в первой строке располагались слова, начинающиеся с цифр, в порядке их возрастания, а во второй – слова, начинающиеся с букв, в алфавитном порядке.
В операционной системе MS-DOS текущее время вводится в виде строки ЧЧ:ММ:SS.CC, содержащей четыре двухразрядных числа (число: месяц: секунды. сотые_доли_секунды). Разработать программу, анализирующую правильность вводимого времени по форме и по фактическому значению его составляющих.
В операционной системе MS-DOS дата вводится в виде строки: ДД-MM-ГГГГ, содержащей два двухразрядных числа (день-месяц) и одно – четырехразрядное (год). Разработать программу, анализирующую правильность вводимой даты по форме и по фактическому значению ее составляющих.
Составить программу, анализирующую правильность записи даты в виде часто используемой формы:
Число/Месяц_римскими_цифрами Год
и переводящую ее в форму с тремя двузначными числами через точку: Число.Месяц.Год,
например, запись 1/XII 2001 соответствует 01.12.03.
Составить программу, анализирующую правильность записи даты в виде часто используемой формы с тремя двузначными числами через точку:
Число.Месяц.Год
и перевода ее в обычную форму записи:
Число Месяц_словом Год,
например, записи 01.12.03 соответствует: 1 декабря 2003 года.
Дана символьная строка, состоящая из отдельных групп символов, разделенных пробелами. Каждую группу символов, начинающуюся с цифры, проанализировать на принадлежность к числу и определить тип этого числа: целое или действительное.
Составить программу, анализирующую правильность ввода с клавиатуры числа в показательной форме:
мантиссаEпоказатель_степени,
где мантисса – целое или действительное число со знаком или без знака, показатель_степени – целое число со знаком или без знака.
Составить программу, анализирующую правильность ввода с клавиатуры переменной с индексом:
Имя_переменной[Индекс]
В качестве индексов рассматривать целые числа и простые переменные.
Составить программу, анализирующую правильность ввода с клавиатуры строки с простейшим арифметическим выражением без скобок, состоящим из чисел целого типа, простых переменных и знаков арифметических действий: + ,-, *, /.
Разработать программу проверки орфографии (правильности написания) слов в некоторой строке, сравнивая их со словами из словаря. В качестве словаря использовать одномерный массив слов, заданный в программе. При сравнении учитывать возможность записи слов с прописными и строчными буквами.
Вводится строка символов, содержащая некоторый текст с пробелами. Разработать программу, которая определяет, является ли данный текст палиндромом, то есть читается ли он слева направо так же, как и справа налево, например "АрозаупаланалапуАзора".
Дана строка символов, содержащая несколько разделенных пробелами десятичных чисел (целых или действительных). Разработать программу, которая определяет, какие из представленных чисел являются палиндромами, то есть какие из них читаются слева направо так же, как и справа налево.
В массиве строк, представляющих текст, произвести выравнивание правого края путем равномерной вставки дополнительных пробелов между словами. Строки, начинающиеся с большой буквы, рассматривать как первые строки абзаца, которые должны иметь слева отступ из пяти позиций.
В массиве строк, представляющих текст, произвести выравнивание относительно центра самой длинной строки путем вставки дополнительных пробелов в начале и конце остальных строк.
Дана строка символов, содержащая некоторый текст. Разработать программу разбиения этого текста на строки размером не более 30 символов и выравнивания полученного текста по правой границе путем равномерной вставки между отдельными словами нужного количества пробелов.
Разработать программу переформатирования текста из строк произвольной длины в строки заданной максимальной длины. Части строк со словами, превышающими эту длину, должны быть слиты со следующей строкой, а короткие строки по возможности должны быть увеличены за счет слов нижеследующих строк.
Разработать программу, которая в массиве строк отыскивает фрагменты текста, заключенные в круглые или квадратные скобки, вырезает их, удаляя остающиеся лишние пробелы, и размещает в отдельном списке. При наличии непарных скобок выдавать соответствующие сообщения.
Разработать программу ввода с клавиатуры экзаменационной ведомости студентов в виде массива строк. Предусмотреть сортировку ведомости по алфавитному порядку и по среднему баллу.
-
Разработать программу, осуществляющую ввод с клавиатуры списка группы людей, включающего фамилию, дату и место рождения (город). Программа подсчитывает, сколько полных лет каждому пользователю, формирует и выводит полную таблицу сведений о пользователях в виде "Фамилия - количество_лет - место_рождения".
Разработать программу ввода с клавиатуры ведомости на выдачу стипендий студентам. Предусмотреть возможность подсчета количества студентов, получающих обычную стипендию и повышенную, а также подсчета итоговых сумм: по всей ведомости, для обычных стипендий и для повышенных.
Разработать программу шифровки текста с использованием шифра Цезаря. Его смысл заключается в замене каждой i-й буквы алфавита на (i+2), при этом предпоследняя буква алфавита заменяется на первую, а последняя на вторую. Знаки препинания и другие символы можно не шифровать. Например, русская пословица КОНЧИЛ ДЕЛО, ГУЛЯЙ СМЕЛО будет зашифрована так МРПЩКН ЕЖНР, ЕХНБЛ УОЖНР.
В текстовом файле программы на языке Паскаль подсчитать количество операторных скобок beginи endи определить их соответствие (для языка С++ - { и }). В случае ошибок следования скобок выдавать соответствующие сообщения.
В текстовом файле программы на языке Паскаль отыскивать все циклы вида while–do, выделять у них тело цикла и печатать его (для языка С++ - while).
В текстовом файле программы на языке Паскаль определить соответствие служебных слов при организации циклов вида repeat–until иwhile–do для всего текста программы (для языка С++ - do–whileиwhile). В случае ошибок, например при «пересечении» циклов, выдавать соответствующие сообщения.
В текстовом файле программы на языке Паскаль отыскивать все циклы вида for–to (downto) –do, выделять у них тело цикла и печатать его (для языка С++ - for( - ; - ; - ))..
Составить программу, которая читает построчно текст исходной программы на языке Паскаль, обнаруживает комментарии и выводит их на печать. Учесть, что имеется два типа комментариев: текст между фигурными скобками {…} и текст между парными символами (для языка С++ - //… и /*…*/), и возможны ситуации попадания одного типа комментариев внутрь другого.
Дана строка символов, состоящая из нулей, единиц и пробелов. Каждая группа нулей и единиц, не содержащая пробелов внутри себя, интерпретируется как целое двоичное число без знака. Разработать программу, заменяющую двоичное представление имеющихся значений в шестнадцатеричную систему счисления, используя для этого кодировку шестнадцатеричных цифр по двоичным тетрадам: 0 – 0000, 1 – 0001, 2 – 0010, 3 – 0011, 4 – 0100, 5 – 0101, 6 – 0110, 7 – 0111, 8 – 1000, 9 – 1001, A – 1010, B – 1011, C- 1100, D – 1101, E – 1110, F - 1111. Перекодировку производить без использования промежуточных строк (массивов).
Дана строка, содержащая наборы символов, каждый из которых может рассматриваться как целое шестнадцатеричное число без знака. Разработать программу преобразования представления строки из наборов в шестнадцатеричной системе счисления в двоичную, используя для этого кодировку шестнадцатеричных цифр по двоичным тетрадам из предыдущего задания №29. Перекодировку производить без использования промежуточных строк (массивов).
-
Приложение. Типовые операции в циклических программах
Типовыми называют операции, наиболее часто встречающиеся в практике программирования. В первую очередь к ним относятся операции вычисления сумм, количеств, произведений, экстремальных значений, а также формирования массивов в процессе выполнения программы. Любая из указанных операций реализуется в циклических программах в два этапа:
1) подготовительный – заключается в задании начальных значений рабочих переменных, используемых в процессе реализации операции, и выполняется при подготовке цикла, то есть доначалацикла.
2) рабочий– заключается в многократном повторении некоторых действий по отысканию необходимого результата непосредственно внутрителацикла.
Все действия по реализации рассматриваемых операций сведены в нижеследующую табл. П.1.
Таблица П.1
Типовая операцияПодготовкаРабочая часть1. Вычисление количества K
(организация счетчика) K=0K=K+ 12. Вычисление суммы S
некоторых значений Y S=0S=S+ Y3.Вычисление произведения P
некоторых значений Y P=1P=P • Y4. Отыскание максимумаYmax среди значений Y Ymax=-1020ЕслиY >Ymax,
тоYmax =Y 5. Отыскание минимумаYmin среди значений Y Ymin =1020ЕслиY <Ymin,
то Ymin =Y 6. Формирование массиваR
из значений Y, где K – индекс массива YM
K=0
K=K+1
YMK=Y
Примечание. Начальные значения Ymax и Ymin целесообразно принимать исходя из максимально возможного значения числовых констант для используемого типа вычислительных машин.
-
Содержание
Введение3Работа №1. Прямые программы5Работа № 2. Разветвляющиеся программы8Работа № 3. Арифметические циклы с простой переменной21Работа № 4. Арифметические циклы с индексной переменной 30Работа № 5. Итерационные циклы36Работа № 6. Сложные циклы42Работа № 7. Работа с двумерными массивами50Работа № 8. Функции и подпрограммы55Работа № 9. Модули и файлы59Работа № 10. Строковые переменные61
</1>
|