
PASCAL Требуется посчитать сумму целых чисел, расположенных между числами 1 и N включительно.
Входные данные В единственной строке входного файла INPUT.TXT записано единственное целое число N, не превышающее по абсолютной величине 10^4. Выходные данные В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму чисел, расположенных между 1 и N включительно. МОЁ РЕШЕНИЕ: var n, i, s, z: longint; begin assign(input, 'input.txt'); reset(input); assign(output, 'output.txt'); rewrite(output); z:=0; s:=0; read(n); begin if n<=z then exit; end; for i := 1 to n do s+=i; write(s); end. Но код не принимает система, что может быть не так? PS:// Но сложность этой задачи не в вычислении этой суммы и приведенный выше алгоритм не проходит на третьем тесте! Оказывается, здесь очень внимательно нужно прочитать условия задачи, особенно ограничения на число N. Дело в том, что это число может быть отрицательным!!! Учитывая это попробуйте самостоятельно доработать и реализовать верный алгоритм решения этой задачи. UPD: забыл условие поставить,что n не должно превышать 10^4UPD2:исправил ошибки, учёл что n<10000, но все равно "задача решена неверно" КОД:var n, i, s, z: longint; begin assign(input, 'input.txt'); reset(input); assign(output, 'output.txt'); rewrite(output); z:=0; s:=0; read(n); begin if n<=z then exit; end; if n<=10000 then for i := 1 to n do s+=i else exit; write(s); end.

Ответы на вопрос

Ваши ошибки:
1) Объявление текстовых переменных и неиспользование их.
2) Ненужный тип longint, зачем такой большой тип?
Типа Integer вполне достаточно (-32 768 … 32 767).
3) Объявление абсолютно ненужной переменной z.
4) Главная ошибка - это непонимание задания, и соответственно неправильно построенный алгоритм.
Попробуйте это, самое оптимальное по времени, минимальное кол-во переменных. Использован метод Гаусса, можно было и арифм. прогрессию.
var
n: integer;
text: text;
begin
assign(text, 'input.txt'); reset(text);
readln(text, n); close(text);
if (n > 10000) then exit;
assign(text, 'output.txt'); rewrite(text);
if n < 0 then Writeln(text, -((1 + abs(n)) * (abs(n) / 2) - 1))
else Writeln(text, (1 + n) * (n / 2));
close(text);
end.


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili