Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Технологии разработки ПО 2005.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
833.54 Кб
Скачать

Поиск в массиве структур

Рассмотрим пример программы, позволяющей осуществлять поиск по наименованию товара в базе товаров.

… то же самое

void poisk_po_name(Tovar *tb, int& R) {

char namet[N];

cout << "\nVvedite naimenovanie tovara: "; cin >> namet;

int l = strlen(namet);

cout << "\n Naideny sovpadeniya: " << endl;

for(int i=0; i<R; i++) {

if(strncmp(namet, tb[i].name, l)==NULL) { //сравнивает первую строку и

//l-символов второй строки

cout << tb[i].name << " " << tb[i].number << " " << tb[i].cena;

cout << endl;

}

}

}

Данная функция позволяет по нескольким первым буквам, указанным пользователем, определить наличие совпадений в базе и вывести их.

Вложенность структур

Структуры допускают вложенность, т.е. использование структурной переменной в качестве поля какой-либо другой структуры. Рассмотрим практический пример применения структур для решения следующей задачи.

Составим программу для расчёта площади комнаты, учитывая что придётся работать в английской системе мер, основными единицами измерения которой служат фут и дюйм, причём 1 фут равен 12 дюймам.

struct Distance { // Расстояния в английской системе

int feet; // футы

float inch; // дюймы

};

struct Ploshad { // Размеры для определения площади комнаты

Distance length;

Distance width;

};

int main() {

Ploshad komnata1;

komnata1.length.feet = 13; komnata1.length.inch = 6.5;

komnata1.width.feet = 10; komnata1.width.inch = 0.0;

float l1 = komnata1.length.feet + komnata1.length.inch / 12;

float w1 = komnata1.width.feet + komnata1.width.inch / 12;

cout << "Ploshad komnaty1 = " << l1*w1 << " (kv. futov).\n";

Ploshad komnata2 = {{13, 6.5},{10, 1.10}}; // инициализация размеров по длине и ширине

float l2 = komnata2.length.feet + komnata2.length.inch / 12;

float w2 = komnata2.width.feet + komnata2.width.inch / 12;

cout << "Ploshad komnaty2 = " << l2*w2 << " (kv. futov).\n";

return 0;

}

Преобразование целого типа поля feet к типу float происходит автоматически. При вычислении площади комнаты на самом деле осуществляется преобразование переменной типа Ploshad, хранящей два значения типа Distance, к одному вещественному значению. Возможность преобразования значений одного типа в значения другого типа является важным аспектом для программ, которые используют типы данных, определяемые пользователем.

Д/З

Измените рассмотренную программу, создав вместо структуры Ploshad, структуру Volume для хранения трёх измерений помещения. Программа должна вычислять объём двух комнат и выводить результат на экран. Для одной комнаты размеры фиксированные, а для другой должны вводится пользователем.

Ответ

struct Distance { // Расстояния в английской системе

int feet; // футы

float inch; // дюймы

};

struct Volume { // Размеры для определения объёма комнаты

Distance length;

Distance width;

Distance height;

};

int main() {

Volume komnata1 = {{13, 6.5},{10, 1.10}, {24.3, 2}};

float l1 = komnata1.length.feet + komnata1.length.inch / 12;

float w1 = komnata1.width.feet + komnata1.width.inch / 12;

float h1 = komnata1.height.feet + komnata1.height.inch / 12;

cout << " Ob'em komnaty1 = " << l1*w1*h1 << " (kub. futov).\n";

Volume komnata2;

cout << "\nVvedite dlinu komnaty2 v futax: "; cin >> komnata2.length.feet;

cout << "Vvedite ostav. dlinu v inches: "; cin >> komnata2.length.inch;

float l2 = komnata2.length.feet + komnata2.length.inch / 12;

cout << "\n Ob'em komnaty2 = " << l2*w2*h2 << " (kub. futov).\n";

return 0;

}