Notacja wykładnicza w C

0

Witam. Proszę o pomoc w napisaniu krótkiego programu. Nie mam pojęcia jak ogarnąć tą notację wykładniczą, bo swoją drogą miałem dopiero 3h ćwiczeń w C, bez żadnych wykładów.
Treść zadania: Napisz program, który wczytuje ze standardowego wejścia liczbę wymierną i wypisuje ją na standardowym wyjściu w notacji wykładniczej (czyli takiej, w której 0.2 to 2.0e-1).

Proszę o szybką pomoc, bo potrzebuję tego do środy :)

0
float fX;
scanf("%f", &fX);
printf("%+.0e", fX);

Twoje zadanie: dopisać resztę.

0

Nie bardzo mi to coś idzie.
Napisałem coś takiego:

#include <stdio.h>
#include <math.h>

int main()
{
float fX;
scanf("%f", &fX);
printf("%+.0e", fX);

return 0;

}

0

Po wpisaniu 0.2 w konsoli, wychodzi wynik +2e-001. Powinno być chyba tak jak w treści zadania, czyli 2.0e-1.

0

Nie mam zielonego pojęcia. Zmieniam to, zmieniam tamto i nie wiem, co nie gra.

0

No wiem, że tam jest odpowiedź i próbuję wg. tej strony, ale dalej szału nie ma.

0

To pomoże ktoś, bo zaraz mnie coś trafi...?

0
  • Forces to preceed the result with a plus or minus sign (+ or -) even for positive numbers. By default, only negative numbers are preceded with a - sign.

.* The precision is not specified in the format string, but as an additional integer value argument preceding the argument that has to be formatted.

0

Dobra, nie wiem. Nie będę nad tym siedział tyle czasu, bo jeszcze z 20 innych przykładów mam. Dzięki za próbę nauczenia.

0

#include <stdio.h>
#include <math.h>

int main()
{
float fX;
scanf( "%f", & fX );
printf( "%e", fX );

return 0;

}

Takie coś mam, ale np. zamiast "7.0e-5" pokazuje "7.000000e-005".

0

Człowieku jak nie nauczysz się korzystać z dokumentacji to nigdy nie będziesz programować.
A zaraz pójdą duże zadania i wtedy co?
Niczego większego niż 10-15 wiersz nikt dla ciebie za darmo nie zrobi.

printf("%.1e",fX);
0

Spoko, chyba jakoś się muszę tego nauczyć. Piszesz, jakbyś sam od razu wszystko umiał. To ile mam Ci zapłacić za tą radę? 100zł? 200zł?

0

"%.1e" pomogło na 0 przy liczbie i faktycznie jest np. "7.0e", ale dalej nadal jest np. "-004" a nie zwykłe "-4". Da się to skorygować?

0

Można wiedzieć, jak tego dokonać?

1

Chłopaki, nie odsyłajcie go do manuala, z tego co czytam tego nie da się zrobić zwykłym formatem w printf:

http://stackoverflow.com/questions/8773133/c-how-to-get-one-digit-exponent-with-printf

Trzeba by formatować tekst (wycinanki), ale to na pewno przekracza możliwości autora wątku.

0

@vpiotr te wycinanki wcale nie muszą być aż tak skomplikowane: http://ideone.com/3xzlNz

0

Doskonale :) Program pod tym linkiem jest ok: http://ideone.com/Yxmr8t
Zastanawia mnie jedynie, jakim cudem sam miałem go napisać :O ale to już inna sprawa. Dzięki wszystkim za zainteresowanie i pomoc.

0

Ale jaja, faktycznie. Akurat przy sprawdzaniu nie wbiłem liczby, gdzie byłyby 0 w środku. Haha, się nacieszyłem ;)

2

trzeba się zrehabilitować po wpadce: http://ideone.com/sDXe08
lepiej i równie prosto chyba się nie da.

0

http://ideone.com/sDXe08 daje mi w DevC++ error na 12 linijce [double mantisa10 = x / pow10(exponent10);]

1

@_13th_Dragon:

A to czasem nie jest UB?

char *ptr=strchr(buff,'e')+2,*end=ptr;
0

_13th_Dragon - czytam komentarze i widziałem, to co wrzuciłeś. Ale chciałem jeszcze to drugie odpalić. W tym Twoim programie wyskakuje zawsze 6 cyfr po przecinku w wyniku i chciałem zobaczyć, czy na innym programie będzie inaczej.

0

@ _13th_Dragon - czytam komentarze i widziałem, to co wrzuciłeś. Ale chciałem jeszcze to drugie odpalić. W tym Twoim programie wyskakuje zawsze 6 cyfr po przecinku w wyniku i chciałem zobaczyć, czy na innym programie będzie inaczej.

0

Super, jest w końcu jak ta lala ;]
http://ideone.com/5D52DN

Dziękuję jeszcze raz wszystkim za chęci i pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1