Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
HenryL
2 / 2 / 0
Регистрация: 14.04.2010
Сообщений: 32
#1

C++, одномерный массив, сортировка. - C++

20.04.2010, 14:38. Просмотров 1169. Ответов 11
Метки нет (Все метки)

Приветствую!
Подскажите, как сформировать массивы X и Y в задании:

Заданы массив {bi}; i=1,n. Подсчитать количество нулевых элементов массива. Сформировать новые массивы – X,Y, содержащие ранжированные элементы исходного массива:
X – 1-ый элемент – самый большой, последний элемент – второй с наибольший элемент, 3-й элемент – третий наибольший, предпоследний элемент – четвертый наибольший и т.д.
Y – в центр ставиться самый большой элемент, от него «расходятся» в разные стороны меньшие элементы


Сортировка массива всегда давалась мне с трудом, а тут, как мне кажется, не совсем стандартная задача поставлена.
Буду благодарен за подсказку
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2010, 14:38     C++, одномерный массив, сортировка.
Посмотрите здесь:

Одномерный массив, сортировка - C++
Вот задание. Надеюсь на помощь. Вот что у самого получилось... Что делать дальше? ...

Одномерный массив.замна и сортировка. - C++
В одномерном массиве, состоящем из n вещественных элементов. Заменить все отрицательные элементы массива их квадратами и упорядочить...

Одномерный массив - сортировка по убыванию - C++
написать программу, которая методом обмена сортирует по убыванию введенный с клавиатуры одномерный массив.

Задача на одномерный массив (сортировка) - C++
Помоги тебе решить задачу, пожалуйста. Дан одномерный массив из N элементов. Не заводя дополнительного массива отсортировать данный...

Одномерный массив. Вычисление произведения элементов. Сортировка. - C++
В одномерном массиве, состоящем из n вещественных элементов, вычислить: • произведение элементов массива с чётными номерами; ...

Целочисленный одномерный массив, сортировка по убыванию и возрастанию - C++
Написать программу, позволяющую сортировать введенный пользовате-лем целочисленный одномерный массив по убыванию или по возраста-нию (в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.04.2010, 16:22     C++, одномерный массив, сортировка. #2
Предлагаю так:
1. Исходный массив сортируем по убыванию.
2. Создаем массив X, заводим две переменные: i_l=0, i_r=n-1. Затем запускаем цикл for(i=0; i<n; i++)
если i четное, то элементу X[i_l] присваиваем значение элемента исходного массива с индексом i и увеличиваем i_l на единицу, если i нечетное, то элементу X[i_r] присваиваем значение элемента исходного массива с индексом i и уменьшаем i_r на единицу.
С массивом Y немного подумайте и тоже получится.
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
20.04.2010, 16:43     C++, одномерный массив, сортировка. #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<algorithm>
 
#define SZ 9
int a[SZ]={1,12,3,41,15,64,7,8,9};
int b[SZ], c[SZ];
int e = 0,i = SZ-1;
 
sort(a,a+SZ);//сортируем... по возрастанию :)
do
{
    b[e] = a[i--];
    b[SZ - 1 - e] = a[i--];
    e++;
 
} while(e < SZ/2);
if(SZ%2) b[SZ/2] = a[0]; //1
e = 0; i = SZ-1;
if(SZ%2) c[SZ/2] = a[i];
do{
    c[SZ/2+e] = a[i--];
    if(e)c[SZ/2-e] = a[i--];
    e++;
 
}while(e < SZ/2);
if(SZ%2){c[SZ-1] = a[i];c[0]=a[0];}else c[0] = a[0];//2
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
20.04.2010, 16:54     C++, одномерный массив, сортировка. #4
Цитата Сообщение от HenryL Посмотреть сообщение
1-ый элемент – самый большой, последний элемент – второй с наибольший элемент, 3-й элемент – третий наибольший, предпоследний элемент – четвертый наибольший и т.д.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>
 
int main(){
    const int SIZE = 10;
    int arr[SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    std::cout << "Array: ";
    std::copy(arr, arr + SIZE, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    int *l, *r, *p;
    bool left;
    std::set<int, std::greater<int> > s;
    for ( int i = 0; i < SIZE; ++i )
        s.insert(arr[i]);
    l = arr;
    r = arr + SIZE - 1;
    left = true;
    while ( !s.empty() ){
        if ( left )
            p = l++;
        else
            p = r--;
        left = !left;
        *p = *s.begin();
        s.erase(s.begin());
    }
    std::cout << "Result: ";
    std::copy(arr, arr + SIZE, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    return 0;
}
если
C++
1
std::set<int, std::greater<int> > s;
заменить на
C++
1
std::set<int, std::less<int> > s;
получится
Цитата Сообщение от HenryL Посмотреть сообщение
в центр ставиться самый большой элемент, от него «расходятся» в разные стороны меньшие элементы
HenryL
2 / 2 / 0
Регистрация: 14.04.2010
Сообщений: 32
20.04.2010, 17:12  [ТС]     C++, одномерный массив, сортировка. #5
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Предлагаю так:
1. Исходный массив сортируем по убыванию.
2. Создаем массив X, заводим две переменные: i_l=0, i_r=n-1. Затем запускаем цикл for(i=0; i<n; i++)
если i четное, то элементу X[i_l] присваиваем значение элемента исходного массива с индексом i и увеличиваем i_l на единицу, если i нечетное, то элементу X[i_r] присваиваем значение элемента исходного массива с индексом i и уменьшаем i_r на единицу.
С массивом Y немного подумайте и тоже получится.
спасибо, попробую этот алгоритм

Цитата Сообщение от uggway Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<algorithm>
 
#define SZ 9
int a[SZ]={1,12,3,41,15,64,7,8,9};
int b[SZ], c[SZ];
int e = 0,i = SZ-1;
 
sort(a,a+SZ);//сортируем... по возрастанию :)
do
{
    b[e] = a[i--];
    b[SZ - 1 - e] = a[i--];
    e++;
 
} while(e < SZ/2);
if(SZ%2) b[SZ/2] = a[0]; //1
e = 0; i = SZ-1;
if(SZ%2) c[SZ/2] = a[i];
do{
    c[SZ/2+e] = a[i--];
    if(e)c[SZ/2-e] = a[i--];
    e++;
 
}while(e < SZ/2);
if(SZ%2){c[SZ-1] = a[i];c[0]=a[0];}else c[0] = a[0];//2
сложно написано, не все понял =)
Наш Visual Studio не компилирует.

Цитата Сообщение от easybudda Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>
 
int main(){
    const int SIZE = 10;
    int arr[SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    std::cout << "Array: ";
    std::copy(arr, arr + SIZE, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    int *l, *r, *p;
    bool left;
    std::set<int, std::greater<int> > s;
    for ( int i = 0; i < SIZE; ++i )
        s.insert(arr[i]);
    l = arr;
    r = arr + SIZE - 1;
    left = true;
    while ( !s.empty() ){
        if ( left )
            p = l++;
        else
            p = r--;
        left = !left;
        *p = *s.begin();
        s.erase(s.begin());
    }
    std::cout << "Result: ";
    std::copy(arr, arr + SIZE, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    return 0;
}
если
C++
1
std::set<int, std::greater<int> > s;
заменить на
C++
1
std::set<int, std::less<int> > s;
получится
Спасибо, сейчас попробую разобраться. Правда некоторые операторы мне еще не известны

Добавлено через 7 минут
Я на начальном этапе изучения cpp, поэтому, по возможности, как можно проще, пожалуйста.
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.04.2010, 19:56     C++, одномерный массив, сортировка. #6
Цитата Сообщение от HenryL Посмотреть сообщение
Спасибо, сейчас попробую разобраться. Правда некоторые операторы мне еще не известны
Тогда лучше не пытайтесь пока разбираться с тем что написал easybudda. Оставьте изучение STL на потом. Попытайтесь написать то что нужно языком который Вам знаком.
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
20.04.2010, 20:12     C++, одномерный массив, сортировка. #7
valeriikozlov, а по-моему зря... Все эти "хитроумные" конструкции STL только на первый взгляд на марсианский язык похожи. Если в них разобраться, приложив при этом совсем небольшое усилие, многие задачи решать станет гораздо проще...
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.04.2010, 20:48     C++, одномерный массив, сортировка. #8
easybudda, Как я убедился, есть задачи которые можно решить с использованием STL, но невозможно решить без использования STL. Но если рассматривать глубже, все файлы, написанные для обеспечения возможности использования STL, написаны на простом языке C++. О чем это говорит. - Все что написано с использованием STL, можно писать и без использования STL!!!
Но хочу заметить что я ни в коем случае не против STL, а наоборот я только за использование этой библиотеки. Но в данном случае нужно учитывать уровень того кто задал вопрос.
easybudda
20.04.2010, 22:04
  #9

Не по теме:

Цитата Сообщение от valeriikozlov Посмотреть сообщение
Все что написано с использованием STL, можно писать и без использования STL!!!
Да можно и на велосипеде без седла ездить.
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Но в данном случае нужно учитывать уровень того кто задал вопрос.
Так пускай сразу в правильном направлении развивается...

uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
21.04.2010, 09:39     C++, одномерный массив, сортировка. #10
HenryL, а что говорит компилятор?
Там написан только код сортировки.
SZ - размер массива
a - входной массив
b - выходной массив по 1 пункту задания
c - выходной массив по 2 пункту

Все остальное сам добавь т.е. main и т.д.
HenryL
2 / 2 / 0
Регистрация: 14.04.2010
Сообщений: 32
22.04.2010, 16:46  [ТС]     C++, одномерный массив, сортировка. #11
Цитата Сообщение от uggway Посмотреть сообщение
HenryL, а что говорит компилятор?
Там написан только код сортировки.
SZ - размер массива
a - входной массив
b - выходной массив по 1 пункту задания
c - выходной массив по 2 пункту

Все остальное сам добавь т.е. main и т.д.
Компилятор много чего говорит, не смотря на то, что все заголовки и прочее я сразу добавил)
Какой у вас компилятор?

Сейчас пытаюсь по совету valeriikozlov сформировать Х
C++
1
2
3
4
5
6
7
8
9
10
double *X = new double [n];
for(int i=1;i<n;i++)
{if (i % 2 ==0)
{for (i_l=i;i_l<n;i_l++)
X[i_l]=b[i];}
else {for (i_r=n-1;i_r<n;i_r--)
X[i_r]=b[i];}
// что дальше делать - не знаю
// ...
cout << X[i] << "";
не получается...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2010, 19:10     C++, одномерный массив, сортировка.
Еще ссылки по теме:

Одномерный массив. Сортировка и запись массива в другой файл - C++
По заданию нужно создать файл, содержащий десять цифр. Считать значения этих цифр в массив. Отсортировать цифры по возрастанию и записать...

Одномерный массив - C++
Ребят помогите плиз решить одномерный и двумернй массив..на языке Си(не СИ++) 1.В целочисленном массиве после каждых 3-х отрицательных...

одномерный массив - C++
задание: Нахождение экстремальных элементов в одномерном массиве. условие: Определить номер наибольшего элемента массива А и наибольшего...

Одномерный массив - C++
Дан одномерный массив А. НАйти номер последнего отрицательного элемента. Помогите плз :Р


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
22.04.2010, 19:10     C++, одномерный массив, сортировка. #12
У меня C++Builder, но это не важно в данном случае...
Вот полностью рабочий код...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//---------------------------------------------------------------------------
 #include <algorithm>
 #include <iostream>
 
 using namespace std;
 
//---------------------------------------------------------------------------
#define SZ 9
int a[SZ]={1,12,3,41,15,64,7,8,9};
int b[SZ], c[SZ];
int e = 0,i = SZ-1;
void out(int *m)
{
    for(int t=0;t<SZ;t++){
        cout.width(3);
        cout<<m[t]<<" ";
    }
    cout<<endl<<endl;
 
}
 
int main()
{
    out(a);
    sort(a,a+SZ);//сортируем... по возрастанию :)
    out(a);
    do
    {
            b[e] = a[i--];
            b[SZ - 1 - e] = a[i--];
            e++;
 
    } while(e < SZ/2);
    if(SZ%2) b[SZ/2] = a[0]; //1
    out(b);
    e = 0; i = SZ-1;
    if(SZ%2) c[SZ/2] = a[i];
    do{
            c[SZ/2+e] = a[i--];
            if(e)c[SZ/2-e] = a[i--];
            e++;
 
    }while(e < SZ/2);
    if(SZ%2){c[SZ-1] = a[i];c[0]=a[0];}else c[0] = a[0];//2
    out(c);
    cin.get();
    return 0;
}
//---------------------------------------------------------------------------
Yandex
Объявления
22.04.2010, 19:10     C++, одномерный массив, сортировка.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru