Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Бейсик: грабля или фишка (последняя попытка)

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
AndyM
Гость





СообщениеДобавлено: Сб Дек 07 2002 08:22    Заголовок сообщения: Бейсик: грабля или фишка (последняя попытка) Ответить с цитатой

Попросили меня помочь с контрольной по информатике.
Задание: вычислить значение функции при аргументе x[1;2] с приращением 0.05. Результат вывести в виде таблицы. ОК.
Рисую на QBasic:
x=1
while x<=2
print x
x=x+0.05
wend
На экране вывод:
1
1.05
1.1
...
1.5
1.5499999
...
1.9999999
Ч то за грабли?
Переношу код в VB5
там дебаг рисует правильно, НО! почему-то только до 1.95. Ставлю брекпойнт на wend, спрашиваю:
?x
2
?x=2
False (!!!!!!)
?x^2
4
?x-2
8,88178419700125E-16 (???????)
Расскажите, где грабли, не дайте помереть неграмотному!!!
Вернуться к началу
Олигарх



Зарегистрирован: 28.09.2002
Сообщения: 102

СообщениеДобавлено: Сб Дек 07 2002 18:51    Заголовок сообщения: Re: Ответить с цитатой

Бейсик - сплошные грабли.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Вячеслав
Гость





СообщениеДобавлено: Вс Дек 08 2002 12:22    Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) Ответить с цитатой

почитай книгу по Basic
для начала определи тип X
и все будет ОК
Вернуться к началу
AndyM
Гость





СообщениеДобавлено: Пн Дек 09 2002 05:22    Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) Ответить с цитатой

Я так полагаю, что Вы, дорогой, внимательно эти книги изучили...
Прекрасно.
Дело в том, что как ни объявляй переменную, но если к 1.5 прибавить 0.05, то с любой степенью точности будет 1.55, а не 1.549999!
Добавьте объявление dim х as single, замените в условии цикла 2 и посмотрите!
Вернуться к началу
Old_Den
Гость





СообщениеДобавлено: Пн Дек 09 2002 12:25    Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) Ответить с цитатой

Ха, наивный, там тип Single - кривой, используй double. Я когда бухгалтерию писал - та же фигня была...
Вернуться к началу
Вячеслав
Гость





СообщениеДобавлено: Пн Дек 09 2002 12:41    Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) Ответить с цитатой

Да батенька учитца вам надо!
Почитай книги особенно раздел о типах данных
Объяви свою переменную как double и запусти свою Super программу и удивись результатам
Вернуться к началу
AndyM
Гость





СообщениеДобавлено: Пн Дек 09 2002 13:29    Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) Ответить с цитатой

Слава, учиться полезно всем и всегда, полностью согласен.
Почему бы тебе, прежде чем значительно сотрясать воздух прописными истинами, не попробовать самому запустить такую вот Супер-программу. Я тебя уверяю, ты будешь сильно удивлен! Итак, я УТВЕРЖДАЮ, что следующий код
dim x as Double (пусть так!)
x=1
while x<=2
debug.print x
x=x+0.05
wend
работает только до 1.95.
Все результаты по проверке значения х после последней итерации см. в первом сообщении.
МОЖЕТ КТО-НИБУДЬ ГРАМОТНО МНЕ ЭТО ОБЪЯСНИТЬ?
Вернуться к началу
Вячеслав
Гость





СообщениеДобавлено: Пн Дек 09 2002 15:40    Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) Ответить с цитатой

Ты не поверишь не удивлен.
Чувствую дружок ты хотел увидеть цифру 2!?
тогда надо записать так
Dim x As Currency '!!!!!!!!!!!!
x = 1
While x
Вернуться к началу
Вячеслав
Гость





СообщениеДобавлено: Пн Дек 09 2002 15:41    Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) Ответить с цитатой

В догонку .все как бы безобидно но ....:
Dim a as Integer
Dim b as Integer
Dim RESULT as Long
a=100
b=400
RESULT = a * b
Debug.Print RESULT

Это к вопросу "сотрясать воздух прописными истинами"
если бы ты их знал то не возникало бы таких вот вопросов.
Вернуться к началу
AndyM
Гость





СообщениеДобавлено: Вт Дек 10 2002 06:13    Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) Ответить с цитатой

Что-то, Славик, стало меня общение с тобой понемногу напрягать...
Итак, последовательным методом тыка сначала ты советуешь объявить как Double - и это не работает. Затем все-таки ты находишь подходящий тип для данного отдельно взятого куска кода, более того - для данных отдельно взятых чисел (измени x с 1 на любое, не подходящее под Currency)!
Дорогой, да неужели я не сделал уже всего этого еще неделю назад, когда впервые столкнулся с этой бедой! И не провел кучу экспериментов и с объявлениями, и с разными фактическими значениями!
Также ежу понятно, что выход есть всегда, и дополнительно наворачивая Round() и т.д., можно сделать все, что хочешь!
К чему твой пример последний, я вообще не понял...
Впрочем, глубоким спецом по Бейсику я не являюсь, да я вроде и не скрывал этого, грабля меня заинтересовала из любопытства и вследствие своей очевидной "грабельности".
И, судя по тому, что остальное сообщество молчит, я прихожу к выводу, что это если и не ошибка (да я так и не думал, ясно, что за столько лет существования языка ее бы исправили), то вполне очевидное и довольно большое,с моей точки зрения,неудобство .
Засим заканчиваю.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...