Úkol – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Úkol – Pascal – Fórum – Programujte.comÚkol – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Malirka
~ Anonymní uživatel
34 příspěvků
17. 4. 2009   #1
-
0
-

Ahojky.Mám úkol udělat program, který převede celočíselnou hodnotu (do jednotek milionů) na slovní vyjádření podobně jako na složence např. 1245 - jedentisícdvěstěčtyřicetpět.
VSTUP: celé číslo
VÝSTUP: text – slovní vyjádření čísla

Prosím pomocte ,mi někdo..

Nahlásit jako SPAM
IP: 213.168.181.–
Reklama
Reklama
joudicek0
Návštěvník
17. 4. 2009   #2
-
0
-

To Malirka : Kolik na to je casu?

Nahlásit jako SPAM
IP: 212.20.106.–
joudicek0
Návštěvník
17. 4. 2009   #3
-
0
-

Je to v cecku, nemam u sebe nic na pascal ani delphi, ale snad pro inspiraci... Vim ze to neni uplne optimalni, je to sity horkou jehlou, tak budte shovivavy... :smile16: je tam chyba u cislovani po desitce -> jedenact.... dvanact...., nemam cas to osetrovat, ale kdybych to mel udelat, tak bych si vzdycky do dalsiho radu nesl informaci zda predchozi cislo byla 1, a pokud ano, tak bych tam bral jiny switch se spravnym cislovanim....



void cisla(int c)
{
//zadani cisla
int cislo = c;


int ref = 1000000; // do jednotek milionu...
int vysledek;

AnsiString ret,pom;

//-------------------------------- miliony
vysledek = cislo / ref; //celociselne deleni...

if(vysledek == 0) //nic
{
}
else
{
switch (vysledek)
{
case 1: pom = "milion";break;
case 2: pom = "dvamiliony";break;
case 3: pom = "trimiliony";break;
case 4: pom = "ctyrmiliony";break;
case 5: pom = "petmilionu";break;
case 6: pom = "sestmilionu";break;
case 7: pom = "sedmmilionu";break;
case 8: pom = "osmmilionu";break;
case 9: pom = "devetmilionu";break;
default:
case 0:;break;
}

ret = ret + pom;
cislo = cislo - (vysledek * ref);
}

//------------------------------- statisice
ref = ref / 10;
vysledek = cislo / ref; //celociselne deleni...

if(vysledek == 0) //nic
{
}
else
{
switch (vysledek)
{
case 1: pom = "sto";break;
case 2: pom = "dveste";break;
case 3: pom = "trista";break;
case 4: pom = "ctyrista";break;
case 5: pom = "petset";break;
case 6: pom = "sestset";break;
case 7: pom = "sedmset";break;
case 8: pom = "osmset";break;
case 9: pom = "devatset";break;
default:
case 0:;break;
}

ret = ret + pom;
cislo = cislo - (vysledek * ref);
}
//-------------------------------------- desetitisice
ref = ref / 10;
vysledek = cislo / ref; //celociselne deleni...

if(vysledek == 0) //nic
{
}
else
{
switch (vysledek)
{
case 1: pom = "deset";break;
case 2: pom = "dvacet";break;
case 3: pom = "tricet";break;
case 4: pom = "ctyricet";break;
case 5: pom = "padesat";break;
case 6: pom = "sedesat";break;
case 7: pom = "sedmdesat";break;
case 8: pom = "osmdesat";break;
case 9: pom = "devadesat";break;
default:
case 0:;break;
}

ret = ret + pom;
cislo = cislo - (vysledek * ref);
}

//-------------------------------------------tisice
ref = ref / 10;
vysledek = cislo / ref; //celociselne deleni...

if(vysledek == 0) //nic
{
}
else
{
switch (vysledek)
{
case 1: pom = "jedentisic";break;
case 2: pom = "dvatisice";break;
case 3: pom = "tritisice";break;
case 4: pom = "ctyritisice";break;
case 5: pom = "pettisic";break;
case 6: pom = "sesttisic";break;
case 7: pom = "sedmtisic";break;
case 8: pom = "osmtisic";break;
case 9: pom = "devattisic";break;
default:
case 0:;break;
}

ret = ret + pom;
cislo = cislo - (vysledek * ref);
}

//--------------------------------------------- setiny
ref = ref / 10;
vysledek = cislo / ref; //celociselne deleni...

if(vysledek == 0) //nic
{
}
else
{
switch (vysledek)
{
case 1: pom = "jednosto";break;
case 2: pom = "dveste";break;
case 3: pom = "trista";break;
case 4: pom = "ctyrista";break;
case 5: pom = "petset";break;
case 6: pom = "sestset";break;
case 7: pom = "sedmset";break;
case 8: pom = "osmset";break;
case 9: pom = "devatset";break;
default:
case 0:;break;
}

ret = ret + pom;
cislo = cislo - (vysledek * ref);
}
//--------------------------------------------------- desitky
ref = ref / 10;
vysledek = cislo / ref; //celociselne deleni...

if(vysledek == 0) //nic
{
}
else
{
switch (vysledek)
{
case 1: pom = "deset";break;
case 2: pom = "dvacet";break;
case 3: pom = "tricet";break;
case 4: pom = "ctyricet";break;
case 5: pom = "padesat";break;
case 6: pom = "sedesat";break;
case 7: pom = "sedmdesat";break;
case 8: pom = "osmdesat";break;
case 9: pom = "devadesat";break;
default:
case 0:;break;
}

ret = ret + pom;
cislo = cislo - (vysledek * ref);
}
//---------------------------------------------------- jednotky
ref = ref / 10;
vysledek = cislo / ref; //celociselne deleni...

if(vysledek == 0) //nic
{
}
else
{
switch (vysledek)
{
case 1: pom = "jedna";break;
case 2: pom = "dva";break;
case 3: pom = "tri";break;
case 4: pom = "ctyri";break;
case 5: pom = "pet";break;
case 6: pom = "sest";break;
case 7: pom = "sedm";break;
case 8: pom = "osm";break;
case 9: pom = "devet";break;
default:
case 0:;break;
}

ret = ret + pom;
}

//vypsat vysledek

}

Nahlásit jako SPAM
IP: 212.20.106.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
17. 4. 2009   #4
-
0
-

To joudicek : Mám to mít do konce května.Díky

Nahlásit jako SPAM
IP: 213.168.181.–
joudicek0
Návštěvník
17. 4. 2009   #5
-
0
-

To Anonymní uživatel : Tak to je pohoda,ja myslel ze mas zkousku nebo tak... Kdyby byl problem tak rekni....

Nahlásit jako SPAM
IP: 212.20.106.–
Malirka
~ Anonymní uživatel
34 příspěvků
17. 4. 2009   #6
-
0
-

To joudicek : a nemáš icq?že by jsme kecali tam a pořádně bys mi to pomohl udělat...

Nahlásit jako SPAM
IP: 213.168.181.–
joudicek0
Návštěvník
17. 4. 2009   #7
-
0
-

To Malirka : mam...posli mi svoje na mail -> zidz@email.cz

Nahlásit jako SPAM
IP: 212.20.106.–
R R
~ Anonymní uživatel
2 příspěvky
17. 4. 2009   #8
-
0
-

Moje riešenie :smile18: tvári sa to funkčne. Ak nájdete chybu tak dajte vediet :smile1:

program number_to_text;

uses crt;
var cislo:longint;
problem_s_desiatkami:boolean;
problem_s_milionmi:boolean;
procedure nacitaj;
begin
writeln('Prevod cisla na text');
writeln('-*! Radoslav R bara !*-');
write('Zadaj cislo: ');
readln(cislo);
problem_s_desiatkami:=false;
problem_s_milionmi:=false;
end;
function cislo_na_text(cifra,por_cifry:integer):string;
var x:string;
false_problem_s_desiatkami:boolean;
begin
x:='';
false_problem_s_desiatkami:=false;
if (por_cifry<=9) and (por_cifry>0) then begin
if cifra=1 then
x:='jeden'
else if cifra=2 then
x:='dva'
else if cifra=3 then
x:='tri'
else if cifra=4 then
x:='styri'
else if cifra=5 then
x:='pet'
else if cifra=6 then
x:='sest'
else if cifra=7 then
x:='sedem'
else if cifra =8 then
x:='osem'
else if cifra=9 then
x:='devet';
if problem_s_desiatkami=true then begin
x:=x+'nast';
if cifra=0 then
x:='desat'
else if cifra=4 then
x:='strnast';
false_problem_s_desiatkami:=true;
end;
if (por_cifry=2) or (por_cifry=5) or (por_cifry=8) then begin
x:=x+'desiat';
if (cifra=1) or (cifra=0) then begin
x:='';
if cifra=1 then
problem_s_desiatkami:=true;
end
else if cifra=2 then
x:='dvadsat'
else if cifra=3 then
x:='tridsat'
else if cifra=4 then
x:='styridsat';
end
else if (por_cifry=3) or (por_cifry=6) or(por_cifry=9) then begin
if cifra=2 then
x:='dve'
else if cifra=1 then
x:='';
if cifra<>0 then
x:=x+'sto ';
end
else if por_cifry=4 then begin
if problem_s_desiatkami = false then begin
if cifra=1 then
x:=''
else if cifra=2 then
x:='dve';
end;
x:=x+'tisic ';
end
else if por_cifry=7 then begin
if (cifra>=5) or (problem_s_milionmi=true) then
x:=x+'milionov'
else if cifra=1 then
x:=x+'milion'
else if (cifra>=2) and (cifra<5) then
x:=x+'miliony';
x:=x+' ';
problem_s_milionmi:=false;
end;
if false_problem_s_desiatkami=true then
problem_s_desiatkami:=false;
end;
cislo_na_text:=x;
end;
procedure preved_cislo;
var retazec,vysledne_cislo:string;
i,cifra,por_cifry,pom:integer;
begin
str(cislo,retazec);
por_cifry:=length(retazec);
vysledne_cislo:='';
if por_cifry>9 then
writeln('Cislo nesmie byt vecsie ako 999 999 999!')
else begin
for i:=1 to length(retazec) do begin
val(retazec[i],cifra,pom);
vysledne_cislo:=vysledne_cislo+cislo_na_text(cifra,por_cifry);
dec(por_cifry);
end;
if cislo = 0 then vysledne_cislo:='nula';
writeln(vysledne_cislo);
end;
end;
begin
clrscr;
nacitaj;
preved_cislo;
readln;
end.

Nahlásit jako SPAM
IP: 62.168.75.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
18. 4. 2009   #9
-
0
-

To R R : Díky moc

Nahlásit jako SPAM
IP: 213.168.179.–
raddino0
Návštěvník
18. 4. 2009   #10
-
0
-

R R podmineny prikaz case ti asi nic nerika vid? tohle je hrozne prasacky reseni a myslis ze ve skoly by se nelibilo.
Malirka: nastuduj si podmineny prikaz CASE, potom datovy typ STRING, jak nacist promennou snad zvladnes a pak to napises behem par minut.
kdyztak zkus napsat par radek kodu, hod to sem a my ti poradime... ale zkus se nad tim nejdriv zamyslet, je to jednoducha uloha.

Nahlásit jako SPAM
IP: 85.207.184.–
Malirka
~ Anonymní uživatel
34 příspěvků
18. 4. 2009   #11
-
0
-

To raddino : Aahojky.Já jsem to udělala trochu jinak.Mrkni na to jestli to takhle může být:
Uses crt;


function miliony(pocet: Longint): String;
var retezec: String;
begin
retezec:= '';
case pocet of
1:begin
retezec:= retezec + 'milion';
end;
2:begin
retezec:= retezec + 'dvamiliony';
end;
3:begin
retezec:= retezec + 'trimiliony';
end;
4:begin
retezec:= retezec + 'ctyrimiliony';
end;
5:begin
retezec:= retezec + 'petmilionu';
end;
6:begin
retezec:= retezec + 'sestmilionu';
end;
7:begin
retezec:= retezec + 'sedmmilionu';
end;
8:begin
retezec:= retezec + 'osmmilionu';
end;
9:begin
retezec:= retezec + 'devetmilionu';
end;
end;
miliony:= retezec;
end;


function stovky(pocet: Longint): String;
var retezec: String;
begin
retezec:= '';
case pocet of
1:begin
retezec:= 'sto';
end;
2:begin
retezec:= 'dveste';
end;
3:begin
retezec:= 'trista';
end;
4:begin
retezec:= 'ctyrista';
end;
5:begin
retezec:= 'petset';
end;
6:begin
retezec:= 'sestset';
end;
7:begin
retezec:= 'sedmset';
end;
8:begin
retezec:= 'osmset';
end;
9:begin
retezec:= 'devetset';
end;
end;
stovky:= retezec
end;


function desitky(pocet: Longint): String;
var retezec: String;
begin
retezec:= '';
case pocet of
2:begin
retezec:= 'dvacet';
end;
3:begin
retezec:= 'tricet';
end;
4:begin
retezec:= 'ctyrcet';
end;
5:begin
retezec:= 'padesat';
end;
6:begin
retezec:= 'sedesat';
end;
7:begin
retezec:= 'sedmdesat';
end;
8:begin
retezec:= 'osmdesat';
end;
9:begin
retezec:= 'devadesat';
end;
end;
desitky:= retezec;
end;


function des_problem(pocet: Longint): String;
var retezec: String;
begin
retezec:= '';
case pocet of
1:begin
retezec:= 'jedenact';
end;
2:begin
retezec:= 'dvanact';
end;
3:begin
retezec:= 'trinact';
end;
4:begin
retezec:= 'ctrnact';
end;
5:begin
retezec:= 'patnact';
end;
6:begin
retezec:= 'sestnact';
end;
7:begin
retezec:= 'sedmnact';
end;
8:begin
retezec:= 'osmnact';
end;
9:begin
retezec:= 'devatenact';
end;
end;
des_problem:= retezec;
end;


function tisice(pocet: Longint): String;
var retezec: String;
begin
retezec:= '';
case pocet of
1:begin
retezec:= 'jedentisic';
end;
2:begin
retezec:= 'dvatisice';
end;
3:begin
retezec:= 'tritisice';
end;
4:begin
retezec:= 'ctyritisice';
end;
5:begin
retezec:= 'pettisic';
end;
6:begin
retezec:= 'sesttisic';
end;
7:begin
retezec:= 'sedmtisic';
end;
8:begin
retezec:= 'osmtisic';
end;
9:begin
retezec:= 'devettisic';
end;
end;
tisice:= retezec;
end;


function jednotky(pocet: Longint): String;
var retezec: String;
begin
retezec:= '';
case pocet of
1:begin
retezec:= 'jedna';
end;
2:begin
retezec:= 'dva';
end;
3:begin
retezec:= 'tri';
end;
4:begin
retezec:= 'ctyri';
end;
5:begin
retezec:= 'pet';
end;
6:begin
retezec:= 'sest';
end;
7:begin
retezec:= 'sedm';
end;
8:begin
retezec:= 'osm';
end;
9:begin
retezec:= 'devet';
end;
end;
jednotky:= retezec;
end;


var cislo, delitel: Longint;
retezec: String;
desitky_prob: Boolean;
pocet: Longint;

begin
cislo:= 1;

while (cislo <> 0) do
begin
TextColor(Yellow);
Writeln('---- Program,ktery prevede celociselnou hodnotu na slovni vyjadreni----');
TextColor(White);
Writeln;
Writeln('Zadejte cislo (max. 9 999 999) 0 = konec: ');
readln(cislo);
Writeln;
retezec:= '';
if (cislo <> 0) then
begin
delitel:= 1000000;
pocet:= cislo div delitel;
retezec:= miliony(pocet);

cislo:= cislo - (delitel * pocet);
delitel:= delitel div 10;
pocet:= cislo div delitel;
retezec:= retezec + stovky(pocet);

cislo:= cislo - (delitel * pocet);
delitel:= delitel div 10;
pocet:= cislo div delitel;
retezec:= retezec + desitky(pocet);

if (pocet = 1) then
desitky_prob:= true
else
desitky_prob:= false;

cislo:= cislo - (delitel * pocet);
delitel:= delitel div 10;
pocet:= cislo div delitel;

if(desitky_prob = true) then begin
retezec:= retezec + des_problem(pocet) + 'tisic';
end
else
begin
retezec := retezec + tisice(pocet);
end;

cislo:= cislo - (delitel * pocet);
delitel:= delitel div 10;
pocet:= cislo div delitel;
retezec:= retezec + stovky(pocet);

cislo:= cislo - (delitel * pocet);
delitel:= delitel div 10;
pocet:= cislo div delitel;
retezec:= retezec + desitky(pocet);

if (pocet = 1) then
desitky_prob:= true
else
desitky_prob:= false;


cislo:= cislo - (delitel * pocet);
delitel:= delitel div 10;
pocet:= cislo div delitel;

if(desitky_prob = true) then begin
retezec:= retezec + des_problem(pocet);
end
else
begin
retezec:= retezec + jednotky(pocet);
end;
Writeln(retezec);
end;
end;
Writeln('-----------------------------------------------------------------');
Writeln(' Program ukoncite stiskem libovolne klavesy');
Writeln('-----------------------------------------------------------------');
Readln;
end.

Nahlásit jako SPAM
IP: 213.168.179.–
raddino0
Návštěvník
18. 4. 2009   #12
-
0
-

netestoval sem to ale zda se to v poradku. a jenom takovej kosmetickej doplnek. myslim ze by to melo byt v takovehle posloupnosti:
program prevod;
uses crt;
var ....;
function ...;
begin
end.
pod to do pascalu a kdyby to hlasilo chybu tak napis..

Nahlásit jako SPAM
IP: 85.207.184.–
Malirka
~ Anonymní uživatel
34 příspěvků
18. 4. 2009   #13
-
0
-

To raddino : Hodila jsem hned pod Uses to celé var a pod ním jsou ty function a jde to v poho..

Nahlásit jako SPAM
IP: 213.168.179.–
Quiark0
Věrný člen
18. 4. 2009   #14
-
0
-

Já bych jen doplnil jednu radu nutnou k dosažení dalšího programátorského levelu: dole v hlavním těle programu se dost opakuje



cislo:= cislo - (delitel * pocet);
delitel:= delitel div 10;
pocet:= cislo div delitel;
retezec:= retezec + stovky(pocet);


to by bylo vhodné dát do vlastní funkce.

Nahlásit jako SPAM
IP: 193.86.140.–
joudicek0
Návštěvník
19. 4. 2009   #15
-
0
-

To raddino : Ja myslim ze posloupnost function-var vubec nicemu nevadi, naopak si myslim ze pokud pouziju posloupnost var-function, tak promenne za var budou definovany jako globalni coz se mi programatorsky nelibi (ale nejsem si jistej, jsem ceckar....)
To Quiark : Jo tohle jsem prehlidnul kdyz jsem ten program delal :smile1:

Nahlásit jako SPAM
IP: 80.188.37.–
raddino0
Návštěvník
19. 4. 2009   #16
-
0
-

To joudicek : nas ve skole ucili clenit program takhle:

program jmeno;

label;
const;
type;
var;
procedure; , function;

begin
end.


takze mi to jen prislo do oci bijici ale je to jen vec kazdeho kam to napise.

Nahlásit jako SPAM
IP: 85.207.184.–
joudicek0
Návštěvník
19. 4. 2009   #17
-
0
-

To raddino : Jak rikam, jsem ceckar, takze se nehadam....:)

Nahlásit jako SPAM
IP: 80.188.37.–
R R
~ Anonymní uživatel
2 příspěvky
19. 4. 2009   #18
-
0
-

raddino napsal:
R R podmineny prikaz case ti asi nic nerika vid? tohle je hrozne prasacky reseni a myslis ze ve skoly by se nelibilo.



U nás v škole sa profesorke nepáči používanie case. :smile17: A snáď vie prečo. :smile4:

Myslíš že je lepšie urobiť podmienky pre všekty možnosti?? Neni to tak trochu neefektívne??

Nahlásit jako SPAM
IP: 62.168.75.–
Mixxy
~ Anonymní uživatel
179 příspěvků
19. 4. 2009   #19
-
0
-

Kurňa, já se divím, proč se pořád ještě učí pascal?? Proč se rovnou nezačíná s Céčkem??

Nahlásit jako SPAM
IP: 88.101.208.–
Honzc0
Stálý člen
21. 4. 2009   #20
-
0
-

To malirka
Ja jsem na rozdíl od těch co jenom kecají ten tvůj program otestoval a pro některé případy nefunguje:
např.
1.špatně vypíše všechna čísla, která končí 10 (jak v řádu desítek tisíc, tak v řádu desítek)
2.špatně vypíše všechna čísla od 100000 do 100999 a od 110000 do 110999. (samozřejmě i když jsou tam miliony)
3.jakmile je na konci čísla 0 tak program skončí (způsobeno while(cislo)<>0 do)
No nicméně náprava je celkem jednoduchá:
1. do function des_problem(pocet: Longint): String;
var retezec: String;
begin
retezec:= '';
case pocet of
1:begin
retezec:= 'jedenact';
end;
atd.
dopsat
function des_problem(pocet: Longint): String;
var retezec: String;
begin
retezec:= '';
case pocet of
0: retezec:= 'deset'; //dopsat tento jeden řádek, pozn. ty begin a end můžeš všude vymazat-ve všech funkcích.
1:begin
retezec:= 'jedenact';
end;
atd.
2. do hlavního těla programu:
místo while (cislo <> 0) do
dát while (cislo <> -1) do (program pak budeme ukončovat číslem -1)

místo Writeln('Zadejte cislo (max. 9 999 999) 0 = konec: ');
dát Writeln('Zadejte cislo 1...9999999, -1 = konec: ');
nebo Write('Zadejte cislo 1...9999999, -1 = konec: ');

a za první výskyt retezec:= retezec + stovky(pocet);
tedy k tomuto
if (cislo <> 0) then
begin
delitel:= 1000000;
pocet:= cislo div delitel;
retezec:= miliony(pocet);

cislo:= cislo - (delitel * pocet);
delitel:= delitel div 10;
pocet:= cislo div delitel;
retezec:= retezec + stovky(pocet);
atd.
připsat toto
if (cislo <> 0) then
begin
delitel:= 1000000;
pocet:= cislo div delitel;
retezec:= miliony(pocet);

cislo:= cislo - (delitel * pocet);
delitel:= delitel div 10;
pocet:= cislo div delitel;
retezec:= retezec + stovky(pocet);
if cislo div 1000 = 100 then //připsat tyto dva řádky
retezec:= retezec + 'tisic';

atd.
Takto upravené by to už mělo pracovat dobře.

Nahlásit jako SPAM
IP: 85.207.57.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 26 hostů

Podobná vlákna

úkol — založil gandalf555

Ukol — založil adelka17

Ukol — založil Filip

Úkol 5 — založil Filip

úkol — založil Jan Koláčný

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý