- •Харківський університет повітряних сил імені івана кожедуба
- •Розподіл навчального часу
- •2. Загальні положення
- •3 Зміст, обсяг і порядок виконання курсової роботи
- •4 Вимоги до звіту про курсову роботу
- •5 Порядок захисту курсової роботи
- •6 Методичні рекомендації щодо виконання етапів курсової роботи
- •Int Age; // Возраст
- •Задания на курсовую работу
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Рекомендована література
- •Додаток а
- •Додаток в
- •Додаток е Приклади опису джерел інформації
- •Стандарти
Int Age; // Возраст
double Rating; // Успеваемость
} BestStudent;
int main()
{
BestStudent = {"ИВАНОВА", "ПР. ЛЕНИНА 9-А", 17, 10.57};
// Вывод на печать содержимого полей экземпляра структуры
cout << " СТУДЕНТ Ф_ТА ЭИ \n";
cout << "\n ИМЯ:\t" << BestStudent.Name
<< "\n Адрес:\t" << BestStudent.Address
<< "\n Возраст:\t" << BestStudent.Age
<< "\n Успеваемость:\t" << BestStudent.Rating << endl;
return 0;
}
Массивы структур.
Методика создания массивов структур – точно такая же, как и при создании массивов. Например, что бы создать массив из 100 экземпляров BestStudent структуры Student, необходима следующая запись:
Student BestStudent[100];
В результате будет создан сто элементный массив BestStudent типа Student. Следовательно, каждый элемент массива, такой как BestStudent[0] или BestStudent[99], - это объект типа Student, и доступ к его полям можно организовать уже рассмотренным выше образом:
cin >> BestStudent[0].Name; // Инициализация поля Name
cout << >> BestStudent [99].Rating; //Вывод на экран содержимого поля Rating
Следует иметь в виду, что сам BestStudent - это массив, а не структура, так что конструкции типа BestStudent.Name являются ошибочными.
Рассмотрим следующий пример. Требуется разработать программу, последовательно формирующую в процессе диалога с пользователем документ такого содержания:
СВЕДЕНИЯ О СТОИМОСТИ ВЫДАННЫХ ДЕТАЛЕЙ
N/n |
ДЕТАЛЬ |
СТОИМОСТЬ . |
ВЫДАНО |
РАСХОД |
n |
а[8] |
t |
k |
c = t * k |
ИТОГО: |
s1 |
s2 |
s3 |
|
Диалог должен осуществляться по следующему сценарию:
и т.д.
При этом информация о каждой детали должна храниться в одном блоке (записи), позволяющем индивидуальную обработку, а количество записей в документе – определяться в программе в виде соответствующей константы.
Из постановки задачи следует, что запись содержит несколько разнотипных полей: порядковый номер детали (n/n), для его хранения целесообразно использовать тип int; наименование детали (ДЕТАЛЬ) – здесь может использоваться массив, например из 8-и символов; количество выданных деталей (ВЫДАНО) – данному полю соответствует тип int; а полю стоимости детали (РАСХОД) – тип double. Очевидно, что применение массива в данном случае не представляется возможным. Действительно, массив может содержать несколько элементов, однако каждый элемент должен быть одного типа, что противоречит условию задачи. Выходом из создавшейся ситуации будет применение структуры – более универсальной формы данных, чем массив.
Ниже приведен один из возможных вариантов программы решения поставленной задачи на основе применения массива структур.
// Программа 2
// Решение экономической задачи с использованием массивов структур
#include <iostream>
#include <iomanip> // Для использования манипуляторов потока setw()
// и setprecision()
const int n=3; // Размерность обрабатываемого массива структур
struct zap // Рабочий вариант объявление структуры zap,
{
char a[8];
double t;
int k;
double c;
} ;
int main()
{
double s1,s2,s3; // Расчетные суммы
zap zapis[n]; // Отдельное определение массива zapis[n] экземпляров
// структур типа zap
// Ввод исходных данных:
cout << "ФОРМИРОВАНИЕ ДОКУМЕНТА: \n";
cout << "ДОКУМЕНТ ДОЛЖЕН СОДЕРЖАТЬ " << n
<< " СТРОКИ - ЗАПИСИ: \n";
for( int i=0; i < n; i++)
{
cout << "\nФОРМИРОВАНИЕ " << i + 1 << " ЗАПИСИ";
cout << "\nВВЕДИТЕ НАЗВАНИЕ ДЕТАЛИ (НЕ БОЛЕЕ 8 СИМВОЛОВ): ";
cin >> zapis[i] . a; // Доступ к элементу а экземпляра структуры zapis[i]
// выполняется операцией точка (.)
cout << "\nУКАЖИТЕ СТОИМОСТЬ ДЕТАЛИ : ";
cin >> zapis[i] . t; // Доступ к элементу t экземпляра структуры zapis[i]
cout << "\nНЕОБХОДИМОЕ КОЛИЧЕСТВО - (ЦЕЛ. ЧИСЛО): \n";
cin >> zapis[i] .k; // Доступ к элементу k экземпляра структуры zapis[i]
}
// Выполнение расчетов:
s1=0;s2=0;s3=0;
for( i=0; i < n; i++)
{
zapis[i].c = zapis[i].t * zapis[i].k;
s1 += zapis[i].t;
s2 += zapis[i].k;
s3 += zapis[i].c;
}
// Построение "шапки" таблицы
clrscr();
cout << "\n СВЕДЕНИЯ О СТОИМОСТИ ВЫДАННЫХ ДЕТАЛЕЙ ";
cout << "\n|---------------------------------------------------------------------------------|";
cout << "\n| n/n | ДЕТАЛЬ | СТОИМОСТЬ | ВЫДАНО | РАСХОД |";
cout << "\n|---------------------------------------------------------------------------------|";
// Заполнение таблицы данными:
for(i=0;i<n;i++)
cout << "\n|" << setw(7) << i+1 << "|" << setw(8) << (zapis[i]).a << "|"
// ------
// |-> манипулятор потока, указывает, что следующая
// выходная величина (i+1) будет напечатана с ши
// риной поля, равной 7 символам
<< setw(13) << setprecision(2) << (zapis[i]).t << "|"
// --------------
// |-> манипулятор потока, указывает, что следующая
// выходная будет напечатана с двумя цифрами по
// сле десятичной точки
<< setw(8) << setprecision(2) << (zapis[i]).k << "|"
<< setw(8) << setprecision(2) << (zapis[i]).c << "|";
cout << "\n|-------------------------------------------------------------------------| ";
cout << "\n| ИТОГО: |" << setw(13) << setprecision(2) << s1
<< "|" << setw(8) << s2<< "|" <<setw(8) << setprecision(2) << s3 << "|";
cout << "\n|--------------------------------------------------------------------------|";
return 0;
}
Для форматирования вывода информации на монитор в программе используются манипуляторы потока setw и setprecision. Их назначение приведено в соответствующих комментариях программы_1_2.
Одни из возможных результатов работы программы при формировании трехстрочного документа имеет следующий вид:
