Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Czy taki kod na kalkulator jest w miarę dobry?


Rekomendowane odpowiedzi

Opublikowano
Więc, czy taki kod jest poprawny ?
Program działa, ale chciałbym zapytać Was o opinię.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include <iostream>
#include <conio.h>

using namespace std;

main()
{

char znak;

char plus = '+';
char minus = '1';
char gwiazdka = '*';
char dzielenie = '/';


float arg1;
float arg2;
volatile float wynik;

cout << "Pisz cos, po czym klikaj enter" 
<< endl
<< endl
<< endl
<< endl;





cin >> arg1;
cin >> znak;

if(znak == plus)
{
cin >> arg2;
wynik = arg1 + arg2;
cout << " = " << wynik;
}

else if(znak == minus)
{
cin >> arg2;
wynik = arg1 - arg2;
cout << " = " << wynik;
}

else if(znak == gwiazdka)
{
cin >> arg2;
wynik = arg1 * arg2;
cout << " = " << wynik;
}

else if(znak == dzielenie)
{
cin >> arg2;
wynik = arg1 / arg2;
cout << " = " << wynik;
}

getch();
return 0;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Po edycji mam coś takiego:
#include <iostream>
#include <conio.h>

using namespace std;

main()
{
	
	char znak;
	
	char plus = '+';
	char minus = '1';
	char gwiazdka = '*';
	char dzielenie = '/';
	
	
	float arg1;
	float arg2;	
	
	cout << "Pisz cos, po czym klikaj enter" << endl
		 << endl
		 << endl
		 << endl;
	
	
	
	
	
	cin >> arg1;
	cin >> znak;

	if(znak == plus)
	{
		cin >> arg2;
		cout << " = " << arg1 + arg2;
	}
	
	else if(znak == minus)
	{
		cin >> arg2;
		cout << " = " << arg1 - arg2;
	}
	
	else if(znak == gwiazdka)
	{
		cin >> arg2;
		cout << " = " << arg1 * arg2;
	}
	
	else if(znak == dzielenie)
	{
		cin >> arg2;
		cout << " = " << arg1 / arg2;
	}
	
	getch();
	return 0;
}

 

 

Po kolejnej modyfikacji mam coś takiego 

#include <iostream>
#include <conio.h>

using namespace std;

main()
{
	
	char znak;
	float arg1;
	float arg2;	
	
	cout << "Pisz cos, po czym klikaj enter" << endl
		 << endl
		 << endl
		 << endl;
	
	
	
	
	
	cin >> arg1;
	cin >> znak;
	
	switch(znak)
	{
		case '+':
		cin >> arg2;
		cout << " = " << arg1 + arg2;
		break;
		
		case '-':
		cin >> arg2;
		cout << " = " << arg1 - arg2;
		break;
		
		case '/':
		cin >> arg2;
		cout << " = " << arg1 / arg2;
		break;		

		case '*':
		cin >> arg2;
		cout << " = " << arg1 * arg2;
		break;
		
		default:
			cout << endl << endl << "Nieprawidlowy znak";
	}
	
	getch();
	return 0;
}
Opublikowano

1. Dodaj kod w spoiler.
2. Po co ci dodatkowe zmienne? plus, minus, itd.? marnotrawstwo pamięci.
3. Nie widzę potrzeby używania volatile.

4. możesz zmniejszyć rozmiar poprzez wywalenie zmiennej wynik i wpisanie działania w miejscu wypisania.

Opublikowano

1) przepraszam,

2) to jak to zrobić w inny sposób,

3) bez volatile wychodziła mi liczba nie z tej ziemi -- volatile pilnuje, żeby liczba była odpowiednia, serio.

4) dziękuję, już próbuję.

Opublikowano

Opakuj to w ładną pętle. Co do podpunktu 2. wystarczy np. if(znak == '+');

Co do volatile też nie widzę potrzeby. Jeśli wszystko robisz dobrze to nie ma możliwości aby liczba była nie z tej ziemi... Chyba że wpakowywujesz do zmiennej liczbę przekraczającą jej pojemność. Zamień float na double, ma większa precyzję kosztem większego zagospodarowania pamięci, ale przy kalkulatorze jest to nie zauważalne praktycznie.

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano
cin>>arg1>>znak>>arg2;

if(znak == '+')cout<<(arg1+arg2);

itd...

 

Dokładnie. Jak już powiedziałem zapakuj to w pętlę i zrób aby można było działanie na tych samych wartościach wykonywać nieskończenie ilość razy, dpk np. ktoś nie wciśnie esc. Takie w ramach ćwiczeń :D zamiast robić to ifem, możesz zrobić switchem:

switch(znak):
{
    case '+':
        cout << "Wynik: " << arg1 + arg2 << endl;
        break;
    case '-':
        ...
    default:
        cout << "Nie prawidlowy operator!" << endl;
}
        

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano
3) bez volatile wychodziła mi liczba nie z tej ziemi -- volatile pilnuje, żeby liczba była odpowiednia, serio.

 

volatile jedynie informuje kompilator, że zmienna może być modifikowana z zewnątrz, z poza programu.

Coś pewnie spartoliłeś, dlatego dawało dziwne wyniki.

Opublikowano

Taki prosty przyklad z petla  ;)

int i=0;
char A[100];

while((A[i]=getch())!=13)
{
if(i%2==0)
	{
	cout<<int(A[i]-=48);
	
		if(A[i-1]=='*')
		{
			A[i]*=A[i-2];	
			A[i-1]='+';
			A[i-2]=0;
		}
		if(A[i-1]=='/')
		{
			A[i]=A[i-2]/A[i];	
			A[i-1]='+';
			A[i-2]=0;
		}
	}else	cout<<A[i];
i++;
}

int j=i;

i=1;
while(j>i)
{
if(A[i]=='+')A[0]+=A[i+1];
	else A[0]-=A[i+1];
i+=2;
}

cout<<"="<<int(A[0]);
Opublikowano

Myślę że skoro kolega pisze kalkulatory, bez pętli itp. To że nie miał jeszcze tablic :) zrób jeszcze tablice dynamiczną która ustawia się w zależności od wpisanej liczy...

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

Uczę się z symfoni c++, jestem na 75 stronie, więc tablic nie było jeszcze omówionych, próbowałem ze switchem, lecz za bardzo nie wychodziło, zaraz zerknę, może coś zjadłem.

Opublikowano

Wyślij kod ze switchem to przejrze. Ps. Też się uczyłem z tej książki ;p

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

Masz rację, pomieszalo mi się wcześniej

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

Hmm, ja i tak jak spojrzę na wasze przykłady, to nawet jeżeli jest tam błąd, u mnie go nie będzie ;P, zawsze robię po swojemu ;D, może to i dobrze :)

Pamiętam, jak pierwszy raz się czegoś nauczyłem, to mieliłem to i mieliłem, i mam też taki kalkulator na obliczanie piw do śmierci ;D, że tak powiem, wiedza z b-ch daje mi możliwość, obliczyć to ;P

Opublikowano

Prawidłowo. Nigdy nie przepisuj z żywca. Jak tam, działa?

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

Uczę sie cpp i ten program nie daje sie skompilowac, chyba z powodu, że nie mam  conio.h   korzystam z VS. Czy może mi to ktoś wytłumaczyć jak to skompilowac?

Opublikowano

Jaka wersja Visual Studio? Ja mam Express 2010.. Spróbuj zamienić "getch()" na "_getch()" (C++/CLI).

 

Zamień "main()" na "int main()". Nie wiem czemu użytkownik ma inaczej.

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

Programik pięknie działa, tzn, wersja nr 3 :P, tamte też działały, ale teraz tak przerobiłem, żeby się już nikt nie przyczepił, że gdzieś jest zbędna zmienna czy coś w tym stylu :), przy okazji, czy używanie dev-cpp jest ok ?

[interesuje mnie wasza opinia, mimo wszystko, mi się dobrze w nim pisze ;D]

Opublikowano

Z tego co widzę (nie korzystałem z Dev) ma starą składnie. Myślę że można nawet pisać void main. Ale najbardziej mnie zszokowało że zapis main() jest poprawny. W aktualnych kompilatorach dozwolony jest zapis int main(), aby uzyskać to co tu musiałbyś skorzystać z preprocesora i wpisać #define main() int main(). Od siebie polecam C::B oraz VB

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

Jaka wersja Visual Studio? Ja mam Express 2010.. Spróbuj zamienić "getch()" na "_getch()" (C++/CLI).

 

Zamień "main()" na "int main()". Nie wiem czemu użytkownik ma inaczej.

dzieki rzeczywiscie moglem na to sam wpasć :) dzeki

Opublikowano

@up, nie jest zagmatwane, wszystko jest czytelnie napisane, hmm... w sumie, twoja wypowiedź nie jest mądra, więc nie wiem czy brać ją do siebie -.-, tyle os. za, ty jeden przeciw, + jakieś błędy [ nie mówię już, o braku pl znaków ;) ].

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...