Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
161693.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
188.42 Кб
Скачать

2.10 Формування нового масиву

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

При формуванні нових масивів зручно використовувати динамічні масиви, оскільки число його елементів заздалегідь не відомо. Алгоритм створення нового масиву схожий з алгоритмом копіювання (Малюнок 2.19).

k = 0;

for (i = in; i

{

If (умова)

{

y [k] = a [i];

k + +;

}

}

Малюнок 2.19 Алгоритм і фрагмент програми формування нового масиву

Для послідовного запису елементів в новий масив використовується додаткова змінна k - лічильник елементів в новому масиві . Початкове значення цієї змінної приймається рівною нулю , т.е вважається що в новому масиві немає елементів. При виявленні у вихідному масиві елемента задовольняє заданій умові, його значення заноситься в новий масив на позицію k , а після лічильник елементів збільшується на одиницю ( k = k +1 ). Таким чином, після обробки всього вихідного масиву за значенням лічильника k можна визначити, сформований новий масив ( k > 0 ) і скільки в ньому елементів ( k ).

Приклад 2.8

Дано два одновимірних масиву X і Y . Необхідно сформувати масив Z з позитивних елементів масиву X стоять на парних місцях і елементів масиву Y великих першого елемента масиву X .

масив одновимірний програма алгоритм

Рішення

Якщо число елементів масиву X - n , а масиву Y - m , то з урахуванням того, що з першого масиву вибираються елементи стоять тільки на парних місцях, максимальне число елементів у новому масиві Z може досягати m + n /2 елементів. Тому для масиву Z за допомогою оператора динамічного виділення пам'яті ( new ) виділимо m + [ n /2] комірки пам'яті ( [ n /2] - ціла частина від ділення). Початкову значення лічильника елементів нового масиву k приймається ... рівним нулю .

При обробці масиву X необхідно перевіряти тільки елементи, що стоять на парних місцях, тобто параметр циклу i змінюється від in = 1 до ik = n з кроком 2 . Умова відбору елементів з першого масиву X [ i ]> 0 . При обробці масиву Y враховуються всі його елементи, тобто параметр циклу i змінюється від in = 0 до ik = m з кроком 1 . Умова відбору елементів з другого масиву - Y [ i ]> X [0] .

Описаний алгоритм формування нового масиву і програма представлені на малюнку 2.20.

Використовувані змінні:

x [] - статичний (вихідний) масив ;

n - число елементів масиву X ;

y [] - статичний (вихідний) масив;

m - число елементів масиву;

z [] - динамічний (формований) масив

k - лічильник елементів нового масиву Z ;

i - параметр циклу;

# include

main ()

{

int k, n, m, i, x [10], y [10];

puts ("Введіть число елементів масиву X : ");

scanf ("% d", & n);

for (i = 0; i

{

printf ("x [% 2d] =", i);

scanf ("% d", & x [i]);

}

puts ("Введіть кількість елементів масиву Y : ");

scanf ("% d", & m);

for (i = 0; i

{

printf ("y [% 2d] =", i);

scanf ("% d", & y [i]);

}

int * z = new int [15];// виділення пам'яті під масив Z

k = 0;

for (i = 1; i

{

if (x [i]> 0)

{

z [k] = x [i];

k + +;

}

}

for (i = 0; i

{

if (y [i]> x [0])

{

z [k] = y [i];

k + +;

}

}

puts ("Масив X:");

for (i = 0; i

printf ("x [% d] =% d n", i, x [i]);

puts ("Масив Y:");

for (i = 0; i

printf ("y [% d] =% d n", i, y [i]);

if ( k == 0)

puts ("Масив Z не сформується-ван.");

else

{

puts ("Масив Z:");

for (i = 0; i

printf ("z [% d] =% d n", i, z [i]);

}

delete [] z;// звільнення пам'яті

}

Малюнок 2.20. Графічний алгоритм і програма для прикладу 2.8

Література

1. М ук № 3089. Кравченко О.А., Мартиненко А.М. Програмування введення-виведення даних та лінійних обчислювальних алгоритмів на мові С: практ. посібник до виконання лаб. і контрол. робіт з дисципліни "Обчислювальна техніка та програмування "для студентів техн. спеціальностей денної. і заоч. форм навчання Гомель: ГГТУ ім. П.О. Сухого, 2005. - 33 с.

2. М ук № 3106. Кравченко О.А., Коробейникова Є.В. Програмування розгалужуються і циклічних алгоритмів на мові С: посібник з виконання лабораторних і контрольних робіт з дисципліни "Обчислювальна техніка та програмування "для студентів техн. спеціальностей денної. і заоч. форм навчання Гомель: ГГТУ ім. П.О. Сухого, 2005. - 33 с

3. Інформатика. Базовий курс: навч. посібник/під ред. С. В. Симоновича. - 2-ге вид. - Санкт-Петербург: Питер, 2007. - 639с. : Іл. - (Підручник для вузів). - Бібліогр.: С.631-632. - ISBN 5-94723-752-0

4. С/С + +. Програмування на мові високого рівня/Т. А. Павловська. - Санкт-Петербург: Питер, 2006. - 460с. : Іл. - (Підручник для вузів). - Бібліогр.: С.383. - ISBN 5-94723-568-4.

5. С #. Програмування на мові високого рівня/Т. А. Павловська. - Сант-Петербург: Пітер, 2007. - 432с. : Іл. - (Підручник для вузів). - Бібліогр.: С.425-426. - ISBN 5-91180-174-4.

6. Інформатика : Навч. для вузів/В. А. Острейковскій. - Москва: Вища. шк., 2000. - 511с. : мул. - Бібліогр.: С.508. - ISBN 5-06-003533-6.

7. Інформатика: Підручник/Под ред. Проф. Н.В.Макаровой. -М.: Фінанси і статистика, 1998.

8. Касаткін А.І., Вальвачев А.Н. Професійне програмування на мові СІ: від Turbo C до Borland C + +: Справ.пособіе. - Мн.: Виш.шк., 1992. - 240 с.

9. Топп У., Форд У. Структури даних в С + +: Пер. з англ.-М.: БІНОМ, 1994. - 816 с.

10. Крячков А.В., Сухіна І.В., Томшін В.К. Програмування на С і С + +. Практикум: Навч. Посібник для вузів. - М.: Гаряча Лінина - Телеком, 2000 - 344 с.

11. Страуструп Б. Мова програмування Сі + +: Пер. з англ. - М.: Радіо і зв'язок, 1991. - 352 с.

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

Передбачається, що заданий масив чисел. Програма повинна: ​​

1) вводити розмірність і елементи масиву;

2) вводити деякі додаткові числа;

3) виконувати дії відповідно з умовою задачі;

4) виводити початкові дані і результати обчислень.

Вихідні дані для налагодження програми вибрати самостійно. Масив оголосити як статичний .

Завдання:

У одновимірному масиві A розмірністю n , знайти кількість чисел, менших заданого X , і твір негативних чисел, що стоять на парних місцях.

Рішення

Таблиця відповідності змінних

Змінні в задачі Ім'я на мові Сі Тип Коментар

A []

A []

float

Одновимірна статичний масив

n

n

int

Кількість елементів масиву

P

P

float

Твір негативних чисел

X

x

float

Задане число

op>

k

k

int

Кількість чисел менших X

-

k1

int

Кількість негативних чисел

-

i

int

Номер елемента масиву; параметр циклу

Графічна схема алгоритму

Опис алгоритму

1. блоки 1 - 2 вводяться вихідні дані;

2. блоки 3 - 9 обчислення і виведення кількості K менших заданого X

3. блоки 10 - 18 обчислення кількості K 1 і твори P негативних

4.

Лістинг програми

{

змінних

{

}

}

1)

чисел. числа;

Рішення

int

int

n

n

int

-

int

-

int

-

i

int

Номер елемента масиву; параметр циклу

Опис алгоритму

1. блоки 1 - 2 ввід/вивід вихідного масиву A []

2. блоки 3 - 5 пошук першого нульового елемента в масиві;

3. блоки 6 - 7 перевірка на наявність в масиві хоча б одного нульового елемента і у випадки їх відсутності виведення повідомлення В« У масиві немає нулів В» і перехід на кінець алгоритму;

4. блоки 8 - 12 пошук останнього нульового елемента в масиві і збереження позиції першого нуля в t 1 , а останнього в t 2

5. блоки 13 - 14 перевірка розташування нульових елементів у масиві та в випадки помилки висновок повідомлення В« У масиві тільки один нуль або вони розташовуються один за одним В» В»І перехід на кінець алгоритму;

6. блоки 15 - 21 в випадки виконання перевірки (блок 13) пошук максимального елемента між крайніми нульовими елементами і висновок отриманого результату.

Графічна схема алгоритму

Лістинг програми

# include < stdio . h >

main ()

{

int i, t1, t2, n, max;

puts ("Введіть кількість елементів масиву А ");

scanf ("% d", & n);

int * A = new int [n];// виділення пам'яті під масив

for (i = 0; i введення масиву

{

printf ("a [% 2d] =", i);

scanf ("% d", & A [i]);

}

puts (" Масив A:");

for (i = 0; i висновок масиву

printf ("a [% d] =% d n", i, A [i]);

i = 0;

while (i пошук позиції початок нуля

if (i> = n)

printf ("У масиві немає нулів n ");

else

{

t1 = i;

i = n-1;

while (i> = t1 && A [i]! = 0) i = i-1;// пошук позиції останнього нуля

t2 = i;

if (t1 == t2 | | t1 == t2-1)

printf ("У масиві тільки один нуль або вони розташовуються один за одним n ");

else

{

max = A [t1 +1];

for (i = t1 +1; i

if (A [i]> max) max = A [i];// пошук максимального елемента

printf ("t1 =% d t2 =% d max =% d n ", t1, t2, max);

}

}

delete [] A;// звільнення динамічної пам'яті

}

ВИСНОВКИ

Підводячи підсумок роботи, хочу зазначити, що в ході роботи було розглянуте об’єктно-орієнтоване програмування. Слід зазначити, що воно широко використовується у програмуванні. У ньому реалізовані основні складаючи: інкапсуляція, поліморфізм та наслідування. Це дає змогу об’єднання даних та використовувати їх функції в одне ціле, що робиться за допомогою класів. Є можливість позначати різні, але сходні дії однаковими іменами та створювати єдині інтерфейси для різних реалізацій одного й того ж алгоритму, позначаючи їх однаковими іменами. І третя властивість, яка є теж важливою – присвоєння одним класом властивостей другого класу.

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

  1. Калоєров С.А. Програмування на мові С++: учбовий посібник. – Д.: ООО «Юго – Восток, Лтд», 2004.

  2. Стауступ Б. Мова програмування С++. – 3-те вид. / Пер. з англ. – СПб.: БІНОМ, 1999.

  3. Павловська Т.А. Програмування на мові високого рівня - СПб: Пітер, 2003

ДОДАТОК А

Скласти клас для дослідження оцінок студента у сесії на якість (на «4» і «5») і неуспішність (наявність хоча б однієї оцінки «2»). Використовуючи цей клас, скласти програму знаходження кількості студентів групи, успішних на «4» і «5» та неуспішних, а також вирахувати процентне відношення для кожного з цих показників. Студенти у сесії здавали 4 іспиту.

rx45=0, rx2=0, k=1

rx45+=sr.r45(),

rx2+=sr.r2()

Код програми:

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

class Student{

public: //Опис членів

void cinr();

void coutr();

int r45();

int r2();

private:

int s[4];}; //Масив ввода оцінок

void Student :: cinr() //Функція ввода оцінок студента

{cout<<"Vvedite ocenky studenta: ";

for (int k=0; k<4; k++)

cin>>s[k];

}

void Student :: coutr() //Функція вивіда оцінок студента

{cout<<"Ocenky studenta: \n";

for (int k=0; k<4; k++)

cout<<s[k];

}

int Student :: r45() //Функція дослідження оцінок

{int p=1;

for (int k=0; k<4; k++)

if (s[k]<4)p=0;

return p;

}

int Student :: r2() //Функція дослідження оцінок на «2»

{int p=0;

for (int k=0; k<4; k++)

if (s[k]==2)p=1;

return p;

}

void main()

{int n; //Кількість студентів в групі

cin>>n;

int rx45=0;

int rx2=0;

Student sr;

for (int k=1; k<=n; k++)

{sr.cinr();

sr.coutr();

rx45+=sr.r45();

rx2+=sr.r2();

}

cout<<"Na 4 i 5 sdaly"<<rx45<<"studentov ili"

<<rx45*100.0/n<<"%";

cout<<"Hotya by odnu 2 imeyut"<<rx2<<"studentov ili"

<<rx2*100.0/n<<"%";}

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