Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_пособие_Прг+КР.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
913.41 Кб
Скачать

Программирование основных алгоритмических структур на языке 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. При небольших показателях степени задача возведения в степень решается умножением. Например: х32∙х. При дробных и больших значениях показателя степени вычисление производится по формуле: Ах = ех∙ln(А) или (exp(x*lm(a)).

Пример выполнения задания 2.

Вычислить на ПЭВМ значения функции:

где k=1.2, a=2, b=4, x0…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. Используя оператор fotodo , вычислить на ПК значения функции , при х=0,5.

Параметром цикла является аргумент n.

При вычислении конечных сумм и произведений искомый результат формируется постепенно. При вычислении суммы сначала вычисляется S1 = S0 + S(n1), во втором повторе цикла эта сумма увеличивается на второе слагаемое и получается S2 = S1 + S(n2), в третьем повторе - на третье слагаемое S3 = S2 + S(n3) и т.д. Здесь S0 - начальное значение суммы и т.к. S1 должна быть равна S(n1) , то S0 = 0.

При вычислении произведения сначала вычисляется Р10P(n1), затем Р2 = Р1P(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. Используя операторы whiledo и repeatuntil, вычислить значения функции

, в диапазоне изменения x от 0 до 3 с шагом 0.5.

При решении данной задачи можно использовать алгоритмы циклической структуры "до" и "пока". Параметром данного цикла является х, причем при каждом повторном вычислении его значение следует увеличивать на величину шага.

Объявим переменную х в разделе объявлений вещественного типа и зададим в программе ей начальное значение равное 0. В процессе вычислений значение переменной будет изменяться с заданным шагом 0,5.

Для вычисления y при х1 будем использовать алгоритмическую структуру "цикл-до", а при вычислении функции в диапазоне 1<x3 – "цикл-пока".

Блок-схема одного из вариантов алгоритма решения задачи приведена на рис.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. Рецензия (стиль Заголовок 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)

  1. Вставка оглавления:

  • установить курсор в место вставки оглавления в начало новой страницы, но после заголовка «Оглавление»;

  • активизировать команду Вставка\Ссылка\Оглавление и указатели;

  • в диалоговом окне Оглавление и указатели открыть вкладку Оглавление;

  • в поле Форматы выбрать один из готовых стилей (например, Классический или любой другой понравившийся);

  • наличие флажка Показать номера страниц позволяет для каждого элемента списка отображать номера страниц;

  • установка флажка Номера страниц по правому краю даёт возможность выровнять номера страниц по правому полю;

  • в поле Уровни задать количество уровней для оглавления (в примере два);

  • нажать кнопку ОК.