Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2019, 18:20   #1
bylbyl9tor
Пользователь
 
Регистрация: 07.10.2018
Сообщений: 28
Злость Без функции всё работает верно, с ними не верно,помогите исправить

ЗАДАНИЕ: вывести индексы максимально близких эллементов массива
БЕЗ ФУНКЦИЙ
Код:
#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;
}
bylbyl9tor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа написано верно, но почему-то не работает (на Си) Дмитрий Огнев Помощь студентам 7 29.04.2014 20:19
strpos работает не верно с булевым значением SwitchOFF PHP 2 08.07.2011 14:31
функция сортировки массива работает не верно DroZd911 Помощь студентам 1 18.02.2011 05:33
fgets - работает не верно, и вообще тупит heart C++ Builder 14 29.11.2009 15:55
[B]Народ! Проверки мне верно или не верно? мне надо завтра сдавать[/B] Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 6 04.06.2008 14:34