Другие языки программирования и технологии

Проблема с задачкой..((...помогите, кто может..--->

Задание. Дан текстовый файл. Необходимо ввести с клавиатуры строку символов и выдавать на экран номер позиции в текстовом файле, начиная с которой эта подстрока в нём встречается, и соответствующее сообщение, если этой подстроки нет. Мое предполагаемое решение, которое не катит: program Project9_3; {$APPTYPE CONSOLE} uses SysUtils; var f:text; p,s:string; y:integer; begin Assign(f,'C:\c.txt'); writeln('Vvedite podstroku:'); read(p); Reset(f); while not eof(f) do begin read(f,s); y:=pos(p,s); end; if(y=0)then writeln('Vvedennoi podstroki v dannom faile net!') else begin write('Podstroka nachinaetsya v faile s pozicii: ',y); end; CloseFile(f); readln; end. __________________________________________________ и, наконец, ошибка, которая до меня не доходит: [Pascal Warning] Project9_3.dpr(18): W1036 Variable 'y' might not have been initialized ... помогите пожалуйста..
МЯ
Михаил Я
1 117
вот теперь работает и даже больше.
во первых вы не обнулили Y в начале из-за этого была ошибка.
во вторых нужно писать при считывании из файла не read(f,s); а readLN(f,s); иначе вы будите считывать одну и туже первую строку без конца и края.
в третьих странно что под позицией тут понимается только номер в строке, но в какой строке? кароче я дописал чтобы в конце ещё выдовало номер строки в которой встретилась подстрока первый раз.
ну и программа почемуто у меня с одним readln; завершалась сразу, поэтому вписал второй. если у вас не завершается удалите эту строку.

{$APPTYPE CONSOLE}
uses
SysUtils;
var f:text;
p,s:string;
y,z:integer;
begin
y:=0; z:=0;
writeln('Vvedite podstroku:');
read(p);

AssignFile(f,'c:\c.txt');
Reset(f);

while not Eof(f) do begin
Inc(z);
Readln(f,s);
y:=pos(p,s);

if y<>0 then Break;

end;

if y<>0 then
write('Podstroka nachinaetsya v faile so stroki ',z,' s pozicii ',y)
else write('Podstroki net!');

readln;
readln;
CloseFile(f);
end.
ДФ
Дмитрий Фандюшин
676
Лучший ответ
Михаил Я вы в точности угадали причину зависания экрана!)..но только вот теперь другая напасть: при ожидаемом выводе позиции подстроки в файле, копилятор выводит сообщение о ее несуществовании..((
>Ошибка, которая до меня не доходит:
> [Pascal Warning]

Стыдно не удосужиться переводом с буржуйского на великий и могучий слова "Warning"

Это раз.

Эта задача решается В Делфи гораздо короче и изящнее.

Это два.
Получается, что оператор read(f,s); не выполняется. Предупреждение гласит: переменная "у" должна быть инициализирована до использования. Может у тебя в тексте разные у (одна русская, а другая - латиница)
Михаил Я точно нет..3 раза нет))
Михаил Я точно нет..3 раза нет))
Ну что, решили проблему?
Виктор Седов
Виктор Седов
8 592
Михаил Я пока не выходит(( какой-то непонятный маленький глюк..
Михаил Я пока не выходит(( какой-то непонятный маленький глюк..
Насчёт ошибки - это просто предупреждение. y=0 написать надо, т. е. значение y может быть не присвоено, если файл пустой будет. Всё, чем могу помочь.
Le Rush
Le Rush
2 279
Михаил Я мм..впрочем все равно не катит..(
точно не русская "у"? Да, возможно я сильно привык с С синтаксису, но разве не y==0 вместо y=0 надо писать?
Дамир Тютин
Дамир Тютин
1 981
Михаил Я нет..точно не так;)
Может начальное значение этой переменной какое-нибудь присвоить, а вообще это же не ошибка, а предупреждение, программа все равно должна запускаться. Хотя я на дельфи давно не программил.
Михаил Я да, вы правы, только прога все равно не выдает ничего..виснет и не закрывается..