• 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

VPS Starter Arubacloud
0 głosów
1,068 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,693 wizyt
0 głosów
2 odpowiedzi 1,751 wizyt
pytanie zadane 8 lutego 2016 w C i C++ przez KonDZIKs Bywalec (2,770 p.)

92,845 zapytań

141,786 odpowiedzi

320,859 komentarzy

62,178 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 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...