Всех приветствую.Только начал разбираться с функциями.Подскажите пожалуйста, правильно ли сделал функцию и передачу параметров?
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
void Obratn(int a[], int b[], int n);
int main()
{
int a[10], b[10], i, n;
cout << "Vvedite razmer massiva: ";
cin >> n;
cout << "\nVvedite massiv:\n";
for (i = 0; i<n; i++)
{
cout << "Vvedite a[" << i << "]= ";
cin >> a[i];
}
cout << "\nMassiv a:\n";
for (i = 0; i<n; i++)
cout << " " << a[i];
cout << endl;
Obratn(a, b,n);
system("pause");
}
void Obratn(int a[],int b[], int n)
{
for (int i = 0; i<n; i++)
b[n - i - 1] = a[i];
for (int i = 0; i<n; i++){
a[i] = b[i];
cout << " " << a[i];
}
cout << endl;
}
Ну, я бы на вашем месте сделал так:
void Obratn(int a[], int n)
{
for (int i = 0, j = n - 1; i < j; ++i, --j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
Это - к тому, что не нужно использовать лишнюю память там, где без нее можно обойтись.
И еще - я убрал отсюда вывод на экран - потому что каждая функция должна заниматься одним делом. Эта - обращением массива. Выводом должна заниматься другая...
P.S. Да, и после cin >> n; следовало бы проверить, что у вас хватит памяти в маcсиве a[10], т.е. что введенный размер не превышает 10.
С этой функцией есть несколько проблем:
int a[] вводит в заблуждение, так как тип a на самом деле int *, соответственно лучше указать тип явноvoid Obratn(int * a, int * b, int n);
const хотя параметры внутри функции не изменяются, соответственно лучше запистьvoid Obratn(int * const a, int * const b, int const n);
array_view (какую-нибудь реализацию), причем массив тут по факту нужен только одинvoid Obratn(array_view<int> const a);
void Reverse(array_view<int> const items);
noexceptvoid Reverse(array_view<int> const items) noexcept;
Сборка персонального компьютера от Artline: умный выбор для современных пользователей