Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2011, 21:37   #1
Babenkko
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию преобразовать цифровую запись количества денег в буквенное, в диапазоне от 999,01 до 1200,99 (Паскаль)

Надо написать программу преобразующую цифровую запись количества денег в буквенное, в диапазоне от 999,01 до 1200, 99.
я нашла похожую программу и подправила ее под себя но не очень уверенна.
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
ticjachi: array[0..1] of string=(` `,`тысяча`);
sotni : array [0..9]  of string=('','сто','двести','триста','четыреста','пятьсот','шестьсот','семьсот','восемьсот','девятьсот');
desyatki : array [0..9] of string=('','десять','двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят','восемьдесят','девяносто');
edenici : array [0..9] of string=('','один','два','три','четыре','пять','шесть','семь','восемь','девять');
special : array [0..9] of string=('десять','одиннадцать','двенадцать','тринадцать','четырнадцать','пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать');
var
cislo,j,ed,des,sot,tic:integer;
s1,s10,s100,s1000:string[1];
s:string;
begin
s:=Edit1.Text;
cislo:=StrToInt(s);
If ((cislo<999.01) or (cislo>1200.99)) then ShowMessage ('Введите число в диапазоне 990,01..1200,99');
j:=Length(s);
Case j of
1:begin
    ed:=StrToInt(s);
    Label1.Caption:=edenici[ed];
    end;
2:begin
    If s[1]='1' then
      begin
      s1:=s[2];
      ed:=StrToInt(s1);
      Label1.Caption:=special[ed];
      end
        else
        begin
        s10:=s[1];
        s1:=s[2];
        des:=StrToInt(s10);
        ed:=StrToInt(s1);
        Label1.Caption:=desyatki[des]+' '+edenici[ed];
        end;
    end;
3:begin
    s100:=s[1];
    s10:=s[2];
    s1:=s[3];
    des:=StrToInt(s10);
    ed:=StrToInt(s1);
    sot:=StrToInt(s100);
            If s[2]='1' then
            Label1.Caption:=sotni[sot]+' '+special[ed]
            else
            Label1.Caption:=sotni[sot]+' '+desyatki[des]+' '+edenici[ed];
    end;

4:begin
    s1000:=s[1]
    s100:=s[2];
    s10:=s[3];
    s1:=s[4];
    des:=StrToInt(s10);
    ed:=StrToInt(s1);
    sot:=StrToInt(s100);
    tic:= StrToInt(s1000);
            If s[2]='1' then
            Label1.Caption:=ticjachi[tic]+' '+special[ed]
            else
        Label1.Caption:= ticjachi[tic]+sotni[sot]+' '+desyatki[des]+' '+edenici[ed];
    end;
4:begin
    end;
End;
If cislo=1000 then Label1.Caption:='тысяча';
end;

подскажите, ПОЖАЛУЙСТАААААААААААА!!!!!!!!!!

Последний раз редактировалось Stilet; 28.05.2011 в 17:25.
Babenkko вне форума Ответить с цитированием
Старый 27.05.2011, 21:40   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Что подсказать? Запустите программу и протестируйте.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 28.05.2011, 15:42   #3
Babenkko
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию

а ее можно скопировать им вставить или надо вводить?
Babenkko вне форума Ответить с цитированием
Старый 28.05.2011, 15:44   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Кого куда вставить? Не волнуйтесь, выражайте мысли яснее
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.05.2011, 07:39   #5
Babenkko
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию

ну она у меня в формате word. ее можно скопировать и вставить в паскаль?
и еще что нужно добавить что сотые тоже менялись?
Babenkko вне форума Ответить с цитированием
Старый 29.05.2011, 08:31   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Babenkko, приведённая Вами программа написана на Delphi.
Вам на чём нужно вообще эту программу сделать?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.05.2011, 16:53   #7
Babenkko
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию

в паскале..................)))
Babenkko вне форума Ответить с цитированием
Старый 30.05.2011, 11:41   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

так, в качестве затравки...
Код:
const
  ticjachi: array[0..1] of string = (' ', 'тысяча');
  sotni: array[0..9] of string = ('', 'сто', 'двести', 'триста',
      'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот',
      'девятьсот');
  desyatki: array[0..9] of string = ('', 'десять', 'двадцать', 'тридцать', 'сорок',
      'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
  edenici: array[0..9] of string = ('', 'один', 'два', 'три', 'четыре', 'пять',
      'шесть', 'семь', 'восемь', 'девять');
  special: array[0..9] of string = ('десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать',
      'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
var
  j, ed, des, sot, tic, kError: integer;
  s1, s10, s100, s1000: string[1];
  cislo: double;
  s, sResult: string;
begin
  WriteLn('Введите число:');
  repeat
    ReadLn(s);
    Val(s, cislo, kError);
    if kError <> 0 then WriteLn('Неверное число!')
    else
      if (cislo < 999.01) or (cislo > 1200.99) then WriteLn('Число должно быть в диапазоне 999.01..1200.99');

  until (kError = 0) and (cislo >= 999.01) and (cislo <= 1200.99);

  j := Length(s);

  sResult := '';
  case j of
    1: begin
        ed := ord(s[1])-ord('0');
        sResult := edenici[ed];
      end;
    2: begin
        if s[1] = '1' then
        begin
          ed := ord(s[2])-ord('0');
          sResult := special[ed];
        end
        else
        begin
          des := ord(s[1])-ord('0');
          ed := ord(s[2])-ord('0');
          sResult := desyatki[des] + ' ' + edenici[ed];
        end;
      end;
    3: begin
        sot := ord(s[1])-ord('0');
        des := ord(s[2])-ord('0');
        ed := ord(s[3])-ord('0');
        if s[2] = '1' then
          sResult := sotni[sot] + ' ' + special[ed]
        else
          sResult := sotni[sot] + ' ' + desyatki[des] + ' ' + edenici[ed];
      end;

    4: begin
        tic := ord(s[1])-ord('0');
        sot := ord(s[2])-ord('0');
        des := ord(s[3])-ord('0');
        ed := ord(s[4])-ord('0');
        if s[2] = '1' then
          sResult := ticjachi[tic] + ' ' + special[ed]
        else
          sResult := ticjachi[tic] + sotni[sot] + ' ' + desyatki[des] + ' ' + edenici[ed];
      end;
    4: begin
      end;
  end;
  if cislo = 1000 then sResult := 'тысяча';

  WriteLn('число равно '+sResult);
  Readln;
end.

p.s.
1) Алгоритм "индусский" оставляю на совести того, кто его писал в Delphi! я бы лично так никогда не делал!! и никому не советовал!

2) Десятичная точка не учитывается!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.05.2011, 19:10   #9
Babenkko
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию

почему индусский?
а можно все проще сделать??что ли?
Babenkko вне форума Ответить с цитированием
Старый 30.05.2011, 19:48   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
а можно все проще сделать??что ли?
вопрос не в проще-сложнее. Вопрос в том, что если Вам понадобится сделать для чисел до миллиона (или, хотя бы обработку дробной части надо добавить - нужно чуть ли не пол программы переделывать...

сходите сюда

ну и вот Вам навскидку ещё парочка вариантов
1:
Код:
{Число прописью
Дано натуральное n(n<=1000). 
Записать это число русскими словами (семнадцать,
двести пятьдесят три, тысяча и т. д.)
}

Const
 Sotni    : Array[0..9] Of String[20]=('','сто','двести','триста','четыреста',
           'пятьсот','шестьсот','семьсот','восемьсот','девятьсот');
 Digit21  : Array[0..9] Of String[20]=('десять','одиннадцать','двенадцать',
           'тринадцать','четырнадцать','пятнадцать',
           'шестнадцать','семнадцать','восемнадцать','девятнадцать');
 Desaytki : Array[0..9] Of String[20]=('','','двадцать','тридцать','сорок',
           'пятьдесят','шестьдесят','семьдесят','восемьдесят','девяносто');
 Digit1  : Array[0..9] Of String[20]=('','один','два','три','четыре','пять',
           'шесть','семь','восемь','девять');

Function Sum2Txt(L : LongInt):String;

var STemp : string;
    OneDigit : integer;

begin
 If L=0 Then begin
   Sum2Txt:='Ноль';
   Exit;
 end;
 If L=1000 Then begin
   Sum2Txt:='Тысяча';
   Exit;
 end;
 STemp := '';

 {обработаем сотни}
 if L>99 then begin
   OneDigit := L div 100;
   L := L mod 100;
   STemp := Sotni[OneDigit];
 end;

 {проверяем, если остаток >=10 и <=19}
 if (L>=10) and (L<=19) then
   STemp := STemp + ' ' + Digit21[L-10]
 else begin
   OneDigit := L div 10;
   L := L mod 10;
   STemp := STemp + ' ' + Desaytki[OneDigit];
   if L<>0 then begin
     STemp := STemp + ' ' + Digit1[L];
   end;   
 end;
 
 Sum2Txt:=STemp;
 
End;

var N : integer;
Begin
  WriteLn;
  Write('Введите N (натуральное, N<=1000): ');
  ReadLn(N);
  if (N<0) or (N>1000) then 
    WriteLn('#Ошибка: Неверное число!')
  else 
    WriteLn(N:1,' ',Sum2Txt(N));
End.
вариант 2
Код:
function convert(Num: string): string;
const s100: array[0..9] of string = ('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот',
    'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
  s10: array[0..9] of string = ('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят',
    'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
  s11: array[0..9] of string = ('десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать',
    'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
  s1: array[0..9, 0..1] of string = (('', ''), ('один', 'одна'), ('два', 'две'),
    ('три', 'три'), ('четыре', 'четыре'), ('пять', 'пять'),
    ('шесть', 'шесть'), ('семь', 'семь'),
    ('восемь', 'восемь'), ('девять', 'девять'));
  s1000: array[0..4, 0..2] of string = (('триллионов', 'триллион', 'триллиона'),
    ('миллиардов', 'миллиард', 'миллиарда'),
    ('миллионов', 'миллион', 'миллиона'),
    ('тысяч', 'тысяча', 'тысячи'), ('', '', ''));
var r: string; i: integer; 
  procedure ins(sr: string);
  begin
    if sr <> '' then r := r + ' ' + sr;
  end;

  function chtoint(ch: char): byte;
  var result_ch: byte;
  begin
    chtoint := 0;
    if (ch >= '0') and (ch <= '9') then chtoint := ord(ch) - ord('0')
    else chtoint := 0;
  end;
begin
  {т.к. передаём строку, то надо проверить, что в ней только цифры}
  for i:=1 to Length(num) do
    if not (num[i] in ['0'..'9']) then begin
      convert := '#Ошибка! переданная строка не является числом!';
      Exit;
    end;

  r := '';
  for i := 1 to 15 - length(num) do insert('0', num, 1);
  for i := 0 to 4 do begin
    if copy(num, i * 3 + 1, 3) = '000' then continue;
    ins(s100[chtoint(num[i * 3 + 1])]);
    if num[i * 3 + 2] = '1' then begin ins(s11[chtoint(num[i * 3 + 3])]);
      ins(s1000[i, 0]);
      continue;
    end;
    ins(s10[chtoint(num[i * 3 + 2])]);
    if i = 3 then ins(s1[chtoint(num[i * 3 + 3]), 1]) else ins(s1[chtoint(num[i * 3 + 3]), 0]);
    case num[i * 3 + 3] of '0', '5', '6', '7', '8', '9': ins(s1000[i, 0]);
      '1': ins(s1000[i, 1]);
      '2', '3', '4': ins(s1000[i, 2]);
    end;
  end;
  if r <> '' then if r[1] = ' ' then delete(r, 1, 1);
  Convert := r;
end;


{Пример использования}
var s: string;
begin
  WriteLn;
  Write('Введите число: '); Readln(s);
  if length(s)>15 then
   Writeln('Извините, но программа понимает только числа до 15 знаков')
  else
   WriteLn(convert(s));
end.
p.s. варианты не мои, просто под рукой валялись

Последний раз редактировалось Serge_Bliznykov; 30.05.2011 в 19:51.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Определение количества слов в тексте. Evgesha Помощь студентам 17 12.04.2011 18:58
из десятичной системы счисления преобразовать в двоичную систему в экспоненциальный вид [Паскаль] Yamkin Помощь студентам 3 16.12.2010 00:08
Дана матрица [1..10,1..20] заполненная случайными числами в диапазоне от [-10..19]. Паскаль. Stalker93 Помощь студентам 5 05.12.2010 20:00
Запись в один файл большого количества информации pregmatch Общие вопросы C/C++ 5 09.03.2009 14:09
числа от 500 до 999 Satorin Общие вопросы Delphi 7 10.01.2009 19:36