program n3;
uses crt;
var x:shortint;
y:longint;
begin
write('Введите x: ');
readln(x);
if (x<0) then y:=2*x+3elseif (x>0) and (x<=100) then y:=sqr(x)*x+1else y:=abs(x);
writeln('y= ',y);
readln;
end.
не пому почему считает не правильно когда задаешь например 99, ведь результат вроде вписывается в тип Longint?
volvo
18.09.2009 5:32
В LongInt - то вписывается, но Паскаль делает не так, как тебе хочется. Он сначала возводит число в квадрат (а поскольку аргумент - типа ShortInt, то и результат такого же типа, все что не поместилось - усекается), потом домножает на X (опять же в рамках ShortInt) и только потом, после прибавления 1 конвертирует результат в LongInt... Поищи по форуму по слову 90000, если не ошибаюсь, найдешь тему, где это объяснялось.
Account
18.09.2009 5:44
Цитата
Поищи по форуму по слову 90000
Что то не нашел(((
Lapp
18.09.2009 5:44
Цитата(Account @ 18.09.2009 2:13)
не пому почему считает не правильно когда задаешь например 99, ведь результат вроде вписывается в тип Longint?
Когда ты вычисляешь это:
y:=sqr(x)*x+1
- у тебя сначала вычисляется выражение в правой части, а потом оно присваивается переменной в левой части. Переменная в левой части - LongInt, но на этапе вычисления про лонгинт никто не знает. Компилятор считает, что ты работаешь с ShortInt. Соответственно, результат должен влезать в диапазон ShortInt, а он явно не влезает. Ты либо поменяй тип x на LongInt, либо делай явное преобразование типов:
y:=sqr(LongInt(x))*x+1
Но это нужно делать тогда и в предыдущей формуле, так что лучше будет описать х как длинное целое. Если это нельзя (например, у тебя массив большой), то перед вычисление перекладывай значение х в z, которая длинная.
Добавлено через 3 мин. Сорри за дублирование, опоздал))..
volvo
18.09.2009 5:50
Цитата
Что то не нашел(((
Что значит "не нашел"? Плохо искал. Вот это я имел в виду: Как отсортировать?
Account
18.09.2009 5:57
volvo, ЗВИНЯЙ, тему то нашел, а невнимательно посмотрел. СПАСИБО!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.