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

Wytłumaczenie kodu C++

Object Storage Arubacloud
0 głosów
333 wizyt
pytanie zadane 8 grudnia 2018 w C i C++ przez Paweł123 Nałogowiec (33,500 p.)

Witam, czy mógłby mi ktoś wytłumaczyć ten kod. Chodzi mi przede wszystkim o tablice dwu wymiarowe...

#include <iostream>
using namespace std;

float suma(float a,float b){
	return a+b;
}

float roznica(float a,float b){
	return a-b;
}

float iloczyn(float a,float b){
	return a*b;
}

float iloraz(float a,float b){
	return a/b;
}


int main(int argc, char** argv) {
	float a=0,b=0;
	char c;
	int m=0, j=0, k=0;
	float liczby[5][2];
	char znaki[5];
	while(true){
		cout<< "Co chcesz wykonac(numer):"<<endl<<"1. Nowe dzialanie"<<endl<<"2. Wyswietl historie dzialan"<<endl;
		cin>>m;
		switch(m){
			case 1:
				cout<<"Podaj pierwsza liczbe: ";
				cin>> a;
				cout<<"Podaj druga liczbe: ";
				cin>> b;
				cout << "Podaj operacje jaka chcesz wykonac:(+,-,*,/)";
				cin>>c;
				switch(c){
					case '+': 
					
					cout<<a<<c<<b<<"="<<suma(a,b)<<endl;
					
				
					liczby[j][0]=a;
					liczby[j][1]=b;
					znaki[j]=c;
					
					
					k+=1;
					
					break; 
					
					case '-'
					
					: cout<<a<<c<<b<<"="<<roznica(a,b)<<endl;
					liczby[j][0]=a;
					liczby[j][1]=b;
					znaki[j]=c;
					k+=1;
					break; 
					
					case '*': 
					
					cout<<a<<c<<b<<"="<<iloczyn(a,b)<<endl;liczby[j][0]=a;
					liczby[j][1]=b;
					znaki[j]=c;
					k+=1;
					break; 
					
					case '/': 
					cout<<a<<c<<b<<"="<<iloraz(a,b)<<endl;
					liczby[j][0]=a;
					liczby[j][1]=b;
					znaki[j]=c;
					k+=1;
					break; 
					
					}
					j++;
					if(j>5){
						j=0;
					}
					break;
			case 2:	
				if(k>=5){
					for(int i=0;i<5;i++){
						cout<<i+1<<". "<<liczby[i][0]<<znaki[i]<<liczby[i][1]<<"=";
						switch(znaki[i]){
							case'+': 
							
							cout<<suma(liczby[i][0],liczby[i][1])<<endl;
							break;
							
							case'-': 
							cout<<roznica(liczby[i][0],liczby[i][1])<<endl;
							break;
							
							case'*': cout<<iloczyn(liczby[i][0],liczby[i][1])<<endl;
							break;
							
							case'/': cout<<iloraz(liczby[i][0],liczby[i][1])<<endl;
							break;
						}
					}
				}
				if(k<5){
					for(int i=0;i<k;i++){
						cout<<i+1<<". "<<liczby[i][0]<<znaki[i]<<liczby[i][1]<<"=";
						switch(znaki[i]){
							case'+':
							 cout<<suma(liczby[i][0],liczby[i][1])<<endl;
							break;
							case'-':
								
							 cout<<roznica(liczby[i][0],liczby[i][1])<<endl;
							 
							break;
							case'*':
								
							 cout<<iloczyn(liczby[i][0],liczby[i][1])<<endl;
							 
							break;
							 
							case'/':
								
							 cout<<iloraz(liczby[i][0],liczby[i][1])<<endl;
							 
							break;
						}
					}
				}
				break;
		}
		m=0;
	}
	system("pause");
	return 0;
}

 

1
komentarz 8 grudnia 2018 przez Programeł Gaduła (3,500 p.)

tablica dwuwymiarowa:

1 odpowiedź

+1 głos
odpowiedź 9 grudnia 2018 przez jankustosz1 Nałogowiec (35,880 p.)
edycja 9 grudnia 2018 przez jankustosz1

Trochę śmieszny jest ten kod. Kiedy funkcja jest kompletnie niepotrzebna Ty ją tworzysz, a kiedy by się przydała to jej nie tworzysz.

No dobra, ale czego nie rozumiesz? Normalnie potrzebowałbyś 3 tablic, aby zapisywać kolejne wartości liczby pierwszej, drugiej i znaki. Można zamiast tego zrobić trzywierszową tablicę i w pierwszym wierszu tej tablicy trzymać liczby pierwsze, w drugim drugie, a trzecim znaki. W tym przypadku znaki wrzucono do osobnej tablicy. Jak się uprzesz to możesz nawet zrobić tablicę jednowymiarową i umówić się że w w pierwszym elemencie trzymasz liczbę a, w drugim b, a w trzecim znak, potem znowu w czwartym i piątym liczby a w szóstym znak.

 

Tu masz jak powinien wyglądać czysty kod:

#include <iostream>
using namespace std;

double policz(double a, double b, char znak)
{
    switch(znak)
    {
    case '+':
        return a+b;
    case '-':
        return a-b;
    case '*':
        return a*b;
    case '/':
        return a/b;
    }
    /// zakladam ze znak byl prawidlowy
}

void wypisz(double a, double b, char znak)
{
    cout << a << " " << znak << " " << b << " = " << policz(a, b, znak) << endl;
}

const int N = 100;
int main()
{
    double a[N];
    double b[N];
    char znak[N];
    int liczbaElementow = 0;
    while(true)
    {
        int typ;
        cin >> typ;
        if(typ == 1)
        {
            cin >> a[liczbaElementow];
            cin >> b[liczbaElementow];
            cin >> znak[liczbaElementow];
            wypisz(a[liczbaElementow], b[liczbaElementow], znak[liczbaElementow]);
            liczbaElementow++;
        }
        else if(typ == 2)
        {
            for(int i = 0; i<liczbaElementow; i++)
                wypisz(a[i], b[i], znak[i]);
        }
    }


    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 3 marca 2018 w PHP przez fipooo Bywalec (2,880 p.)
0 głosów
1 odpowiedź 211 wizyt
pytanie zadane 18 czerwca 2015 w JavaScript przez LogicznyMat Użytkownik (940 p.)
0 głosów
2 odpowiedzi 305 wizyt
pytanie zadane 10 czerwca 2015 w Inne języki przez LPTU Użytkownik (540 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 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!

...