Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АМК_практ_зан.docx
Скачиваний:
4
Добавлен:
20.11.2019
Размер:
530.41 Кб
Скачать

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

Завдання:

1.Ввести з клавіатури n значень елементів одновимірного цілочислового масиву А .

2.Визначити найбільший елемент Amax серед елементів кратних 3 та його індекс.

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

4.Поміняти місцями Amax і перший елемент масиву.

5.Отримані результати вивести на екран комп’ютера.

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

Для спрощення програмної реалізації завдання одновимірний цілочисловий масив А та індекс найбільшого елемента робимо глобальними ,тобто описуємо зовні головної функції .

У головній функції викликаємо функцію input(); для введення із клавіатури початкових значень елементів , робимо контроль введення , викликаючи функцію виведення значень елементів на екран output(); для контролю введення .Ці функції нічого не повертають і не потребують вхідної інформації (void function (void);),у програмі вони описуються до головної функції , тому їм не потрібні прототипи у головній функції .

Далі викликається функція визначення найбільшого елемента Amax серед елементів кратних 3 та його індексу int amax_calcul ( void); , яка повертає значення Amax , яке присвоюється цілій змінній Amax .Глобальна змінна j

(індекс Amax) отримує значення під час виконання функції . Знайдене значення Amax виводиться на екран .

Потім іде звернення до функції розрахунку суми S та кількості елементів N із 5 у молодшому розряді , розташованих після Amax ,

void sum_number_calcul (int *sa ,int *num); Змінні S ,N для отримання відповідних значень передають свої адреси вказівникам sa , num sum_number_calcul ( &S ,&N); . Їх значення також виводяться на екран .

Для зміни місць Amax і першого елементу масиву викликається функція void amax_a1_exchange (void); , яка нічого не повертає і не потребує вхідної інформації , бо А глобальний масив , який неявно присутній у всіх функціях . Модифікований масив А виводиться на екран функцією output(); .

Функції крім input(); , output(); розташовані у програмі після головної і тому повинні мати у ній прототипи для перевірки правильності звернень до функцій .

Структура програми :

1. команди пре процесора;

2. опис глобальних змінних Amax і j ;

3. функція input();

4. функція output();

5. головна функція main () ;

6. функція int amax_calcul ( void);

7. функція void sum_number_calcul (int *sa ,int *num);

8. функція void amax_a1_exchange (void);

Текст програми (файл prakt6_1.cpp)

#include <iostream.h>

#include <conio.h>

#define n 10

int A[n]; //={1,9,15,22,21,25,27,35,41,50}; //test

int j;

void input (void)

{

cout << "\n input the array A values\n";

for (int i=0;i<n;i++) cin >> A[i];

}

void output (void)

{

cout << "\n";

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

cout << " " << A[i] << " ";

}

int main()

{

int amax_calcul(void);

void sum_number_calcul(int *sa, int *num);

void amax_a1_exchange (void);

clrscr();

input();

output(); //input's control

int Amax = amax_calcul();

cout << "\n Amax = " << Amax << ” j = “ << j;

int S, N; sum_number_calcul(&S, &N);

cout << "\n S=" << S << " N=" << N;

amax_a1_exchange ();

getch();

return 0;

}

int amax_calcul(void)

{

int Am;

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

if (A[i] % 3==0)

{

Am = A[i];

j=i+1;

break;

}

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

if( A[i] % 3 == 0 && A[i] >Am)

{

Am =A[i];

j=i;

}

return Am;

}

void sum_number_calcul(int *sa,int *num)

{

*sa = 0; *num= 0;

for (int i=j+1;i<n;i++)

if (A[i] % 10 == 5)

{

*sa+ = A[i];

*num +=1;

}

}

void amax_a1_exchange (void)

{

int t = A[0];

A[0]=A[j];

A[j]=t;

output();

}

Для тестового масиву 1,9,15,22,21,25,27,35,41,50 отримані правильні значення : Amax = 27 , j= 6 , S = 35 , N = 1 , масив 27,9,15,22,21,25,1,35,41,50 .

Варіант програми з локальним масивом (файл prakt6_2.cpp).

#include <iostream.h>

#include <conio.h>

#define n 10

void input ( int arr[n] )

{

cout << "\n input the array values\n";

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

cin >> arr[i];

}

void output ( int arr[n] )

{

cout << "\n";

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

cout << " " << arr[i] << " ";

}

int main()

{

int A[n], j;

int amax_calcul ( int arr[n], int *j );

void sum_number_calcul ( int arr[n], int j, int *sa, int *num );

void amax_a1_exchange ( int arr[n], int j );

clrscr();

input(A);

output(A); //input's control

int Amax = amax_calcul ( A, &j );

cout << "\n Amax = " << Amax << " j=" << j;

int S, N; sum_number_calcul ( A, j, &S, &N );

cout << "\n S=" << S << " N=" << N;

amax_a1_exchange ( A, j );

getch(); return 0;

}

int amax_calcul ( int arr[n], int *j )

{

int Am;

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

if (arr[i] % 3 == 0)

{

Am = arr[i];

*j = i + 1;

break;

}

for ( i = *j; i < n; i++)

if ( arr[i] % 3 == 0 && arr[i] > Am )

{

Am = arr[i];

*j = i;

}

return Am;

}

void sum_number_calcul ( int arr[n], int j, int *sa, int *num)

{

*sa = 0; *num = 0;

for ( int i = j + 1; i < n; i++)

if ( arr[i] % 10 == 5 )

{

*sa += arr[i];

*num += 1;

}

}

void amax_a1_exchange ( int arr[n], int j )

{

int t = arr[0]; arr[0] = arr[j]; arr[j] = t;

output ( arr );

}