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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
#1

Написать программу для сортировки методом прямых включений латинских букв по алфавиту - C++

22.01.2014, 01:29. Просмотров 1396. Ответов 31
Метки нет (Все метки)

Здравствуйте!
Помогите написать программу для сортировки методом прямых включений латинских букв по алфавиту.
Сортировка простыми включениями и метод прямых включений это одно и тоже?
Есть вот такая программа:
C++ (Qt)
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
#include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    int arr[8] = {27, 412, 71, 81, 59, 14, 273, 87},i,j;
 
    for (j=1;j<8;j++){
        if (arr[j]< arr[j-1]) {
            //Что бы значение j мы не меняли а работали с i
            i=j;
            //Меняем местами пока не найдем нужное место
            do{
                swap(arr[i],arr[i-1]);
                i--;
                //защита от выхода за пределы массива
                if (i == 0) break;
            }
            while (arr[i]< arr[i-1]) ;
        }
        for (i=0;i<8;i++)
            cout << arr[i]<< ' ';
        cout << '\n';
    }
    getch();
return 0;
}
Только как сделать что бы сортировать именно Алфавит?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2014, 01:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать программу для сортировки методом прямых включений латинских букв по алфавиту (C++):

Написать программу, сортирующую по алфавиту строку латинских букв - C++
Помогите 3. Написать программу, сортирующую по алфавиту строку латинских букв.

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

Написать программу сортировки методом простых вставок - C++
Написать программу сортировки методом простых вставок элементов массива, имеющих четные индексы.

Написать программу для сортировки - C++
Дан целочисленный массив, состоящий из N элементов. Число N и элементы массива вводятся с клавиатуры. 1. Написать программу для...

Написать программу для сортировки массива по возрастанию - C++
Написать программу в с++: Дан массив целых чисел. Написать программу для сортировки массива по возрастанию.

Написать программу для сортировки массива заданного с клавиатуры! - C++
Размерность массива задаем с клавиатуры, элементы массива тоже задаем с клавиатуры. Элементы массива это буквы английского алфавита....

31
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
25.01.2014, 16:01 #16
У меня как бы по этому алгоритму и написано (в первичном осмотре)
0
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
25.01.2014, 18:30  [ТС] #17
Цитата Сообщение от MrGluck Посмотреть сообщение
У меня как бы по этому алгоритму и написано (в первичном осмотре)
Вот в общем пришлось убрать template, чтобы получить более развёрнуто это всё но теперь пишет:
error C2661: print: нет перегруженной функции, принимающей 2 аргументов
и ни чего не сортирует))) печатает две не отсортированные строки и всё, где накосячил интересно)))

C++ (Qt)
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
#include <iostream>//для функции ввода/вывода потока
#include <cstring>//функция для манипуляции со строками и массивами
 
using namespace std;
void sortByDirectInclusion (int *I, const int size)
{
    for (int J = 2; J < size; J++) // цикл проходов
        {
        int K = I[J];
        int L = J-1;
        while ( L >= 1 && I[J] > K)// поиск места элемента в готовой последовательности
        {
           I[L + 1] = I[L];// сдвигаем элемент направо, пока не дошли
            L--;
        }
            I[L + 1] = K;// место найдено, вставить элемент 
        }
}
 void sortByDirectInclusion (char *I, const int size)
{
    for (int J = 2; J < size; J++) // цикл проходов
        {
        int K = I[J];
        int L = J-1;
        while ( L >= 1 && I[J] > K)// поиск места элемента в готовой последовательности
        {
           I[L + 1] = I[L];// сдвигаем элемент направо, пока не дошли
                    L--;
        }
        I[L + 1] = K;// место найдено, вставить элемент     
    }
}
void print(const int *I, int J, const int size)
{
    for (int J = 1; J < size; J++)
            cout << I[J];
    cout << std::endl;
}
void print(const char *I, int J, const int size)
{
    for (int J = 1; J < size; J++)
        cout << I[J];
    cout << std::endl;
}
int main()
{
    char I[] = "azhdasasqgjhdakhmkjbhlpox";
    const int N = strlen(I);// определяем размер массива
    print(I, N);  // печать неотсортированного массива
    sortByDirectInclusion(I, N);
    print(I, N); // печать отсортированного массива
    cin.get();//задержка экрана
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
25.01.2014, 18:33 #18
А зачем вы из моего print сделали функцию с 3-мя параметрами? J лишний
0
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
25.01.2014, 18:38  [ТС] #19
Цитата Сообщение от MrGluck Посмотреть сообщение
А зачем вы из моего print сделали функцию с 3-мя параметрами? J лишний
а всё убрал я int J, но всё равно сортировку не какую не делает
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
25.01.2014, 18:53 #20
Зачем вам вдруг понадобилось этот псевдокод "встраивать" в рабочий код? Я же вам сообщил, что алгоритм итак там тот же.
Отсюда и проблемы лезут.
Элементы массива начинают индексироваться с 0, а не 1. Поэтому для всех границ диапазона из псевдокода отнимайте по 1.
0
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
25.01.2014, 20:10  [ТС] #21
Не моё желание встраивать псевдокод в рабочий )))
Но как сделать чтобы работало через While как здесь если можно конечно???

lgorithm SIS ( Сортировка Прямым включением). Отсортировать на старом месте последовательность целых чисел I(1), I(2), . . . ,I (N) в порядке возрастания.
Шаг 1. [ Основная итерация ]
For J← 2 to N do through шаг 4 od ; and STOP.
Шаг 2.[ Выбор следующего целого ] Set K← I(J); and L←J−1.
Шаг 3. [ Сравнение с отсортированного целыми ] While K<I(L)
AND L≥1 do set I (L+1) ←I(L); and L←L−1 od.
Шаг 4. [ Включение ] Set I(L+1)←K.
0
iRomul
159 / 100 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
25.01.2014, 22:46 #22
Linker1989, вот вам вариант с while:
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
#include <iostream>
 
using namespace std;
 
void swap(char& a, char& b) {
 
    int c = a;
    a = b;
    b = c;
 
}
 
float main() {
 
    const size_t ARRAY_SIZE = 5;
 
    char char_array[ARRAY_SIZE] = {'Z', 'Y', 'B', 'C', 'A'};
 
    int i = 0;
 
    for(int j = 1; j < ARRAY_SIZE; j++) {
 
        if(char_array[j] < char_array[j-1]) {
 
            i = j;
            
            do {
 
                swap(char_array[i], char_array[i-1]);
                i--;
                if(!i) break;
 
            } while(char_array[i] < char_array[i-1]);
 
        } //if
 
    } //for
 
    for (i = 0; i < ARRAY_SIZE; i++)
        cout << char_array[i] << ' ';
 
    cout << endl;
 
    system("pause");
 
    return 0.0;
 
}
Вывод:
A B C Y Z
Для продолжения нажмите любую клавишу . . .
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
27.01.2014, 03:37 #23
Цитата Сообщение от Linker1989 Посмотреть сообщение
Не моё желание встраивать псевдокод в рабочий
Как бы мой код итак отражает этот псевдокод поэтапно, о чем я уже писал выше.
Если хотите названия другие - переименуйте. Ваш while описывает то же, что и мой for, только у меня and записано в качестве постусловия, что ничуть не позволяет заявить о том, что мой код имеет хоть немного другой алгоритм.
0
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
28.01.2014, 21:01  [ТС] #24
Цитата Сообщение от MrGluck Посмотреть сообщение
Как бы мой код итак отражает этот псевдокод поэтапно, о чем я уже писал выше.
Если хотите названия другие - переименуйте. Ваш while описывает то же, что и мой for, только у меня and записано в качестве постусловия, что ничуть не позволяет заявить о том, что мой код имеет хоть немного другой алгоритм.
Согласен, разобрался с вашим кодом смысл понятен.
А требуется теперь настолько элементарная сортировка, чтобы не состояла из подпрограмм а была написана в одном майне.
Есть какие нибудь варианты?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
28.01.2014, 21:08 #25
Цитата Сообщение от Linker1989 Посмотреть сообщение
Есть какие нибудь варианты?
Конечно. Взять тело функций и вставить в место вызова в main
0
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
28.01.2014, 21:32  [ТС] #26
Цитата Сообщение от MrGluck Посмотреть сообщение
Конечно. Взять тело функций и вставить в место вызова в main
А что делть с этой функцией если не использовать template, а делать так:?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void sortByDirectInclusion(int *I, const int size)
{
    for (int J = 1; J < size; J++) /// для каждого элемента массива начиная со второго
    {
        int K = I[J];            /// запоминаем значение очередного элемента
        int L = J - 1;             ///
        for (; L >= 0 && I[L] > K; L--) /// для всех превосходящих по значению элементов перед ним
            I[L + 1] = I[L];            /// осуществляем сдвиг на одну позицию вперед
        I[L + 1] = K;                   /// вставляем элемент в подготовленное для него место
    }
}
 void sortByDirectInclusion(char *I, const int size)
{
    for (int J = 1; J < size; J++) /// для каждого элемента массива начиная со второго
    {
        int K = I[J];            /// запоминаем значение очередного элемента
        int L = J - 1;             ///
        for (; L >= 0 && I[L] > K; L--) /// для всех превосходящих по значению элементов перед ним
            I[L + 1] = I[L];            /// осуществляем сдвиг на одну позицию вперед
        I[L + 1] = K;                   /// вставляем элемент в подготовленное для него место
    }
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
28.01.2014, 21:34 #27
Цитата Сообщение от Linker1989 Посмотреть сообщение
А что делть с этой функцией если не использовать template, а делать так:?
Странный вопрос. Я бы понял, если бы вы спросили когда наоборот: функция шаблонная - и её надо встроить. А тут у вас даже идентификаторы одинаковые. Просто названия подставить где надо и все (по сути названия параметров функции сопоставить с названиями передаваемых аргументов из main).
0
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
28.01.2014, 21:36  [ТС] #28
Цитата Сообщение от MrGluck Посмотреть сообщение
Странный вопрос. Я бы понял, если бы вы спросили когда наоборот: функция шаблонная - и её надо встроить. А тут у вас даже идентификаторы одинаковые. Просто названия подставить где надо и все (по сути названия параметров функции сопоставить с названиями передаваемых аргументов из main).
ну так в майне она один раз вызывается))) как туда записать две функции?:
C++ (Qt)
1
2
3
4
5
6
7
8
9
int main()                               /// главная функция
{
    char I[] = "azhdasasqgjhddsfagbvczxakhmpox"; /// объявляем массив
    const int N = strlen(I);           /// определяем размер массива
     print(I, N); 
    sortByDirectInclusion(I, N);       /// вызываем функцию сортировки включениями
    print(I, N);                       /// выводим результат на экран
 cin.get();                      /// пауза
}
0
iRomul
159 / 100 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
29.01.2014, 00:43 #29
Linker1989, я вам выше приводил код, где алгоритм размещается в теле функции main. Чем он вас не устроил?
0
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
29.01.2014, 00:45  [ТС] #30
Цитата Сообщение от MrGluck Посмотреть сообщение
Странный вопрос. Я бы понял, если бы вы спросили когда наоборот: функция шаблонная - и её надо встроить. А тут у вас даже идентификаторы одинаковые. Просто названия подставить где надо и все (по сути названия параметров функции сопоставить с названиями передаваемых аргументов из main).
В общем вот так она работает:
C++ (Qt)
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 <cstring>  // заголовочный файл для работы со строками
#include <iostream> // ввод/вывод
 using namespace std;
 void sortByDirectInclusion(char I[], const int size)
{
    for (int J = 1; J < size; J++) /// для каждого элемента массива начиная со второго
    {
        int K = I[J];            /// запоминаем значение очередного элемента
        int L = J - 1;             ///
        for (; L >= 0 && I[L] > K; L--) /// для всех превосходящих по значению элементов перед ним
            I[L + 1] = I[L];            /// осуществляем сдвиг на одну позицию вперед
        I[L + 1] = K;                   /// вставляем элемент в подготовленное для него место
    }
for (int J = 0; J < size; J++) /// для каждого элемента массива
  cout << I[J];       /// выводим его на экран
    cout << endl;        /// перевод строки
 }
int main()      /// главная функция
{
    char I[] = "azhdasasqgjhddsfagbvczxakhmpox"; /// объявляем массив
    const int N = strlen(I);           /// определяем размер массива
 
    sortByDirectInclusion(I, N);       /// вызываем функцию сортировки включениями
     cin.get();    /// пауза
}

потом я беру вставляю всё что выше int main вместо " sortByDirectInclusion(I, N);" и ничего не получается:
C++ (Qt)
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 <cstring>  // заголовочный файл для работы со строками
#include <iostream> // ввод/вывод
 using namespace std;
int main(const int size)    /// главная функция
{
    char I[] = "azhdasasqgjhddsfagbvczxakhmpox"; /// объявляем массив
    const int N = strlen(I);           /// определяем размер массива
 
    {
    for (int J = 1; J < size; J++) /// для каждого элемента массива начиная со второго
    {
        int K = I[J];            /// запоминаем значение очередного элемента
        int L = J - 1;             ///
        for (; L >= 0 && I[L] > K; L--) /// для всех превосходящих по значению элементов перед ним
            I[L + 1] = I[L];            /// осуществляем сдвиг на одну позицию вперед
        I[L + 1] = K;                   /// вставляем элемент в подготовленное для него место
    }
for (int J = 0; J < size; J++) /// для каждого элемента массива
  cout << I[J];       /// выводим его на экран
    cout << endl;        /// перевод строки
 }
    
 cin.get(); /// пауза
}
0
29.01.2014, 00:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 00:45
Привет! Вот еще темы с ответами:

Написать программу для сортировки массива по убыванию суммы цифр элементов - C++
Написать программу для с++: Дан массив целых чисел. Написать программу для сортировки массива по убыванию суммы цифр элементов.

Написать программу для сортировки массива способами шелла вставки слияния и пузырьком - C++
Написать программу для сортировки массива способами шелла вставки слияния и пузырьком в одной программе со всеми операторами и объяснением...

Написать программу для решения системы уравнений методом Гаусса (c++) - C++
Добрый вечер! Нужно написать программу для решения системы уравнений методом Гаусса. Уравнений всего два: a11*x1 + a12*x2 = z1...

Помогите написать программу для решения слау методом Гаусса - C++
Осталось как обычно пару дней до сдачи курсовой, а она еще не готова! Помогите пожалуйста. Вот код, который чуть-чуть работает Главная...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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