![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
-Екатерина- |
![]()
Сообщение
#1
|
|||
Пионер ![]() ![]() Группа: Пользователи Сообщений: 82 Пол: Женский Репутация: ![]() ![]() ![]() |
такая задача:
есть типизированный файл, сначала ввод данных, потом вывод в отсортированном виде по признакам(код отдела, код лаборатории, табельный номер).
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.
и в том месте, где выделено жирным загвоздка! не пойму почему не сортируются записи...они же идут соответственно с st заранее спасибо Сообщение отредактировано: klem4 - 4.04.2007 15:55 |
|||
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Тебе же уже показывали, как сортируются записи: Сортировка записей
|
-Екатерина- |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 82 Пол: Женский Репутация: ![]() ![]() ![]() |
это я вижу и помню!!
но я прошу посмотреть что у меня не так в этой программе...конкретно в выделенном месте! что если я сортирую по трем полям одновременно?? |
мисс_граффити |
![]()
Сообщение
#4
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
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]? может, имеет смысл этот массив тоже сортировать? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
-Екатерина- |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 82 Пол: Женский Репутация: ![]() ![]() ![]() |
но я ведь его потом нигде не использую, просто каждому st[i] соответствует свой элемент в массиве записей z[i] с таким же номером
вот я и хочу поменять записи в массиве z но не получается!!! |
мисс_граффити |
![]()
Сообщение
#6
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
просто сортировка-то идет по сравнению этих строк...
в общем, я бы начала с того, чтобы попробовала их отсортировать. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
-Екатерина- |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 82 Пол: Женский Репутация: ![]() ![]() ![]() |
и что потом делать когда только строки будут отсортированными??
я сделала и строки у меня сортируются правильно |
Renbo |
![]()
Сообщение
#8
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 86 Пол: Мужской Репутация: ![]() ![]() ![]() |
Сделала ты или нет, но вообщем у меня такая же задача была и теже пля отсортировать )
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 |
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 5:57 |