• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana jednostek wielkości pliku (bajtów) na kB,MB,GB

0 głosów
1,344 wizyt
pytanie zadane 26 października 2020 w C i C++ przez ania1210 Nowicjusz (200 p.)

Czy mógłby powiedzieć mi ktoś dlaczego program źle oblicza, wskazać gdzie jest błąd i pomóc mi go porpawić? Z góry dziękuje za pomoc :)

#include <iostream>
#include <math.h>
#include <windows.h>

using namespace std;
int main ()
{
	char odp;
	double v,t,s,j;
	
	do
	
	{
		system ("cls");		//czyszczenie ekranu
		cout<<"Program jest kalkulatorem liczenia czasu przeplywu transferu"<<endl;
		cout<<"Podaj wielkosc pliku"<<endl;
		cin>>s;
		cout<<"Podaj jednostke wielkosci pliku K/M/G"<<endl;
		cin>>j;
		cout<<"Podaj predkosc przeplywu transferu w Mb/s"<<endl;
		cin>>v;
		
			if (j=='K');
			{
				t=((s*1024*8)/(v*1000000));
			}
			if (j=='M');
			{
				t=((s*1024*1024*8)/(v*1000000));
			}
			if (j=='G');
			{
				t=((s*1024*1024*1024*8)/(v*1000000));
			}
		
			int r,n;
			int a=t;
			int min=60;
		
		cout<<"Czas przplywu transferu wynosi "<<a/min<< " minut "<<a%min<<" sekund"<<endl;
		cout<<"czy zakonczyc? t/n"<<endl;
	  	cin>>odp;
	   	system ("cls");
	}
		while (odp=='n');
		return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 26 października 2020 przez Piotr Batko Stary wyjadacz (13,210 p.)

Dwa problemy jakie zauważyłem na szybko:

1. Literek nie wczytuj do zmiennej, która przechowuje liczby. Mówię o kodzie:

double j;
cout<<"Podaj jednostke wielkosci pliku K/M/G"<<endl;
cin>>j;

Znaki przechowuje się w zmiennych typu char. W zmiennych typu double przechowuje się liczby.

2. Jeżeli masz średnik po if-ie jak w kodzie poniżej:

if (j=='K'); // <-- ten średnik
{
  t=((s*1024*8)/(v*1000000));
}

To ten kod tak naprawdę działa tak:

if (j=='K')
{
  ; // <-- ten średnik
}

// To poniżej wykonuje się za każdym razem
t=((s*1024*8)/(v*1000000));
komentarz 27 października 2020 przez NewEraOfPeace Gaduła (4,790 p.)
komentarz 27 października 2020 przez Piotr Batko Stary wyjadacz (13,210 p.)

Szczerze mówiąc, to nie zrozumiałem Twojej uwagi. Autorka postawiła tam średnik z pewnością przez pomyłkę i zwróciłem jej na to uwagę. W kodzie do jakiego się odniosłem, za każdym razem zostanie wykonane przypisanie do zmiennej t, niezależnie od wartości j.

Proszę napisz mi prościej z czym się nie zgadzasz, bo zagadki z godboltami nie rozwiązałem.

komentarz 27 października 2020 przez ania1210 Nowicjusz (200 p.)

@Piotr Batko, mimo poprawienia, program nie oblicz tak jak trzeba

komentarz 28 października 2020 przez NewEraOfPeace Gaduła (4,790 p.)

@Piotr Batko, wybacz, nie zauważyłem, że napisałeś tam poniżej jedną linijkę. Przykłady z godbolta w zasadzie tylko udowadniają to co miałes na mysli.

komentarz 28 października 2020 przez NewEraOfPeace Gaduła (4,790 p.)

@ania1210, dla jakich danych dostajesz jakie wyniki i jakich oczekujesz

komentarz 28 października 2020 przez ania1210 Nowicjusz (200 p.)

Jednak działa wszystko dobrze :) Dzięki wielkie za pomoc. A wiesz może jak by zrobić, żeby w tym wyniku (tylko z jednostką G) nie wychodziło np. 4000 minut, ale żeby zamienić to jeszcze na godziny?

Np. dla

s=700

j=G

v=25

t wychodzi 4008 minut i 38 sekund. Jak tylko to zamienić na godziny?

#include <iostream>
#include <math.h>
#include <windows.h>

using namespace std;
int main ()
{
	char odp;
	double v,t,s;
	
	do
	
	{
		char j;
		system ("cls");		//czyszczenie ekranu
		cout<<"Program jest kalkulatorem liczenia czasu przeplywu transferu"<<endl;
		cout<<"Podaj wielkosc pliku"<<endl;
		cin>>s;
		cout<<"Podaj jednostke wielkosci pliku K/M/G"<<endl;
		cin>>j;
		cout<<"Podaj predkosc przeplywu transferu w Mb/s"<<endl;
		cin>>v;
		
			if (j=='K')
			{
				t=((s*1024*8)/(v*1000000));
			}
			if (j=='M')
			{
				t=((s*1024*1024*8)/(v*1000000));
			}
			if (j=='G')
			{
				t=((s*1024*1024*1024*8)/(v*1000000));
			}
		
			int r,n;
			int a=t;
			int min=60;
		
		cout<<"Czas przplywu transferu wynosi "<<a/min<< " minut "<<a%min<<" sekund"<<endl;
		cout<<"czy zakonczyc? t/n"<<endl;
	  	cin>>odp;
	   	system ("cls");
	}
		while (odp=='n');
		return 0;
}

 

Podobne pytania

0 głosów
4 odpowiedzi 12,045 wizyt
0 głosów
2 odpowiedzi 2,099 wizyt
pytanie zadane 8 lutego 2016 w C i C++ przez KonDZIKs Bywalec (2,850 p.)

93,424 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...