Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ Metod_new.doc
Скачиваний:
3
Добавлен:
10.11.2019
Размер:
939.52 Кб
Скачать

2. Масиви структур

Припустимо, що ви працюєте в компанії замовлення поштою, що продає дисководи. Перед Вами стоїть задача написати програму для обліку 25 видів пристроїв. По дисководу є така інформація:

  • місткість пристрою, що запам’ятовує;

  • час доступу в мілісекундах;

  • код постачальника;

  • ціна.

Дані зручно розмістити в масиві структур

struct inf_d

{

long int ob;

int vr;

int kod;

double cena;

} drive[25];

або окремим рядком:

inf_d drive[25];

Структури зручно записувати на диск (спробуйте самостійно)

Приклад:

#include <iostream.h>

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

struct inf_d //Глобальне визначення

{

long int ob;

int vr;

int kod;

double cena;

};

inf_d v_dan()

{

inf_d disk;

cin >> disk.ob;

cin >> disk.vr;

cin >> disk.kod;

cin >> disk.cena;

return disk;

}

void menu()

{

clrscr(); //(у Visual C++ використовується system("cls"))

cout << "1. введення даних про дисковод\n";

cout << "2. Відображення даних\n";

cout << "3. Вихід\n";

}

void pros(inf_d disk[25], int num)

{

for(int ctr = 0; ctr < num; ctr++)

{

cout <<"\n" << disk[ctr].ob ;

cout <<"\n" << disk[ctr].vr;

cout <<"\n" << disk[ctr].kod;

cout <<"\n" << disk[ctr].cena<<"\n";

}

getch();

}

void main ()

{

inf_d disk[25];

int ans;

int num = 0;

do

{

do

{

menu();

cin >> ans;

} while ((ans < 1) || (ans>3));

switch(ans)

{

case 1:

disk[num] = v_dan();

num++;

break;

case 2:

pros(disk,num);

break;

default:

break;

}

}

while(ans!=3);

}

3. Використання масивів, як елементів структур

Дано структури платіжних відомостей:

struct pl

{

char name[25]; //ім’я службовця

char otd[10]; //назва відділу

double zar; //зарплата

} mas_pl[100];

Припустимо необхідно записати в символьну змінну ініціал ім’я 25-го службовця:

char iniz;

iniz = pl[24]. name[0];

Якщо необхідно змінити ім’я службовця, тоді:

strcpy(pl[24]. name, "Іван Петрович");

Приклад. Книгарня хоче створити каталог про книги.

#include <iostream.h>

#include <stdio.h>

#include <ctype.h>

struct inven

{

char title[25]; //заголовок

char pub[19]; //Дата публікації

char avt[20]; //Ім’я автора

float cena;

};

void main()

{

inven kn[100];

int total = 0;

char ans;

do //введення даних

{

gets(kn[total].title);

gets(kn[total].pub);

gets(kn[total].avt);

cin >> kn[total].cena;

cout << "\n Будете вводити? (Y/N)";

ans = getch();

ans = toupper(ans);

if(ans == ’Y’)

{

total++;

continue;

}

}

while(ans != ’N’);

}

Приклад запису на диск масиву структур:

Така функція може бути частиною великої програми, що одержує дані досліджень у масив структур від користувача. Дана функція приймає ім’я масиву і число елементів. Функція write записує повний масив на диск, використовуючи вказівку fp. fp у даному випадку оголошену глобально.

#include <iostream.h>

#include <stdio.h>

#include <ctype.h>

ofstream fp;

struct inv

{

char title[25]; //заголовок

char pub[19]; //Дата публікації

char avt[20]; //Ім’я автора

float cena;

};

void write (struct inv m[], int kol)

{

fp.write(m, kol*sizeof(struct inv));

return;

}

Якщо масив із даними досліджень має 1000 елементів, дана функція буде все одно записувати їх за один раз. Крім того, можна використовувати функцію read(), щоб зчитувати вміст масиву за один виклик функції.

Слід сказати, що при роботі в режимі MS_DOS або у консольному режимі виникають проблеми з кодировкою символів. З цією метою у приведеному прикладі запропоновано функцію recode(), яка переводить символьні данні з кодировки Windows у DOS. Крім того, за допомогою функції IsNumeric() передбачено контроль введення числових даних ( false(0) – контроль цілих значень, true(1)–дробових). Якщо введено число – функція повертає значення true, якщо ні – false.

УВАГА!!! Необхідно звернути увагу на наступні моменти програми:

1. З метою коректного введення та контролю даних використовується функція gets. Функцію потокового введення cin використовувати недоцільно, так як немає контролю натискання клавіші <Enter>.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]