• 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
68 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,040 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 60 wizyt
pytanie zadane 21 lipca w C i C++ przez MAXIM7 Początkujący (440 p.)
0 głosów
1 odpowiedź 330 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ź 43 wizyt
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

53,174 zapytań

96,434 odpowiedzi

197,515 komentarzy

25,973 pasjonatów

Przeglądających: 243
Pasjonatów: 15 Gości: 228

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.

...