Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 13
1

Как работать с типизированными файлами?

12.01.2014, 20:45. Просмотров 1575. Ответов 20
Метки нет (Все метки)

Я написал массив записей. Теперь надо написать типизированный файл записей, но не знаю как.
Вот массив записей(delphi):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
const nmax=30;
type tMag=record
Name:string[15];
Year:1900..2014;
Number:1..1000;
TimesAYear:1..52;
end;
tMag1=array[1..nmax]of tMag;
 
tmas=array[1..nmax]of real;
 
var
i,n:byte;
permag:tMag1;
 
function Rus(S: String): String;
var
i: byte;
begin
Result := '';
for i := 1 to Length(S) do
case S[i] of
'А'..'п': Result := Result + Chr(Ord(S[i]) - 64);
'р'..'я': Result := Result + Chr(Ord(S[i]) - 16);
'Ё': Result := Result + Chr(240);
'ё': Result := Result + Chr(241);
else
Result := Result + S[i];
end;
end;
procedure obrdan (var x:tMag1;  nx:integer; out y:tMag1);
var
max, imax, ix, jx:integer;
l:1..52;
buf:string[15];
 
begin
//наибольшая переодичность
max:=permag[1].TimesAYear; imax:=1 ;
for ix := 2 to n do
   begin
    if permag[ix].TimesAYear > max then begin max:=permag[ix].TimesAYear; imax:=ix  ;
   end;
   end;
writeln(rus('Журнал с наибольшей периодичностью'));
writeln;
writeln(permag[imax].Name, ' ':2, '(',max, ' ':1, rus('раз(а) в год)')) ;
//заданная переодичность
writeln(rus('Введите периодичность'));
readln(l);
writeln;
writeln(rus('Журналы с заданной периодичностью'));
writeln;
for ix := 1 to n do
  begin
    if permag[ix].TimesAYear=l then
    writeln(permag[ix].Name);
  end;
//сортировка по алфавиту
for ix:=1 to n-1 do
for jx:=1 to n-1 do
if permag[jx+1].Name<permag[jx].Name then
      begin
        buf:=permag[jx].Name;
        permag[jx].Name:=permag[jx+1].Name;
        permag[jx+1].Name:=buf;
      end;
writeln;
writeln(rus('Список журналов,отсортированный по алфавиту'));
   for ix:=1 to n do
     writeln(permag[ix].Name,' ':3);
     writeln;
end;
 
begin
writeln(rus('введите число журналов '));
readln(n);
writeln(rus('запись информации о журналах '));
writeln;
for i:=1 to n do
begin
//Ввод данных
writeln(rus('введите название '));
readln(permag[i].Name);
writeln(rus('введите год выпуска '));
readln(permag[i].Year);
writeln(rus('Номер журнала '));
readln(permag[i].Number);
writeln(rus('Периодичность '));
readln(permag[i].TimesAYear);
end;
writeln;
write(rus('Название Год выпуска Номер Периодичность'));
writeln;
for i:=1 to n do
begin
write(' ',permag[i].Name,' ':4,permag[i].Year,' ':8, permag[i].Number, ' ':7,permag[i].TimesAYear);
writeln;
end ;
obrdan(permag, n, permag);
readln;
end.

Мыслей никаких нет, потому что не знаю. А сдать эту работу надо(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2014, 20:45
Ответы с готовыми решениями:

Действия с типизированными файлами
Действия с типизированными файлами В файле из символов переписать символы в обратном порядке.

Работа с типизированными файлами
создать файл, содержащие сведения о количестве изделий, собранных сборщиками цеха неделю. Каждая...

Работа с типизированными файлами
Дан файл вещественных чисел. Переписать в новый файл все компоненты, расположенные после первой...

Работа с типизированными файлами
Проблема. Дана задача на работу с типизированными файлами (файлами прямого доступа). Задание: Дан...

20
563 / 520 / 198
Регистрация: 24.01.2012
Сообщений: 1,275
12.01.2014, 21:06 2
А чем var f:file of tmag; не устраивает
0
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 13
12.01.2014, 21:15  [ТС] 3
я не разбираюсь просто в типизированном файле. ни reset'ы, ни rewrite'ы, ни assign'ы.. не понимаю. В этом проблема(



У меня есть почти вся прога. Только не могу написать вот эту часть как нужно для типизированного файла:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
procedure obrdan (var x:tMag1;  nx:integer; out y:tMag1);
var
max, imax, ix, jx:integer;
l:1..52;
buf:string[15];
 
begin
//наибольшая переодичность
max:=permag[1].TimesAYear; imax:=1 ;
for ix := 2 to n do
   begin
    if permag[ix].TimesAYear > max then begin max:=permag[ix].TimesAYear; imax:=ix  ;
   end;
   end;
writeln(rus('Журнал с наибольшей периодичностью'));
writeln;
writeln(permag[imax].Name, ' ':2, '(',max, ' ':1, rus('раз(а) в год)')) ;
//заданная переодичность
writeln(rus('Введите периодичность'));
readln(l);
writeln;
writeln(rus('Журналы с заданной периодичностью'));
writeln;
for ix := 1 to n do
  begin
    if permag[ix].TimesAYear=l then
    writeln(permag[ix].Name);
  end;
//сортировка по алфавиту(пузырек)
for ix:=1 to n-1 do
for jx:=1 to n-1 do
if permag[jx+1].Name<permag[jx].Name then
      begin
        buf:=permag[jx].Name;
        permag[jx].Name:=permag[jx+1].Name;
        permag[jx+1].Name:=buf;
      end;
writeln;
writeln(rus('Список журналов,отсортированный по алфавиту'));
   for ix:=1 to n do
     writeln(permag[ix].Name,' ':3);
     writeln;
end;
0
563 / 520 / 198
Регистрация: 24.01.2012
Сообщений: 1,275
12.01.2014, 21:26 4
это пример записи
Pascal
1
2
3
4
5
6
7
8
9
tmagfile= file of tmag; //описание типа файла
var f:tmagfile;  //описание переменной типизированного файла
 
begin
  AssignFile(f,'C:\myfile'); //связать переменную с файлом на диске
  Rewrite(f);// создать файл
  for i:=1 to nmax do  write(f,tmag1[i]); //записать массив в файл
  CloseFile(f); //закрыть файл
end;
0
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 13
12.01.2014, 21:32  [ТС] 5
Я написал часть программы
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
const nmax=30;
type tMag=record
Name:string[15];
Year:1900..2014;
Number:1..1000;
TimesAYear:1..52;
end;
fz=file of tMag;
var
i,n:byte;
f, f1,f2,f3:fz;
 
function Rus(S: String): String;
var
i: byte;
begin
Result := '';
for i := 1 to Length(S) do
case S[i] of
'А'..'п': Result := Result + Chr(Ord(S[i]) - 64);
'р'..'я': Result := Result + Chr(Ord(S[i]) - 16);
'Ё': Result := Result + Chr(240);
'ё': Result := Result + Chr(241);
else
Result := Result + S[i];
end;
end;
procedure vvod(nx:integer; out fx:fz);
var i:integer; tmagx:tmag;
begin
 
for i:=1 to nx do
begin
writeln(rus('Название'));
readln(tmagx.Name );
writeln(rus('Год'));
readln(tmagx.Year );
writeln(rus('Номер'));
readln(tmagx.Number );
writeln(rus('Периодичность'));
readln(tmagx.TimesAYear );
write(fx,tmagx);
writeln;
end;
end;
 
procedure vyvod( var nx:byte; var fx:fz);
var tmagx:tmag;
begin
writeln(rus('Название Год Номер Периодичность')) ;
writeln;
 
while not EOF(fx) do
begin
read(fx,tmagx);
writeln(tmagx.Name:6,' ':3,tmagx.Year:6,' ':3,tmagx.Number:4,' ':3,tmagx.TimesAYear:7);
end;
writeln;
end;
 
 
 
 begin
writeln(rus('введите число журналов'));
readln(n);
writeln;
 
assignfile(f,'f.dat');
rewrite(f);
vvod(n,f);
writeln;
 
reset(f);
vyvod(n,f);
writeln;
 
readln;
 
end.
А вот эту часть не могу записать

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
procedure obrdan (var x:tMag1;  nx:integer; out y:tMag1);
var
max, imax, ix, jx:integer;
l:1..52;
buf:string[15];
 
begin
//наибольшая переодичность
max:=permag[1].TimesAYear; imax:=1 ;
for ix := 2 to n do
   begin
    if permag[ix].TimesAYear > max then begin max:=permag[ix].TimesAYear; imax:=ix  ;
   end;
   end;
writeln(rus('Журнал с наибольшей периодичностью'));
writeln;
writeln(permag[imax].Name, ' ':2, '(',max, ' ':1, rus('раз(а) в год)')) ;
//заданная переодичность
writeln(rus('Введите периодичность'));
readln(l);
writeln;
writeln(rus('Журналы с заданной периодичностью'));
writeln;
for ix := 1 to n do
  begin
    if permag[ix].TimesAYear=l then
    writeln(permag[ix].Name);
  end;
//сортировка по алфавиту(пузырек)
for ix:=1 to n-1 do
for jx:=1 to n-1 do
if permag[jx+1].Name<permag[jx].Name then
      begin
        buf:=permag[jx].Name;
        permag[jx].Name:=permag[jx+1].Name;
        permag[jx+1].Name:=buf;
      end;
writeln;
writeln(rus('Список журналов,отсортированный по алфавиту'));
   for ix:=1 to n do
     writeln(permag[ix].Name,' ':3);
     writeln;
end;

Именно эту часть можете помочь написать? Я просто суть не знаю((
0
563 / 520 / 198
Регистрация: 24.01.2012
Сообщений: 1,275
12.01.2014, 21:46 6
это пример чтения
Pascal
1
2
3
4
5
6
7
8
9
10
begin
  AssignFile(f,'C:\myfile'); //связать переменную с файлом на диске
  Reset(f);// открыть файл (должен существовать на диске)
  i:=1;
  while (not eof(f)) and (i<=nmax) do begin //пока не прочитан весь файл и не переполнен массив
    read(f,tmag1[i]); //прочитать элемент массива из файла
    inc(i);
  end;  
  CloseFile(f); //закрыть файл
end;
Добавлено через 12 минут
И что именно не получается?
0
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 13
12.01.2014, 21:49  [ТС] 7
Я просто не разбираюсь. Надо, чтобы использовалась процедура, которую я написал выше. А как это реализовать, не понимаю. Не знаю как и где использовать rewrite, reset, assign и прочее. Не понимаю.
0
563 / 520 / 198
Регистрация: 24.01.2012
Сообщений: 1,275
12.01.2014, 22:09 8
после окончания записи в файл его нужно закрыть. В 79 строку нужно вставить CloseFile(f); после окончания чтения - тоже (83 строка) . А что, нужно во втором куске кода?
0
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 13
12.01.2014, 22:17  [ТС] 9
Просто написать его. После процедуры вывода написать процедуру обработки(procedure obrdan). Не получается.
0
563 / 520 / 198
Регистрация: 24.01.2012
Сообщений: 1,275
12.01.2014, 22:30 10
Сначала AssignFile, чтобы связать переменну с именем файла. Если файл всего один - то можно сделать 1 раз в начале программы.
Потом - в зависимости от того, что нужно. Если файл уже существует на диске и его нужно прочитать или добавить данные - нужно использовать reset, если файл не существует или если он существует, но его нужно стереть и записать заново с другими данными - нужно использовать rewrite . После окончания работы с файлом его нужно закрыть CloseFile .

Добавлено через 6 минут
Так в процедуре obrdan вообще нет работы с файлами, что в ней не получается?
1
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 13
12.01.2014, 22:32  [ТС] 11
Так надо сделать, чтобы была. Из массива записей сделать файл записей. В этом и суть
0
563 / 520 / 198
Регистрация: 24.01.2012
Сообщений: 1,275
12.01.2014, 22:39 12
Так я выше писал код, который в цикле записи из массива пишет в файл. Или нужно, чтобы весь массив записывался в файл одной командой записи?
0
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 13
12.01.2014, 22:42  [ТС] 13
Массив записей и файл записей - две разные, независимые программы. Просто на основе массива записей сделать файл записей. И осталось только дописать ту часть, где procedure obrdan.
0
563 / 520 / 198
Регистрация: 24.01.2012
Сообщений: 1,275
12.01.2014, 22:59 14
в начале процедуры или до вызова процедуры нужно выполнить
Pascal
1
2
AssignFile(f,'f.dat');
  Rewrite(f);
Вот строки 40 и 41 в процедуре
Pascal
1
2
 for ix:=1 to n do
     writeln(permag[ix].Name,' ':3);
их нужно отредактировать
Pascal
1
2
3
4
 for ix:=1 to n do begin
     writeln(permag[ix].Name,' ':3);
     write(f,permag[ix])
     end;
после цикла или после вызова процедуры нужно выполнить CloseFile(f);
0
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 13
12.01.2014, 23:41  [ТС] 15
Cпасибо, сейчас попробую

Добавлено через 29 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
procedure vvod(nx:integer; out fx:fz);
var i:integer; tmagx:tmag;
begin
 
for i:=1 to nx do
begin
writeln(rus('Название'));
readln(tmagx.Name );
writeln(rus('Год'));
readln(tmagx.Year );
writeln(rus('Номер'));
readln(tmagx.Number );
writeln(rus('Периодичность'));
readln(tmagx.TimesAYear );
write(fx,tmagx);
writeln;
end;
end;
 
procedure vyvod( var nx:byte; var fx:fz);
var tmagx:tmag;
begin
writeln(rus('Название Год Номер Периодичность')) ;
writeln;
 
while not EOF(fx) do
begin
read(fx,tmagx);
writeln(tmagx.Name:6,' ':3,tmagx.Year:6,' ':3,tmagx.Number:4,' ':3,tmagx.TimesAYear:7);
end;
writeln;
end;
 
procedure obrdan(var x:fz; n:integer; out y:fz);
 var
max, imax, ix, jx:integer;
l:1..52;
buf:string[15];
 
begin
//наибольшая переодичность
AssignFile(f,'f.dat');
  Rewrite(f);
max:=permag[1].TimesAYear; imax:=1 ;
for ix := 2 to n do
   begin
    if permag[ix].TimesAYear > max then begin max:=permag[ix].TimesAYear; imax:=ix  ;
   end;
   end;
writeln(rus('Журнал с наибольшей периодичностью'));
writeln;
writeln(permag[imax].Name, ' ':2, '(',max, ' ':1, rus('раз(а) в год)')) ;
//заданная переодичность
writeln(rus('Введите периодичность'));
readln(l);
writeln;
writeln(rus('Журналы с заданной периодичностью'));
writeln;
for ix := 1 to n do
  begin
    if permag[ix].TimesAYear=l then
    writeln(permag[ix].Name);
  end;
//сортировка по алфавиту(пузырек)
for ix:=1 to n-1 do
for jx:=1 to n-1 do
if permag[jx+1].Name<permag[jx].Name then
      begin
        buf:=permag[jx].Name;
        permag[jx].Name:=permag[jx+1].Name;
        permag[jx+1].Name:=buf;
      end;
writeln;
writeln(rus('Список журналов,отсортированный по алфавиту'));
   for ix:=1 to n do begin
     writeln(permag[ix].Name,' ':3);
     write(f,permag[ix])
     end;
     writeln;
end;
В процедуре obrdan везде, где permag, выдаёт ошибку Class do not have a default property
0
563 / 520 / 198
Регистрация: 24.01.2012
Сообщений: 1,275
13.01.2014, 00:13 16
По этому куску кода непонятно где ошибка. Нужен код полностью. Поэтому я добавил запись отсортированного по алфавиту списка журналов в первоначальный код.
1
Вложения
Тип файла: zip Project1.zip (1.1 Кб, 2 просмотров)
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 13
13.01.2014, 00:28  [ТС] 17
Cпасибо)
А не подскажешь, как ввод и вывод тоже через процедуры сделать?
0
563 / 520 / 198
Регистрация: 24.01.2012
Сообщений: 1,275
13.01.2014, 00:48 18
Перетянул ввод и вывод в процедуры
1
Вложения
Тип файла: zip Project1.zip (1.2 Кб, 4 просмотров)
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 13
13.01.2014, 11:15  [ТС] 19
Огромное Спасибо)
От души)

Добавлено через 10 часов 17 минут
А можешь подсказать, как и ввод/вывод сделать так, чтобы они тоже к файлу обращались?
Я переписал немного код для этого, но выдаёт ошибки, не могу исправить
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
const nmax=30;
type tMag=record
Name:string[15];
Year:1900..2014;
Number:1..1000;
TimesAYear:1..52;
end;
fz=file of tMag;
var
i,n:byte;
f, f1,f2,f3:fz;
permag:tMag;
function Rus(S: String): String;
var
i: byte;
begin
Result := '';
for i := 1 to Length(S) do
case S[i] of
'А'..'п': Result := Result + Chr(Ord(S[i]) - 64);
'р'..'я': Result := Result + Chr(Ord(S[i]) - 16);
'Ё': Result := Result + Chr(240);
'ё': Result := Result + Chr(241);
else
Result := Result + S[i];
end;
end;
procedure vvod(nx:integer; out fx:fz);
var i:integer; tmagx:tmag;
begin
 
for i:=1 to nx do
begin
writeln(rus('Название'));
readln(tmagx.Name );
writeln(rus('Год'));
readln(tmagx.Year );
writeln(rus('Номер'));
readln(tmagx.Number );
writeln(rus('Периодичность'));
readln(tmagx.TimesAYear );
write(fx,tmagx);
writeln;
end;
end;
 
procedure vyvod( var nx:byte; var fx:fz);
var tmagx:tmag;
begin
writeln(rus('Название Год Номер Периодичность')) ;
writeln;
 
while not EOF(fx) do
begin
read(fx,tmagx);
writeln(tmagx.Name:6,' ':3,tmagx.Year:6,' ':3,tmagx.Number:4,' ':3,tmagx.TimesAYear:7);
end;
writeln;
end;
 
procedure obrdan(var x:fz; n:integer; out y:fz);
 var
max, imax, ix, jx:integer;
l:1..52;
buf:string[15];
 
begin
//наибольшая переодичность
AssignFile(f,'f.dat');
  Rewrite(f);
max:=permag[1].TimesAYear; imax:=1 ;
for ix := 2 to n do
   begin
    if permag[ix].TimesAYear > max then begin max:=permag[ix].TimesAYear; imax:=ix  ;
   end;
   end;
writeln(rus('Журнал с наибольшей периодичностью'));
writeln;
while not EOF(f) do
writeln(permag[imax].Name, ' ':2, '(',max, ' ':1, rus('раз(а) в год)')) ;
//заданная переодичность
writeln(rus('Введите периодичность'));
readln(l);
writeln;
writeln(rus('Журналы с заданной периодичностью'));
writeln;
reset(f);
for ix := 1 to n do
  begin
    if permag[ix].TimesAYear=l then
    writeln(permag[ix].Name);
  end;
//сортировка по алфавиту(пузырек)
for ix:=1 to n-1 do begin
for jx:=1 to n-1 do
if permag[jx+1].Name<permag[jx].Name then
      begin
        buf:=permag[jx].Name;
        permag[jx].Name:=permag[jx+1].Name;
        permag[jx+1].Name:=buf;
      end;
writeln;
writeln(rus('Список журналов,отсортированный по алфавиту'));
   for ix:=1 to n do begin
     writeln(permag[ix].Name,' ':3);
     write(f,permag[ix])
     end;
     writeln;
end;
 begin
writeln(rus('введите число журналов'));
readln(n);
 writeln;
assignfile(f,'f.dat');
rewrite(f);
vvod(n,f);
writeln;
 
reset(f);
vyvod(n,f);
writeln;
 
reset(f);
obrdan(f,n,g);
writeln;
readln;
end
0
563 / 520 / 198
Регистрация: 24.01.2012
Сообщений: 1,275
13.01.2014, 12:09 20
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
const nmax=30;
type tMag=record
Name:string[15];
Year:1900..2014;
Number:1..1000;
TimesAYear:1..52;
end;
fz=file of tMag;
var
i,n:byte;
f,g, f1,f2,f3:fz;
permag:array[1..nmax] of tMag;
function Rus(S: String): String;
var
i: byte;
begin
Result := '';
for i := 1 to Length(S) do
case S[i] of
'А'..'п': Result := Result + Chr(Ord(S[i]) - 64);
'р'..'я': Result := Result + Chr(Ord(S[i]) - 16);
'Ё': Result := Result + Chr(240);
'ё': Result := Result + Chr(241);
else
Result := Result + S[i];
end;
end;
procedure vvod(nx:integer; out fx:fz);
var i:integer; tmagx:tmag;
begin
 
for i:=1 to nx do
begin
writeln(rus('Название'));
readln(tmagx.Name );
writeln(rus('Год'));
readln(tmagx.Year );
writeln(rus('Номер'));
readln(tmagx.Number );
writeln(rus('Периодичность'));
readln(tmagx.TimesAYear );
write(fx,tmagx);
writeln;
end;
end;
 
procedure vyvod( var nx:byte; var fx:fz);
var tmagx:tmag;
begin
writeln(rus('Название Год Номер Периодичность')) ;
writeln;
 
while not EOF(fx) do
begin
read(fx,tmagx);
writeln(tmagx.Name:6,' ':3,tmagx.Year:6,' ':3,tmagx.Number:4,' ':3,tmagx.TimesAYear:7);
end;
writeln;
end;
 
procedure obrdan(var x:fz; n:integer; out y:fz);
 var
max, imax, ix, jx:integer;
l:1..52;
buf:string[15];
 
begin
//наибольшая переодичность
//считывание данных из файла
  AssignFile(f,'f.dat');
  Reset(f);
  for ix:=1 to n do begin
    read(f,permag[ix]);
  end;
  CloseFile(f);
//наибольшая переодичность
  max:=permag[1].TimesAYear; imax:=1 ;
for ix := 2 to n do
   begin
    if permag[ix].TimesAYear > max then begin max:=permag[ix].TimesAYear; imax:=ix  ;
   end;
   end;
writeln(rus('Журнал с наибольшей периодичностью'));
writeln;
writeln(permag[imax].Name, ' ':2, '(',max, ' ':1, rus('раз(а) в год)')) ;
//заданная переодичность
writeln(rus('Введите периодичность'));
readln(l);
writeln;
writeln(rus('Журналы с заданной периодичностью'));
writeln;
reset(f);
for ix := 1 to n do
  begin
    if permag[ix].TimesAYear=l then
    writeln(permag[ix].Name);
  end;
//сортировка по алфавиту(пузырек)
for ix:=1 to n-1 do begin
for jx:=1 to n-1 do
if permag[jx+1].Name<permag[jx].Name then
      begin
        buf:=permag[jx].Name;
        permag[jx].Name:=permag[jx+1].Name;
        permag[jx+1].Name:=buf;
      end;
writeln;
end;
//вывод отсортированного массива на экран и в файл
Rewrite(f);
writeln(rus('Список журналов,отсортированный по алфавиту'));
   for ix:=1 to n do begin
     writeln(permag[ix].Name,' ':3);
     write(f,permag[ix])
     end;
     writeln;
CloseFile(f);
end;
 begin
writeln(rus('введите число журналов'));
readln(n);
 writeln;
assignfile(f,'f.dat');
rewrite(f);
vvod(n,f);
writeln;
CloseFile(f);
reset(f);
vyvod(n,f);
CloseFile(f);
writeln;
 
obrdan(f,n,g);
writeln;
readln;
end.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2014, 12:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работа с типизированными файлами
Добрый вечер! Помогите пожалуйста, почему программа не создает типизированный файл?? unit Autor;...

Работа с типизированными файлами
Надо на основании файла с символами создать файл с их порядковыми номерами в системе ASCII Есть...

задание с типизированными файлами
1)подготовить программу, формирующую на основе информации, вводимой пользователем с клавиатуру ,...

Программа с типизированными файлами
Ребята, очень срочно нужно сделать программу, помогите пожалуйста. В программе должны быть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.