Lg в паскале как записать
Pers.narod.ru. Алгоритмы. Некоторые математические расчёты на Паскале
Как известно, ядро Паскаля предельно компактно, и многие математические функции в модуле System просто отсутствуют. Поэтому у людей, изучающих основы программирования именно на этом языке, типовые математические расчёты зачастую вызывают проблемы. Далее приводятся пути решения наиболее типичных из этих проблем.
Возведение в произвольную степень на Паскале
Требуется вычислить значение с = a b . В зависимости от значений основания a и показателя степени b , вычисление степени может быть реализовано по-разному.
Если a > 0 , а b может принимать произвольные вещественные значения, используем известную формулу a b = exp (b * ln a) :
Если b — целое число (вообще говоря, «не слишком большое» по модулю), а a — любое (не равное нулю при b < 0 ), возведение в степень может быть реализовано с помощью цикла:
Для целого b и не равного нулю a выгоднее считать с помощью экспоненты и логарифма, не забывая о том, что не существует логарифмов от отрицательных чисел:
Вычисление корня произвольной степени на Паскале
Стандартная функция sqrt умеет извлекать только квадратный корень.
Извлечь корень степени n (где n — натуральное) из числа a можно всегда, кроме случая, когда a < 0 и при этом n четно. Извлечь корень степени n из числа a означает возвести число a в степень 1/n . При этом знак корня совпадает со знаком a . Ниже приводится код функции, вычисляющей корень произвольной степени n от своего аргумента a :
Вычисление логарифмов на Паскале
Стандартная функция ln вычисляет только натуральный логарифм. Для вычисления логарифмов по другим основаниям можно применить формулу log a b = ln b / ln a :
В частности, для вычисления десятичного логарифма lg b можно записать:
Вычисление обратных тригонометрических функций (арксинусов и арккосинусов) на Паскале
В Паскале имеется стандартная функция arctan для вычисления арктангенса.
Другие обратные тригонометрические функции могут быть выражены через неё с помощью формул тригонометрии.
Для вычисления y = arcsin x , где, конечно, |x| <= 1 , можно применить один из следующих способов:
на практике следует помнить о возможных погрешностях при сравнении вещественных чисел (глава учебника, п.7.2).
Для вычисления z = arccos x , где |x| <= 1 , можно использовать тот факт, что сумма арксинуса и арккосинуса некоторого значения равна прямому углу:
Вычисление полярных углов на Паскале
Полярным углом точки с координатами (x,y) , отличной от начала координат, называют угол между положительным направлением оси Ox и направлением из начала координат на данную точку. При этом угол отсчитывается против часовой стрелки. Строго говоря, полярный угол не всегда равен arctg (y/x) , это верно лишь при x > 0 . Кроме того, при делении большого значения y на малое x возможно переполнение. Показанная ниже функция вычисляет полярный угол fi , лежащий в промежутке от -pi до +pi , для любой точки с координатами (x,y) , не совпадающей с началом координат:
Проблема с приведением типов на Паскале
Начинающие «паскалисты» нередко не понимают строгой типизированности этого языка, из-за чего находят в нём несуществующие «баги». Вот простейший пример.
Эта программа выдаст отнюдь не 200000, как может показаться. Ответ будет равен 3392 (результат переполнения). Никакого бага нет. Тип выражения в Паскале определяется только типом входящих в него переменных, но не типом переменной, куда записывается результат. То есть, мы вычислили с переполнением произведение двух переменных типа Integer , а потом «испорченный» результат переписали в переменную типа Longint . ничего не изменит и
Здесь тоже сначала вычислен результат с переполнением, затем преобразован к типу Longint . А вот
рулит, получите свои 200000 🙂 Указанная ошибка часто встречается в программах начинающих. Чтобы её не повторять, помните — выражение в Паскале должно быть приведено к нужному типу в процессе его вычисления, а не после его окончания или при присваивании.
Lg в паскале как записать
Magister of Code
Профиль
Группа: Участник
Сообщений: 155
Регистрация: 9.7.2004
Где: Kiev
Репутация: нет
Всего: 1
Профиль
Группа: Участник
Сообщений: 48
Регистрация: 9.1.2005
Где: г.Ижевск
Репутация: нет
Всего: нет
Magister of Code
Профиль
Группа: Участник
Сообщений: 155
Регистрация: 9.7.2004
Где: Kiev
Репутация: нет
Всего: 1
Профиль
Группа: Участник
Сообщений: 247
Регистрация: 6.4.2005
Где: Петербург
Репутация: нет
Всего: 10
Запрещается!
1. Обсуждать и делится взломанными компонентами или программным обеспечением
2. Публиковать ссылки на варез
3. Оффтопить
- Действия модераторов можно обсудить здесь
- С просьбами о написании курсовой, реферата и т.п. обращаться сюда
- Вопросы по реализации алгоритмов рассматриваются здесь
- 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
[ Время генерации скрипта: 0.1027 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Pascal-Паскаль
Программирование. Стандартные функции Pascal-Паскаль
- Скачено бесплатно: 25982
- Куплено: 414
-
->Программирование. Стандартные функции Pascal-Паскаль
Программирование. Стандартные функции Pascal-Паскаль
Стандартные функции Pascal-Паскаль
Стандартные математические функции Турбо Паскаля | |||
---|---|---|---|
Обращение | Тип аргумента | Тип результата | Примечание |
Abs(x) | Real, integer | Тип аргумента | Модуль аргумента |
ArcTan(x) | Real, integer | Real | Арктангенс (значение в радианах) |
Cos(x) | Real, integer | Real | Косинус, угол в радианах |
Exp(x) | Real, integer | Real | Экспонента |
Frac(x) | Real | Real | Дробная часть числа |
Int(x) | Real, integer | Real | Целая часть числа |
Ln(x) | Real, integer | Real | Логарифм натуральный |
Pi | Нет | Real | 3,141592653 |
Sin(x) | Real, integer | Real | Синус, угол в радианах |
Sqr(x) | Real, integer | Тип аргумента | Квадрат аргумента |
Sqrt(x) | Real, integer | Real | Корень квадратный |
Random | Нет | Real | Псевдослучайное число в интервале [0, 1] |
Random(I) | Integer | Integer | Псевдослучайное число в интервале [0, I] |
Round(x) | Real | Integer | Округление до ближайшего целого |
Trunc(x) | Real | Integer | Отбрасывание дробной части числа |
Порядок вычислений в выражениях следующий:
- вычисляются подвыражения, заключенные в скобки;
- затем выполняются операции с наибольшим приоритетом; обычно используются следующие уровни приоритетов (в порядке убывания):
- возведение в степень;
- мультипликативные операции: * , / , div , mod;
- унарные операции: + , — , abs , not;
- аддитивные операции: +, -;
- операции отношения: = , <>, <, >, <=, >=;
- логические операции: and, or, not;
- операции с одинаковым приоритетом выполняются слева направо.
Хотя нет ограничений на сложность выражений, однако выражения, содержащие более 7 операндов, трудны для чтения и понимания и поэтому такие выражения не рекомендуется использовать.
Замечание (это важно!)
- в Паскале нет стандартной операции или стандартной функции возведения в степень, поэтому используется следующее математическое тождество: x y = e ylnx
- в Паскале существует только стандартная функция вычисления натурального логарифма, поэтому используется следующее математическое тождество: logab= ln b/ln a
Математическое выражение: x 3/2 — 7x + tg (x+2)
Выражение на Паскале: exp(3*ln(x)/2)-7*x+sin(x+2)/cos(x+2)
Операторы действия
Операторы действия — это средства языка, позволяющие изменять в процессе выполнения программы состояние вычислений. Самый простой оператор действия — оператор присваивания.
Пример оператора присваивания
Оператор присваивания, несмотря на кажущуюся простоту, имеет очень важное алгоритмическое значение.
Удобно считать, что выполнение присваивания переменной некоторого значения означает помещение этого значения в выделенный для переменной ящик. При этом каждый запоминающий ящик обладает следующими свойствами.
- В каждый момент времени в ящике может храниться не более одного значения.
- Каждый ящик способен хранить только значения одного и того же типа. Попытка поместить в ящик значение любого другого типа приводит к тому, что ящик отказывается принимать на хранение передаваемое ему значение — это расценивается как ошибка в программе.
- Значение, помещенное в ящик, будет храниться в нем до тех пор, пока в этот ящик не будет помещено новое значение (в момент присваивания соответствующей переменной этого нового значения) — при этом предыдущее содержимое ящика безвозвратно теряется (уничтожается).
- Находящееся в ящике значение считается текущим значением соответствующей переменной. Это текущее значение может быть выдано из ящика для использования сколько угодно раз, но при этом содержимое ящика не меняется: из него каждый раз выдается копия хранящегося значения с сохранением оригинала в ящике без какого-либо изменения.
- К началу выполнения программы содержимое всех запоминающих ящиков считается неопределенным; в частности, их нельзя считать и пустыми, поскольку эти ящики могли использоваться при выполнении предыдущих программ, после чего в ящиках могло что-то остаться.
Еще один оператор действия, хотя его можно лишь условно назвать таковым: он не выполняет никакого действия, это — пустой оператор (в Паскале он обознается знаком ";"). В Паскале оператором действия является также оператор процедуры. Последний из простейших операторов действия — оператор останова, который прерывает работу программы (в Паскале это оператор halt).
Ввод и вывод данных
Ввод данных с клавиатуры производится с помощью стандартной процедуры read( ) или ее разновидности readln( ). Элементы списка ввода — идентификаторы (имена) переменных, перечисляемые через запятую. При выполнении этого оператора пользователь набирает на клавиатуре соответствующую последовательность значений, разделяя их пробелами (это важно!).
Пример ввода данных с клавиатуры
read(a,b,c);
readln(a,b,c);
Вывод данных на экран производится с помощью стандартной процедуры write( ) или ее разновидности writeln( ).
Список вывода может содержать константы, переменные, выражения, формат вывода. Выражения в списке вывода разделяются запятыми.
Пример вывода данных на экран
write(a,b,c);
writeln(a,b,c);
Окончание ln в имени процедуры означает, что курсор автоматически будет переведен в начало следующей строки экрана.
Программирование
Исходники Pascal (127)
Справочник
Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту
Домашние задание
Нажмите на рисунок
http://pascalabc.net
По этому адресу можно скачать среду программирования Pascal или работать в режиме on-line.
Щелкнув ЛКМ по рисунку слева, вы перейдете на главную страницу сайта. На главной странице можно будет скачать Среду программировая PASCAL, познакомиться с примерами решения задач, войти в ОН-лайн режим. Чтобы перейти в режим работы on-line выберите ссылку Web-сред а .
В появившемся окне можно вводить программу. После набора программы необходимо щелкнуть ЛКМ на кнопку ВЫПОЛНИТЬ. В нижней части окна появятся ошибки, если таковы имеются или результат, если программа выполнена без ошибок.
Урок №1
Основная структура программы.
Правила языка Паскаль предусматривают единую для всех программ форму основной структуры:
<Раздел описаний>
Begin
<Тело программы>
End.
Здесь слова Program, Begin и End являются служебными.
Правильное и уместное употребление этих слов является обязательным.
Имя программы выбирается программистом самостоятельно в
соответствии с правилами построения идентификаторов.
Урок №2
Типы переменных на языке Паскаль
BYTE — целое число от 0 до 255, занимает одну ячейку памяти (байт).
BOOLEAN — логическое значение (байт, заполненный единицами, или нулями),
WORD — целое число от 0 до 65535, занимает два байта.
INTEGER — целое число от –32768 до 32767, занимает два байта.
LONGINT — целое число от –2147483648 до 2147483647, занимает четыре байта.
REAL — число с дробной частью от 2.9*10-39.до 1.7*1038, может принимать и отрицательные значения, на экран выводится с точностью до 12-го знака после запятой, если результат какой либо операции с REAL меньше, чем 2.9*10-39, он трактуется как ноль. Переменная типа REAL занимает шесть байт.
DOUBLE — число с дробной частью от 5.0*10-324.до.1.7*10308, может принимать и отрицательные значения, на экран выводится с точностью до 16-го знака после запятой, если результат какой либо операции с DOUBLE меньше, чем 5.0*10-324, он трактуется как ноль. Переменная типа DOUBLE занимает восемь байт.
CHAR — символ, буква, при отображении на экран выводится тот символ, код которого хранится в выводимой переменной типа CHAR, переменная занимает один байт.
STRING — строка символов, на экран выводится как строка символов, коды которых хранятся в последовательности байт, занимаемой выводимой переменной типа STRING; в памяти занимает от 1 до 256 байт – по количеству символов в строке, плюс один байт, в котором хранится длина самой строки.
Операторы ввода / вывода
В программировании существует специальное понятие консоль, которое обозначает клавиатуру при вводе и монитор при выводе.
Для того чтобы получить данные, вводимые пользователем вручную (т.е. с консоли), применяются команды
read ( <список_ввода> )
readln ( <список_ввода> )
Первая из этих команд считывает все предложенные ей данные, оставляя курсор в конце последней строки ввода, а вторая — сразу после окончания ввода переводит курсор на начало следующей
строки. В остальном же их действия полностью совпадают.
Список ввода — это последовательность имен переменных, разделенных запятыми.
Например, при помощи команды
программа может получить с клавиатуры данные сразу для четырех переменных, относящихся к различным типам данных.
Вводимые значения необходимо разделять пробелами, а завершать ввод — нажатием клавиши Enter.
Ввод данных заканчивается в тот момент, когда последняя переменная из списка ввода получила свое значение.
Для того чтобы вывести на экран какое-либо сообщение , воспользуйтесь процедурами
write( <список_вывода> )
writeln( <список_вывода> )
Первая из них, напечатав на экране все, о чем ее просили, оставит курсор в конце выведенной строки, а вторая переведет его в начало следующей строчки.
Список вывода может состоять из нескольких переменных или констант, записанных через запятую; все эти переменные должны иметь тип либо базовый, либо строчный.
Переменные, составляющие список вывода, могут относиться к целому, вещественному, символьному или булевскому типам.
В качестве элемента списка вывода кроме имен переменных могут использоваться выражения и строки.
Оператор Writеln без параметров реализует пропуск строки и переход к началу следующей строки.
Если для вывода информации промто перечислять переменные через запятую, то выводимые символы окажутся «слепленными».
Чтобы этого не случилось, нужно позаботиться о пробелах между выводимыми переменными:
writeln(a, ‘ ‘, b, ‘ ‘, c);
Но предпочтительнее задать для всех (или хотя бы для некоторых) переменных формат вывода:
writeln(a:5, b, c:20:5);
Если число длиннее, чем отведенное под него пространство, количество позиций будет автоматически увеличено.
Если же выводимое число короче заданного формата, то спереди к нему припишутся несколько пробелов.
Лабораторная работа №1
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЛИНЕЙНОЙ СТРУКТУРЫ
Цель работы — овладение практическими навыками разработки и программирования вычислительного процесса линейной структуры и навыками по отладке и тестированию программ.
Задания для самостоятельной подготовки
— запись констант, переменных, стандартных функций;
— правила записи арифметических выражений;
— арифметический оператор присваивания;
— организацию простейшего ввода-вывода данных.
2. Разработать алгоритм решения в соответствии с заданием.
3. Составить программу решения задачи.
4. Подготовить тестовый вариант исходных данных и вычислить для них вручную или с помощью калькулятора значения вычисляемых в программе величин.
Задание к работе
1. Вычислить на ЭВМ значения переменных, по заданным расчетным формулам и наборам исходных данных. Составить блок – схему.
Пример выполнения лабораторной работы №1 (вариант – 10)
1.Функции тангенс в Паскале не существует, поэтому заменим тангенс tg(x)=sin(x)/cos(x);
2. Тангенс находится в квадрате, поэтому представим это выражение следующим образом:
tg 2 x=SQR(sin(x)/cos(x));
3. Синус в знаменателе дроби тоже в квадрате, по аналогии запишем и его:
Sin 2 (x/a) = SQR(sin(x/a));
4. Запишем первое выражение по правилам языка программирования Паскаль:
5. Представим «Е» в степени минус корень квадратный из «А» по правилам записи на языке программирования Паскаль:
√a=sqrt(a), e x = exp(x) Þ e -√a =exp(-SQRT(a));
6. Запишем второе выражение по правилам языка программирования Паскаль:
Составим программу :
PROGRAM lab 1; — название программы .
Var y , d , x , a , b : real ; — описание переменных, которые встречаются в выражениях. Так как переменные имеют целую и дробную часть, то тип их вещественный (REAL).
BEGIN – начало программы.
a :=3.2; b :=17.5; x :=-4.8; — присвоение значений переменным (исходные данные).
y := b * SQR ( sin ( x )/ cos ( x ))- a / SQR ( sin ( x / a )); — вычисление значения «у».
d := a * exp (- sqrt ( a ))* cos ( b * x / a ); — вычисление значения « d ».
writeln (‘ y = ‘, y , ‘ и d = ‘, d ); — вывод результатов вычислений с комментариями.
end . – конец программы.
Результат вычислений выглядит так:
Урок №3
Условный оператор.
Структура условного оператора имеет следующий вид:
IF условие THEN оператор1 ELSE оператор2;
Вначале вычисляется условие, если результат — TRUE (истина), то выполняется оператор1, если результат есть FALSE (ложь), наоборот, выполняется оператор2.
В условном операторе после then, а также после else по синтаксису может стоять только один оператор. Если же при выполнении (или невыполнении) заданного условия надо выполнить не одно действие, а несколько, то их надо объединить в единый, составной оператор, т.е. заключить эту последовательность действий в операторные скобки begin. end.
Пример: программа должна определять, ввел пользователь четное или нечетное число, и выводить на экран сообщение.
var n : integer ;
begin
write ( ‘Введите целое число: ‘ ) ; readln ( n ) ;
if n mod 2 = 0 then write ( ‘ Оно четное .’ ) else write ( ‘Оно нечетное.’ ) ;
end .
Бывают неполные формы условных операторов. В таком случае вложенный в if блок кода выполняется только в случая true логическом выражении заголовка. В случае false выполнение программы сразу передается в основной блок. Понятно, что ветка else в таком случае отсутствует.
Пример: если переменная имеет значение меньше нуля, то ее значение изменяется (находится модуль числа).
При необходимости выполнения нескольких операторов они должны быть заключены в операторные скобки begin — end .
Пример: программа, которая меняет значения переменных местами, только если эти значения различны.
Оператор выбора (вариант, переключатель) реализует выбор одной из возможных альтернатив, т.е. вариантов продолжения программы.
Общая форма записи следующая:
case выражение of
значение1 : оператор (группа операторов);
значение2 : оператор (группа операторов);
. . . . . . . . . . . . . . . . . . . . . .
значениеN : оператор (группа операторов)
else оператор (группа операторов);
end;
Задача . Написать программу преобразования цифр в слова .
Program Number;
Var a, b, c : integer;
Begin
writeln(‘Введите цифру ‘);
readln(a);
case a of
0 : writeln (‘ноль‘);
1 : writeln (‘один‘);
2 : writeln (‘два‘);
3 : writeln (‘три‘);
4 : writeln (‘четыре‘);
5 : writeln (‘пять‘);
6 : writeln (‘шесть‘);
7 : writeln (‘семь‘);
8 : writeln (‘восемь‘);
9 : writeln (‘девять‘)
else writeln (‘Это число не является цифрой‘);
end;
End.
Лабораторная работа №2
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РАЗВЕТВЛЯЮЩЕЙСЯ И ЦИКЛИЧЕСКОЙ СТРУКТУРЫ
Цель работы — овладение практическими навыками разработки, программирования вычислительного процесса разветвляющейся и циклической структур, получение дальнейших навыков по отладке и тестированию программ.
Задания для самостоятельной подготовки
1. Изучить возможности языка программирования для реализации:
— условной и безусловной передачи управления;
— вычислительного процесса разветвляющейся структуры.
2. Разработать алгоритм решения задач в соответствии с заданием.
3. Составить программу решения задачи.
4. Составить блок – схему к задаче.
Вычислить значение функции. Осуществить вывод значений вводимых исходных данных и результат вычисления значения функции, сопровождая вывод наименованиями переменных. Составить блок – схему.
В данной работе, во многих вариантах, встречается десятичный логарифм (lg(x)). В языке программирования Паскаль нет стандартной функции представления десятичного логарифма, поэтому воспользуемся формулой перехода от одного основания логарифма к другому .
формула перехода от одного основания логарифма к другому
На основе этой формулы получаем, что десятичный логарифм на языке программирования Паскаль записывается:
lg ( x ) = ln ( x )/ ln (10).
Пример выполнения лабораторной работы №2а (вариант – 10)
Вариант — 10
1. Запишем каждое выражение в фигурных скобках на языке программирования Паскаль.
2. Значение t нам известно, t:=2.2, значение переменной x вводится с клавиатуры:
write (‘введите значение X ’); readln ( x );
3. Для объявления условия используем полую форму оператора Условного перехода:
if x <0.5 then Z := cos ( x )+ t * sqr ( sin ( x )) else begin
if x =0.5 then Z :=(1/ x )+ sqrt ( x + t ) else Z := ( exp (3* ln ( ln ( x )))+ sqr ( x ))/( sqrt ( x + t ))
end ;
4. Выведем значение Z на экран с комментариями:
writeln (‘при Х=’, х, ‘значение функции Z=’, z );
Составим программу:
program lab2a; — название программы
var x,t,Z: real; — перечисление переменных и их тип
begin — начало программы
t:=2.2; — присвоение значения
write(‘введине значение Х и нажмите ENTER’); readln(x); — ввод данных с клавиатуры
if x <0.5 then Z := cos ( x )+ t * sqr ( sin ( x )) else begin — полная форма
if x =0.5 then Z :=(1/ x )+ sqrt ( x + t ) else Z := ( exp (3* ln ( ln ( x )))+ sqr ( x ))/( sqrt ( x + t )) — записи
end ; — оператора условного перехода
writeln(‘при значении Х=’, x, ‘ значение функции Z=’, Z); — вывод результата