Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

Народное голосование ПРЕМИИ РУНЕТА-2007!
Голосуем за RusFAQ.ru >>

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 902
от 10.11.2007, 08:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 478, Экспертов: 68
В номере:Вопросов: 3, Ответов: 7


Вопрос № 107989: Уважаемые эксперты, я впринципе начинающий и хотел бы спросить, каким образом можно в Dlg.cpp из под кода одной кнопки перенести переменную в код другой кнопки. В первом случае в переменную m_u было вписано дробное число из буфера. Буфер представлял ...
Вопрос № 107997: Подскажите, почему ноль? Вот текст: float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}}; float a[5]={0,0,0,0,0}; float b[5]={6,6,6,6,6}; int N=6; int n=3; int m=2; int dyr[6]={0}; ...
Вопрос № 108018: Есть код в нем eta[r] выводиться без десятичной части. Как ликвидировать эту ошибку?...

Вопрос № 107.989
Уважаемые эксперты, я впринципе начинающий и хотел бы спросить, каким образом можно в Dlg.cpp из под кода одной кнопки перенести переменную в код другой кнопки. В первом случае в переменную m_u было вписано дробное число из буфера. Буфер представлял собой отдельный файл. (Это там где начинается:
void CLAB1Dlg::OnButtonSa5()
{
double hh[1];
hh[0]=atof(m_u_t);........)
Отправлен: 04.11.2007, 17:27
Вопрос задал: Чернов Андрей (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ross
Здравствуйте, Чернов Андрей!

Просто объявите переменную типа double членом класса CLAB1Dlg. Тогда она будет доступна в обоих обработчиках.
---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 04.11.2007, 18:02
Оценка за ответ: 5


Вопрос № 107.997
Подскажите, почему ноль?
Вот текст:
float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}};
float a[5]={0,0,0,0,0};
float b[5]={6,6,6,6,6};
int N=6;
int n=3;
int m=2;
int dyr[6]={0};
int sum_dyri, sum_dyr, dyr_i;
float Pob;
sum_dyr=0;
for (int i=0; i<N; i++)
{
sum_dyri=0;
for (int r=n; r<(n+m); r++)
{
if (xr[r][i]>=a[r] && xr[r][i]<=b[r]){dyr_i=1;}
else {dyr_i=0;}
sum_dyri=sum_dyri+dyr_i;
//printf("dyr_i = %i ",dyr_i);
//printf("sum_dyri = %i ",sum_dyri);
}
if (sum_dyri==m) {dyr[i]=1;} else {dyr[i]=0;}
sum_dyr=sum_dyr+dyr[i];
printf("dyr[%i] = %i ",i, dyr[i]);
printf("sum_dyr = %i ",sum_dyr);
}
Здесь все работает замечательно, и в конце концов sum_dyr=3. Но как только дописываю строки:
Pob=sum_dyr/N;

for (int i=0; i<N; i++)
{
printf("dyr[%i] = %i",i,dyr[i]);
}
printf(" ");

printf("sum_dyr= %f ",sum_dyr); printf("Pob = %f ",Pob);
то здесь уже sum_dyr=0 и соотвественно Pob=0; подскажите почему обнуляется. Полный текст программы сомтри в приложении:

Приложение:

Отправлен: 04.11.2007, 18:29
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Djec
Здравствуйте, Mart!
Дело в том, что в конце вы вододите уже как вещественные переменные а они целые. Строку
printf("sum_dyr= %f ",sum_dyr); printf("Pob = %f ",Pob);
надо заменить на
printf("sum_dyr= %i ",sum_dyr); printf("Pob = %i ",Pob);
---------
Никогда не сдавайся, даже если боишься проиграть
Ответ отправил: Djec (статус: 4-ый класс)
Ответ отправлен: 04.11.2007, 18:44
Оценка за ответ: 4

Отвечает: Navnav
Здравствуйте, Mart!
Все дело в строке:
Pob=sum_dyr/N;
Т.к. sum_dyr и N имеют целый тип, и при применении
операции присвоения преобразования типов не происходит,
то у вас происходит целочисленное делениe (3/6=0).
Для получения правильного результата необходимо
одну из переменных (любую) привести к действительному типу:
В С++: Pob= static_cast <double> (sum_dyr)/N;
В Си: Pob= (float) sum_dyr/N;
Ответ отправил: Navnav (статус: 1-ый класс)
Ответ отправлен: 04.11.2007, 18:58
Оценка за ответ: 5

Отвечает: Mihail Yarlykov
Здравствуйте, Mart!
Во первых Pob получается равным нулю потому что sum_dyr и N определены как int и деление происходит без дробной части, после чего результат помещается в Pob, для того что бы дробная часть не отбрасывалась необходимо приведение типа, т.е. такая запись: Pob = (float)sum_dyr / (float)N;
А sum_dyr всё же равно трём но вывод нужно переписать так:
printf("sum_dyr= %d ", sum_dyr);

Приложение:

---------
Нет ничего невозможного!

Ответ отправил: Mihail Yarlykov (статус: 4-ый класс)
Ответ отправлен: 04.11.2007, 19:16


Вопрос № 108.018
Есть код в нем eta[r] выводиться без десятичной части. Как ликвидировать эту ошибку?

Приложение:

Отправлен: 04.11.2007, 21:01
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Argus98
Здравствуйте, Mart!
используйте не printf("eta[%i] = %f ",r,eta[r]), а printf("eta[%i] = %0.9f ",r,eta[r]);
Ответ отправил: Argus98 (статус: 1-ый класс)
Ответ отправлен: 04.11.2007, 21:31
Оценка за ответ: 5

Отвечает: Navnav
Здравствуйте, Mart!
Все у вас правильно. Маленькая описка при выводе (забыли r):
printf("sum_mxr[%i] = %i ",r,sum_mxr[r]);
printf("sum_myr[%i] = %i ",r,sum_myr[r]);
Дробной части нет, т.к. у вас такие исходные данные, что ее и
не должно быть. Поставьте другие значения в исходных массивах -- появится дробная часть.
Ответ отправил: Navnav (статус: 1-ый класс)
Ответ отправлен: 04.11.2007, 22:30
Оценка за ответ: 5

Отвечает: Mihail Yarlykov
!!!
Здравствуйте, Mart!
Просто по умолчанию идёт вывод шести цифр после запятой, необходимо просто увеличить их количество. Например %.10f
printf("eta[%i] = %.10f ", r, eta[r] );

Повторный ответ.
-----
∙ Отредактировал: Gh0stik (Профессор)
∙ Дата редактирования: 05.11.2007, 00:11

---------
Нет ничего невозможного!
Ответ отправил: Mihail Yarlykov (статус: 4-ый класс)
Ответ отправлен: 04.11.2007, 23:13


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.62.0 от 08.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное