|
Результаты опроса: Нужна ли публикация уроков по C++ ? | |||
Да | 29 | 93.55% | |
Нет | 2 | 6.45% | |
Голосовавшие: 31. Вы ещё не голосовали в этом опросе |
|
Опции темы | Опции просмотра |
17.04.2013, 01:56 | #11 (permalink) | ||
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
При запуске программы из командной строки, ей можно передавать дополнительные параметры в текстовом виде. Например, следующая команда Цитата:
Эти параметры описываются, как аргументы функции main(). Первый аргумент — это количество параметров, которые были переданы программе. В качестве первого аргумента всегда передается название самого файла программы. Второй аргумент — это массив, хранящий все остальные параметры. Пример 1.1 Цитата:
Для получения числовых данных из входных параметров, можно использовать функции atoi и atof. |
||
17.04.2013, 01:56 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
По этим ссылкам содержаться темы, которые по содержанию схожи с вашей Простые уроки по HTML Жучок для начинающих Уроки CSS Аэрография для начинающих Набор радиокомпонентов для начинающих |
23.04.2013, 00:18 | #12 (permalink) | |||||||||
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
Классы в C++ — урок 10
Весь реальный мир состоит из объектов. Города состоят из районов, в каждом районе есть свои названия улиц, на каждой улице находятся жилые дома, которые также состоят из объектов. Практически любой материальный предмет можно представить в виде совокупности объектов, из которых он состоит. Допустим, что нам нужно написать программу для учета успеваемости студентов. Можно представить группу студентов, как класс языка C++. Назовем его Students. Основные понятия Модификаторы доступа public и private Программа учета успеваемости студентов Отделение данных от логики Создание объекта через указатель Конструктор и деструктор класса Цитата:
Классы в программировании состоят из свойств и методов. Свойства — это любые данные, которыми можно характеризовать объект класса. В нашем случае, объектом класса является студент, а его свойствами — имя, фамилия, оценки и средний балл. У каждого студента есть имя — name и фамилия last_name . Также, у него есть промежуточные оценки за весь семестр. Эти оценки мы будем записывать в целочисленный массив из пяти элементов. После того, как все пять оценок будут проставлены, определим средний балл успеваемости студента за весь семестр — свойство average_ball. Методы — это функции, которые могут выполнять какие-либо действия над данными (свойствами) класса. Добавим в наш класс функцию calculate_average_ball(), которая будет определять средний балл успеваемости ученика. Методы класса — это его функции. Свойства класса — его переменные. Цитата:
Модификаторы доступа public и private Все свойства и методы классов имеют права доступа. По умолчанию, все содержимое класса является доступным для чтения и записи только для него самого. Для того, чтобы разрешить доступ к данным класса извне, используют модификатор доступа public. Все функции и переменные, которые находятся после модификатора public, становятся доступными из всех частей программы. Закрытые данные класса размещаются после модификатора доступа private:. Если отсутствует модификатор public, то все функции и переменные, по умолчанию являются закрытыми (как в первом примере). Обычно, приватными делают все свойства класса, а публичными — его методы. Все действия с закрытыми свойствами класса реализуются через его методы. Рассмотрим следующий код. Цитата:
Функция set_average_ball() принимает средний балл в качестве параметра и присваивает его значение закрытой переменной average_ball. Функция get_average_ball() просто возвращает значение этой переменной. Программа учета успеваемости студентов Создадим программу, которая будет заниматься учетом успеваемости студентов в группе. Создайте заголовочный файл students.h, в котором будет находиться класс Students. Цитата:
Функция set_scores() принимает массив с промежуточными оценками и сохраняет их в приватную переменную int scores[5]. Теперь создайте файл main.cpp со следующим содержимым. Цитата:
Объект класса Students характеризует конкретного студента. Если мы захотим выставить оценки всем ученикам в группе, то будем создавать новый объект для каждого из них. Использование классов очень хорошо подходит для описания объектов реального мира. После создания объекта student, мы вводим с клавиатуры фамилию, имя и промежуточные оценки для конкретного ученика. Пускай это будет Вася Пупкин, у которого есть пять оценок за семестр — две тройки, две четверки и одна пятерка. Введенные данные мы передаем set-функциям, которые присваивают их закрытым переменным класса. После того, как были введены промежуточные оценки, мы высчитываем средний балл на основе этих оценок, а затем сохраняем это значение в закрытом свойстве average_ball, с помощью функции set_average_ball(). Скомпилируйте и запустите программу. Отделение данных от логики Вынесем реализацию всех методов класса в отдельный файл students.cpp. Цитата:
Над крупными проектами обычно работает несколько программистов. Каждый из них занимается написанием определенной части продукта. В таких масштабах кода, одному человеку практически нереально запомнить, как работает каждая из внутренних функций проекта. В нашей программе, мы используем оператор потокового вывода cout, не задумываясь о том, как он реализован на низком уровне. Кроме того, отделение данных от логики является хорошим тоном программирования. В начале обучения мы говорили о пространствах имен (namespaces). Каждый класс в C++ использует свое пространство имен. Это сделано для того, чтобы избежать конфликтов при именовании переменных и функций. В файле students.cpp мы используем оператор принадлежности :: перед именем каждой функции. Это делается для того, чтобы указать компилятору, что эти функции принадлежат классу Students. Создание объекта через указатель При создании объекта, лучше не копировать память для него, а выделять ее в в куче с помощью указателя. И освобождать ее после того, как мы закончили работу с объектом. Реализуем это в нашей программе, немного изменив содержимое файла main.cpp. Цитата:
Конструктор и деструктор класса Конструктор класса — это специальная функция, которая автоматически вызывается сразу после создания объекта этого класса. Он не имеет типа возвращаемого значения и должен называться также, как класс, в котором он находится. По умолчанию, заполним двойками массив с промежуточными оценками студента. Цитата:
Деструктор класса вызывается при уничтожении объекта. Имя деструктора аналогично имени конструктора, только в начале ставится знак тильды ~. Деструктор не имеет входных параметров. Цитата:
|
|||||||||
31.05.2013, 13:01 | #13 (permalink) |
404
Регистрация: 10.01.2010
Сообщений: 1,749
Записей в дневнике: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3868
|
Рекурсия в С++ - Урок 11
Рекурсия это повторение элемента, подобного самому себе. Рассмотрим на примере вычисления факториала. Факториал - произведение чисел от 1 до n, включая n. | 1 , n = 0; n = | | n * (n - 1), n > 0; Пример: 6! = 1 * 1 * 2 * 3 * 4 * 5 * 6 = 720; Напишем итеративный алгоритм для вычисления факториала: Код:
int factorial_iterative (int n) { if (n == 0) // Если 0! return 1; // то факториал = 1, возвращаем ее for (int i = n-1; i > 0; --i) // Декрименирующий цикл от (n - 1) до 0, не включая ноль n *= i; // Производим умножение n и (n-1) членов последовательности return n; // Возвращаем значение факториала } Вычисление факториала идет с декриминацией множителя: 6! = 6 * 5 * 4 * 3 * 2 * 1; Данную функцию можно написать рекурсивно заменив цикл на рекурсию: Код:
int factorial_recursive (int n) { if (n == 0) // Условие выхода: если n равно 0 return 1; return n * factorial_recursive (n-1); // Возвращаем значение факториала } В данном случае, функция в 5-ой строке будет вызывать сама себя с декрименацией аргумента, пока последний не станет нулем. Рассмотрим работу алгоритма на примере 6!: Код:
factorial_recursive (6): { if (6 == 0) return 1; return 6 * factorial_recursive (6-1) { if (5 == 0) return 1; return 5 * factorial_recursive (5-1) { if (4 == 0) return 1; return 4 * factorial_recursive (4-1) { if (3 == 0) return 1; return 3 * factorial_recursive (3-1) { if (2 == 0) return 1; return 2 * factorial_recursive (2-1) { if (1 == 0) return 1; return 1 * factorial_recursive (1-1) { if (0 == 0) return 1; // выход } } } } } } } Любой рекурсивный алгоритм можно реализовать итеративно. Глубина рекурсии - количество вложеных вызовов самой себя в глубину. В нашем примере глубина рекурсии равна 5. Рекурсивные алгоритмы короче, красивее, удобнее своих итерационных аналогов. Рекурсия не дает выиграша вы быстродействии и даже дает небольшой проигрыш в использовании памяти. Для огромных объемов данных все же применяют итеративные алгоритмы. Особо удачно использование рекурсии и рекурсивно-ориентироваными структурам, к примеру - деревья. Также удачно рекурсия ложится на быструю сортировку методом Ч.Хоара (о ней будет статья в цикле "сортировки"). Код:
#include <iostream> using namespace std; long long int factorial_recursive (long long int n) { if (n == 0) return 1; return n * factorial_recursive (n-1); } long long int factorial_iterative (long long int n) { if (n == 0) return 1; for (long long int i = n-1; i > 0; --i) n *= i; return n; } int main () { long long int x; cout<<"Enter x: "; cin>>x; if (x < 0) { cout<<endl<<"Error! x must be non-negative!"; return 0; } if (x > 16) { cout<<endl<<"Error! n overflow!"; return 0; cout<<endl<<"recursive factorial "<<x<<" = "<<factorial_recursive (x); cout<<endl<<"iterative factorial "<<x<<" = "<<factorial_iterative (x); return 0; } Примечание: В данном варианте максимальное значение x = 16, в противном случае - переполнение переменной n. Если изменить тип на long int предел x = 19, при long long int - 25. Дальнейшее увеличение верхней границы x требует использования длинной арифметики. Компилятор: g++ |
12.12.2021, 23:19 | #15 (permalink) |
Member
Регистрация: 12.12.2021
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Можете в ютубе канал по с++ порекомендовать?
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|