Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit

Zdravím,
mám napsat program v Pascalu pro odstranění zadaného znaku (všech jeho výskytů) z řetězu. Napsala jsem ho, ale v Free Pascalu mi nejde zkompilovat. Kde je problém? Děkuji.
Připojuji ještě svůj pokus:
program zbaveni_retezu_zadaneho_znaku;
uses crt;
var retez:string;
znak:char;
i,i1:integer;
begin
clrscr;
write('Zadej retez: ');
readln(retez);
write('Jaky znak odstranit? ');
readln(znak);
i:=0;
repeat
i:=i+1;
until (retez[i]=znak) or (i=ord(retez[0]));
if i<>(ord(retez[0])) then begin
for i1:=i to ord(retez[0])-1 do retez[i1]:=retez[i1+1];
retez[0]:=chr(ord(retez[0])-1);
end;
writeln(retez);
end.EDIT: Tak zkompilovat se mi to podařilo, ale smaže jen první výskyt :(
Offline
↑ janca361:
a prečo tak komplikovane ?
Hádam by stačilo aj:
for i:= 0 to length(retez) do
if(znak = retez[i]) then
delete(retez, i, 1);Offline

↑ hradecek:
Proč to dělat jednoduše, když to jde složitě? :)
Jedná se o práci do školy a nemůžu použít
delete(retez, i, 1)
Offline

Ten cyklus ti tady skonci hned pri prvnim vyskytu:
until (retez[i]=znak) or (i=ord(retez[0]));
Tak podle me staci, kdyz vynechas tu jednu podminku, takze to bude:
until (i=ord(retez[0]));
Dal pak muzes vzit treba to samotne mazani, ktere mas az na konci, a dat ho dovnitr cyklu, takze pokazde, kdyz narazi na ten znak, tak ho vymaze. (s podminkou if (retez[i]=znak)) ) Celkove treba tak:
Offline