IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Проблемы с сортировкой!
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской

Репутация: -  0  +


Дела обстоят так, есть 2 сортировки, при первом запуске любой из них работают нормально, как только просмотришь результ и начинаешь делать вторую сортировку такое ощущение что последняя строка дописывается поверху, при чем без разницы какая из сортировок запускалась первой. Помогите кто чем может, заранее благодарен.
Вот код сортировки:

Procedure Sortirovka;
var
  T:ykazatel;
  k,i,j:integer;
  st:array[1..30] of ykazatel;
Begin
  RestoreCrtMode;
  assign(f,filename);
  reset(f);
  case z of
  1: Begin
       writeln('***‘(r)авЁа(r)ўЄ  Ї(r) ¬ аЄЁ Ё ¬(r)¤Ґ«Ё ⥫Ґд(r)­ ***');
       Delay(50000);
       k:=1;
       while not eof(f) do
         Begin
           read(f,st[k]);
           k:=k+1;
         End;
       Begin
         For i:=1 to n do
           Begin
             For j:=1 to n do
               If st[j].MobileMark<st[j+1].MobileMark then
                 Begin
                   T:=st[j];
                   st[j]:=st[j+1];
                   st[j+1]:=T;
                 End;
           End;
       End;
     For i:=1 to n do
           Begin
             For j:=1 to n do
               If st[j].MobileMark=st[j+1].MobileMark then
               If st[j].Mobile<st[j+1].Mobile then
                 Begin
                   T:=st[j];
                   st[j]:=st[j+1];
                   st[j+1]:=T;
                 End;
               End;
               close(f);
     rewrite(f);
     For j:=n downto 1 do
       Begin
         write(f,st[j]);
         read;
       End;
     TextAttr:=2;
     writeln('’Ґ«Ґд(r)­л (r)вб(r)авЁа(r)ў ­­л!');
     TextAttr:=15;
     readln;
     close(f);
     End;
  2: Begin
       writeln('***‘(r)авЁа(r)ўЄ  Ї(r) бв(r)Ё¬(r)б⨠⥫Ґд(r)­ ***');
       Delay(50000);
       k:=1;
       while not eof(f) do
         Begin
           read(f,st[k]);
           k:=k+1;
         End;

       Begin
         For i:=1 to n do
           Begin
             For j:=1 to n do
               If st[j].Cost<st[j+1].Cost then
                 Begin
                   T:=st[j];
                   st[j]:=st[j+1];
                   st[j+1]:=T;
                 End;
           End;
       End;
       close(f);
     rewrite(f);
     For j:=n downto 1 do
       Begin
         write(f,st[j]);
         read;
       End;
     TextAttr:=2;
     writeln('’Ґ«Ґд(r)­л (r)вб(r)авЁа(r)ў ­­л!');
     TextAttr:=15;
     readln;
     close(f);
     End;
  End;
  SetGraphMode(GetGraphMode);
End;



Сообщение отредактировано: Spaun -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Spaun, твоя процедура достаточно длинная, желательно, чтоб она компилировалась. Глазами трудно смоделировать работу программы такого размера. Добавь недостающие типы и перменные.

Добавлено через 2 мин.
А также очень желательно присовокупить файл, который она читает.
Спасибо.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Spaun, зачем усложняешь себе же жизнь, используя поэлементное копирование структуры? Что,
Цитата
               If st[j].Mobile<st[j+1].Mobile then
                 Begin
                   x1:=st[j].MobileMark;
                   x2:=st[j].Mobile;
                   x3:=st[j].Cost;
                   x4:=st[j].Data;
                   x5:=st[j].Kamera;
                   x6:=st[j].Wap;
                   x7:=st[j].Usb;
                   st[j].MobileMark:=st[j+1].MobileMark;
                   st[j].Mobile:=st[j+1].Mobile;
                   st[j].Cost:=st[j+1].Cost;
                   st[j].Data:=st[j+1].Data;
                   st[j].Kamera:=st[j+1].Kamera;
                   st[j].Wap:=st[j+1].Wap;
                   st[j].Usb:=st[j+1].Usb;
                   st[j+1].MobileMark:=x1;
                   st[j+1].Mobile:=x2;
                   st[j+1].Cost:=x3;
                   st[j+1].Data:=x4;
                   st[j+1].Kamera:=x5;
                   st[j+1].Wap:=x6;
                   st[j+1].Usb:=x7;
                 End;

выглядит внушительнее, чем
var T: ykazatel;
...
               If st[j].Mobile<st[j+1].Mobile then begin
                   T := st[j]; st[j] := st[j + 1]; st[j + 1] := T;
               End;

? Я тебя уверяю, работать быстрее твой вариант не будет, а вот сложности при отладке возникнут обязательно... В принципе, уже возникли smile.gif

Update
+ к этому, в FAQ-е был выложен пример, как заставить одну и ту же процедуру сортировать массив записей по РАЗНЫМ полям... Полюбопытствуй, это как раз то, что тебе нужно...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской

Репутация: -  0  +


Lapp
Вот!

Сообщение отредактировано: Spaun -


Прикрепленные файлы
Прикрепленный файл  sort.rar ( 20.17 килобайт ) Кол-во скачиваний: 210
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской

Репутация: -  0  +


Цитата(volovo)

выглядит внушительнее, чем

var T: ykazatel;
...
               If st[j].Mobile<st[j+1].Mobile then begin
                   T := st[j]; st[j] := st[j + 1]; st[j + 1] := T;
               End;



? Я тебя уверяю, работать быстрее твой вариант не будет, а вот сложности при отладке возникнут обязательно... В принципе, уже возникли


Спасибо за совет но именно моей проблеме это не помогло, хотя и уменьшило код. Если есть какие-нибудь идеи по основной проблеме, пожалуйста помогите.

Сообщение отредактировано: Spaun -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
Если есть какие-нибудь идеи по основной проблеме, пожалуйста помогите.
Присоедини исходник, а не EXE-шник, поможем...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской

Репутация: -  0  +


volovo
Вот!


Прикрепленные файлы
Прикрепленный файл  sort.rar ( 24.99 килобайт ) Кол-во скачиваний: 209
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Бррр... Так... Поскольку твоя программа на моем компиляторе не отрабатывает, как положено (Access Denied вылетает), а запускать TP неохота, то давай ты сам попробуешь прочитать из файла и отсортировать вот так:
k:=0;
while not eof(f) do begin
	inc(k);
	read(f,st[k]);
end;

for i:=1 to k do begin
	for j:=k downto i+1 do
		If st[j].MobileMark<st[j-1].MobileMark then begin
			T:=st[j]; st[j]:=st[j-1]; st[j-1]:=T;
		end;
end;

for i:=1 to k do begin
	for j:=k downto i+1 do
		If st[j].MobileMark=st[j-1].MobileMark then
			If st[j].Mobile<st[j-1].Mobile then begin
				T:=st[j]; st[j]:=st[j-1]; st[j-1]:=T;
			end;
end;
, согласно алгоритму сортировки "пузырьком", и проверишь, работает ли оно... Если нет - говори...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской

Репутация: -  0  +


volvo Все огромное спасибо!!! Работает, да еще маленький вопрос если сортировку поменять от меньшего к большому будет работать? И как это реализовать в таком случае?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
еще маленький вопрос если сортировку поменять от меньшего к большому будет работать? И как это реализовать в таком случае?
И так тоже будет работать, для этого достаточно поменять только направление знака при сравнении... А вообще - вот сюда загляни: Методы сортировок
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.04.2025 22:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name