Dlaczego mogę wpisać liczby całkowite do zmiennoprzecinkowych?

0

Mam takie zadanko, zrobiłem je i na to wychodzi, że dobrze, ale czegoś nie rozumiem, jakim cudem mogę wpisać liczbę całkowitą jeżeli mam każdą zmienną we floacie?

O to treść zadania:

Napisz program, który pobiera prędkość pobierania (w megabitach na sekundę) oraz rozmiar pliku do pobrania (w megabajtach). Program powinien obliczyć czas pobierania pliku. Zauważ, że w tym kontekście jeden bajt to osiem bitów. Użyj typu float oraz operatora ' / ' do dzielenia. Program powinien wypisać wszystkie trzy wartości (prędkość pobierania, rozmiar pliku i wyliczony czas) do dwóch miejsc po przecinku, jak tutaj:

Przy 18.12 megabitow na sekunde plik o rozmiarze 2.20 megabajta zostanie pobrany w 0.97 sekundy

Dodam, że chciałem użyć operatora ' / ' do dzielenia, zadeklarowałem dodatkowe zmienne we floacie (predkosc2 i rozmiar_pliku2) a w int zrobiłem predkosc i rozmiar_pliku:

predkosc2=predkosc/1.0;
rozmiar_pliku2=rozmiar_pliku/1.0;

ale nie mogłem wtedy wpisać np. 18.12, bo musiałem tylko w incie, no i usunąłem te dodatkowe zmienne i to dzielenie przez operator ' / ' i wyszło xd

**O to ten kod co niby działa: **

#include <stdio.h>
#include <stdlib.h>

int main()
{

    float predkosc, rozmiar_pliku;
    float czas_pobierania, czas_pobierania2;

    printf("Podaj predkosc pobierania w megabitach na sekunde: ");
    scanf("%f", &predkosc);
    printf("Podaj rozmiar pliku do pobrania w megabajtach: ");
    scanf("%f", &rozmiar_pliku);
    czas_pobierania = (rozmiar_pliku * 8.0e-6) / 1.0e-6;
    czas_pobierania2 = czas_pobierania / predkosc;

    printf("Przy %.2f megabitow na sekudne plik o rozmiarze %.2f megabajta zostanie pobrany w %.2f sekundy", predkosc, rozmiar_pliku, czas_pobierania2);
    return 0;
}
0

Cześć,
Zmienna float bez problemu przechowuje także liczby całkowite, więc śmiało możesz wpisać taką. ;)
Zamieszczaj kod w znacznikach kodu.

0
Bartosz36 napisał(a):

Cześć,
Zmienna float bez problemu przechowuje także liczby całkowite, więc śmiało możesz wpisać taką. ;)
Zamieszczaj kod w znacznikach kodu.

No hej, dzięki za odpowiedź i dobrze wiedzieć, że float ma takie zalety ;) a jakby to wyglądało jakbym użył operatora dzielenia ' / ' ?

0

Przecież go użyłeś:

czas_pobierania=(rozmiar_pliku*8.0e-6)/1.0e-6;
czas_pobierania2=czas_pobierania/predkosc;
0
kq napisał(a):

Przecież go użyłeś:

czas_pobierania=(rozmiar_pliku*8.0e-6)/1.0e-6;
czas_pobierania2=czas_pobierania/predkosc;

Faktycznie xd

0

No hej, dzięki za odpowiedź i dobrze wiedzieć, że float ma takie zalety ;)

To nie tyle "zaleta" float'a, co normalna cecha każdej ze zmiennej. Prawdziwą zaletą float'a jest to, że w porównaniu do int'a ma on miejsce także na wartości po przecinku. Co więcej: ów przecinek może się przesuwać.
Pamiętaj tylko, by nie porównywać ze sobą liczb zmiennoprzecinkowych (czyli właśnie float lub double).

0

A teraz coś z innej beczki, ale z C i z łańcuchów. Mam napisać tak program, który pobiera imię i nazwisko od użytkownika i mam zliczyć liczbę liter z imienia i nazwiska, ale osobno.Np. Jan Kowalski, to w następnym wierszu ma być liczb liter np 3 pod imieniem i 8 pod nazwiskiem. I zrobiłem tak funkcją Strlen ale jeszcze mi każą w zadaniu umieść te liczby pod ostatnią literą tych wyrazów: Jan - 3 litery pod 'n' a 8 liter pod 'i' i nie wiem jak to zrobić.
To co mam:

printf("%s %s\n", imie, nazwisko);
printf("%u %u", strlen(imie), strlen(nazwisko));
return 0;

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