- •140604 – Электропривод и автоматика промышленных установок и технологических комплексов
- •220301 – Автоматизация технологических процессов и производств
- •Содержание.
- •Введение
- •Лабораторная работа № 1. Вычисление суммы бесконечного ряда с заданной точностью.
- •2. Указания по подготовке к работе:
- •3. Теоретическая часть:
- •6. Варианты индивидуальных заданий:
- •7. Контрольные вопросы.
- •4. Задание.
- •5. Требования к отчету по лабораторной работе:
- •Лабораторная работа № 2. Решение задач с использованием массивов
- •1. Цель работы
- •2. Подготовка к работе
- •3. Теоретическая часть.
- •4. Задание.
- •5. Требования к отчету по лабораторной работе:
- •6. Варианты заданий.
- •7. Контрольные вопросы.
- •Лабораторная работа №3. Решение задач с использованием структур
- •1. Цель работы
- •2. Подготовка к работе.
- •3. Теоретическая часть.
- •4. Задание.
- •5. Требования к отчету по лабораторной работе:
- •6. Варианты индивидуальных заданий.
- •7. Контрольные вопросы
- •Лабораторная работа № 4. Решение задач с использованием функций
- •1. Цель работы.
- •2. Подготовка к работе.
- •3. Теоретическая часть.
- •4. Задание.
- •5. Требования к отчету по лабораторной работе:
- •7. Контрольные вопросы.
- •Список рекомендуемой литературы.
- •Из ресурсов электронно-библиотечной системы iQlib
- •Из электронных ресурсов ScienceDirect
7. Контрольные вопросы.
1. Какие формы доступа к элементам массива предусмотрены синтаксисом языка С++?
2. Какие предусмотрены способы инициализации векторов?
3. Какой размерности могут быть вектора?
4. Могут ли быть объявлены массивы без указания количества элементов?
5. Может ли массив содержать элементы различных типов?
6. Предусмотрен ли контроль количества элементов массива?
7. Какая связь между массивами и указателями?
8. В чем отличие ссылки от указателя?
9. Чем отличается указатель-константа от указателя-переменной?
Лабораторная работа №3. Решение задач с использованием структур
1. Цель работы
Изучить и освоить приёмы разработки программ с использованием структур.
2. Подготовка к работе.
Необходимо ознакомиться с основными составными типами данных (перечисление, смесь, структура, битовые поля) и с особенностями обращения к элементам структуры через указатель на структуру. [лекция 12]. Sobyt
3. Теоретическая часть.
Структуры в С++ часто применяют для логического объединения связанных между собой данных. В структуру, в противоположность массиву, можно объединять данные различных типов.
Например, требуется обрабатывать информацию о расписании работы конференцзала, и для каждого мероприятия надо знать время, тему, фамилию организатора и количество участников. Поскольку вся эта информация относится к одному событию, логично дать ему имя, чтобы впоследствии можно было к нему обращаться. Для этого описывается новый тип данных (после описания ставится «;»):
struct Sobyt{
int hour, min;
char theme[100], name[100];
int num;
};
Имя этого типа данных – Sobyt. Можно описать переменные или массивы этого типа, так же, как переменные и массивы встроенных типов, например:
Sobyt e1, e2[10]; // структура и массив структур
Если структура используется только в одном месте программы, можно совместить описание типа с описанием переменных, при этом имя типа можно не указывать:
struct {
int hour, min;
char theme[100], name[100];
int num;
} e1, e2[10];
Переменные структурного типа можно размещать и в динамической области памяти, для этого надо описать указатель на структуру и выделить под нее место:
Sobyt *pe = new Sobyt; // структура
Sobyt *pm = new Sobyt[m]; // массив m структур
Элементы структуры называют полями. Поля могут быть любого основного типа, массивом, указателем, объединением или структурой. Для обращения к полю используется операция выбора («точка» для переменной и «->» для указателя), например:
e1.hour = 12; e1.min = 30;
strcnpy(e2[0].theme, “Новые пути развития ИТ”, 99);
pe->num = 30; // или (*pe).num = 30;
pm[2].hour = 14; // или (*(pm+2)).hour = 14;
Структуры одного типа можно присваивать друг другу:
*pe = e1; pm[1] = e1; pm[4] =e2[0];
Но присвоение – это и все, что можно делать со структурами целиком. Другие операции, например сравнение на равенство или вывод, не определены. Хотя пользователь может задать их самостоятельно.
Ввод/вывод структур, как и массивов, выполняется поэлементно. Например:
// с использованием классов ввода-вывода <iostream.h>
cin>>e1.hour>>e1.min;
cin.getline(e1.tneme,100);
cout<<e1.hour<<’ ‘<<e1.min<<’ ‘<<e1.theme<<endl;
// с использованием ввода-вывода в стиле С (<stdio.h>)
scanf(“%d%d”, &e1.hour, &e1.min; gets(e1.theme);
printf(“%d %d %s”, e1.hour, e1.min, e1.theme);
Структуры (только не динамические) можно инициализировать перечислением значений их элементов:
Sobyt e3 = {12, 30, “ Новые пути развития ИТ ”, 25};
В качестве примера рассмотрим программу вывода на экран студентов группы, родившихся в определенном месяце (месяц вводим интерактивно). Нарисуем блок-схему алгоритма задачи (см.рис.3). Обратите внимание, если мы не можем описывать производимые в программе действия математическими формулами, то объясняем словами. Код программы будет выглядеть следующим образом:
# include <iostream.h>
# include <stdio.h>
# include <string.h>
# define n 25 // const int n=25; - количество студентов в группе
void main()
{struct stud {
char fam[20]; // фамилия студента
char mr[8]; // месяц рождения студента
}std[n],*p=&std[0]; // описание массива 25 структур и
//указателя на структуру
int i;
char mes[8];
for(i=0;i<n;i++,p++) // указатель сдвигается построчно
{cout<<"\n"<<"введите фамилию \n";
cin>>((*p).fam); // используем операцию разыменования
cout<<'\n'<<"введите месяц\n";
cin>>(*p).gr;
}
p-=n; // указатель возвращаем на начало списка
cout<<"\n"<<"введите искомый месяц\n";
cin>>mes;
for(i=0;i<n;i++,p++)
if(strcmp(std[i].mr,mes)==0 ) // сравнение месяца рождения
//каждого студента с введенным
cout<<(*p).fam<<"\n"; // если совпадают, то выдача
//фамилии студента на экран монитора
}
Рис.3. Блок-схема алгоритма программы определения студентов, родившихся в указанный месяц
