Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 Робота з масивами за допомогою вказівників

.doc
Скачиваний:
11
Добавлен:
21.02.2016
Размер:
130.56 Кб
Скачать

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

Тема: «Робота з масивами за допомогою вказівників»

Загальне завдання:

  1. розробити алгоритм вирішення завдання. Алгоритм представити за допомогою блок-схем або схем Насси-шнейдермана;

  2. написати програму на мові програмування С++ для виконання завдання.

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

  4. набрати програму з коментарями на комп'ютері, відладити, виконати.

Індивідуальне завдання:

№ п\ п

Тип елементу масиву

№ п\ п

Тип елементу масиву

float

char

int

unsigned int

char

float

unsigned int

long int

long int

float

float

int

int

float

char

  1. Написати програму, яка дозволяє визначити чи є квадратна матриця ортонормованою, тобто такий, в якій скалярний твір кожної пари різних рядків рівний 0, а скалярний твір кожного рядка на себе рівний 1.

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

  3. Написати програму, яка дозволяє визначити чи є квадратна матриця симетричною щодо головної діагоналі.

  4. Написати програму, яка виводить на друк всі седловые точки матриці і їх індекси. Елемент матриці називається седловой крапкою, якщо він є найменшим в рядку і найбільшим в стовпці або, навпаки, є найбільшим в рядку і найменшим в стовпці.

  5. Дана речова квадратна матриця, всі елементи якої різні. Знайти скалярний твір рядка, в якому знаходиться найбільший елемент, на стовпець з найменшим елементом.

  6. Написати програму, яка виконує сортування рядків речової матриці по неубуванню суми їх елементів.

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

  8. Написати програму. Дана речова матриця. Переставляючи її рядки і стовпці добитися того, щоб найбільший елемент (один з них) опинився у верхньому лівому кутку.

  9. Написати програму, яка виконує множення двох матриць (матриці не квадратні).

  10. Написати програму. Вміст квадратної матриці повернути на 90 градусів за годинниковою стрілкою, вважаючи центром повороту центр симетрії матриці.

  11. Написати програму. У кожному стовпці і кожному рядку матриці міститься строго поодинці нульовому елементу. Перестановкою рядків добитися розташування всіх нулів по головній діагоналі матриці.

  12. Написати програму. У неквадратній матриці кожен елемент (окрім граничних) замінити сумою елементів, що безпосередньо примикають до нього, по вертикалі, горизонталі і діагоналям.

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

  14. Написати програму. Неквадратну матрицю заповнити таким чином: елементам, що знаходяться по периметру матриці, привласнити значення 1; периметру підматриці, що залишилася, – значення 2 і так до заповнення всієї матриці.

  15. Написати програму. Кожен елемент матриці (окрім крайніх) замінити виразом:

i = 2, 3 ., n-1, а крайні елементи – виразами:

Зміст звіту:

  1. тема;

  2. завдання;

  3. схеми алгоритмів функцій і головної програми;

  4. текст програми;

  5. приклад виконання програми.

Приклад виконання завдання:

Завдання: Знайти суму мінімального і максимального елементів масиву. Тип елементів масиву float.

Алгоритм програми:

Оскільки в завданні сказано, що обробку масиву необхідно проводити за допомогою функцій, тоді необхідно виконати декомпозицію завдання.

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

Схема Насси-шнейдермана для функції завдання масиву

Почало

Виведення повідомлення «Введіть кількість елементів»

Введення значення n

n<=0 або n>=size

i = 0

i < n

Вивід на екран номера i-го елементу

Введення значення i-го елементу

i = i+1

Кінець

Для перегляду і аналізу результатів виконання програми необхідно, щоб на екран виводився масив. Значить, також для друку масиву слід написати функцію.

Схема Насси-шнейдермана для функції друку масиву

Почало

i = 0

i < n

Виведення i-го елементу на екран

i = i+1

Кінець

У завданні сказано, що необхідно обчислити сума мінімального і максимального елементів масиву. Для цього необхідно знайти або значення мінімального і максимального елементів, або індекси мінімального і максимального елементів. Виберемо другий варіант.

Схема Насси-шнейдермана для функції пошуку індексу мінімального елементу масиву

Почало

imin = 0

i =1

i < n

mas[i]<

+

mas[imin]

-

imin = i

i = i+1

Кінець

Схема Насси-шнейдермана для функції пошуку індексу максимального елементу масиву

Почало

imax = 0

i =1

i < n

mas[i]>

+

mas[imax]

-

imax = i

i = i+1

Кінець

Для організації простого меню також можна написати функцію для виводу і вибору користувачем пункту меню. Це дозволить скоротити розмір функції main.

Схема Насси-Шнейдермана для функції вибору пункту меню

Почало

Очищення екрану

Виведення пунктів меню

Повідомлення «Виберіть пункт меню»

Введення номера пункту меню punkt

punkt<1 або punkt>4

Кінець

У функції main необхідно організувати виконання кожного з пунктів меню, за винятком пункту «Вихід». Також слід передбачити, що обов'язково спочатку виконався пункт «Введення масиву», а потім вже інші пункти меню, пов'язані з обробкою і друком масиву. Оскільки неможливо виконувати дії над масивом, поки не заданий його розмір і самі елементи масиву.

Схема Насси-Шнейдермана для головної функції програми

Почало

punkt = menu()

punkt

=

1

2

3

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

Друк масиву

Обробка масиву

punkt < > 4

Кінець

Текст програми:

/*Програма для пошуку суми максимального і мінімального елементів масиву.

Виконав(а) студент(но) групи №

ФІО, дата.*/

#include <iostream.h> //подключение бібліотеки введення/виводу

#include <conio.h> // підключення бібліотеки для обробки екрану

#include <iomanip.h> // підключення бібліотеки маніпуляторів для форматованого виводу

const size = 30; //максимальное кількість елементів в масиві

/*Функція введення масиву з клавіатури.

Вх.данниє:

mas – масив (не заданий);

n – кількість елементів в масиві (не задано)

Вих.данниє:

mas – масив заданий;

n – кількість елементів в масиві (від 1 до size-1)

Спосіб передачі параметрів:

Масив передається за допомогою покажчика на нульовий елемент масиву.

n передається по посиланню.

*/

void vvod(float *mas, int &n)

{ //цикл введення кількості елементів масиву

do

{

cout<<"Введите кількість елементів масиву ->";

cin>>n;

}while((n<=0)||(n>=size));

//введення елементів масиву з клавіатури

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

{

cout<<"#"<<i<<" = "; //вывод індексу елементу, який вводиться з клавіатури

cin>>mas[i]; //ввод i-го елементу масиву з клавіатури

}

}

/*Функція друку масиву.

Вх.данниє:

mas – масив;

n – кількість елементів в масиві (від 1 до size-1)

Спосіб передачі параметрів:

Масив передається за допомогою покажчика на нульовий елемент масиву.

n передається за значенням.

*/

void print(float *mas, int n)

{

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

cout<<setprecision(2) <<setw(10) <<mas[i]; //два знаку після коми

//для одного числа виділяється 10 позицій на екрані

}

/*Функція пошуку індексу мінімального елементу масиву.

Вх.данниє:

mas – масив;

n – кількість елементів в масиві (від 1 до size-1)

Вих.данниє:

Індекс мінімального елементу масиву */

int min(float *mas, int n)

{ int imin = 0; //пусть елемент з номером 0 буде мінімальним

for(int i=1;i<n;i++) //цикл перегляду елементів масиву від 1 до n-1

if (mas[i]<mas[imin]) imin = i; //поиск мінімального з двох чисел

return imin; //возврат індексу мінімального елементу масиву

}

/*Функція пошуку індексу максимального елементу масиву.

Вх.данниє:

mas – масив;

n – кількість елементів в масиві (від 1 до size-1)

Вих.данниє:

Індекс максимального елементу массива*/

int max(float *mas, int n)

{ int imax = 0; //пусть елемент з номером 0 буде максимальним

for(int i=1;i<n;i++) //цикл перегляду елементів масиву від 1 до n-1

if (mas[i]>mas[imax]) imax = i; //поиск максимального з двох чисел

return imax; //возврат індексу максимального елементу масиву

}

/*Функція для виведення меню на екран і вибору одного з пунктів меню.

Вих.данниє: номер пункту меню від 1 до 4*/int menu()

{ int number; //номер вибраного пункту меню

do //цикл виконується поки користувач не вибере пункт від 1 до 4

{

clrscr();

cout<<" Меню\n";

cout<<"1. Введення массива\n";

cout<<"2. Друк массива\n";

cout<<"3. Обробка массива\n";

cout<<"4. Виход\n";

cout<<"\nВыберите пункт меню -> ";

cin>>number;

}while ((number<1) || (number>4));

return number; //возврат номери пункту меню

}

void main() //главная функція програми

{

float а[size]; //массив

int m; //количество елементів в масиві

int punkt; //номер пункту меню

int isvvod=0; //признак, що масив заданий: isvvod=0 – масив не заданий, isvvod=1 – масив заданий

//цикл виконується поки користувач не вибере пункт «Вихід»

do

{ punkt = menu(); //выбор пункту меню

switch (punkt) //выполнение дій залежно від номер пункту меню

{

case 1: //пункт 1 «Введення масиву»

{

clrscr();

cout<<" --= Введення масиву =--\n";

vvod(а,m); //вызов функції для завдання розміру і елементів масиву

isvvod=1; //признак, що масив заданий

};break;

case 2: //пункт 2 «Друк масиву»

{

if (isvvod) //если масив заданий, то його можна роздрукувати

{

clrscr();

cout<<" --= Друк масиву =--\n";

print(а,m); //вызов функції для друку масиву

}

else //массив не заданий, необхідно спочатку задати масив

cout <<"Необходимо спочатку задати масив. Виберіть пункт 1.";

getch(); //задержка екрану до натиснення клавіші

};break;

case 3: //пункт 3 «Обробка масиву»

{

if (isvvod) //если масив заданий, то його можна роздрукувати

{

clrscr();

cout<<" --= Обробка масиву =--\n";

int imin = min(а,m); //вызов функції для визначення номера мин.элемента

int imax = max(а,m); //вызов функції для визначення номера макс.элемента

cout<<setprecision(2) <<"Минимальный елемент = "<<a[imin]<<"\n"; cout<<setprecision(2) <<"Максимальный елемент = "<<a[imax]<<"\n";

cout<<"Индекс мінімального елементу = "<<imin<<"\n";

cout<<"Индекс максимального елементу = "<<imax<<"\n";

cout<<setprecision(2) <<"Сумма мінімального і максимального елементів =<<

а[imin]+a[imax];

cout<<"\nМассив\n";

print(а,m); //вызов функції для друку масиву

}

else //массив не заданий, необхідно спочатку задати масив

cout <<"Необходимо спочатку задати масив. Виберіть пункт 1.";

getch(); //задержка екрану до натиснення клавіші

};break;

};

}while(punkt!=4); //цикл виконується поки не вибраний пункт 4 «Вихід»

}

Приклад виконання програми:

МЕНЮ

1. Введення масиву

2. Друк масиву

3. Обробка масиву

4. Вихід

Виберіть пункт меню -> 1

МЕНЮ

1. Введення масиву

2. Друк масиву

3. Обробка масиву

4. Вихід

Виберіть пункт меню -> 3

--= Введення масиву =--

Введіть кількість елементів масиву -> 5

# 0 = -5

# 1 = -6

# 2 = 2

# 3 = 15

# 4 = 8

--= Обробка масиву =--

Мінімальний елемент = -6

Максимальний елемент = 15

Індекс мінімального елементу = 1

Індекс максимального елементу = 3

Сума мінімального і максимального елементів = 9

Масив

-5 -6 2 15 8

МЕНЮ

1. Введення масиву

2. Друк масиву

3. Обробка масиву

4. Вихід

Виберіть пункт меню -> 2

МЕНЮ

1. Введення масиву

2. Друк масиву

3. Обробка масиву

4. Вихід

Виберіть пункт меню -> 4

--= Друк масиву =--

-5 -6 2 15 8

Питання до захисту завдання:

  1. поняття масиву;

  2. оголошення масиву;

  3. оголошення констант;

  4. оператор множинного вибору switch;

  5. логічні змінні;

  6. використання маніпуляторів при виведенні даних на екран.

6

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