Программирование структур с вложенными циклами. Вычисление суммы ряда
Цель работы. Получить навыки составления программ с вложенными циклами.
Задание. Вычислить сумму ряда и функцию Y.
Постановка задачи. Определив тип общего члена ряда, и организовав вычисление его суммы со структурой вложенных циклов, получить таблицу, состоящую из переменных X, Y, S, при |X|<1.
Методические указания
1. При организации вложенных циклических структур необходимо обратить внимание на правильность выбора внешнего и внутреннего циклов. Замена внешнего цикла на внутренний цикл приведёт к изменению постановки задачи и получению неверного результата.
2. При вычислении суммы по формуле S=S+An, необходимо правильно определить начальное значение S, которое равно первому элементу ряда. Например, в ряде при n=0 начальное значение S=0, а в ряде при n=0 начальное значение S=0.
3. Получив результаты выполнения программы, сравнить их: значения S и Y должны быть одинаковыми.
Например, вычислить сумму ряда S и функцию Y.
Общий член ряда выражается по формуле , выражение n-ого члена через (n-1)-ый равно . Шаг изменения X определяется H=(XM-X0)/M, где XM, X0 – диапазон изменения X, а M – число разбиений - может любым.
PROGRAM PRIMER1;
VAR
S, A, X, Y, X0, XM: REAL;
K, N, M: INTEGER;
BEGIN
WRITE (‘Введите интервал изменения значения X’);
READLM (X0, XM);
WRITE (‘Введите количество точек M на этом отрезке’);
READLN (M);
WRITE (‘Введите число элементов ряда’);
READLN (K);
X := X0;
H := (XM-X0)/M;
REPEAT
S := 1;
A := 1;
FOR N := 1 TO K DO
BEGIN
A := A*X/N;
S := S+A;
END;
Y := ESP (X);
WRITELN (‘S = ’, S:8:5, ‘’:3, ‘Y = ’, Y:8:5);
X := X+H;
UNTIL X>=XM;
END.
Варианты заданий
№ | Ряд | Контрольная формула |
sinx – cosx + 1 | ||
Перечислимые и ограниченные типы данных
Перечислимый тип данных
Перечислимый тип данных задаётся списком констант (объектов), которые могут принимать переменные этого типа. Каждый объект имеет своё имя. Числа, логические и символьные константы не могут являться объектами перечислимых типов. Применение перечислимого типа повышает наглядность программы и даёт возможность автоматически контролировать допустимость значений переменных. Перечислимый тип задаётся в виде перечисления в строго определённом порядке и строго ограниченном количестве всех значений, которые могут принимать данные рассматриваемого типа.
Описание перечисляемого типа имеет вид:
TYPE <имя_типа> = (список констант);
VAR <имя_пер> : <имя_типа>;
Например.
TYPE
DAY = (MO, TU, WE, TH, FR, SA, SU);
VAR
D1, D2, D3 : DAY;
Переменные D1, D2, D3 типа DAY при выполнении программы могут принимать только одно из семи указанных значений.
Для перечисляемого типа данных существенен порядок указанных объектов, каждая константа имеет свой порядковый номер, счёт начинается с нуля. Упорядоченность констант позволяет применять к ним операции отношения, а также функции PRED, SUCC, ORD, имеющих тот же смысл, что и для стандартных скалярных типов.
Например,
TYPE
COLOR = (RED, BLUE, BLACK);
VAR
C1, C2, C3 : COLOR;
Результатом функции SUCC(RED) является значение BLUE, PRED(BLACK)=BLUE, ORD(BLUE)=1.
Примечание. Непосредственно вводить и выводить на внешние устройства значения перечисляемых типов в языке Паскаль недопустимо.
Ограниченный тип данных
Множество значений стандартных скалярных типов данных и перечисляемых скалярных типов упорядочено и конечно (кроме вещественного типа).
Если необходимо сузить диапазон значений, принимаемых некоторым объектом скалярного типа, то осуществляется это наложением ограничений на стандартный или перечислимый скалярный тип, называемый в данном случае базовым.
Описание ограниченного типа имеет вид:
TYPE <имя_типа> = константа..константа;
Обе граничные константы должны быть одного типа, в качестве базового типа можно использовать любой простой тип, кроме действительного (REAL). Начальное значение для определения ограниченного типа не должно быть больше конечного. Переменные ограниченного типа должны быть описаны в разделе переменных с помощью имён этих типов.
К переменным ограниченного типа применимы все операции и стандартные функции, допустимые при работе с переменными соответствующего базового скалярного типа.
Например.
TYPE DAY = (MO, TU, WE, TH, FR, SA, SU);
NOM = 10..25;
SSS = ‘C’..'X';
WD = FR..SU;
Для ограниченного типа NOM базовым является целый тип, для SSS – символьный, для WD – определённый ранее перечислимый тип DAY.
Из примера видно, что для определения ограниченного типа указываются начальное и конечное значения, которые может принимать константа базового типа на этом отрезке, разделённые двумя точками (..).
6.3. Оператор выбора (варианта)
Характерной чертой многих алгоритмов является широкая разветвляемость, задаваемых ими вычислительных процессов. Для задания таких разветвлений используют условный оператор, по которому выбирается ход вычисления в зависимости от выполнения одного, двух условий. Но на практике часто встречаются случаи, когда вычислительный процесс надо разветвить не по двум, а по К (К>2) возможным путям. Это можно сделать и при помощи условного оператора, но в этом случае структура программы будет громоздкой:
IF B1 THEN S1 ELSE
IF B2 THEN S2 ELSE
…
IF BK THEN SK ELSE
В языке Паскаль предусмотрен производный от условного оператор, называемый оператором варианта или выбора. Позволяет выбрать одно из нескольких возможных продолжений программы. Этот оператор относится к сложным.
Полный формат оператора:
CASE <ключ_выбора> OF
константа1 : оператор1;
константа2 : оператор2;
…
константаN : операторN;
else оператор;
end;
Краткий формат оператора:
CASE <ключ_выбора> OF
константа1 : оператор1;
константа2 : оператор2;
…
константаN : операторN;
end;
Здесь CASE (в случае), OF (из), END (конец) – служебные слова. <ключ_выбора> - является селектором, значение которого может быть целого, литерного, логического типа, либо типом, определяемым пользователем (за исключением действительного типа REAL).
Константы должны быть того же типа, что и селектор. Выбор оператора определяется совпадением значений селектора и константы, стоящей перед оператором: если значение выражения равно одной из констант, то выполняется соответствующий ей оператор, а управление передаётся за пределы оператора выбора. Если значение выражения не совпадает ни с одной константой, то управление передаётся за пределы оператора.
Пример 6.1.
CASE I MOD 3 OF
0: M:=0;
1: M:=2;
2: M:=3;
end;
Пример 6.2.
CASE S OF
‘=’, ‘*’, ‘/’, ‘+’: K:=1;
‘!’, ‘-’: K:=2;
‘A’: K:=;
end;
Задача 6.1. Ввести с клавиатуры букву, в ответ на мониторе будет выведена фамилия, начинающаяся на эту букву.
Листинг программы
PROGRAM FAM;
USES CRT;
VAR
OP: CHAR;
BEGIN
CLRSCR;
WRITELN (‘Введите букву’);
OP:= READKEY;
CASE OP OF
‘A’:WRITELN (‘Анисимов’);
‘B’:WRITELN (‘Владимиров’);
ELSE WRITELN (‘Фамилии на данную букву нет’);
END;
END.
Задача 6.2. Написать программу, имитирующую работу калькулятора.
Листинг программы
PROGRAM CALC;
USES CRT;
VAR
OP:CHAR; X, Y, Z : REAL; STOP : BOOLEAN;
BEGIN
CLRSCR;
STOP:= FALSE;
WRITELN (‘Введите X, Y’);
READLN (X, Y);
OP:= READKEY;
CASE OP OF
‘+’: Z:= X+Y;
‘-’: Z:= X-Y;
‘*’: Z:= X*Y;
‘/’: Z:= X/Y;
ELSE STOP := TRUE;
END;
IF NOT STOP THEN WRITELN (‘Результат = ’, Z:6:2);
END.
Задача 6.3. Использовать оператор варианта для ввода и вывода значений перечислимых скалярных типов.
Листинг программы
PROGRAM CAS;
USES CRT;
TYPE COLOR = (RED, BLUE, BLACK);
VAR CLR : COLOR; N : 0..2;
BEGIN
CLRSCR;
WRITELN ('ENTER THE NUMBER OF COLOR 0..2');
READLN (N);
CASE N OF
0 : CLR := RED;
1 : CLR := BLUE;
2 : CLR := BLACK;
END;
WRITELN ('THE LIST OF COLORS:');
CASE CLR OF
RED : WRITELN ('RED');
BLUE : WRITELN ('BLUE');
BLACK : WRITELN ('BLACK');
END;
READLN; END.
Задача 6.4. Использовать оператор выбора (варианта) для определения принадлежности буквы и латинскому и русскому алфавиту.
Листинг программы
PROGRAM TASK1;
USES CRT;
VAR S: 'A'..'G';
BEGIN
CLRSCR;
READLN (S);
CASE S OF
'A', 'B', 'C', 'E': WRITELN ('THE WORD TO BELONG BOTH ALPHABETS');
'D', 'E', 'F', 'G': WRITELN ('THE WORD TO BELONG LATIN ALPHABET');
END; END.
Задача 6.5. Использовать оператор выбора для определения чётности/ нечётности числа на промежутке 1..9.
Листинг программы
PROGRAM TASK2;
USES CRT;
VAR I : 1..9;
BEGIN
CLRSCR;
READLN (I);
CASE I OF
2, 4, 6, 8 : WRITELN ('THE NUMBER IS EVEN');
1, 3, 5, 7, 9 : WRITELN ('THE NUMBER IS UNEVEN');
END;
END.
Вопросы для самопроверки
1. Дайте определение перечисляемого типа данных? Какова структура перечисляемого типа? Привести пример.
2. Какие можно использовать функции на данных перечисляемого типа?
3. Каков формат объявления типа данных «диапазон»? Привести пример.
4. Каков формат оператор выбора (варианта)? Какова структура краткой формы оператора варианта? Привести пример.
5. Какова структура полной формы оператора варианта? Привести пример.
Лабораторная работа №6