Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Работа с файлами

Автор: Lider 2.05.2003 14:29

{Задан текстовый файл 'a.txt'. Написать программу, которая округляет вещественные числа, а слова оставляет без изменения.}
Никак не могу понять почему он выполняет неправильно. Он сначала вроде как виснет, a потом появляется файл "А111" за 30Мбайт. Что это?
Посмотрите и если увидите ошибку скажите, пожалуйста.

Код
uses wincrt;
type myfile=text;
var  f,f1:myfile;
    i,k:byte;
    c:real;
    w:word;
    ch:string;
    erccode:integer;
begin
    assign(f,'C:дзадa.txt');
    reset(f);
    Assign(f1,'C:дзадa111.txt');
    Rewrite(f1);
    while not eof(f) do
    begin
         read(f,ch);
         k:=0;
         for i:=1 to length(ch) do
             if (ch[i] in ['0'..'9']) then
                inc(k);
         if k=length(ch) then
         begin
              val(ch,c,erccode);
              w:=round©;
              str(w,ch);
              write(f1,ch)
         end;
         if not(ch[i] in ['0'..'9']) then
            write(f1,ch[i]);
         writeln(f1)
    end;
    close(f);
    close(f1);
    erase(f);
    rename(f1,'a.txt')
end.

Автор: trminator 2.05.2003 20:22

Цитата
         for i:=1 to length(ch) do
             if (ch[i] in ['0'..'9']) then
                inc(k);
         if k=length(ch) then...

Это ты проверяешь, число это или нет? Тогда учти, что может быть не только цифра, но и десятичная точка.

Автор: Lider 2.05.2003 20:28

Спасиби, что подсказал Trminator.
Еу можно поверить в условии так же:
if {ch[i] in ['0'..'9']) or (ch[i]='.') then

Автор: trminator 2.05.2003 20:31

Вот так работает
===================

Код
type myfile=text;
var  f,f1:myfile;
    i,k:byte;
    c:real;
    w:word;
    ch:string;
    erccode:integer;
begin
    assign(f,'C:tempa.txt');
    reset(f);
    Assign(f1,'C:tempa111.txt');
    Rewrite(f1);
    while not eof(f) do
    begin
         readLn(f,ch);{вместо Read}
         k:=0;
         for i:=1 to length(ch) do
             if (ch[i] in ['0'..'9','.']) then
                inc(k);
         if k=length(ch) then
            begin
              val(ch,c,erccode);
              w:=round©;
              str(w,ch);
              writeLn(f1,ch)
            end
         else WriteLn(f1,ch);
    end;
    close(f);
    close(f1);
    erase(f);
    rename(f1,'c:tempa.txt')  {иначе пихает туда же, где сама программа}
end.

Автор: Lider 2.05.2003 20:35

Большое спасибо тебе Trminator.
Программка работает.