• 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

Aruba Cloud - Virtual Private Server VPS
0 głosów
1,284 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 11,984 wizyt
0 głosów
2 odpowiedzi 2,061 wizyt
pytanie zadane 8 lutego 2016 w C i C++ przez KonDZIKs Bywalec (2,850 p.)

93,335 zapytań

142,330 odpowiedzi

322,416 komentarzy

62,669 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...