![]() |
|
Модераторы: bsa |
![]()
|
|
| lyubov17 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 13.10.2013 Репутация: нет Всего: нет |
Здравствуйте! Напишите, пожалуйста, как можно подробнее, комментарии к программам, чтобы пошагово понять, что к чему, и как работают эти программы. Заранее большое спасибо!
1) Определить, совершенное ли число
2) Определить, счастливый билет или нет
3) Разделить число на цифры
Модератор: не забываем пользоваться кнопочкой "Код" Это сообщение отредактировал(а) bsa - 11.11.2014, 01:08 |
||||||
|
|||||||
| feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Давайте попробуем с первой программой. Все остальные делаются аналогично. Включаем в текст программы заголовочный файл stdio.h. В заголовочных файлах объявляются константы и функции, которые используются в программе. В данном случае в stdio.h объявляются функции printf() и scanf(), которыми мы будем пользоваться. Так же мы в программе вызываем библиотечную функцию setlocale() и используем константу LC_ALL, но заголовочный файл locale.h, в котором они объявлены, мы в текст программы не включаем, что не позволит нам скомпилировать программу. Заголовочный файл iostream, который здесь используется вместо locale.h, предназначен для языка программирования C++ (а у нас, вроде, только C). Выполнение скомпилированной программы начинается с функции main(). Это так называемая точка входа в программу. Вызываем функцию setlocale(). Этот вызов позволит нам печатать на консоль по-русски. Здесь мы объявляем переменную x. Затем выводим на консоль приглашение ввести значение для этой переменной, затем с помощью функции scanf считываем с консоли значение для этой переменной. Здесь мы объявляем переменные i и sum, и заодно задаем им начальные значения (инициализируем). i у нас будет служить пробным делителем числа x, а sum - суммой найденных делителей числа x. Перебираем в цикле все возможные делители для числа x в диапазоне от 1 до (x-1). Если остаток от деления числа x на число i есть ноль (то есть число x делится на число i нацело), то тогда i является делителем числа x, и мы этот делитель добавляем к числу sum. Завершаем тело цикла увеличением значения предполагаемого делителя i на единицу, что и позволяет нам перебрать все разумные значения для предполагаемого делителя в диапазоне от 1 до (x-1).
Теперь, когда у нас есть сумма всех делителей (sum) числа x, мы можем сравнить её с самим числом x. Если значения совпадают, что печатаем на консоль, что число - совершенное. Если же нет, то сообщаем, что число не совершенное. Завершаем тело функции main(). Правда, было бы неплохо вернуть из функции какое-нибудь значение (обычно, это 0), ибо мы объявили main() как возвращающую знаковое целочисленное значение функцию. Это значение, кстати, будет являться кодом завершения (для всей) программы, но в C (не в C++) именно для функции main() (и никакой другой) разрешено не писать в конце
ЗЫ Остальные программы - самостоятельно. ЗЗЫ Такое впечатление, что программа компилилась как C++-программа, а не C-программа. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Гм, прошу прощения, я вот почему-то решил, что C++ таких вольностей не позволяет. Видимо, сказывается "C как подмножество C++". Тем более приведенная программа выглядит написанной под C++ (пусть и с сишными printf/scanf). -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Если язык программирования "C", переменную нужно объявлять в начале функции, до setLocale(). |
|||
|
||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
||||
|
||||
| ajtakt |
|
|||
|
Unregistered |
Модератор: Сообщение скрыто. |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Если я не ошибаюсь, в C99 переменные можно объявлять где угодно... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Ну это уж точно не "C":
Думаю, ТС пишет на C++, просто в загловке темы написал "Си" |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |