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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2008, 01:05   #1
Pork6
Новичок
Джуниор
 
Регистрация: 30.05.2008
Сообщений: 2
Вопрос [Turbo Pascal] Помогите найти ошибку в сортировке, пожалуйста.

Доброго вам времени суток!

Сейчас работаю над заданием, которое выглядит так:

Дан список группы в 10 человек в виде:

ФАМИЛИЯ: 14 символов (13+1 пробел)
ПОЛ: 2 символа (1+1 пробел)
РЕЗУЛЬТАТЫ_СЕССИИ: 4 символа

Всего в строке 20 символов.

Данные в одной строке отделяются друг от друга пробелами. Например:
Иванов________м_4455
Петрова_______ж_3554
………………………….
Отсортировать по убыванию среднего балла мужчин и женщин по отдельности. Список брать из файла и сохранить в файл. Процедуры, функции и string-и не использовать. Реализовать программу через сортировку двумерного массива.


Вот что я написал:

Код:

program Zachet1;

type massC=array[1..10,1..20] of char;

var A:massC;
    C:massC;
    my1,my2,i,j:integer;
    myin,myout:text;

begin

assign (myin, 'INPUT.TXT');
assign (myout, 'OUTPUT.TXT');
reset (myin);
rewrite (myout);

for i:=1 to 10 do
 begin
 for j:=1 to 20 do
  read(myin,A[i,j]);
  readln(myin);
 end;

for i:=1 to 10 do {сортировка, складываем 4 оценки и сортируем по ним}
 for j:=1 to 20 do
 begin
 my1:= (ord(A[i,17])-48)+(ord(A[i,18])-48)+(ord(A[i,19])-48)+(ord(A[i,20])-48);
 my2:= (ord(A[i+1,17])-48)+(ord(A[i+1,18])-48)+(ord(A[i+1,19])-48)+(ord(A[i+1,20])-48);
 if my1(my2
 then
  begin
  C[i,j]:=A[i,j];
  A[i,j]:=A[i+1,j];
  A[i+1,j]:=C[i,j];
  end;
 end;

for i:=1 to 10 do {выводим мужчин}
 begin
  if (A[i,15]='м') then
  begin
  for j:=1 to 20 do
   write(myout,A[i,j]);
   writeln(myout)
  end;
 end;

for i:=1 to 10 do {выводим женщин}
 begin
  if (A[i,15]='ж') then
  begin
   for j:=1 to 20 do
    write(myout,A[i,j]);
    writeln(myout);
  end;
 end;

close(myin);
close(myout);

end.
Но оно не работает. Точнее сказать, оно выводит мужчин и женщин раздельно, но вот сама сортировка не работает.

Как правильно написать?

Заранее спасибо.
Pork6 вне форума Ответить с цитированием
Старый 08.10.2008, 08:56   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Сортировка практически не выполнена.Сделаем так:
Изменим раздел переменных.
Код:
var A:massC;
    i,j,k:integer;//добавим к-для сортировки
    myin,myout:text;
    x:char; //буфер для сортировки вместо массива С
Перепишем саму сортировку строк по сумме баллов.
Код:
for i:=1 to 9 do //проходим по строкам
 for k:=1 to 9 do
 if (ord(A[k,17])-48)+(ord(A[k,18])-48)+(ord(A[k,19])-48)+(ord(A[k,20])-48)<
 (ord(A[k+1,17])-48)+(ord(A[k+1,18])-48)+(ord(A[k+1,19])-48)+(ord(A[k+1,20])-48) //если сумма в след. строке меньше, переставляем
 then
  begin
    for j:=1 to 20 do  //перестановка элементов строк в столбцах
      begin
        x:=A[k,j];
        A[k,j]:=A[k+1,j];
        A[k+1,j]:=x;
      end;
  end;
puporev вне форума Ответить с цитированием
Старый 08.10.2008, 20:01   #3
Pork6
Новичок
Джуниор
 
Регистрация: 30.05.2008
Сообщений: 2
По умолчанию

Большое вам спасибо за помощь!

Можете посоветовать справочник по Паскалю? А то достаточно сложно найти одновременно и полезную и интересную книгу.

Ещё раз благодарю.
Pork6 вне форума Ответить с цитированием
Старый 08.10.2008, 21:29   #4
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

http://programmersforum.ru/showthread.php?t=8324
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программисты, помогите найти ошибку, пожалуйста... okgo Общие вопросы Delphi 11 19.02.2009 21:55
Помогите пожалуйста найти и исправить ошибку Sam04 Паскаль, Turbo Pascal, PascalABC.NET 4 10.06.2008 08:28
Помогите, пожалуйста, решить задачу на Turbo Pascal. Тема: записи. Morrigan13 Помощь студентам 1 28.03.2008 21:09
Помогите пожалуйста решить 2 задачи в Turbo Pascal Gangzta Паскаль, Turbo Pascal, PascalABC.NET 4 04.01.2008 21:12
Помогите пожалуйста срочно!Turbo pascal. ZMEEEI Помощь студентам 4 04.12.2007 18:59