ЗАДАНИЕ: вывести индексы максимально близких эллементов массива
БЕЗ ФУНКЦИЙ
Код:
#include <iostream>
#include<cmath>
#include <ctime>
#include <iomanip> //для stew
using namespace std;
int main()
{
setlocale(LC_ALL, "ru");
int mass[1000], minus[500], size, cup, num1, num2;
int nom[1000];
srand(time(0));
cout << "Введите количество эллементов массива" << endl; cin >> size;
for (int i = 0; i < size; i++)
{
mass[i] = rand() % 100; //заполнение
nom[i] = i; //заполнение индексов
}
cout << "Исходный массив:" << endl;
for (int i = 0; i < size; i++)
{
cout << setw(5) << mass[i] << setw(5); if ((i + 1) % 16 == 0)cout << endl; //вывод массива
}
cout << endl << "________________________________________________________________________________" << endl;
for (int i = 0; i < size - 1; i++)
{
for (int j = 0; j < size - i - 1; j++)
{
if (mass[j] > mass[j + 1])
{
cup = mass[j];
mass[j] = mass[j + 1];
mass[j + 1] = cup; // сортир
cup = nom[j];
nom[j] = nom[j + 1];
nom[j + 1] = cup;
}
}
}
cout << "Отсортированный массив:" << endl;
for (int i = 0; i < size; i++)
{
cout << setw(5) << mass[i] << setw(5); if ((i + 1) % 16 == 0)cout << endl; //вывод массива
}
cout << endl << "________________________________________________________________________________" << endl;
cout << endl << "Индексы элементов после сортировки" << endl;
for (int i = 0; i < size; ++i)
{
cout << setw(5) << nom[i]; if ((i + 1) % 16 == 0)cout << endl; //индексы
}
cout <<endl<< "________________________________________________________________________________" << endl;
for (int i = 0; i <size-1; i++)
{
minus[i]=abs(mass[i] - mass[i+1]); //вывод массива
//cout << " " <<minus[i]<< " ";
}
int min = minus[0];
for (int i = 0; i < size - 1; ++i)
{
if (minus[i] < min)
{
min = minus[i];
num1 = nom[i]; //нахождение минимальной суммы
num2 = nom[i + 1];
}
}
cout<<"Если в массиве несколько эллементов имеют одинаковую разность, то программа выведет индексы всех этих эллементов" << endl;
for (int i = 0; i < size - 1; ++i)
{
if (minus[i] == min)
{
cout << "Индекс 1: " << nom[i] << endl;
cout << "Индекс 2: " << nom[i+1] << endl; //проверка на повторы минимальной суммы
cout << "________________________________________________________________________________" << endl;
}
}
cout << endl;
system("pause");
return 0;
}
С ФУНКЦИЯМИ
Код:
#include <iostream>
#include<cmath>
#include <ctime>
#include <iomanip> //для setw
using namespace std;
void input(int* mass, int* nom, int size)
{
for (int i = 0; i < size; i++)
{
mass[i] = rand() % 100; //заполнение
nom[i] = i; //заполнение индексов
}
}
void output_mass(int* mass, int size)
{
cout << "Исходный массив:" << endl;
for (int i = 0; i < size; i++)
{
cout << setw(5) << mass[i] << setw(5); if ((i + 1) % 16 == 0)cout << endl; //вывод массива
}
cout << endl << "________________________________________________________________________________" << endl;
}
void sortir_bubbles(int* mass, int* nom, int size)
{
int cup;
for (int i = 0; i < size - 1; i++)
{
for (int j = 0; j < size - i - 1; j++)
{
if (mass[j] > mass[j + 1])
{
cup = mass[j];
mass[j] = mass[j + 1];
mass[j + 1] = cup; // сортир пузырьком имассива с индексами
cup = nom[j];
nom[j] = nom[j + 1];
nom[j + 1] = cup;
}
}
}
}
void output_after_sortir(int* mass, int size)
{
cout << "Отсортированный массив:" << endl;
for (int i = 0; i < size; i++)
{
cout << setw(5) << mass[i] << setw(5); if ((i + 1) % 16 == 0)cout << endl; //вывод отсортированного массива
}
cout << endl << "________________________________________________________________________________" << endl;
}
void output_nom(int* nom, int size)
{
cout << endl << "Индексы элементов после сортировки" << endl;
for (int i = 0; i < size; ++i)
{
cout << setw(5) << nom[i]; if ((i + 1) % 16 == 0)cout << endl; //индексы вывод
}
cout << endl << "________________________________________________________________________________" << endl;
}
void minuss(int* mass, int* minus, int size)
{
for (int i = 0; i < size - 1; i++)
{
//cout << mass[i] << " " << mass[i + 1];
minus[i] = abs(mass[i] - mass[i + 1]); //заполняем массив разностью пар элементов
//cout << " " << minus[i] << " ";
}
}
void min_sum(int* minus, int* nom, int size,int min)
{
for (int i = 0; i < size - 1; ++i)
{
if (minus[i] < min)
{
min = minus[i]; //нахождение минимальной суммы
}
}
}
void results(int* minus, int* nom, int size, int min)
{
cout << "Если в массиве несколько эллементов имеют одинаковую разность, то программа выведет индексы всех этих эллементов" << endl;
for (int i = 0; i < size - 1; ++i)
{
if (minus[i] == min)
{
cout << "Индекс 1: " << nom[i] << endl;
cout << "Индекс 2: " << nom[i + 1] << endl; //проверка на повторы минимальной суммы
cout << " Разность этих эллементов= " << minus[i] << endl;
cout << "________________________________________________________________________________" << endl;
}
}
}
int main()
{
setlocale(LC_ALL, "ru");
int *mass, *minus, *nom, size;
srand(time(0));
cout << "Введите количество эллементов массива" << endl; cin >> size;
mass = new int[size]; //динам. память
nom = new int[size];
minus = new int[size - 1]; //size-1 т.к пар элементов всегда на 1 меньше чем элементов
input(mass, nom, size);
output_mass(mass, size);
sortir_bubbles(mass, nom, size);
output_after_sortir(mass, size);
output_nom(nom, size);
minuss(mass, minus, size);
int min = minus[0];
min_sum(minus, nom, size,min);
results(minus, nom, size, min);
//cout << min << endl << mass[1] << endl << mass[2];
cout << endl;
system("pause");
return 0;
}