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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
22.01.2014, 01:29     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #1
Здравствуйте!
Помогите написать программу для сортировки методом прямых включений латинских букв по алфавиту.
Сортировка простыми включениями и метод прямых включений это одно и тоже?
Есть вот такая программа:
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;
}
Только как сделать что бы сортировать именно Алфавит?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2014, 01:29     Написать программу для сортировки методом прямых включений латинских букв по алфавиту
Посмотрите здесь:

C++ Написать программу для сортировки
C++ Написать программу для сортировки массива заданного с клавиатуры!
Написать программу для сортировки массива по возрастанию C++
C++ Написать программу для сортировки массива по убыванию суммы цифр элементов
C++ Написать программу для сортировки массива способами шелла вставки слияния и пузырьком
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 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
Для продолжения нажмите любую клавишу . . .
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
27.01.2014, 03:37     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #23
Цитата Сообщение от Linker1989 Посмотреть сообщение
Не моё желание встраивать псевдокод в рабочий
Как бы мой код итак отражает этот псевдокод поэтапно, о чем я уже писал выше.
Если хотите названия другие - переименуйте. Ваш while описывает то же, что и мой for, только у меня and записано в качестве постусловия, что ничуть не позволяет заявить о том, что мой код имеет хоть немного другой алгоритм.
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
28.01.2014, 21:01  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #24
Цитата Сообщение от MrGluck Посмотреть сообщение
Как бы мой код итак отражает этот псевдокод поэтапно, о чем я уже писал выше.
Если хотите названия другие - переименуйте. Ваш while описывает то же, что и мой for, только у меня and записано в качестве постусловия, что ничуть не позволяет заявить о том, что мой код имеет хоть немного другой алгоритм.
Согласен, разобрался с вашим кодом смысл понятен.
А требуется теперь настолько элементарная сортировка, чтобы не состояла из подпрограмм а была написана в одном майне.
Есть какие нибудь варианты?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
28.01.2014, 21:08     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #25
Цитата Сообщение от Linker1989 Посмотреть сообщение
Есть какие нибудь варианты?
Конечно. Взять тело функций и вставить в место вызова в main
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;                   /// вставляем элемент в подготовленное для него место
    }
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
28.01.2014, 21:34     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #27
Цитата Сообщение от Linker1989 Посмотреть сообщение
А что делть с этой функцией если не использовать template, а делать так:?
Странный вопрос. Я бы понял, если бы вы спросили когда наоборот: функция шаблонная - и её надо встроить. А тут у вас даже идентификаторы одинаковые. Просто названия подставить где надо и все (по сути названия параметров функции сопоставить с названиями передаваемых аргументов из main).
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();                      /// пауза
}
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
29.01.2014, 00:43     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #29
Linker1989, я вам выше приводил код, где алгоритм размещается в теле функции main. Чем он вас не устроил?
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(); /// пауза
}
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
30.01.2014, 20:49  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #31
Цитата Сообщение от iRomul Посмотреть сообщение
Linker1989, я вам выше приводил код, где алгоритм размещается в теле функции main. Чем он вас не устроил?
Там используеться swap, надо обйтись как нибудь без него)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2014, 20:59     Написать программу для сортировки методом прямых включений латинских букв по алфавиту
Еще ссылки по теме:

C++ Написать программу для решения системы уравнений методом Гаусса (c++)
Написать программу для реализации алгоритма сортировки методом пирамиды C++

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

Или воспользуйтесь поиском по форуму:
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
30.01.2014, 20:59     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #32
Linker1989, прошу
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
#include <iostream>
 
using namespace std;
 
float main() {
 
    const size_t ARRAY_SIZE = 5; 
    char char_array[ARRAY_SIZE] = {'Z', 'Y', 'B', 'C', 'A'};
 
    int i = 0;
    char tmp;
 
    for(int j = 1; j < ARRAY_SIZE; j++) {
 
        if(char_array[j] < char_array[j-1]) {
 
            i = j;
            
            do {
 
                tmp = char_array[i];
                char_array[i] = char_array[i-1];
                char_array[i-1] = tmp;
                
                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;
 
}
Yandex
Объявления
30.01.2014, 20:59     Написать программу для сортировки методом прямых включений латинских букв по алфавиту
Ответ Создать тему
Опции темы

Текущее время: 03:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru