Тексты программ на Паскале

ОТЧЕТ

О лабораторной работе № 2

Вариант 101

«Алгоритмы циклической структуры»

 

по дисциплине «Информатика»

 

 

 
 
И.И. Иванов


Выполнил ст. _______________________ _____________________

гр. МТ-10-01 подпись, дата инициалы, фамилия

 

Уфа 2011

 

 

Лабораторная работа №2

“Программирование циклических вычислительных процессов

Постановка задачи

 

Разработать программу табулирования (вычисления таблицы значений) функции для произвольного диапазона изменения независимого параметра или аргумента. Выполнить расчет для заданных значений исходных данных.

Результаты расчетов вывести в табличной форме.

; ; ; .

Анализ задачи

 

Задача состоит в многократном вычислении значений аргумента x и функции y при изменении параметра от начального значения н =0,5 до конечного значения к =2,5 с шагом = 0,5. Исходных данных для расчета достаточно.

Результаты расчёта удобно представить в виде таблицы. Число строк в таблице N можно вычислить заранее по формуле:

N = Целое((к - н)/) + 1,

причём при выделении целого дробную часть числа следует отбросить.

Подготовим тестовый пример для последующей проверки правильности созданной программы (для контрольного расчёта).

Правильность программирования расчётных формул можно проверить по одному значению параметра , а его изменение можно проконтролировать по результатам работы программы.

Для упрощения ручного расчёта возьмем = 2.

Тогда ,

1,250

Алгоритмы решения задачи

 

Многократно повторяющиеся действия описываются циклическим алгоритмом. Алгоритм решения задачи можно описать в виде цикла с параметрами(схема Work_2a), а также в виде цикла с предусловием “Пока” (Work_2b) и цикла с постусловием“До” (Work_2c).

При организации арифметического цикла число повторений N вычис­ляет­ся, а параметром цикла служит вспомогательная переменная i – счетчик цикла.

 

 


5. Таблица переменных для алгоритма Work_2a

 

Смысл переменных Обозначение Тип переменной
в алгор. в прогр.
Исходные данные: Начальное значение параметра Конечное значение параметра Шаг изменения параметра   н к   an ak da   веществ. веществ. веществ.
Промежуточные данные: *Количество строк *Номер строки Аргумент   n i x   n i x   целый целый веществ.
Результаты Функция   y   y   веществ.

Примечания: в таблицах переменных алгоритмов Work_2b и Work_2c переменные, помеченные в таблице *.

Интерфейс программы

 

Ввод исходных данных запланируем в форме диалога: данные нужно будет вводить с клавиатуры после появлении соответствующего запроса на экране монитора после запуска программы.

Спланируем вид таблицы с результатами расчёта для алгоритма Work_2a: её заголовок, шапку, тело в следующем виде

Результаты табулирования функции

*************************************

* i * a * x * y *

*************************************

* 00 * 0.00 * 0.000 * 00.00000 *

* 00 * 0.00 * 0.000 * 00.00000 *

* 00 * 0.00 * 0.000 * 00.00000 *

*************************************

Примечания: в таблицах результатов расчёта алгоритмов Work_2b и Work_2c исключим столбец номера строки i , так как эта переменная в них не используется.

Тексты программ на Паскале

Программа решения задачи с использованием оператора арифметического цикла.

 

Program Work_2a;

{Работа №2, вариант 101, Балина А.Р., ПО-00-01}

{Решение задачи с использованием оператора

арифметического цикла}

 

Var i,n : Integer;

an,ak,da,a,x,y:Real;

Begin

Writeln('Введите значения an,ak,da => ');

Readln(an,ak,da);

n:=TRUNC(((ak-an)/da)+1.0);

Writeln(' Результаты табулирования функции');

Writeln('*************************************');

Writeln('* i * a * x * y *');

Writeln('*************************************');

For i:=1 TO N DO

Begin

a:=an+da*(i-1);

x:=ln(PI/(0.5*a))/ln(10);

y:=sqrt(3*exp(1.1*ln(x))+sqr(cos(a)));

Writeln('*',i:3,' *',a:6:2,' *',x:7:4,

' *',y:9:5,' *');

end;

Writeln('*************************************');

End.

 

Результаты расчёта по программе Work_2a.pas

 

 

Результаты табулирования функции

*************************************

* i * a * x * y *

*************************************

* 1 * 0.50 * 1.0992 * 2.02463 *

* 2 * 1.00 * 0.7982 * 1.62268 *

* 3 * 1.50 * 0.6221 * 1.33595 *

* 4 * 2.00 * 0.4971 * 1.25058 *

* 5 * 2.50 * 0.4002 * 1.31814 *

*************************************

 

Программа решения задачи с использованием оператора цикла “ПОКА”. Текст программы можно получить из предыдущего варианта путём внесения необходимых изменений: исключения переменных i и n из раздела описаний, не требуется расчёт n, нужно заменить оператор цикла, убрать в таблице колонку номера строки.

 

Program Work_2b;

{Работа №2, вариант 101, Балина А.Р., ПО-00-01}

{Решение задачи с использованием оператора цикла ПОКА}

Var an,ak,da,a,x,y:Real;

Begin

Writeln('Введите значения an,ak,da => ');

Readln(an,ak,da);

Writeln(' Результаты табулирования функции');

Writeln(' ********************************');

Writeln(' * a * x * y *');

Writeln(' ********************************');

 

a:=an;

While a<=ak do

Begin

x:=ln(PI/(0.5*a))/ln(10);

y:=sqrt(3*exp(1.1*ln(x))+sqr(cos(a)));

Writeln(' *',a:7:2,' *',x:7:4,' *',y:9:5,' *');

a:=a+da;

end;

Writeln(' ********************************');

End.

 

Результаты расчёта по программе Work_2b.pas

 

Результаты табулирования функции

********************************

* a * x * y *

********************************

* 0.50 * 1.0992 * 2.02463 *

* 1.00 * 0.7982 * 1.62268 *

* 1.50 * 0.6221 * 1.33595 *

* 2.00 * 0.4971 * 1.25058 *

* 2.50 * 0.4002 * 1.31814 *

********************************

 

Программа решения задачи с использованием оператора цикла “ДО”. Для получения текста программы нужно в предыдущий вариант внести незначительные изменения.

 

Program Work_2c;

{Работа №2, вариант 101, Балина А.Р., ПО-00-01}

{Решение задачи с использованием оператора цикла ДО}

Var an,ak,da,a,x,y:Real;

Begin

Writeln('Введите значения an,ak,da => ');

Readln(an,ak,da);

Writeln(' Результаты табулирования функции');

Writeln(' ********************************');

Writeln(' * a * x * y *');

Writeln(‘******************************');

a:=an;

Repeat

x:=ln(PI/(0.5*a))/ln(10);

y:=sqrt(3*exp(1.1*ln(x))+sqr(cos(a)));

Writeln(' *',a:7:2,' *',x:7:4,' *',y:9:5,' *');

a:=a+da;

Until a>ak;

Writeln(' ********************************');

End.

 

Результаты расчёта по программе Work_2c.pas.

 

Результаты табулирования функции

********************************

* a * x * y *

******************************

* 0.50 * 1.0992 * 2.02463 *

* 1.00 * 0.7982 * 1.62268 *

* 1.50 * 0.6221 * 1.33595 *

* 2.00 * 0.4971 * 1.25058 *

* 2.50 * 0.4002 * 1.31814 *

********************************


Выводы:

· Значения x и y в таблице при = 2 совпали с точностью до трёх знаков со значениями ручного тестового расчёта, следовательно, расчётные формулы записаны правильно.

  • Результаты табулирования функции по трём вариантам решения задачи полностью совпадают.