Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 4
1

Выборочная сортировка. Странный баг

05.01.2013, 18:28. Показов 1073. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добра пользователям сего форума, пожаловал я к вам с проблемой в задачке одной:

"- Написать программу, которая методом прямого выбора сортирует по убыванию введенный с клавиатуры одномерный массив."
Не внимательно вкурив задание данное, накодил я сортировку по возрастанию:

Кликните здесь для просмотра всего текста
Pascal
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
program HIN3;
 
uses crt;
var min, c, i, j, buffer:integer;
    num:array[1..10] of integer;
 
BEGIN
    ClrScr;
                    
    WriteLn('Введите 10 чисел: ');
        
    min := 1;
 
    for c:=1 to 10 do
        begin       
            Write(c,'. ');
            Read(num[c]);
            
            if (num[min] > num[c]) then
                begin
                    min := c;
                end;
        end;
 
    WriteLn;
    WriteLn('Минимальное число, ', num[min], ' под номером ', min);
    WriteLn;
    WriteLn('Отсортированный массив:');
    
    for i:=1 to 10 do
        begin
            buffer := num[i];
            num[i] := num[min];
            num[min] := buffer;
 
            min:=num[i+1];
            
            for j:=i+1 to 10 do
                begin
                    if (num[min] > num[j]) then
                        begin
                            min:=j;
                        end;
                end;
                
            WriteLn(i, '. ', num[i]);
        
        end;
        
    Repeat until keypressed;
END.


Но позже опомнился. Теперь вопрос, как правильно переделать вывод массива по убыванию без костылей? Ибо при попытках, получалось у меня такое:


Код варианта последнего, с косяком после шага 5-го:

Кликните здесь для просмотра всего текста
Pascal
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
program HIN3;
 
uses dos, crt;
var max, c, i, j, buffer:integer;
    num:array[1..10] of integer;
 
BEGIN
    ClrScr;
                    
    WriteLn('Введите 10 чисел: ');
        
 
    for c:=1 to 10 do
        begin       
            Write(c,'. ');
            Read(num[c]);
            
            if (num[c] > num[max]) then
                begin
                    max := c;
                end;
        end;
 
    WriteLn;
    WriteLn('Максимальное число, ', num[max], ' под номером ', max);
    WriteLn;
    WriteLn('Отсортированный массив:');
    
    for i:=1 to 10 do
        begin
            buffer := num[i];
            num[i] := num[max];
            num[max] := buffer;
 
            max:=num[i+1];
            
            for j:=i+1 to 10 do
                begin
                    if (num[j] > num[max]) then
                        begin
                            max:=j;
                        end;
                end;
                
            WriteLn(i, '. ', num[i]);
        
        end;
    
 
        
    Repeat until keypressed;
END.


Очень надеюсь на помощь светлых умов, с идеями правильного решения данной задачи. В поиск прошу не отправлять. Ибо интересно очень увидеть не готовые решения, а то, как можно переделать уже написанный мной код. Спасибо за внимание, с нетерпением жду ответов ваших.

P.S. Третий цикл прошу не предлагать
Миниатюры
Выборочная сортировка. Странный баг   Выборочная сортировка. Странный баг  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2013, 18:28
Ответы с готовыми решениями:

Странный баг
Добрый день. Есть код внешенй обработки, который при помощи com объекта обращается из базы...

Странный баг
После проблем с вирусом svchost.exe после перезагрузки Lotus Domino все сервисы nreplica.exe...

очень странный баг IE
Здравствуйте уважаемые формучане! Я тут недавно столкнулся с такой проблемой... Доверстал значит...

Очень странный баг
Вообщем такая история. Программировал в Visual studio, залез в чужую память и после этого не могу...

4
3451 / 2389 / 2135
Регистрация: 04.12.2011
Сообщений: 3,966
05.01.2013, 19:01 2
и тебе добра, HiNeX, и добро пожаловать на форум наш.
компилилось сие в pascal.abc, потому не забудь раскомментить строки..
Pascal
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
program HIN3;
//uses dos, crt;
var
  max, c, i, j, buffer: integer;
  num: array[1..10] of integer;
 
begin
//  ClrScr;
  max:=1;
  WriteLn('Ââåäèòå 10 ÷èñåë: ');
  for c := 1 to 10 do
  begin
    Write(c, '. ');
    Read(num[c]);
    if (num[c] > num[max]) then
      max := c;
  end;
  WriteLn;
  WriteLn('Ìàêñèìàëüíîå ÷èñëî, ', num[max], ' ïîä íîìåðîì ', max);
  WriteLn;
  WriteLn('Îòñîðòèðîâàííûé ìàññèâ:');
 
  for i := 1 to 9 do
    for j := i + 1 to 10 do
      if (num[j] > num[i]) then
      begin
        buffer := num[i];
        num[i] := num[j];
        num[j] := buffer;
      end;
 
  for i:=1 to 10 do
    writeln(i,'. ',num[i]);
  // Repeat until keypressed;
end.
1
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 4
05.01.2013, 20:01  [ТС] 3
Цитата Сообщение от ermolay Посмотреть сообщение
и тебе добра, HiNeX, и добро пожаловать на форум наш.
компилилось сие в pascal.abc, потому не забудь раскомментить строки..
За ответ Ваш, искренней благодарю . Но имеется проблема одна, код Ваш, он методом пузырька выполнен. Не подходит по заданию техническому... Голову ломал я, но ответа пока не нашел. И всё-таки интересно, где-же я в логике ошибся-то.) Уже и на священном C++ алгоритмы проверить успел, всё та же ересь после шага 5-го
0
3451 / 2389 / 2135
Регистрация: 04.12.2011
Сообщений: 3,966
05.01.2013, 20:43 4
хмм, да, то отбором была сортировка (но не пузырьком)..
вот две выбором, если не ошибаюсь снова )
Pascal
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
program HIN3;
//uses dos, crt;
var
  max, c, i, j, buffer,m: integer;
  num: array[1..10] of integer;
 
begin
//  ClrScr;
  max:=1;
  WriteLn('Введите 10 чисел: ');
  for c := 1 to 10 do
  begin
    Write(c, '. ');
    Read(num[c]);
    if (num[c] > num[max]) then
      max := c;
  end;
  WriteLn;
  WriteLn('Максимальное число, ', num[max], ' под номером ', max);
  WriteLn;
  WriteLn('Отсортированный массив:');
  
  {for i:=1 to 9 do // сортировка выбором
  begin
    m:=i;
    buffer:=num[i];
    for j:=i+1 to 10 do
    if buffer>num[j] then
    begin
      m:=j;
      buffer:=num[j];
    end;
    num[m]:=num[i];
    num[i]:=buffer;
  end;}
  
  for i:=1 to 9 do //cортировка выбором без запоминания минимума
  begin
    m:=i;
    for j:=i+1 to 10 do
      if num[j]<num[m] then
        m:=j;
    buffer:=num[i];
    num[i]:=num[m];
    num[m]:=buffer;
  end;
   
  for i:=1 to 10 do
    writeln(i,'. ',num[i]);
  // Repeat until keypressed;
end.
Добавлено через 1 минуту
дополнил..
1
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 4
05.01.2013, 21:01  [ТС] 5
Нашел решение сей задачи после длительного полового акта с алгоритмом окаянным, всем спасибо за внимание. ermolay спасибо за ответ.
P.S. Решение прилагается, для тех кому интересно. Проблема в вычислении последующего максимального числа имелась.
Кликните здесь для просмотра всего текста
Pascal
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
program HiNeX5;
 
uses dos, crt;
var max, c, i, j, buffer:integer;
    num:array[1..10] of integer;
 
BEGIN
    ClrScr;
                    
    WriteLn('Enter 10 numbers: ');
 
 
    for c:=1 to 10 do
        begin
            Write(c,'. ');
            Read(num[c]);
 
            if (num[c] > num[max]) then
                begin
                    max := c;
                end;
        end;
 
    WriteLn;
    WriteLn('Maximum number: ', num[max], ', ID: ', max);
    WriteLn;
    WriteLn('Sorted array:');
 
    for i:=1 to 10 do
        begin
            buffer := num[i];
            num[i] := num[max];
            num[max] := buffer;
 
            max := i+2;
 
            for j:=i+1 to 10 do
                begin
                    if (num[j] > num[max]) then
                        begin
                            max:=j;
                        end;
                end;
 
            WriteLn(i, '. ', num[i]);
 
        end;
 
 
 
    Repeat until keypressed;
END.
0
05.01.2013, 21:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2013, 21:01
Помогаю со студенческими работами здесь

Странный баг с сайтом
Заметил у себя странный баг с сайтом Кинопоиск. Иногда он открывается, как и положено (очень...

Странный баг о_О
Доброго времени суток. Итак, сегодня писал программу, которая по вводу n-значного числа n&gt;1 и n&lt;10,...

Странный баг в Windows 7
Здравствуйте! Каждый день где-то в 21-30 на 1-2 секунды пропадают иконки с рабочего стола и...

Странный баг в копировании объекта
Здравствуйте, для дела нужно было написать функцию, которая делала бы полную копию объекта,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru