Новые книги

Автор книги — выдающийся ученый, физик и кибернетик, создатель языка Рефал и нового направления в программировании, связанного с преобразованием программ. Известен широкому кругу отечественных читателей как составитель сборника “Физики шутят”. Вынужденный покинуть Родину, с 1977 года он живет и работает в США.

В этой книге В. Ф. Турчин излагает свою концепцию метасистемного перехода и с ее позиций прослеживает эволюцию мира от простейших одноклеточных организмов до возникновения мышления, развития науки и культуры. По вкладу в науку и философию монография стоит в одном ряду с такими известными трудами как “Кибернетика” Н. Винера и “Феномен человека” П. Тейяра де Шардена.

Книга написана ярким образным языком, доступна читателю с любым уровнем подготовки. Представляет особый интерес для интересующихся фундаментальными вопросами естествознания.

Замечания по электронной версии книги присылайте, пожалуйста, членам редакционного совета. Спасибо!
Демонстрируется эффективная компьютерная поддержка курсов черчения, информатики и геометрии на базе свободно распространяемой системы КОМПАС-3D LT. Описываются общие сведения и работа с системой, приводятся основные понятия трехмерного моделирования геометрических объектов. Подробно рассматриваются создание трехмерных моделей деталей и их проекций, нанесение размеров, изображение резьбовых соединений, создание сборок. Показаны возможности применения КОМПАС-3D LT в решении задач графической обработки информации и геометрического трехмерного моделирования. Приводятся примеры решения планиметрических задач и создания 3D-моделей элементарных геометрических тел. В приложениях приводятся эскизные и тестовые задания. DVD содержит дистрибутивы рассматриваемых программ и десятки вариантов практических заданий по всем упоминаемым в книге темам.

Для студентов и преподавателей вузов и колледжей, учащихся и учителей общеобразовательных школ, руководителей курсов повышения квалификации.

Вопрос и Ответ 54

Вопросы и Ответы


      54. Как представить число его прописным эквивалентом?

      Простых путей решения этой проблемы не существует и приходится писать процедуру разбора числа. Задача сводится к разбору числа на триады (...1,234,567) начиная с конца, а уже в них происходит конечный разбор трехзначного числа и формирование его прописного эквивалента с учетом добавления "тысяч", "миллионов" и т.д.

      Единственное, необходимо помнить о роде "добавки" (одна тысяча, один миллион) и разницы написания (одна тысяча, две тысячи и пять тысяч)...

      Пример:

      ............

      CONST

        MAX3 = 5; {Максимальное количество триад}

        A11: ARRAY[1..2] OF STRING[20] = ('одна ', 'две ');

        A1: ARRAY[0..19] OF STRING [20] = ('', 'один ', 'два ','три ', 'четыре ', 'пять ', 'шесть ', 'семь ', 'восемь ', 'девять ', 'десять ', 'одиннадцать ', 'двенадцать ', 'тринадцать ', 'четырнадцать ', 'пятнадцать ', 'шестнадцать ', 'семнадцать ', 'восемнадцать ', 'девятнадцать ');

        A10: ARRAY[0..9] OF STRING [20] = ('', 'десять ', 'двадцать ', 'тридцать ', 'сорок ', 'пятьдесят ', 'шестьдесят ', 'семьдесят ', 'восемьдесят ', 'девяносто ');

        A100: ARRAY[0..9] OF STRING[20]= ('', 'сто ', 'двести ', 'триста ', 'четыреста ', 'пятьсот ', 'шестьсот ', 'семьсот ', 'восемьсот ', 'девятьсот ');

        {четвертым параметром является обозначение мужского или женского рода,

          где '0' - женский род;
          '1' - мужской род.

        Это дает возможность, например, изменяя "рубли" на "штуки" просто поменять '1' на '0' не меняя кода.}
        A0: ARRAY[0..MAX3-1, 0..3] OF STRING[20]= (('рубль', 'рубля', 'рублей', '1'), ('тысяча', 'тысячи', 'тысяч', '0'), ('миллион', 'миллиона', 'миллионов', '1'), ('миллиард', 'миллиарда', 'миллиардов', '1'), ('триллион', 'триллиона', 'триллионов', '1'));

      procedure TForm1.Edit1Change(Sender: TObject);
      VAR

        Value: LongInt;
        i100, i10, i1: Integer;
        V, p, n, i: Integer;

      begin

        TRY

          Value := StrToInt(Edit1.Text);
          Memo1.Clear;
          n := 0;
          {Обработка отрицательного значения и нуля}
          IF Value <0 THEN BEGIN

            Memo1.Lines.Add('минус');
            Value := -Value;

          END
          ELSE

            IF Value = 0 THEN Memo1.Lines.Add('ноль')
            ELSE Memo1.Lines.Add('');

          REPEAT

            {Разбивка на триады с конца}
            V := Value MOD 1000;
            Value := Value DIV 1000;
            {Обработка}
            IF (V > 0) OR (n = 0) THEN BEGIN

              i100 := V DIV 100;
              V := V-(i100*100);
              IF V >= 20 THEN BEGIN

                i1 := V MOD 10;
                V := V DIV 10;
                i10 := V MOD 10;

              END
              ELSE BEGIN

                i1 := V;
                i10 := 0;

              END;
              CASE i1 OF

                1: p := 0;
                2..4: p := 1;
                ELSE p := 2;

              END;
              {Изменение в зависимости от женского или мужского рода}
              IF (A0[n,3] = '0') AND ((i1 = 1) OR (i1 = 2)) THEN

                Memo1.Lines.Insert(1, A100[i100]+A10[i10]+A11[i1]+A0[n,p])

              ELSE

                Memo1.Lines.Insert(1, A100[i100]+A10[i10]+A1[i1]+A0[n,p]);

            END;
            Inc(n);
            {Проверка выхода за максимальное количество триад}
            IF n > MAX3 THEN Exit;

          UNTIL Value <= 0;

        EXCEPT

          Memo1.Clear;
          Memo1.Lines.Add('Ошибка');

        END

      end;

      ............


...предыдущая страница следующая...
оглавление



"Вопрос и Ответ 54"
Copyright © "В помощь Веб-Мастеру" (Alexander D. Belyaev) 2005-2024 .
При перепечатке любого материала видимая ссылка на источник "В помощь Веб-Мастеру" и все имена, ссылки авторов обязательны!
Время генерации страницы: 0.007