Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с файлами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Lider
{Задан текстовый файл '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
Цитата
         for i:=1 to length(ch) do
             if (ch[i] in ['0'..'9']) then
                inc(k);
         if k=length(ch) then...

Это ты проверяешь, число это или нет? Тогда учти, что может быть не только цифра, но и десятичная точка.
Lider
Спасиби, что подсказал Trminator.
Еу можно поверить в условии так же:
if {ch[i] in ['0'..'9']) or (ch[i]='.') then
trminator
Вот так работает
===================
Код
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
Большое спасибо тебе Trminator.
Программка работает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.