Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2009, 14:38   #1
pif
Пользователь
 
Регистрация: 26.11.2008
Сообщений: 37
По умолчанию Си. Преобразование типов

в строке написано вещественное число r в форме с плавающей точкой (форма с плавающей точкой подразумевает сдесь различные вариации записи:например
1.665E+1
1.65E01(знак может не присутствовать)
165e-01(е может быть маленькой,число в мантисе не обязательно содержит один занк до запятой)
-16.5(просто без е) )
Если это число не является целым найти такое минимальное целое k,чтобы n=r*10^k было целым.Число n вывести.
вот мой вариант программы(в общем виде она должна выгледеть так)
Код:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
char s[32];
gets (s);
int i=0,r=0;
int sign;
if (s[i]=='-' ||s[i]=='+')
 {
  if (s[i++]=='-')
     sign=-1;
 }

while ((s[i]<='9')&&(s[i]>='0'))
 {
  r=r*10+s[i++]-'0';
 }
i++;
int dl_m=0;
while ((s[i]<='9')&&(s[i]>='0'))
 {
  r*=10;
  dl_m++;
  if (s[i]!='0')
    r+=(s[i++]-'0');
 }
 i++;
 int sign_e=0,e=0;
  if ((s[i++]=='E')||(s[i++]=='e'))
   {
     if ((s[i]=='+')||(s[i]=='-'))
    {
     if (s[i++]=='-')
      sign_e=-1;
    }
    while ((s[i]<='9')&&(s[i]>='0'))
     {
      e=e*10+s[i++]-'0';
     }

   }
  double w,h;
  if ((e*sign_e-dl_m)>0) 
  {
      w=r*pow(10,(e*sign_e-dl_m))*sign;
       printf("%f",w);
    }
    else
     {
      h=abs(e*sign_e-dl_m)*sign_e;
      printf("%f",h);
     }
     system("pause"); 
}
Косяк в том что прога не работает(( (выдает 0.0000 при любых значениях входных данных)
просьба найти ошибку ну или как получится... помогите плиз

Последний раз редактировалось pif; 19.04.2009 в 14:40.
pif вне форума Ответить с цитированием
Старый 19.04.2009, 15:05   #2
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Попробуй использовать %lf вместо %f в printf.
megachuhancer вне форума Ответить с цитированием
Старый 19.04.2009, 15:42   #3
pif
Пользователь
 
Регистрация: 26.11.2008
Сообщений: 37
По умолчанию

нууу.... как бы все равно не пашет...тут скорее где то ошибка в алгоритме....
pif вне форума Ответить с цитированием
Старый 20.04.2009, 13:54   #4
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Я потрассировал твою программу и... Уж не разобрался какая переменная за что отвечает (тогда может я и переписал бы даже программу), но вот sign_e это вроде знак (по крайней мере так следует из названия), и, как я понимаю он должен быть -1 или 1, а он 0.
megachuhancer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование типов DeFace Общие вопросы C/C++ 4 24.03.2009 17:06
преобразование типов в Си HoOpe Помощь студентам 5 11.03.2009 21:58
Преобразование типов MAKEDON Общие вопросы C/C++ 3 02.03.2009 18:27
Преобразование типов Pronik Общие вопросы Delphi 2 12.06.2007 12:23