МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ПРАКТИЧЕСКИМ ЗАНЯТИЯМ
Методические указания к практическим занятиям содержат примеры решения восьми типовых задач. Решение состоит в построении по индивидуальному заданию (условию задачи) схемы алгоритма и написании текста программы на языке 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). Результат вывести на экран дисплея.
Пример: вид обработки заключается в определении той диагонали квадратной матрицы (главной или обратной), которая имеет большую сумму элементов.
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 баллов.
2. Текст программы:
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).
Результат вывести на экран дисплея.
Пример: вид обработки заключается в подсчете количества положительных элементов массива.
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
№ п/п | Значение переменной | Заданное выражение | Формула общего члена ряда |
0.9 | exp(х) | ||
0.6 | cos(x) | ||
0.5 | |||
0.2 | |||
0.2 | |||
0.4 | |||
0.7 | |||
0.4 | |||
0.4 | |||
0.6 | |||
0.3 | |||
0.2 |
Таблица П. 2
№ п/п | Результат обработки |
Сумма всех положительных элементов массива | |
Количество элементов массива, больших 50 | |
Среднее арифметическое значение всех отрицательных элементов массива | |
Сумма положительных элементов массива, имеющих нечетные номера | |
Количество элементов массива, значения которых делятся нацело на 2 | |
Элементы массива, значения которых больше 50 | |
Сумма всех отрицательных элементов массива, имеющих четные номера | |
Количество элементов массива, имеющих нечетные значения | |
Количество элементов массива, значения которых лежат в диапазоне от 25 до 75 | |
Сумма элементов массива, значения которых по модулю меньше 25 | |
Элементы массива, имеющие четные значения | |
Количество элементов массива, значения которых кратны 10 |
Таблица П. 3
№ п/п | Результат обработки |
Фамилия самого старшего студента | |
Список отличников | |
Список студентов, не имеющих пропусков занятий | |
Список хорошистов | |
Список двоечников | |
Фамилия студента, имеющего наибольшее количество пропусков занятий | |
Список студентов, которым в этом году исполняется 20 лет | |
Средний бал сдачи студентами первого экзамена | |
Средний бал сдачи студентами сессии | |
Список студентов, получивших тройки по третьему экзамену | |
Средний возраст студентов группы | |
Список однофамильцев, при условии, что фамилия-эталон вводится с экрана дисплея |