Есть задача: В одномерном массиве, состоящем из n вещественных элементов, вычислить:
Я сделал все 3 пункта, но работает все кроме упорядовачивания, не могли бы подсказать, в чем проблема?
#include "pch.h"
#include <iostream> //ввод, вывод cout<< cin>>
#include <iomanip> //расшириные функции <iostream>
#include <cstdlib> //преобразование типов
#include <math.h> //стандартные функции
#include <ctime> //пауза
#include <locale.h> //русский язык
using namespace std;
int main() {
setlocale(LC_ALL, "Russian");
int i, n, imin = 0, a = 0, b = 0;
double sum = 0, proizv = 1, min = 0, c = 0;
double sort = 1;
cout << ("Введите количество эллементов массива: ");
cin >> n; //ввод размерности массива
cout << ("Введите элементы массива:") << endl << endl;
double* p = new double[n]; // объявление массива
double* p1 = new double[n]; //объявление массива четных позиций
double* p2 = new double[n]; //объявление массива нечетных позиций
for (i = 0; i < n; i++)
cin >> p[i]; //ввод массива
for (i = 0; i < n; i++)
if (p[i] > 0) {
proizv *= p[i];//произведение положительных элементов
}
cout << ("Произведение положительных элементов: ") << proizv << endl; //вывод
min = p[0]; //берем 1 элемент за минимальный
for (i = 0; i < n; i++) //поиск
if (p[i] < min) //минимального
{ //элемента
min = p[i];
imin = i; //номер мин элемента
}
for (i = 0; i < imin; i++)sum += p[i];//суммирование
cout << ("Сумма элементов расположенных до минимального: ") << sum << endl;//вывод суммы
cout << ("Преобразованный массив:") << endl;
for (i = 0; i < n; i++) { //поиск элементов четных позиций
if ((i % 2) == false) //деление на 2
{
p1[a] = p[i];
a++;
}
if (i % 2) //поиск элементов нечетных позиций
{
p2[b] = p[i];
}
}
while (sort) {
sort = 0;
for (i = 0; i < a - 1; i++) //сортировка четных
{
if (p1[i] > p1[i + 1]) {
c = p1[i];
p1[i] = p1[i + 1];
p1[i + 1] = c;
sort = 1;
}
}
sort = 0;
for (i = 0; i < b - 1; i++) //сортировка нечетных
{
if (p2[i] > p2[i + 1]) {
c = p2[i];
p2[i] = p2[i + 1];
p2[i + 1] = c;
sort = 1;
}
}
}
for (i = 0; i < a; i++)cout << p1[i] << ' ';//вывод отсортированных четных элементов
cout << endl;
for (i = 0; i < b; i++)cout << p2[i] << ' ';//вывод отсортированных нечетных элементов
system("pause");
return 0;
}
В коде, где вы делите массив на четные и нечетные элементы, вы забыли увеличивать счетчик b
if (i % 2)
{
p2[b] = p[i];
b++; // !!
}
Кстати эти два условия можно объединить в следующую конструкцию:
if (i % 2)
{
// нечетная позиция
// ...
}
else
{
// четная позиция
// ...
}
Этот способ избавит от лишнего условия и улучшит читаемость кода.
Кроме прочего, вы забываете удалять выделенную динамически память. Использование выражений new
/new[]
требует зеркального использования выражений delete
/delete[]
.
Добавьте в конце функции main
:
delete[] p;
delete[] p1;
delete[] p2;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Похоже, я не совсем понимаю как делать правильное выравнивание при передаче uniform-буферов в шейдер
Всем доброго времени суток! Хотел бы попросить вас о помощиНе могу понять, как сделать следующее задание