Прибыль фирмы за некоторый период деятельности по годам приведена ниже 1)Составьте линейную зависимость 2)Oпределите ожидамую прибыль для 7 года деятельности. Сделайте чертёж.
Чтобы разъяснить происходящее, были сделаны следующие шаги. 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;
ОТДЕЛ Задание+; ИСПОЛЬЗУЕТ Вывод ИЗ "...\Отделы\Обмен\", Приём;
ПЕР 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
Оформи подписку