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

Mój pierwszy program w (kalkulator)


Rekomendowane odpowiedzi

Opublikowano

Witam. Oto mój pierwszy program w c++. Jest to kalkulator. Wszystkie opinie i krytyki mile widziane.

 

http://przeklej.net/down/60267048986808357610361347964935631d5a5792c4eba321d659725.html

 

Kod:

 

 

 

#include <iostream>
#include <conio.h>
#include <ctime>
#include <cmath>
#include <stdlib.h>
#include <time.h>

using namespace std;

int wybor;
float wynik, l1, l2;

int main()
{
	cout << " || KALKULATOR BY AMADEUSZ V.1.0 BETA || \n " << endl;
	cout << " Wybierz dzialanie: " << endl;
	cout << " 1.Dodawanie \n 2.Odejmowanie \n 3.Mnozenie \n 4.Dzielenie \n 5.Potegowanie \n 6.Pierwiastkowanie \n " << endl;
	cout << " Twoj wybor: ";
	cin >> wybor;
	switch(wybor)
	{
		case 1: 
		cout << " Wpisz pierwsza liczbe: ";
		cin >> l1;
		cout << " Wpisz druga liczbe: ";
		cin >> l2;
		wynik = l1 + l2;
		cout << endl;
		cout << " " << l1 << " + " << l2 << " = " << wynik << "\n\n" << endl;
		getch();
		main();
		case 2: 
		cout << " Wpisz pierwsza liczbe: ";
		cin >> l1;
		cout << " Wpisz druga liczbe: ";
		cin >> l2;
		wynik = l1 - l2;
		cout << endl;
		cout << " " << l1 << " - " << l2 << " = " << wynik << "\n\n" << endl;
		getch();
		main();
		case 3: 
		cout << " Wpisz pierwsza liczbe: ";
		cin >> l1;
		cout << " Wpisz druga liczbe: ";
		cin >> l2;
		wynik = l1 * l2;
		cout << endl;
		cout << " " << l1 << " * " << l2 << " = " << wynik << "\n\n" << endl;
		getch();
		main();
		case 4: 
		cout << " Wpisz pierwsza liczbe: ";
		cin >> l1;
		cout << " Wpisz druga liczbe: ";
		cin >> l2;
		wynik = l1 / l2;
		cout << endl;
		cout << " " << l1 << " / " << l2 << " = " << wynik << "\n\n" << endl;
		getch();
		main();
		case 5: 
		cout << " Wpisz liczbe, ktora chcesz spotegowac: ";
		cin >> l1;
		cout << " Wpisz wykladnik potegi: ";
		cin >> l2;
		cout << endl;
		wynik = pow(l1,l2);
		cout << " " << l1 << " do potegi " << l2 << " wynosi " << wynik << "\n\n" << endl;
		getch();
		main();
		case 6: 
		cout << " Wpisz liczbe, ktora chcesz spierwiastkowac: ";
		cin >> l1;
		wynik = sqrt(l1);
		cout << " Pierwiastek z " << l1 << " wynosi " << wynik << "\n\n" << endl;
		getch();
		main();
	}
	getch();
}		

 

 

Opublikowano

Nic przebojowego. Na tym forum jest takich już co najmniej 10. W dodatku dodajesz niepotrzebne biblioteki, wywołujesz rekurencyjne main, czego nie powinno się robić, sztucznie zatrzymujesz konsolę na końcu i powtarzasz te same kawałki kodu.

Opublikowano

Niepotrzebnie zadeklarowane globalnie zmienne, niepotrzebnie stworzona zmienna "wynik", kod rozsypany (switch wygląda zupełnie kijowo, TABULACJE!). W grom niepotrzebnych bibliotek. No i to co sopel mówi, powtarzanie takiego samego kodu w każdym case. Ćwicz, ucz się dalej. Przynajmniej działa.

846331404756772371599.jpeg
Opublikowano

Sam pisałem. I jest to mój pierwszy program. Dziękuję za opinie.


wywołujesz rekurencyjne main

co to znaczy?

 

Z tymi niepotrzebnymi dyrektywami to jest tak, że często zapominam jaka jest potrzebna do różnych funkcji, i we wszystkich programach zapisuje te wszystkie ;)

Opublikowano

To robisz źle, bo zwiększa to wagę i zamula program. Używaj tylko tych, które są potrzebne. Żeby sprawdzić, usuwaj te, które mogą być niepotrzebne - jeśli kompilator walnie błąd, to znaczy że jednak jest potrzebna, jeśli nic się nie stanie - to znaczy że nie jest potrzebna.

 

W tym wypadku wystarczą te:

#include <iostream>
#include <conio.h>
#include <cmath>
Rekurencyjne main, to znaczy wywołujesz funkcję main() w funkcji main(), więc robisz błąd. Zrób to na pętli, zamiast wywoływać w ten sposób funkcje ponieważ może to prowadzić do przeciążenia programu i bugów.

 

@down: Ah, więc tak to działa... Nie myślałem że linker może być na tyle inteligentny :D

846331404756772371599.jpeg
Opublikowano

To robisz źle, bo zwiększa to wagę i zamula program.

Nie prawda. Linker nie powinien linkować niepotrzebnych funkcji. Chodzi tylko i wyłącznie o estetykę.
  • 3 tygodnie później...
Opublikowano

Ładnie zrobiłeś (pamiętam początki :D), ale:
1. Zamiast wywoływać main(), to wstaw pętle jak mówili poprzednicy
2. Ogarnij estetyke kodu (wcięcia, tabulatory)

Mam dla Ciebie zadanie ;) Tak w ramach ćwiczenia. Zrób menu do programu, że wpisujesz cyfre i nie trzeba klikać enter tylko bezpośrednio cię przenosi do odpowiedniego CASE. Mogę Ci podpowiedzieć, że należy to zrobić znakami ASCII

http://pl.wikipedia.org/wiki/ASCII

. Deklarujesz zmienną char, która będzie pobierała znak z klawiatury instrukcją getch(). Potem robisz case odpowiadające DEX znaku w tablicy ASCII. Przykładowy program(ma za zadanie wyjaśnić o co chodzi):

cout << "[1] Dodawanie" << endl;
cout << "[2] Odejmowanie" << endl;
//itd...
char znak = getch();

switch(znak)
{
    case 49:
    //instrukcje
    case 50:
    /instrukcje i tak dalej...
}

Pamiętaj o zapętleniu menu wyboru (ogólnie całego programu)

3587513.png


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


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

Opublikowano

Mi zawsze tak lepiej pasowało ;) W końcu jedną funkcję można napisać w wiele sposobów.

3587513.png


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


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

Opublikowano

Kod jest nie uporządkowany.

Tak szczerze to ja bym walnął tylko #include

Albo jeszcze jak chcesz to zrobić bardziej intuicyjne #include dla zmiennych tekstowych i używać if zamiast switch/case. Zaraz napisze jak bym walnal na dodawanie a ty dodaj na reszte.

#include

#include

using namespace std;

 

int main()

{

string zmienna;

int a,b;

cout << "Podaj liczby";

cin >> a;

cin >> b;

cout << "Dodać je, czy pomnożyć?";

cin >> zmienna;

if (zmienna == "dodaj") cout << a << "+" << b << "=" << a+b << endl;

I tak samo z mnożeniem tylko napisz pomnóż i jako znak zamiast + , daj * i tak ze wszystkim. A teraz sam poćwicz

W tych include 1 bylo string a drogie iostream ale mi usunęlo nwm czemu xD

Opublikowano

@1361622928-U485574.pngszymeczek31 nie rozumiem twojej mowy o "include" a używanie ifa zamiast switcha to poroniony pomysł, bo switch jest lepszy dla wielu opcji oraz szybszy.

 

Też nie rozumiałem, ale nie pisałem bo myślałem że to takie oczywiste że wyjde na debila :D Co do ifa to się czasami przydaję i to bardzo, w switchu nie możesz żadnych warunków dać ;)

3587513.png


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


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

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...