Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не преобразует...


softerost ©   (2005-09-26 19:55:00) 

Вот, не могу понять почему не преобразует числа в слова больше одной тысячи, Может кто нибудь подскажет где ошибка?:


program proga;
uses crt;
var flag11:boolean;
   i,k:integer;
   x, ch : longint;
   result: string;
begin
clrscr;
{$I-}
while K=0 do begin
write('Vvedite chislo: ');
readln(Ch);
if (ioresult=0)  and (ch>=0) then begin
k:=1;
for i:=1 downto 1 do
 begin
   Flag11:=False;

   X:=Ch div 100;
   case X of
     1: Result:=Result+'sto ';
     2: Result:=Result+'dvesti ';
     3: Result:=Result+'trista ';
     4: Result:=Result+'chetiresta ';
     5: Result:=Result+'pyatsot ';
     6: Result:=Result+'shestsot ';
     7: Result:=Result+'semsot ';
     8: Result:=Result+'vosemsot ';
     9: Result:=Result+'devyatsot ';
   end;

   X:=(Ch mod 100) div 10;
   case X of
     1:
     begin
       X:=Ch mod 100;
       case X of
         10: Result:=Result+'desyat ';
         11: Result:=Result+'odinadsat ';
         12: Result:=Result+'dvenadsat ';
         13: Result:=Result+'trinadsat ';
         14: Result:=Result+'chetirnadsat ';
         15: Result:=Result+'pyatnadsat ';
         16: Result:=Result+'shestnadsat ';
         17: Result:=Result+'semnadsat ';
         18: Result:=Result+'vosemnadsat ';
         19: Result:=Result+'devyatnadsat ';
       end;
       case i of
         3: Result:=Result+'millionov ';
         2: Result:=Result+'tisyach ';
         1: Result:=Result+'rublei ';
       end;
       Flag11:=True;
     end;
     2: Result:=Result+'dvadsat ';
     3: Result:=Result+'tridsat ';
     4: Result:=Result+'sorok ';
     5: Result:=Result+'pyatdesyat ';
     6: Result:=Result+'shestdesyat ';
     7: Result:=Result+'semdesyat ';
     8: Result:=Result+'vosemdesyat ';
     9: Result:=Result+'devyanosto ';
   end;

   X:=Ch mod 10;
   if not Flag11 then
   begin
     case X of
       1:
         if i=2 then
           Result:=Result+'odna '
         else
           Result:=Result+'odin ';
       2:
         if i=2 then
           Result:=Result+'dve '
         else
           Result:=Result+'dva ';
       3: Result:=Result+'tri ';
       4: Result:=Result+'chetiri ';
       5: Result:=Result+'pyat ';
       6: Result:=Result+'shest ';
       7: Result:=Result+'sem ';
       8: Result:=Result+'vosem ';
       9: Result:=Result+'devyat ';
     end;
     case i of
       3:
         case X of
           1: Result:=Result+'million ';
           2,3,4: Result:=Result+'milliona ';
           else
             Result:=Result+'millionov ';
         end;
       2:
         case X of
           1 : Result:=Result+'tisyacha ';
           2,3,4: Result:=Result+'tisyachi ';
           else
             if Ch<>0 then
               Result:=Result+'tisyach ';
         end;
       1:
         case X of
           1 : Result:=Result+'rubl ';
           2,3,4: Result:=Result+'rublyaя ';
           else
             Result:=Result+'rublei ';
         end;
     end;
   end;
    end;
    writeln(result);
    readln;
end
else
writeln('Chislo dolgno bit Maxlongint');
writeln;
end;
end.


Adder   (2005-09-27 01:47:00) [1]

Сдается мне, не Ваш это код...
И не нравится он мне.

"Минимальной кровью"  исправить можно так (пишу только исправленные фрагменты):

var flag11:boolean;
  i,k:integer;
  x, ch : longint;
  result: string;
temp:longint;
begin
..........
//for i:=1 downto 1 do
//begin
// вместо этих двух строк пишем:

for i:=3 downto 1 do
begin
temp:=ch;
 case i of
     3: Ch:= Сh div 1000000;
     2: Ch:= (Ch div 1000) mod 1000;
     1: Ch:= Ch mod 1000;
 end;
   if  (i > 1) and (Ch = 0) then
   begin
       Ch:=Temp;
       Continue;
   end;


Flag11:=False;
..................... здесь оставляем всё как было..................
  end;
  Ch:=Temp; // восстанавливаем Ch перед следующим входом в цикл
   end;
   writeln(result);
   readln;
end
else
writeln('Chislo dolgno bit Maxlongint');
writeln;
end;
end.


Работать будет до 999 999 999 рублей.


softerost   (2005-09-26 21:56:00) [2]

Ну если не правильно испозован цикл, как сделать правильно ?


softerost   (2005-09-26 21:48:00) [3]

... -)


Adder   (2005-09-26 21:34:00) [4]


> softerost ©   (26.09.05 21:28) [5]

Для начала ответьте на вопрос -)


softerost   (2005-09-26 21:28:00) [5]


> и в чем ее смысл?

Тогда как сделать?


Adder   (2005-09-26 21:23:00) [6]

Может и можно.
Но сначала объясните, откуда у Вас взялась вот эта строчка

for i:=1 downto 1 do

и в чем ее смысл?


softerost   (2005-09-26 20:44:00) [7]

Может как то можно переделать код?


softerost   (2005-09-26 20:08:00) [8]

2:
        case X of
          1 : Result:=Result+'tisyacha ';
          2,3,4: Result:=Result+'tisyachi ';
          else
            if Ch<>0 then
              Result:=Result+'tisyach ';
        end;

Вот...


umbra   (2005-09-26 20:04:00) [9]

так у тебя даже слова "тысяча" в проге нет:))


Наверх

Титульная страница Поиск, карта сайта Написать письмо