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.

Předmět Autor Datum
Bohes .. Pascal som zabudol, ale nie je tam niečo: LOWER() alebo LCASE() alebo niečo podobné? Len s…
PeterŠ. 16.02.2012 18:23
PeterŠ.
Bohuzial nie, malo by to byt lowercase.
Janooo 16.02.2012 18:25
Janooo
Jistěže existuje jiná možnost. Napsat si tu funkci sám.
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…
pme 16.02.2012 18:34
pme
Dik za radu, ale kniznicu systutils bohuzial nemame.
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…
pme 16.02.2012 18:46
pme
Dakujem. Funguje. :)
Janooo 16.02.2012 18:59
Janooo
Samozrejme, že funguje... Dôležité je, aby si to aj pochopil! :-)
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ž?
AZOR 16.02.2012 20:49
AZOR
{ convert upper case letters to lower case } Valid_Ch := ['A'..'Z']; For Location := 1 to Length(St)…
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…
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á…
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