
- •Введение
- •Рекомендуемая литература
- •1. Алгоритмизация и основные этапы работы на эвм
- •1.1. Основные этапы подготовки решения задач на эвм
- •1.2. Алгоритмы и способы их описания.
- •1.3. Базовые алгоритмические структуры.
- •2. Основы программирования
- •2.1. Машинный код процессора
- •2.2. Классификация языков программирования
- •3. Интегрированная среда разработки (иср) Lazarus
- •3.1 Основные характеристики
- •3.2. Консольное приложение
- •3.3. Характеристика проекта консольного приложения
- •4. Алфавит языка Free Pascal
- •4.1. Типы данных
- •4.2. Выражения
- •4.3. Основные стандартные функции
- •4.4. Процедуры ввода и вывода
- •4.5. Операторы
- •4.6. Массивы.
- •4.7. Подпрограммы.
- •4.8. Модули.
- •5. Контрольная работа «Программирование основных алгоритмических структур на языке Free Pascal»
- •5.1. Задания контрольной работы
- •5.2. Требования по оформлению пояснительной записки
- •Министерство рф по связи и информатизации Поволжский государственный университет телекоммуникаций и информатики
- •Программирование основных алгоритмических структур на языке Free Pascal
- •5.3. Методические указания по выполнению заданий
- •6. Перечень контрольных вопросов
Программирование основных алгоритмических структур на языке Free Pascal
Пояснительная записка
на ____листах
Студент(ка) группы (роспись) Фамилия И. О.
№ зач. кн. _________
Руководитель Фамилия И. О.
Самара
200_ г.
Рис. 10. Образец оформления титульного листа
5.3. Методические указания по выполнению заданий
Пример выполнения задачи 1. Вычислить значение переменных y и p, используя значения входных данных и расчетные формулы:
,
где а = 0.59, z = -4.8, x = 2.1
Прежде всего, обратим внимание на то, что функции tg(x) в языке Free Pascal отсутствует. Значит, следует заменить её отношением sin(x)/cos(x).
У
читывая,
что операцию возведения в куб придётся
заменить операцией умножения, обозначим
это отношение через «t»
и вычислять его будем индивидуально.
Опишем ее как переменную. Величины a,
z,
x
можно описать в программе как константы,
так как их значения заранее определены
условием задачи. Если же описать их как
переменные, то нужные значения указываются
при вводе.
Теперь составим блок-схему алгоритма (рис. 11) и напишем программу.
program Zadacha1;
{$mode objfpc}{$H+}
uses
Classes, SysUtils
{ you can add units after this };
const
a=0.59; z=-4.8; x=2.1;
var t, y, p: real;
begin
writeln('a=', a:6:2, ' x=', x:6:2, ' z=',z:6:2);
t:= sin(x*x)/cos(x*x);
y:= a*t*sqr(t) + sqrt(z*z/(a*a + x*x));
p:= ln(a+x*x)+sqr(sin(z/a));
writeln('Result');
writeln; //вывод результата
writeln('y=', y:8:3,' p=', p:8:3);
readln //эта процедура без списка
//аргументов оставляет открытым окно для считывания результата
end.
Результаты выполнения задачи1:
a= 0.59 x= 2.10 z= -4.80
Result
y= 21.635 p= 2.532
Замечания.
1. В программе предусмотрен форматный вывод вещественных переменных y и p, который устанавливает при выводе на печать 8 символов, 3 из которых отведены для дробной части.
2. При небольших показателях степени задача возведения в степень решается умножением. Например: х3=х2∙х. При дробных и больших значениях показателя степени вычисление производится по формуле: Ах = ех∙ln(А) или (exp(x*lm(a)).
Пример выполнения задания 2.
Вычислить на ПЭВМ значения функции:
где
k=1.2, a=2, b=4, x0…6
Обратим внимание, что функция y не определена в диапазоне a < x < b {(x > a) and (x < b)}. В этой ситуации программа должна обеспечить вывод соответствующего сообщения, например "функция не определена". Таким образом, фактически имеем три диапазона изменения x:
функция
sin(x) не определена k·ln(x)
0 2 4 6 x
Примем диапазон изменения x от 0 до 6, что позволит протестировать программу по всем трем условиям. Поскольку в задаче три условия, число блоков «решение» в алгоритме должно быть два (на единицу меньше). Блок-схема одного из вариантов алгоритма решения задачи и соответствующая программа будут иметь вид:
program
Zadacha2; {$mode
objfpc}{$H+} uses Classes,
SysUtils {
you can add units after this }; label
out; var
x, y: real; const
k=1.2; a=2; b=4; begin writeln('vvedite
x'); readln(x); if
(x<=2) and
(x>=0) then
y:=sin(x)
else
if
(x>=4) and(x<=6)
then
y:=k*ln(x)
else
begin
writeln('function NO');
goto
out;
end;
writeln('y=',y:8:3);
//вывод
результата
out:
readln
end.
Рис. 12. Блок-схема алгоритма задачи 2
Результаты работы программы:
vvedite x 1 y=
0.841
vvedite x 3 function
NO
vvedite x 5 y=
1.931
Пример выполнения
задания 3.
Используя оператор fo…
to…do
, вычислить на ПК значения функции
,
при х=0,5.
Параметром цикла является аргумент n.
При вычислении конечных сумм и произведений искомый результат формируется постепенно. При вычислении суммы сначала вычисляется S1 = S0 + S(n1), во втором повторе цикла эта сумма увеличивается на второе слагаемое и получается S2 = S1 + S(n2), в третьем повторе - на третье слагаемое S3 = S2 + S(n3) и т.д. Здесь S0 - начальное значение суммы и т.к. S1 должна быть равна S(n1) , то S0 = 0.
При вычислении произведения сначала вычисляется Р1=Р0P(n1), затем Р2 = Р1P(n2) и т.д. Здесь Р0 - начальное значение произведения и т.к. Р1 должно быть равно P(n1) , то Р0 = 1.
Поскольку 5х2 можно вынести за знак суммы, в тело цикла это произведение включать не следует. Тем самым сокращается время исполнения программы.
Блок-схема алгоритма решения задачи и соответствующая программа будут иметь вид (рис. 13):
program
Zadacha3; {$mode
objfpc}{$H+} uses
Classes, SysUtils;
var
x, t: real; n: byte; begin
writeln ('vvedite x');
readln (x);
t:=0;
//обнуление суммы
for
n:=1
to
10 do
t:=t+
1/n;
t:=5*
sqr(x)*t;
writeln
('t=',
t:6:2);
//вывод результата
readln end.
.
Результаты работы программы:
vvedite
x
0.5
t=
3.66
Рис. 13. Блок схема алгоритма задания 3.
Пример выполнения задания 4. Используя операторы while…do и repeat… until, вычислить значения функции
,
в диапазоне
изменения x
от 0 до 3 с шагом 0.5.
При решении данной задачи можно использовать алгоритмы циклической структуры "до" и "пока". Параметром данного цикла является х, причем при каждом повторном вычислении его значение следует увеличивать на величину шага.
Объявим переменную х в разделе объявлений вещественного типа и зададим в программе ей начальное значение равное 0. В процессе вычислений значение переменной будет изменяться с заданным шагом 0,5.
Для вычисления y при х1 будем использовать алгоритмическую структуру "цикл-до", а при вычислении функции в диапазоне 1<x3 – "цикл-пока".
Блок-схема одного из вариантов алгоритма решения задачи приведена на рис.14. Как видно, программно алгоритм можно описать с помощью условных операторов. Но мы будем использовать специальные средства языка, реализующие циклические структуры.
С учетом сказанного, программа, соответствующая представленному алгоритму будет иметь вид:
Рис. 14. Блок схема алгоритма задания 4.
program
Zadacha4;
{$mode
objfpc}{$H+} uses
Classes,
SysUtils;
var
y,x:real; begin
x:=0;
writeln('
Tabl ');
writeln('-----------------------');
repeat
y:=cos(x);
writeln('|
x=',x:6:2, ' | y=',y:6:2, ' |');
writeln('-----------------------');
x:=x+0.5;
until
x>1;
while
x<=3 do
begin
y:=sin(x);
writeln('|
x=',x:6:2, ' | y=',y:6:2, ' |');
writeln('-----------------------');
x:=x+0.5;
end;
readln
end.
Результаты работы
программы:
Tabl ----------------------- |
x= 0.00 | y= 1.00 | ----------------------- |
x= 0.50 | y= 0.88 | ----------------------- |
x= 1.00 | y= 0.54 | ----------------------- |
x= 1.50 | y= 1.00 | ----------------------- |
x= 2.00 | y= 0.91 | ----------------------- |
x= 2.50 | y= 0.60 | ----------------------- |
x= 3.00 | y= 0.14 | -----------------------
Пример выполнения задания 5.
В массиве из N 10 элементов вычислить наибольший элемент массива Х и его номер.
Алгоритм поиска максимального (минимального) элемента массива заключается в следующем. Сначала предполагается, что первый элемент массива является максимальным (минимальным). В этом предположении он сравнивается с последующими элементами массива до тех пор, пока очередной из них не окажется больше (меньше). Этот больший (меньший) элемент массива принимается в качестве нового максимального (минимального) элемента, после чего процесс сравнения продолжается.
program
Zadacha5; {$mode
objfpc}{$H+} uses Classes,
SysUtils {
you can add units after this };
const
n=10; var
i, Imax :byte;
Xmax
:
real;
// наибольший
элемент
x
:
array[1..
n]
of
real;
begin for
i :=1
to
n do begin write(
'vvedite
', i, ' element massive x' ); readln(x
[i
]);
//ввод элемента массива Х end;
Xmax
:=
x[1]; //кандидат в Хmax Imax
:=1;
//его
номер
Imax for
i :=2
to
n do
if
x[i] > Xmax then
begin
//поиск
Хmax Xmax:=x[i]; Imax:=i; end; writeln; writeln('Xmax=',
Xmax:6:2, ' Imax=', Imax);
readln
//вывод результата end.
Результаты работы программы:
vvedite
1 element massive x 2 vvedite
2 element massive x -8 vvedite
3 element massive x 6 vvedite
4 element massive x -10 vvedite
5 element massive x 6 vvedite
6 element massive x 4 vvedite
7 element massive x -7 vvedite
8 element massive x 3 vvedite
9 element massive x 5 vvedite
10 element massive x -8
Xmax=
6.00 Imax=3
Рис. 15. Блок схема алгоритма задания 5
Для создания оглавления в пояснительной записке с помощью средств текстового редактора необходимо:
Организовать дополнительную страницу перед описательной частью выполнения заданий с целью размещения на ней будущего оглавления. Для этого:
поместить курсор на место вставки оглавления (перед заголовком Выполнение заданий);
выбрать команду Разрыв… в меню Вставка;
в диалоговом окне Разрыв установить переключатель Новую страницу и нажать кнопку ОК.
Присвоить заголовку название Оглавление.
Аналогично организовать дополнительную страницу для рецензии и присваивается название заголовок Рецензия.
Присвоить стили всем заголовкам, которые должны быть в оглавлении. Например,
1. Рецензия (стиль Заголовок 1)
2. Оглавление (стиль Заголовок 1)
3. Выполнение заданий (стиль Заголовок 1)
3.1. Задание 1 (стиль Заголовок 2)
3.2. Задание 2 (стиль Заголовок 2)
3.3. Задание 3 (стиль Заголовок 2)
3.4. Задание 4 (стиль Заголовок 2)
3.4. Задание 5 (стиль Заголовок 2)
4. Выводы по работе (стиль Заголовок 1)
5. Литература (стиль Заголовок 1)
Вставка оглавления:
установить курсор в место вставки оглавления в начало новой страницы, но после заголовка «Оглавление»;
активизировать команду Вставка\Ссылка\Оглавление и указатели;
в диалоговом окне Оглавление и указатели открыть вкладку Оглавление;
в поле Форматы выбрать один из готовых стилей (например, Классический или любой другой понравившийся);
наличие флажка Показать номера страниц позволяет для каждого элемента списка отображать номера страниц;
установка флажка Номера страниц по правому краю даёт возможность выровнять номера страниц по правому полю;
в поле Уровни задать количество уровней для оглавления (в примере два);
нажать кнопку ОК.