Показать сообщение отдельно
Старый 02.11.2014, 15:22   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Отладил.
Ошибок - такое море, что за голову хватаешься и стонешь. Тут и обращение с массивами, как с простой переменной (без указания индекса), и абсолютно безграмотно написанная сортировка, и много чего еще разного - всего и не перечислишь.
Устал уже повторять, но повторю вновь: в программировании неряшливость недопустима, транслятор не понимает никаких "ну что-то типо...", тут каждое действие, каждый значок должен быть строго выверен и осмысленно поставлен.
Несколько пояснений:
1. Отлаживалось на DOS Free Pascal, поэтому имя модуля obrabotki сокращено (в DOS имена ограничиваются восьмью символами). Поправьте, если надо.
2. Во избежание заморочек с кодировками кириллица убрана.
3. Путь к файлу в команде Assign - тоже поправьте.
А так - программа полностью отлажена и оттестирована.
Код:
program pro1;

uses
  op, obrab;

begin
 assign(sv, 'D:\lep_zar.dat');
 vvod;
 vivod;
 sort;
 readln
end.
Код:
unit obrab;

interface
uses op;

procedure vvod;
procedure vivod;
procedure sort;

implementation

procedure vvod;
var
 i,n: integer;
begin
 rewrite(sv);
 write('Enter the number of regions: ');
 readln(n);
 for i:= 1 to n do
  begin
   writeln(i, '-: ');
   with sd[i] do
    begin
     write('Region name: ');
     readln(name);
     write('Economical indicators: ');
     readln(pocaz);
     write(sv, sd[i]);
    end;
  end;
  close(sv);
end;


procedure vivod;
var
 sxx:region;
begin
 reset(sv);
 writeln('-----------------------------');
 writeln('Region      Industrial economical indications');
 writeln('-----------------------------');
 while not eof(sv) do
  begin
   read(sv,sxx);
   with sxx do writeln(name: 10, pocaz: 16);
  end;
 writeln('--------------------------------');
 close(sv);
end;


procedure sort;
var
 i,j,n,i_min,i_max,min,max:integer;
 temp:region;
begin
 reset(sv);
 n:=0;
 while not eof(sv) do
  begin
   Inc(n);
   read(sv,sd[n]);
  end;
 close(sv);

 for j:=1 to n-1 do
  for i:=1 to n-j do
   if sd[i].pocaz>sd[i+1].pocaz then
    begin
     temp:=sd[i];
     sd[i]:=sd[i+1];
     sd[i+1]:=temp;
    end;

 i_min:=1;
 i_max:=1;
 min:=sd[1].pocaz;
 max:=sd[1].pocaz;
 for i:=2 to n do
  begin
   if sd[n].pocaz<min then
    begin
     i_min:=n;
     min:=sd[n].pocaz;
    end;
   if sd[n].pocaz>max then
    begin
     i_max:=n;
     max:=sd[n].pocaz;
    end;
 end;

 Writeln('Sorted:');
 writeln('-----------------------------');
 writeln('Region      Industrial economical indications');
 writeln('-----------------------------');
 for i:=1 to n do
  with sd[i] do writeln(name: 10, pocaz: 16);
 writeln('--------------------------------');
 Writeln;
 Writeln('Minimal:');
 with sd[i_min] do writeln(name: 10, pocaz: 16);
 Writeln('Maximal:');
 with sd[i_max] do writeln(name: 10, pocaz: 16);
end;

end.
Код:
unit op;

interface

const maxk = 10;

type
 region = record
           name: string[20];
           pocaz: Integer;
          end;
 sved = file of region;
 sdd = array[1..maxk] of region;

var
 sd:sdd;
 sv:sved;

implementation

end.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070