Вопрос № 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);........)
Просто объявите переменную типа 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;
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] );
--------- Нет ничего невозможного!
Ответ отправил: Mihail Yarlykov (статус: 4-ый класс)
Ответ отправлен: 04.11.2007, 23:13