ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


ДО ЛАБОРАТОРНИХ ТА ПРАКТИЧНИХ РОБІТ ПО КУРСУ

Загрузка...

МЕТОДИЧНІ ВКАЗІВКИ

ДО ЛАБОРАТОРНИХ ТА ПРАКТИЧНИХ РОБІТ ПО КУРСУ

“ІНФОРМАТИКА ”

 

для студентів денної форми навчання

напряму підготовки 6.170103 - «Управління інформаційною безпекою».

 

Затверджено

кафедрою інформатики.

Протокол № __ від ____

 

ХАРКІВ 2011


Методичні вказівки до виконання лабораторних та практичних робіт з курсу “Інформатика” для студентів напряму підготовки 6.170103 - «Управління інформаційною безпекою».

/ Упоряд.: Сінельнікова Т.Ф.( Харків: ХНУРЕ, 2011. ( 102 с.))

 

Упорядники: Сінельнікова Т.Ф


ЗАГАЛЬНІ ПОЛОЖЕННЯ

 

Розв’язання більшості наукових, інженерних і технічних задач тісно пов'язано з використанням обчислювальної техніки. Оволодіння основними поняттями комп'ютерної техніки і мовами програмування дозволить майбутньому інженеру ставити і вирішувати задачі на ЕОМ.

Основна мета даних методичних вказівок допомогти студентам придбати практичні навички по підготовці, налагодженню і розв’язанню задач мовою програмування С++.

Приступаючи до виконання даного циклу лабораторних робіт, студенти зобов'язані ознайомитися з вимогами стандартів по оформленню схем алгоритмів і програм (ДСТУ).

У результаті виконання лабораторних робіт студенти повинні:

знати прийоми алгоритмізації і правила розробки і запису схем алгоритмів і програм мовою С++;

вміти складати схеми алгоритмів і розробляти програми, складати звіти відповідно до вимог ДСТУ, розв'зувати задачі на комп'ютері.

Виконання лабораторних робіт розраховано на активну самостійну роботу студентів. Кожна робота виконується студентом індивідуально згідно варіанта завдання, номер якого повинний збігатися з номером студента в журналі академ-групи.

Під час самостійної підготовки до заняття студенти повинні:

проробити теоретичний матеріал, рекомендований у методичних вказівках до роботи;

відповісти на контрольні питання ;

розробити схему алгоритму і скласти програму свого варіанту завдання;

оформити звіт по попередній лабораторній роботі і підготуватися до його захисту.

Студенти, що не мають до початку заняття рукописного тексту програми свого варіанту задачі, до заняття не допускаються!

При виконанні лабораторної роботи в аудиторії студентам необхідно відлагодити програму лабораторної роботи і одержати результати її виконання, а також захистити звіт за матеріалами попередньої лабораторної роботи.

Звіт про лабораторні роботи оформляється в зошиті і містить номер лабораторної роботи, тему і мету роботи, завдання, схему алгоритму, програми з результатами розв’язання і висновки щодо роботи.

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


ОРГАНІЗАЦІЯ ВВЕДЕННЯ І ВИВЕДЕННЯ ДАНИХ

ТА РОЗВ’ЯЗАННЯ ЗАДАЧ З ПРОСТОЮ ЗМІННОЮ

Мета роботи

 

Освоїти прийоми роботи з текстовими редакторами і основними компонентами інтегрованого середовища програмування С++; отримати практичні навички введення - виведення даних, складання і налагодження програм із простими змінними; засвоїти правила опису типів даних; отримати навички у використанні операторів керування й організації циклів.

 

 

1.2 Вказівки до організації самостійної роботи студентів

 

При підготовці до роботи повторити типи констант і змінних, способи їхнього опису, використання операторів керування й організації циклів, а також використання інтегрованого середовища програмування на С++[ 1, с. 70-72, с. 74-78; 2, c.7-22; конспект лекцій].

Звернути увагу, що в мові С++ немає убудованих у мову засобів введення і виведення. Усі дії, зв'язані з цими операціями, виконуються за допомогою функцій бібліотеки. Функції введення і виведення бібліотеки мови дозволяють читати дані з файлів і з пристроїв і писати дані у файли і на пристрої.

Бібліотека мови С++ підтримує такі три рівні введення – виведення даних:

— введення - виведення потоку;

— введення - виведення нижнього рівня;

— введення - виведення для консолі і порту.

При введенні - виведенні потоку всі дані розглядаються як потік окремих байтів. Для користувача потік — це або файл на диску, або фізичний пристрій, наприклад, дисплей, чи клавіатура або друкувальний пристрій, з якого чи на який направляється потік даних. Функції введення - виведення для потоку дозволяють обробляти дані різних розмірів і форматів від одиночного символу до великих структур даних. Програміст може використовувати функції чи бібліотеки, розробляти власні і включати їх у бібліотеку. Для доступу до бібліотеки цих класів треба включити в програму відповідні файли заголовків, наприклад, #include <iostream.h>.

За замовчуванням стандартні введення, виведення і виведення повідомлень про помилки відносяться до консолі користувача (клавіатура і екран).

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

Найчастіше в С++ використовується потокове введення даних, операції якого включені до складу класів istream абоiostream . Воно може здійснюватися з визначеним у цих класах вхідним потоком cin або вихідним потоком, визначеним користувачем. Для читання символів з цього потоку вказується операція витягу з потоку, що позначається за допомогою символів “ >> “ . Це перевантажена операція, визначена для всіх простих типів і покажчика на char.

Формат запису оператора cinмає вигляд:

cin [ >> values ]; .

Наприклад, для введення значень змінних x і y можна записати:

cin >> x >> y; .

Кожна операція “ >> “ передбачає введення одного значення. При введенні даних необхідно виконувати наступні вимоги:

¾ для поділу двох чисел, що послідовно вводяться, використовується проміжок (дані типу сhаr розділяти проміжком не обов'язково)або ENTER;

¾ якщо послідовно вводиться символ і число (або навпаки), проміжок треба записувати тільки в тому випадку, якщо символ, що вводиться, (типу сhаr) є цифрою;

¾ потік введення ігнорує проміжки;

¾ при введенні великої кількості даних одним оператором їх можна розташовувати в декількох рядках (використовуючи ENTER);

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

2.345 789

або

2.345

Оскільки в цьому прикладі проміжок є роздільником між значеннями, що вводяться, то при введенні рядків, котрі містять проміжки у своєму складі, цей оператор не використовується. У такому випадку треба використовувати методи розглянутих класів такі як: getline( ), read( ), get( ) і ін. (формати цих функцій розглянемо при обробці символьних даних). У С++операції введення - виведення можуть виконуватися з використанням операторів, а не функцій введення - виведення.

1.2.2 Організація виведення даних у мові С++

Виведення даних може бути неформатованим і форматованим. Найчастіше для виведення застосовується операція <<, що записується разом з ім'ям вихідного потоку cout. Тобто, наприклад, запис

cout << x;

означає виведення значення змінної x ( або запис в потік). Цей оператор вибирає необхідну функцію перетворення даних у потік байтів.

Формат запису cout відрізняється від форми запису команд С++

cout << data << [ data ]; ,

деdata ¾ це змінні, константи, вирази або комбінація типів.

Запис оператора coutможе може мати, наприклад, такий вигляд:

сout << "y=" << x + a - sin(x) << "\n"; .

Оскільки у мові С++ операція “\n”рівнозначна операції endl, тому розглянутий оператор виводу можна записати як:

сout << "y=" << x + a - sin(x) << endl;

При використанні бульових операцій, вирази треба брати в дужки.

сout << "p =" << ( a && b || c ) << "\n"; .

Мова С++ не має символьних значень. Символ переводу на наступний рядок "\n" записується як строкова константа, інакше він розглядається не як керуючий символ, а як число 10 ( код символу). Таких помилок можна уникнути шляхом присвоєння значення керуючих символів змінним, наприклад:

#define <<sp " "

#define <<ht "\t"

#define <<hl "\n"

Тепер оператор виведення можна записати так:

сout << " y = " << x + a - sin(x) << hl; .

Слід пам'ятати, що cout не виконує автоматичний перехід на наступний рядок. Щоб надрукувати строкову константу, треба помістити її за оператором cout , тобто у такому вигляді:

cout << " Я вивчаю програмування \n";

або

cout << " Я вивчаю програмування”<< endl; .

 

Приклад 1.1Наступний приклад містить організацію виведення даних, пояснюючі повідомлення , а також символи переводу рядка:

//P1_1.CPP ( роздрук значень змінних

// с відповідними позначками

#include <iostream.h>

Int main ( )

{

char first = 'W';

char middle = 'P';

char last = 'S';

int wozrast = 20;

int doplata = 2;

float zarplata = 309.75;

float prozent = 8.5;

// Виведення результатів

cout << " Перевірка вихідних даних\n";

cout << first << middle << last << "\n\n";

cout << " Вік доплата зарплата відсоток: \n";

cout << wozrast << ' ' << doplata << ' ' << zarplata << ' ' << prozent;

return 0;

}

В останніх двох операторах використаємо символи табуляції. Наприклад, \tпоміщає кожне наступне ім'я або число в наступну позицію табуляції (кожні вісім символів), у цьому випадку маємо:

cout << " Вік \t доплата\t зарплата\t відсоток\t \n";

cout << wozrast<<"\t" << doplata<<"\t"<< zarplata<<"\t"<< prozent<<"\n " ;

Для додаткового керування вихідними даними використовуються маніпулятори: setw(n) і setprecision(k). Маніпулятор setw(n) служить для вказівки довжини поля, що приділяється для виведення наступних даних (тут n - кількість позицій у рядку). Setprecision(k) призначений для вказівки кількості позицій у дробовій частині дробових чисел.

Маніпулятори змінюють вид деяких змінних в об'єкті cout, що у потоці випливають за ними. Ці маніпулятори називають прапорами стану. Коли об'єкт посилає дані на екран, він перевіряє прапори, щоб довідатися, як виконати завдання, наприклад, запис:

cout << 456 << 789 << 123;

видасть значення у вигляді: 456789123, що ускладнює визначити групи значень.

 

Приклад 1.2Написати програму з використанням маніпулятора setw.

// P1_2.CPP ( демонстрація різних маніпуляторів

// ширини виведення цілого числа

#include <iostream.h>

#include <iomanip.h>

Int main ( )

{

cout << 456 << 789 << 123 << endl;

cout << setw(5) << 456 << setw(5) << 789

<< setw(5) << 123 << endl;

cout << setw(7) << 456 << setw(7) << 789

<< setw(7) << 123 << endl;

return 0;

}

Результати виконання програми:

456 789 123

456 789 123

У цьому прикладі з'явився новий заголовний файл iomanip.h, що дозволяє використовувати функції маніпуляторів, таких як setw. При використанні функції setw, С++ вирівнює число вправо в границях заданої ширини поля виведення. Якщо ширина недостатня, С++ ігнорує вказане значення.

Функція setprecision(2) повідомляє С++ про те, що число з крапкою, що плаває, треба виводити з двома знаками після крапки з округленням дробової частини, наприклад, при виконанні оператора

сout << setw(7) << setprecision (2) << 123.456789;

буде отриманий наступний результат: 123.46.

Операція cin використовує ті ж маніпулятори , що й операція cout.

 

Приклад 1.3Написати програму для обчислення податку на продажі.

// P1_3.CPP¾ програма податок :введення суми продажів

// і роздрук податку на продажі

#include <iostream.h>

#include <iomanip.h>

Int main ( )

{

float prod_sum; //Сюди буде записана сума продажів

float nalog ;

//Виведення підказки для користувача

cout << " Введіть суму продажів для розрахунку податку ";

cin >> prod_sum;

nalog = prod_sum* 0.7; //Обчислення податку на продажі

cout << " " << setprecision(2) << prod_sum;

cout << " " << setprecision(2) << nalog<< "\n";

return 0;

}

Через те, що в першому операторі cout не міститься знак переводу рядка, відповідь користувача на підказку з'явиться відразу праворуч від запиту.

 

Мова С++ широко використовує також форматоване введення і виведення даних. Для форматованого введення використовують функцію scanf, а виведення ¾ фукцію printf. Щоб зв'язати програму користувача зі стандартною бібліотекою, де знаходяться ці функції, необхідно спочатку програми передбачити препроцесорне ствердження

#include <stdio.h>

 

1.3 Використання основних операторів С++

У мові С++ прості оператори закінчуються символом ";", складені полягають у фігурні дужки. Розглянемо правила запису і використання основних операторів С++.

Оператор - вираз ¾ закінчуються крапкою з комою, наприклад:

++i; // інкремент

swap (&a, &y); // виклик функції

Оператори присвоюваннямають одну з форм запису:

p =a ;

p =a = b = c;

де p ¾ ім'я змінної чи елемент масиву; а, b, с¾ арифметичні вирази,

значення.

Оператор умовного переходумає наступний формат запису:

If (L)

оператор 1 ;

Else

Оператор 2 ; ,

де L¾ логічний вираз. Якщо значення цього виразу “істина” (не нуль ), то виконується оператор1, якщо ж воно “не істина”(нуль), то виконується оператор2; у випадку, коли вираз помилковий й відсутнє else,¾ виконується наступний оператор.

Наприклад, оператор умовного переходу може мати вигляд:

if ( i < j )

i++;

Else

{ j = i - 3; i +=2; }

 

Оператор вибору використовують для вибору одного з багатьох варіантів вирішування і має наступну форму запису;

Switch (L)

{

case к.в.1: оператор 1; [break;]

case к.в.2: оператор 2; [break;]

. . . . . . . . . . . . . . . . . . . . . . . . .

case к.в.n: оператор n; [break;]

[default: оператор n+1;]

} ,

де switch, case, default ¾ службові слова;

break ¾ оператор (необов'язковий) переривання виконання операторів switch;

L¾ будь-який вираз одного з цілих типів;

к.в.1,…,к.в.n¾ константні вирази, що не можуть повторюватися і не можуть містити змінних чи викликів функцій. Звичайно це ціла чи символьна константа;

оператор 1;. . . ¾ будь-які оператори С++.

Виконується цей оператор у такий спосіб: обчислюється значення виразу L,потім це значення порівнюється (послідовно зверху вниз) зі значеннями константних виразів к.в.1,..і при збігу значень Lі одного з к.в. будуть виконаються всі оператори починаючи з відповідного, якщо наприкінці немає оператора break. При наявності оператора break, виконується тільки оператор, що знаходиться у відповідній к.в. і управління передається оператору, що знаходиться за межами оператора switch. Якщо значення виразу Lне збігається з жодним значенням к.в., то виконуються оператори з defaultі здійснюється вихід з оператора switch. У випадку, коли в цьому операторі немає default ( він не обов'язковий), і значення L не збігається з жодним зі значень к.в. , здійснюється вихід з оператора switch.

Можна привести наступний фрагмент програми з використанням оператора switch:

int a=2;

Switch ( a )

{

case 1: func1( );

case 2: func2( );

case 0:

case 4: func3( );

default: printf ("gооd bay \n");

}

 

При виконанні цього оператора будуть реалізовані функції: func2, func3іdefault: printf ("gud bay \n"); .

Даний приклад можна записати так само в наступному вигляді:

int a=2;

switch (a)

{

case 1: func1( ); break;

case 2: func2( ); break;

case 0:

case 4: func3( ); break;

default: printf ("gud bay \n");

} .

У такій реалізації буде виконана тільки case 2: func2( ); break;і вихід з оператора switch.

Мова С++ має такі оператори циклу: while, do, for.

Оператор циклу while Lіз предумовою

L ¾ будь-який простий, складений чи порожній оператор(будь-який припустимий вираз).

Виконується цей оператор у такий спосіб: якщо результат виразу L не дорівнює нулю (“істина”), то виконується цикл, а якщо дорівнює нулю (“неістина “), то цикл не виконується і керування передається наступному за while оператору.

Наведемо приклад використання оператора while .

 

Приклад 1.3: Обчислити значення функції:

Y= A*X*X-SIN(X) ,якщо A=10.3; X[-1 ; +1]; hx=0.2.

 

// P1_6.CPP ( обчислення функції y = a* x* x – sin (x)

// с використанням оператора циклу while

#include <stdio .h>

#include <math.h>

Void main ( )

{

float a, x, y;

a = 10 . 3 ;

x = - 1 ;

while ( x <= 1)

{

y = a * x * x - sin(x)

printf ("x = % 4 f, y = % 6 f \n", x, y) ;

x = x + 0.2;

}

}

 

Оператор циклу forмає наступну форму запису:

 

for ( [ вир1 ]; [ вир2] ;[ вир3 ] ) оператор;,

де вир1¾ вираз ініціалізації, звичайно використовується для встановлення початкового значення; це вираз присвоювання (необов'язковий параметр);

вир2¾ вираз умови , що визначає при якій умові цикл буде повторюватися (необов'язковий параметр);

вир3 ¾ вираз ітерації, що визначає крок зміни змінних, керуючих циклом після кожного виконання (необов'язковий параметр).

Цей оператор реалізується в такий спосіб:

¾ спочатку виконується вираз ініціалізації ( ця нотація може бути виконана до оператора for );

¾ обчислюється умовний вираз( якщо результат умовного виразу “істина” (не дорівнює нулю ), то виконується оператор циклу;

¾ обчислюється вираз ітерації;

¾ знову перевіряється умова;

¾ як тільки умовний вираз стає рівним нулю “неістина”, керування передається оператору, що знаходиться за оператором циклу for .

Оскільки перевірка умови виконується перед циклом, то цикл може жодного разу не виконуватися, якщо умова відразу буде “неістина”.

Проілюструємо використання оператора циклу forдля раніше розглянутого приклада 1.3:

// P1_7.CPP ( обчислення функції y = a * x * x - sin(x)

// с використанням оператора циклу for

#include <stdio .h>

#include <math.h>

Void main ( )

{

float a, x, y;

a = 10.3 ;

for ( x = -1 ; x <= 1; x = x + 0.2 )

{

y = a * x * x - sin(x) ;

printf ( "x = % 4 f, y = % 6 f \n", x, y ) ;

}

}

 

В операторі forможе використовуватися кілька змінних, керуючих циклом, а будь-які вирази можуть бути відсутними, наприклад :

 

int i;

for ( ; i < 4; i++)

або

int k, n, y;

for ( k = 0, n = 20; k <= n; k++, n-- )

y = k * n;

У цьому операторі використовується два вирази ініціалізації і два вирази ітерації. При виконанні такого оператору спочатку присвоюються значення змінним k = 0 і n = 20. Потім відбувається порівняння k <= n. Якщо ця умова має значення “істина”,то буде виконуватися тіло циклу, а потім вираз k++ і n--,якщо ж умова не виконується, тоді цикл припиняється.

Оператор циклу doзвичайно використовується в тих випадках, коли тіло циклу повинне виконуватися хоча б один раз, і має наступну структуру запису:

do

{

Оператор

}while (L); ,

де L¾ умовний вираз.

Виконується оператор do наступним чином: спочатку здійснюється вхід у тіло циклу і виконується оператор (він може бути простий чи складний), після того перевіряється умова L і, якщо вона “істина” ( не дорівнює нулю), то цикл повторюється, а якщо “неістина ” ¾ здійснюється вихід з циклу. З використанням оператора циклу doприклад 1.3 буде мати вигляд:

 

// P1_8.CPP ( обчислення функції y = a * x * x - sin(x)

// с використанням оператора циклу do

#include <stdio .h>

#include <math.h>

Void main ( )

{

float a, x, y;

a = 10.3 ;

x = -1 ;

do

{

y = a * x * x - sin ( x ) ;

printf ( " x = % 4 f, y = % 6 f \n ", x, y ) ;

x = x + 0.2;

}

while ( x <= 1 );

}

 

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

 

1. Які правила запису програми мовою С++ ?

2. Які дані обробляються за допомогою мови С++?

3. Як задаються типи даних у С++?

4. Що таке константа в С++, наведіть приклади констант?

5. Що називається змінною в С++?

6. Як забезпечується організація введення- виведення ?

7. Як організується форматований висновок результатів ?

8. Для чого потрібні оператори умовного і безумовного переходу і як вони працюють ?

9. Як працює операторswitch?

10. Які оператори циклу ви знаєте, як працює оператор циклу for ?

11. Які особливості роботи оператора циклу do і while ?

 

 

Ціль роботи

 

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

 

2.2 Методичні рекомендації з організації самостійної роботи студентів

 

При підготовці до роботи повторити способи опису одновимірних і двовимірних масивів, використання індексованих змінних при обробці даних, організацію введення і виведення масивів, використання покажчиків .

На відміну від задач, розглянутих у попередній лабораторній роботі, аргумент функції може бути заданий і іншим способом — у вигляді довільного набору значень.

 

Приклад 2.1Обчислити функціюy = axi2 – sin xi, де x1=-1, x2=-0,93, x3=-0,49, x4=0, x5=1,13, x6=0,96, x7=1,75.

 

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

У схемі алгоритму розв‘язання задачі спочатку передбачається введення значень всіх елементів оброблюваного масиву x[n] (n =7 ).Число в дужках визначає кількість елементів масиву. Нумерація елементів масиву починається з 0ізакінчується n –1 .Далі введені елементи використовуються при обчисленні функції, шляхом вказівки індексу відповідного елемента.

Схема алгоритму розв’язання цієї задачі і програма виглядають наступним чином:

//P2_1.CPP -обчислення значень функції

// використання одновимірного масиву

#include <iostream.h>

        так немає  

#include <math.h>

Void main( )

{

const int n =7;

float x[n];

int i;

float a, y;

// Введення масиву

cout<< "Введіть значення масиву:" <<endl;

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

{

cout << "x [" << i << "] = ";

cin >> x [ i ] ;

cout << x [ i ] << endl;

}

a = 10.5;

// Обчислення функції

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

{

y = a*x [ i ] * x [ i ] – sin ( x [ i ] )

. cout << "При значенні=" << x[i]

<< "y = " << y << endl;

}

}

При запису цього алгоритму у вигляді програми спочатку треба описати масив за допомогою оператора float x [n], ввести його значення в пам'ять комп'ютера, а потім робити необхідні обчислення.

У програмі, що реалізує даний алгоритм, для введення елементів масиву використовується оператор cin >> x [i] ;, перед цим оператором знаходиться підказка cout << "x [" << i << "] = ";і зазначен номер елемента x[i], значення якого треба ввести.

Особливість виконання оператора введення cin >> x[i] ; полягає в тому, що, зустрівши його в програмі, комп'ютер призупинить її виконання поки не буде введене значення елемента x[i]і натиснута клавіша Enter, після чого обробка програми буде продовжена. Зазначений оператор включений у цикл, реалізований за допомогою оператора for, і повторюваний n разів, для забезпечення введення всіх елементів масиву.

Оскільки в мові С++ індексаціяелементів масиву починається з нуля, то масив float x[7] (n =7 )із семи елементів включає індексовані елементи x[0], x[1], x[2] … x[6]і при цьомуx[0] —звертання до першого елемента, x[1] —звернення до другого елемента масиву і т.д. Пропонована програма використовує два цикли: один — для введення елементів масиву, інший — для обчислення функції. Ці операції можна виконати й в одному циклі, тоді програма буде мати вигляд:

 

// Р2_2.CPPвведення елементів одновимірного масиву

// і обчислення функції здійснюється в одному циклі

#include < iostream.h>

#include < math.h>

float a, y ;

Void main ( )

{

const int n =7;

float mas [ n ];

int i;

float a, y ;

a = 10.5;

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

{

cout << "x [ " << i << "] = ";

cin >> x [ i ] ;

y = a * x[ i ]*x[ i ] - sin( x[ i ] );

cout << "При значенні =" << x[і] << " y= " << y << endl;

}

}

Приклад 2.2Обробити відомість успішності групи студентів з 10 чоловік по програмуванню, підрахувавши середній бал групи і кількість відмінників.

Список оцінок представимо масивом МА[i] (i=0..9), і програма, що реалізує таку задачу, виглядає в такий спосіб :

 

// Р2_3.CPPвикористання одновимірних масивів

// Визначення середнього бала групи і кількості відмінників

#include < iostream.h >

#include < math.h >

Void main ( )

{

const int n = 10; //розмірність масиву

float mas[n]; //опис одновимірного масиву

int i, k;

float s;

s = 0 ; // s- змінна для підсумовування оцінок групи

k = 0 ; // k - змінна для підрахунку кількості відмінників

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

{

cout << " mas [ " << i << "] = ";

cin >> mas [ i ] ;

cout << mas [ i ] << endl;

s = s + mas [ i ];

if ( mas[ i ] = = 5)

k =k+1;

}

cout << "Середній бал = " << s / float(n ) << endl;

cout << "Кількість відмінників =" << k<< endl;

}

 

У цій програмі змінна s служить для обчислення суми оцінок групи, а змінна k — для підрахунку кількості відмінників. Перед обчисленням треба задати цим змінним початкового нульового значення. Оператор cout << " mas [ " << i << "] = "; усередині циклу виконує роль підказки про необхідність введення чергової оцінки, а наприкінці використовується для виведення результатів обчислення ( cout << "Середній бал"<< s / float (n) << endl; cout << "Кількість відмінників =" <<k<< endl;) .

Крім одновимірних масивів, тобто таких, де положення елемента визначається за допомогою одного індексу, у практиці розв’язання задач часто застосовуються багатовимірні масиви. У них положення елемента визначається шляхом запису декількох індексів. Найбільш широке поширення одержали двовимірні масиви, які називаються матрицями. Матриці являють собою порядковий запис декількох одновимірних масивів, наприклад:

 

Місце розташування кожного елемента визначається за допомогою двох індексів — номера рядка і номери стовпця, тобто порядкового номера в рядку.

Індекси таких масивів записуються в квадратних дужках. Наприклад, запис М[1] [2] вказує на елемент, що знаходиться в другому рядку і третьому стовпці, тобто маючий значення -20.5 (рахунок індексів починається з 0). Для перебору всіх елементів матриці при їхньому введенні-виведенні, а також при обробці в програмі варто передбачати організацію двох циклів: один — для завдання значень індексу рядків, інший -індексу стовпців.

 

Приклад 2.3 До кожного елемента вищенаведеної матриці M додати число 10.

 

// Р2_4.CPPвикористання двовимірних масивів

//До кожного елемента матриці додати число 10.

 

#include < iostream.h >

Void main ( )

{

const int n = 3; //кількість рядків матриці

const int m = 5; //кількість стовпців матриці

float M [ n] [m];

int i, k;

float s;

s = 10 ;

cout << " Введіть значення масиву:" << endl;

// Введення значень двовимірного масиву

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

for ( k = 0; k < m; k ++)

{

cout << " M [ " << i << "] = " << "[ " << k << ]" ;

cin >> M [ i ] [ k ];

cout << M [ i ] [ k ] << endl;

M [ i ] [ k ] = M [ i ] [ k ] + s ; //Можна M [ i ] [ k ] + = s ;

}

cout << "Нове значення матриці :" << endl;

//Виведення матриці в природному вигляді

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

{

cout << endl;

for ( k = 0; k < m; k++)

cout << M [ i ] [ k ] << " ";

}

}

У програмі при описі матриці в операторі float M[n][m]; вказується діапазон зміни двох індексів, перший з яких призначений для індексування рядків, другий — стовпців.

При введенні, обробці і виведенні матриці для перебору всіх її елементів використовується два цикли, один із яких є вкладеним в іншій. Це дозволяє при кожнім значенні змінної iперебирати всі значення k.

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

 

 

Використання покажчиків

У мові С++ широко використовуються дані, що називаються покажчиками.

Покажчики — це змінні, котрі містять адресу пам'яті, розподіленої для іншої змінної. Усі змінні, розглянуті до цього, зберігали якісь значення (дані). Ці дані могли бути різних типів: символьного, цілого, дійсного і т.д. При оголошенні змінної - покажчика необхідно вказати тип даних, адресу яких буде містити змінна, і ім'я покажчика з попередньою зірочкою.

Загальний формат опису покажчика наступний:

тип * ім'я;

де тип — тип значень, на который буде вказувати покажчик;

ім'я — ім'я змінної-покажчика;

* — означає операцію над типом, що читається "покажчик" на тип.

Наведемо приклади визначень покажчиків:

int *pn; //покажчик на ціле значення;

float *pf1, *pf2 ; //два покажчики на дійсні значення;

Покажчики не прив'язують дані до якого-небудь визначеного імені змінної і можуть містити адреси будь-якого неіменованого значення. Існує адресна константа NULL, що означає "порожню" адресу.

У мові С++ знаходиться усього два оператори, що відносяться до покажчиків:

“&” — оператор " адреса значення ";

“* “— оператор "значення за адресою".

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

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

Покажчики можна оголосити одним з наступних способів:

<тип.> *ptr;

<тип> *ptr = <перемінна - покажчик>;

<тип> *ptr =&<ім'я змінної>;// адреса змінної

У програмі це може виглядати в такий спосіб:

int *ptx ,b ; float y; //оголошені перемінна - покажчик ptxізвичайні змінні b і y;

float *sp = &y; //покажчику spпривласнюється адреса змінної y

float *p = sp; //покажчику p привласнюється значення (адреса значення),

//яке міститься в змінній sp, тобто адреса змінної y.

При оголошенні покажчиків символ "*" може розташовуватися або перед ім'ям покажчика або записуватися відразу після оголошення типу покажчика і поширює свою дію тільки на одну змінну - покажчик, перед якою він знаходиться, наприклад:

long *pt; long* Uk; int * ki, x, h ; // оголошення описів

У разі потреби опису покажчика на комірку довільного типу, замість ідентифікатора типу записується слово void, наприклад:

 

void *p, *pt; // описані два покажчики на довільний тип даних

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

Для доступу до значення змінної, адреса якої зберігається в покажчику, досить у відповідному операторі програми записати ім'я покажчика із символом "*" , наприклад:

 

int *p, *p1; //Оголошені два покажчики на комірку пам'ятіint;

int x =12, y=5, m [7 ]; //Оголошені змінніx,yі масивm,

// змінні x,y ініціалізовані

p = &y; //Покажчику p привласнена адреса змінноїy.

Тепер, якщо написати оператор виведення на екран у вигляді :

cout << "Адреса р " << p << "Значення по цій адресі= " <<*p; ,

тоді виведеться адреса комірки пам'яті, де записана змінна y і значення цієї змінної (тобто

Загрузка...

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти