1
Лабораторна робота
Тема: Складання програм на опрацювання масивів, елементами яких є структури
Мета: Вивчити способи опису і ініціалізації масивів структур та набути практичні навики роботи з ними.
1 Короткі теоретичні відомості
Структури, полями яких є масиви. Полями структурного типу можуть бути масиви. В прикладі визначений структурний тип data, який містить цілочисельний масив з 4-х елементів і символьний масив з 9-ти елементів. Описана змінна record цього типу.
struct data
{ int x[4];
char y[10]; } record;
заданні значень змінної структурного типу record при описі у зовнішніх фігурних дужках задаються через кому елементи полів структури, а у внутрішніх фігурних дужках задаються елементи масивів 2-х полів структури. В одній структурі можуть бути прості поля, масиви або структури. Приклад:
struct data record ={{100,200,300,00}, “x123a45b8” };
Щоб звернутися до окремого елементу масиву, який є полем структури, використовується комбінація крапки після змінної структурного типу і індексу масиву, який є полем структури.
record.x[0]=100; record.x[1]=20; record.x[2]=300; record.x[3]=400;
record.y[0]=’x’; record.y[1=’1’; record.y[2=’y’; record.y[3]=’3’; record.y[4]=’a’;
record.y[5]=’4’; record.y[6]=’5’; record.y[7]=’b’; record.y[8]=’8’; record.y[9]=’\0’;
Оскільки ім’я масиву це вказівник на цей масив, тому вміст масиву символів y[] в структурі record можна вивести так
puts (record.y);
Масиви, елементами яких є структури. Змінні структурного типу можна зберігати в масивах. Визначення структурного типу S, який має три поля, і опис масиву list[5] з п’яти елементів:
struct S
int x;
float y;
char z; } list[5];
Кожний елемент масиву є змінною структурного типу S, який містить три поля. При заданні значень змінних структурного типу при описі у зовнішніх фігурних дужках задаються елементи масиву через кому, кожний з яких складається з полів структури. Тому у внутрішніх фігурних дужках задаються полія структури через кому для кожного елементу масиву. Приклад:
struct S list[5]={{1,2,3},{4,6,9},{23,89,7},{56.89.90},{2,8,9}};
При зверненні до полів таких структур спочатку пишемо елементи масиву з індексами, крапка і після крапки поле структури. Приклад:
list[0].x=1; list[0].y=2; list[0].z=3;
list[1].x=4; list[1].y=6; list[1].z=9;
list[2].x=23; list[2].y=89; list[2].z=7;
list[3].x=56; list[3].y=89; list[3].z=90;
list[4].x=2; list[4].y=8; list[4].z=9;
При збереженні змінних структурного типу в масивах, поля структури також можуть бути масивами. Приклад визначення такої структури S:
struct S
char fname[5];
char lname[6];
char phone[8]; } list[10];
Описана змінна структурного типу з іменем list, яка є масивом з десяти елементів. Кожний елемент масиву є змінною структурного типу S, який містить три поля, причому ці поля є масивами типу char. Елемент розпізнається по індексу.
Для присвоєння даних з одного елементу масиву в другий можна записати
list[1]=list[5];
Цей оператор присвоює всім полям структури list[1] значення відповідних полів структури List[5]
strcpy(list[1].phone, list[5].phone);
Копіює рядок list[5].phone в рядок list[1].phone.
2. Питання вхідного контролю
1 В чому різниця між структурою і масивом?
2 Яким символом позначається операція звернення до елементу структури?
3 З допомогою якого ключового слова визначаються структури?
3. Завдання
Написати програму для опрацювання масиву, елементами якого є змінні структурного типу. Масив структур повинен містити не менше 5-ти елементів. Масив ввести з клавіатури або задати при описі.
4. Варіанти індивідуальних завдань
1. Написати програму, яка вводить масив записів про автомобілі (модель, рік випуску, ціна колір, потужність двигуна). Програма повинна знайти і вивести на екран дані про автомобілі червоного кольору, які випущені після 2002 року і коштують менше 20000 грн.
2. Написати програму, яка вводить масив записів про персональні комп’ютери (Тип процесора, об’єм ОЗП, тип і об’єм жорсткого диску, наявність окремої відеокарти). Програма повинна знайти і вивести на екран дані про комп’ютери, у яких об’єм ОЗП більший 256 МБ і є окрема відеокарта.
3. Написати програму, яка вводить масив записів про мобільні телефони (виробник, модель, об’єм пам’яті, наявність фотокамери, наявність МР3 – плеєра, ціна). Програма повинна знайти і вивести на екран дані про телефони без камери і з МР3 –плеєром.
4. Написати програму, яка вводить масив записів про цифрові фотоапарати (виробник, модель, наявність оптичного збільшення, кратність оптичного збільшення, тип інтерфейсу, об’єм пам’яті, ціна). Програма повинна знайти і вивести на екран дані про фотоапарати у яких об’єм пам’яті перевищує 64 МБ, які мають оптичне збільшення.
5. Написати програму, яка вводить масив записів про студентів (Прізвище, ім’я, рік народження, група, рейтинг, стать). Програма повинна знайти і вивести на екран прізвища та ініціали студентів у яких рейтинг менший 50 балів і рік народження більший 2000.
6. Написати програму, яка вводить масив записів про телевізори (модель, діагональ екрана, ціна, наявність супутникового тюнера, кількість систем декодування кольору). Програма повинна знайти і вивести на екран дані про телевізори з діагоналлю екрану менше 54 см і ціною менше 6000 грн.
7. Написати програму, яка вводить масив записів про музичні центри (модель, наявність підтримки МР3 формату, вихідна потужність, ціна, наявність дистанційного керування). Програма шукає і виводить на екран дані про музичні центри які підтримують МР3 і коштують менше 300 грн.
8. Написати програму, яка вводить масив записів про країни Європи (Назва, столиця, кількість населення, площа, кількість міст). Програма повинна знайти і вивести на екран дані про країни, площа яких більша від 20000 км2 і кількість населення менша 40000000 чол.
9. Написати програму, яка вводить масив записів про ріки України (Назва, басейн, довжина, площа приток, в яке море впадає). Програма повинна знайти і вивести на екран дані про річки , довжина яких більша за 100 км і площа приток менша 3000 км2.
10. Написати програму, яка вводить масив записів про наявність комплектуючих до персональних комп’ютерів на складі (назва комплектуючого, кількість, вид упаковки, постачальник, адреса, ціна). Програма повинна вивести на екран дані про постачальників, кількість комплектуючих яких менша від 10 і ціна більша від 1000 грн.
11. Написати програму, яка вводить масив записів про працівників фірми (Прізвище, ім’я, стать, освіта, стаж роботи, посада). Програма повинна вивести на екран дані про працівників з вищою освітою і стажем роботи більше 30 років..
12. Написати програму, яка вводить масив записів про цифрові диктофони (модель, кількість годин запису, тип інтерфейсу, ціна, наявність зарядного пристрою). Програма повинна знайти і вивести на екран дані про цифрові диктофони, які мають час запису більший від 2 год і ціна менша від 3000 грн.
13. Написати програму, яка вводить масив записів про наявність носіїв даних в магазині (тип носія, виробник, ціна, ємність, кількість). Програма повинна знайти і вивести на екран дані про носії, кількість яких менша від 56 і ціна більша від 500 грн.
14. Написати програму, яка вводить масив записів про відеокамери (модель, тип (цифрова/аналогова), ціна, наявність цифрового збільшення, кратність цифрового збільшення, кратність оптичного збільшення). Програма повинна вивести на екран дані про відеокамери, які не мають цифрового збільшення і ціна менша від 3000 грн.
15. Написати програму, яка вводить масив записів про персональні комп’ютери (Тип процесора, об’єм ОЗП, тип і об’єм жорсткого диску, наявність окремої відеокарти). Програма повинна знайти і вивести на екран дані про комп’ютери, у яких об’єм ОЗП більший 256 МБ і є окрема відеокарта.
5. Методичні вказівки
6 Приклад виконання лабораторної роботи
Написати програму, яка вводить масив записів про країни Європи (назва, столиця, кількість населення, площа, кількість міст). Програма повинна вивести на екран дані про країни, площа яких більша від 600 км2 і кількість населення менша від 32000 чол.
Текст програми (ввід даних при описі):
#include <iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{int i;
struct dani
{char nazva[20];
char stol[20];
int nasel;
int plos;
int mist; } infor[3]={{"Poland", "Warchava", 31000, 789, 560},
{"France", "Paris", 8700, 565, 8400},
{"Ukraine", "Kiyv ", 5200, 988, 24000}};
puts("Vuvid spusky");
for(i=0;i<3;i++)
{if((infor[i].plos>600) && (infor[i].nasel< 32000) ){
cout << infor[i].nazva<< "\t"<< infor[i].stol <<
"\t" << infor[i].nasel <<"\t" << infor[i].mist << "\n";}}
return 0;}
Результат:
7. Питання вихідного контролю
1. Які способи ініціалізації структур даних Ви знаєте?
2 Як оголосити масив структур?
3. Як можна отримати доступ до поля елемента структури?
4 Чому структури називають типом даних користувача?
Джерела інформації