Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Не преобразует...   Найти похожие ветки 

 
softerost ©   (2005-09-26 19:55) [0]

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


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.


 
umbra ©   (2005-09-26 20:04) [1]

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


 
softerost ©   (2005-09-26 20:08) [2]

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

Вот...


 
softerost ©   (2005-09-26 20:44) [3]

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


 
Adder ©   (2005-09-26 21:23) [4]

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

for i:=1 downto 1 do

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


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


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

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


 
Adder ©   (2005-09-26 21:34) [6]


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

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


 
softerost ©   (2005-09-26 21:48) [7]

... -)


 
softerost ©   (2005-09-26 21:56) [8]

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


 
Adder ©   (2005-09-27 01:47) [9]

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

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

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 рублей.



Страницы: 1 вся ветка

Текущий архив: 2005.10.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
2-1127322319
logan
2005-09-21 21:05
2005.10.16
Открытие файла...


10-1105835658
GanibalLector
2005-01-16 03:34
2005.10.16
конект к открытому документу...


1-1127479554
Duk_
2005-09-23 16:45
2005.10.16
HTML page


1-1127867033
Димыч
2005-09-28 04:23
2005.10.16
Контейнер с файлами


1-1127732689
Vladimir88
2005-09-26 15:04
2005.10.16
Создание события для потомка класса