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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2012, 20:21   #1
alex_warrior
Новичок
Джуниор
 
Регистрация: 06.02.2012
Сообщений: 2
Восклицание Сортировка по фамилиям (Pascal)

Не могу исправить ошибки в программе (Pascal, версия не известна, но довольно старая). помогите пожалуйста. вот само задание:


вот фамилии учеников
base.txt

код программы:

Код:
Program sort_spisok (input, output);
var  Fl :Text;
S,Sx,NameFile: String;
SM: array[1..100] of String;
i,n,nf: integer;

Procedure Sort_FIO(var SM :array[n1..n2:string] of String; nf: integer);
Var S: String;
i,j : integer;
begin
for i:=2 to nf do
 begin
 for j:=nf downto i do
 begin
 if SM[j-1]>SM[j] then
   begin
   S:=SM[j-1];
   SM[j-1]:=SM[j];
   SM[j]:=S;
   end;
 end;
 end;
end;

Procedure Sort_gr;
Var S,S1,S2: String;
i,j : integer;
begin
for i:=2 to nf do
 begin
 for j:=nf downto i do
 begin
 S1:=Copy(SM[j-1],pos(',',SM[j-1])+2,5);
 S2:=Copy(SM[j],pos(',',SM[j])+2,5);
 if S1>S2 then
   begin
   S:=SM[j-1];
   SM[j-1]:=SM[j];
   SM[j]:=S;
   end;
 end;
 end;
end;

Procedure Wywod_File;
begin
NameFile:='base_out.txt';
Assign(Fl,NameFile);
ReWrite(Fl);
for i:=1 to nf do writeln(Fl,SM[i]);
Close(Fl);
end;

Procedure Wywod_Format;
Var
S,SA,S1,S2,S3,S4 : String;
begin
for i:=1 to nf do
 begin
  writeln(SM[i]);
 end;
end;

Begin
Cls;
writeln('Введите часть фамилии или "1" если поиск не нужен: ');
Readln(Sx);
n:=Length(Sx);
writeln(Sx,'   Len=',n);
writeln;

NameFile:='base.txt';
Assign(Fl,NameFile);
Reset(Fl);
i:=1;
while not eof(Fl) do begin
readln(Fl,S);
SM[i]:=S;
i:=i+1;
if Copy(S,1,n)=Sx then writeln(S);
nf:=i-1;
end;
Writeln;
Close(Fl);

{Writeln(' nf=',nf);}
Sort_FIO(SM,nf);
Sort_gr;
Wywod_File;
Wywod_Format;

End.

Вот что выдает компилятор:







за ранее спасибо.
alex_warrior вне форума Ответить с цитированием
Старый 06.02.2012, 20:53   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Неужели преподы элементарных вещей не объясняют?
Впрочем могу порадовать, ты тут такой не один.
Еще раз:
НЕ НАДО объявлять массивы в Var
НЕ НАДО использовать глобальные переменные
(сильно не всматривался, но это, вроде как, к тебе не относится )
Код:
Program sort_spisok (input, output);
type
mass=array[1..100] of String;
var  Fl :Text;
S,Sx,NameFile: String;
SM: mass;
i,n,nf: integer;

Procedure Sort_FIO(var SM:mass; nf: integer);
Var S: String;
i,j : integer;
begin
for i:=2 to nf do
 begin
 for j:=nf downto i do
 begin
 if SM[j-1]>SM[j] then
   begin
   S:=SM[j-1];
   SM[j-1]:=SM[j];
   SM[j]:=S;
   end;
 end;
 end;
end;

Procedure Sort_gr;
Var S,S1,S2: String;
i,j : integer;
begin
for i:=2 to nf do
 begin
 for j:=nf downto i do
 begin
 S1:=Copy(SM[j-1],pos(',',SM[j-1])+2,5);
 S2:=Copy(SM[j],pos(',',SM[j])+2,5);
 if S1>S2 then
   begin
   S:=SM[j-1];
   SM[j-1]:=SM[j];
   SM[j]:=S;
   end;
 end;
 end;
end;

Procedure Wywod_File;
begin
NameFile:='base_out.txt';
Assign(Fl,NameFile);
ReWrite(Fl);
for i:=1 to nf do writeln(Fl,SM[i]);
Close(Fl);
end;

Procedure Wywod_Format;
Var
S,SA,S1,S2,S3,S4 : String;
begin
for i:=1 to nf do
 begin
  writeln(SM[i]);
 end;
end;

Begin
Cls; 
writeln('Введите часть фамилии или "1" если поиск не нужен: ');
Readln(Sx);
n:=Length(Sx);
writeln(Sx,'   Len=',n);
writeln;

NameFile:='base.txt';
Assign(Fl,NameFile);
Reset(Fl);
i:=1;
while not eof(Fl) do begin
readln(Fl,S);
SM[i]:=S;
i:=i+1;
if Copy(S,1,n)=Sx then writeln(S);
nf:=i-1;
end;
Writeln;
Close(Fl);

{Writeln(' nf=',nf);}
Sort_FIO(SM,nf);
Sort_gr;
Wywod_File;
Wywod_Format;
readln

End.
Писал единичку, список выводит, дальше не проверял.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 06.02.2012, 21:06   #3
alex_warrior
Новичок
Джуниор
 
Регистрация: 06.02.2012
Сообщений: 2
По умолчанию

спасибо большое) завтра пойду проверять на его компе))
alex_warrior вне форума Ответить с цитированием
Старый 06.02.2012, 21:09   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Честно, не знаю, из-за этого ли были ошибки, но мой вариант откомперлировался и запустился, base_out.txt создался. На всякий случай, можешь попробовать этот FPC
Все тривиальное просто
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Pascal *Valentina* Помощь студентам 3 06.06.2011 05:07
Сортировка(PASCAL) Cas01 Помощь студентам 3 27.02.2011 10:00
Pascal. Сортировка. doctor D Помощь студентам 2 02.11.2010 21:47
поиск по фамилиям и вывод результатов в DBGrid Explosion БД в Delphi 14 23.04.2010 20:47
Требуется занести данные с клавиатуры в массив записей, упорядочить его по фамилиям в алфавитном порядке Ukkas Паскаль, Turbo Pascal, PascalABC.NET 3 17.01.2009 19:22