- •1. Основные понятия информатики
- •1.1. Понятие и задачи информатики
- •1.2. Системы счисления
- •1.2.1. Двоичная система счисления
- •1.2.2. Восьмеричная система счисления
- •1.2.3. Шестнадцатеричная система
- •1.3. Обобщенная структура и состав персонального компьютера
- •1.4. Организация вычислительных процессов при решении инженерных задач
- •1.5. Алгоритмы
- •1.5.1. Алгоритм: основные свойства и способы представления
- •1.5.2. Базовые элементы и структуры программирования
- •1.5.3. Представление линейных, разветвленных и циклических структур
- •2. ОБщие сведения об операционных системах
- •2.1. Общие сведения об операционных системах
- •2.1.1. Предпосылки создания и краткая история операционных систем ms-dos и Windows
- •2.1.1.1. Операционная система ms-dos
- •2.1.1.2. История создания операционной системы Windows
- •2.1.2. Основные отличия версий операционных систем
- •2.1.2.1. Операционная система Mac os
- •2.1.1.2. Операционная система Linux
- •2.1.1.3. Операционная система Windows
- •2.1.3. Основные команды операционной системы ms-dos
- •2.2. Основные элементы интерфейса операционной системы Windows
- •2.2.1. Элементы интерфейса ос Windows
- •2.2.2. Работа с файловыми системами операционной системы
- •3.2. Элементы языка с
- •3.2.1. Алфавит языка с (используемые символы)
- •3.2.2. Идентификаторы
- •3.2.3. Константы
- •3.2.4. Ключевые слова
- •3.2.5. Знаки операций
- •3.2.6. Комментарии
- •3.3. Лекция 6. Типы данных и их объявление
- •3.3.1. Основные типы данных
- •3.3.2. Объявление типов данных
- •3.4. Лекция 7. Указатели и массивы
- •3.4.1. Объявление указателей
- •3.4.2. Инициализация указателей
- •3.4.3. Составные указатели
- •3.4.4. Операции над указателями
- •3.4.5. Ссылки
- •3.5. Лекция 8. Массивы
- •3.5.1. Одномерные массивы
- •3.5.2. Многомерные массивы
- •3.5.3. Динамические массивы
- •3.5.3.1. Одномерные динамические массивы
- •3.5.3.2. Динамический многомерный массив
- •3.5.4. Символьные массивы (строки)
- •3.6. Лекция 9. Выражения и присваивания
- •3.6.1. Операции инкремента и декремента (увеличения и уменьшения на 1)
- •3.6.2. Операция определения размера типа
- •3.6.4. Операции деления ( / ) и нахождения остатка от деления ( % )
- •3.6.7. Поразрядные операции
- •3.6.8. Логические операции
- •3.6.9. Операции присваивания
- •3.6.10. Условная операция
- •3.6.11. Приоритеты выполнения операций
- •3.6.12. Преобразование типов
- •3.7. Лекция 10. Операторы
- •3.7.1. Операторы ветвления
- •3.7.1.1. Условный оператор if
- •If (выражение) [оператор_1]; [ else оператор_2 ; ]
- •3.7.1.2. Оператор switch
- •3.7.2. Операторы цикла
- •3.7.2.1. Цикл с предусловием (while)
- •3.7.2.2. Цикл с постусловием (do while)
- •3.7.2.3. Цикл с параметрами ( for )
- •3.7.3. Операторы передачи управления
- •3.7.3.1. Оператор безусловного перехода goto
- •3.7.3.2. Оператор прерывания break
- •3.7.3.3. Оператор пропуска continue
- •3.7.3.4. Оператор возврата из функции return
- •4. Модульное программирование
- •4.1. Лекция 11. Функции
- •4.1.1. Объявление функций
- •4.1.2. Определение функций
- •4.1.3. Вызов функций
- •4.1.4. Передача параметров в функцию
- •4.1.5. Передача массивов в функцию
- •В примере:
- •4.1.6. Функции с переменным числом параметров
- •4.1.7. Рекурсивные функции
- •4.1.8. Функция main()
- •4.1.9. Перегрузка функций
- •4.1.10. Шаблоны функций
- •4.2. Лекция 12. Директивы препроцессора
- •4.2.1. Директива #include
- •4.2.1. Директива # define
- •4.2.3. Директивы условной компиляции
- •4.2.4. Директивы #undef
- •4.3. Лекция 13. Пользовательские типы данных
- •4.3.1. Переименование типов
- •4.3.2. Перечисления
- •4.3.3. Структуры
- •4.3.4. Битовые поля
- •4.3.5. Объединения
- •5. Программирование графических изображений в языке с
- •5.1. Лекция 14. Программирование графических изображений
- •5.1.1. Графический режим видеоадаптера
- •5.1.2. Функции управления графическим окном
- •5.1.3. Управление цветом и стилем заполнения фигур
- •5.1.4. Рисование простейших графических фигур
- •5.1.5. Отображение текстовой информации в графическом режиме
- •5.1.7. Преобразование координат и анимационные эффекты
- •6.1.1.3. Функция gets()
- •6.1.1.4. Функция puts()
- •6.1.1.5. Функции printf() и scanf()
- •Потоковые объекты ввода/вывода (форматируемые):
- •6.1.2.1 Форматирование данных с помощью флагов и методов
- •6.2. Функции файлового ввода и вывода
- •6.2.1. Файловый ввод и вывод средствами с
- •6.3. Строки: операции с текстовыми файлами
- •6.3.1. Операции над строками
- •6.3.2. Методы и функции ввода и вывода строк
- •6.4. Лекция 18. Операции со структурами и бинарными файлами
- •6.5. Лекция 19. Списки: операции с динамическими структурами данных; организация списков и их обработка
- •6.5.1. Линейные списки
- •6.5.2. Стеки
- •6.5.3. Очередь
- •6.5.4. Бинарные деревья
3.5.2. Многомерные массивы
Многомерные массивы объявляются указанием каждого измерения в отдельных квадратных скобках (квадратные скобки синего цвета показывают, что инициализации массива может и не быть):
тип имя [индекс_1][индекс_2]…[индекс_N] [={инициализаторы}];
Двумерный массив имеет следующий формат объявления:
тип имя [индекс_строк][индекс_столбцов] [={инициализаторы}];
Пример:
Здесь объявляется массив из 5-ти строк и 4-х столбцов.
При инициализации многомерного массива он представляется либо как массив из массивов, либо задаётся общий список элементов в том порядке, в котором они располагаются в памяти.
Пример:
int matr[][] = { {1, 2} , {3, 4} , {5, 6} } ;
или
int matr[3][2] = {1, 2, 3, 4, 5, 6} ;
В памяти такой массив располагается построчно последовательно.
Многомерные массивы размещаются в памяти так, что при переходе к следующему элементу массива быстрее всего изменяется последний индекс.
Например, в выше приведенном примере инициализируется двумерный массив
,
который в памяти размещается следующим образом, как показано на рис. 3.2:
Рисунок 3.2 — Схема размещения двумерного массива
Для доступа к элементу многомерного массива следует указывать все его индексы.
Пример:
matr[i][j] ;
*(matr[i]+j) //или:
*(*(matr+i)+j)
3.5.3. Динамические массивы
3.5.3.1. Одномерные динамические массивы
Динамические массивы создают с помощью операции new (С++) или malloc (С).
Формат создания динамического массива с помощью операции new:
тип *имя = new тип [размер массива] ;
Пример:
int n=100 ; // количество элементов массива
float *p=new float[n] ; // объявление динамического массива
… // из n элементов с плавающей запятой
delete []p ; // освобождение памяти
Обращение к элементам динамического массива производится либо по индексу, либо через указатель.
Пример:
float a, b ;
a = p[5] ; // обращение к 5-му элементу массива
// с помощью индекса
b = *(p+5) ; // обращение к 5-му элементу массива
// через указатель
Формат создания динамического массива с помощью операции malloc:
тип *имя =
(приведение_типа *) malloc (размер_массива * размер_типа) ;
Пример:
int n = 100; //количество элементов массива
float *p = (float *) malloc(n*sizeof(float));
//объявление динамического массива
… //из n элементов с плавающей запятой
free(p); //освобождение памяти
Примечание:
1. Преобразование типа обязательно, поскольку функция malloc возвращает значение указателя типа void*.
2. Размер типа определять с помощью функции sizeof() необходимо, так как в некоторых случаях на некоторых ПК размер может отличаться от ожидаемого.
3.5.3.2. Динамический многомерный массив
Для создания динамического многомерного массива необходимо указать в операции new все его размерности.
Пример:
int N_str=5 ; //количество строк
int **m=(int**) new int [N_str][10] ; //объявление двумерного
//динамического массива
Более безопасный и универсальный способ создания массива, когда размерности задаются на этапе выполнения, показан на следующем примере:
int N_str, N_stb ; //1
cout<<''Введите количество строк и столбцов: '' ;
cin>>N_str>>N_stb ; //2
int **a=new int *[N_str] ; //3
for ( int i=0 ; i<N_str ; i++) //4
{
a[i]=new int[N_stb] ; //5
}
… /* Инициализация массива и обработка данных*/
delete []a; //6
В примере:
//1 — объявляется двух переменных — количества строк и столбцов;
//2 — ввод с клавиатуры количества строк и столбцов;
//3 — объявление указателя на массив указателей на int;
//4 — цикл для выделения памяти под каждую строку;
//5 — каждому элементу массива указателей на строки присваивается адрес начала участка памяти, выделенного под строку, как показано на рис. 3.3;
//6 — освобождение памяти из-под массива.
Рисунок 3.3 — Задание динамического многомерного массива
На рис. 3.3 отображены два этапа объявления и выделения памяти под двумерный массив:
— этап 1: объявляется указатель на массив указателей на int и выделяется память под массив указателей;
— этап 2: в цикле выделяется память под каждую строку массива, каждому элементу массива указателей на строки присваивается адрес начала участка памяти, выделенного под строку.
