Помощь - Поиск - Пользователи - Календарь
Полная версия: Несоответсвие типу
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Account
есть вот такая прога
program n3;
uses crt;
var x:shortint;
y:longint;
begin
write('Введите x: ');
readln(x);
if (x<0) then y:=2*x+3
else if (x>0) and (x<=100) then y:=sqr(x)*x+1
else y:=abs(x);
writeln('y= ',y);
readln;
end.


не пому почему считает не правильно когда задаешь например 99, ведь результат вроде вписывается в тип Longint?
volvo
В LongInt - то вписывается, но Паскаль делает не так, как тебе хочется. Он сначала возводит число в квадрат (а поскольку аргумент - типа ShortInt, то и результат такого же типа, все что не поместилось - усекается), потом домножает на X (опять же в рамках ShortInt) и только потом, после прибавления 1 конвертирует результат в LongInt... Поищи по форуму по слову 90000, если не ошибаюсь, найдешь тему, где это объяснялось.
Account
Цитата
Поищи по форуму по слову 90000

Что то не нашел(((
Lapp
Цитата(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
Цитата
Что то не нашел(((
Что значит "не нашел"? smile.gif Плохо искал. Вот это я имел в виду: Как отсортировать?
Account
volvo, ЗВИНЯЙ, тему то нашел, а невнимательно посмотрел. СПАСИБО!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.