Другие языки программирования и технологии
Проблема с задачкой..((...помогите, кто может..--->
Задание. Дан текстовый файл. Необходимо ввести с клавиатуры строку символов и выдавать на экран номер позиции в текстовом файле, начиная с которой эта подстрока в нём встречается, и соответствующее сообщение, если этой подстроки нет. Мое предполагаемое решение, которое не катит: 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 ... помогите пожалуйста..
вот теперь работает и даже больше.
во первых вы не обнулили 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.
во первых вы не обнулили 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.
Михаил Я
вы в точности угадали причину зависания экрана!)..но только вот теперь другая напасть: при ожидаемом выводе позиции подстроки в файле, копилятор выводит сообщение о ее несуществовании..((
>Ошибка, которая до меня не доходит:
> [Pascal Warning]
Стыдно не удосужиться переводом с буржуйского на великий и могучий слова "Warning"
Это раз.
Эта задача решается В Делфи гораздо короче и изящнее.
Это два.
> [Pascal Warning]
Стыдно не удосужиться переводом с буржуйского на великий и могучий слова "Warning"
Это раз.
Эта задача решается В Делфи гораздо короче и изящнее.
Это два.
Получается, что оператор read(f,s); не выполняется. Предупреждение гласит: переменная "у" должна быть инициализирована до использования. Может у тебя в тексте разные у (одна русская, а другая - латиница)
Ну что, решили проблему?
Насчёт ошибки - это просто предупреждение. y=0 написать надо, т. е. значение y может быть не присвоено, если файл пустой будет. Всё, чем могу помочь.
Михаил Я
мм..впрочем все равно не катит..(
точно не русская "у"? Да, возможно я сильно привык с С синтаксису, но разве не y==0 вместо y=0 надо писать?
Михаил Я
нет..точно не так;)
Может начальное значение этой переменной какое-нибудь присвоить, а вообще это же не ошибка, а предупреждение, программа все равно должна запускаться. Хотя я на дельфи давно не программил.
Михаил Я
да, вы правы, только прога все равно не выдает ничего..виснет и не закрывается..
Похожие вопросы
- Паскаль, не трудная задачка, помогите начинающему программисту!
- Третий день ипусь над воздушным сопротивлением в Unity на C#. Кто силен? Помогите пожалуйста! (МНОГОБУКВ >>)
- C++ ЗАДАЧКА, ПОМОГИТЕ ПЛИЗ
- проблема с антивирусом! помогите...
- Проблемы по WORDу... помогите пож...
- Программисты - совы, помогите!)) <СИ>
- У меня проблемы с HTML!!! Помогите ПЛЗ!!!
- проблема со скайпом помогите!!!!
- Проблема с браузером, помогите...
- Коллеги дизайнеры! Проблема - творческо-правовая, помогите!!!