Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.041 c
5-1103047227
Deep
2004-12-14 21:00
2005.10.16
Невизуальные компоненты внутри другого невизуального компонента


2-1125825065
TG
2005-09-04 13:11
2005.10.16
Устоновка компонента


3-1125985595
Drakon
2005-09-06 09:46
2005.10.16
Печать. TDBGrid


14-1124987974
TG
2005-08-25 20:39
2005.10.16
АНИМАЦИЯ


2-1126810370
Oleg_L
2005-09-15 22:52
2005.10.16
Как выйти на DirectX и OpelGL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский