Текст решения задачи по программированию на PascalABC с комментариями. Что бы посмотреть объяснение этого решения нажмите смотреть видеоурок.
program stepen;
uses crt;
{ Записать программу возвед. числа, а в степень n }
var a, n, i, p: integer;
begin
write (‘n=’);readln (n); {Просим ввести степень числа и считываем её}
write (‘a=’);readln (a); {Просим ввести само число и считываем его}
p:=1; {Если степень равна 0 то цикл ни разу не выполнится и выведется число р, которое мы задаем равным единице, если же укажите при выполнении программы степень равную 1, то цикл выполнится 1 раз и число, а перемножится на р=1 после чего естественно получим само число а, что так же является правильным результатом}
for i:=1 to n do
p:=p*a; {В цикле на каждом кругу в переменную р, которую мы будем выводить в качестве конечного результата, заносится новое значение числа, а, возведенного в степень равную значению счетчика т. е. при i=1 р=а*1; при i=2 р=а*1*a (т.е. а в квадрате); при i=1 р=а*1*a*а (т.е. а в кубе); }
write (‘Число, а в степени n = ‘, p){Выводим результат};
readln;
end.
Раздел: Стандартные функции Паскаля
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Функция Power в Паскале (и многих других языках программирования) выполняет возведение числа в степень.
Синтаксис для вещественных чисел:
function Power(Base: Double; Expon: Double) : Double;
Синтаксис для целых чисел:
function Power(Base: LongInt; Expon: LongInt) : LongInt;
Эта функция возводит число Base
в степень Expon
и возвращает результат. В реальности функция возвращает результат выражения:
Exp(Expon * Ln(Base))
ВАЖНО!
Всё, что сказано выше, взято из официальной документации
FreePascal. Однако документация иногда расходится с действительностью. Во всяком случае, мой компилятор не соответствует документации. А именно:
- В документации сказано, что функция объявлена в модуле SYSTEM. Однако без подключения модуля MATH компилятор выдаёт ошибку. Из этого следует, что на самом деле функция объявлена в модуле MATH.
- В документации приведён синтаксис как для целых, так и для вещественных чисел. Однако на самом деле функция работает только с вещественными числами. При попытке использовать целые числа компилятор также выдаёт ошибку.
- Возможно, в более новых версиях эти проблемы уже исправлены. Но у меня было именно так (версия FPC 3.0.0).
Пример использования функции Power
Пример приведён ниже:
program funcpower; uses Math; var x, y, z : single; begin x := 2; y := 3; z := Power(x, y); //Z = X в степени Y WriteLn(z:0:2); ReadLn; end.
Здесь мы число 2 (переменная Х) возводим в степень 3 (переменная Y), то есть вычисляем следующую формулу:
Z = XY
Обратите внимание на подключенный модуль MATH.
Эта статья входит в раздел о подпрограммах модуля SYSTEM. И по идее описания функции Power здесь не должно быть. Но, так как в документации сказано, что функция Power объявлена в модуле SYSTEM, я решил включить данную статью именно в этот раздел (я же не виноват, что в документации косяк))).
Возведение в степень в Паскале
Возведение в степень в Паскале можно выполнить и без какой-то специальной функции,
используя функцию вычисления натурального логарифма
и функцию вычисления экспоненты.
О том, как это сделать, я рассказал здесь.
Однако, если есть специальная функция для возведения числа в степень, то почему бы ей и не воспользоваться? С одной стороны. С другой стороны – эта функция совершенно неожиданно требует подключения модуля MATH.
В документации сказано, что по сути функция Power работает по формуле возведения в степень в Паскале:
Exp(Expon * Ln(Base))
Однако, если мы будем делать именно так, эта формула будет неправильно работать с
отрицательными числами, потому что в документации сказано, что функция Ln работает только с положительными числами.
Так что функция Power в реальности несколько сложнее, чем приведённая выше формула.
Поэтому для разминки мы напишем свой аналог функции Power, который будет работать правильно. Но для начала вспомним как вычисляется степень числа:
Также напомню, что любое число в нулевой степени равно 1, а ноль в любой степени равен 0 (кроме нуля в нулевой – ноль в нулевой степени не определён, но мы будем возвращать в таких случаях ноль, хотя функция Power возвращает 1).
А теперь наш аналог функции Power:
function AVPower(Base: Double; Expon: Double) : Double; var m : byte; i : integer; Res : Double; begin m := 0; if Expon < 0 then m := 1 //Отрицательная степень else if Expon = 0 then m := 2 //Нулевая степень else m := 3; //Положительная степень if Base < 0 then m := 10 + m //Отрицательное число else if Base = 0 then m := 20 + m //Число равно 0 else m := 30 + m; //Положительное число case m of 11 : //Отрицательное число, отрицательная степень begin //Если Expon - не целое число, то получаются комплексные числа Res := 1 / Exp(Abs(Expon) * Ln(Abs(Base))); i := Round(Expon); if Odd(i) then Res := -1 * Res; end; 12, 32 : //Нулевая степень Res := 1; 13 : //Отрицательное число, положительная степень begin //Если Expon - не целое число, то получаются комплексные числа Res := Exp(Expon * Ln(Abs(Base))); i := Round(Expon); if Odd(i) then Res := -1 * Res; end; 21..23 : //Число равно нулю Res := 0; 31 : //Положительное число, отрицательная степень Res := 1 / Exp(Abs(Expon) * Ln(Base)); 33 : //Положительное число, положительная степень Res := Exp(Expon * Ln(Base)); end; AVPower := Res; end;
Я сознательно немного всё усложнил, чтобы вас запутать )))
Пример использования функций Power и её аналога в программе:
x := 2; y := 3; z := Power(x, y); //Z = X в степени Y WriteLn(z:0:2); z := AVPower(x, y); //Z = X в степени Y WriteLn(z:0:2);
Здесь есть один подвох – если вы попытаетесь возвести отрицательное число в не целую степень, например, так:
-23,5
то стандартная функция Power вызовет ошибку во время выполнения программы. В своём аналоге я этого избежал, но надо понимать, что результат в этом случае будет неправильным (хотя с моей точки зрения это всё-равно лучше, чем аварийное завершение программы).
Это происходит потому, что при таком раскладе результатом являются комплексные числа, а операции с комплексными числами выполняются по другим правилам.
В реальных программах подобные ситуации надо дополнительно обрабатывать (хотя бы предупреждать пользователя о том, что при отрицательном основании и не целой степени функция вернёт неправильный результат).
Ещё в моей функции используется функция Odd, о которой я ещё не рассказывал. Вкратце скажу, что она определяет, является ли число чётным. Более подробно о ней расскажу в отдельной статье.
|
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… |
|
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение – ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. |
Добрый день, товарищи, даже если у вас уже вечер. Сегодня я хочу разобрать небольшую линейную задачку по нахождению степеней. Звучит наше сегодняшнее задание так: “Пользователь вводит число. Программа находит это число во второй, четвертой и восьмой степени.“
А если вы не смотрели первую часть знакомства с линейными задачами (а именно так называется эта тема), то я оставлю ссылку на нее:
Решаем уравнение с помощью Pascal
1. Определимся с переменными
Так как задача подразумевает, что число вводит пользователь, то первая переменная – это число. Пусть эта переменная будет a. А дальше у нас есть два пути:
1. Присваивать переменной а новые значения и сразу выводить результат пользователю.
2. Создать свою переменную для каждой степени.
Давайте выберем первый вариант. Лишние переменные нам сейчас просто не нужны, да и в данном случае это является оптимизацией программы.
Здесь мы определяем переменную а целым числом (integer), так как степень числа точно не будет дробью. Дальше программа начинается и приглашает пользователя ввести значение переменной.
2. Вычислим степени
Разбираем. Тут все легко.
- Допустим пользователь задает а = 5.
- Тогда мы умножаем 5 на 5 в первый раз и получаем 25.
- ..И сразу присваиваем это значение нашей же переменной а.
- Теперь а = 25. Это вторая степень 5. Снова умножаем а на а (25 на 25).
- На этот раз а = 625. Это 5 в 4-й степени. Делаем умножение в третий раз.
- а получается огромным числом 390625. Это соответствует 5 в 8-й степени.
- задание выполнено.
На самом деле эта программа – очень полезная для дальнейших примеров.
Ее мы улучшим в первый раз когда изучим тему циклов, добавив умножение до той степени, до которой хочет пользователь, а не останавливаясь на восьми.
И второй раз программу мы будем улучшать тогда, когда изучим процедуры и функции. Действие (a:=a*a;) нет смысла повторять столько раз подряд. Легче обернуть все это в компактную подпрограмму.
Вот такой вот простор для модификации. На сегодня на этом все!
Вот вам кота:
Данный человек всегда открыт для обсуждения контента и общения с подписчиками, если найдутся какие либо вопросы то я обязательно постараюсь ответить на них.
По возможности я попросил бы подписаться. Сейчас это критически важно для развития канала. Так то!
Доброго вам всем здоровьица в эти трудные времена!
На занятии изучается алгоритм работы с циклом с предусловием While в Паскале, рассматривается пример возведения в степень
Содержание:
- While в Паскале — цикл с предусловием
- Вложенные циклы в Паскале
- Произведение в Паскале
- Программа возведения в степень числа в Паскале
Пример: Определить количество цифр в введенном целом числе, не превышающем 2000000.
Алгоритм: Отделяем и удаляем последовательно последнюю цифру, наращивая счетчик.
n | счетчик |
246 | 0 |
24 | 1 |
2 | 2 |
0 | 3 |
В чем сложность?: Заранее не определено и неизвестно, сколько цифр нужно убрать, т.е. сколько шагов необходимо сделать.
Как выполнить: Надо перестать отделять цифры, когда n = 0, т.е. надо выполнять пока n > 0
Блок-схема решения:
Блок-схема решения
Решение примера на Паскале:
Цикл while
в Паскале применяется для создания повторений с неизвестным заранее их числом. Повторения (итерации) будут осуществляться, пока истинно некоторое условие.
Блок-схема, соответствующая циклу while в Паскале:
while условие do {Пока условие истинно выполняется оператор} оператор;
- Здесь оператор, стоящий после служебного слова
do
, образует тело цикла и будет выполняться, пока значение"условия"
равноtrue
(истина). - Если операторов должно быть несколько, тогда необходимо применять составной оператор.
- Условие пересчитывается каждый раз при входе в цикл.
- Непосредственно
условием
циклаwhile
может быть переменная или логическое выражение. - Операторы тела цикла
while
выполнятся только в том случае, если условие будет истинно, если условие ложно — они игнорируются, и программа продолжается с тех операторов, которые стоят уже после конструкции. Таким образом, это существенное отличие цикла с предусловием от цикла с постусловием.
Рассмотрим использование цикла while
в Паскале на решенном примере:
Пример: Печатать «ноль» указанное количество раз
Показать решение:
Pascal | PascalABC.NET | ||||
|
|
Задача 3. Ввести целое число и найти сумму его цифр.
Пример:
Введите целое число: 1234 Сумма цифр числа 1234 равна 10.
[Название файла: L3task3.pas
]
Задача 4. Вычислять с использованием цикла while квадратные корни из чисел 900, 893, 886, 879 и т.д. до тех пор, пока это можно делать.
[Название файла: L3task4.pas
]
Детальный разбор работы цикла While в Паскале рассмотрен в видеоуроке:
Пример: найти сумму всех элементов последовательности:
которые по модулю больше 0,001:
Алгоритм:
Блок-схема решения:
Блок-схема решения
Решение на Паскале:
Решение на Паскале
Задача 5: Вычислить сумму элементов следующей последовательности с точностью 0,001:
Результат: S = 1.157
[Название файла: L3task5.pas
]
Вложенные циклы в Паскале
Существует возможность использования вложенных циклов в Паскале, когда в теле одного цикла вместо оператора стоит другой цикл.
Важно: Главным обстоятельством во вложенных циклах является использование разных переменных для счетчиков внутреннего и внешнего циклов
Рассмотрим пример:
Пример: Вывести таблицу умножения, используя вложенные циклы в паскале.
Показать решение:
Pascal | PascalABC.NET | ||||
|
|
Произведение в Паскале
Точно также, как существует сумматор для сложения, для умножения в паскале тоже существует специальная конструкция:
Произведение вычисляется по рекуррентному выражению:
P=P*Y,
где P – промежуточные произведения
Y — сомножители
Рассмотрим пример вычисления факториала числа в Паскале с использованием цикла while
.
Пример цикла While в Паскале для вычисления факториала 10! (10!=1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
1 2 3 4 5 6 7 8 9 10 11 12 |
var fact, n : integer; begin fact := 1; {начальное значение факториала =0! } n := 1; {начальное значение для условия } while n<=10 do {условие } begin {начало тела конструкции с составным оператором } fact := fact*n; {вычисление факториала n! } n := n + 1 {n должно меняться в теле конструкции} end; {конец тела цикла } writeln(’10!= ’,fact); {вывод результата расчета } end. |
Здесь необходимо обратить внимание на то, что присваивание n := 1
стоит до цикла, если этого не сделать, то условие будет работать некорректно, так как переменная n
будет пуста.
Программа возведения в степень числа в Паскале
Для начала уточним, что есть формула вычисления степени на Паскале. Но мы не будем ее использовать, а разберем алгоритм решения задачи возведения в степень.
Для того чтобы возвести число в степень, его надо умножить само на себя ровно столько раз, чему равен показатель степени.
Таким образом, возведение числа n
в степень d
можно выразить так:
nd = n1 * n2 * n3 * … * nd
, где нижние индексы просто указывают очередное по счету число n
.
Еще необходимо учесть следующее:
- число в нулевой степени равняется
1
- если показатель степени отрицателен, т.е.
d < 0
, то задача решается по формуле:
nd = 1 / (n1 * n2 * n3 * … * nd)
Т.е., решая программу на Паскале, учитываем:
- в программе на языке Паскаль количество итераций (повторений) цикла
while
должно быть равно показателю степени числа по модулю; - если показатель степени — отрицательное число, то нужно впоследствии единицу разделить на результат.
Задача 6. Вычислить в Паскале степень числа, используя цикл while.
[Название файла: L3task6.pas
]
Задача 7. Дана последовательность вещественных чисел, признак завершения которой — число 0 (оно не считается элементом последовательности). Найти сумму всех положительных элементов этой последовательности.
Пример результата:
Введите член последовательности 4 Введите член последовательности -1 Введите член последовательности 5 Введите член последовательности 7 Введите член последовательности 0 Сумма положительных чисел = 16
[Название файла: L3task7.pas
]
как записать в паскале степень.
Андрей Павлов
Ученик
(97),
закрыт
10 лет назад
Сафин Станислав
Профи
(873)
12 лет назад
В паскале есть возведение в квадрат y:=sqr(x); и возведение любого положительного числа в любую степень y:=exp(ln(x)*n); где x,n-любые целые или вещественные числа, x>0. y – вещественное число. Для всех других случаев нужно придумывать свои функции.