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

question-closed C++ dzielenie w pętli n liczb

Object Storage Arubacloud
0 głosów
1,461 wizyt
pytanie zadane 25 maja 2018 w C i C++ przez DarkVader Nowicjusz (120 p.)
zamknięte 26 maja 2018 przez DarkVader

Witam, zaczynam swoją zabawę w pisanie prostych programów w c++ i pisząc kalkulator napotkałem problem. Chciałem stworzyć zapętlony kalkulator który wystarczy uruchomić raz, i można wykonywać ile się chce działań na ilu się chce liczbach. Wszystko udało mi się zrobić, ale napotkałem problem z dzieleniem. Próbowałem już zamienić to na mnożenie, zmieniałem kolejność działań itd. ale w najlepszym momencie program podawał prawidłową odpowiedź przy dzieleniu max 3 liczb przez siebie

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

using namespace std;

float a, b, c;

int main(int argc, char** argv) 
{
	poczatek:
	system("cls");
	cout<<"Kalkulator do dzielenia"<<endl;
	cout<<"Podaj ile liczb chcesz dzielic: ";
	cin>>a;
	system("cls");
	c=1;
	for (int i =0; i < a; i++)
	{
		cout<<"Kalkulator do dzielenia"<<endl;
		cout<<"Podaj liczbe nr "<<i+1<<" : ";
		cin>>b;
		c=(1/b)*(1/c);
		system("cls");
	}
	cout<<"Iloraz liczb wynosi: "<<c<<endl<<endl;

	
	system("pause");
	return 0;
}

Jest to tylko kawałek z całego kalkulatora

komentarz zamknięcia: Problem rozwiązany
komentarz 25 maja 2018 przez mokrowski Mędrzec (155,460 p.)
Nie bądź sadystą i nazwij te zmienne z sensem.

Wczytaj <cmath> a nie <math.h>. To jest C++ a nie C.

..

1 odpowiedź

0 głosów
odpowiedź 25 maja 2018 przez RafalS VIP (122,820 p.)
c=(1/b)*(1/c);

Tej linijki totalnie nie rozumiem. W przypadku 4 liczb chcesz zrobić takie działanie: a/b/c/d? Gdzie a,b,c,d to kolejne wczytywane liczby. Jeśli tak to ten wzór tego nie robi. Pierwszą liczbę wczytaj normalnie do zmiennej c, a później dziel ją przez kolejne wczytywane liczby w ten sposób:

c/=b;

Bo teraz liczysz coś bardzo dziwnego.

Btw:
 

for (int i =0; i < a; i++)

Pobierasz ilość liczb do zmiennej typu float a potem porównujesz ją z intem. To niebezpieczne bo liczby zmiennoprzecinkowe są niedokładne. Tzn, że możesz sobie wczytać 2 a w zmiennej na prawdę wyląduje 2.00000001, przez co wykona się o jeden obieg pętli więcej niż powinien.

komentarz 25 maja 2018 przez DarkVader Nowicjusz (120 p.)
edycja 25 maja 2018 przez DarkVader

Przy tej formule co podałem program liczył dobrze do momentu a/b/c, przy a/b/c/d podaje już błędną liczbę. I niestety, nadal nie rozumiem jak miałbym zrobić to dzielenie... próbowałem już c=c/b; c=c*(1/b) i podobnych, ale program wtedy nawet dla dwóch liczb nie podaje poprawnej odpowiedzi. Co do tego int to racja, po prostu nie pomyślałem o tym, ale zaraz to poprawie

Dla mnożenia program wygląda tak:

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

using namespace std;

float a, b, c;

int main(int argc, char** argv) 
{
    poczatek:
	cout<<"Kalkulator do mnozenia"<<endl;
	cout<<"Podaj ile liczb chcesz pomnozyc: ";
	cin>>a;
    if(a-int(a)==0)
    {
	system("cls");
    c=1;
	for (int i =0; i < a; i++)
	{
		cout<<"Kalkulator do mnozenia"<<endl;
		cout<<"Podaj liczbe nr "<<i+1<<" : ";
		cin>>b;
		c=c*b;
		system("cls");
	}
	cout<<"Iloczyn liczb wynosi: "<<c<<endl;
    }
    else
    {
    cout<<"Podaj liczbe calkowita!"<<endl;
    system("pause");
    goto poczatek;
    }
    system("pause");
    return 0;
}

 

Dla mnożenia, i tak samo zrobionego odejmowania, dodawania, wszystko działa w 100%. Tylko z tym dzieleniem nie mam nawet pomysłu co robię źle.

komentarz 26 maja 2018 przez RafalS VIP (122,820 p.)

Trzymając się Twojej konwencji napisałbym to tak:
 

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

using namespace std;

int main(int argc, char** argv)
{
	unsigned int ilosc;
	system("cls");
	cout << "Kalkulator do dzielenia" << endl;
	cout << "Podaj ile liczb chcesz dzielic: ";
	cin >> ilosc;
	double wynik, dzielnik;
	if (ilosc > 0) {
		cout << "Podaj dzielona liczbe" << endl;
		cin >> wynik;
	}
	system("cls");
	for (int i = 1; i < ilosc; i++)
	{
		cout << "Kalkulator do dzielenia" << endl;
		cout << "Podaj dzielnik nr " << i << " : ";
		cin >> dzielnik;
		wynik /= dzielnik;
		system("cls");
	}
	cout << "Iloraz liczb wynosi: " << wynik << endl << endl;
	system("pause");
	return 0;
}

 

komentarz 26 maja 2018 przez DarkVader Nowicjusz (120 p.)

Udało mi się poradzić już z problemem, co prawda całość teraz trochę zajmuję, ale przynajmniej działa. Tak to teraz wygląda:

#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

char znak;
float a, b, c;

int main(int argc, char** argv) 
{
    poczatek:
    system("cls");
    cout<<"Kalkulator do dzielenia"<<endl;
    cout<<"Podaj ile liczb chcesz dzielic: ";
    cin>>a;
    system("cls");
        if(a-int(a)==0 && a!=0)
        {
            cout<<"Kalkulator do dzielenia"<<endl;
            cout<<"Podaj liczbe nr 1: ";
            cin>>b;
            if(b!=0)
            {
                c=b;
                system("cls");
                for (int i = 1; i < a; i++)
                {
                    cout<<"Kalkulator do dzielenia"<<endl;
                    cout<<"Podaj liczbe nr "<<i+1<<" : ";
                    cin>>b;
                    if(b!=0)
                    {
                        c=c/b;
                        system("cls");
                    }
                    else
                    {
                        cout <<"Nie dzielimy przez zero!"<<endl<<endl;
                        cout<<"Jezeli chcesz wrocic do kalkulatora wpisz - m "<<endl;
                        cout<<"Jezeli chcesz zamknac program, wpisz dowolny inny znak: ";
                        cin>>znak;
                        if(znak=='m')
                        goto poczatek;
                        else
                        {
                            system("cls");
                            cout<<"Kalkulator zostanie wylaczony"<<endl<<endl;
                        }        
                    }
                }
                cout.setf(ios::fixed);
                cout.precision(25);
                cout<<"Iloraz liczb wynosi: "<<c<<endl<<endl;
                cout<<"Jezeli chcesz wrocic do kalkulatora wpisz - m "<<endl;
                cout<<"Jezeli chcesz zamknac program, wpisz dowolny inny znak: ";
                cin>>znak;
                if(znak=='m')
                {
                    goto poczatek;
                }
                else
                {
                    system("cls");
                    cout<<"Kalkulator zostanie wylaczony"<<endl<<endl;
                }
            }
            else
            {
                cout <<"Nie dzielimy przez zero!"<<endl<<endl;
                cout<<"Jezeli chcesz wrocic do kalkulatora wpisz - m "<<endl;
                cout<<"Jezeli chcesz zamknac program, wpisz dowolny inny znak: ";
                cin>>znak;
                if(znak=='m')
                goto poczatek;
                else
                {
                    system("cls");
                    cout<<"Kalkulator zostanie wylaczony"<<endl<<endl;
                }
            }
        }
        else
        {    
            cout<<"Podaj liczbe calkowita!"<<endl;
            system("pause");
            cin.clear();
            cin.sync();
            goto poczatek;
        }
    system("pause");
    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 3,642 wizyt
pytanie zadane 13 lipca 2019 w C i C++ przez magda_19 Gaduła (3,080 p.)
0 głosów
2 odpowiedzi 1,947 wizyt
pytanie zadane 8 listopada 2017 w JavaScript przez daduw Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 732 wizyt
pytanie zadane 26 września 2020 w C i C++ przez MoniaB Nowicjusz (150 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...