Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Комментарии к программам на Си 
:(
    Опции темы
lyubov17
Дата 5.11.2014, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.10.2013

Репутация: нет
Всего: нет



Здравствуйте! Напишите, пожалуйста, как можно подробнее, комментарии к программам, чтобы пошагово понять, что к чему, и как работают эти программы. Заранее большое спасибо! 
 1) Определить, совершенное ли число

 
Код
#include <stdio.h>
 #include <iostream>
 int main()
 {
 setlocale(LC_ALL,"russian");

 int x;
 printf("Введите число: ");
 scanf("%d",&x);

 int i=1,sum = 0;

 while( i < x ) 
 {
 if( x%i == 0 )
 sum +=i;
 i++;
 }
 if( sum == x )
 printf("Число совершенное!\n");
 else
 printf("Число не совершенное!\n");

 }


 2) Определить, счастливый билет или нет

Код
 #include <stdio.h>
 #include <iostream>
 int main()
 {
 setlocale(LC_ALL,"russian");

 int x;
 printf("Введите число: ");
 scanf("%d",&x);

 int x2=x , ost , s1=0 , s2=0 , podschet = 0;
 while( x2 != 0 ) 
 {
 ost = x2%10;
 if( podschet < 3 ) 
 s1 +=ost;
 else 
 s2+=ost;
 x2 = x2/10;
 podschet++;
 }
 if( s1 == s2 )
 printf("Поздравляем , билет счастливый!\n");
 else
 printf("Билет не счастливый! \n");

 }


 3) Разделить число на цифры
Код
 #include <stdio.h>
 #include <iostream>
 int main()
 {
 setlocale(LC_ALL,"russian");

 int n;
 printf("Введите длинну числа <= 10\n");
 scanf("%d",&n);
 int x;
 printf("Введите число x длинной %d : ",n);
 scanf("%d",&x);

 int *array = new int[n];
 int i=0,ost;

 while(x>0) 
 {
 ost = x%10;
 array[i] = ost;
 x=x/10;
 i++;
 }
 int j;
 for(i=n-1,j=1;i>=0;i--,j++)
 printf("%d-я цифра = %d\n",j,array[i]);

 }


Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 11.11.2014, 01:08
PM MAIL   Вверх
feodorv
Дата 5.11.2014, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
Напишите, пожалуйста, как можно подробнее, комментарии к программам, чтобы пошагово понять, что к чему, и как работают эти программы. Заранее большое спасибо! 

Давайте попробуем с первой программой. Все остальные делаются аналогично.

Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
#include <stdio.h>

Включаем в текст программы заголовочный файл stdio.h. В заголовочных файлах объявляются константы и функции, которые используются в программе. В данном случае в stdio.h объявляются функции printf() и scanf(), которыми мы будем пользоваться. Так же мы в программе вызываем библиотечную функцию setlocale() и используем константу LC_ALL, но заголовочный файл locale.h, в котором они объявлены, мы в текст программы не включаем, что не позволит нам скомпилировать программу.

Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
#include <iostream>

Заголовочный файл iostream, который здесь используется вместо locale.h, предназначен  для языка программирования C++ (а у нас, вроде, только C).

 
Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
int main()
 {

Выполнение скомпилированной программы начинается с функции main(). Это так называемая точка входа в программу. 

Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
 setlocale(LC_ALL,"russian");

Вызываем функцию setlocale(). Этот вызов позволит нам печатать на консоль по-русски.

Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
 int x;
 printf("Введите число: ");
 scanf("%d",&x);

Здесь мы объявляем переменную x. Затем выводим на консоль приглашение ввести значение для этой переменной, затем с помощью функции scanf считываем с консоли значение для этой переменной.

Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
 int i=1,sum = 0;

Здесь мы объявляем переменные i и sum, и заодно задаем им начальные значения (инициализируем). i у нас будет служить пробным делителем числа x, а sum - суммой найденных делителей числа x.

Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
 while( i < x ) 
 {

Перебираем в цикле все возможные делители для числа x в диапазоне от 1 до (x-1).

Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
 if( x%i == 0 ) sum +=i;

Если остаток от деления числа x на число i есть ноль (то есть число x делится на число i нацело), то тогда i является делителем числа x, и мы этот делитель добавляем к числу sum.

Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
 i++;
 }

Завершаем тело цикла увеличением значения предполагаемого делителя i на единицу, что и позволяет нам перебрать все разумные значения для предполагаемого делителя в диапазоне от 1 до (x-1).


Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
 if( sum == x )
 printf("Число совершенное!\n");
 else
 printf("Число не совершенное!\n");

Теперь, когда у нас есть сумма всех делителей (sum) числа x, мы можем сравнить её с самим числом x. Если значения совпадают, что печатаем на консоль, что число - совершенное. Если же нет, то сообщаем, что число не совершенное.

Цитата(lyubov17 @  5.11.2014,  21:05 Найти цитируемый пост)
 }

Завершаем тело функции main(). Правда, было бы неплохо вернуть из функции какое-нибудь значение (обычно, это 0), ибо мы объявили main() как возвращающую знаковое целочисленное значение функцию. Это значение, кстати, будет являться кодом завершения (для всей) программы, но в C (не в C++) именно для функции main() (и никакой другой) разрешено не писать в конце
Код
return 0;
, (хотя, конечно, лучше всё же этот оператор написать в явном виде).


ЗЫ Остальные программы - самостоятельно.
ЗЗЫ Такое впечатление, что программа компилилась как C++-программа, а не C-программа.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
baldina
Дата 6.11.2014, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(feodorv @  5.11.2014,  23:38 Найти цитируемый пост)
но в C (не в C++) именно для функции main() (и никакой другой) разрешено не писать в конце

в C++ разрешено. причем соответствует return 0, а не возвращает мусор как в C
PM MAIL   Вверх
feodorv
Дата 6.11.2014, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(baldina @  6.11.2014,  11:21 Найти цитируемый пост)
в C++ разрешено. причем соответствует return 0, а не возвращает мусор как в C 

Гм, прошу прощения, я вот почему-то решил, что C++ таких вольностей не позволяет. Видимо, сказывается "C как подмножество C++". 

Тем более приведенная программа выглядит написанной под C++ (пусть и с сишными printf/scanf).


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
math64
Дата 7.11.2014, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Код

int main()
 {
 setlocale(LC_ALL,"russian");

 int x;

Если язык программирования "C", переменную нужно объявлять в начале функции, до setLocale().
PM   Вверх
sQu1rr
Дата 7.11.2014, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 3
Всего: 13



Цитата(feodorv @  6.11.2014,  19:34 Найти цитируемый пост)
приведенная программа выглядит написанной под C++

Цитата(math64 @  7.11.2014,  11:09 Найти цитируемый пост)
Если язык программирования "C"

Нет, на правда, ктонибудь на велюченные хедеры смотрел? <iostream> там например?

PM MAIL Skype GTalk   Вверх
ajtakt
Дата 7.11.2014, 12:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Модератор: Сообщение скрыто.

  Вверх
feodorv
Дата 7.11.2014, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(math64 @  7.11.2014,  11:09 Найти цитируемый пост)
Если язык программирования "C", переменную нужно объявлять в начале функции, до setLocale(). 

Если я не ошибаюсь, в C99 переменные можно объявлять где угодно...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
math64
Дата 10.11.2014, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Ну это уж точно не "C":
Код

int *array = new int[n];

Думаю, ТС пишет на C++, просто в загловке темы написал "Си"
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.