Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2014, 16:53   #1
Alexander788
Пользователь
 
Регистрация: 19.05.2014
Сообщений: 32
По умолчанию Сортировка по убыванию среднего балла

Как правильно отсортировать по убыванию среднего балла ? в одномерном массиве язык программирования Delphi 7
Код:
var     x:real;
begin
  for I := 1 to n - 1 do
      if sred[i] < sred[i+1] then
        begin
          x := sred[i+1];
          sred[i+1] := sred[i];
          sred[i] := x;
          memo5.Lines.Add(floatToStr(sred[i]));
        end;
у меня кароче есть список средного балла по предметам
2
3,5
3,5
2,5
3

в сортировке выдает
3,5
3,5
2,5
3
3
помогите исправить
исходник
http://rghost.ru/56248412

Последний раз редактировалось Alexander788; 08.06.2014 в 17:44.
Alexander788 вне форума Ответить с цитированием
Старый 08.06.2014, 21:40   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, не видно, как у Вас массив описан. // опс. не видел, что Вы исходник выложили..

во-вторых, попробуйте такой код:
Код:
begin
  for i := 1 to n - 1 do
    for j:=i+1 to n do
      if sred[i] < sred[j] then
        begin
          x := sred[i];
          sred[i] := sred[j];
          sred[j] := x;
        end;

// а потом уже вывод
  memo5.Lines.Append('Массив после сортировки:');
  for i := 1 to n do
      memo5.Lines.Append(floatToStr(sred[i]));
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.06.2014, 22:15   #3
Alexander788
Пользователь
 
Регистрация: 19.05.2014
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, не видно, как у Вас массив описан. // опс. не видел, что Вы исходник выложили..

во-вторых, попробуйте такой код:
Код:
begin
  for i := 1 to n - 1 do
    for j:=i+1 to n do
      if sred[i] < sred[j] then
        begin
          x := sred[i];
          sred[i] := sred[j];
          sred[j] := x;
        end;

// а потом уже вывод
  memo5.Lines.Append('Массив после сортировки:');
  for i := 1 to n do
      memo5.Lines.Append(floatToStr(sred[i]));
Спасибо ) Заработало )
Alexander788 вне форума Ответить с цитированием
Старый 08.06.2014, 22:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

рад. пожалуйста!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.06.2014, 23:11   #5
Alexander788
Пользователь
 
Регистрация: 19.05.2014
Сообщений: 32
По умолчанию

А да еще скажите пожалуйста как можно сделать чтобы список с учеников выдавал с отсортированным списком средного бала
Например :

Ученик 1
Ученик 2
Ученик 3
Ученик 4
Ученик 5

Исходный средный
3,5
2,5
3
2
3,5
Отсортированый
Ученик 5 3,5
Ученик 1 3,5
Ученик 3 3
Ученик 2 2,5
Ученик 4 2

Последний раз редактировалось Alexander788; 08.06.2014 в 23:13.
Alexander788 вне форума Ответить с цитированием
Старый 08.06.2014, 23:36   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
список с учеников выдавал с отсортированным списком средного бала
при перестановке среднего балла аналогично переставляйте учеников
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 09.06.2014, 00:50   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно и переставлять учеников в ваших массивах.
но намного удобнее использовать тип RECORD

вместо
Цитата:
Код:
var
  fam:array[1..10] of string;
  balm:array[1..10] of integer;
  bali:array[1..10] of integer;
  sred:array[1..10] of real;
  i,j,n,l,s:integer;
пишите:
Код:
type Tstud = record 
  fam : string;
  balm : integer;
  bali   : integer;
  sred : real
end;

const N = 10;
var 
  students : array[1..N] of Tstud;
  x : Tstud;
...
...
  students[i].bali :=random(4)+2;
  students[i].balm:=random(4)+2;
  students[i].sred := (students[i].bali + students[i].balm)/2;
при сортировке:
Код:
begin
  for i := 1 to n - 1 do
    for j:=i+1 to n do
      if students[i].sred < students[j].sred then
        begin
          x := students[i];
          students[i] := students[j];
          students[j] := x;
        end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по паскалю - записи, информация об итогах зимней сессии в группе. Сортировка. вычисление среднего балла karacek Паскаль, Turbo Pascal, PascalABC.NET 0 16.05.2012 13:01
Не могу придумать формулу на нахождение среднего балла konistra Microsoft Office Excel 3 08.04.2011 08:57
Pascal распечатать фамилии хорошистов и отличников, указать разницу их среднего балла и сред балла класса mrRastom Помощь студентам 4 30.03.2011 20:25
Хитрый подсчёт среднего балла Антон Олегович Microsoft Office Excel 6 06.08.2009 13:20
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16