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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2012, 22:05   #1
vladis222
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 24
По умолчанию Линейная сортировка

Здравствуйте! Обращаюсь к вам по вопросу с программой линейной сортировки.Нам по предмету "Алгоритмы и структуры данных" задали лабу, где нужно написать программу для разных сортировок. У меня вариант с линейной сортировкой.В методичке есть код для программы с линейной сортировкой.Я пытаюсь разобраться с работой программы, переписал код в делфи. Программа запускается,но сама сортировка, при выборе соответствующего пункта меню, не выполняется. Подскажите,пожалуйста, в чем проблема. Вот код программы:
Код:
program laba1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  CRT32;

const
 Nmax=100;
Type Rec=record
      Name:string[15];
      Area:Integer;
    end;
    Table=array [1..Nmax] of Rec;
Var T:table;
    n:Integer;
    ch:byte;
procedure InTab(var T:Table;var n:Integer);
var ch:char;
    fname:string;
    i:Integer;
    f:file of rec;
    cod:byte;
begin
 ClrScr;
 n:=0;
 repeat
 n:=n+1;
 Writeln('Vvedite ',n,'-ю zapis tablici :  ');
 Writeln('Gosudarstvo : ');
 Readln(t[n].name);
 Writeln('Ploshad : ');
 Readln(t[n].area);
 Writeln('Prodoljit vvod ? y/n ');
 ch:=Readkey;
 until ch in ['n','N','т','Т'];
 writeln('Sohranit vvedennye dannie v faile ? y/n');
 ch:=Readkey;
 if ch in ['n','N','т','Т'] then
 exit;
 writeln('Vvedite imya faila ');
 Readln(fname);
 Assign(f,fname);
 {$I-}
 Rewrite(f);
 {$I+}
 cod:=IOResult;
 if cod=0 then
 begin
 for i:=1 to n do
 write(f,t[i]);
 close(f);
 end
 else
 begin
 Writeln('Oshibka pri sozdanii faila!!!');
 Readkey;
 end;
 end;
 procedure InFileTab(var T:Table;var n:Integer);
 var cod:byte;
     f:file of rec;
     fname:string;
     ch:char;
 begin
 ClrScr;
 repeat
 Writeln('Vvedite imya faila');
 Readln(fname);
 Assign(f,fname);
 {$I-}
 Reset(f);
 {$I+}
 cod:=IOResult;
 if cod<>0 then
 begin
 Writeln('Ne vozmojno naiti fail',fname);
 Writeln('Prodoljit rabotu ? y/n');
 ch:=Readkey;
 if ch in ['n','N','т','Т'] then
 exit;
 end;
 until cod=0;
 n:=0;
 while not eof(f) do
 begin
 n:=n+1;
 read(f,T[n]);
 end;
 close(f);
 Writeln('Tablica zagrujena iz faila  ',fname);
 Write('Najmite lubuju klavishu : ');
 Readkey;
 end;
 procedure ShowTab(var T:Table;n:Integer);
 var i:integer;
 begin
 ClrScr;
 Writeln('Zapisi tablici:');
 Writeln('-----------------------T-------------------');
 Writeln('|Gosudarstvo | Ploshad  |');
 writeln('+-----------------------------+');
 for i:=1 to n do
 Writeln(T[i].Name:12, T[i].Area:9);
 Writeln('L--------------------------------------');
 Writeln('Najmite lubuju klavishu : ');
 Readkey;
 End;
 procedure PrintTab(var T:Table;n,i,imin:Integer);
 var k:Integer;
 begin
 for k:=1 to n do
 begin
 if k=i then
 textattr:=red*16+white
 else
 if k=imin then
 textattr:=blue*16+white
 else
 textattr:=black*16+white;
 write(t[k].Area);
 textattr:=black*16+white;
 write('   ');
 end;
 writeln;
 end;
 procedure SortTab(var T:Table;n:Integer);
 var i,imin,j:Integer;
     tmp:rec;
 begin
 ClrScr;
 Writeln('Shagi sortirovki(videleni kluchi perestavlyaemih zapisej)');
 for i:=1 to n-1 do
 begin
 imin:=i;
 for j:=i+1 to n do
 if t[j].Area<t[imin].Area then
 imin:=j;
 if imin<>i then
 begin
 PrintTab(T,n,i,imin);
 Readkey;
 tmp:=t[i];
 t[i]:=t[imin];
 t[imin]:=tmp;
 end;
 end;
 end;


begin
n:=0;
repeat
ClrScr;
Writeln('1.Vvod dannih s klaviaturi');
Writeln('2.Zagruzka tablici iz faila');
Writeln('3.Vivod tablici');
Writeln('4.Sortirovka tablici metodom linejnogo vibora');
Writeln('----------------------------------------------');
Writeln('0.Vihod');
Writeln;
Write('Vash vibor: ');
Readln(ch);
Case ch of
1:InTab(T,n);
2:InFileTab(T,n);
3:if n<>0 then
ShowTab(T,n)
else
begin
writeln('Tablica ne sozdana!!!');
Readkey;
end;
4:if n<>0 then
SortTab(T,n)
else
begin
writeln('Tablica ne sozdana!!!');
Readkey;
end;
end;
until ch=0;

end.
vladis222 вне форума Ответить с цитированием
Старый 09.10.2012, 22:36   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,579
По умолчанию

Сомневаюсь, что кто-то будет смотреть ваш код до тех пор, пока вы не сделаете нормально отступы.
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линейная регрессия Людмилк@ Паскаль, Turbo Pascal, PascalABC.NET 0 23.04.2011 21:06
Линейная программа stas135642 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 31.03.2011 19:15
Линейная регрессия E-Novikov Общие вопросы Delphi 0 17.12.2010 07:38
Линейная регрессия (C#) strS Помощь студентам 0 14.09.2010 16:39
линейная интерполяция Auster Помощь студентам 4 22.04.2008 18:02