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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2020, 15:02   #1
Скребок
Новичок
Джуниор
 
Регистрация: 28.10.2020
Сообщений: 1
Восклицание шейкер-сортировка. помогите найти ошибку

С++
Прописала программу, которая должна указывать самый жаркий и самый прохладный день и сортировать от меньшего к большему (ну или наоборот, неважно). Программа работает некорректно, а найти ошибку и исправить не могу, второй день голову ломаю. Помогите, пожалуйста!

Код:
#include <iostream>
using namespace std;

// функція чистить буфер вводу при неправильному вводі
void restore_stream(std::istream& stream)
{
	stream.clear();
	stream.ignore(numeric_limits<streamsize>::max(), '\n');
}

// Функция которая находит максимальную температуру и считает их количество
float tmax(float temperature[], int n)
{
	float max, sumMax = 0;
	max = temperature[0];
	for (int i = 1; i < n; ++i) {
		if (temperature[i] > max) {
			max = temperature[i];
		}
}
	for (int i = 0; i < n; ++i) {
		if (temperature[i] == max) {
			++sumMax;
		}
	}
	return sumMax;
}

// Функция которая находит минимальную температуру и считает их количество
float tmin(float temperature[], int n) {
	float min, sumMin = 0;
	min = temperature[0];

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

		if (temperature[i] < min) {
			min = temperature[i];
		}
	}

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

		if (temperature[i] == min) {

			++sumMin;
		}
	}

	return sumMin;
}


// Сортировка
void sort(float temperature[], int n)
{
	int left = 1;
	int right = n - 1;
	float t = 0.;
	while (left <= right)
	{
		for (int i = right; i >= left; i--) {
			if (temperature[i - 1] > temperature[i]) {

				t = temperature[i];
				temperature[i] = temperature[i - 1];
				temperature[i - 1] = t;

				left++;
			}
		}


		for (int i = left; i <= right; i++) {
			if (temperature[i - 1] > temperature[i]) {
				t = temperature[i];
				temperature[i] = temperature[i - 1];
				temperature[i - 1] = t;
				right--;
			}
		}

	}
}

int main() {
	int const N = 100;
	// Mасив із значеннями точок осі Х
	float temperature[N] = {};

	// Тут мы вводим н маленькую, это будет количество элементов(дней) в масиве
	// а дальше проверка правильности введеной н
	int n;
	bool in_error = true;
	while (in_error) {
		cout << " Enter amount of days: ";
		if (!(cin >> n)) {
			cout << "Error, try again.\n";
			restore_stream(cin);
		}
		else {
			if (n <= 0 || n > N)
			{
				cout << "n must be greater and not equal to 0 and less N!\n";
			}
			else {
				in_error = false;
			};
		};
	};

	// Ввод и проверка правильности ввода температури
	for (int i = 0; i < n;) {
		cout << "Day(" << i + 1 << ") : ";
		if (cin >> temperature[i]) {
			++i;
		}
		else {
			cout << "Error, try again.\n";
			restore_stream(cin);
		};
	};

	// Задание А
	float min = temperature[0];
	float max = temperature[0];
	float sumMax = 0.;
	float sumMin = 0.;
    sumMax = tmax(temperature, n);
    sumMin = tmin(temperature, n);
	cout << "The maximum temperature was during " << sumMax << " days.\n";
	cout << "The minimum temperature was during " << sumMin << " days.\n";

	// Сортировка
	sort(temperature, n);
	cout << "Sorted array:\n";
	for (int i = 0; i < n; ++i) {
		cout << "Temperature(" << i + 1 << "): " << temperature[i] << endl;
	}

	return 0;
}

Последний раз редактировалось Скребок; 28.10.2020 в 15:10.
Скребок вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку (сортировка 2-мерного массива вставками) Fillimon Общие вопросы по Java, Java SE, Kotlin 3 23.09.2018 11:59
сортировка шейкер Anton19901505 Помощь студентам 2 07.05.2017 18:28
Помогите найти ошибку: Сортировка строк матрицы по убыванию соответствующего элемента главной диагонали(Cи) Rokill Помощь студентам 9 12.08.2014 17:36
С++ Шейкер сортировка clumz Помощь студентам 2 24.01.2012 21:05