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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Костя Си
Сообщений: n/a
24.10.2010, 00:42     сортировка выбором #1
не могу разобраться с задачей, не разбираюсь в указателях(((: сортировка выбором символов в строке. Использовать указатели на текущий и минимальный символы. Помогите пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2010, 00:42     сортировка выбором
Посмотрите здесь:

C++ Сортировка выбором на с++
C++ /сортировка выбором C++
C++ сортировка выбором
Сортировка выбором C++
C++ Сортировка выбором
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
24.10.2010, 00:45     сортировка выбором #2
Сдесь посмотрите

Алгоритмы сортировок
Tiktovta
9 / 9 / 2
Регистрация: 22.11.2010
Сообщений: 29
22.05.2011, 22:31     сортировка выбором #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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
 
int main()
{
    char string[]="224123";
     //printf("Please, input the 10 digital tring and press enter");
    //printf("->");
    //scanf("%s", &string);
    char *ptek1=&string[0];
    char *pmin=&string[0];
    char *ptek2=&string[1];
    char temp, len;
    //int i,k;
    len=strlen(string);
    printf("%d", len);
    printf("\n Nonsorted: \n");
    printf("%s",string);
    for (ptek1; ptek1<len-1; ptek1++)
    {
        //*pmin = *ptek1++;
        //printf("Hello world!\n");
        for (ptek2=(ptek1+1);ptek2<len;ptek2++)
        {
           // printf("Hello world!\n");
            if (*ptek2<*pmin)
            {
                *pmin=*ptek2;
            }
 
            if (*pmin != ptek1) // если минимальный не стоит на своем месте,...
            {
            temp=ptek1; // ставив его на место
            ptek1=pmin;
            pmin=temp;
            }
    printf("\n Sorted: \n");
    printf("%s",string);
        }
    };
 
 printf("\n Sorted: \n");
 printf("%s",string);
     //printf("Hello world!\n");
    system("PAUSE");
    return 0;
}
Tiktovta
9 / 9 / 2
Регистрация: 22.11.2010
Сообщений: 29
24.05.2011, 23:17     сортировка выбором #4
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
 
int main()
{
    char string[]="274123";
    //printf("Please, input the 10 digital tring and press enter");
    //printf("->");
    //scanf("%s", &string);
    char *ptek1=&string[0];
    char pmin;
    char *ptek2;
    char temp, len;
    int i,k;
    len=strlen(string);
    printf("%d", len);
    printf("\n Nonsorted: \n");
    printf("%s",string);
    for (i=0; i<len-1; i++)
    {
        pmin = *(ptek1);
 
       //printf("Hello rld!\n");
       //printf("%c",pmin);
        for (ptek2=i+1;ptek2<len;ptek2++)
        {
           // printf("Hello world!\n");
           //printf("%c",*(string+i+1));
            if (*(ptek2)<pmin)
            {
                //printf("%c",*(string+i+1));
                pmin=*(ptek2);
            }
 
            if (pmin != *(ptek1)) // если минимальный не стоит на своем месте,...
            {
            temp=*ptek1; // ставив его на место
            *ptek1=pmin;
            pmin=temp;
            }
    printf("\n Sorted: \n");
    printf("%s",string);
        };
       // ptek1++;
    };
 
 printf("\n Sorted: \n");
 printf("%s",string);
     //printf("Hello world!\n");
    system("PAUSE");
    return 0;
}
Вот последний вариант, я что-то с указателями напутал, на 32 строке на экран выводится, а потом во время выполнения вылазит какая-то ошибка выполнения. Что не так у меня с указателями?

Добавлено через 14 часов 39 минут
Переделал нафик все... но с указателями не могу все еще разобраться.. вот пока код без указателей. Может кто подскажет. В инете ничего не про такую задачу, так что её решение по любому надо здесь выложить.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
int main()
{
    char a[] = "y5h627775u4-9";
    int i=0,j, min_i;
    int len=strlen(a);
    //printf("Please, input the some any symbols and press enter");
    //printf("->");
    //scanf("%s", &a);
    while(*(a+i)!='\0')
 
       {
           printf("%c",*(a+i++) );
       };
 
    for (i = 0; i < len-1; ++i)
    {
/* устанавливаем начальное значение минимального индекса */
        min_i = i;
        /* находим минимальный индекс элемента */
        for (j = i + 1; j < len; ++j)
        {
                if (a[j] < a[min_i])
                {
                        min_i = j;
                }
        }
        /* меняем значения местами */
        int temp = a[i];
        a[i] = a[min_i];
        a[min_i] = temp;
};
 
    printf("\nsort\n");
    i=0;
    while(*(a+i)!='\0')
 
       {
           printf("%c",*(a+i++) );
       };
    return 0;
}
Добавлено через 2 часа 19 минут
Решил!!

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 <stdio.h>
//#include <stdlib.h>
//#include <string.h>
#include <conio.h>
 
int main()
{
    char a[] = "Takaya vot STROKA:2011-05-21";
    char i=0,j,temp;
    char len=strlen(a);
    //printf("Please, input the some any symbols and press enter");
    //printf("->");
    //scanf("%s", &a);
    char *ptek1=&a[0];  //указатель текущего значения
    char *pmin;         //указатель минимума
    printf("Nonsorted string:\n\n");
    while(*(ptek1+i)!='\0')
       {
        printf("%c",*(ptek1+i++));
       };
    for (i = 0; i < len-1; ++i)
    {
        //устанавливаем начальное значение минимального индекса
        pmin = ptek1+i;
 
        //ниже находим минимальный индекс элемента
        for (j=i+1; j< len; ++j)
        {
            if (*(ptek1+j) < *pmin)
                {
                    pmin = (ptek1+j);
                }
        }
        // меняем значения местами методом стакана
 
        temp = *(ptek1+i);
        *(ptek1+i) = *pmin;
        *pmin = temp;
    };
    printf("\n\nSorted string:\n\n");
    i=0;
    while(*(ptek1+i)!='\0')
       {
           printf("%c",*(ptek1+i++) );
       };
    getch();
    return 0;
}
Tiktovta
9 / 9 / 2
Регистрация: 22.11.2010
Сообщений: 29
26.05.2011, 07:00     сортировка выбором #5
Уважаемые форумчане, подскажите как можно корректно исправить указатель на текущую позицию? а то получается что фактически у меня указатель не *ptek а *(ptek+N) где N это i или j
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
26.05.2011, 07:25     сортировка выбором #6
Цитата Сообщение от Tiktovta Посмотреть сообщение
printf("%c",*(ptek1+i++));
эта конструкция сильно снижает читабельность.
Суть вопроса я понял в том, что ты изменяешь ptek и тебе надо к начальному положению вернуться чтоли? Ну так ты же в начале делал так

Цитата Сообщение от Tiktovta Посмотреть сообщение
char *ptek1=&a[0]; *//указатель текущего значения
сделай ещё раз и всё, а(0) у тебя ведь никуда не делось?

Добавлено через 4 минуты
Цитата Сообщение от pito211 Посмотреть сообщение
char *ptek1=&a[0]; *//указатель текущего значения
эту кстати строку можно и так записать
char *ptek1=а; //К чему лишние символы?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2011, 11:45     сортировка выбором
Еще ссылки по теме:

Сортировка выбором C++
C++ Сортировка выбором
C++ Сортировка выбором

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

Или воспользуйтесь поиском по форуму:
Tiktovta
9 / 9 / 2
Регистрация: 22.11.2010
Сообщений: 29
26.05.2011, 11:45     сортировка выбором #7
Спасибо)) просто делаю по учебникам(Культин, Побельский и там так написано) А в самом задании от преподавателя указано что использовать указатели на текущий и минимальныйй символы строки. у меня изначально и было вместо "ptek1" - "а", но "а" это ведь не указатель, получается что "ptek1" у меня указатель на первый символ строки, а оперирую с данными с помощью адресной арифметики. если я пытаюсь сделать передалать на
i=0;
ptek1=a+i; // то ест везде где есть a+i меняю на ptek1,
и/или a+j присваиваю как ptek1+1
То компилировать - комплируется а выполняться - нет. зависает программка. Как исправить не нашел пока. отправил преподавателю так но чувствую какой вопрос на защите будет)))))
Yandex
Объявления
26.05.2011, 11:45     сортировка выбором
Ответ Создать тему
Опции темы

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