
- •Форма № н-6.01
- •Курсова робота
- •2.2 Модульне програмування
- •2.3 Об’єктно-орієнтоване програмування
- •2. Алгоритми обробки одновимірних масивів 2.1 Ініціалізація масиву
- •2. Алгоритми обробки одновимірних масивів 2.1 Ініціалізація масиву
- •2.7 Пошук елементів, що володіють заданою властивістю
- •2.10 Формування нового масиву
- •If (умова)
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;// звільнення динамічної пам'яті
}
ВИСНОВКИ
Підводячи підсумок роботи, хочу зазначити, що в ході роботи було розглянуте об’єктно-орієнтоване програмування. Слід зазначити, що воно широко використовується у програмуванні. У ньому реалізовані основні складаючи: інкапсуляція, поліморфізм та наслідування. Це дає змогу об’єднання даних та використовувати їх функції в одне ціле, що робиться за допомогою класів. Є можливість позначати різні, але сходні дії однаковими іменами та створювати єдині інтерфейси для різних реалізацій одного й того ж алгоритму, позначаючи їх однаковими іменами. І третя властивість, яка є теж важливою – присвоєння одним класом властивостей другого класу.
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
Калоєров С.А. Програмування на мові С++: учбовий посібник. – Д.: ООО «Юго – Восток, Лтд», 2004.
Стауступ Б. Мова програмування С++. – 3-те вид. / Пер. з англ. – СПб.: БІНОМ, 1999.
Павловська Т.А. Програмування на мові високого рівня - СПб: Пітер, 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<<"%";}
Результати роботи програми: