![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
liverpool85 |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте! Напишите программу, выводящую все трехзначные номера (от 001 до
999), сумма цифр которых равна N (значение N вводит пользователь). Мой код- var i,a,b,c,w:integer; И еще один - uses crt; Почему то не выводит все номера))) |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Во-первых, не надо вводить число от 0 до 999 (я о первой программе, если что). Максимальная сумма цифр = 27, вот и вводи число 0 .. 27.
Второе: зачем ты ввод пользователя воспринимаешь как строку? Вводишь число - так опиши n как Integer, тут же избавишься от необходимости преобразовывать постоянно Integer -> String (или обратно) для сравнения. Третье - у тебя не в том месте стоит begin. Надо поменять 6 и 7 строки местами. Ну, и четвертое - не то печатаешь. Надо напечатать число, а не сумму цифр, сумма тебе и так известна, ты ж ее сам и вводил. Итого: varЭто если не менять алгоритм решения, а править только реализацию. |
liverpool85 |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
![]() |
liverpool85 |
![]()
Сообщение
#4
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Упс, а нужно выводить не 1,2,3 а 001,002,003!!!
|
IUnknown |
![]()
Сообщение
#5
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата //чтобы на всех Паскалях шло - проще всего сделать так:if n=w then |
liverpool85 |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
var Теги ставь, пожалуйста Lapp |
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
- проще всего сделать так: if n=w then IUnknown, что-то это не похоже на тебя.. Не выспался? )) Почему не так: WriteLn(a,b,c);- ? ![]() 2 liverpool85: Не забывай инициализировать переменные - я имею в виду k в данном случае. Кстати, лучше ее сделать типа boolean, раз уж на используется для проверки. Переменная w - абсолютно лишняя, сумму можно находить прямо в if. Все числовые параметры задавай константами. Например: const И совет: по возможности избегай слова "таких" в выводе результатов. Пиши полностью, не ленись: WriteLn('Чисел с суммой цифр ',n,' в диапазоне от ',n1,' до ',n2,' не найдено'); Иначе ты запустишь эту прогу через неделю, и ни фига не поймешь, что это она такое сделала )). И твой преп тебе скажет спасибо - у него много студентов, много групп, много вариантов. Ему проще, когда видно, что делает прога. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
liverpool85 |
![]()
Сообщение
#8
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо за дельные советы!!
Подправил малость const |
Lapp |
![]()
Сообщение
#9
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Подправил малость Однако, приятно, когда советы не игнорируются! Тогда пойдем до конца )). Я тоже подправил, смотри комментарии по тексту. const -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
IUnknown |
![]()
Сообщение
#10
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата { я бы убрал диапазон.. ну, выдаст, что нет таких - что такого? это тоже результат } Таких не просто "нет", их "быть не может", так что я бы как раз и добавил диапазон:var, и если введено не то значение - пусть программа сразу вылетает (или обрабатывать ошибку до тех пор, пока не будет введено правильное значение, попадающее в интервал). var Правда, позволяет ли это PascalABC - сказать сложно (не помню, а проверять негде). Но всегда можно заставить вводить пользователя значение из заданного интервала. Хотя бы даже и так: var n : integer; P.S. Ну, или совсем просто: не делая никаких проверок при вводе - сразу же проверять введенное число на 1 .. 27. Если принадлежит этому интервалу - то что-то можно начинать вычислять. Иначе сразу выдавать сообщение, что, мол, "при таких входных данных - какие вы хотите получить результаты? Вот, вы их и получили. Ничего нет и быть не может" Сообщение отредактировано: IUnknown - 10.09.2011 9:21 |
liverpool85 |
![]()
Сообщение
#11
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Если делать согласно последнему комменту, то отпадает потребность в булеан :
const |
-Lapp- |
![]()
Сообщение
#12
|
Гость ![]() |
Таких не просто "нет", их "быть не может", так что я бы как раз и добавил диапазон: Немного странно мне это.. 27 - это же жесткая привязка к диапазону. А завтра преп скажет: сделай мне для диапазона 0000 - 9999. Менять 27 на 36? Хорошо, а если скажет от 015 до 456? Если 27 появляется в программе и зависит от диапазона - оно должно вычисляться по диапазону. А как вычислять для диапазона 03 - 12? Да вот так и вычислять - прогнать через цикл.. Предложи способ вычисления диапазона ввода для произвольного диапазона чисел - отстану ![]() |
sheka |
![]()
Сообщение
#13
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Цитата привыкай ставить begin в конце строки А это еще почему? |
-TarasBer- |
![]()
Сообщение
#14
|
Гость ![]() |
Потому что если строка начинается с ключевого слова (if,for,while), то это слово и так выглядит ярко, оно отлично (в паре с закрывающим ендом) выделяет блок кода, поэтому лишний раз переносить бегин не надо.
А если его переносить, то будут отвратительные заборы из ключевых слов, долгое смотрение на которые может привести к эпилепсии. |
liverpool85 |
![]()
Сообщение
#15
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Потому что если строка начинается с ключевого слова (if,for,while), то это слово и так выглядит ярко, оно отлично (в паре с закрывающим ендом) выделяет блок кода, поэтому лишний раз переносить бегин не надо. А если его переносить, то будут отвратительные заборы из ключевых слов, долгое смотрение на которые может привести к эпилепсии. ![]() |
Lapp |
![]()
Сообщение
#16
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
А это еще почему? лучше 1 раз попробовать, чем 10 раз спросить ))Добавлено через 7 мин. liverpool85, со сдвигами у тебя еще бардак.. const Даже если вносишь заведомо врЕменное изменение в прогу - все равно не ленись форматировать. Лучше сдвинуть нескобко раз туда-сюда, чем оставить неправильно и запутаться в двух строчках. И уж тем более, если показываешь свой код другим.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo877 |
![]()
Сообщение
#17
|
Гость ![]() |
Цитата лучше 1 раз попробовать, чем 10 раз спросить )) Пробовали. Вернулись к варианту исходников VCL, то естьif cond then Цитата лишний раз переносить бегин не надо. Лично мне гораздо проще читать исходники той же VCL, чем FPC-шные (и Лазарусовские, кстати) исходники, где begin-ы в основном не переносятся А если его переносить, то будут отвратительные заборы из ключевых слов, долгое смотрение на которые может привести к эпилепсии. ![]() |
liverpool85 |
![]()
Сообщение
#18
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Огромное спасибо всем!
|
Гость |
![]() ![]()
Сообщение
#19
|
Гость ![]() |
Спасибо за дельные советы!! Подправил малость const |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 9:16 |