Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2016, 21:31   #1
LetsRock
 
Регистрация: 18.08.2014
Сообщений: 8
По умолчанию Помогите пожалуйста разобраться в строчке кода

Здравствуйте. Сейчас читаю книгу Окулова "Программирование в алгоритмах". Наткнулся на строчку:
Код:
A[i+1] :=A[i+1] + (LongInt (A[i]) *10) Div Osn;
Что означает LongInt (A[i])? Я искал в книге "Песни о паскале", "Основы программирование" Окулова, в интернете, но так и не нашел ответа.
Знающие, подскажите пожалуйста.
LetsRock вне форума Ответить с цитированием
Старый 10.06.2016, 21:38   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Тип данных, целое число.
Перевод значения из A[i] к этому типу.

Точно искал?
https://www.google.com/search?q=longint+pascal
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.06.2016, 22:03   #3
LetsRock
 
Регистрация: 18.08.2014
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Тип данных, целое число.
Перевод значения из A[i] к этому типу.

Точно искал?
https://www.google.com/search?q=longint+pascal
спасибо, я знаю что longint-это тип данных. Но я не понял, почему он в операции участвует. А зачем переводить в тип longint, когда сам массив объявлен как тип integer? В чем смысл этой записи? Года полтора назад, перед армией, я читал где-то, что это связано как-то с выходом за пределы значения типа данных, но точно сформулировать я не мог, поэтому решил спросить здесь. Собственно, вопрос остается открытым.
LetsRock вне форума Ответить с цитированием
Старый 10.06.2016, 22:25   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Смысл зависит от того что находится в А.
Может быть автор так делает чтоб избежать переполнения при умножении если в его версии Паскаля integer меньшего размера, чем longint. Например при умножении 30000 на 10 (если integer 2 байта).

http://wiki.freepascal.org/Integer
Цитата:
On older compilers, an integer was 16 bits, and represented values from -2^15 through 2^15 -1, or -32 768 through 32 767. A similar data type, word, was sometimes used to define an unsigned integer (0..65 535). In such cases where the compiler used a 16-bit integer type, 32-bit integers would usually be expressed by the long or longint data type.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 10.06.2016 в 22:27.
Alex11223 вне форума Ответить с цитированием
Старый 11.06.2016, 00:23   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Да, это связано с промежуточными вычислениями. Каждое действие выполняется по отдельности и запоминается во временных переменных(ну или ещё в чём то). Например,
Код:
var а,b: byte;
...
a := 150;
b := a+a-a
может дать ошибку переполнения или неправильный результат (если в данном случае оптимизация и вычисление до компиляции отключены). Связано это с тем, что результат сложения помещается во временную переменную того типа (из участвующих в сложении), в который влезают оба из них по отдельности, а не вместе.
Если написать просто A[i] *10, то с точки зрения программы результат этого поддействия должен помещаться в integer
В современном языке несмотря на умные компиляторы такой подвох тоже встречается

пы.сы
даже такой код может дать переполнение (в ранних версиях)
Код:
var a: byte; b:integer
...
a:=150;
b:=a+a

Последний раз редактировалось eoln; 11.06.2016 в 00:31.
eoln вне форума Ответить с цитированием
Старый 11.06.2016, 06:56   #6
LetsRock
 
Регистрация: 18.08.2014
Сообщений: 8
По умолчанию

Большое спасибо за помощь. Пожалуйста тему закройте/удалите.
LetsRock вне форума Ответить с цитированием
Старый 11.06.2016, 07:27   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Зачем? Чем вам лучше станет от закрытия (или тем более удаления) темы?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.06.2016, 09:05   #8
LetsRock
 
Регистрация: 18.08.2014
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Зачем? Чем вам лучше станет от закрытия (или тем более удаления) темы?
Я подумал, что засоряет форум. Ну может кому и пригодится
LetsRock вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста, объясните что происходит в каждой строчке программы. nason Помощь студентам 0 15.12.2015 19:22
Помогите пожалуйста разобраться в куске кода ourlifeforus Общие вопросы C/C++ 1 02.06.2009 19:37
Помогите разобраться с фрагментом кода! Танюшаа Microsoft Office Excel 2 03.04.2009 06:00
Помогите разобраться с фрагментом кода! Танюшаа Microsoft Office Excel 1 02.04.2009 17:00