Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Математика


Ответ
 
Опции темы Опции просмотра
Старый 22.01.2009, 10:15   #11 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Darkcosinus Посмотреть сообщение
Цитата:
Сообщение от Vladimir_S
y:=x+y;
x=250, y=251... Получите integer out of range, распишитесь
Ну, Darkcosinus, теперь Вы меня по-настоящему достали!
Где в Вашей формулировке, скажите на милость, указано, что переменные имеют формат BYTE? Приведенное решение годится для форматов INTEGER, LongInt, REAL, EXTENDED и даже, если определить такой тип, то COMPLEX, т. е. переменные могут быть хоть комплексные!

Цитата:
Сообщение от Darkcosinus Посмотреть сообщение
Цитата:
Сообщение от Vladimir_S
x:=(x+y)/2;
А вдруг число нечётное? type mismatch
Если бы Вы соблаговолили проследить всю цепочку, то поняли бы, что в данной строке величина (x+y) есть В ТОЧНОСТИ УДВОЕННОЕ ЗНАЧЕНИЕ ИСХОДНОЙ ВЕЛИЧИНЫ y! Т.е. возражение АБСОЛЮТНО вздорное!

P.S. Боже, упаси нас от таких начальников и заказчиков-самодуров!
Vladimir_S вне форума   Ответить с цитированием

Старый 22.01.2009, 10:15
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Имеет смысл пролистать аналогичные посты

Витая пара
Пара общих вопросов
Талисманы Олимпиады 2014
Пара вопросов по аудио
Пара вопросов по TDA1552Q
Пара вопросов по усилителю.

Старый 22.01.2009, 10:41   #12 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ладно, черт с Вами - если уж так надо извернуться, чтобы остаться в пределах типа BYTE... Можем и так.

IF x>y THEN
BEGIN
y:=x-y;
x:=x-y;
y:=x+y;
END ELSE
BEGIN
x:=y-x;
y:=y-x;
x:=x+y;
END;

Последний раз редактировалось Vladimir_S; 22.01.2009 в 10:52
Vladimir_S вне форума   Ответить с цитированием
Старый 22.01.2009, 14:33   #13 (permalink)
Darkcosinus
Member
 
Регистрация: 25.04.2008
Сообщений: 238
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Приведенное решение годится для форматов INTEGER, LongInt, REAL, EXTENDED и даже, если определить такой тип, то COMPLEX
А они ограничений не имеют? Я просто показал примером, что сложение там не пройдёт. Тип тут не важен.

С делением на 2 - был неправ, ошибся в расчётах.

Последнее решение нежизнеспособно - неправильно работает при x=y и опять же out of range в случае, если одно из значений отрицательное.
Darkcosinus вне форума   Ответить с цитированием
Старый 22.01.2009, 15:01   #14 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Darkcosinus Посмотреть сообщение
А они ограничений не имеют? Я просто показал примером, что сложение там не пройдёт. Тип тут не важен.

С делением на 2 - был неправ, ошибся в расчётах.

Последнее решение нежизнеспособно - неправильно работает при x=y и опять же out of range в случае, если одно из значений отрицательное.
При x=y работает - "стоя, лёжа и с колена"! Что-то у Вас, похоже, с арифметикой, сударь, не лады.
Что до знаков - ну можно выстроить цепочку типа
if (x>0) and (y<0) then ... else if ну и т.д. Скучища!
Vladimir_S вне форума   Ответить с цитированием
Старый 22.01.2009, 17:05   #15 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

У меня для вас отличная новость! Мне аж до конца учебного года дали книжку с самостоятельными и контрольными по программированию! Если возникнут затруднения - я сразу к вам.
ummasha вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 22.01.2009, 17:16   #16 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ummasha Посмотреть сообщение
У меня для вас отличная новость! Мне аж до конца учебного года дали книжку с самостоятельными и контрольными по программированию! Если возникнут затруднения - я сразу к вам.
Ну что же - чем можем, как говорится. Всегда пожалуйста.
Vladimir_S вне форума   Ответить с цитированием
Старый 22.01.2009, 19:58   #17 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Задача: найти сумму цифр натурального числа:

Program k1_w1_a;
Var m,n,s,p:longint;
k:integer;
Begin
Write('n=');read(n);
m:=n;k:=0;s:=0;
while m<>0 do begin
p:=m mod 10;
s:=s+p;
Writeln('p=',p,'s=',s);
k:=k+1; m:=m div 10;end;
writeln('сумма цифр S=',s); readln;
end.

Все нормально, но зачем выводить это:

n=46
p=6s=6
p=4s=10

сумма цифр S=10

Это - промежуточные значения? Нельзя ли обойтись без них? Просто эта задача решена в книге, а потом дано еще несколько подобных для самостоятельной работы.
ummasha вне форума   Ответить с цитированием
Старый 22.01.2009, 22:12   #18 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ummasha Посмотреть сообщение
Это - промежуточные значения? Нельзя ли обойтись без них?
Можно, конечно. Так - для наглядности и для контроля хода выполнения программы. Обучение всё-таки.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.01.2009, 10:58   #19 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Просто удалите Writeln('p=',p,'s=',s); из программы. Для чего оно нужно - написано выше.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 23.01.2009, 16:34   #20 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Спасибо! Так и сделаю.
ummasha вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 07:16.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.