Помощь - Поиск - Пользователи - Календарь
Полная версия: Текстовый файл
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
D1ma
Код
USES CRT;
VAR
F:TEXT;
I:WORD;
S,C:CHAR;
N:WORD;
BEGIN
CLRSCR;
     ASSIGN(F,'C:\F1.TXT');
     RESET(F);
     I:=0;
     N:=60000;
     WHILE NOT EOF(F) DO
     BEGIN
          IF EOLN(F) THEN
          BEGIN
               IF I<N THEN N:=I;
               I:=0;
               READ(F,C);
               READ(F,C);
          END;
          READ(F,C);
          I:=I+1;
     END;
     IF I<N THEN N:=I;
     IF N=60000 THEN I:=0 ELSE I:=N;
     WRITE('MIN = ');
     WRITELN(I);

END.

Необходимо написать программу, выводящую длину короткой строки. Работает немного неправильно, в чем ошибка?
p.s. +как осуществить посимвольный ввод, используя char? -)
пробывал сделать, вводить по 1 символу ток smile.gif
amega

var
    s:string;
   ...
min:=-1;
while not eof(f) do
  begin
     readln(s);
     if min=-1 then min:=lengs(s);
     if lengs(s)<min then min:=lengs(s);
 end;
writeln('min =',min);
....

D1ma
Цитата(amega @ 6.05.2009 22:12) *


var
    s:string;
   ...
min:=-1;
while not eof(f) do
  begin
     readln(s);
     if min=-1 then min:=lengs(s);
     if lengs(s)<min then min:=lengs(s);
 end;
writeln('min =',min);
....



Нужно без использования string....
volvo
Проблема твоей программы - в том, что если будет пустая строка, то все летит, ты читаешь не те символы #13#10, которые надо читать, а пропуская #13, читаешь #10 и затем - первый символ следующей строки. И еще одно совсем непонятное место - это пляски вокруг I и N перед выводом результата. Не проще выводить N, чем делать то, что ты делаешь? В общем как-то вот так:

USES CRT;
VAR
  F:TEXT;
  I:WORD;
  C:CHAR;
  N:WORD;
BEGIN
CLRSCR;
     ASSIGN(F,'F1.TXT');
     RESET(F);
     I:=0;
     N:=60000;
     WHILE NOT EOF(F) DO
     BEGIN
          IF EOLN(F) THEN
          BEGIN
               IF (i > 0) and (I<N) THEN N:=I;
               I:=0;
               READ(F,C);
               READ(F,C);
          END;

          if not eoln(f) then begin { <--- Это НЕ ветка Else предыдущего условия !!! }
               READ(F,C);
               I:=I+1;
          end;
     END;
     WRITE('MIN = ');
     WRITELN(N);

END.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.