
03.01.2010, 18:47
|
|
Познающий
Регистрация: 28.09.2008
Сообщений: 65
Провел на форуме: 152084
Репутация:
8
|
|
Сообщение от DJeFRY_RASH
Ребята не могли бы вы помочь с прогой, вся прога написана, всё сделано правильно, работает, но заминка в том, что уравнение для расчёта неправильное !
Код:
program xyz;
uses
SysUtils,
Windows;
label
EnterN;
var
N, i, z : Integer;
ans : Char;
//------------------------------------------------------------------------------
function Ru(str: String): String; // Функция перевода получаемой строки из ANSI-кодировки в OEM-кодировку DOS.
begin // Начало функции.
Result := ''; // Обнуляем результат.
if Length(str) > 0 then // Если получена непустая строка, то
begin // выполняем код:
SetLength(Result, Length(str)); // Устанавливаем размер для строки результата.
CharToOem(PChar(str), PChar(Result)); // Конвертируем строку в OEM-формат (модуль 'Windows.pas').
end; // Результирующая строка уже в новой кодировке.
end; // Конец функции.
//------------------------------------------------------------------------------
begin
WriteLn(Ru('Программа для вычисления факториала нечётных чисел:')); // Вывод информации на экран о назначении программы.
WriteLn('');
WriteLn(' N!!! = 1 x 3 x 5 ... x N ');
WriteLn('');
WriteLn(Ru('Выполнил ...')); // Вывод информации на экран об авторе программы.
WriteLn('');
Writeln('...');
EnterN: // Возврат в это место при ошибке или при повторном вводе данных.
WriteLn(''); // ...
Write(Ru('Введите нечётное число N, где N > 1 : ')); // ...
ReadLn(N); // Ввод числа Х.
if (N <= 1) or (N mod 2=0) then // Если Х меньше или равен 1, то
begin // выполнить код:
WriteLn(Ru('Произошла ошибка при вводе, попробуйте ещё раз.')); // - вывести сообщение об ошибке;
GoTo EnterN; // - вернуться к началу;
end; // ...
WriteLn(''); // ...
z := 1; // Обнуляем переменную результата.
for i := 1 to N do z := z*(i*2-1); // Увеличиваем переменную результата N раз.
WriteLn(Ru('Полученный результат: '+IntToStr(z))); // Отправить Х на обработку в функцию 'Formula()' и вывести результат.
WriteLn(''); // ...
Write(Ru('Вы хотите продолжить работу с программой? (Y/N) : ')); // Предложить продолжить работу с программой.
ReadLn(ans); // Получить согласие.
if (ans='Y') or (ans='y') or (ans=Ru('Н')) or (ans=Ru('н')) then GoTo EnterN; // Если согласие получено - возврат к началу.
end.
Когда запускаешь прогу, просит ввести N, если вводим 5, то получаем такой факториал 1х3х5х7х9, а нужно чтобы 5 была последней цифрой в этом подсчёте, то есть 1х3х5.
Перепробовал многие варианты, не выходит. кто может разобраться, помогите !
в цикле организуй проверку до вычисления факториала.
те
for i := 1 to N do
begin
if i mod 2 <> 0 then
z := z*i;
end;
ну и формулу чуть подредактировал. а то я не уловил зачем было i*2-1
вот в приципе и всё.
|
|
|