Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Pascal - lowercase

Caute. Mam jeden dost zavazny problem. V pascale mi nechce fungovat lowercase. Upcase na tom istom mieste funguje v pohode. Asi to nepodporuje moj pascal, ale problem je v tom, ze tento pascal mame aj v skole, takze musi mi to fungovat v tomto pascale. Proste potrebujem v stringovom retazci zmenit vsetky pismenka na male. Pascal pise error unknown identifier. Ide o Borland Pascal 7.0
Nejak takto:
b:=length(veta);
for i:=1 to b do
veta1:=veta1+lowercase(veta[i]); - ked tu dam upcase, program funguje.

writeln(veta1);

V helpe o lowercase ani zmienka... Neexistuje ina moznost ako to urobit alebo robim nejaku banalnu chybu?Dakujem.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Jistěže existuje jiná možnost. Napsat si tu funkci sám. nový
Wikan 16.02.2012 18:29
Wikan
Problém bude zrejme v tom, že Lowercase je funkcia ! Tzn. že jej predáš ako parameter celý string a… nový
pme 16.02.2012 18:34
pme
Dik za radu, ale kniznicu systutils bohuzial nemame. nový
Janooo 16.02.2012 18:41
Janooo
Aha, to som nevedel... Takže potom asi takto: function lowcase(c : char) : char; begin if (c >= #65… nový
pme 16.02.2012 18:46
pme
Dakujem. Funguje. :) nový
Janooo 16.02.2012 18:59
Janooo
Samozrejme, že funguje... Dôležité je, aby si to aj pochopil! :-) nový
pme 16.02.2012 19:15
pme
ja teda paskala neznám, ale to funguje i na háčkované a vokrouškované U? a Bž? nový
AZOR 16.02.2012 20:49
AZOR
{ convert upper case letters to lower case } Valid_Ch := ['A'..'Z']; For Location := 1 to Length(St)… nový
host 16.02.2012 22:22
host
Pokud se funkce pro prevod na velka jmenuje UpCase, tak se funkce pro prevod na mala bude jmenovat L… nový
Jan Fiala 16.02.2012 22:30
Jan Fiala
Poněkud poopravím, v Turbo Pascalu je pouze funkce Upcase. Funkci Lowcase jsme si museli vždy dodělá… nový
JoDiK 17.02.2012 09:54
JoDiK
TurboPascal má sice help, ale LoCase v něm ani dobře sloužící hlava nenajde... protože TP funkci pro… poslední
JM 17.02.2012 10:10
JM

Problém bude zrejme v tom, že Lowercase je funkcia !
Tzn. že jej predáš ako parameter celý string a výstup bude string s malými písmenami:

Uses sysutils;

Begin
  Writeln (LowerCase('TENTO VÝSTUP BUDE NAPísaný celý s malými písmenami LoWeRcAsE !'));
End.

Aha, to som nevedel...
Takže potom asi takto:

function lowcase(c : char) : char;
begin
if (c >= #65) and (c <= #90) then
   lowcase := chr(ord(c) + 32)
else
   lowcase := c;
end;

begin
  repeat
    clrscr;
    writeln('Zadaj text');
    readln(name);
    for count := 1 to length(name) do
    begin
      if (name[count] >=#65) and (name[count] <=#90) then
         name[count] := lowcase(name[count])
      else
         name[count] := upcase(name[count]);
    end;
    writeln(name);
  writeln;
  write('Chceš pokračovať? (A/N) ');
      readln(answer);
until upcase(answer)='N';

end.

Poněkud poopravím, v Turbo Pascalu je pouze funkce Upcase. Funkci Lowcase jsme si museli vždy dodělávat. V době češtiny se ovšem musela předělat i funkce Upcase, tak aby zvládala i česká písmenka. Vzpomínám si, že když jsem to dělal, zapomněl jsem na přehlasované ü a ö (Ü Ö), které se sem tam vyskytují i u českých jmen (namátkou Hübl).

TurboPascal má sice help, ale LoCase v něm ani dobře sloužící hlava nenajde... protože TP funkci pro převod na malá písmena nemá. :-)

{bez diakritiky, doplnek Upcase}
function LoCase(C: Char): Char; assembler;
asm
  mov al,C
  cmp al,'A'
  jb @@1
  cmp al,'Z'
  ja @@1
  add al,'a'-'A'
@@1:
end;

{s diakritikou, LoChars a UpChars prepsat podle pozadovaneho kodovani}
function LowerCase(C: Char): Char;
const
  LoChars: string[32] = 'abcčdď ... zž';
  UpChars: string[32] = 'ABCČDĎ ... ZŽ';
var
  i: integer;
begin
  i := Pos(C,UpChars);
  if i <> 0 then LowerCase := LoChars[i] else LowerCase := C;
end;

Zpět do poradny Odpovědět na původní otázku Nahoru