Matematické Fórum

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

#1 29. 02. 2016 15:33

Týnuuus
Zelenáč
Příspěvky: 8
Škola: MFF UK
Pozice: student
Reputace:   
 

Složenka

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

 

#2 29. 02. 2016 16:47

iqbigbang
Zelenáč
Příspěvky: 16
Reputace:   
 

Re: Složenka

Napadlo mě zda by to nešlo tím způsobem,že by program postupně testoval zda se v zadaném textu nevyskytuje slovo deset, dvacet, třicet, dva, tři atd...

Offline

 

#3 29. 02. 2016 18:50

check_drummer
Příspěvky: 5183
Reputace:   106 
 

Re: Složenka

↑ 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.


"Máte úhel beta." "No to nemám."

Offline

 

#4 06. 03. 2016 22:05 — Editoval xxxxx19 (06. 03. 2016 22:06)

xxxxx19
Místo: Praha
Příspěvky: 110
Škola: MFF UK (2011-2018, FAP Mgr.)
Pozice: Aktuár
Reputace:   
 

Re: Složenka

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.

Code:

{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

 

#5 09. 03. 2016 19:52

Týnuuus
Zelenáč
Příspěvky: 8
Škola: MFF UK
Pozice: student
Reputace:   
 

Re: Složenka

Děkuji za rady a nápady :)
Dík za to opačné, to však již mám a právě, že netuším jak to udělat naopak :-)  ale snad to nějak sepíši.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson