![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
Вячеслав Л. |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 227 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Какие ограничения нужно установить для числа n в программе, вычисляющей факториал этого числа n? Имею в виду, что нужно написать после readln(n), чтобы факториал с точки зрения алгебры вычислялся правильно?
Как указать, что число должно быть неотрицательное, натуральное и. т. д.? Подскажите, пожалуйста как это должно выглядеть? -------------------- Само знание есть сила
|
kosyak |
![]()
Сообщение
#2
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: ![]() ![]() ![]() |
Какие ограничения нужно установить для числа n в программе, вычисляющей факториал этого числа n? Имею в виду, что нужно написать после readln(n), чтобы факториал с точки зрения алгебры вычислялся правильно? Как указать, что число должно быть неотрицательное, натуральное и. т. д.? Подскажите, пожалуйста как это должно выглядеть? Ну то что число неотрицательное проверить проще простова: Код if n>=0 then ... Если хочешь сделать защиту от дурака, то пусть пользователь вводит не longint, а String. И потом проверяй на правильность ввода. Затем приведи к целому типу. Вот пример на проверку. Может чо нито забыл проверить, но для начла хоть так: Код {Ввод числа} write('Введите число: '); readln(ns); val(ns,n,kod); {..........} {Проверка на правильность ввода колличества строк} if (frac(n)=0) and (n>=1) and (n<=stmax) and (kod=0) then {Все хорошо, делаем что надо} Сообщение отредактировано: kosyak - 27.09.2009 11:56 |
andriano |
![]()
Сообщение
#3
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Для чистоты я бы описал n как целое и убрал его проверку на наличие дробной части (достаточно проверки на kod=0).
Еще хочу обратить внимание Вячеслава на сравнение с stmax, величина которого зависит от типа возвращаемого функцией факториала аргумента, и должно быть таким, чтобы в процессе вычисления функции не происходило переполнения. А у факториала это будет происходить уже при сравнительно малых n. |
Вячеслав Л. |
![]()
Сообщение
#4
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 227 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Зачем надо присваивать String, необходимо же вычисолять факториал числа а тип STRING используется для текста, насколько я знаю?
Цитата val(ns,n,kod); {..........} Что это значит? Я не спец, объясни пожалуйста. Цитата (frac(n)=0) Этот оператор что делает? Цитата Для чистоты я бы описал n как целое и убрал его проверку на наличие дробной части (достаточно проверки на kod=0). Еще хочу обратить внимание Вячеслава на сравнение с stmax, величина которого зависит от типа возвращаемого функцией факториала аргумента, и должно быть таким, чтобы в процессе вычисления функции не происходило переполнения. Напиши пожалуйста как это будет выглядеть в паскале. Я тебя понял, но могу ошибиться. -------------------- Само знание есть сила
|
RathaR |
![]()
Сообщение
#5
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 346 Пол: Мужской Реальное имя: Иван Репутация: ![]() ![]() ![]() |
Зачем надо присваивать String, необходимо же вычисолять факториал числа а тип STRING используется для текста, насколько я знаю? Так то оно так, но при вычислении факториала больше 12, число в результате выйдет за пределы типа Integer, тоесть больше 35000, а при N>16 ты уже не сможеш использовать даже Longint, поэтому при вычислении большых значений факториала используют тип стринг, в котором можжно хранить число длинной до 255 символов в виде текста. Но алгоритм там посложнее... Цитата Что это значит? Я не спец, объясни пожалуйста. val(s,n,kod); - это функция которая преобразовывает строчное значение в его числовое представление - смотри справку паскаля. S - переменная строчного типа(состоит только из цифр), N - переменная типа Real, или целого типа, Kod - переменная типа Integer - показывает код ошибки, если неудалось преобразовать строку в число Цитата Этот оператор что делает? (frac(n)=0) - возвращает дробную часть аргумента, проверяет число целое или нет вобщем. Сообщение отредактировано: RathaR - 27.09.2009 13:15 -------------------- Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик! Я - системный аналитик! |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата Зачем надо присваивать String, необходимо же вычисолять факториал числа а тип STRING используется для текста, насколько я знаю? Выше написано... Это защита от некорректного ввода данных. Мало ли, что пользователь введет в ответ на твой запрос... Вот чтобы отсеять любой неправильный ввод, придется читать ответ пользователя в строку, а потом ее уже конвертировать в число (Val).Цитата Этот оператор что делает? У тебя Паскаль установлен? Открой справку и почитай, чтобы не было кучи вопросов "а что это? а почему так?". Подведи курсов к слову Val (или Frac), и нажми Ctrl+F1.Цитата Напиши пожалуйста как это будет выглядеть в паскале. Я тебя понял, но могу ошибиться. Ну вот если понял, то напиши... Ошибешься - тогда будем смотреть где.Добавлено через 3 мин. Цитата а при N>16 ты уже не сможеш использовать даже Longint А что, при N=13 ты LongInt можешь использовать? Попробуй в таком случае, узнаешь много интересного. |
RathaR |
![]()
Сообщение
#7
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 346 Пол: Мужской Реальное имя: Иван Репутация: ![]() ![]() ![]() |
Цитата А что, при N=13 ты LongInt можешь использовать? Попробуй в таком случае, узнаешь много интересного. Каюсь... попутал, недосчитал ![]() -------------------- Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик! Я - системный аналитик! |
Вячеслав Л. |
![]()
Сообщение
#8
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 227 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Ага спасибо всем
![]() -------------------- Само знание есть сила
|
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 1:26 |