Задать вопрос
@temployer

Последовательное выполнение условий if в С++?

Здравствуйте! Возник один вопрос : как выполнить последовательное выполнение условий if в С++. Чтобы было понятней, хочу привести пример : есть последовательность чисел : с минусом и без, все вместе, нужно получить новую последовательность, в которой будут идти сначала числа с минусом, а потом положительные. Не сортировка, порядок отрицательных чисел, должно сохраняться исходное взаимное положение, как среди отрицательных, так и среди положительных чисел . Пробовал делать двумя условиями, но выполняется только первое, второе попросту игнорируется. Какие исправить данное положение. Спасибо за внимание.
#include "stdafx.h"
#include <iostream>
#define MAX 15
using namespace std;
int main()
{
	int n,i;
	double a[MAX];
	cout << "n=";
	cin >> n;
	for(i=0; i<n; i++)
	{
		cout << "a[" << i << "]=";
		cin >> a[i];
	}
	for(i=0; i<n; i++)
	{
		if (a[i] < 0)
		{
			cout << a[i] << " " << endl;
		}
		if (a[i] > 0)
		{
			cout << a[i] << " " << endl;
		}
	}
	system("pause");
	return 0;
}
  • Вопрос задан
  • 846 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
Вы действительно не понимаете, что число не может быть одновременно меньше нуля и больше нуля?
Ответ написан
Не сортировка

Сортировка. Только на множестве используется отношение порядка, отличное от принятого для действительных чисел.

#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>

template <typename T> int sgn(const T val) {
    return (T(0) < val) - (val < T(0));
}

int main() {

	std::vector<double> v = {0, 2, -1, -100, -3, 4, 1, -90};


	std::cout << "Original: ";
	std::copy(v.begin(), v.end(), std::ostream_iterator<double>(std::cout, " "));
	std::cout << std::endl;

	std::stable_sort(v.begin(), v.end(),
		[](const double &a, const double &b) -> bool {
			const int sa = sgn(a);
			const int sb = sgn(b);
			return sa < sb;
		});

	std::cout << "Sorted: ";
	std::copy(v.begin(), v.end(), std::ostream_iterator<double>(std::cout, " "));
	std::cout << std::endl;

	return 0;
}


Original: 0 2 -1 -100 -3 4 1 -90 
Sorted: -1 -100 -3 -90 0 2 4 1
Ответ написан
@Onito
эм, то что тут написано выведет весь массив как он есть без 0 элементов.

это решит задачу
for(i=0; i<n; i++)
  {
    if (a[i] < 0)
    {
      cout << a[i] << " " << endl;
    }
  }
  for(i=0; i<n; i++)
  {
    if (a[i] > 0)
    {
      cout << a[i] << " " << endl;
    }
  }
Ответ написан
Комментировать
GavriKos
@GavriKos
Вам нужно не два условия, а два цикла. В первом цикле выводите все отрицательные, во втором - все положительные.
Но это - не оптимальный вариант.
Оптимальнее - один цикл с двумя условиями, но не выводить на экран а заносить в два массива разных. А потом последовательно вывести массивы на экран.
Ваш же код выведет все числа из массива, в той последовательности в какой они есть, кроме чисел равных нулю.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы