• 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

Object Storage Arubacloud
0 głosów
887 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,190 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,190 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,503 wizyt
0 głosów
2 odpowiedzi 1,607 wizyt
pytanie zadane 8 lutego 2016 w C i C++ przez KonDZIKs Bywalec (2,770 p.)

92,570 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...