Автор |
Сообщение |
mega Форумчанин |
|
Народ, обьясните решение этой задачи:
"В массиве A(m) хранятся различные вещественные числа ( как больше, так и меньше единицы).
Округлите их, оставив в каждом по 3 значащих цифры." |
|
|
|
|
BS Эксперт |
|
А где решение, чтобы его объяснять?
Условие сранноватое, я бы сказал.
Причём здесь еденица.
Я понял, что просят округлить цифры до третьего знака после запятой.
Если так, то есть можество решений этой зачаачи.
Например, умножить на 1000 числа, убрать числа после запятой и поделить на 1000. |
|
|
|
|
Эйр Форумчанин |
|
Нет, тут же не просто до 3 знака, тут нужно 3 значащие цифры оставить! т.е. после запятой может быть сколько угодно знаков) |
|
|
|
|
BS Эксперт |
|
Вмысле, начиная с третьего округлить так, чтобы остались цифры больше 5? Или как? |
|
|
|
|
Эйр Форумчанин |
|
нет, не так.
Цитата: |
Значащие цифры числа - все цифры в его десятичном изображении, отличные от нуля, и нули, если они содержатся между значащими цифрами или расположены в конце числа и указывают на сохранение разряда точности. Нули, стоящие левее правой отличной от нуля цифры, НЕ являются значащими цифрами. Например, числа 25.047 и 0.00250 имеют соответственно 5 и 3 значащих цифр. |
Вот число 256, в нем 3 значащие цифры и ни одного знака после запятой! Ну хотя вещественные числа обычно без дробной части не используются)) |
|
|
|
|
BS Эксперт |
|
Приведи пример того, как должно быть, если не в ломы?
Типа
2341234
2340000
Так? |
|
|
|
|
Эйр Форумчанин |
|
Всмысле как прога должна работать? Ну например округляем число 2.03356, получаем 2,03; число 0.000256213 -> 0.000256
Я все-таки думаю, целые числа тут не надо брать |
|
|
|
|
BuXTeR Продвинутый форумчанин |
|
Насколько понял, как-то так:
Код: |
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
double func(double d)
{
char buf[100];
char out[100];
sprintf(buf,"%.15f",d);
int i,count,flag;
for(i=0,count=0,flag=0;buf[i]!='\0' && count<3;i++)
{
out[i]=buf[i];
out[i+1]='\0';
if(buf[i]=='-' || (buf[i]=='0' && !flag) || buf[i]=='.') continue;
flag=1;
count++;
}
return atof(out);
}
void main(){
clrscr();
double A[5]={0.000256213,2.03356,-1.0000456,-10.012222,-00000.000023};
for (int i=0;i<5;i++)
printf("In: %.10f\nOut: %.10f\n\n",A[i],func(A[i]));
getch();
} |
Код: |
In: 0.0002562130
Out: 0.0002560000
In: 2.0335600000
Out: 2.0300000000
In: -1.0000456000
Out: -1.0000000000
In: -10.0122220000
Out: -10.0000000000
In: -0.0000230000
Out: -0.0000230000 |
|
|
|
|
|
mega Форумчанин |
|
ДА все, уже ненадо!! спасибо всем |
|
|
|
|
|
Аватары: Вкл|Выкл ЮзерИнфо: Вкл|Выкл Подписи: Вкл|Выкл
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы
|
|