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
Ahoj, nenašel by se tady někdo, kdo by věděl jak naprogramovat tuto úlohu?
Jedná se o program, který má fungovat na principu složenky, kdy uživatel zadá text (př. devadesátdevět) a slovo má převést na číslo (99).
Dík za pomoc :-)
Offline
↑ Týnuuus:
Ahoj, asi by bylo dobré si stanovit, jak takový zápis čísla bude vypadat, pdole mě něco jako "číslo"tisíc"číslo"set""číslo pro desítky""číslo pro jednotky". Jen je potřeba ošetřit různé možné pády (sto/stě, apod.)
Taky je otázka jaké maximální číslo lze na složence zapsat, zda zkoumat i velké předpony jako biliardy, apod.
Takže to velké slovo označující číslo bych rozdělil na ty tokeny viz výše, přičemž některé jsou nepovinné - např. neříkáme jedno sto, ale jen sto, apod.
To co píšu je jen neformální návod, ale mohl by pomoci.
Offline
mám to vyřešený opačně, tak třeba někomu jinýmu by se hodilo...
edit: pochopitelne, tohle co sem davam je lehci uloha, je to mnohem lepe uchopitelne.
{vypis slovy dane cislo < 10^12, jako na slozenku } { 0 < i < 20 } procedure dvacet(i : integer); begin case i of 1 : write('jedna '); 2 : write('dve '); 3 : write('tri '); 4 : write('ctyri '); 5 : write('pet '); 6 : write('sest '); 7 : write('sedm '); 8 : write('osm '); 9 : write('devet ');10: write('deset '); 11: write('jedenact ');12: write('dvanact '); 13: write('trinact ');14: write('ctrnact '); 15: write('patnact ');16: write('sestnact '); 17: write('sedmnact ');18: write('osmnact '); 19: write('devatenact '); end;end; procedure desitky(i : integer); begin case i of 2: write('dvacet ');3: write('tricet '); 4: write('ctyricet ');5: write('padesat '); 6: write('sedesat ');7: write('sedmdesat '); 8: write('osmdesat ');9: write('devadesat '); end;end; { 0 < i < 100 } procedure sto(i : integer); begin if (i < 20) then dvacet(i) else begin desitky(i div 10); dvacet(i mod 10); end; end; { 0 < i < 1000 } procedure tisic(i : integer); begin case (i div 100) of 0 : write(''); 1 : write('sto ');2 : write('dve ste '); 3 : write('tri sta ');4 : write('ctyri sta '); else dvacet(i div 100); write('set '); end; sto(i mod 100); end; { 0 < i < 1000 000; i = 1000* i1 + i2 } procedure milion(i1, i2 : integer); begin case i1 of 0 : write('');1 : write('tisic '); 2 : write('dva tisice ');3 : write('tri tisice '); 4 : write('ctyri tisice '); else tisic(i1); write('tisic '); end; tisic(i2); end; { 0 < i < 1000 000 000; i = 1000 * ( 1000 * i1 + i2 ) + i3 } procedure miliarda(i1, i2, i3 : integer); begin case i1 of 0 : write(''); 1 : write('milion '); 2 : write('dva miliony '); 3 : write('tri miliony '); 4 : write('ctyri miliony '); else tisic(i1); write('milionu '); end; milion(i2, i3); end; { 0 < i < 1000 000 000 000; i=1000*(1000*(1000*i1+i2)+i3)+i4) } procedure bilion(i1, i2, i3, i4 : integer); begin case i1 of 0 : write(''); 1 : write('miliarda '); 2 : write('dve miliardy '); 3 : write('tri miliardy '); 4 : write('ctyri miliardy '); else tisic(i1); write('miliard '); end; miliarda(i2, i3, i4); end; var cifry : array[1..12] of integer; trojice : array[1..4] of integer; i : integer; s : string; BEGIN readln(s); if (s = '0') then write('nula ') else begin for i:=1 to 12 do cifry[i]:=0; for i:=1 to length(s) do cifry[length(s)+1-i]:=ord(s[i])-ord('0'); for i:=1 to 4 do trojice[i]:=cifry[i*3]*100 + cifry[i*3-1]*10 + cifry[i*3-2]; bilion(trojice[4], trojice[3], trojice[2], trojice[1]); end; writeln; end.
Offline