Помогите исправить задачку(паскль)

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
ромка)
Сообщения: 41
Зарегистрирован: 26 мар 2008, 17:53

Имеется текстовый файл. Выяснить, имеются ли в нем строки, начинающиеся с буквы «т». Если да, то определить номер первой из таких строк.
Вот то что смог,вроде бы правильно но не работает:
[syntax='Delphi']
const namef='c:\ffile.txt';
var n:word;
s:string;
find:boolean;
f:text;
begin
assign(f,namef);
reset(f);
n:=0;
find:=false;
while not eof(f) do
begin
readln(f,s);
inc(n);
if s[1]='t' then find:=true;
break;
end;
end.
if find then write(n);
else write('ne naydenno');
end.
[/syntax]
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

Так - правильно.
[syntax='Delphi']
Program Corrected;
Const FileName='c:\ffile.txt';
Var N:Integer;
S:String;
Found:Boolean;
F:Text;
Begin
Assign(F,FileName);
Reset(F);
N:=0;
Find:=False;
While Not EOF(F) Do
Begin
Readln(F,S);
Inc(N);
If S[1]='t' Then Found:=True;
Break;
End;
If Found Then Write(N)
Else Write('Not found');
Close(F);
End.
[/syntax]
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

Тему переименовал - если задача такая лёгкая, почему вы её не написали?
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
ромка)
Сообщения: 41
Зарегистрирован: 26 мар 2008, 17:53

нет она не работает.работает только тогда когда 't' окажеться самым первым символом во всем документе.а если она стоит первой на другой строке кроме первой программа пишет 'not found'/т.е она воспринимает только первую строку
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

[syntax='Delphi']
Program Corrected;
Const FileName='c:\ffile.txt';
Var N:Integer;
S:String;
Found:Boolean;
F:Text;
Begin
Assign(F,FileName);
Reset(F);
N:=0;
Found:=False;
While Not EOF(F) Do
Begin
Readln(F,S);
Inc(N);
If S[1]='t' Then
Begin
Found:=True;
Break;
End;
End;
If Found Then Write(N)
Else Write('Not found');
Close(F);
End.
[/syntax]
Ну забыл я ещё одну ошибку исправить...
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
ромка)
Сообщения: 41
Зарегистрирован: 26 мар 2008, 17:53

какую ошибку?
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

[syntax='Delphi']
If S[1]='t' Then
BEGIN
Found:=True;
Break;
END;
[/syntax]
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
ромка)
Сообщения: 41
Зарегистрирован: 26 мар 2008, 17:53

я не понял в чём ошибка.ведь прога работает
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

ромка) писал(а):я не понял в чём ошибка.ведь прога работает

Вам же ответили постом выше. Такое ощущение, что прогу писали не вы, либо просто невнимательность.
Если опираться на тот вариант, что был у вас, то "Break;" т.е. остановка цикла, происходила после того как проверится только первая строка. Дальше естественно ничего у вас и не работало. Смотрите внимательно условие.
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Проще говоря:
If S[1]='t' Then
BEGIN
Found:=True;
Break;
END;
- если строка начинается с "т", поставить флаг в истину и прекратить цикл.
if s[1]='t' then find:=true;
break;
- если строка начинается с "т", поставить флаг в истину, после чего В ЛЮБОМ СЛУЧАЕ прекратить цикл
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить