1-е задания
.docx-
Какие существуют виды условного оператора, и чем они отличаются?
Условный оператор реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true. В C++ условный оператор начинается с ключевого слова if. Есть несколько форм условных операторов это условные операторы с одной ветвью ( if условие then команды end;), операторы с двумя ветвями (if условие then команды else команды end;) и условные операторы с несколькими условиями.
-
Как запрограммировать функцию со сменным количеством параметров?
Переменный список параметров задается в заголовке функции многоточием: int f(…).Этот заголовок не вызывает у компилятора протестов, однако у программиста могут возникнуть трудности. Поэтому , список параметров совсем пустой быть не может, должен быть прописан хотя бы один явный параметр, адрес которого мы можем получить при выполнении программы. Заголовок такой функции может выглядеть так:
int f(int k...)
Есть одно обстоятельство, которое ограничивает применение таких функций: при написании функции с переменным числом параметров помимо алгоритма обработки программист должен разрабатывать и алгоритм доступа к параметрам. Так что список необъявленных параметров не может быть совсем уж произвольным – в языке C++ не существует универсальных средств распознавания элементов этого списка. Это же означает, что передача аргумента не того типа, который задумывался, или не тем способом, который подразумевался при разработке, приведет к катастрофическим последствиям – компилятор-то ничего не проверяет.
Попробуем написать функцию, вычисляющую среднее арифметическое своих аргументов. Для этого требуется решить несколько проблем
как установиться на список параметров в стеке;
как «перебирать» параметры;
как закончить перебор.
Для доступа к списку параметров нам потребуется указатель, значением которого будет адрес последнего явного параметра в списке. Ответ на второй вопрос очевиден – надо изменять значение этого указателя, чтобы переместиться на следующий параметр. Отсюда следует, что указатель должен быть типизированным, поскольку с бестиповым указателем нельзя выполнять арифметические операции. Это же означает, что программист при разработке функции с переменным числом параметров должен отчетливо себе представлять типы аргументов, которые будет обрабатывать функция. Кроме того, способ передачи параметров должен быть одинаковым для всех параметров: либо все – по значению, либо все – по ссылке, либо все – по указателю.
Ответ на последний вопрос не вызывает затруднений. Это можно сделать одним из двух способов:
явно передать среди обязательных параметров количество аргументов;
добавить в конец списка аргумент с уникальным значением, по которому будет определяться конец списка параметров;
И тот, и другой способ имеют право на жизнь — все определяется потребностями задачи и вкусами программиста. В данном случае сначала попробуем второй способ: последним значением списка параметров будет ноль.
Вычисление среднего арифметического аргументов (ноль в конце)
double f(double n, ...) //--заголовок с переменным числом параметров
{ double *p = &n; //--установились на начало списка параметров
double sum = 0, count = 0;
while (*p) //--пока аргумент не равен нулю
{ sum+=(*p); //--суммируем аргумент
p++; //--«перемещаемся на следующий аргумент
count++; //--считаем количество аргументов
}
return ((sum)?sum/count:0); //--вычисляем среднее
}
-
Какие типы данных вам известны?
базовые типы данных:
int (целое число);
char (символ);
wchar_t (расширеный символьный тип данных);
bool (логический тип данных);
float (вещественный тип данных);
double (вещественный тип данных с двойной точностью);
Первые четыре типа данных именуются целочисленными, а последние два - типами с плавающей точкой. Для уточнения внутреннего представления и диапазона значений существуют следующие ключевые слова, использующихся для спецификаторов типа:
short (короткий);
long (длинный);
signed (знаковый);
unsigned (беззнаковый); Слова short и long используются соответственно для уменьшения и увеличения размера типа данных. Слова signed и unsigned - для указания знаковых и беззнаковых чисел.
-
Каким образом можно ввести информацию?
Информацию можно вводить как текстовую, так и цифровую в зависимости от задачи. Ввод происходит разными способами и и каждый под определенную ситуацию. Информация в С++ вводится либо в виде переменной, то есть переменной присваевается значение, либо просто мы решая какой то пример вводим число в уравнение и он используется лишь раз, либо же мы используем оператор ввода “cin”. Cin задается так : cin >> код программы (то что мы вводим) ;
-
Каким образом можно вывести информацию?
Информацию в языке С++ можно выводить благодаря оператору вывода “cout” именно он отвечает за вывод всей нужной информации из программы. Задается он так : текст программы ……. Cout <<информация для вывода ;
-
Чем отличаются переменные от констант?
Перед использованием любая переменная должна быть описана, во время выполнения программы значение переменной можно изменять, а константа должна быть инициализирована непосредственно при объявлении.
-
Расскажите о структуре простейшей программы в языке С++
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, world!" << endl;
system("pause"); // Только для тех, у кого MS Visual Studio
return 0;
}
оператор #include используется для подключения других файлов в код. Строка #include <iostream>, будет заменена содержимым файла iostream.h, который находится в стандартной библиотеке языка и отвечает за ввод и вывод данных на экран.
Содержимое второй строки — using namespace std; указывает на то, что мы используем по умолчанию пространство имен, с названием std. Все то, что находится внутри фигурных скобок функции int main() {} будет автоматически выполняться после запуска программы.
Строка cout << "Hello, world!" << endl; говорит программе выводить сообщение с текстом Hello, world на экран
оператор cout предназначен для вывода текста на экран командной строки После него ставятся две угловые кавычки (<<). Далее идет текст, который должен выводиться. Он помещается в двойные кавычки. Оператор endl переводит строку на уровень ниже.
Если в процессе выполнения произойдет какой-либо сбой, то будет сгенерирован код ошибки, отличный от нуля. Если же работа программы завершилась без сбоев, то код ошибки будет равен нулю. Команда return 0 необходима для того, чтобы передать операционной системе сообщение об удачном завершении программы.
В конце каждой команды ставится точка с запятой.
-
Что такое разадресация в языке С++?
Операция разадресации, или разыменования, предназначена для доступа к величине, адрес которой хранится в указателе. Эту операцию можно использовать как для получения, так и для изменения значения величины (если она не объявлена как константа):
char a; // переменная типа char
char*p=new char; /* выделение памяти под указатель и под динамическую переменную типа char */
*p=’Ю’; a=*p; // присваивание значения обеим переменным.
-
Какие действия можно выполнять с указателями?
Указатели предназначены для хранения адресов областей памяти. Указатель не является самостоятельным типом данных, он всегда связан с каким-либо другим конкретным типом. В С++ есть три вида указателей, отличающихся свойствами и набором допустимых операций: типизированные указатели, бестиповые указатели и указатели на функции. Указатели одного вида можно сравнивать друг с другом на равенство/неравенство и присваивать друг другу.
Наиболее часто используются типизированные указатели, то есть указатели, которые ссылаются на величины определенного типа. С ними разрешается выполнять арифметические действия. С бестиповым указателем никаких арифметических операций выполнять нельзя, однако с помощью преобразования типа такой указатель всегда можно преобразовать в типизированный. Обычно бестиповые указатели применяются в качестве параметров функций для повышения универсальности программы.
-
Как задать переменный размер массива?
Чтобы создать переменный размер массива необходимо постоянно пересобирать этот самый массив. Поэтому, нужно использовать динамические массивы которые описаны в std как
std::vector<int> Array;
Можно вручную перевыделять память под массив, либо использовать контейнер.
будет создан массив типа int и идентификатором Array
-
Что такое строка символов в С++?
Строка символов это - строка языка С++ представляющая собой массив символов, который завершается символом с кодом 0.
-
Когда можно не описывать длину строки?
Например, если это Си-строка, заканчивающаяся нулевым символом:
char str[]="My string!!!";
Определить количество символов можно, считая символы, пока не дойдем до нулевого(strlen). Если же длина строки может изменяться, тогда использование std::string либо рукописная обертка.
-
Для чего нужен прототип функции?
Прототип функции нужен в основном для того, чтобы функцию можно было использовать до ее объявления.
дополнение к 13 - главное преимущество прототипов заключается в том, что вы можете сосредотачивать их в одном месте, скажем h-файле, при этом реализацию функций выносить в cpp-файл (в другой файл).
-
Применение функций-указателей.
В C++ различают три вида указателей:
указатели на объект,
указатели на функцию
указатели на void,
Они отличаются свойствами и набором допустимых операций. Указатель не является самостоятельным типом, он всегда связан с каким-либо другим конкретным типом.
Указатель на функцию
Указатель на функцию содержит адрес в сегменте кода, по которому располагается исполняемый код функции, то есть адрес, по которому передается управление при вызове функции. Указатели на функции используются для косвенного вызова функции (не через ее имя, а через обращение к переменной, хранящей ее адрес), а также для передачи имени функции в другую функцию в качестве параметра. Указатель функции имеет тип «указатель функции, возвращающей значение заданного типа и имеющей аргументы заданного типа»:
тип (*имя) ( список_типов_аргументов );
Например, объявление:
int (*fun) (double, double);
задает указатель с именем fun на функцию, возвращающую значение типа int и имеющую два аргумента типа double.
-
Как правильно работать с данными внутри функции?
Данные внутри функции не должны соприкасаться с данными в основном тексте программы так как это будет засчитываться как ошибка. Желательно в функция вообще задавать данные не совпадающие с данными в основной программе во избежание ошибок. Различия между задачей переменных и т.д. в функции и в основной программе нету.
-
Основные известные функции работы со строками в С++
— char*strcat (char*_dest, const char*_src); — функція реалізує сціплення рядка dest з рядком src. Функція вертає покажчик на початок отриманого рядка (dest). Проміжний символ‘\0’ рядка dest гаситься.
— char*strncat (char*_dest, const char*_src, size_t_maxlen); — функція приєднує maxlen символів з рядка, на який вказує src, до рядка, на який вказує dest. Рядок dest повинен містити не менше maxlen вільних байтів. Якщо maxlen більше рядка src, виконується проста конкатенація.
— char*strchr (const char*_, int_c); — функція вертає покажчик на позицію першого входження символу “c” в рядок, на який вказує s. В рядок s включається і символ ‘\0’.
— int strcmp (const char*_s1, const char*_s2); — функція виконує порівняння двох рядків, на початок яких вказують s1 і s2. Функція вертає значення: менш нуля, якщо s1<s2; рівне нулю, якщо s1==s2; більше нуля, якщо s1>s2.
— int strnсmp (const char*_s1, const char*_s2, size_t_maxlen); — функція, що аналогічна функції strcmp () і відрізняється тим, що виконується порівняння перших maxlen байтів.
— int stricmp (const char *_s1, const char *_s2); — функція виконує порівняння двох рядків, на що вказують s1 і s2. Перед порівнянням символи перетворюються в малі. Функція вертає значення: більше нуля, якщо s1>s2; рівно нулю, якщо s1==s2; менш нуля, якщо s1<s2.
— int strlen (const char*_s); — функція вертає довжину рядка в байтах, на який вказує s. Нуль-терминатор не враховується.
— char*stpcpy (char *_dest, const char *_src); —функція копіює рядок, на котрий вказує src, в інше місце в пам'яті, на що вказує est. Функція вертає покажчик на кінець рядка, що скопіювався в dest.
— char*strncpy (char*_dest, const char*_src, size_t_maxlen); — функція копіює maxlen байт з рядка, на який вказує src, в інше місце в пам'яті, на що вказує dest. Нуль-термінатор теж копіюється. Якщо maxlen менш довжини рядка src, до рядка src не приєднується символ“\0”. І якщо більше, то рядок src переноситься повністю, а символи, що залишалися, заповнюються символом “\0”. Функція вертає покажчик dest.
— char *strlwr (char *_s); —функція перетворює всі символи рядка, на початок якого вказує s, в малі літери. Функція повертає покажчик на початок цього рядка.
— char *strups (char *_s); —функція перетворює всі символи рядка, на початок якої вказує s, в великі літери. Функція вертає покажчик на отриманий рядок.
— char *strset (char *_s, int_ch); — функція заповнює рядок, на початок якого вказує s, символом ch. Функція вертає покажчик на отриманий рядок.
— char *strtok (char *_s1, char *_s2); — функція вертає наступну лексему із s1, яка відділена любим символом з набора s2.
-
Какие существуют операторы цикла в языке С++?
В С++ есть 2 вида операторов цикла - это операторы цикла с пред и пост условием. Операторы с пред условием начинаются с команды for и имеют такой алгоритм -
for (/*выражение1*/; /*выражение2*/; /*выражение3*/ )
{
/*один оператор или блок операторов*/;
}
Выражение 1 - объявление (и) или инициализация, ранее объявленной, переменной-счетчика, которая будет отвечать за истинность условия в цикле
Выражение 2 - это условие продолжения цикла for, оно проверяется на истинность.
Выражение 3 изменяет значение переменной-счетчика.
Примерно так же работает While - Оператор цикла while или цикл while - цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным.
И оператор пост условия (do While) - Цикл do while отличается от цикла while тем, что в do while сначала выполняется тело цикла, а затем проверяется условие продолжения цикла.
-
Какие типы данных вам известны?
базовые типы данных:
int (целое число);
char (символ);
wchar_t (расширеный символьный тип данных);
bool (логический тип данных);
float (вещественный тип данных);
double (вещественный тип данных с двойной точностью);
Первые четыре типа данных именуются целочисленными, а последние два - типами с плавающей точкой. Для уточнения внутреннего представления и диапазона значений существуют следующие ключевые слова, использующихся для спецификаторов типа:
short (короткий);
long (длинный);
signed (знаковый);
unsigned (беззнаковый); Слова short и long используются соответственно для уменьшения и увеличения размера типа данных. Слова signed и unsigned - для указания знаковых и беззнаковых чисел.
-
Какие существуют операторы цикла в языке С++?
В С++ есть 2 вида операторов цикла - это операторы цикла с пред и пост условием. Операторы с пред условием начинаются с команды for и имеют такой алгоритм -
for (/*выражение1*/; /*выражение2*/; /*выражение3*/ )
{
/*один оператор или блок операторов*/;
}
Выражение 1 - объявление (и) или инициализация, ранее объявленной, переменной-счетчика, которая будет отвечать за истинность условия в цикле
Выражение 2 - это условие продолжения цикла for, оно проверяется на истинность.
Выражение 3 изменяет значение переменной-счетчика.
Примерно так же работает While - Оператор цикла while или цикл while - цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным.
И оператор пост условия (do While) - Цикл do while отличается от цикла while тем, что в do while сначала выполняется тело цикла, а затем проверяется условие продолжения цикла.
-
Чем отличаются переменные от констант?
Перед использованием любая переменная должна быть описана, во время выполнения программы значение переменной можно изменять, а константа должна быть инициализирована непосредственно при объявлении.
-
Какие существуют виды условного оператора, и чем они отличаются?
Условный оператор реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true. В C++ условный оператор начинается с ключевого слова if. Есть несколько форм условных операторов это условные операторы с одной ветвью ( if условие then команды end;), операторы с двумя ветвями (if условие then команды else команды end;) и условные операторы с несколькими условиями.
-
Какие действия можно выполнять с указателями?
Указатели предназначены для хранения адресов областей памяти. Указатель не является самостоятельным типом данных, он всегда связан с каким-либо другим конкретным типом. В С++ есть три вида указателей, отличающихся свойствами и набором допустимых операций: типизированные указатели, бестиповые указатели и указатели на функции. Указатели одного вида можно сравнивать друг с другом на равенство/неравенство и присваивать друг другу.
Наиболее часто используются типизированные указатели, то есть указатели, которые ссылаются на величины определенного типа. С ними разрешается выполнять арифметические действия. С бестиповым указателем никаких арифметических операций выполнять нельзя, однако с помощью преобразования типа такой указатель всегда можно преобразовать в типизированный. Обычно бестиповые указатели применяются в качестве параметров функций для повышения универсальности программы.
-
Каким образом можно ввести информацию?
Информацию можно вводить как текстовую, так и цифровую в зависимости от задачи. Ввод происходит разными способами и и каждый под определенную ситуацию. Информация в С++ вводится либо в виде переменной, то есть переменной присваевается значение, либо просто мы решая какой то пример вводим число в уравнение и он используется лишь раз, либо же мы используем оператор ввода “cin”. Cin задается так : cin >> код программы (то что мы вводим) ;
-
Каким образом можно вывести информацию
Информацию в языке С++ можно выводить благодаря оператору вывода “cout” именно он отвечает за вывод всей нужной информации из программы. Задается он так : текст программы ……. Cout <<информация для вывода ;
-
Что такое разадресация в языке С++? Операция разадресации, или разыменования, предназначена для доступа к величине, адрес которой хранится в указателе. Эту операцию можно использовать как для получения, так и для изменения значения величины (если она не объявлена как константа):
char a; // переменная типа char
char*p=new char; /* выделение памяти под указатель и под динамическую переменную типа char */
*p=’Ю’; a=*p; // присваивание значения обеим переменным.