Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
lerusik199
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 24
1

Удалить из файла год с наименьшим номером

24.11.2017, 21:13. Просмотров 860. Ответов 15
Метки нет (Все метки)

Дан файл f содержащий различные даты .Каждая дата-это число,месяц и год. Удалить из файла гол с наименьшим номером
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2017, 21:13
Ответы с готовыми решениями:

Найти год с наименьшим номером
1. Сформирована переменная типа запись, содержащая различные даты. Каждая дата...

Найти год с наименьшим номером дня
38е) Дан файл, содержащий различные даты. Каждая дата — это число, месяц и год....

Вывести на экран по нажатию клавиш год с наименьшим номером
Организовать файл, содержащий различные даты. Каждая дата – это число, месяц и...

Записи: Найти год с наименьшим номером, все весенние даты, самую позднюю дату
Дан файл f, содержащий различные даты. Каждая дата это число месяц и год....

Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год. Найти год с наименьшим номером.
Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год....

15
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4214 / 3063 / 3787
Регистрация: 05.06.2014
Сообщений: 15,398
24.11.2017, 21:19 2
Удалить из файла все весенние даты
Дан файл,содержащий различные даты.Найти самую позднюю дату.
0
lerusik199
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 24
24.11.2017, 21:43  [ТС] 3
а как сделать,что бы его удалить?
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4214 / 3063 / 3787
Регистрация: 05.06.2014
Сообщений: 15,398
25.11.2017, 12:12 4
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
const
  n = 10;
 
type
  date = record
    d: byte;
    m: byte;
    y: integer;
  end;
 
var
  data_min: date;
  F: file of date;
  ind: integer;
  fn: string;
 
procedure CreateFile(fname: string; var ft: file of date);
var
  i: integer;
  dt: date;
begin
  if FileExists(fname) then
    exit
  else
  begin
    rewrite(ft);
    for i := 1 to n do
    begin
      with dt do
      begin
        d := random(30) + 1; 
        write(d:3);
        m := random(12) + 1; 
        write(m:3);
        y := random(200) + 1800; 
        writeln(y:5);
      end;
      write(ft, dt);
    end;
    close(ft);
  end;  
end;
 
procedure Find(var ft: file of date; var id: integer);
var
  dat, dat_min: date;
  i: integer;
begin
  reset(Ft);
  i := 0;
  if not (eof(Ft)) then 
    read(Ft, dat_min);
  reset(ft);  
  while not (eof(Ft)) do
  begin
    read(Ft, dat);
    if dat_min.y > dat.y then 
    begin
      dat_min := dat;
      id := i
    end
    else
    if dat_min.y = dat.y then
      if dat_min.m > dat.m then 
      begin
        dat_min := dat;
        id := i
      end
      else
      if dat_min.m = dat.m then
        if dat_min.d > dat.d then 
        begin
          dat_min := dat;
          id := i
        end;
    inc(i); 
  end;
  close(Ft);
end;
 
procedure ViewFile(var ft: file of date);
var
  dat: date;
  i: integer;
begin
  reset(ft);
  while not (eof(Ft)) do
  begin
    read(Ft, dat);
    writeln(dat.d:3, dat.m:3, dat.y:5);
  end;
  close(ft);
end;
 
procedure DelZap(var ft: file of date; n: integer);
{(C) Puporev}
var
  i: integer;
  rab: date;
begin
  Reset(ft);
  if (filesize(ft) < n) or (n < 0) then
  begin
    writeln('В файле нет такой записи');
    close(ft);
    write('Press Enter...');
    exit;
  end;
  seek(ft, n - 1);
  for i := n - 1 to filesize(ft) - 2 do
  begin
    seek(ft, i + 1);
    read(ft, rab);
    seek(ft, i);
    write(ft, rab);
  end;
  seek(ft, filesize(ft) - 1);
  truncate(ft);
  close(ft);
end;
 
begin
  randomize;
  fn := 'dates.dat';
  assign(F, fn);
  CreateFile(fn, f);
  writeln('Исходный файл: ');
  ViewFile(f);
  Find(f, ind);
  writeln('Номер записи года с наименьшим номером: ', ind + 1);
  reset(f);
  seek(f, ind);
  read(f, data_min);
  writeln(data_min.d:3, data_min.m:3, data_min.y:5);
  DelZap(f, ind + 1);
  writeln('Преобразованный файл: ');
  ViewFile(f);
end.
0
lerusik199
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 24
26.11.2017, 09:37  [ТС] 5
а нельзя эту программу как то проще написать?
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4214 / 3063 / 3787
Регистрация: 05.06.2014
Сообщений: 15,398
26.11.2017, 10:09 6
Цитата Сообщение от lerusik199 Посмотреть сообщение
нельзя эту программу как то проще написать?
Можно. Только поясните, что значит "проще".
0
lerusik199
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 24
27.11.2017, 20:55  [ТС] 7
ну,чтобы она короче была...и более понятна
0
lerusik199
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 24
08.12.2017, 17:28  [ТС] 8
программа ошибки выдает
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4214 / 3063 / 3787
Регистрация: 05.06.2014
Сообщений: 15,398
08.12.2017, 17:31 9
Цитата Сообщение от lerusik199 Посмотреть сообщение
программа ошибки выдает
Где?
0
lerusik199
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 24
08.12.2017, 17:38  [ТС] 10
source.pas(17,50) Error: Parameters or result types cannot contain local type definitions. Use a separate type definition in a type block.
source.pas(22,6) Error: Identifier not found "FileExists"
source.pas(44,29) Error: Parameters or result types cannot contain local type definitions. Use a separate type definition in a type block.
source.pas(81,33) Error: Parameters or result types cannot contain local type definitions. Use a separate type definition in a type block.
source.pas(95,31) Error: Parameters or result types cannot contain local type definitions. Use a separate type definition in a type block.
source.pas(138,4) Fatal: Syntax error, "." expected but "end of file" found
Error: /usr/bin/ppcx64 returned an error exitcode
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4214 / 3063 / 3787
Регистрация: 05.06.2014
Сообщений: 15,398
08.12.2017, 19:22 11
Сразу честно предупреждаю, ТП у меня нет. Проверялось на fpc в режиме совместимости.
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
144
145
146
147
148
149
150
151
const
  n = 10;
 
type
  date = record
    d: byte;
    m: byte;
    y: integer;
  end;
  fdate = file of date;
 
var
  data_min: date;
  F: fdate;
  ind: integer;
  fn: string;
 
function fileexists(var filename: string): boolean;
var
  f: file;
begin
  {$I-}
  assign(f, filename);
  reset(f);
  {$I+}
  fileexists := (ioresult = 0) and (filename <> '');
end;
 
 
procedure CreateFile(fname: string; var ft: fdate);
var
  i: integer;
  dt: date;
begin
  if FileExists(fname) then
    exit
  else
  begin
    rewrite(ft);
    for i := 1 to n do
    begin
      with dt do
      begin
        d := random(30) + 1; 
        write(d:3);
        m := random(12) + 1; 
        write(m:3);
        y := random(200) + 1800; 
        writeln(y:5);
      end;
      write(ft, dt);
    end;
    close(ft);
  end;  
end;
 
procedure Find(var ft: fdate; var id: integer);
var
  dat, dat_min: date;
  i: integer;
begin
  reset(Ft);
  i := 0;
  if not (eof(Ft)) then 
    read(Ft, dat_min);
  reset(ft);
  while not (eof(Ft)) do
  begin
    read(Ft, dat);
    if dat_min.y > dat.y then 
    begin
      dat_min := dat;
      id := i
    end
    else
    if dat_min.y = dat.y then
      if dat_min.m > dat.m then 
      begin
        dat_min := dat;
        id := i
      end
      else
      if dat_min.m = dat.m then
        if dat_min.d > dat.d then 
        begin
          dat_min := dat;
          id := i
        end;
    inc(i); 
  end;
  close(Ft);
end;
 
procedure ViewFile(var ft: fdate);
var
  dat: date;
  i: integer;
begin
  reset(ft);
  while not (eof(Ft)) do
  begin
    read(Ft, dat);
    writeln(dat.d:3, dat.m:3, dat.y:5);
  end;
  close(ft);
end;
 
procedure DelZap(var ft: fdate; n: integer);
{(C) Puporev}
var
  i: integer;
  rab: date;
begin
  Reset(ft);
  if (filesize(ft) < n) or (n < 0) then
  begin
    writeln('В файле нет такой записи');
    close(ft);
    write('Press Enter...');
    exit;
  end;
  seek(ft, n - 1);
  for i := n - 1 to filesize(ft) - 2 do
  begin
    seek(ft, i + 1);
    read(ft, rab);
    seek(ft, i);
    write(ft, rab);
  end;
  seek(ft, filesize(ft) - 1);
  truncate(ft);
  close(ft);
end;
 
begin
  randomize;
  fn := 'dates.dat';
  assign(F, fn);
  CreateFile(fn, f);
  writeln('Исходный файл: ');
  ViewFile(f);
  Find(f, ind);
  writeln('Номер записи года с наименьшим номером: ', ind + 1);
  reset(f);
  seek(f, ind);
  read(f, data_min);
  writeln(data_min.d:3, data_min.m:3, data_min.y:5);
  DelZap(f, ind + 1);
  writeln('Преобразованный файл: ');
  ViewFile(f);
end.
Добавлено через 1 минуту
Цитата Сообщение от lerusik199 Посмотреть сообщение
Error: /usr/bin/ppcx64 returned an error exitcode
Это еще и linux? Вы точно в нативном ТП работаете?
0
lerusik199
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 24
08.12.2017, 19:27  [ТС] 12
да,в тп эта программа пойдёт ?
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4214 / 3063 / 3787
Регистрация: 05.06.2014
Сообщений: 15,398
08.12.2017, 19:34 13
Да теперь уже и кто бы знал-то? Если вы запускаете родной TP под эмулятором DOS, то должно.
ppcx64
Этого зверя вообще не знаю. 64-битный компилятор под linux?
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
4141 / 2735 / 2172
Регистрация: 22.11.2013
Сообщений: 7,641
09.12.2017, 10:44 14
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

ZX Spectrum-128,
год с наименьшим номером может присутствовать в более чем одном экземпляре, уже поэтому лучше не "удалять записи с искомым годом", а "оставить все остальные записи".
1
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4214 / 3063 / 3787
Регистрация: 05.06.2014
Сообщений: 15,398
09.12.2017, 11:10 15
bormant, спасибо.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
4141 / 2735 / 2172
Регистрация: 22.11.2013
Сообщений: 7,641
09.12.2017, 11:39 16
А попроще, отчего ж нельзя, можно
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
const fName='dates.bin';
type
  RDate = record
    d, m: Byte; y: Word;
  end;
var
  f: file of RDate;
  t: RDate;
  i, j: Longint;
  ym: Word;
begin
  Assign(f,fName); {$I-}
  Reset(f);
  if IOResult<>0 then begin
    Rewrite(f);
    if IOResult<>0 then begin
      WriteLn('Ошибка создания файла ',fName); Halt(1);
    end;
    Randomize;
    for i:=0 to 10+Random(10) do with t do begin
      y:=1800+Random(200); m:=1+Random(12); d:=1+Random(29); Write(f,t);
    end;
    Seek(f,0);
  end;
  WriteLn('Содержимое файла:'); ym:=High(ym);
  while not EoF(f) do with t do begin
    Read(f,t); Write('':2,d:2,'.',m:2,'.',y);
    if ym>y then begin ym:=y; i:=FilePos(f); end;
  end; WriteLn; j:=i-1;
  for i:=i to FileSize(f)-1 do begin
    Seek(f,i); Read(f,t);
    if ym<t.y then begin
      Seek(f,j); Write(f,t); Inc(j);
    end;
  end;
  Seek(f,j); Truncate(f); Seek(f,0);
  WriteLn('После замены:');
  while not EoF(f) do with t do begin Read(f,t); Write('':2,d:2,'.',m:2,'.',y); end; WriteLn;
  Close(f);
end.
0
09.12.2017, 11:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2017, 11:39

Удалить из файла строку с номером k
Дано число k и текстовый файл, созданный заранее в редакторе Блокнот. Удалить...

Удалить из текстового файла строку с номером k
Дано число k и текстовый файл, созданный заранее в редакторе Блокнот. Удалить...

Удалить из текстового файла строку с заданным номером
Пусть дан текстовый файл. Удалите строку с заданным номером. Если строки с...


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

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

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