Операції поміщення та вилучення 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Операції поміщення та вилучення



Бібліотека класів C++передбачає два основних класи для вводу та виводу: відповідно istream та ostream. Потокові оператори застосовуються наступним чином:

об'єкт_потоку_вводу» змінна; об’ект_потоку_виводу «змінна;

Примітка. Ці оператори не слід шугати з відомими побітовими операторами зсуву вліво та вправо. Образно кажучи, в розглядуваному контексті перевантажені оператори » та « однозначно ясно вказують напрямок потоку даних від одного об'єкта до іншого.

Поток cout (character out) - стандартний символьний вихідний шток, що по замовчування відповідає пристрою виведення (дисплей). Клас ostream використовує для виведення перевантажену операцію лівого зсуву («), Якщо ця операція застосовується об'єктом-потоком, вона носить ім'я операції поміщення у поток (insertion operation). Наступний приклад друкує рядок, застосовуючи операцію поміщення до визначеного об'єкту cout

#include<iostream.h>

int main(void)

{

cout «'Hello!';

return 0;

Проаналізуємо, як відпрацює такий фрагмент. По-перше, С++ визначить, що в даній операції « лівий аргумент cout має тип ostream, а правий ~ char*. За цими даними у заголовочному файлі буде знайдений відповідний прототип функції - ostream& operator«(ostream&, char*). Після цього буде згенерований виклик функції поміщення у поток operator« з рядком ‘Hello!’ та екземпляром cout в якості параметрів. Іншими словами, здійснюватиметься виклик стандартної бібліотечної функції operator«(couit'Hello!'), як того у даному випадку вимагає прототип.

Аналогом в традиційному С потоку cout відповідає функція fprintf() та ім'я пристрою виведення stdout Розглянемо простий приклад, що застосовує у двох варіантах відповідно printf() (це тільки скорочена форма fprintf(stdout,...j) та об'єкт cout:

1 варіант
double num=2.35;

printf ("show I:%Id\а ", ішш); // " сміття" па виході!

2 варіант
double num~2.35;

cout«”show 2=”«num«”\n ”; // а тут все буде правильно

Саме тут і впадає в очі перевага потоків. Символи % ld в першому варіанті повідомляють про те, що змінна num відноситься до типу long. У наступному рядку при активації функції виявляється невідповідність типів, і printf() мовчки виконує неправильне виведення. Застосовуючи у другому варіаші об'єкт - поток, подібна помилка просто виключена - інформація про тип автоматично надходить безпосередньо від самого об'єкту cout.

Поток cin(character in ) - стандартний символьний поток введення, що по замовчування відповідає клавіатурі. Клас istream використовує для введення перевантажену операцію правого зсуву (>>). У розглядуваному контексті її називають операцією вилучення з потоку (extraction operation ). Аналогом цього потоку в Сі відповідає fscanf() та ім'я пристрою stdin. Наступний приклад застосовує операцію вилучення зі стандартного потоку для визначеного об'єкту сіп, аби прочитати рядок з клавіатури:

#include<iostream.h> int main(void)

{

char name [100];

cout«”Введіть ваше ім'я;;

сіn» name;

cout «"Привіт,";

cout«name;

return 0;

Класи istream та ostream відповідно » та « для усіх вбудованих типів даних. Таке перевантаження дозволяє використовувати однаковий синтаксис для роботи зі змінними різних типів. Наступний приклад ілюструє тотожність синтаксису в такій ситуації:

#include <iostream,h>

int main (void) {

Char c=’A’;

signed char sc =‘B’;

unsigned char uc~C’;

int i = 0xd;

float f= 1.7;

double d = 2.8;

cout«c; // Викликає operator «(char)

cout«sc; // Викликає operator «(signed char)

cout«uc; // Викликає operator «(unsigned char)

cout«i; // Викликає operator «(int)

cout«f; // Викликає operator «(float)

cout«d; // Викликає operator «(double)
return 0;}

Приклад виконання Завдання з варіанту 2

Завдання: Шаблонний клас перетворення заданого масиву таким чином, щоб кожен елемент масиву був отриманий як exp кожного елемента (для типів int, float, long).

Розробляємо шаблон класу, який містить конструктор для виділення пам’яті динамічному масиву а, функцію заповнення масиву Zapis(int i,type t), функцію перетворення елементів масиву Processing() та функцію виводу перетвореного масиву Print().

template <class type> // опис шаблону

class Exponenta{

type *a; // ініціалізація динамічного масиву

int j;

public:

Exponenta(){a=(type*)malloc(N*sizeof(type));} //конструктор класу, що виділяє динамічну пам’ять під масив

void Zapis(int i,type t){a[i]=t;} //функція запису значення в і-тий елемент масиву

void Processing(){for(j=0;j<N;j++)a[j]=exp(a[j]);} //функція обробки масиву

void Print(){for(j=0;j<N;j++)cout<<a[j]<<" ";} //функція виводу масиву на екран

};

В головній функції main() створюємо об’єкт класу ob1для роботи з даними типу float, для цього використовуємо оператор виду:

Exponenta<float> ob1;

Лістинг програми має вигляд:

#include<iostream.h>

#include<conio.h>

#include<alloc.h>

#include<math.h>

#define N 5 // визначення кількості елементів масиву

template <class type> // опис шаблону

class Exponenta{

type *a; // ініціалізація динамічного масиву

int j;

public:

Exponenta(){a=(type*)malloc(N*sizeof(type));} //конструктор класу, що виділяє динамічну пам’ять під масив

void Zapis(int i,type t){a[i]=t;} //функція запису значення в і-тий елемент масиву

void Processing(){for(j=0;j<N;j++)a[j]=exp(a[j]);} //функція обробки масиву

void Print(){for(j=0;j<N;j++)cout<<a[j]<<" ";} //функція виводу масиву на екран

};

void main()

{

clrscr(); int i;

Exponenta<float> ob1; //завдання об’єкту класу і його типу

for(i=0;i<N;i++)

ob1.Zapis(i,i*1.25); //заповнення масиву

ob1.Processing(); //обробка масиву

ob1.Print(); //вивід масиву на екран

getch();

}

 

Контрольні запитання.

1. Що таке родові функції? Для чого вони призначені?

2. Форма об’яви родових функцій.

3. Що таке родові класи?

4. Коли використовуються родові класи?

5. Форма об’яви родових класів.

6. Ініціалізація родових класів.

7. Наведіть приклад родового класу.

8. Чим відрізняються родові функції від перевантажених?

9. Чи можуть клас- чи функція-шаблон мати більш одного родового типу даних? Якщо так, то як вони задаються?

10. Наведіть приклад використання родової функції.

 

Лабораторна робота №11

Тема: Особливості розробки класів з використанням контейнера VECTOR та алгоритмів контейнера ALGORITHM стандартної бібліотеки шаблонів STL

Мета: Набуття навичок студентами при роботі з STL

Порядок виконання

1. Ознайомитись з теоретичною частиною даної теми.

2. Прокоментувати структуру контейнеру VECTOR та обґрунтувати вибір методів контейнера для розв’язання задачі відповідно Завдання 1.

3. Розробити програму з використанням власного класу та контейнера VECTOR як зберігача даних заданого типу відповідно Завдання 1.

4. Розробити програму з використанням власного класу, контейнера VECTOR та алгоритмів контейнера ALGORITHM згідно Завдання 2.

5. Розробити програму з використанням власного класу, який містить змінний член контейнера VECTOR для зберігання структури заданого виду, яка містить не менш двох полів та розв’язати задачу згідно Завдання 3.

6. Розробити тест для перевірки вірності даної програми.

7. Оформити звіт до лабораторної роботи.

8. Оформити звіт до лабораторної роботи.

Завдання 1

Варіант 1. Виконати завдання для даних типу char з використанням ітератора.

Варіант 2. Виконати завдання для даних типу char без використання ітератора.

Варіант 3. Виконати завдання для даних типу int з використанням ітератора.

Варіант 4. Виконати завдання для даних типу int без використання ітератора.

Варіант 5. Виконати завдання для даних типу float з використанням ітератора.

Варіант 6. Виконати завдання для даних типу float без використання ітератора.

Варіант 7. Виконати завдання для даних типу long з використанням ітератора.

Варіант 8. Виконати завдання для даних типу long без використання ітератора.

Варіант 9. Виконати завдання для даних типу double з використанням ітератора.

Варіант 10. Виконати завдання для даних типу double без використання ітератора.

При розробки класу та програми виконати таку послідовність дій:

- описання об’єкту класу;

- ініціалізацію VECTORу;

- виведення VECTORу;

- сортування VECTORу;

- виведення VECTORу;

- визначення на кожному кроці поточного розміру VECTORу;

- доповнення з заданої позиції у VECTOR;

- видалення з заданої позиції у VECTOR;

- сортування VECTORу;

- виведення VECTORу.

Завдання 2

Варіант 1

В одномірному масиві, що складається з n елементів, обчислити: суму негативних елементів масиву; добуток елементів масиву, розташованих між максимальним і мінімальним елементами. Упорядкувати елементи масиву по зростанню.

Варіант 2

В одномірному масиві, що складається з n елементів, обчислити: суму позитивних елементів масиву; добуток елементів масиву, розташованих між максимальним по модулі і мінімальним по модулі елементами. Упорядкувати елементи масиву по убуванню.

Варіант 3

В одномірному масиві, що складається з n цілих елементів, обчислити: добуток елементів масиву з парними номерами; суму елементів масиву, розташованих між першим і останнім нульовими елементами. Перетворити масив таким чином, щоб спочатку розташовувалися всі позитивні елементи, а потім — усі негативні (елементи, рівні 0, вважати позитивними).

Варіант 4

В одномірному масиві, що складається з n елементів, обчислити: суму елементів масиву з непарними номерами; суму елементів масиву, розташованих між першим і останнім негативними елементами. Стиснути масив, видаливши з нього всі елементи, модуль яких не перевищує 1. Елементи, що звільнилися в кінці масиву, заповнити нулями.

Варіант 5

В одномірному масиві, що складається з n елементів, обчислити: максимальний елемент масиву; суму елементів масиву, розташованих до останнього позитивного елемента. Стиснути масив, видаливши з нього всі елементи, модуль яких знаходиться в інтервалі [a,b]. Елементи, що звільнилися в кінці масиву, заповнити нулями.

Варіант 6

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

Варіант 7

В одномірному масиві, що складається з n цілих елементів, обчислити: номер максимального елемента масиву; добуток елементів масиву, розташованих між першим і другим нульовими елементами. Перетворити масив таким чином, щоб у першій його половині розташовувалися елементи, що стояли в непарних позиціях, а в другій половині — елементи, що стояли в парних позиціях.

Варіант 8

В одномірному масиві, що складається з n елементів, обчислити: номер мінімального елемента масиву; суму елементів масиву, розташованих між першим і другим негативними елементами. Перетворити масив таким чином, щоб спочатку розташовувалися всі елементи, модуль яких не перевищує 1, а потім — всі інші.

Варіант 9

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

Варіант 10

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

Варіант 11

В одномірному масиві, що складається з n елементів, обчислити: номер мінімального по модулю елемента масиву; суму модулів елементів масиву, розташованих після першого негативного елемента. Стиснути масив, видаливши з нього всі елементи, величина яких знаходиться в інтервалі [a,b]. Елементи, що звільнилися в кінці масиву, заповнити нулями.

Варіант 12

В одномірному масиві, що складається з n елементів, обчислити: номер максимального по модулю елемента масиву; суму елементів масиву, розташованих після першого позитивного елемента. Перетворити масив таким чином, щоб спочатку розташовувалися всі елементи, ціла частина яких лежить в інтервалі [a,b], а потім — всі інші.

Варіант 13

В одномірному масиві, що складається з n елементів, обчислити: кількість елементів масиву, що лежать у діапазоні від А до В; суму елементів масиву, розташованих після максимального елемента. Упорядкувати елементи масиву по зменшенню модулів елементів.

Варіант 14

В одномірному масиві, що складається з n елементів, обчислити: кількість елементів масиву, рівних 0; суму елементів масиву, розташованих після мінімального елемента. Упорядкувати елементи масиву по зростанню модулів елементів.

Варіант 15

В одномірному масиві, що складається з n елементів, обчислити: кількість елементів масиву, великих З; добуток елементів масиву, розташованих після максимального по модулю елемента. Перетворити масив таким чином, щоб спочатку розташовувалися всі негативні елементи, а потім — усі позитивні (елементи, рівні 0, вважати позитивними).

Варіант 16

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

Варіант 17

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

Варіант 18

В одномірному масиві, що складається з n елементів, обчислити: кількість елементів масиву, менших З; суму цілих частин елементів масиву, розташованих після останнього негативного елемента. Перетворити масив таким чином, щоб спочатку розташовувалися всі елементи, що відрізняються від максимального не більше ніж на 20%, а потім — всі інші.

Варіант 19

В одномірному масиві, що складається з n елементів, обчислити: добуток негативних елементів масиву; суму позитивних елементів масиву, розташованих до максимального елемента. Змінити порядок проходження елементів у масиві на зворотний.

Варіант 20

В одномірному масиві, що складається з n елементів, обчислити: добуток позитивних елементів масиву; суму елементів масиву, розташованих до мінімального елемента. Упорядкувати по зростанню окремо елементи, що стоять на парних місцях, і елементи, що стоять на непарних місцях.

Завдання 3



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 590; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.124.232 (0.075 с.)