|
Вопрос # 706/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!Срочно!надо поделить integer на 2 как это зделать?пишу r:=r/2 (r:integer)-не работает! где в делфи знак деления?
 |
Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 6 июля 2007, 11:31
Состояние вопроса: решён, ответов: 6.
|
Ответ #1. Отвечает эксперт: Dron
Здравствуйте, ММО!
Знак деления - "/", всё верно. Только вы забыли про то, что при делении числа (и целого и вещественного) получается число вещественное. А присвоить вещественное число целому нельзя (наоборот - можно). Компьютер же не знает, разделится ли число нацело или нет... Поэтому число нужно либо округлить, либо отбросить дробную часть. Например, округлить:
r:=Round(r/2);
 |
Ответ отправил: Dron (статус: Студент)
Время отправки: 6 июля 2007, 11:38
Оценка за ответ: 5
Комментарий к оценке: спасибо всё работает
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, ММО!
Да всё работает. Но представте, что r=5. тогда что будет результатом вашей операции деления?
Что бы решить эту проблему, нужно использовать явное приведение.
Для целочисленного деления есть оператор div и mod.
Первый возвращает целую часть от деления, второй - остаток. Например
5 mod 2 = 1
5 div 2 = 2
Можно также округлить, например
Round(5/2) = 2
Round(7/2) = 4
(Округляется по правилу: если дробная часть меньше 0.5, то в меньшую сторону, больше 0.5 - в большую. если равна 0.5 и целая чётна - в меньшую.
Также можно использовать функции Ceil - Округляет к ближайшему целому влево
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 6 июля 2007, 11:42
Оценка за ответ: 5
Комментарий к оценке: спасибо
|
Ответ #3. Отвечает эксперт: Градов Ю.М.
Здравствуйте, Матвеев Мефодий Олегович!
Можно использовать:
r:=Trunc(r/2);
 |
Ответ отправил: Градов Ю.М. (статус: 8-ой класс)
Время отправки: 6 июля 2007, 14:08
Оценка за ответ: 5
|
Ответ #4. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, ММО!
Только оператор деления (/) работает через FPU, целочисленное деление (div) работает за 3 или за 4 (точно не помню) тактов процессора. А самым верным вариантов деления на 2 будет shr 1, т.е. сдвиг битов вправо на один бит, при этом новые биты слева заполняются нулями.
Эта операция равносильна целочисленному делению на 2. Таким образом можно очень быстро делить на степени двойки. Кстати, обратное действие (shl) позволяет целочисленно умножать на степени двойки.
shr - ассемблерная команда, как использовать показано в приложении.
Приложение: Переключить в обычный режим- procedure NyamNyam(var Value: Integer);
- begin
-
- Value := Value + 3;
-
- asm
-
- shr Value, 1
-
- shl Value, 1
- end;
- end;
Ответ #5. Отвечает эксперт: Новаковский Юрий Аврамович
Здравствуйте, Матвеев Мефодий Олегович!
Если Вам не нужна дробная часть частного,
тогда так:
R:=R div 2;
Удачи!
Ответ #6. Отвечает эксперт: Дима Гусаков
Здравствуйте, ММО! переменную integer нельзя поделить, так как это целые числа. Пиши r:Real
 |
Ответ отправил: Дима Гусаков (статус: 2-ой класс)
Время отправки: 6 июля 2007, 23:36
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 12; последнее сообщение — 6 июля 2007, 13:18; участников в обсуждении: 3.
|
Аксион (статус: 4-ый класс), 6 июля 2007, 12:54 [#1]:
а вы не знаите как опредилить сколько мб видеокарта?вопрос номер 703
|
|
Dron (статус: Студент), 6 июля 2007, 12:56 [#2]:
Вадим К: Ceil() в модуле Math, т.е. без подключения эта функция найдена не будет. Да и округляет она вправо, а не влево.
С уважением.
|
|
Вадим К (статус: Академик), 6 июля 2007, 12:56 [#3]:
А с реестра слабо прочитать?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Dron (статус: Студент), 6 июля 2007, 12:57 [#4]:
ММО: вы в каком-то вопросе написали, что у вас программа делает то-то, то-то, то-то... Только, по-моему, вы сами ничего не пишете, а собираете её по кусочкам, которые вам дают эксперты...
С уважением.
|
|
Вадим К (статус: Академик), 6 июля 2007, 13:01 [#5]:
Да, Ceil вправо, Floor - влево. это я попутал, у меня сейчас сишный компилятор под арм. там только Ceil есть и округляет влево
То ММО: А за скоко программу, собирающую инфу о системе продавать будем?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Аксион (статус: 4-ый класс), 6 июля 2007, 13:10 [#6]:
и половину то-то-то-то я сделал сам!
|
|
Аксион (статус: 4-ый класс), 6 июля 2007, 13:13 [#8]:
какие вы злые мне всего 14 лет
|
|
Dron (статус: Студент), 6 июля 2007, 13:14 [#9]:
> с реестра - а в принципе можно
Ну и как? Успешно?
P.S. Может по этой теме лучше в форуме вопроса 703 писать?
С уважением.
|
|
Аксион (статус: 4-ый класс), 6 июля 2007, 13:14 [#10]:
еще ветвь не нашёл
|
|
Вадим К (статус: Академик), 6 июля 2007, 13:17 [#11]:
Почему мы злые? но 14 лет - это ничего не даёт. Это не мешает скачать delphiWorld.narod.ru и не морочить простыми вопросами
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Аксион (статус: 4-ый класс), 6 июля 2007, 13:18 [#12]:
там про видиокарту 3 строчки
|
31 января 2011, 19:16: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|