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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2013, 14:28   #1
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию Дано целое число в диапазоне 100–999. Вывести строку-описание данного числа.

Дано целое число в диапазоне 100–999. Вывести строку-описание данного числа, например: 256 — «двести пятьдесят шесть», 814 — «восемьсот четырнадцать».
Код:
var
N:100..999;
e,S,d:variant;
begiN
N:=STRTOint(EDIT1.Text);
S:=N DIV 100;
begin
CASE S OF
1:BEGIN S:='СТО'END;
2:BEGIN S:='ДВЕСТИ'END;
3:BEGIN S:='ТРИСТО'END;
4:BEGIN S:='ЧЕТЫРЕСТО'END;
5:BEGIN S:='ПТЬСОТ'END;
6:BEGIN S:='ШЕСТЬСОТ'END;
7:BEGIN S:='СЕМЬСОТ'END;
8:BEGIN S:='ВОСЕМЬСОТ'END;
9:BEGIN S:='ДЕВЯТЬСОТ'END;
end;
BEGIN
 D:=N MOD 100;
 IF (D>=10)AND (D<=19)THEN
  CASE D OF
  10:BEGIN D:='ДЕСЯТЬ' END;
  11:BEGIN D:='ОДИНАДЦАТЬ' END;
  12:BEGIN D:='ДВЕНАДЦАТЬ' END;
  13:BEGIN D:='ТРИНАДЦАТЬ' END;
  14:BEGIN D:='ЧЕТЫРНАДЦАТЬ' END;
  15:BEGIN D:='ПЯТНАДЦАТЬ' END;
  16:BEGIN D:='ШЕСТНАДЦАТЬ' END;
  17:BEGIN D:='СЕМНАДЦАТЬ' END;
  18:BEGIN D:='ВОСЕМНАДЦАТЬ' END;
  19:BEGIN D:='ДЕВЯТНАДЦАТЬ' END;
  ELSE D:=D DIV 10;
      CASE D OF
      2:BEGIN D:='ДВАДЦАТЬ' END;
      3:BEGIN D:='ТРИДЦАТЬ' END;
      4:BEGIN D:='СОРОК' END;
      5:BEGIN D:='ПЯТЬДЕСЯТ' END;
      6:BEGIN D:='ШЕТЬДЕСЯТ' END;
      7:BEGIN D:='СЕМЬДЕСЯТ' END;
      8:BEGIN D:='ВОСЕМЬДЕСЯТ' END;
      9:BEGIN D:='ДЕВЯНОСТО' END;
END;END;
BEGIN
E:=N MOD 10;
CASE E OF
0:BEGIN E:='  ' END;
1:BEGIN E:='ОДИН' END;
2:BEGIN E:='ДВА' END;
3:BEGIN E:='ТРИ' END;
4:BEGIN E:='ЧЕТЫРЕ' END;
5:BEGIN E:='ПЯТЬ' END;
6:BEGIN E:='ШЕСТЬ' END;
7:BEGIN E:='СЕМЬ' END;
8:BEGIN E:='ВОСЕМЬ' END;
9:BEGIN E:='ДЕВЯТЬ' END;
END;END;
IF (D>=10)AND (D<=19) THEN
EDIT2.Text:=intTOSTR(S)+intTOSTR(D)
ELSE
EDIT2.Text:=FLOATTOSTR(S)+FLOATTOSTR(D)+FLOATTOSTR(E);
end;end;end;

end.
nadyaH вне форума Ответить с цитированием
Старый 28.10.2013, 14:30   #2
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

не знаю в чём ошибка.
nadyaH вне форума Ответить с цитированием
Старый 28.10.2013, 14:40   #3
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

А зачем Вам variant? И, насколько я помню, у него функции вида VarTo..., а не IntTo.../FloatTo...
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 28.10.2013, 16:17   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

очень-очень не рекомендую связываться с типом variant
особенно когда не понимаешь, что это такое, а ещё пуще - когда он не нужен для решения задачи!

смотри код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  N: 100..999;
  E, S, D: string;
begin
  N := StrToInt(EDIT1.Text);
  begin
    case (N div 100) of
      1: S := 'СТО';
      2: S := 'ДВЕСТИ';
      3: S := 'ТРИСТО';
      4: S := 'ЧЕТЫРЕСТО';
      5: S := 'ПТЬСОТ';
      6: S := 'ШЕСТЬСОТ';
      7: S := 'СЕМЬСОТ';
      8: S := 'ВОСЕМЬСОТ';
      9: S := 'ДЕВЯТЬСОТ';
    end;
    begin
      if ((N mod 100) >= 10) and ((N mod 100) <= 19) then begin
        case (N mod 100) of
          10: D := 'ДЕСЯТЬ';
          11: D := 'ОДИНАДЦАТЬ';
          12: D := 'ДВЕНАДЦАТЬ';
          13: D := 'ТРИНАДЦАТЬ';
          14: D := 'ЧЕТЫРНАДЦАТЬ';
          15: D := 'ПЯТНАДЦАТЬ';
          16: D := 'ШЕСТНАДЦАТЬ';
          17: D := 'СЕМНАДЦАТЬ';
          18: D := 'ВОСЕМНАДЦАТЬ';
          19: D := 'ДЕВЯТНАДЦАТЬ';
        end;
      end
      else
        case ((N mod 100) div 10) of
          2: D := 'ДВАДЦАТЬ';
          3: D := 'ТРИДЦАТЬ';
          4: D := 'СОРОК';
          5: D := 'ПЯТЬДЕСЯТ';
          6: D := 'ШЕТЬДЕСЯТ';
          7: D := 'СЕМЬДЕСЯТ';
          8: D := 'ВОСЕМЬДЕСЯТ';
          9: D := 'ДЕВЯНОСТО';
        end;
      case (N mod 10) of
        0: E := '  ';
        1: E := 'ОДИН';
        2: E := 'ДВА';
        3: E := 'ТРИ';
        4: E := 'ЧЕТЫРЕ';
        5: E := 'ПЯТЬ';
        6: E := 'ШЕСТЬ';
        7: E := 'СЕМЬ';
        8: E := 'ВОСЕМЬ';
        9: E := 'ДЕВЯТЬ';
      end;
      if ((N mod 100) >= 10) and ((N mod 100) <= 19) then
        EDIT2.Text := S + ' ' + D
      else
        EDIT2.Text := S + ' ' + D + ' ' + E;
    end;
  end;
end;
p.s. через массивы было бы проще, короче и эффективнее!

Последний раз редактировалось Serge_Bliznykov; 28.10.2013 в 16:20.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.10.2013, 18:03   #5
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

через массивы мне сложно.
nadyaH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано целое число n>2 сформировать и вывести целочисленный массив, содержащий n первых элементов последовательности (Delphi) Richik123 Помощь студентам 1 20.11.2012 17:19
Дано целое число n > 2 сформировать и вывести целочисленный массив размера n содержащий n первых элементов последовательности чисе Richik123 Помощь студентам 1 20.11.2012 16:44
Дано целое N. сформировать из цифр числа наибольшее число (паскаль АВС) Соболь12 Помощь студентам 12 26.12.2011 17:34
Дано вещественное число X и целое число N (> 0). Вывести X – X3/3! + X5/5! – ... + (–1)NX2N+1/(2N+1)!? Ахилес Помощь студентам 2 20.05.2010 20:34
Дано целое число. Уменьшить каждую цифру этого числа на 1. Makcumqa Помощь студентам 2 18.03.2010 08:09