Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 11.02.2015
Сообщений: 14
1

Преобразовать файл, исключив повторные вхождения одного и того же числа

11.02.2015, 01:10. Показов 776. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую, форумчане. Столкнулся я с такой проблемой. Дано задание:
"Дан файл, компоненты которого являются целыми числами. Преобразовать его, исключив повторные вхождения одного и того же числа.
Оформлять желательно с процедурами и функциями, нужно предусмотреть вывод содержимого отредактированного файла на экран."

Вот мой код:


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
type
  t_file = file of integer;
 
procedure output_file(s: string; var f: t_file);
 
var
  n: integer;
 
begin
  assign(f,s);
  reset(f);
  while not eof(f) do
    begin
      read(f,n);
      write(n,' ');
    end;
  close(f);
end;
 
 
procedure remove_repeats(var f: t_file);
 
var
  a, b, c: integer;
  i, j, k, l: integer;
 
begin
  reset(f);
  seek(f, 0);
  k := 0; i := 0;
  while i <= filesize(f) - 1 do
  begin
    seek(f, i);
    read(f, a);
    j := i + 1;
    while j <= filesize(f) - 1 - k do
    begin
      seek(f, j);
      read(f, b);
      if b = a then
      begin
        k := k + 1;
        for l := j to filesize(f) - 1 - k do
        begin
          seek(f, l + 1);
          read(f, c);
          seek(f, l);
          write(f, c);
        end;
      end
      else j := j + 1;
    end;
    i := i + 1;
  end;
  seek(f, filesize(f) - k);
  truncate(f);
  close(f);
end;
 
var
  s: string;
  ch: char;
  f: file of integer;
 
begin
  write('Введите имя файла: ');
  readln(s);
  assign(f, s);
  reset(f);
  if eof(f) then
  begin
    close(f);
    writeln('Файл пуст.');
    end
  else
  begin
    close(f);
    remove_repeats(f);
    write('Для вывода файла на экран введите Y, в противном случае N: ');
    readln(ch);
    if (ch = 'Y') or (ch = 'y') then output_file(s, f)
  end;
  readln;
  readln;
end.

Написать код особой проблемы не составило, но я весь день не могу решить проблему с выводом значений на экран.
Допустим, скармливаю программе файл со значениями:
7 7 9 2 9 5 1 3 9 6 0 9 4 4 7 8 7 6 3 6 5 1 2 6 2 5 1 6 7 8 3 9 5 8 7 7 6 9 5 6 9 6 9 9 9 7 6 4 0 1 1 5 0 7 0 6 5 3 0 4 3 4 5 1 3 0 3 5 6 0 1 7 0 7 6 9 2 2 6 5 8 7 6 6 6 8 9 8 8 1 1 3 8 1 2 5 1 7 6 8
На выходе получаю файл следующего содержания:
7 9 2 5 1 3 6 0 4 8
что правильно. Такой результат и должен быть.
Но выводится какая-то ерунда, вроде: "8247 8249 8242 8245 8241 8243 8246 8240 8244"
Файл просто txt. С кодировками файла баловался, результата не дало. Путь до файла короткий (f:\test.txt).
Подскажите, что я делаю не так? Где я накосячил в коде, или может, что-то с файлами не учитываю? Очень на Вас надеюсь, у самого ума не хватает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2015, 01:10
Ответы с готовыми решениями:

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

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

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

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

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32836 / 21173 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
11.02.2015, 02:18 2
Цитата Сообщение от poikl Посмотреть сообщение
Допустим, скармливаю программе файл со значениями:
Прямо текстовый скармливаешь, или где-то есть другая программа, которая генерирует file of integer с такими значениями? Нельзя просто так взять и txt-файл открыть как file of ..., в типизированном хранится не текстовое, а машинное представление данных.
1
0 / 0 / 1
Регистрация: 11.02.2015
Сообщений: 14
11.02.2015, 02:33  [ТС] 3
Да, именно текстовый. Сейчас попробую написать программу для генерирования исходного файла.
Большое спасибо, что ткнули меня носом в мою глупость, а я столько времени на нее потерял...

Добавлено через 10 минут
Только что накидал программку для генерации файлов. Теперь все работает как надо. Огромное Вам спасибо.
Я так думаю, тему можно закрыть. Вопрос решен.
0
11.02.2015, 02:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2015, 02:33
Помогаю со студенческими работами здесь

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

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

Написать процедуру удаления из типизированного файла повторные вхождения одного и того же числа
Написать процедуру удаления из типизированного файла повторные вхождения одного и того же числа. ...

Из файла f получить файл g, исключив повторные вхождения чисел
парни нужна помощь!!!!!!!!! есть задание: Заполнить файл f целыми числами, полученными с...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru