27.10.2014, 18:40 | #1 (permalink) |
Member
Регистрация: 31.05.2014
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Сортировка записей. Паскаль
Код:
program pro1; uses op, obrabotki; var sv: sved; begin assign(sv, 'lep_zar.dat'); vvod(sv,sd); vivod(sv); sort(sv); end. Код:
unit obrabotki; interface uses op; procedure vvod(var sv:sved); procedure vivod(var sv:sved); procedure sort(var sv:sved); implementation procedure vvod(var sv:sved); var i, n: integer; begin assign(sv,'lep_zar.dat'); rewrite(sv); writeln('Введите количество регионов:'); readln(n); for i := 1 to n do begin writeln(i, '-: '); with sd do begin write('Название региона: '); readln(name); write('Экономические показатели: '); readln(pocaz); write(sv, sd); end; end; close(sv); end; procedure vivod(var sv:sved); var i,n: integer; begin assign(sv,'lep_zar.dat'); reset(sv); writeln('-----------------------------'); writeln('Регион ': 10, 'Экономические показатели по промышленному производству': 10); writeln('-----------------------------'); while not eof(sv) do begin read(sv,sd); with sd do begin writeln(sd.name: 10, sd.pocaz: 3); end; end; writeln('--------------------------------'); close(sv); end; procedure sort(var sv:sved); var i,j:integer; temp:region; begin assign(sv,'lep_zar.dat'); reset(sv); while not eof (sv) do begin read(sv,sd); begin for j:=1 to maxk do for i:=1 to maxk -1 do if (sd[i].pocaz > sd[i+1].pocaz) then temp:=sd[i]; sd[i]:=sd[i+1]; sd[i+1]:=temp; end; end; WriteLn(' Average date: ',sd[i]); close(sv); end; end; end; end. Код:
unit op; interface const maxk = 10; type region = record name: string[20]; pocaz: string[5]; end; type sved = file of region; sdd = array[1..maxk] of region; var sd:sdd; implementation end. |
27.10.2014, 18:40 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
У нас нашлись схожие топики Массив записей, Pascal Создать массив записей на паскале Создать двоичное дерево записей Паскаль АВС, сортировка в одномерном массиве без функций и операций Массивы записей Режим учетных записей |
27.10.2014, 20:16 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Как-то Вы очень странно задаёте эти самые показатели: вроде это поле описали, как строковый тип с длиной 5, а в сортировке начинаете их сравнивать по величине... Как Вы себе это представляете?
|
29.10.2014, 16:01 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Нет, извините, но этого "исправления" я совсем не понял. Что такое вообще эти "показатели"? Число? Несколько чисел? Текст? Как это мыслится?
|
29.10.2014, 18:08 | #5 (permalink) |
Member
Регистрация: 31.05.2014
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
У меня sd.pocaz записан как сроковый тип, я поставил integer. Там должны быть числа
Вот задание:8. Создайте файл, содержащий записи следующей структуры: название региона, информация об экономических показателях по промышленному производству основных видов продукции в регионах России в 2000 г. по сравнению с 1992 г. в %. Составьте отчет, содержащий информацию о минимальном и максимальном показателе. Напишите программу реорганизации исходного файла так, чтобы распределить регионы в порядке убывания какого-либо экономического показателя. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
02.11.2014, 15:22 | #8 (permalink) |
Специалист
Регистрация: 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. |
04.11.2014, 17:10 | #9 (permalink) |
Member
Регистрация: 31.05.2014
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо вам большое)
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|