Вам необходимо подсчитать сумму s(n) = 1 - 2 + 3 - 4 + … + (-1)n+1 *n. напишите программу, которая находит ответ за минимальное время и использует наименьший объем оперативной памяти. входные данные: одно целое число n (1 ≤ n ≤ 109) выходные данные: ответ s(n)
111
176
Ответы на вопрос:
Если следовать алгоритму вычисления, представленному в формуле, то программа будет такая: var n,i,s: shortint ; begin write ('n='); readln (n); s: =0; for i: =1 to n do if i mod 2 =0 then s: =s-i else s: =s+i; print (s) end. если же посмотреть на формулу внимательно и выявить закономерность, то можно увидеть, что 1) вычитаются только четные числа. и после каждого вычитания результат равен ровно половине вычитаемого числа (со знаком минус) 2) прибавляются только нечетные числа и прибавление идет вслед за вычитанием (кроме 1), т.е. можно к результату последнего вычитания (см.п.1) просто прибавить n. также учитываем, что целые числа занимают меньше памяти, чем вещественные, поэтому для программы используем самый маленький целый тип с отрицательными значениями shortint (от -128 до 127, что в данном случае нас вполне устраивает). помним, что значение переменной целого типа не может быть результатом деления, поэтому вместо обычного деления используем деление нацело (n div 2) итак: при нечетном n результат = -n div 2, при четном n: (так как у нас целочисленное деление, то n div 2 будет равно (n-1) div 2) результат будет = -(n div 2) + n или n-(n div 2) т.е. вся программа сведена всего к двум операциям по разным веткам условного оператора, что сделает ее быстрее и . к тому же не надо выделять память для переменной-счетчика. var n,s: shortint; begin write ('n='); readln (n); if n mod 2 =0 then s: =-n div 2 else s: =n-(n div 2); print (s) end. можно увидеть и другую закономерность, что каждое сложение и идущее за ним вычитание одинаковый результат с разными знаками, т.е. при четном n также s=-n div 2, а при нечетном - s=n div 2+1. но большой разницы это не даст.
Program vuxesleneq; var i,o,p: integer; t,y,u,j,c: ireal; begin writeln('ввеите число для вычислени'); readln(t); writeln(''ввеите число для вычислени''); readln(y); writeln('введите знак'); redln(i); if i="+" then c: =a+b; writeln (c); if i="-" then c: =a-b; writeln (c); if i="*" then c: =a*b; writeln (c); if i="/" then c: =a/b; writeln (c); end.
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
ЯнаКиска26.11.2021 23:22
-
MILKovka05.09.2020 08:00
-
школьник22825303.11.2021 07:09
-
TANIAMIRNAI23.08.2022 03:57
-
ghkbkb17.12.2020 18:06
-
vasilprokofiev13.10.2020 14:11
-
Абвгдежз123456789011.04.2020 10:59
-
Марс201426.09.2022 14:46
-
Gloriyaxx20.09.2020 12:16
-
aruzakova0520.05.2023 11:54
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.