Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB02.DOC
Скачиваний:
1
Добавлен:
11.11.2019
Размер:
98.3 Кб
Скачать

Результат роботи програми:

Summma of angles = 253*51'33''

*

2.3. Використання friend-функцій для доступу до private-змінних класу.

Особливістю кожного класу є можливість ізолювати дані - це дані типу private, до яких мають доступ тільки функції-елементи класу - так звані friend-функції. Ці функції дозволяють викорис­товувати приватну інформацію класу, без того, щоб бути елементами класу. Ці функції не описуються в самому класі, але можуть пра­цювати з тими ж ресурсами класу, до яких звертаються friend-функції.

Приклад.

Програма отримує від системи дату і час у формі строки. Час переводиться в секунди.

Файл times.h (протокол).

#include <iostream.h>

#include <time.h>

#include <string.h>

#include <stdlib.h>

class time_class

{

long secs;

friend char* present_time(time_class);

public:

time_class (char*);

};

Файл times.cpp

time_class :: time_class (char*tm)

{

char *hours, *minutes, *seconds;

// дані повертаються у формі строки:

// (день місяць дата години: хвилини: секунди р·к

// Пропускається три лексеми:

// день, місяць і дата

hours = strtok(tm, " ");

hours = strtok(0, " ");

hours = strtok(0, " ");

//отримання часу з строки

hours = strtok(0,":");

minutes = strtok(0," ");

secs = atol(hours)*3600;

secs+ = atol(minutes)*60;

secs+ = atol(seconds);

//// times.cpp - end.

// Головна програма.

char *present_time (time_class); // прототип дружньоїфункції

main ()

{

struct tm *ptr;

time_t ltime;

ltime = time(NULL);

ptr = localtime (&ltime);

time_class tz(asctime (ptr));

cout << "Інформаційна строка дати/часу:" << asctime (ptr) << endl;

cout << "час в секундах: " << present_time(tz) << endl;

return (0);

}

// Опис дружньој функції

char * present_time (time_class tz)

{

char * ctbuf;

ctbuf = new char[40];

long int seconds_total;

seconds_total = tz.secs;

ltoa (seconds_total,ctbuf,10);

return (ctbuf);

}

Коментар.

В функції main() системний час отримується за допомогою типу time_t і зв"язаної з ним структури tm. Функція asctime(ptr) перетворює вказівник ptr на вказівник, який вказує на ASII-строку, яка містить дату і час. Конструктор time_class (char*) за допомогою функції strtok() перетворює строку в цілочисельні дані, які friend-функція present_time знову переводить в тип char, маючи доступ до змінної (приватної) secs через об'єкт tz класового типу time_class.

З А В Д А Н Н Я

1. Виконати множення двох відрізків :

[

| [c, b], якщо (a < c <= b) · (c <= b < d);

| [c, d], якщо (a < c <= d) · (c <= d < b);

| [a, d], якщо (c < a <= d) · (a <= d < b);

[a, b]*[c, d] = {

| [a, b], якщо (c <= a < b) · (a < b < d);

| [0, 0], якщо b < c < d;

| [0, 0], якщо d < a < b;

[

2. Виконати додавання відрізків, що перетинаються:

(min(a, b, c, d), (max(a, b, c, d)).

  1. Кон'юнкція - * множення двох логічних виразів, задано таблицею істинності

p | q | p*q

----------------

1 | 1 | 1

0 | 1 | 0

1 | 0 | 0

0 | 0 | 0

4. Диз'юнкція - + додавання двох логічних виразів, задано таблицею істинності

p | q | p+q

----------------

1 | 1 | 1

0 | 1 | 1

1 | 0 | 1

0 | 0 | 0

5. Імплікація - / ділення двох логічних виразів, задана таблицею істинності

p | q | p/q

----------------

1 | 1 | 1

0 | 1 | 0

1 | 0 | 0

0 | 0 | 1

  1. Задана послідовність з n нерівних між собою чисел. Додавання визна

чається як сума чисел цієї послідовності, розміщених між максимальним

і мінімальним числами ( в суму не включати ці два числа).

  1. Задані координати n точок на площині: (x1, y1), … , (xn, yn). Знайти

номери двох точок, відстань між якими найбільша (вважати, що така

пара точок єдина). Додавання визначити як суму знайдених номерів.

  1. Операція множення визначається по формулі:

y = (3 + (6 + (9 + ….. (3n + (3n + 3)1/2)1/2)1/2)1/2)1/2 .

  1. Задана непуста послідовність різних натуральних чисел, за якою слідує 0.

Операцію додавання визначити порядковим номером найменшого, не

рівного нулеві, числа з цієї послідовності.

  1. Множення двох натуральних чисел визначається як їх найбільший

спільний дільник.

  1. Диз'юнкція - + додавання двох логічних виразів, задано так:

якщо серед чисел sin(xn) є хоча б одне від’ємне число, то логічній

змінній t присвоїти значення 1, інакше - значення 0.

  1. Результатом додавання є перше від’ємне значення послідовності

cos(tg n), n = 1, 2 3, ….

  1. Для заданого натурального n операція множення визначається

результатом обчислення по формулі

x0 =1, xn = nxn-1 + 1/n .

  1. Логічне додавання визначається так: якщо два натуральні числа -

парні, то логічгій змінній t присвоїти значення 1, якщо обидва -

непарні - значення 0.

14. Логічне множення визначається таблицею істинності

p | q | p*q

---------------

1 | 1 | 0

0 | 1 | 1

1 | 0 | 1

0 | 0 | 0

15. Логічна операція “” задано таблицею істинності

p | q | pq

----------------

1 | 1 | 0

0 | 1 | 1

1 | 0 | 0

0 | 0 | 0

16. Задана послідовність з n нерівних між собою чисел. Додавання визна

чається як сума чисел цієї послідовності, розміщених між максимальним

і мінімальним числами ( в суму включати ці два числа).

17. Множення двох натуральних чисел визначається як їх найменший спільний дільник.

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