- •Алгоритмічні мови та програмування Методичні вказівки
- •Алгоритмічні мови та програмування Методичні вказівки
- •03056, Київ, вул..Політехнічна, 12, корп. 17
- •Практичне заняття № 1 Системи числення та формати зображення чисел у еом Завдання
- •Практичне заняття № 2
- •Завдання
- •Додаток 1 Пріоритети та асоціативність операцій
- •Примітка
- •Опис операцій
- •4.Операції зсувів
- •8.Умовний вираз
- •9. Операції та вирази присвоювання
- •10.Складене присвоювання
- •11. Операція „кома” або операція послідовного обчислення
- •Додаток 2
- •Практичне заняття № 3 Вивчення умовних переходів Завдання
- •Список завдань
- •Практичне заняття № 4 Вивчення циклічних обчислювальних процесів Завдання
- •Практичне заняття № 5 Розробка алгоритмів та їх графічне зображення Завдання
- •Практичне заняття № 6 Розрахунок значень числових рядів Завдання
- •Приклад виконання завдання
- •Практичне заняття № 8 Робота з функціями Завдання
- •Приклад виконання завдання
- •Опис алгоритму і програми
- •Практичне заняття № 9 Робота з цілими числами Завдання
- •Додаток
Приклад виконання завдання
Завдання:
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 );
}