Листинг 3.13. Переопределение типов
#include <iostream>
using namespace std;
//создание псевдонима для указателя на символ;
typedef char* String;
//структура – запсь из двух строк;
struct Person
{
String name;
String surname;
};
//создание псевдонима для целогочисленногг значения;
typedef int Number;
//структура – запись из двух строк и номер;
struct Record
{
Number number;
Person person;
};
int main (void)
{
Record rec;
rec.person.name = "Ivan";
rec.person.surname = "Ivanov";
rec.number = 1;
cout << rec.number << ". " << rec.person.name
<< " " << rec.person.surname << endl;
return 0;
}
3.8. Упражнения
Выполнить задания из разделов «3.8.1. Статические и динамические массивы» и «3.8.2. Многомерные массивы» в двух вариантах.
1. Для произвольного массива, элементы которого имеют любой из встроенных числовых типов, с заданным числом элементов (статический).
2. Для массива, элементы которого имеют любой из встроенных числовых типов, размерность которого и значения элементов задаваемых пользователем с клавиатуры (динамический).
3.8.1. Статические и динамические массивы
1. Найти и вывести на экран наименьший элемент.
2. Найти и вывести на экран разность модулей максимального и минимального элементов.
3. Найти и вывести на экран, все пары соседних элементов, где первый меньше второго.
4. Найти и вывести на экран все положительные элементы.
5. Найти и вывести на экран сумму всех положительных элементов.
6. Найти и заменить все максимальные элементы их отрицательными значениями.
7. Найти и вывести на экран индексы всех нечетных элементов.
8. Найти и вывести на экран все элементы, индексы которых кратны пяти.
9. Найти и вывести на экран два элемента, стоящие рядом и отличающиеся на единицу.
10. Найти и вывести на экран наибольший элемент.
11. Найти и вывести на экран индекс элемента, модуль которого является максимальным.
12. Найти и вывести на экран все элементы, кратные пяти.
13. Найти и вывести на экран все элементы, индексы которых кратны трем.
14. Найти и вывести на экран индексы всех четных элементов.
15. Найти и вывести на экран, все пары соседних элементов, где первый больше второго.
16. Найти и поменять местами максимальный и минимальный элементы.
17. Найти и вывести на экран все отрицательные элементы.
18. Найти и вывести на экран количество отрицательных элементов.
19. Найти и заменить все минимальные элементы их отрицательными значениями.
20. Сдвинуть массив циклически на два элемента влево.
3.8.2. Многомерные массивы
1. Поменять местами первую строку со строкой, в которой расположен первый минимальный элемент.
2. Заменить все расположенные ниже главной диагонали отрицательные числа нулями.
3. Вычислить сумму всех чисел всех строк, индексы которых являются четными числами.
4. Заменить все расположенные выше дополнительной диагонали отрицательные числа значениями модуля этих чисел.
5. Поменять местами последний столбец со столбцом, в котором расположен первый максимальный элемент.
6. Поменять местами попарно все столбцы, неучитывая последний в случае нечетного их количества.
7. Вычислить среднее арифметическое элементов первого столбца, в котором расположено наибольшее количество отрицательных чисел.
8. Отобразить зеркально относительно середины все элементы столбца, в котором расположен элемент, модуль которого является минимальным.
9. Зеркально отобразить массив относительно дополнительной диагонали.
10. Заменить все расположенные выше главной диагонали положительные числа их отрицательными значениями.
11. Выполнить операцию, аналогичную нахождению определителя матрицы.
12. Поменять местами первый столбец со столбцом, в котором расположен первый минимальный элемент.
13. Вычислить произведение всех чисел всех столбцов, индексы которых являются нечетными числами.
14. Вычислить среднее арифметическое элементов последней строки, в которой расположено наименьшее количество положительных чисел.
15. Отобразить зеркально относительно середины все элементы строки, в которых расположен элемент, модуль которого является максимальным.
16. Поменять местами попарно все строки, неучитывая последнюю в случае нечетного их количества.
17. Зеркально отобразить массив относительно главной диагонали.
18. Поменять местами последнюю строку со строкой, в которой расположен первый максимальный элемент.
19. Заменить все расположенные ниже дополнительной диагонали положительные числа их увеличенными вдвое значениями.
20. Выполнить операцию, аналогичную транспонированию матрицы.
3.8.3. Строки
Выполнить для строки («strarg») и двух символов («charg1», «charg2»), полученных в качестве параметров, передаваемых при вызове.
1. Подсчитать количество вхождений символа «charg1» в строку «strarg».
2. Вставить символ «charg1» после каждого вхождения символа «charg2».
3. В зависимости от значения «charg2» вывести символ перед «charg1» или после него.
4. Вставить символ «charg1» перед каждым вхождением символа «charg2».
5. Подсчитать количество символов между символами «charg1» и «charg2».
6. Удалить все символы из строки «strarg» после последнего вхождения символа «charg1».
7. Подсчитать количество символов в строке «strarg» после последнего вхождения символа «charg1».
8. В зависимости от значения «charg2» удалить из строки «strarg» символ после «charg1» или вставить «charg2» после него.
9. Удалить из строки «strarg» символ, следующий за символом «charg1».
10. Вставить символ «charg1» в конец строки «strarg».
11. Подсчитать длину строки «strarg» без учета вхождений символа «charg1».
12. Определить, равны ли части строки «strarg» до символа «charg1» и после «charg2».
13. В зависимости от значения «charg2» вывести часть строки «strarg» до символа «charg1» или после него.
14. Определить, равны ли части строки «strarg» до символа «charg1» и после него.
15. Удалить все символы из строки «strarg» перед первым вхождением символа «charg1».
16. Подсчитать количество символов в строке «strarg» до первого вхождения символа «charg1».
17. Удалить из строки «strarg» символ, предшествующий символу «charg1».
18. Вставить символ «charg1» в начало строки «strarg».
19. Разбить строку «strarg» на подстроки, разделенные символом «charg1».
20. Определить, равны ли части строки «strarg», первая из которых заключена между символами «charg1» и «charg2», а вторая – объединение частей строки до символа «charg1» и после «charg2».
4. Функции
4.1. Простые функции
Функции применяются для разделения больших задач на подзадачи и используются для замены часто повторяющихся участков кода. Такой подход скрывает детали реализации тех или иных действий, что делает код более понятным. Применение функций также способствует более легкому сопровождению кода и его уменьшению.
Часто в процессе программирования прибегают к такому методу, как нисходящее проектирование. При таком подходе, задача с самого начала реализации разбивается на подзадачи, каждая из которых, в свою очередь, также разбивается на подзадачи и т.д. В итоге, конкретные действия реализуются на последних этапах написания кода.
Каждая функция имеет свое собственное имя. Параметры, передаваемые функции, должны содержаться в скобках и следовать через запятую. Результатом функции является значение определенного типа, называемое возвращаемым, за исключением того случая, когда функция объявлена, как вовсе не возвращающая значения при помощи «void». Все выполняемые функцией действия – тело функции – заключаются в фигурные скобки. Совокупность имени функции, типа возвращаемого значения, списка параметров и выполняемых ей действий называется определением. Функция может быть определена только один раз, за исключением «inline» – функций (встраиваемых). Помимо определения, функция может иметь объявление – прототип – совокупность типа возвращаемого значения, имени функции и списка параметров, которое может быть не единственным.
Вызов функции для исполнения происходит посредством оператора вызова «()», при этом внутри скобок должны быть перечислены фактические параметры функции – передаваемые ей значения.