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

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

Войти
Регистрация
Восстановить пароль
 
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
#1

Cортировка массива. - C++

13.10.2011, 19:33. Просмотров 561. Ответов 10
Метки нет (Все метки)

Доброго вечера. представлен массив ,не четные элементы данного массива нужно поместить в другой массив( на самом деле нужно рассортировать массив так след. образом : четные элементы вначало . нечетные элементы вконец)
. т.е. элементы из массива a[i] сортируются в массив b[ib].
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
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,ib,key ;
    cin >> n;
    int * a, * b;
    srand(time(NULL));
    a = new int [n];
    for (int i=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    }
    for (int i = 0 ,ib=0;i<n;i++){
        switch (key){
            case (a[i]==0)     :b[ib] = a[i], ib= ib+1;break;
            case (a[i]%2 != 0) :b[ib]=a[i] ,ib = ib+1;break;
        } 
        cout << endl << " " << b[ib];
        
    }
  
        return 0;
}
вот мой примерный набросок ,он не рабочий и требует пересмотра. попрошу пояснить как доработать.

Добавлено через 1 минуту
к тому же переменная int key . я поместил ее после switch т.к. без нее подчеркивается красным. что нужно прописывать после switch в скобках?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2011, 19:33     Cортировка массива.
Посмотрите здесь:

ортировка массива студентов по возрасту - C (СИ)
Привет всем, в общем такой вопрос, вот у меня структура студент, проходим динамические структуры.. Я сделал программу, но не могу...

Для массива x(n) определить значение максимального эллемента массива и поменять его с первым элементом массива - Pascal ABC
Для массива x(n) определить значение максимального эллемента массива и поменять его с первым элементом массива

Два исходных массива объединить в один, включив элементы второго массива между K и (K+1) элементами первого массива. - Pascal
Ребят, помогите, пожалуйста, сделать задачи, так как сама в этом ничего не соображаю.. 1. Дан массив из 20 элементов целого типа,...

Из 1-го массива выбирать единицы, из 2-го массива двойки, из 3-го массива тройки, и заносить их в 4-ый массив - Lazarus
Добрый вечер, необходима чья-либо помощь. Нужно написать программку, которая будет из 1-го массива выбирать единицы, из 2-го массива...

Для каждого массива в диалоге ввести размер массива и элементы массива и найти сумму и среднее арифметическое значение для каждого массива - Turbo Pascal
даны 3 различных массива целых чисел(размер каждого не должен превышать 15). Для каждого массива в диалоге ввести размер массива и элементы...

Заданы два массива. Проверить, что максимальный элемент массива A больше максимального элемента массива B - Delphi
Заданы два массива: A={a1, a2, a3, a4}, B={b1, b2…..b6}. Переменной S присвоить значение –1, если максимальный элемент массива A больше...

инициализация массива, вывод массива и обработка массива должны быть реализованы с помощью функций. - Visual C++
1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы. 2 У...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.10.2011, 19:39     Cортировка массива. #2
Замени switch на два if'a. Со switch'ем такой код не заработает.
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
13.10.2011, 19:52  [ТС]     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
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,ib ;
    cin >> n;
    int * a, * b;
    srand(time(NULL));
    a = new int [n];
    for (int i=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    }
    for (int i = 0 ,ib=0;i<n;i++){
       if (a[i]==0) b[ib] = a[i];
       if (a[i]%2 != 0) b[ib]=a[i] , ib= ib+1 ;
       if (a[i]%2 == 0) b[ib]=a[i] , ib= ib+1 ;
        cout << endl << " " << b[ib];
    }
  
        return 0;
}
Но тут возникает вопрос относительно элементра : 0 , если дописать break после первого if. завершится цикл.
если же не прописывать break , элемент 0 пройдет по всем трем if/
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.10.2011, 19:54     Cортировка массива. #4
Цитата Сообщение от scofielcl Посмотреть сообщение
if (a[i]%2 != 0) b[ib]=a[i] , ib= ib+1 ;
C++
1
if (a[i]%2 != 0) { b[ib]=a[i]; ib= ib+1 ; }
Добавлено через 52 секунды
Цитата Сообщение от scofielcl Посмотреть сообщение
если же не прописывать break
if(...){} else if(...){} else if(...){}
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
13.10.2011, 20:02  [ТС]     Cортировка массива. #5
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
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,ib ;
    cin >> n;
    int  * a, * b;
    srand(time(NULL));
    a = new int [n];
    for (int i=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    }
    for (int i = 0 ,ib=0;i<n;i++){
    if (a[i]%2 == 0) {b[ib]=a[i] , ib= ib+1 ;}
    else if (a[i]%2 != 0) { b[ib]=a[i]; ib= ib+1 ; }
    else if (a[i]%2 != 0) { b[ib]=a[i] , ib= ib+1;}
        cout << endl << " " << b[ib];
    }
  
        return 0;
}
Программа выполняется ,но результата нет.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.10.2011, 20:04     Cортировка массива. #6
Еще бы, вы выводите несуществующие элементы плюс к тому память под массив b кто выделять будет?
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
13.10.2011, 20:29  [ТС]     Cортировка массива. #7
b = new int [ib];
результат. элементы массива а , не записываются в массив б.

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,ib ;
    cin >> n;
    int  * a, * b;
    srand(time(NULL));
    a = new int [n];
    b = new int [ib];
    for (int i=0,ib=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    if (a[i] == 0) {b[ib]=a[i] , ib= ib+1 ;}
    else if (a[i]%2 != 0) { b[ib]=a[i]; ib= ib+1 ; }
    else if (a[i]%2 != 0) { b[ib]=a[i] , ib= ib+1;}
    }
  
        return 0;
}
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.10.2011, 20:29     Cортировка массива. #8
Цитата Сообщение от scofielcl Посмотреть сообщение
b = new int [ib];
результат. элементы массива а , не записываются в массив б.
Я же вам написал, что вы выводите несуществующие элементы
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
13.10.2011, 21:02  [ТС]     Cортировка массива. #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,m,ib ;
    cin >> n;
    m = n;
    int  * a, * b;
    srand(time(NULL));
    a = new int [n];
    b = new int [m];
    for (int i=0,ib=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    if (a[i] == 0) {b[ib]=a[i] , ib= ib+1 ;}
    else if (a[i]%2 != 0) { b[ib]=a[i]; ib= ib+1 ; }
    else if (a[i]%2 != 0) { b[ib]=a[i] , ib= ib+1;}
    cout << " | " << b[ib]<<" | ";
    }
        return 0;
}
исправил несколько недоработок. но результат то же , как он выводит не сущ-их элементы ,им же присваиваются значения из массива а.

Добавлено через 13 минут
Для простоты .
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,m,ib ;
    cin >> n;
    m = n;
    int  * a ;
    srand(time(NULL));
    a = new int [n];
    int * b = new int [m];
    for (int i=0,ib=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    b[ib] = a[i];
    ib = ib+1;
    cout << " | " << b[ib]<<" | ";
    }
        return 0;
}
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
13.10.2011, 21:26  [ТС]     Cортировка массива. #10
пойму в чем ошибка , отпишусь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2011, 21:32     Cортировка массива.
Еще ссылки по теме:

Дано 2 массива по 20.Наибольший элемент первого массива, заменить наименьшим элементом второго массива - Java SE
Дано 2 массива по 20.Наибольший элемент первого массива, заменить наименьшим элементом второго массива. Кто сможет решить заранее...

Определить количество положительных элементов массива. Элементы массива задаются датчиком случайных чисел (размерность массива произвольна) - Turbo Pascal
Определить количество положительных элементов массива. Элементы массива задаются датчиком случайных чисел (размерность массива произвольна)

Из массива размером 10, сформировать два массива размера 5, включая в первый массив четные элементы исх. массива, а во второй - нечетные - C#
Из массива размером 10, сформировать два массива размера 5, включая в первый массив четные элементы исх. массива, а во второй - нечетные

Создать два массива. Вычислить количество тех элементов каждого массива, для которых выполняется неравенство: 2<элемент массива<10 - C++
помогите,пожалуйста! есть вот такие задания...ОЧЕНЬ надо на завтра... Задача 4. Определить два одномерных массива А(19) и В(16);...

Описать функцию, которая находит максимальный элемент массива, из всех парных элементов массива, и использовать ее для некоторого заданного массива - PHP
Помогите зделать программы на РНР, буду очень благодарным. 1.Описать функцию, которая находит максимальный элемент массива, из всех...


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

Или воспользуйтесь поиском по форуму:
@r!er
2 / 2 / 1
Регистрация: 15.09.2011
Сообщений: 25
13.10.2011, 21:32     Cортировка массива. #11
Такой вариант, но используется только один массив:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void sort(int* m, const int n)
{
 int i, j, temp, s=0;
 for(i=1; i<n; i++)
 {
  j=i;
  while(j>0 && !(m[j-1]%2) && m[j]%2)
  {
   temp=m[j-1];
   m[j-1]=m[j];
   m[j]=temp;
   j--;
   s++;
  }
 }
 cout<<"Êîëè÷åñòâî ГЁГІГҐГ°Г*öèé ñîðòèðîâêè: "<<s<<endl<<endl;
}
Yandex
Объявления
13.10.2011, 21:32     Cортировка массива.
Ответ Создать тему
Опции темы

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