Тригонометрические функции. Стандартные функции и процедуры
Стандартные функции и процедуры. Основные этапы решения задач на ПК. Схемы алгоритмов. Разработка программ. 2 часа.
Цель работы: получение практических навыков разработки схем алгоритмов и выполнения компьютерной программы.
Предмет и содержание работы: разработка и отладка компьютерной программы, содержащей стандартные функции и процедуры. Изучение порядка разработки программ.
Технические средства и программное обеспечение: персональный компьютер с операционной системой Windows™, система Pascal ABC.
В языке Pascal ABC стандартная функция представляет собой имя со списком параметров в виде констант, переменных или выражений. Функция выполняет некоторые вычисления или преобразования и возвращает новое строковое или числовое значение, которое присвоено имени функции. Например, функции Sqrt(9) передается значение 9, а она возвращает число 3, квадратный корень из 9.
В качестве другого примера рассмотрим стандартную функцию Length(s) которая подсчитывает число символов, хранящихся в строковой переменной s. Это число называют длиной строки. Допустим, что имеется строковая переменная с именем FRASA. Строковое значение, хранящееся в переменной FRASA, передается стандартной функции Length(s), которая вычисляет и возвращает длину строки: DL := Length (FRASA)
Здесь числовой переменной DL присваивается значение длины строки, хранящейся в строковой переменной FRASA. Если переменная FRASA имеет, например, значение БЕРЕЧЬ И ПРИУМНОЖАТЬ, тогда переменной DL будет присвоено значение 20 (не следует забывать, что пробелы также являются символами).
Выражение в скобках называется аргументом функции. Данная конкретная функция имеет только один аргумент - строковую переменную FRASA. Вообще функции могут иметь несколько аргументов: строковые или числовые константы, переменные и выражения, включая сами эти функции.
Арифметические и числовые функции
Функция Abs(x) возвращает абсолютное значение числового выражения.
Абсолютное значение х равно его значению без знака. Например, абсолютное значение -3 равно 3; абсолютное значение +3 равно 3.
program N_14_1;
var x:real;
begin
write('Введите x=');
readln(x);
writeln('Абсолютное значение х=', Abs(x):5:2);
end.
Функции Exp(x)
Exp(x) возвращает значение ex, где x - числовое выражение и е - основание натуральных логарифмов, приблизительно 2.718282. С помощью Exp можно вычислить значение е = Exp(1)
program N_14_2;
var
i:integer;
begin
for i:=-1 to 12 do
begin
writeln('EXP от ',I,'=',Exp(I):10:4)
end;
end.
Функция Ln(x)
LN(x) возвращает натуральный логарифм (основание е). Если значение аргумента меньше или равно нулю, то возникает ошибка периода выполнения (Неверная вещественная операция). Натуральный логарифм х - степень, в которую следует возвести е, чтобы получить значение, равное х.
program N_14_3;
var
i:integer;
begin
for i:=1 to 12 do
begin
writeln('Логарифм ',I:2,' = ',Ln(I):5:4)
end;
end.
Функции Int(x) и Round(x)
Int(x) возвращает целую часть х. Round(x) возвращает результат округления х до ближайшего целого.
program N_14_4;
var
i:integer;
а:real;
const
s:array [1..6]of real = (3.1, -3.1, 3.5, -3.5, 3.9, -3.9);
begin
for i:=1 to 6 do
begin
а:=s[i];
writeln('Веществ.= ',а:4:1,' Целое = ',Int(а):4:0,' Округл.= ',Round(а):4)
end;
end.
Функция Random(x) и Random
Random(x) возвращает случайное целое число в диапазоне от 0 до x-1.
Random возвращает случайное вещественное число, имеющее значение от 0 до 1.
program N_14_5;
var
i,k:integer;
a:real;
begin
cls;
for i:=1 to 6 do
begin
k:=random(12);
a:=random;
write('Случайное целое число =',k:3);
writeln('Случайное вещественное число =',a:5:2)
end;
end.
Функция Sqrt(x)
Sqrt(x) возвращает значение квадратного корня. Значение аргумента должно быть больше или равно нулю. Попытка извлечь квадратный корень из отрицательного числа приведет к фиксации ошибки «Неверная вещественная операция»
program N_7_6;
var
i:integer;
begin
cls;
for i:=1 to 6 do
begin
writeln('Число= ',i:2,' Корень квадратный = ',Sqrt(i):6:4)
end;
end.
Тригонометрические функции
Функция Arctan(x) возвращает значение тригонометрической функции арктангенс. Результат выражен в радианах. Для перевода радиан в градусы следует значение в радианах умножить на 180/ π.
Функции Cos(x), Sin(x)
Cos(x), Sin(x) возвращают значение тригонометрических функций косинус, синус. Аргументы этих функций должны быть выражены в радианах. Для перевода угла в градусах в угол в радианах нужно умножить значение
Процедура Val(s,v,code)
Val (s - string, v - integer, real, и code – integer) возвращает числовой эквивалент строки. Процедура преобразует строку s к числовому представлению и записывает результат в переменную v. Если преобразование возможно, то в переменной code возвращается 0, если невозможно, то в code возвращается ненулевое значение Функция Val преобразует свой строковый аргумент в число если "строковое_выражение" начинается с числовых символов (0 - 9, +, -, ., Е). Если "строковое_выражение" начинается не с числового символа, Val возвращает 0. Пустые начальные символы (пробелы, табуляция) игнорируются. Val часто используется в подпрограммах ввода, поскольку позволяет запрашивать у пользователя символьные данные.
program N_14_7;
var
ss:string;
code:integer;
v:real;
begin
write('Строка:');
read(ss);
val(ss,v,code);
writeln('Число= ',v:4:3,' Код = ',code:4);
end.
Для того чтобы решить задачу с помощью ПК, необходимо пройти определенные этапы ее решения. При решении даже самой простой задачи рекомендуется выполнять следующую последовательность действий.
1. Формализация задачи.
2. Создание математической модели.
3. Детальное описание алгоритма (текстовое, псевдокод, блок-схема).
4. Реализация на языке программирования.
5. Отладка программы.
6. Тестирование программы.
7. Анализ результатов работы.
Задание 1.
Для того чтобы правильно решить задачу с помощью автоматизированного подхода на ПЭВМ, необходимо пройти определенные этапы ее решения. Эти этапы решения пронумерованы в алфавитном порядке. Найдите правильную цепочку этапов, которая будет соответствовать корректному решению задачи?
1. Анализ результатов работы
2. Детальное описание алгоритма (блок-схема, текстовое)
3. Отладка программы
4. Реализация на языке программирования
5. Создание математической модели
6. Тестирование программы
7. Формализация данных
Формализация задачи. Для выполнения этого этапа необходимы глубокие и прочные знания специалиста в предметной области, а также специальные знания и умения в области моделирования. Чаше всего этот этап выполняется совместно специалистами по отрасли знания, например по пищевой технологии, и математиками или системотехниками.
Создание математической модели.В результате формализации создается математическая модель предметной области, которая записывается средствами различных видов математических моделей, определяются входные и выходные данные для задачи. Либо просто формируется строгое описание задачи, поскольку не всякая предметная область может быть описана средствами какой-либо математической модели (так называемые слабо формализуемые или неформализуемые области).
Детальное описание алгоритма. Понятие алгоритма возникло в науке и технике задолго до изобретения вычислительных машин. Алгоритм это некоторая последовательность действий над объектами, приводящая в конечном итоге к ожидаемому результату. Процессор электронно-вычислительной машины умеет выполнять лишь простейшие команды. Для решения задач программист должен составить подробное описание последовательности действий, которые необходимо выполнить центральному процессору компьютера. Составление такого пошагового описания процесса решения задачи называется алгоритмизацией, а алгоритмом называется конечный набор правил, расположенных в определённом логическом порядке. При составлении и записи алгоритма необходимо обеспечить, чтобы он обладал рядом свойств. Однозначность алгоритма, под которой понимается единственность толкования исполнителем правила построения действий и порядок их выполнения. Чтобы алгоритм обладал этим свойством, он должен быть записан командами из системы команд исполнителя. Конечность алгоритма – обязательность завершения каждого из действий, составляющих алгоритм, и завершимость выполнения алгоритма в целом. Результативность алгоритма, предполагающая, что выполнение алгоритма должно завершиться получением определённых результатов, а также массовость, т. е. возможность применения данного алгоритма для решения целого класса задач, отвечающих общей постановке задачи. Для того чтобы алгоритм обладал свойством массовости, следует составлять алгоритм, используя обозначения величин и избегая конкретных значений. Эффективность – для решения задачи должны использоваться ограниченные ресурсы компьютера (процессорное время, объём оперативной памяти и т. д.). Для записи алгоритмов использовался естественный язык. Иногда используют полуформальный язык с ограниченным словарём (часто на основе английского языка), промежуточный между естественным языком и языком программирования. Такой язык называется псевдокодом. Запись алгоритма на псевдокоде называется структурным планом. Псевдокод удобен тем, что позволяет программисту сосредоточиться на формулировке алгоритма, не задумываясь над синтаксическими особенностями конкретного языка программирования. Пример записи с помощью псевдокода – алгоритм деления дробей:
алг Деление дробей
цел а, Ь, с, d, m, n
нач ввод а, Ь, с, d
m:=a х d
n:=b х c
вывод m,n
Кон
Для разработки структуры программы удобнее пользоваться записью алгоритма в виде блок-схемы (в англоязычной литературе используется термин flow-chart). Для изображения основных алгоритмических структур и блоков на блок-схемах используют специальные графические символы. Изображение схем алгоритмов выполняют по стандарту ГОСТ 19.701-90, согласно которому каждой группе действий ставится в соответствие блок особой формы
Машинный язык — это единственный способ взаимодействия с электронно-вычислительными машинами. Первые программы писались именно на нем, т. к. других средств «общения» человека и компьютера еще не было. Каждую команду машинного языка выполняет определенное электронное устройство. Данные и команды записываются в цифровом виде (например, в шестнадцатеричной или двоичной системах счисления). Понять программу на таком языке человеку очень сложно; к тому же даже небольшая программа будет состоять из множества строк кода. Людям, в отличие от машин, более понятны слова, чем наборы цифр. Но тут сразу возникает проблема: машина не в состоянии понять набор букв. Необходим какой-нибудь «переводчик» на ее родной машинный язык. Так был придуман транслятор — специальная программа, преобразующая программный код с того или иного языка программирования в машинный код.
На сегодня существуют сотни, а может даже и тысячи языков программирования. Их можно разделить на три основных типа, это:
- машинные языки,
- языки ассемблера (языки низкого уровня),
- языки высокого уровня.
Машинные языки тяжелы для человеческого восприятия, но понятны для компьютера, то есть машинный язык - это "природный язык" компьютера. Низкоуровневый язык программирования (язык программирования низкого уровня) — язык программирования, близкий к программированию непосредственно в машинных кодах. К языкам низкого уровня условно можно причислить MSIL, применяемый в платформе Microsoft .NET, Форт, Java байт-код. После этого появился машинно-ориентированный язык ассемблер, который использует команды, которые при компиляции образуют машинный код. Низкий уровень подразумевает не качество программ, а уровень детализации инструкций. Так, команда, записанная на Ассемблере, например, MOV AL,OOh, означает, что в регистр процессора (указывается, в какой именно!) надо занести число 0. Программирование на языке Ассемблер до сих пор используется для тех приложений, когда важно уменьшить время выполнения программы. За ними идут языки высокого уровня (Basic, Pascal, С, Ada, Modula, PL/1, Snobol, Fortran, Delphi, Visual Basic, Visual С). Программы, написанные на языках высокого уровня, более компактны, легче для понимания, а вероятность появления в них ошибок меньше. Ранние языки высокого уровня были довольно специализированными: Фортран (FORmula TRANslation) был предназначен для использования в научных целях, КОБОЛ (Common business Orientated Language) – для использования в мире бизнеса. Появление в 50-х гг. языка BASIC (Beginners All-purpose Symbolic Instruction Code) закрыло существовавший в языках высокого уровня пробел между языками для науки и для бизнеса. BASIC в равной степени годится для любых задач и в то же время достаточно прост для изучения. Тем временем были изобретены новые методы программирования, которые привели к новой волне языков высокого уровня. Одним из этих языков, выдержавших проверку временем, является основанный на методах структурного программирования Pascal. Для перевода программы, написанной на языке высокого уровня, в соответствующую машинную программу используются языковые процессоры. Различают два вида языковых процессоров: интерпретаторы и трансляторы. Интерпретатор — это программа, которая получает исходную программу и по мере распознавания конструкций входного языка реализует действия, описываемые этими конструкциями (осуществляет пооператорную (покомандную) обработку и выполнение исходной программы). Транслятор — это программа, которая принимает исходную программу и порождает на своем выходе программу, записываемую на объектном языке программирования (транслирует всю программу без её выполнения). В частном случае объектным может служит машинный язык, и в этом случае полученную на выходе транслятора программу можно сразу же выполнить на ЭВМ. Транслятор с языка высокого уровня называют компилятором.
Убедиться, что программа работает правильно можно только в процессе проверки ее работоспособности, который называется тестирование. Обычно программа редко сразу начинает работать так, как надо, или работает правильно только на некотором ограниченном наборе исходных данных. Это свидетельствует о том, что в программе есть алгоритмические ошибки. Процесс поиска и устранение ошибок называется отладкой. Ошибки, которые могут быть в программе, принято делить на три группы: -синтаксические; -ошибки времени выполнения; -алгоритмические. Синтаксические ошибки, их также называют ошибками времени компиляции (Compile-time error), наиболее легко устранимы. Их обнаруживает компилятор, а программисту остается только внести изменения в текст программы и выполнить повторную компиляцию.
Во время работы программы ее инструкции выполняются одна за другой со скоростью работы процессора компьютера. Трассировка — это процесс выполнения программы по шагам (step-by-step), инструкция за инструкцией. Протестировать алгоритм может и человек, путем трассировки. Выполняя ручную трассировку, человек моделирует работу процессора, исполняя каждую команду алгоритма и занося результаты выполнения команд в трассировочную таблицу.
Рассмотрим этапы решения задач на примере. Допустим необходимо выполнить задание: Найти произведение n первых нечетных чисел.
Анализ задачи.
1. Не обязательно знать, чему равно n-е нечетное число. Нужно просто найти произведение n чисел. Предположим n=5, тогда необходимо найти 1 * 3 * 5 * 7 * 9*…
2. Входными данным является количество сомножителей n. Результатом работы алгоритма является вывод вычисленного произведения. Построим функцию без формулы. Для этого заметим, что следующее нечетное число больше предыдущего на 2. Поэтому, прибавив к первому нечетному числу два, получим второе нечетное число, прибавив снова два — третье нечетное число и т.д. до n-го нечетного числа. Лучше понять это поможет трассировка алгоритма (представлена в таблице 14.1).
3. Алгоритм функции можно записать в следующем виде:
1) присвоить умножителю начальное значение P = 1;
2) присвоить сумматору значение S = 1;
3) присвоить номеру числа предварительное значение i = 0;
4) проверить условие i < n. Если оно справедливо, перейти к шагу 5).
Иначе закончить алгоритм;
5) получить номер текущего сомножителя операцией i = i + 1. Теперь
этот номер нужен только для подсчета количества проходов цикла;
6) умножить умножитель на i-е нечетное число S: P = P ⋅ S;
7) вычислить следующее нечетное число S = S + 2. Обратите внимание,
что следующее нечетное число вычисляется после умножения;
8) перейти к шагу 4).
Блок-схему можно будет представить в следующем виде:
После реализации действий на языке программирования и отладки программы приступим к тестированию программы.
6. Тестирование алгоритма.
Пусть n = 5. Мы должны получить произведение P = 945. После трассирования алгоритма получаем таблицу.
i – номер нечет. эл | S | P | Проверить i < n |
Да | |||
Да | |||
Да | |||
Да | |||
Да | |||
нет |
Таблица 14.1 Таблица трассировки алгоритма.
Внимательное пошаговое изучение трассировки алгоритма поможет понять, что происходит при выполнении алгоритма.
7. Из анализа таблицы можно также сделать заключение, что построенный алгоритм работает правильно.
Контрольные вопросы
1. Что рекомендуется сделать непосредственно перед тем, как начать писать текст компьютерной программы?
2. Перечислить этапы решения поставленной задачи.
3. Что представляет собой тестирование программы. Машинное тестирование и тестирование вручную.
4. Отладка программы. Виды ошибок.
5. Что представляет собой трассировка.
6. Что представляет собой алгоритм. Требование к алгоритму.
7. Что представляет собой псевдокод.
8. Для чего используются языковый процессоры, их виды. Что такое компилятор?
9. В чем разница между транслятором и интерпретатором.
10. Назовите 3 основных типа языков программирования. Приведите примеры.
11. Какие языки программирования относятся а) к языкам низкого уровня; б) к языкам высокого уровня.