milanka28082006
26.01.2020 23:16

Введите ответ решить
В некотором текстовом редакторе используется только шрифт Arial, для которого может быть установлен один из двух размеров. Кроме того, имеются

три кнопки, позволяющие устанавливать полужирное, курсивное и подчеркнутое начертание символов. Сколько существует различных вариантов форматирования слова «внимание»?

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
amid69
16.05.2022 23:32
Чтобы разъяснить происходящее, были сделаны следующие шаги.
1. Константы 3.1 и 0.8 переведены в машинное представление а затем назад в десятичное с максимальной для паскалевских данных вещественного типа real (он же double) точностью (вложения 1 и 2).
2. В системе компьютерной алгебры, позволяющей работать с произвольной точностью (выбрана точность в 30 значащих цифр) для полученных констант выполнены соответствующие заданному фрагменту программы вычисления (вложение 3)
3. Результат 0.499999999999999955591079014996 был переведен в машинное представление. Затем в машинное представление была переведена константа 0.5, которая, как видно во вложении 4, представляется в компьютере точно. Поэтому проверка на точное равенство с 0.5 дает не тот результат, который Вы ожидали.
4. Можно было также воспользоваться программой на паскале.
begin
  var x:=3.1;
  var y:=0.8;
  var p:=2;
  var a:=Frac(x); // =0,1
  var b:=Frac(y)-0.5; // =0,3
  var kp:=sqrt(sqr(0.5-a)+b*b); // =0,5
  if abs(kp-0
  Writeln(kp-0.5)
end.

Результат: -5.55111512312578E-17
Это как раз то, что так портит Вам всю картину.

По поводу Вашего условия if kp>=0.5 then p=p+1;
Ошибка имеет порядок 0.6·10⁻¹⁶ и наверно ничего страшного не будет, если оператор (с запасом) подправить на if kp>=(0.5-1e-15) then p:=p+1;

Pascalabc.net вот кусочек программки: // x=3.1 (введено с клавиатуры) // y=0.8 (введено с клавиатуры
Pascalabc.net вот кусочек программки: // x=3.1 (введено с клавиатуры) // y=0.8 (введено с клавиатуры
Pascalabc.net вот кусочек программки: // x=3.1 (введено с клавиатуры) // y=0.8 (введено с клавиатуры
Pascalabc.net вот кусочек программки: // x=3.1 (введено с клавиатуры) // y=0.8 (введено с клавиатуры
0,0(0 оценок)
Ответ:
чек14
21.11.2021 16:15
ОТДЕЛ Задание+;
ИСПОЛЬЗУЕТ Вывод ИЗ "...\Отделы\Обмен\", Приём;

ПЕР
  N, сч, ч, кв: ЦЕЛ;

УКАЗ
  N := Приём.Число();
  ОТ сч := 0 ДО N ВЫП
    кв := сч * сч;
    ч := сч;
    КОЛЬЦО
      ПОКА ч > 0 И кв > 0 ВЫП
        ЕСЛИ ч ОСТАТОК 10 # кв ОСТАТОК 10 ТО
          ВЫХОД
        КОН;
        ч := ч ДЕЛИТЬ 10;
        кв := кв ДЕЛИТЬ 10
      КОН;
      Вывод.ЧЦел("^%d", сч, 0, 0, 0)
    КОН
  КОН

КОН Задание.

Отдел "Приём", раз уж Издатель не успел его включить в выпуск (хотя стоило бы рассматривать это как стандартный ввод):

ОТДЕЛ Приём; 
ИСПОЛЬЗУЕТ
   ОС ИЗ "...\Отделы\Обмен\",
   КОС ИЗ "...\Отделы\Обмен\",
  Ввод ИЗ "...\Отделы\Обмен\",
   Вывод ИЗ "...\Отделы\Обмен\",
   Знак ИЗ "...\Отделы\Иное\"; 

ЗАДАЧА Строка-(строка+: РЯД ИЗ ЗНАК);
 (* Текстовая строка *)
 ПЕР
   отКлавиш: Ввод.ОтКлавиш;
   отМышки: Ввод.ОтМышки;
   Счётчик: ЦЕЛ;
 УКАЗ
   Счётчик := 0;
   КОЛЬЦО
     ЕСЛИ КОС.Опрос(отКлавиш, отМышки) = Ввод.клавиши ТО
       ЕСЛИ отКлавиш.знак = 0DX ТО
         ЕСЛИ Счётчик < РАЗМЕР(строка) ТО строка[Счётчик] := 0X КОН;
         ВЫХОД
       АЕСЛИ отКлавиш.код = 08H ТО
          ЕСЛИ Счётчик > 0 ТО
            строка[Счётчик-1] := 0X; УМЕНЬШИТЬ(Счётчик);
            Вывод.ЗнакЦепи(отКлавиш.знак); Вывод.ЗнакЦепи(" ");
            Вывод.ЗнакЦепи(отКлавиш.знак)
          КОН
       АЕСЛИ (отКлавиш.код = 2DH) И (ОС.РазмерЦепочкиОбменника() # 0) ТО
         ПОКА Счётчик > 0 ВЫП
           строка[Счётчик-1] := 0X; УМЕНЬШИТЬ(Счётчик);
           Вывод.ЗнакЦепи(8X); Вывод.ЗнакЦепи(" "); Вывод.ЗнакЦепи(8X)
         КОН;
         ОС.ЦепочкуИзОбменника(строка);
         ЕСЛИ ОС.РазмерЦепочкиОбменника() > РАЗМЕР(строка) ТО
           Счётчик := РАЗМЕР(строка)
         ИНАЧЕ Счётчик := ОС.РазмерЦепочкиОбменника() КОН;
         Вывод.Цепь(строка)
       АЕСЛИ отКлавиш.знак = 0X ТО
       ИНАЧЕ
         ЕСЛИ Счётчик < РАЗМЕР(строка) ТО
           строка[Счётчик] := отКлавиш.знак;
           УВЕЛИЧИТЬ(Счётчик);
           Вывод.ЗнакЦепи(отКлавиш.знак)
         КОН
       КОН
     ИНАЧЕ ОС.Спать(50) КОН
   КОН
КОН Строка; 

ЗАДАЧА Число-(): ЦЕЛ;
(* Целое число *)
ПЕР
   отКлавиш: Ввод.ОтКлавиш;
   отМышки: Ввод.ОтМышки;
   Счётчик, сч: ЦЕЛ;
   Результат: ЦЕЛ;
   Буфер: ДОСТУП К РЯД ИЗ ЗНАК;
   Отрицательное: КЛЮЧ;
УКАЗ
   Результат := 0; Счётчик := 0; Отрицательное := ОТКЛ;
   КОЛЬЦО
     ЕСЛИ КОС.Опрос(отКлавиш, отМышки) = Ввод.клавиши ТО
       ЕСЛИ отКлавиш.знак = 0DX ТО
         ЕСЛИ Отрицательное ТО ВОЗВРАТ -Результат ИНАЧЕ ВОЗВРАТ Результат КОН
       АЕСЛИ отКлавиш.код = 08H ТО
         ЕСЛИ Счётчик > 0 ТО
          Результат := Результат ДЕЛИТЬ 10;
           Вывод.ЗнакЦепи(отКлавиш.знак); Вывод.ЗнакЦепи(" "); Вывод.ЗнакЦепи(отКлавиш.знак); УМЕНЬШИТЬ(Счётчик)
        АЕСЛИ Отрицательное ТО
          Отрицательное := ОТКЛ;
          Вывод.ЗнакЦепи(отКлавиш.знак); Вывод.ЗнакЦепи(" "); Вывод.ЗнакЦепи(отКлавиш.знак)
        КОН
       АЕСЛИ (отКлавиш.код = 2DH) И (ОС.РазмерЦепочкиОбменника() # 0) ТО
         ПОКА Счётчик > 0 ВЫП
           УМЕНЬШИТЬ(Счётчик); Вывод.ЗнакЦепи(8X); Вывод.ЗнакЦепи(" "); Вывод.ЗнакЦепи(8X)
         КОН;
         ЕСЛИ Отрицательное ТО
          Отрицательное := ОТКЛ; Вывод.ЗнакЦепи(8X); Вывод.ЗнакЦепи(" "); Вывод.ЗнакЦепи(8X)
        КОН;
        Результат := 0;
         СОЗДАТЬ(Буфер, ОС.РазмерЦепочкиОбменника());
         ОС.ЦепочкуИзОбменника(Буфер^);
         ЕСЛИ (Буфер[0] >= "0") И (Буфер[0] <= "9") ТО
           Результат := Результат * 10 + (ВЦЕЛ(Буфер[0]) - ВЦЕЛ("0"));
           Вывод.ЗнакЦепи(Буфер[0]); УВЕЛИЧИТЬ(Счётчик)
         АЕСЛИ Буфер[0] = "-" ТО Вывод.ЗнакЦепи("-"); Отрицательное := ВКЛ КОН;
        ОТ сч := 1 ДО РАЗМЕР(Буфер^)-1 ВЫП
           ЕСЛИ (Буфер[сч] >= "0") И (Буфер[сч] <= "9") ТО
             Результат := Результат * 10 + (ВЦЕЛ(Буфер[сч]) - ВЦЕЛ("0"));
             Вывод.ЗнакЦепи(Буфер[сч]); УВЕЛИЧИТЬ(Счётчик)
           КОН
         КОН;
         Буфер := ПУСТО
       АЕСЛИ (отКлавиш.знак = "-") И (НЕ Отрицательное) ТО
         ЕСЛИ Результат = 0 ТО Отрицательное := ВКЛ; Вывод.ЗнакЦепи("-") КОН
      АЕСЛИ отКлавиш.знак = 0X ТО
       АЕСЛИ (Результат < МАКС(ЦЕЛ) ДЕЛИТЬ 10) И ((отКлавиш.знак >= "0") И (отКлавиш.знак <= "9")) ТО
         Результат := Результат * 10 + (ВЦЕЛ(отКлавиш.знак) - ВЦЕЛ("0"));
         Вывод.ЗнакЦепи(отКлавиш.знак); УВЕЛИЧИТЬ(Счётчик)
       КОН
     ИНАЧЕ ОС.Спать(50) КОН
   КОН
КОН Число; 

ЗАДАЧА Ждать-;
(* Простаиваем, пока не будет нажата любая клавиша *)
ПЕР
   отКлавиш: Ввод.ОтКлавиш;
   отМышки: Ввод.ОтМышки;
УКАЗ
   ПОКА КОС.Опрос(отКлавиш, отМышки) # Ввод.клавиши ВЫП
     ОС.Спать(50)
   КОН
КОН Ждать; 

КОН Приём.
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота