Основные символы схем алгоритмов
МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ПРАКТИЧЕСКИМ ЗАНЯТИЯМ
Методические указания к практическим занятиям содержат примеры решения восьми типовых задач. Решение состоит в построении по индивидуальному заданию (условию задачи) схемы алгоритма и написании текста программы на языке Borland Pascal 7.0 (BP). Условия задач берутся из соответствующих таблиц, приведенных в приложении. В приложения вынесены и схемы алгоритмов типовых задач.
Третья и четвертая задачи решаются, соответственно, тремя и четырьмя способами, причем для каждого способа приводится отдельная схема алгоритма и текст программы.
Для некоторых задач приводятся дополнительные разъяснения по постановке задачи.
Зачет по практическому занятию предполагает успешное выполнение следующих действий:
– составление схемы алгоритма по индивидуальному условию задачи;
– написание программы на языке BP по составленной схеме алгоритма;
– ввод текста программы в отдельные папки индивидуального раздела на МД студента;
– отладка программы и получение результатов;
– анализ полученных результатов, составление и защита отчета по практическому занятию.
Задача 1
1 . Условие: Составить схему алгоритма и написать ВР-программу вычисления значения заданной функции по задаваемому в программе значению аргумента (см. табл. П. 1). Результат вычислений вывести на экран.
|
|
Пример: функция – sin2x; значение аргумента – 0.1.
2. Текст программы:
PROGRAM z1;
CONST
k=2; (* поименованная константа *)
VAR
x,y:REAL; (* аргумент и функция *)
BEGIN
х:=0.1;
y:=SIN(k*x);
WRITE(x, y);
END.
3. Схема алгоритма задачи 1
|
|
|
Задача 2
1. Условие: Составить схему алгоритма и написать ВР-программу вычисления значения заданной функции (см. табл. П. 1) для значения аргумента, вводимого с клавиатуры. Значение функции вычисляется и выводится на экран, если значение аргумента принадлежит интервалу числовой оси от 0 до 1. Если введенное значение аргумента находится вне этого интервала, то программа должна выдать на экран соответствующее сообщение.
Пример: функция – sin2x.
2 . Текст программы:
PROGRAM z2;
CONST
k=2; (* поименованная константа *)
VAR
x,y:REAL; (* аргумент и функция *)
BEGIN
WRITE(‘Введите значение аргумента — ’);
READ(x);
IF (x>=0) AND (х<=1) THEN
BEGIN
y:=SIN(k*x);
WRITELN(‘x=’,x, ‘y=’,y);
END
ELSE
WRITELN(‘Значение аргумента вышло за интервал 0-1’);
END.
3. Схема алгоритма задачи 2
|
|
|
|
|
|
Задача 3
1. Условие: Составить схему алгоритма и написать ВР-программу вычисления и вывода на экран дисплея таблицы значений заданной функции (см. табл. П. 1) при изменении значения аргумента в интервале от 0 до 1 с шагом 0.1.
Пример: функция – sin2x.
Вид таблицы:
x | y | } заголовок |
0.0 | 0.541 | таблица |
0.1 | 0.123 | |
· · · | ||
1.0 | 0.789 | } окончание |
2. Тексты программ:
PROGRAM z31;
(* 1-й способ с оператором цикла FOR *)
CONST
k=2; (* поименованная константа *)
str=‘*************************************’;
(* строка символов *)
VAR
x,y:REAL; (* аргумент и функция *)
i:INTEGER; (* переменная цикла *)
BEGIN
WRITELN(str);
WRITELN(‘* x * у *’);
WRITELN(str);
х:=0.0;
FOR i:=1 TO 11 DO
BEGIN
y:=SIN(k*x);
WRITELN (‘*’, x:17:8,‘*’, y:18:8,‘*’);
x:=x+0.1;
END;
WRITELN (str);
END.
3а) Схема алгоритма задачи 3 (1-й способ (цикл FOR))
|
|
|
|
|
|
|
PROGRAM z32;
(* 2-й способ с оператором цикла WHILE *)
CONST
k=2; (* поименованная константа *)
str=‘*************************************’;
(* строка символов *)
VAR
x,y:REAL; (* аргумент и функция *)
BEGIN
WRITELN(str);
WRITELN(‘* x * у *’);
WRITELN(str);
х:=0.0;
WHILE х<1.1 DO
BEGIN
y:=SIN(k*x);
WRITELN(‘*’, x:17:8, ‘*’, y:18:8, ‘*’);
x:=x+0.1;
END;
WRITELN(str);
END.
3б) Схема алгоритма задачи 3 (2-й способ (цикл WHILE))
|
|
|
|
|
PROGRAM z33;
(* 3-й способ с оператором цикла REPEAT *)
CONST
k=2; (* поименованная константа*)
str=‘*************************************’;
(* строка символов *)
VAR
x,y:REAL; (* аргумент и функция *)
BEGIN
WRITELN(str);
WRITELN(‘* x * у *’);
WRITELN(str);
х:=0.0;
REPEAT
y:=SIN(k*x);
WRITELN(‘*’, x:17:8, ‘*’, y:18:8, ‘*’);
x:=x+0.1;
UNTIL x>l.l;
WRITELN(str);
END.
3в) Схема алгоритма задачи 3 (3-й способ (цикл REPEAT))
|
|
|
|
|
|
|
Задача 4
1. Условие: Составить схему алгоритма и написать ВР-программу вычисления суммы бесконечного ряда для заданного значения переменной и формулы общего члена ряда (см. табл. П. 1). Предусмотреть завершение суммирования и печать результата при достижении очередным членом ряда абсолютной величины, меньшей, чем 0.0001.
Пример: значение переменной – 0.1;
Формула общего члена ряда
2. Тексты программ:
PROGRAM z41; (* 1-й способ с оператором перехода GOTO *)
CONST
k=2; (* поименованная константа *)
LABEL 1; (* метка *)
VAR
x,s,a:REAL; (* переменная, сумма, элемент суммы *)
i,j,znak,fakt:INTEGER; (* номер элемента суммы, переменная цикла, знак, факториал *)
BEGIN
s:=0.0;
i:=0;
znak:=1;
x:=0.1;
1: i:=i+1;
znak:=znak*(-1);
fakt:=1;
FOR j:=1 TO (k*i+1) DO fakt:=fakt*j;
a:=znak*EXP((k*i+1)*LN(k*x))/fakt;
s:=s+a;
IF ABS(a)>0.0001 THEN GOTO 1;
WRITE(‘При a= ’,a:9:7, ‘сумма= ’,s:9:7);
WRITELN(‘на’ 4:2,‘-ой итерации’);
END.
3а) Схема алгоритма задачи 4 (1-й способ (опера-торы IF и GOTO))
|
|
|
PROGRAM z42;
(* 2-й способ с оператором цикла WHILE *)
CONST
k=2; (* поименованная константа *)
VAR
x,s,a:REAL; (* переменная, сумма, элемент суммы *)
i,j,znak,fakt:INTEGER; (* номер элемента суммы,
переменная цикла, знак, факториал *)
BEGIN
s:=0.0;
i:=0;
znak:=1;
x:=0.1;
a:=1;
WHILE ABS(a)>0.0001 DO
BEGIN
i=i+1;
znak:=znak*(-1);
fakt:=1;
FOR j:=1 TO (k*i+1) DO
fakt:=fakt*i;
a:=znak*EXP((k*i+1)*LN(k*x))/fakt;
s:=s+a;
END;
WRITE(‘При a= ’,a:9:7, ‘сумма= ’,s:9:7);
WRITELN(‘на ’i:2,‘-ой итерации’);
END.
3б) Схема алгоритма задачи 4 (2-й способ (цикл WHILE))
|
|
|
PROGRAM z43;
(* 3-й способ с оператором цикла REPEAT *)
CONST
k=2; (* поименованная константа *)
VAR
x,s,a:REAL; (* переменная, сумма, элемент суммы *)
i,j,znak,fakt:INTEGER; (* номер элемента суммы, переменная цикла, знак, факториал *)
BEGIN
s:=0.0;
i:=0;
znak:=1;
x:=0.1;
REPEAT
i:=i+1;
znak:=znak*(-1);
fakt:=1;
FOR j:=1 TO (k*i+1) DO
fakt:=fakt*j;
a:=znak*EXP((k*i+1)*LN(k*x)/fakt;
s:=s+a:
UNTIL ABS(a)>0.0001;
WRITE(‘При а= ’,а:9:7, ‘сумма= ’,s:9:7);
WRITELN(‘на ’ i:2,‘-ой итерации’);
END.
3в) Схема алгоритма задачи 4 (3-й способ (цикл REPEAT))
|
|
|
PROGRAM z44; (* 4-й способ с операторами описания и вызова процедур и функций *)
CONST
k=2; (* поименованная константа )
VAR
x,s,a,i:REAL; (* переменная, сумма, элемент суммы,
номер элемента суммы *)
i1:INTEGER; (* целый тип номера элемента суммы *)
FUNCTION fakt(f:INTEGER):INTEGER; (* функция факториал *)
VAR fak,j:INTEGER; (* локальные переменные *)
BEGIN
fak:=1;
FOR j:=1 TO f DO
fak:=fak*j;
fakt:=fak;
END;
PROCEDURE summa(VAR,s:REAL; b:REAL); (* процедура суммы *)
BEGIN
s:=s+b;
END;
FUNCTION stepen(osn:REAL;step:INTEGER):RЕАL; (* функция степени *)
VAR k:INTEGER; (* локальные*)
st:REAL; (* переменные *)
BEGIN
st:=1.0;
FOR k:=1 TO step DO
st:=st*osn;
stepen:=st;
END;
BEGIN
s:=0.0;
i:=0;
x:=0.1;
REPEAT
summa(i,1.0);
i1:=TRUNC(i);
a:=stepen(-1.0,i1)* stepen(k*x,k*i1+1)/fakt(k*i1+1);
summa(s,a);
UNTIL ABS(a)<0.0001;
WRITE(‘При a= ’,a:9:7, ‘сумма= ’,s:9:7);
WRITELN(‘на ’,i1:2,‘-ой итерации’);
END.
3г) Схема алгоритма задачи 4 (4-й способ (FUNCTION и PROCEDURE))
|
|
|
|
|
|
|
|
Функция FAKT
|
|
|
|
Процедура SUMMA
|
|
Функция STEPEN
|
|
|
|
Задача 5
1. Условие: Составить схему алгоритма и написать ВР-программу обработки одномерного массива целых чисел (вид обработки см. в табл. П. 2). Результат вывести на экран дисплея.
Пример: вид обработки заключается в подсчете количества положительных элементов массива.
2. Текст программы:
PROGRAM z5;
VAR mas:ARRAY[1..10] OF INTEGER; (* массив *)
i,kol:INTEGER; (* переменная цикла, количество *)
BEGIN
WRITELN(‘Введите значения элементов массива’);
FOR i=1 TO 10 DO
READ(mas[i]);
kol:=0;
FOR i:=1 TO 10 DO
IF mas[i]>0 THEN kol:=kol+1;
IF kol>0 THEN
WRITELN(‘Кол-во положительных элементов в массиве =’,kol:2)
ELSE
WRITELN(‘Положительных элементов в массиве нет’)
END.
3. Схема алгоритма задачи 5
|
|
|
|
Задача 6
1. Условие: Составить схему алгоритма и написать ВР-программу обработки двухмерного массива целых чисел (вид обработки см. в табл. П. 2). Результат вывести на экран дисплея.
Пример: вид обработки заключается в определении той диагонали квадратной матрицы (главной или обратной), которая имеет большую сумму элементов.
Текст программы:
PROGRAM z6;
VAR mas:ARRAY[1..3,1..3] OF INTEGER; (* массив *)
i,j,s1,s2:INTEGER; (* 2 индекса циклов, 2 суммы *)
BEGIN
WRITELN(‘Введите значения элементов массива’);
FOR i:=1 TO 3 DO
FOR j:=1 TO 3 DO
READ(mas[i,j]);
s1:=0;
s2:=0;
FOR i:=1 TO 3 DO
BEGIN
j:=3-(i-1);
sl:=s1+mas[i,i];
s2:=s2+mas[i,j];
END;
IF s1>s2 THEN
WRITELN(‘Сумма элементов главной диагонали’)
ELSE
IF s2>s1 THEN
WRITELN(‘Сумма элементов обратной диагонали’)
ELSE
WRITELN(‘Суммы элементов диагоналей равны’);
END.
3. Схема алгоритма задачи 6
|
|
|
Задача 7
1. Условие: Составить схему алгоритма и написать ВР-программу обработки массива записей (вид обработки см. в табл. П. 3), каждая из которых содержит информацию об одном студенте. Расположение информации в каждой записи следующее:
– фамилия студента;
– год рождения;
– оценка сдачи 1-го экзамена;
– оценка сдачи 2-го экзамена;
– оценка сдачи 3-го экзамена;
– количество часов пропущенных занятий.
Результат вывести на экран.
Пример: вид обработки заключается в определении списка студентов, получивших в сумме по трем экзаменам 14 баллов.
Текст программы:
PROGRAM z7;
TYPE st=RECORD (* запись*)
fam:STRING; (* фамилия *)
godr:INTEGER; (* год рождения *)
otm:ARRAY[1..3] OF INTEGER; (* массив отметок *)
prop:INTEGER; (* кол-во пропусков *)
END;
VAR gr:ARRAY[1..5] OF st; (* массив записей *)
i,j,ind: INTEGER; (* 2 индекса циклов,индикатор *)
BEGIN
WRITELN(‘Введите информацию о студентах’);
FOR i:=1 TO 5 DO
BEGIN
READ(gr[i].fam);
READ(gr[i].godr);
FOR j:=1 TO 3 DO READ(gr[i].otm[j]);
READLN(gr[i].prop);
END;
ind:=0;
FOR i:=1 TO 5 DO
IF (gr[i].otm[1]+gr[i].otm[2]+gr[i].otm[3])=14 THEN
BEGIN
IF md=0 THEN
BEGIN
WRITELN(‘Список студентов, получивших’);
WRITELN(‘14 баллов в сессию’);
END;
WRITELN(gr[i].fam);
ind:=1;
END;
IF ind=0 THEN
WRITELN(‘Студентов, получивших 14 баллов в сессию нет’);
END.
3. Схема алгоритма задачи 7
|
|
|
|
|
|
|
Задача 8
1. Условие: Составить схему алгоритма и написать ВР-программу, которая:
– вводит с клавиатуры последовательность целых чисел;
– размещает их в файле;
– считывает их из файла в одномерный массив и обрабатывает его (вид обработки см. в табл. П. 2).
Результат вывести на экран дисплея.
Пример: вид обработки заключается в подсчете количества положительных элементов массива.
Текст программы:
PROGRAM z8;
VAR mas:ARRAY[1..10] OF INTEGER; (* массив *)
i,kol,buf:INTEGER; (* индекс цикла, количество, буфер *)
f:TEXT; (* файл *)
BEGIN
ASSIGN(f,‘f.txt’);
REWRITE(f);
WRITELN(‘Введите значения элементов массива’);
FOR i:=1 TO 10 DO
BEGIN
READ(buf);
WRITELN(f,buf);
END;
RESET(f);
kol:=0;
FOR i:=1 TO 10 DO
BEGIN
READLN(f,mas[i]);
IF mas[i]>0 THEN kol:=kol+1;
END;
CLOSE(f);
IF kol>0 THEN
WRITELN(‘Кол-во положительных эл-ов в массиве =’,kol:2)
ELSE
WRITELN(‘Положительных элементов в массиве нет’)
END.
3. Схема алгоритма задачи 8
|
|
|
|
|
|
|
|
|
Приложения
Основные символы схем алгоритмов
Выполнение схем алгоритмов регламентируется ГОСТ 19.008-80 «ЕСПД. Схемы алгоритмов и программ. Правила выполнения».
Для изображения схем алгоритмов используются следующие графические символы:
процесс – выполнение операций или группы операций, в результате которых изменяются значения, форма представ-ления или расположение данных; | |
решение – выбор дальнейшего направ-ления выполнения алгоритма в зависимости от заранее определенных условий; | |
модификация – выполнение операций, меняющих команду или группу команд, изменяющих программу; | |
предопределенный процесс – ис-пользование ранее созданных и отдельно описанных алгоритмов; | |
ввод-вывод – преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод); | |
пуск-останов – начало, конец, пре-рывание процесса обработки данных |
Таблица П. 1
№ п/п | Значение переменной | Заданное выражение | Формула общего члена ряда |
1 | 0.9 | exp(х) | |
2 | 0.6 | cos(x) | |
3 | 0.5 | ||
4 | 0.2 | ||
5 | 0.2 | ||
6 | 0.4 | ||
7 | 0.7 | ||
8 | 0.4 | ||
9 | 0.4 | ||
10 | 0.6 | ||
11 | 0.3 | ||
12 | 0.2 |
Таблица П. 2
№ п/п | Результат обработки |
1 | Сумма всех положительных элементов массива |
2 | Количество элементов массива, больших 50 |
3 | Среднее арифметическое значение всех отрицательных элементов массива |
4 | Сумма положительных элементов массива, имеющих нечетные номера |
5 | Количество элементов массива, значения которых делятся нацело на 2 |
6 | Элементы массива, значения которых больше 50 |
7 | Сумма всех отрицательных элементов массива, имеющих четные номера |
8 | Количество элементов массива, имеющих нечетные значения |
9 | Количество элементов массива, значения которых лежат в диапазоне от 25 до 75 |
10 | Сумма элементов массива, значения которых по модулю меньше 25 |
11 | Элементы массива, имеющие четные значения |
12 | Количество элементов массива, значения которых кратны 10 |
Таблица П. 3
№ п/п | Результат обработки |
1 | Фамилия самого старшего студента |
2 | Список отличников |
3 | Список студентов, не имеющих пропусков занятий |
4 | Список хорошистов |
5 | Список двоечников |
6 | Фамилия студента, имеющего наибольшее количество пропусков занятий |
7 | Список студентов, которым в этом году исполняется 20 лет |
8 | Средний бал сдачи студентами первого экзамена |
9 | Средний бал сдачи студентами сессии |
10 | Список студентов, получивших тройки по третьему экзамену |
11 | Средний возраст студентов группы |
12 | Список однофамильцев, при условии, что фамилия-эталон вводится с экрана дисплея |
Дата добавления: 2020-12-12; просмотров: 78; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!