Составим программу вычисления степени числа а на языке программирования Паскаль АВС:
Program STEPEN;
Var p,a,n,i:integer;
Begin
p:=1; n:=7;
writeln (‘a=’);
read (a)
for i:=1 to n do p:=p*a;
write (‘степень числа а = ’, р);
end.
Пояснения
В практике программирования часто складываются ситуации, когда одну и ту же группу операторов, реализующих определенную цель, требуется повторить без изменений в нескольких местах программы. Для избавления от столь нерациональной траты времени было предложено использовать подпрограммы.
Подпрограмма – именованная, логически законченная группа операторов языка, которую можно вызвать для выполнения любое количество раз из различных мест программы. В языке Паскаль АВС существует 2 вида подпрограмм: процедуры и функции.
Главное отличие процедур от функций заключается в том, что результатом последних является одно единственное значение.
Procedure a17 (a:real; b,c:real; var x1,x2:real: var k:integer);
Арифметические операции. Стандартные функции языка Паскаль. Быстрый курс программирования Pascal ABC
Формальные параметры отделяются точкой с запятой. После заголовка идут разделы описаний (констант, типов, переменных, процедур и функций, используемых в процедуре) и операторы языка Паскаль АВС, реализующие алгоритм процедуры. Формальные параметры нельзя описывать в разделе описания процедуры.
Для обращения к процедуре необходимо использовать оператор вызова процедуры. Он имеет вид:
STEPEN (b, m, j, h);
Фактические параметры в списке отделяются друг от друга запятой. Механизм применения формальных – фактических параметров обеспечивает замену формальных параметров фактическими, что позволяет выполнять процедуру с различными данными. Между фактическими параметрами в операторе вызова процедуры и формальными параметрами в заголовке процедуры устанавливается взаимно однозначное соответствие.
Скачать:
Источник: nsportal.ru
Алгоритм вычисления функции F(n), как составить программу в Паскаль?
Алгоритм вычисления функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = F(n / 3) – 1, когда n >= 2 и делится на 3,
F(n) = F(n – 1) + 17 , когда n >= 2 и не делится на 3.
Назовите количество значений n на отрезке [1;100000], для которых F(n) равно 43.
комментировать
в избранное
mycha tik [29.3K]
2 месяца назад
Язык программирования Паскаль я изучал ещё на уроках информатики и больше нигде его не применял, но попробую решить эту задачу.
Сначала проверяем, является ли n делителем 3, используя оператор mod, который возвращает остаток от деления, а также проверяем, что n больше или равно 2.
Далее перебираем все значения n на отрезке [1; 100000] и вызываем функцию F(n) для каждого n. Если значение F(n) равно 43, то увеличиваем счётчик count на 1.
Уроки на языке Pascal. Урок 16. Процедуры и функции.
В конце выводим количество значений n на отрезке [1; 100000], для которых F(n) = 43.
К сожалению, проверить работоспособность кода не могу, но надеюсь что не всё забыл и программа верна.
система выбрала этот ответ лучшим
комментировать
в избранное ссылка отблагодарить
Мария Л23 [11.2K]
2 месяца назад
Условие зачем-то мудрёное, с рекурсивным функциями. Такое довольно сложно проверить, потому что трудно вычислить вручную.
Судя по всему, значений функции равных 43 нет.
Есть ещё одна проблема. 100000 слишком большое число. В целый тип данных, который используется в цикле for такое не помещается. Использовать longint не получается (по крайней мере в онлайн компиляторе на телефоне). Поэтому, если нужен именно этот интервал, то надо заморачиваться с двумя циклами.
В приведенный код добавлен вывод значения функции, чтобы хоть как-то убедиться в отсутствии значений 43. Ну, и количество итераций на порядок уменьшено.
Источник: www.bolshoyvopros.ru
Программа вычисления функции на паскале
Nickolay.info. Алгоритмы. Некоторые математические расчёты на Паскале
Как известно, ядро Паскаля предельно компактно, и многие математические функции в модуле System просто отсутствуют. Поэтому у людей, изучающих основы программирования именно на этом языке, типовые математические расчёты зачастую вызывают проблемы. Далее приводятся пути решения наиболее типичных из этих проблем.
Возведение в произвольную степень на Паскале
Требуется вычислить значение с = a b . В зависимости от значений основания a и показателя степени b , вычисление степени может быть реализовано по-разному.
Если a > 0 , а b может принимать произвольные вещественные значения, используем известную формулу a b = exp (b * ln a) :
c:=exp(b*ln(a));
Если b — целое число (вообще говоря, «не слишком большое» по модулю), а a — любое (не равное нулю при b < 0 ), возведение в степень может быть реализовано с помощью цикла:
var i:integer; c:=1; for i:=1 to abs(b) do c:=c*a; if b<0 then c:=1/c;
Для целого b и не равного нулю a выгоднее считать с помощью экспоненты и логарифма, не забывая о том, что не существует логарифмов от отрицательных чисел:
c:=exp(b*ln(abs(a))); if (odd(b)=true) and (a
Вычисление корня произвольной степени на Паскале
Стандартная функция sqrt умеет извлекать только квадратный корень.
function root(a:real;n:word):real; var r: real; begin r:=exp(ln(abs(a))/n); if a end;
Вычисление логарифмов на Паскале
Стандартная функция ln вычисляет только натуральный логарифм. Для вычисления логарифмов по другим основаниям можно применить формулу log a b = ln b / ln a :
c:=ln(b)/ln(a);
В частности, для вычисления десятичного логарифма lg b можно записать:
c:=ln(b)/ln(10);
Вычисление обратных тригонометрических функций (арксинусов и арккосинусов) на Паскале
В Паскале имеется стандартная функция arctan для вычисления арктангенса.
Другие обратные тригонометрические функции могут быть выражены через неё с помощью формул тригонометрии.
if x=1 then y:=pi/2 else if x=-1 then y:=-pi/2 else y:=arctan(x/sqrt(1-sqr(x)));
y:=2*arctan(x/(1+sqrt(1-sqr(x))));
на практике следует помнить о возможных погрешностях при сравнении вещественных чисел (глава учебника, п.7.2).
if x=1 then z:=0 else if x=-1 then z:=pi else z:=pi/2-arctan(x/sqrt(1-sqr(x)));
z:=pi/2-2*arctan(x/(1+sqrt(1-sqr(x))));
Вычисление полярных углов на Паскале
Полярным углом точки с координатами (x,y) , отличной от начала координат, называют угол между положительным направлением оси Ox и направлением из начала координат на данную точку. При этом угол отсчитывается против часовой стрелки.
Строго говоря, полярный угол не всегда равен arctg (y/x) , это верно лишь при x > 0 . Кроме того, при делении большого значения y на малое x возможно переполнение. Показанная ниже функция вычисляет полярный угол fi , лежащий в промежутке от -pi до +pi , для любой точки с координатами (x,y) , не совпадающей с началом координат:
function fi(x:real; y:real):real; var f:real; begin if abs(x)>abs(y) then begin f:=arctan(y/x); if x>0 then fi:=f else if y>=0 then fi:=f+pi else fi:=f-pi end else begin f:=arctan(x/y); if y>0 then fi:=pi/2-f else fi:=-pi/2-f end end;
Проблема с приведением типов на Паскале
Начинающие «паскалисты» нередко не понимают строгой типизированности этого языка, из-за чего находят в нём несуществующие «баги». Вот простейший пример.
var a,b:integer; r:longint; begin a:=1000; b:=200; r:=a*b; writeln (r); end.
Эта программа выдаст отнюдь не 200000, как может показаться. Ответ будет равен 3392 (результат переполнения). Никакого бага нет. Тип выражения в Паскале определяется только типом входящих в него переменных, но не типом переменной, куда записывается результат. То есть, мы вычислили с переполнением произведение двух переменных типа Integer , а потом «испорченный» результат переписали в переменную типа Longint . ничего не изменит и
r:=Longint(a*b);
Здесь тоже сначала вычислен результат с переполнением, затем преобразован к типу Longint . А вот
r:=Longint(a)*b;
рулит, получите свои 200000 🙂 Указанная ошибка часто встречается в программах начинающих. Чтобы её не повторять, помните — выражение в Паскале должно быть приведено к нужному типу в процессе его вычисления, а не после его окончания или при присваивании.
Источник: nickolay.info
