IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Несоответсвие типу
Account
сообщение 18.09.2009 1:13
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 212
Пол: Мужской

Репутация: -  0  +


есть вот такая прога
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?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
volvo
сообщение 18.09.2009 1:32
Сообщение #2


Гость






В LongInt - то вписывается, но Паскаль делает не так, как тебе хочется. Он сначала возводит число в квадрат (а поскольку аргумент - типа ShortInt, то и результат такого же типа, все что не поместилось - усекается), потом домножает на X (опять же в рамках ShortInt) и только потом, после прибавления 1 конвертирует результат в LongInt... Поищи по форуму по слову 90000, если не ошибаюсь, найдешь тему, где это объяснялось.
 К началу страницы 
+ Ответить 
Account
сообщение 18.09.2009 1:44
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 212
Пол: Мужской

Репутация: -  0  +


Цитата
Поищи по форуму по слову 90000

Что то не нашел(((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 18.09.2009 1:44
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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 мин.
Сорри за дублирование, опоздал))..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.09.2009 1:50
Сообщение #5


Гость






Цитата
Что то не нашел(((
Что значит "не нашел"? smile.gif Плохо искал. Вот это я имел в виду: Как отсортировать?
 К началу страницы 
+ Ответить 
Account
сообщение 18.09.2009 1:57
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 212
Пол: Мужской

Репутация: -  0  +


volvo, ЗВИНЯЙ, тему то нашел, а невнимательно посмотрел. СПАСИБО!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:30
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"