• 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

Ultraszybki serwer VPS NVMe BIZNES
0 głosów
65 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 NieUmiemProgramowac Dyskutant (8,740 p.)
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 Pasjonat (17,320 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
1 odpowiedź 278 wizyt
pytanie zadane 30 grudnia 2015 w C i C++ przez Konrad Nabożny Stary wyjadacz (13,350 p.)
0 głosów
1 odpowiedź 36 wizyt
0 głosów
3 odpowiedzi 127 wizyt
pytanie zadane 18 listopada 2016 w Systemy operacyjne, programy przez BlueSky Początkujący (320 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).
Ciekawy innych porad? Odwiedź tę stronę!

44,323 zapytań

84,160 odpowiedzi

167,562 komentarzy

21,229 pasjonatów

Przeglądających: 333
Pasjonatów: 22 Gości: 311

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.

...