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

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

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

> Сортировка записей, где ошибка??
-Екатерина-
сообщение 4.04.2007 15:53
Сообщение #1


Пионер
**

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

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


такая задача:
есть типизированный файл, сначала ввод данных, потом вывод в отсортированном виде по признакам(код отдела, код лаборатории, табельный номер).

uses crt; 
TYPE
 TZ=RECORD
   code_otd:integer;
   code_lab:integer;
   TN: INTEGER;
   data:integer;
   code_nach:integer;
   sum_nach:integer;
 END;
 mas=array[1..100] of tz;
 tmas=^mas;
 mas1=array [1..100] of string;
 tmas1=^mas1;
VAR
 ZAP: TZ;
 f3: FILE OF TZ;
 fl3: BOOLEAN;
 FILENAME: string;
 ANS,ans1: string;
 Z:tmas;
 st: tmas1;
 c:tz;
 st1,st2,st3: string;
 k,t,i,j: integer;

BEGIN
 clrscr;
   writeLN('enter file name');
   READLN(FILENAME);
   ASSIGN (f3,FILENAME);
   rewrite(f3);
 ans:='y';
 while (ans='y') do
  begin
   writeln ('kod otdela');
   readln (zap.code_otd);
   writeln ('kod laboratorii');
   readln (zap.code_lab);
   writeLN('tab nomer sotrudnika');
   READLN(ZAP.TN);		   
   writeLN('data');
   READLN(ZAP.data );
   writeLN('kod nachisleniya');
   READLN(ZAP.code_nach);
   writeLN('summa nachisleniya');
   READLN(ZAP.sum_nach);
   write (f3, ZAP);
   writeLN('again? ( Y-da )');
   READLN(ANS);
  end;
 close(f3);
 
 reset(f3);
 t:=filesize(f3);
 getmem(Z,t*sizeof(zap));
 k:=0;
 while not(eof(f3)) do
  begin
  read(f3,zap);
  inc(k);
  Z^[k]:=zap;
 end;
 close(f3);
 for i:=1 to k do
  begin
   str(z^[i].code_otd,st1);
   str(z^[i].code_lab,st2);
   str(z^[i].tn,st3);
   st^[i]:=st1+st2+st3;
  end;
 for j:=1 to k-1 do
  for i:=1 to k-j do
   if st^[i]>st^[i+1] then
    begin
     c:=z^[i]; // <----------------тут было выделено
     z^[i]:=z^[i+1]; // <---------- тут было выделено
     z^[i+1]:=c; // <-------------тут было выделено
    end;
 rewrite(f3);
 for i:=1 to t do
  write(f3,z^[i]);
 close(f3);
 reset(f3);
 while (not eof(f3)) do
  begin
   READ(f3,ZAP);
   writeLN(ZAP.code_otd:5,ZAP.code_lab:5,zap.tn:7,ZAP.data:12,zap.code_nach:8,zap.sum_nach:8);
  end;
 close(f3);
 readkey;
 readln;
end.


М
Пользуйтесь тегами [ code = pas ] [ / code ]



и в том месте, где выделено жирным загвоздка! не пойму почему не сортируются записи...они же идут соответственно с st

заранее спасибо

Сообщение отредактировано: klem4 - 4.04.2007 15:55
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
volvo
сообщение 4.04.2007 16:01
Сообщение #2


Гость






Тебе же уже показывали, как сортируются записи: Сортировка записей
 К началу страницы 
+ Ответить 
-Екатерина-
сообщение 4.04.2007 16:24
Сообщение #3


Пионер
**

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

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


это я вижу и помню!!
но я прошу посмотреть что у меня не так в этой программе...конкретно в выделенном месте! что если я сортирую по трем полям одновременно??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 4.04.2007 18:04
Сообщение #4


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


 for j:=1 to k-1 do
  for i:=1 to k-j do
   if st^[i]>st^[i+1] then
    begin
     c:=z^[i]; // <----------------тут было выделено
     z^[i]:=z^[i+1]; // <---------- тут было выделено
     z^[i+1]:=c; // <-------------тут было выделено
    end; 

а ты не меняешь st^[i] и st^[i+1]? может, имеет смысл этот массив тоже сортировать?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Екатерина-
сообщение 4.04.2007 22:02
Сообщение #5


Пионер
**

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

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


но я ведь его потом нигде не использую, просто каждому st[i] соответствует свой элемент в массиве записей z[i] с таким же номером
вот я и хочу поменять записи в массиве z
но не получается!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 4.04.2007 22:26
Сообщение #6


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


просто сортировка-то идет по сравнению этих строк...
в общем, я бы начала с того, чтобы попробовала их отсортировать.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Екатерина-
сообщение 5.04.2007 15:35
Сообщение #7


Пионер
**

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

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


и что потом делать когда только строки будут отсортированными??
я сделала и строки у меня сортируются правильно
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Renbo
сообщение 7.04.2007 20:00
Сообщение #8


Пионер
**

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

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


Сделала ты или нет, но вообщем у меня такая же задача была и теже пля отсортировать )


procedure sortirovka;
Var
  t,k,j,i:integer;
  z:tmas;
  c:TZ;
Begin
  assign(osnov,'osnov');
  reset(osnov);
  t:=filesize(osnov);
  getmem(z,t*sizeof(Zap));
  k:=0;
  while not(eof(osnov)) do
    begin
      read(osnov,Zap);
      inc(k);
      z^[k]:=zap;
    end;
  close(osnov);
  For j:=1 to k-1 do
    For i:=1 to k-j do
      if z^[i].Tabnomr > z^[i+1].Tabnomr then
        begin
          c:=z^[i];
          z^[i]:=z^[i+1];
          z^[i+1]:=c;
        end;
  rewrite(osnov);
  For i:=1 to t do
    write(osnov,z^[i]);
  close(osnov);
  For j:=1 to k-1 do
    For i:=1 to k-j do
      if z^[i].CodeLab > z^[i+1].CodeLab then
        begin
          c:=z^[i];
          z^[i]:=z^[i+1];
          z^[i+1]:=c;
        end;
  rewrite(osnov);
  For i:=1 to t do
    write(osnov,z^[i]);
  close(osnov);
  For j:=1 to k-1 do
    For i:=1 to k-j do
      if z^[i].CodeOTD > z^[i+1].CodeOTD then
        begin
          c:=z^[i];
          z^[i]:=z^[i+1];
          z^[i+1]:=c;
        end;
  rewrite(osnov);
  For i:=1 to t do
    write(osnov,z^[i]);
  close(osnov);
  reset(osnov);
End;



Вот эта процедура делает то что тебе и мне надо )
VAR и TIPE оставляешь свои.
Ну там название файла переименуешь и т.д...


Предлагаю Модерам сделать эту процедурку универсальной и в FAQ по файлам, а то по всему форуму темы эти искать...бр....

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

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

 

- Текстовая версия 27.07.2025 5:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"