Ошибка при программировании на языке С++.

Аватар пользователя
NT
Сообщений: 3384
Зарегистрирован: 25 янв 2010, 21:00

Ошибка при программировании на языке С++.

Сообщение NT » 12 мар 2014, 09:03

folk писал(а):Source of the post
По поводу sqrt - он и комплексный бывает
Да. Но пользователь хотел бы в собственной программе (без complex) - разобраться.

kiv писал(а):Source of the post
Можно и с запятой, но тогда надо очень корректно указать локализацию...
Да, это конечно.
Но в рамках программы этого нет.
Скорее по умолчанию среда Windows что-то вносит.
Поэтому лучше не мудрить - остаться в стандарте и вводить с точкой. Нет ?

PS. Для ввода:
sn = 0.02
k1 = 1
k2 = 2
результат:

Код: Выбрать все

sn
0.02
 k1
1
 k2
2
a = -49.02
sk = 1
Press any key ...


PPS. Это под Windows XP.
А с запятой (0,02) - выдает NaN.
Последний раз редактировалось NT 27 ноя 2019, 21:27, всего редактировалось 1 раз.
Причина: test

novichok222
Сообщений: 4
Зарегистрирован: 11 мар 2014, 21:00

Ошибка при программировании на языке С++.

Сообщение novichok222 » 12 мар 2014, 10:02

NT писал(а):Source of the post
folk писал(а):Source of the post
По поводу sqrt - он и комплексный бывает
Да. Но пользователь хотел бы в собственной программе (без complex) - разобраться.

kiv писал(а):Source of the post
Можно и с запятой, но тогда надо очень корректно указать локализацию...
Да, это конечно.
Но в рамках программы этого нет.
Скорее по умолчанию среда Windows что-то вносит.
Поэтому лучше не мудрить - остаться в стандарте и вводить с точкой. Нет ?

PS. Для ввода:
sn = 0.02
k1 = 1
k2 = 2
результат:

Код: Выбрать все

sn
0.02
 k1
1
 k2
2
a = -49.02
sk = 1
Press any key ...


PPS. Это под Windows XP.
А с запятой (0,02) - выдает NaN.

переменная i не инициализирована. int i=0; должно быть
Последний раз редактировалось novichok222 27 ноя 2019, 21:27, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
NT
Сообщений: 3384
Зарегистрирован: 25 янв 2010, 21:00

Ошибка при программировании на языке С++.

Сообщение NT » 12 мар 2014, 10:09

novichok222 писал(а):Source of the post переменная i не инициализирована. int i=0; должно быть

В данном случае не в этом проблема.
Сделал инициализацию int i = 0;

Код: Выбрать все

int main()
{
 int i = 0;
 double k1, k2,a,sk, sn, z,t; ...

Ввожу 0,02 и имею:

Код: Выбрать все

sn
0,02
 k1
 k2
a = nan
sk = nan


PS. Вообще такое пожелание.
Код опубликован - довольно прозрачный в пониманию.
Каждое предложение можно сначала у себя проверить и только потом публиковать.
Это же не трудно.
Последний раз редактировалось NT 27 ноя 2019, 21:27, всего редактировалось 1 раз.
Причина: test

folk
Сообщений: 4177
Зарегистрирован: 11 сен 2009, 21:00

Ошибка при программировании на языке С++.

Сообщение folk » 12 мар 2014, 10:30

Попробовал настроить локаль для , - не получилось. ( windows+cygwin+g++4.8.2)
То есть стоит то правильно но приложение не понимает

$ locale -ck LC_NUMERIC
LC_NUMERIC
decimal_point=","
thousands_sep="▒"
grouping=3
numeric-decimal-point-wc=44
numeric-thousands-sep-wc=160
numeric-codeset="CP1251"

Попытка поставить в программе так же к успеху не приводит - не понимает запятую cin >> double
Последний раз редактировалось folk 27 ноя 2019, 21:27, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
NT
Сообщений: 3384
Зарегистрирован: 25 янв 2010, 21:00

Ошибка при программировании на языке С++.

Сообщение NT » 12 мар 2014, 12:43

folk писал(а):Source of the post
Попытка поставить в программе так же к успеху не приводит - не понимает запятую cin >> double

Folk, того как вы установили locale, попробуйте отчитать decimal point separator отсюда:
numpunct::decimal_point

PS. там пример есть и у меня всё время выходит точка ))
Последний раз редактировалось NT 27 ноя 2019, 21:27, всего редактировалось 1 раз.
Причина: test

balans
Сообщений: 2030
Зарегистрирован: 29 дек 2012, 21:00

Ошибка при программировании на языке С++.

Сообщение balans » 12 мар 2014, 16:07

zykov писал(а):Source of the post
Так прямо с запятой и вводите?

Вот я дурак...

NT писал(а):Source of the post
А почему запятая?
Надо с точкой.
0.02

Старая привычка.

NT писал(а):Source of the post
novichok222 писал(а):Source of the post переменная i не инициализирована. int i=0; должно быть

В данном случае не в этом проблема.

На сколько я понимаю, не инициализированная величина автоматически приравнивается нулю.

NT писал(а):Source of the post
PS.Для проверки: подайте мне все данные для ввода - я прогоню и дам вам результат.

Ввел данные
k1=0.591
k2=0.454
sn=0.02
Ответ
a=1.91107
sk=0.177789.
Правда на фортране ответ получился несколько иной, но это ерунда.

Всем спасибо.
Последний раз редактировалось balans 27 ноя 2019, 21:27, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
zam2
Сообщений: 3760
Зарегистрирован: 13 авг 2013, 21:00

Ошибка при программировании на языке С++.

Сообщение zam2 » 12 мар 2014, 16:41

balans писал(а):Source of the post На сколько я понимаю, не инициализированная величина автоматически приравнивается нулю.
Никогда на это не рассчитывайте. Так может быть в отладочном режиме и не быть в окончательной версии.
balans писал(а):Source of the post Правда на фортране ответ получился несколько иной...
Подозреваю, что это из-за разного числа выполненных итераций.
Последний раз редактировалось zam2 27 ноя 2019, 21:27, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
NT
Сообщений: 3384
Зарегистрирован: 25 янв 2010, 21:00

Ошибка при программировании на языке С++.

Сообщение NT » 12 мар 2014, 16:48

balans писал(а):Source of the post
На сколько я понимаю, не инициализированная величина автоматически приравнивается нулю.
Нет, это не правильно.
Надо всегда явно задавать начальные значения (выработать привычку).

PS. Когда декларируете переменную, то компилятор просто выделяет ячейку памяти (точнее создаёт указатель на область памяти) для переменной.
Сколько он выделит памяти зависит от типа переменной.
И боб знает, что там может быть в этой выделенной памяти.
Последний раз редактировалось NT 27 ноя 2019, 21:27, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
zykov
Сообщений: 1777
Зарегистрирован: 02 ноя 2009, 21:00

Ошибка при программировании на языке С++.

Сообщение zykov » 12 мар 2014, 17:11

balans писал(а):Source of the post На сколько я понимаю, не инициализированная величина автоматически приравнивается нулю.
Это уж как получится. Мoжет быть и 0, а может быть и мусор. Называется Undefined behavior.
Последний раз редактировалось zykov 27 ноя 2019, 21:27, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
NT
Сообщений: 3384
Зарегистрирован: 25 янв 2010, 21:00

Ошибка при программировании на языке С++.

Сообщение NT » 12 мар 2014, 21:53

balans писал(а):Source of the post
Правда на фортране ответ получился несколько иной, но это ерунда.
И не удивительно.
Поставьте инициaлизацию для int i и будет вам счастье.
Последний раз редактировалось NT 27 ноя 2019, 21:27, всего редактировалось 1 раз.
Причина: test


Вернуться в «Computer Science»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 2 гостей