Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 15.05.2018, 18:58   #1
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
Репутация: 10
По умолчанию Pascal. Работа с файлами.Символы не считает.

Подскажите почему программа просто зависает при подсчете кол-ва символов (можно ли сделать чтоб не определенное кол-во пробелов тоже считал) и из-за этого не записывает в 3 файл.
Код:

program Laba_11;

uses crt;

type
  FByte = file of byte;

procedure Copying(var Fl1: text; var Fl2: FByte);
var
  Code: byte;
  CH: char;
begin
  Assign(Fl1, 'file1.txt');
  Reset(Fl1);
  Assign(Fl2, 'file2.txt');
  Rewrite(Fl2);
  while (not eof(Fl1)) do 
  begin
    Read(Fl1, CH);
    Code := ord(CH);
    Write(Fl2, Code);
  end;
  close(Fl1);
end;

procedure Quantity(var Fl: Text; var n: integer);
var
  Buf: integer;
begin
  n := 0;
  Reset(Fl);
  while (not eof(Fl)) do 
  begin
    ReadLn(F1, Buf);
    n := n + Buf;
  end;
end;


procedure Entry(n: integer; var F: text);
begin
  Assign(F, 'file3.txt');
  Reset(F);
  Rewrite(F);
  Write(F, n);
  close(F);
end;

function Comparison(var F: text; var FF: text): boolean;
var
  cd1, cd2: string;
begin
  Comparison := true;
  reset(F);
  reset(FF);
  while (not eof(F)) or (not eof(FF)) do 
  begin
    readln(F, cd1);
    readln(FF, cd2);
    writeln;
    if (cd1 <> cd2) or (cd1 = cd2) then begin
      Comparison := false;
      writeln('Коды первого и третьего файлов не одинаковы!');
      break
    end
    else
      writeln('Коды первого и третьего файлов одинаковы!');
    break
  end;
  close(F);
  close(FF);
end;

var
  number: integer;
  F2: FByte;
  F1, F3: text;

begin
  clrscr;
  Writeln('Данная программа находит количество символов в тексте, записывает ');
  Writeln('результат в третий файл и сравнивает программный код ');
  Writeln('первого и третьего файлов.');
  Writeln;
  Copying(F1, F2);
  Quantity(F1, number);
  writeln;
  Entry(number, F3);
  writeln('Количество символов в тексте  = ', number);
  Comparison(F1, F3);
  Readln;
end.


Последний раз редактировалось Kamelok; 15.05.2018 в 19:05.
Kamelok вне форума   Ответить с цитированием
Старый 15.05.2018, 19:18   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,159
Репутация: 5241
По умолчанию

какое задание? почему первый файл копируется во второй?

а это что за ужас, летящий на крыльях ночи?!!
Цитата:
Сообщение от Kamelok Посмотреть сообщение
Код:

n := n + Buf;

Для чего это делается?!


Сразу укажу на ошибку:
Цитата:
Сообщение от Kamelok Посмотреть сообщение
Код:

procedure Entry(n: integer; var F: text);
begin
  Assign(F, 'file3.txt');
  Reset(F);
  Rewrite(F);
  Write(F, n);
  close(F);
end;

Уберите Reset(f);
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 15.05.2018, 19:44   #3
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
какое задание? почему первый файл копируется во второй?
Задание: Подсчитать количество символов в заданном тексте.
Требуется написать программу, считывающую данные из текстового файла; затем данные записываются в файл прямого доступа (компоненты файла являются целого или вещественного типа (если входные данные символы, то сначала нужно перевести их в коды, а потом записать в файл)); обработать данные (использовать прямой доступ к компонентам файла) и записать результат в текстовый файл

Последний раз редактировалось Kamelok; 15.05.2018 в 19:53.
Kamelok вне форума   Ответить с цитированием
Старый 16.05.2018, 01:19   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,159
Репутация: 5241
По умолчанию

извините, ничем не могу помочь, я ничегошеньки не понял!
при чём здесь
Цитата:
Сообщение от Kamelok Посмотреть сообщение
(компоненты файла являются целого или вещественного типа
как это связано с
Цитата:
Сообщение от Kamelok Посмотреть сообщение
Задание: Подсчитать количество символов в заданном тексте.
открыли файл, посчитали количество символов (кстати, каких именно?)
закрыли файл. всё, задача решена?
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 16.05.2018, 01:35   #5
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
извините, ничем не могу помочь, я ничегошеньки не понял!
Я сделал почти всё(программа считает), только я не знаю куда добавить чтобы после работы со вторым файлом его удалить.
И как то странно переводит слова в код вот этот кусок:
Код:

  while not eof(Fl1) do {Пока не достигнут конец файла} 
  begin
    read(Fl1, CH); {Читаем один символ из File1} 
    Code := ord(CH); {Получаем его код} 
    write(Fl2, Code); {Записываем код в File2} 
  end;


Последний раз редактировалось Kamelok; 16.05.2018 в 01:37.
Kamelok вне форума   Ответить с цитированием
Старый 16.05.2018, 10:19   #6
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,681
Репутация: 2097
По умолчанию

Цитата:
И как то странно переводит слова в код
а какая задача-то здесь должна быть ?
Код:

cod:=ord(ch);//код ЧИСЛО!!! 
s:=format('%3x', [cod] ); //СИМВОЛЬНАЯ(строковое/string !!!) запись числа 
write(f12, s); // или нечто аналогичное для записи НЕСКОЛЬКИХ символов

__________________
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 16.05.2018 в 10:22.
evg_m вне форума   Ответить с цитированием
Старый 16.05.2018, 12:56   #7
Mishka_Soft
Новичок
 
Регистрация: 16.05.2018
Сообщений: 1
Репутация: 10
По умолчанию

Привет!
Посмотрел первую процедуру, даже странно что оно в обще работает (не обижайся):
Код:

procedure Copying(var Fl1: text; var Fl2: FByte);
var
  Code: byte;
  CH: char;
begin
  Assign(Fl1, 'file1.txt');
  Reset(Fl1);
  Assign(Fl2, 'file2.txt');   // Fl2 - у тебя байтовый массив, а должно быть text
  Rewrite(Fl2);
  while (not eof(Fl1)) do 
  begin
    Read(Fl1, CH);
    Code := ord(CH);
    Write(Fl2, Code);
  end;
  close(Fl1);  
// Где закрытие файла Fl2? (если не закрывать, можно все данные потерять.
end;

Mishka_Soft вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не считает программа new_u Помощь студентам 5 05.03.2018 00:19
не правильно считает byMary Помощь студентам 4 08.12.2011 22:00
Даны натуральное число n и символы s1,...,sn. Получите все символы, расположенные до первого двоеточия (Pascal) Татьана Помощь студентам 16 22.09.2011 15:05
СИМВОЛЫ - помогите решить задачу на символы kiko Паскаль 5 30.11.2008 17:09


15:50.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru