Основные символы схем алгоритмов




МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ПРАКТИЧЕСКИМ ЗАНЯТИЯМ

 

 

 

Методические указания к практическим занятиям содержат при­меры решения восьми типовых задач. Решение состоит в построении по индивидуальному заданию (условию задачи) схемы алгоритма и написании текста программы на языке 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

 

X – аргумент Y – зн. функции K – коэффициент
Вывод результата
Объявление переменных

 

 

Задача 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

Ввод значения
Вывод результата
X – аргумент S – сумма K – коэффициент
Объявление переменных


Задача 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) )

 

 

Печать заголовка
Печать окончания
Печать строки
X – имя аргумента Y – имя функции K – коэффициент I – счетчик циклов
Объявление переменных

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))

Печать окончания
Печать заголовка
Объявление переменных
Печать строки
X – имя аргумента Y – имя функции K – коэффициент

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))

Печать окончания
Печать строки
Печать заголовка
Объявление переменных
X – имя аргумента Y – имя функции K – коэффициент

Задача 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))

 

Вывод результата
X – аргумент S – сумма а – член ряда znak – знак члена ряда i – номер итерации j – счётчик циклов K – коэффициент FAKT – факториал
Объявление переменных

 

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))

 

Вывод результата
Объявление переменных
X – аргумент S – сумма а – член ряда znak – знак члена ряда i – номер итерации j – счётчик циклов K – коэффициент FAKT – факториал

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))

 

Вывод результата
Объявление переменных
X – аргумент S – сумма а – член ряда znak – знак члена ряда i – номер итерации j – счётчик циклов K – коэффициент FAKT – факториал

 

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

 

Присвоение значения функции
Объявление переменных
Передача значения параметру
F – формальный параметр j – счётчик циклов FAK – промежуточная переменная

 

 

Процедура SUMMA

 

S, B – формальные параметры
Передача значений параметрам

 

Функция STEPEN

 

Присвоение значения функции
Объявление переменных
Передача значений параметрам
OSN, STEP – формальные параметры K – счётчик циклов ST – промежуточная переменная

 


Задача 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

 

Вывод результатов
Заполнение массива
Объявление переменных
mas – массив чисел i – индекс массива KOL – количество положительных чисел

 

 

Задача 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

 

Заполнение массива
Объявление переменных
mas – массив чисел i, j – индексы массива S1, S2 – сумма элементов главной и обратной диагоналей

 

Задача 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

 

? (GR(i).OTM(1)+GR(i).OTM(2)+ +(GR(i).OTM(3))=14
Ввод количества пропусков занятий
Объявление переменных
ST – запись GR – массив записей i – индекс массива записей j – индекс массива оценок ind – индикатор наличия
Ввод оценки
Ввод фамилии
Ввод года рождения

Задача 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

Вывод результатов
Закрытие файла
Считывание из файла
Настройка на считывание из файла
Настройка на запись в файл
Открытие файла
Объявление переменных
mas – массив чисел i – индекс массива KOL – количество положи-тельных чисел в массиве BUF – буферная переменная F – имя файла
Запись в файл

Приложения

 

 

Основные символы схем алгоритмов

Выполнение схем алгоритмов регламентируется ГОСТ 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 лет
  Средний бал сдачи студентами первого экзамена
  Средний бал сдачи студентами сессии
  Список студентов, получивших тройки по третьему экзамену
  Средний возраст студентов группы
  Список однофамильцев, при условии, что фамилия-эталон вводится с экрана дисплея



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: