Вопрос по информатике:
Задание: дан массив из 15 рандомных чисел от -10 до 10. Нужно числа отсортировать так: сначала отрицательные на уменьшение, потом положительные на уменьшение.
Написать на с++, желательно через циклы !
- 01.12.2017 04:36
- Информатика
- remove_red_eye 1825
- thumb_up 25
Ответы и объяснения 1
#include
#include
using namespace std;
void fill_array(int* array, int size, int min,int max)
{
srand(time(NULL));
for(int i = 0;i < size;i++)
{
array[i] = rand() % (max * 2 + 1) + min;
}
}
void print_array(int* array, int size)
{
for(int i = 0;i < size;i++)
{
cout << array[i] << "\t";
}
cout << endl;
}
int get_count_of(bool (*predicate)(int),int *array, int size)
{
int count = 0;
for(int i = 0;i < size; i++)
{
if(predicate(array[i]))
{
count++;
}
}
return count;
}
void sort_array(int* array, int size)
{
for(int i = 0; i < size; i++)
{
for(int j = 0;j { if(array[j] < array[j + 1]) { swap(array[j],array[j + 1]); } } } } int main(int argc, char** argv) { int array_size = 15; int* array = new int[array_size];//Создать массив fill_array(array,array_size,-10,10);//Заполнить его случайными значениями print_array(array,array_size);//Вывести массив на экран sort_array(array,array_size);//Отсортировать его int negative_numbers_count = get_count_of([](int number){ return number < 0; }, array,array_size); //Количество отрицательных элементов int positive_numbers_count = array_size - negative_numbers_count;//Количество положительных элементов int *positive_numbers = new int[positive_numbers_count];//Массив положительных элементов int *negative_numbers = new int[negative_numbers_count];//Массив отрицательных элементов int *pos_start = positive_numbers;//Указатель на начало массива положительных элементов int *neg_start = negative_numbers;//Указатель на начало массива отрицательных элементов for(int i = 0; i < array_size; i++)//Заполнение массивов { if(i < positive_numbers_count) { (*positive_numbers++) = array[i]; } else { (*negative_numbers++) = array[i]; } } positive_numbers = pos_start;//Возвращаем указатель на место negative_numbers = neg_start;//Возвращаем указатель на место /*Здесь выполняется ваше требование. * Сначала идут положительные числа в порядке убывания. * Потом идут отрицательные числа в порядке убывания.*/ for(int i = 0; i < array_size; i++) { if(i < positive_numbers_count) { array[i] = (*positive_numbers++); } else { array[i] = (*negative_numbers++); } } print_array(array,array_size); //Вывести отсортированный массив /*Освобождаем память*/ delete[] pos_start; delete[] neg_start; delete[] array; }
- 02.12.2017 13:09
- thumb_up 35
Знаете ответ? Поделитесь им!
Есть сомнения?
Не нашли подходящего ответа на вопрос или ответ отсутствует? Воспользуйтесь поиском по сайту, чтобы найти все ответы на похожие вопросы в разделе Информатика.
Трудности с домашними заданиями? Не стесняйтесь попросить о помощи - смело задавайте вопросы!
Информатика — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений.