• 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
831 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,444 wizyt
0 głosów
2 odpowiedzi 1,535 wizyt
pytanie zadane 8 lutego 2016 w C i C++ przez KonDZIKs Bywalec (2,770 p.)

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...