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

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

Войти
Регистрация
Восстановить пароль
 
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
#1

Отсортировать массив - C++

03.11.2010, 18:57. Просмотров 800. Ответов 10
Метки нет (Все метки)

Задан символьный массив размера N. Отсортировать массив так, что бы
сначала в нем в алфавитном порядке шли согласные буквы латинского
алфавита, а затем остальные элементы, порядок которых не меняется.
Пример: a d f e w h g u t b l o → b d f g h l t w a e u o

по-моему у меня где-то в проге происходит зацикливание
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <stdlib.h>
 
#define swap(a,b) {char tmp;tmp=a;a=b;b=tmp;} 
 
bool check_1(char z) //ïðîâåðêГ* Г*Г* ГЈГ«Г*Г±Г*îñòü 
{
    char *x=(char*)calloc(6,sizeof(char));
    
    x[0]='a';
    x[1]='e';
    x[2]='i';
    x[3]='o';
    x[4]='u';
    x[5]='y';
    
    //ïîèñê ýëåìåГ*ГІГ* z Гў Г¬Г*Г±Г±ГЁГўГҐ x
    bool k=false;
    int i=0;
    do
    {
     if (x[i]==z)
      k=true;
      else
      i++;
    }
    while (i>6||k==true);
        
    free(x);
}
 
bool check_2(char z1) //ïðîâåðêГ* Г*Г* ÷èñëî
{
    char *y=(char*)calloc(10,sizeof(char));
 
    y[0]='0';
    y[1]='1';
    y[2]='2';
    y[3]='3';
    y[4]='4';
    y[5]='5';
    y[6]='6';
    y[7]='7';
    y[8]='8';
    y[9]='9';
    
    //ïîèñê ýëåìåГ*ГІГ* z1 Гў Г¬Г*Г±Г±ГЁГўГҐ y
    bool k=false;
    int i=0;
    do
    {
     if (y[i]==z1)
      k=true;
      else
      i++;
    }
    while (i>10||k==true);
    
    free(y);
}
 
 
int main()
{
    
    int n;
    cout<<"Insert number of symbols"<<endl;
    cin>>n;
    
    //ñîçäГ*Г*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ* ñèìâîëîâ
    char *s=(char*)calloc(n,sizeof(char));
    cout<<"Insert symbols"<<endl;
    for(int i=0;i<n;i++)
    cin>>s[i];
    
    //ïåðâîГ*Г*Г·Г*ëüГ*ûé Г¬Г*Г±Г±ГЁГў
    for(int i=0;i<n;i++)
    cout<<s[i]<<" ";
    
    cout<<endl;
    
    for(int i=0;i<n-1;i++)
    if ((check_1(s[i]))||(check_2(s[i]))&&(!check_1(s[i+1]))&&(!check_2(s[i+1])))
      swap(s[i],s[i+1]);
      
    //êîë-ГўГ® ГЎГіГЄГў ñîãëГ*Г±Г*ûõ
    int k1=0;
    for(int i=0;i<n;i++)
    if ((!check_1(s[i]))&&(!check_2(s[i])))
    k1++;
 
      
    //ïåðåñòГ*Г*îâêГ* ГЇГ® Г*ëôГ*ГўГЁГІГі
    for(int i=0;i<=k1-1;i++)
    if (s[i]>s[i+1]) swap(s[i],s[i+1]);
    
    //âûâîä Г*îâîãî Г¬Г*Г±Г±ГЁГўГ*
    for(int i=0;i<n;i++)
    cout<<s[i]<<" ";
     
    free(s);
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2010, 18:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отсортировать массив (C++):

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

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать - C++
Добрый Вечер! Написал первую часть программы по этому заданию&quot;Ввести массив А. В массив В перенести все элементы массива А, стоящие правее...

Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька - C++
всем привет. народ помогите с прогой, конкретно с функцией sort (65 строка), она должна двухмерный массив перевести построчно в одномерный...

Создать одномерный массив, заполнить его случайными значениями, отсортировать массив по убыванию - C++
создать одномерный массив, заполнить его случайными значениями, отсортировать массив по убыванию. получилось вот что: #include...

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

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

10
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.11.2010, 18:58 #2
Artishok, За такое
C++
1
char*x=(char*)calloc(6,sizeof(char));
в С++ бьют ногами...
0
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 19:15  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Artishok, За такое
C++
1
char*x=(char*)calloc(6,sizeof(char));
в С++ бьют ногами...

массив символов.ну можно было память не выделять и принять за строку конечно....
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.11.2010, 19:16 #4
Artishok, В С++ есть new/new[]. И delete/delete[] для очистки
0
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 19:18  [ТС] #5
ну в данном случае это несущественно.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.11.2010, 19:37 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ага?

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
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    const std::string cons="bcdfghjklmnpqrstvwxz";
    std::string Str;
    std::string NewStr;
    std::getline(std::cin, Str);
    for(std::string::iterator Iter=Str.begin(); Iter!=Str.end();)
    {
         if(cons.find(*Iter)!=std::string::npos)
         {
              char c=*Iter;
              NewStr.push_back(c);
              Str.erase(Iter);
         }
         else
              ++Iter;
    }
    std::sort(NewStr.begin(), NewStr.end());
    int numb=NewStr.size();
    std::cout<<"Numb of cons: "<< numb <<'\n';
    NewStr+=Str;
    Str.clear();
    Str=NewStr;
    std::cout<<"Sorted string\n"<< Str <<'\n';
    return 0;
}
1
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 19:46  [ТС] #7
точняк!не подумал создать строку из согласных.тогда это уменьшит код и упростит
0
KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
03.11.2010, 20:25 #8
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
#include <iostream>
#include <string>
#include <algorithm>
 
bool IsConsonants(char a)
{
    static const std::string consonants("bcdfghjklmnpqrstvwxz");
    return consonants.find_first_of(a) != std::string::npos;
}
 
int main()
{
    std::string array;
    std::string::iterator part;
 
    std::cout << "Input array: ";
    std::cin >> array;
 
    part = std::stable_partition(array.begin(), array.end(), IsConsonants);
    if (part != array.end())
        std::sort(array.begin(), part);
 
    std::cout << "Array: " << array << std::endl;
 
    std::cin.get();
    std::cin.get();
 
    return 0;
}
2
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 22:33  [ТС] #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
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
 
#define swap(a,b) {char tmp;tmp=a;a=b;b=tmp;} 
 
bool check(char c)
{
    char *s="bcdfghjklmnpqrstvwxz";
    bool k=false;
    for(int i=0;i<strlen(s);i++)
    if (c==s[i])
    {
     k=true;
     break;
    };
    if (k)
     return true;
     else
     return false;
}
      
     
 
 
int main()
{
    
    int n;
    cout<<"Insert number of symbols"<<endl;
    cin>>n;
    
    //ñîçäГ*Г*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ* ñèìâîëîâ
    char *s1=new char [n];
    cout<<"Insert symbols"<<endl;
    for(int i=0;i<n;i++)
    cin>>s1[i];
    
    //ïåðâîГ*Г*Г·Г*ëüГ*ûé Г¬Г*Г±Г±ГЁГў
    for(int i=0;i<n;i++)
    cout<<s1[i]<<" ";
    
    cout<<endl;
    
    //ïðîâåðêГ* ГЁ ïåðåñòГ*Г*îâêГ* ñèìâîëîâ
    for(int i=0;i<n-1;i++)
    if (!check(s1[i])&&check(s1[i+1]))
    swap(s1[i],s1[i+1]);
      
    //êîë-ГўГ® ГЎГіГЄГў ñîãëГ*Г±Г*ûõ
    int k1=0;
    for(int i=0;i<n;i++)
    if (check(s1[i]))
    k1++;
 
      
    //ïåðåñòГ*Г*îâêГ* ГЇГ® Г*ëôГ*ГўГЁГІГі
    for(int i=0;i<=k1;i++)
    if (s1[i]>s1[i+1]) swap(s1[i],s1[i+1]);
    
    //âûâîä Г*îâîãî Г¬Г*Г±Г±ГЁГўГ*
    for(int i=0;i<n;i++)
    cout<<s1[i]<<" ";
     
    delete [] s1;
}
теперь переставляет только первых несколько элементов а остальные элементы в массиве остаются неизменными
0
TheMachinist
243 / 175 / 15
Регистрация: 14.06.2010
Сообщений: 422
03.11.2010, 23:10 #10
Я немного изменил твой цикл, так работает правильно:
C++
1
2
3
4
5
6
7
//проверка и перестановка символов
        for(int i=0;i<n-1;i++)
        {
            if (!check(s1[i])&&check(s1[i+1])){
        swap(s1[i],s1[i+1]);
        i = -1; }
        }
0
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 23:52  [ТС] #11
ввел wertybones - получил rtbnsewyoe->неверно

Добавлено через 3 минуты
нашел ошибку.все.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2010, 23:52
Привет! Вот еще темы с ответами:

Массив: отсортировать массив в порядке возрастания и найти количество соседних пар элементов отличающихся между собой - C++
Дано массив целых чисел 20, отсортировать его в порядке возрастания и найти количество соседних пар элементов отличающихся между собой ...

Вычислить y= k14− 18 k для 6 значений k, вводимых с клавиатуры. Результат вычислений записать в массив. Полученный массив отсортировать по возрастанию - C++
#include&lt;iostream&gt; #include&lt;math.h&gt; #include&lt;iomanip&gt; using namespace std; double const n=20; int vvod( double y, int n) { ...

Отсортировать массив - C++
Народ помогите с лабой. Я уже на пределе, препод совсем озверел. Вы моя последняя надежда.) Дал такое задание: Программа получает от...

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


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
03.11.2010, 23:52
Ответ Создать тему
Опции темы

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