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

Mój projekt, błędy w porownywaniu dwoch typow zmiennych

0 głosów
70 wizyt
pytanie zadane 12 stycznia w C i C++ przez Piotrek Korzeniewski Początkujący (360 p.)

witam jestem nowy w programowaniu ale napisałem program w ktorym podaje się swoja ilość pieniędzy, za ktora program przelicza ile zeszytow mógłbys sobie kupic, sa 3 typy zeszytow kazdy w innej kwocie i prawie wszystko dziala poprawnie gdyby nie fakt, że gdy podam liczbe (kwote moich pieniedzy) 100, (4,3), (3.4), (3,9) zaczynaja się schody ktorych nie jestem w stanie pojąć gdyż program łamie warunek, prosiłbym o pomoc oraz ewentualne rady co do kodu pozdrawiam. wiem ze nie powinno robic się tak że porownujesz 2 typy zmiennych i pewnie przez to sa bledy... pomocy

#include <iostream>
#include <math.h>
#include <cstdlib>
#include <iomanip>

using namespace std;

int ilosc[2];
long double kwota,reszta[2];

int main()
{
	cout<<" Podaj twoj kapital: ";
	cin>>kwota;
	cout<<endl<<endl<<" Jeden zeszyt z gruba okladka kosztuje 3zl i 30 groszy."
	<<endl<<" Jeden zeszyt z miekka okladka kosztuje 2 zl i 40 groszy."
	<<endl<<" Jeden zeszyt A4 w linie kosztuje 2zl i 90 groszy."
	<<endl<<endl<<" Wiec za kwote "<<kwota<<" zlotych mozesz kupic:"<<endl;
		
	ilosc[0]=kwota/3.30;
	reszta[0]=kwota-(ilosc[0]*3.30);
	ilosc[1]=kwota/2.40;
	reszta[1]=kwota-(ilosc[1]*2.40);
	ilosc[2]=kwota/2.90;
	reszta[2]=kwota-(ilosc[2]*2.90);
	//1
{
	if(kwota>=3.3)
		{
			if((int)reszta[0]==0&&floor(reszta[0]*100)!=0)
				{
					cout<<endl<<" "<<ilosc[0]<<" zeszytow z gruba okladka i zostanie ci "<<reszta[0]*100<<" groszy";
				}
			else if((int)reszta[0]!=0&&floor(reszta[0]*100)==0)
				{
					cout<<endl<<" "<<ilosc[0]<<" zeszytow z gruba okladka i zostanie ci "<<(int)reszta[0]<<" zl";
				}
			else if((int)reszta[0]!=0&&floor(reszta[0]*100)!=0)
				{
					cout<<endl<<" "<<ilosc[0]<<" zeszytow z gruba okladka i zostanie ci "<<(int)reszta[0]<<" zl"<<" i "<<(reszta[0]-(int)reszta[0])*100<<" groszy";
				}
			else if((int)reszta[0]==0&&floor(reszta[0]*100)==0)
				{
					cout<<endl<<" "<<ilosc[0]<<" zeszytow z gruba okladka i nie otrzymujesz reszty";	
				}
		}
	else
	{
			cout<<endl<<" Niestety nie stac cie na ani jeden zeszyt z gruba okladka.";
	}
	 //2
	if(kwota>=2.4)
		{
			if((int)reszta[1]==0&&floor(reszta[1]*100)!=0)
				{
					cout<<endl<<" "<<ilosc[1]<<" zeszytow z miekka okladka i zostanie ci "<<reszta[1]*100<<" groszy";
				}
			else if((int)reszta[1]!=0&&floor(reszta[1]*100)==0)
				{
					cout<<endl<<" "<<ilosc[1]<<" zeszytow z miekka okladka i zostanie ci "<<(int)reszta[1]<<" zl";
				}
			else if((int)reszta[1]!=0&&floor(reszta[1]*100)!=0)
				{
					cout<<endl<<" "<<ilosc[1]<<" zeszytow z miekka okladka i zostanie ci "<<(int)reszta[1]<<" zl"<<" i "<<(reszta[1]-(int)reszta[1])*100<<" groszy";
				}
			else if((int)reszta[1]==0&&floor(reszta[1]*100)==0)
				{
					cout<<endl<<" "<<ilosc[1]<<" zeszytow z miekka okladka i nie otrzymujesz reszty";	
				}
		}
	else
	{
			cout<<endl<<" Niestety nie stac cie na ani jeden zeszyt z miekka okladka.";
	}
	//3
	if(kwota>=2.9)
		{
			if((int)reszta[2]==0&&floor(reszta[2]*100)!=0)
				{
					cout<<endl<<" "<<ilosc[2]<<" zeszytow A4 w linie i zostanie ci "<<reszta[2]*100<<" groszy";
				}
			else if((int)reszta[2]!=0&&floor(reszta[2]*100)==0)
				{
					cout<<endl<<" "<<ilosc[2]<<" zeszytow A4 w linie i zostanie ci "<<(int)reszta[2]<<" zl";
				}
			else if((int)reszta[2]!=0&&floor(reszta[2]*100)!=0)
				{
					cout<<endl<<" "<<ilosc[2]<<" zeszytow A4 w linie i zostanie ci "<<(int)reszta[2]<<" zl"<<" i "<<(reszta[2]-(int)reszta[2])*100<<" groszy";
				}
			else if((int)reszta[2]==0&&floor(reszta[2]*100)==0)
				{
					cout<<endl<<" "<<ilosc[2]<<" zeszytow A4 w linie i nie otrzymujesz reszty";	
				}
		}
	else
	{
			cout<<endl<<" Niestety nie stac cie na ani jeden zeszyt A4 w linie.";
	}
		
	return 0;
}
}

 

2 odpowiedzi

0 głosów
odpowiedź 12 stycznia przez niezalogowany
wybrane 12 stycznia przez Piotrek Korzeniewski
 
Najlepsza

DRY tak bardzo połamane :(

Tablice mają tylko 2 elementy. Niepotrzebnie kwotę zapisywałeś jako liczbę zmiennoprzecinkową. Mogłeś od razu w groszach jako liczbę zmiennoprzecinkową. Lepiej użyć od razu floor, albo rzutowania na int. Zdecydowanie prościej i czytelniej:

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <iomanip>
#include <string>

int main()
{
	using namespace std;

	const int ile = 3;
	int ilosc[ile];
	int reszta[ile];
	const long double ceny[ile]{ 3.3, 2.4, 2.9 }; // 
	const std::string nazwy[ile]{ "z grubom okladka", "z miekka okladka", "A4 w linie" };

	long double kwota;
	cout << " Podaj twoj kapital: ";
	cin >> kwota;
	cout << "\n";

	for (int i = 0; i < ile; i++)
	{
		cout << "\n Jeden zeszyt " << nazwy[i] << " kosztuje " << int(ceny[i]) << "zl i " << int(ceny[i] * 100) % 100 << " groszy.\n";
		ilosc[i] = int(kwota / ceny[i]);
		reszta[i] = int(100 * (kwota - (ilosc[i] * ceny[i]))); // reszta w groszach, std::floor przy rzutowaniu
	}
	cout << "\n\n Wiec za kwote " << kwota << " zlotych mozesz kupic:\n";

	for (int i = 0; i < ile; i++)
	{
		if (kwota < ceny[i])
		{
			cout << "\n Niestety nie stac cie na ani jeden zeszyt " << nazwy[i];
		}
		else if (reszta[i] < 100)
		{
			cout << "\n " << ilosc[i] << " zeszytow " << nazwy[i] << " i zostanie ci " << reszta[i] << " groszy";
		}
		else if (reszta[i] % 100 == 0)
		{
			cout << "\n " << ilosc[i] << " zeszytow " << nazwy[i] << " i zostanie ci " << reszta[i] / 100 << " zl";
		}
		else if (reszta[i] != 0)
		{
			cout << "\n " << ilosc[i] << " zeszytow " << nazwy[i] << " i zostanie ci "
				<< reszta[i] / 100 << " zl i " << reszta[i] % 100 << " groszy";
		}
		else if (reszta == 0)
		{
			cout << "\n " << ilosc[i] << " zeszytow " << nazwy[i] << " i nie otrzymujesz reszty";
		}
	}
}

Posprawdzaj jeszcze wszystko czy działa, bo kod poprawiałem na prędko (bo mi zupa stygnie).

0 głosów
odpowiedź 12 stycznia przez Bosswell Nałogowiec (26,520 p.)
Deklarujesz dwa elementy tablicy

int ilosc[2]; // [0, 1]

a odwołujesz się do 3, która nie istnieje.
komentarz 12 stycznia przez Piotrek Korzeniewski Początkujący (360 p.)
w którym miejscu??

Podobne pytania

0 głosów
2 odpowiedzi 67 wizyt
pytanie zadane 21 lipca w C i C++ przez MAXIM7 Początkujący (440 p.)
0 głosów
1 odpowiedź 364 wizyt
pytanie zadane 30 grudnia 2015 w C i C++ przez Konrad Nabożny Stary wyjadacz (13,250 p.)
0 głosów
1 odpowiedź 45 wizyt
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

54,387 zapytań

98,246 odpowiedzi

202,070 komentarzy

26,700 pasjonatów

Przeglądających: 265
Pasjonatów: 11 Gości: 254

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...