Сколько различных сообщений длиной 4 знака можно записать с алфавита к, е, а, ц, ч, с если слова должны начинаться с гласной буквы и заканчиваться на согласную?
Будем считать, что х может быть любым действительным числом var x, y: real BEGIN write ("Vvedite x: "); readln (x); if (x < 0) then y = x + 1/3*exp(3*ln(abs(x))) - 1/5*exp(5*ln(abs(x))) - 1/7*exp(7*ln(abs(x))); if (x = 0) then y = 0; if (x > 0) then y = x - 1/3*exp(3*ln(abs(x))) + 1/5*exp(5*ln(abs(x))) + 1/7*exp(7*ln(abs(x))); writeln (y); END. Тут дело вот в чем. В классическом Паскале почему-то нет операции возведения в степень, поэтому приходится извращаться по формуле a^b = e^( ln(a^b) ) = e^( b*ln |a| ) К сожалению, формула работает не всегда. С отрицательными x в нечетной степени она будет давать неверный знак. Поэтому я и добавил проверку if (x < 0). В Delphi и в некоторых реализациях Паскаля есть функция Power или Pow, но это редкость.
Попробую. Начало Ввод количества номиналов N Объявляем массивов X(N), Y(N) Цикл по i от 1 до N Ввод очередного номинала X(i) Конец цикла по i Ввод суммы для выдачи S Подпрограмма сортировки массива X(N) по возрастанию. Например, пузырьковой сортировкой. k = 0 ' k - это количество банкнот Цикл, пока S > 0 Если S < X(1), то ' Если остаток меньше самого маленького номинала S = 0: k = -1 ' то выдать полную сумму невозможно Выход сразу из цикла по S Конец Если i = N Цикл, пока X(i) > S i = i - 1 Конец цикла по X(i) Y(k) = X(i) ' записываем очередную банкноту в массив Y(N) S = S - X(i) ' определяем остаток k = k + 1 ' увеличиваем счетчик банкнот Конец цикла по S Если k = 0, то k = -1 ' выдать сумму не смогли Вывод k Если k > 0, то ' Если сумму можно выдать Цикл по i от 1 до k Вывод Y(i) + " " Конец цикла по i Конец Если Конец
Алгоритм пузырьковой сортировки: Начало подпрограммы F = True ' Это булева переменная - признак успешности сортировки Цикл вечный без всяких условий Если F = True, то F = False Цикл по i от 1 до N-1 Если X(i) > X(i+1), то ' если два соседних числа не отсортированы Q = X(i) : X(i) = X(i+1) : X(i+1) = Q ' меняем местами эти числа F = True Конец Если Конец цикла по i Иначе Выход из Цикла ' Если F = False Конец Если Конец вечного Цикла Конец подпрограммы
var x, y: real
BEGIN
write ("Vvedite x: "); readln (x);
if (x < 0) then
y = x + 1/3*exp(3*ln(abs(x))) - 1/5*exp(5*ln(abs(x))) - 1/7*exp(7*ln(abs(x)));
if (x = 0) then y = 0;
if (x > 0) then
y = x - 1/3*exp(3*ln(abs(x))) + 1/5*exp(5*ln(abs(x))) + 1/7*exp(7*ln(abs(x)));
writeln (y);
END.
Тут дело вот в чем. В классическом Паскале почему-то нет операции возведения в степень, поэтому приходится извращаться по формуле
a^b = e^( ln(a^b) ) = e^( b*ln |a| )
К сожалению, формула работает не всегда. С отрицательными x в нечетной степени она будет давать неверный знак. Поэтому я и добавил проверку if (x < 0).
В Delphi и в некоторых реализациях Паскаля есть функция Power или Pow, но это редкость.