Ahoj, potřeboval bych pomoct s programem, který srovná znaky v řetězci tak, že budou nejdříve velká písmena, pak malá a nakonec číslice. Ostatní znaky se odstraní. Př.: 'sAjy5+kJy*r8' bude srovnáno:'AJsjkykyr58'. Děkuji za pomoc.
Fórum › Pascal
Pořadí znaků
Zkus to takhle:
Nadefinuj si 3 proměnné - 1. pro velká písmena např vp, 2.malá písmena,3.pro číslice
Pak přečti vstup jako string.
Potom v cyklu od 1 do délky stringu čti znak po znaku (písmenko po písmenku)(např.text[i])
Když znak bude velké písmeno (text[i] in ['A'..'Z']) pak k proměnné vp přidej ten znak, tj vp := vp+text[i])
Obdobně to udělej pro malá písmena a pak i pro číslice.
Nakonec po projití cyklu budeš mít v proměnných vp - všechna velká za sebou v mp všechna malá za
sebou a pak v ci všechny číslice.
Jednotlivé proměnné pak jednoduše vypíšeš za sebou např. na obrazovku.
Vše, co k tomu potřebuješ, je vlastně jen umět načíst znak, zjistit (pomocí funkce ord), jestli jeho ordinální hodnota odpovídá např. malým písmenům, někde si ten znak uložit a pak jej zase vypsat.
A to vše v cyklu.
Kterou "advanced" funkci Pascalu jsi měl na mysli? Já tam žádnou nevidím.. ;)
synet a co pripojit do retezce jeden znak? umis?
co poznat jestli je znak malej/velkej/jinej? to uz ti tu napovedeli
co nadefinovat tri retezce?
podle toho jakej je znak pripojit do spravneho z nich
a pak vypsat tri retezce po sobe...
vic uz to snad ani zjednodusit nejde
a pokud to za tebe nekdo vyresi tak te vlastne jen podporuje v nepremejsleni
To Synett : No, ono samo programování nepůjde, tomu je třeba obětovat trochu času..
Zkus tomu věnovat jeden večer, popřemýšlet nad tím a zkusit něco napsat. Nemusí to být fungující program, stačí pár myšlenek přepsaných do jazyka Pascalu.
Skopíruj pak svůj výtvor sem a my ti už řeknem, co změnit / zlepšit / ..
Tak všem díky za rady, už jsem to nějak vyřešil, tady dávám výpis, pokud si myslíte, že by šlo něco upravit, tak napište. Díky
uses
SysUtils;
var i,pocetznaku:integer;
vp:string;
mp:string;
ci:string;
text:string;
begin
writeln('Zadejte znaky: ');
readln(text);
pocetznaku:=length(text);
for i := 1 to pocetznaku do
if (text[i] in ['A'..'Z']) then vp:=vp+text[i]
else if (text[i] in ['a'..'z']) then mp:=mp+text[i]
else if (text[i] in ['1'..'9']) then ci:=ci+text[i];
writeln(vp,mp,ci);
readln;
end.
To Synnett
Skoro dobře. Ale je zbytečné do podmínky dávat else (i když to taky jde) a za další také 0 je číslice.
Tedy malá úprava:
for i := 1 to pocetznaku do
begin
if (text[i] in ['A'..'Z']) then vp:=vp+text[i];
if (text[i] in ['a'..'z']) then mp:=mp+text[i];
if (text[i] in ['0'..'9']) then ci:=ci+text[i];
end;
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Ako na vyhladanie znaku/znakovresp.slov v nejakom value? + Ako na ma… — založil Lordest
Prohozeni poradi — založil Joeyz
Pořadí elementů — založil Tomas
Prohození pořadí — založil Ondra_AS
Poradí někdo ;) — založil ajva
Moderátoři diskuze