Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ строки

Автор: dinni 17.11.2006 21:58

помогите пожалуйста решить задачку..!
Дана строка символов, среди которых есть двоеточие (smile.gif. Определить, сколько символов ему предшествует.
я уже составила прогаммку, но ищу ошибку, помогите мне пожалуйста!!!

var s:string;
i,k:integer;
begin
s:='123:56778';(вводим любое выражение , которое сордержит smile.gif
for i:=1 to length(s) do begin
k:=0; if (s[i]:=':') then (k:=i-1);
writeln('k=',k);readln;
end;end.


Автор: volvo 17.11.2006 22:03

А чего циклом?
Pos(':', s) использовать нельзя?

Автор: dinni 17.11.2006 22:45

pos использовать нельзя, ошибка должна быть в условном операторе у меня: я не понимаю, как мне определить число символов, предшествующих двоеточию

Автор: klem4 17.11.2006 23:03

ну так сделай свой Pos под задание smile.gif


function _Pos(ch: char; const s: String): Integer;
var
i: Integer;
begin
i := 1;
while (i <= Length(s)) and (s[i] <> ch) do inc(i);
if i > Length(s) then _Pos := 0
else _Pos := i;
end;

var
s: String;
p: Integer;
begin
s := '12:345678';
p := _Pos(':', s);
if p = 0 then writeln('No')
else writeln(p - 1);
end.

Автор: volvo 17.11.2006 23:26

dinni, немного подправляем твой код:

var
s:string;
i,k:integer;
begin
s:='123:56778';
k:=0; { <--- Это - перед циклом, а не внутри }
for i:=1 to length(s) do begin
if (s[i]=':') then k := i-1; { <--- После s[i] не ":=" а просто "=" Скобки тоже не нужны }
end;
writeln('k=',k); readln;
end.


Только учти, что если в строке будет несколько ":", то будет выведено число символов перед ПОСЛЕДНИМ из них... smile.gif