Розробка програм з використанням структур

Приклад 1. Сформувати масив даних про 5 студентів групи. По кожному студенту необхідно мати дані: ПІБ, дата народження, стать. Вивести перелік юнаків, що народились в 1988 році.

#include <iostream.h> #include <fstream.h> struct zStudent { char FIO[20]; char pol; struct {int d,m,g;} data_r; }; void main() { zStudent stud[5]; int k; for (k=0;k<5;k++) { cout<<"\nVvod FIO "; cin>>stud[k].FIO; cout<<"Vod pol "; cin>>stud[k].pol; cout<<"Vod data r(d m g) "; cin>>stud[k].data_r.d>> stud[k].data_r.m>>stud[k].data_r.g; } cout<<"Spisok "<<endl; for (k=0;k<5;k++) if (stud[k].data_r.g==1988 && stud[k].pol=='m' ) cout<<stud[k].FIO<<endl; }

 


Питання для самоперевірки

 

2) Описати структуру, яка описує карту: масть, достоїнство. Ініціалізувати структуру

3) Описати структуру, яка описує кісточку доміно: значення на лівій частині, значення на правій частині. Використовуючи змінну типу цієї структури, присвоїти полям відповідні значення.

4) Написати оператор виводу значень елементів структури, описаної в п.2.

5) Описати структуру, яка описує студента групи: ПІБ, група. Ініціалізувати структуру.

6) Описати структуру, що описує м'яч: колір, розмір, матеріал. Ініціалізувати структуру.

7) Описати структуру, що описує собаку: порода, окрас, рук народження, наявність медалей. Ініціалізувати структуру.

8) Визначити розмір структури, описаної в п.5.

9) Описати структуру, яка описує студента групи: ПІБ, группа, дата народження(день, місяць, рік), адреса(область, місто, вулиця, дім, квартира), використовуючи вкладені структури. Ініціалізувати структуру.

10) Вивести, використовуючи структуру з п.8, ПІБ стулента і його адресу.

 

Об¢єднання 1) Визначення об‘єднань2) Оголошення об‘єднань3) Доступ до елементів об‘єднань

Об¢єднання - це область пам¢яті, в якій в різні моменти часу можуть знаходитись об¢єкти різних типів. В довільний момент часу об¢єднання може містити тільки один об¢єкт, тому що елементи об¢єднання сумісно використовують одну й ту ж область пам¢яті.

Об¢єднання оголошуються за допомогою ключового слова union в такому ж форматі, як і структури. Формат оголошення:

union Number

{

int x;

float y;

};

Як правило, об¢єднання оголошуються до головної функції, щоб мати доступ до нього з довільної функції.

Пам'ять, яка відповідає змінній типу об'єднання, визначається величиною, необхідною для розміщення найдовшого елемента об'єднання. Коли використовується елемент меншої довжини, то змінна типу об'єднання може містити невживану пам'ять. Всі елементи об'єднання зберігаються в одній і тій же області пам'яті, починаючи з однієї адреси.

Доступ до елементів об'єднання здійснюється тим же способом, що і до структур.

Коли виконано присвоєння Numder.x=78; то звернення то іншого елементу не має сенсу. В пам¢яті буде зберігатись значення останнього присвоєння.

Об¢єднання дозволяє інтерпретувати представлення об'єкту одного типу, начебто цьому об'єкту був привласнений інший тип.

Допустимі операції такі ж, як і у структури.

 

 


Указники 1) Визначення указника2) Операції над указниками3) Зв‘язок між указниками і масивами4) Масиви указників Визначення указника Це змінні, значеннями яких є адреса пам‘яті. Указник містить адресу, за якою знаходиться значення. Кожна змінна, яка оголошується як указник, повинна мати перед собою знак *. Формат опису: <тип> *<ім‘я змінної>Символ * може стояти будь-де: int *ptr; int* ptr; int * ptr;Указник може бути ініційований при оголошенн і: int *ptr=(int*)200; або за допомогою операції присвоєння:
(а)
int y=5;int *ptr;ptr=&y;Пустий указник має значення NULL. Це значення визначено в бібліотеці stdio..Операції над указниками 1) Операція розіменування2) Арифметичні операції3) Операції відношення4) Операція присвоєння Операція розіменування Операція повертає значення об‘єкту, на яке указує указник. Операція позначається символом *, який ставиться поперед указником.Для отримання значення на яке указує указник, використовується операція розіменування.Якщо маємо опис (а), то після виконання cout<<*ptr; буде виведено значення 5.Арифметичні операції
Операція Позначення Опис
Інкремент ++ Збільшення указника для переходу до наступної адреси
Декремент - - Зменшення указника для переходу до попередньої адреси
Додавання +, += Збільшення указника на ціле число
Віднімання -, -= Зменшення указника на ціле число. Можна знайти різницю між двома указниками
Фізичне збільшення або зменшення значення указника залежить від розміру того об‘єкту, на який він указує. Якщо до указника, описаного в (а), додати обо відняти деяке ціле N, то значення ptr зміниться на значення N*sizeof(int). Операції відношення Операції відношення == і != можна використовувати для всіх указників.Операції <, >, >=, <= мають сенс тільки для указників на один і той же масив. Операція присвоєння Указник можна привласнити іншому указнику, якщо обидва мають одинаків тип. Наприклад:int *a,*b;float *c;Допустимо a=b; Зв‘язок між указниками і масивами Указники широко використовуються при роботі з масивами.Ім.‘я масиву є адресою першого елементу масиву. Наприклад, маємо описиint b[5];int *bptr;Так як ім‘я масиву є указником на перший елемент масиву, то можна задати указнику bptr адресу першого елементу масиву b і виконати присвоєння:bptr=b; Ця дія еквівалентна наступній дії: bptr=&b[0];Операції ++ і - - при роботі з масивами будуть означати перехід до наступного або попереднього елементу масиву.Операції + і - деякого значення N будуть означати перехід до елементу масива, що лежить через N елементів від поточного.bptr+=2; буде означати перехід до 3-го елементу. bptr буде указувати на 3-й елемент.bptr+=2; буде означати перехід до 5-го елементу. До 4-го елементу масиву можна звернутись наступним чином:b[3]*(bptr+3)*(b+3)bptr[3] Масиви указників Елементами масивів можуть бути указники. Типовим представником такої структури є формування масиву рядків. Кожний елемент такого масиву є рядок. Змінна рядка є по суті указником на її перший символ. Наприклад: сhar *color[3]={”червоний”,“жовтий”,”зелений”};Масив color оголошено таким, що складається з указників на тип сhar. Кожне з значень ”червоний”, “жовтий”, ”зелений” зберігається в пам‘яті як окремий рядок. Масив color буде містити указники на кожен з рядків. Кожний указник посилається на перший елемент відповідного рядку. Для звернення до елементів масиву необхідно вказати індекс відповідного елементу і операцію розіменування. Наприклад, для виведення значення третього елементу:cout<<*color[2];Використання масиву указників дає більшу гнучкість тому, що розмір рядку не обмежений.Наприклад, подібний масив можна було оголосити як двовимірний масивсhar color[3][10]={”червоний”,“жовтий”,”зелений”};Але в цьому випадку кількість елементів рядків обмежена 10 символами.

Питання для самоперевірки

1) Описати указник на цілу змінну і ініціалізувати його.

2) Описати указник на дійсну змінну і ініціалізувати його.

3) Описати і ініціалізувати указник на масив 10 цілих елементів.

4) Маємо опис:

int b[8];

int *bPtr=b;

Вивести значення третього елементу масив, використовуючи указник.

5) Маємо опис:

int b[8]={1,2,3,4,5,6,7,8};

int *bPtr=b;

Що буде виведено при виконанні операторів:

cout<<b[7];

cout<<*bPtr;

cout<<*(bPtr+2);

 

6) Маємо опис:

int b[8]={1,2,3,4,5,6,7,8};

int *bPtr=b;

Що буде виведено при виконанні операторів:

cout<<*(b+7);

bPtr++;

cout<<*bPtr;

cout<<*(bPtr-1);

7) Маємо опис:

int b[8]={1,2,3,4,5,6,7,8};

int *bPtr=b;

Що буде виведено при виконанні операторів:

cout<<*(b+4);

bPtr-=2;

cout<<*bPtr;

cout<<bPtr[3];

8) Маємо опис:

int b[8]={1,2,3,4,5,6,7,8};

int *bPtr=b;

Що буде виведено при виконанні операторів:

cout<<*(bPtr+5);

bPtr++;

cout<<*bPtr;

bPtr+=3;

cout<<*(bPtr-2);

Файли і потоки

 

1) Введення і виведення потоків

2) Робота з файлами послідовного доступу

3) Приклад діалогової програми з використанням файлів послідовного доступу

4) Робота з файлами довільного доступу

 

Введення і виведення потоків

Потік -- це послідовність байтів. В операціях введення байти пересилаються від пристрою в оперативну пам'ять. Байти даних можуть представлятися у вигляді символів в коді ASCII, у вигляді внутрішнього формату, у вигляді графічного зображення, цифрового зображення і т.д.

Мова надає можливості для введення-виведення на «низькому» і «високому» рівнях. Уведення-виведення на низькому рівні (тобто неформатоване уведення-виведення) здійснює просто пересилку даних по байтах від пристрою в пам'ять і навпаки. При використанні введення-виведення на високому рівні (тобто форматоване уведення-виведення) байти групуються в певні елементи, наприклад цілі або речовинні числа, символи, рядки і дані типів, визначених користувачем.

При використанні потокового введення-виведення необхідно підключити наступні заголовні файли:

- <iostream.h> -- містить основні відомості, необхідні для всіх операцій з потоками введення-виведення.

- <iomanip.h> -- відомості для форматування

- <fstream.h> -- інформація для операцій з файлами, обробка яких здійснюється користувачем.

 

В C++ визначено три класи файлового введення-виведення:

 

ifstream вхідні файли для читання
ofstream вихідні файли для запису
fstream файли для читання і запису

 

Файли відкриваються шляхом створення об'єктів цих класів потоків.

При роботі з файлами цих класів можна використовувати ряд властивих їм методів ( open – для відкриття потоку, close – для закриття потоку) і застосовувати дуже зручні операції помістити в потік (<<) і узяти з потоку (>>).

Файли що використовуються є текстовими.

 

Робота з файлами послідовного доступу

 

1) Виведення у файл

2) Приклад

3) Читання з файлу

4) Приклад

 

Необхідно створити об'єкт потоку виведення, пов'язаний з файлом, за допомогою конструктора. Параметром для конструктора буде ім'я файлу виведення і режим відкриття файлу.

Можливі режими відкриття файлу приведені таблиці:

 

Режим Опис
ios::out Відкрити файл для виведення. Вміст файлу очищається
ios::app Відкрити для додавання в кінець файлу
ios::ate Переміститися в кінець відкритого файлу
ios::in Відкрити файл для введення
ios::frunc Очищається вміст файлу
ios::nocreate Якщо файл не існує, то операція його відкриття не виконується.
ios::noreplace Якщо файл існує, то операція його відкриття не виконується.

 








Дата добавления: 2015-08-26; просмотров: 672;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.022 сек.