Prosty program obliczeniowy i błąd kompilacji

0

Witam. Zaczynam swoja przygodę z c++ i chciałbym zrobić program który będzie liczył pola i obwody np.kwadrat i prostokąt. Wyskakuje mi błąd i nie wiem co z nim zrobić :/

#include <iostream>
#include <ostream>
#include <cmath>
using namespace std;

int main()
{
double a, b, pole, obwod;
int dzialanie;

cout << "Wybierz dzialanie :" << endl << "1. kwadrat" << endl
<< "2. prostokat" << endl << endl;
    cin >> dzialanie;

    switch (dzialanie){
case 1:
    cout << endl << "podaj bok kwadratu :";
cin >> a;
pole = a * a;
obwod = 4 * a;
break;
cout << endl <<" podaj boki :";
cin >> a >> b;
pole = a * b;
obwod = a + a + b + b;
default :


    cout << endl << "pole wynosi " << pole << endl << endl;
    cout << endl << "obwod wynosi " << obwod << endl << endl;

    }
    return 0;

}

Prosiłbym o pomoc i nie stosowanie jakiś skomplikowanych sformułowań. Po wstawieniu średnika program działa fatalnie :/ czy mógłby ktoś wyjaśnić?

screenshot-20180316222426.png

2

"expected ; before 'switch' " z angielskiego

"oczekuje/spodziewam się średnika przed 'switch' "

Wstaw średnik po

cin >> dzialanie
0

Program jest UB (undefined behavior), z powodu niezainicjalizowania zmiennych 'pole' i 'obwod'.
Jeśli nie podasz poprawnie wartości zmiennej dzialanie, aby obsłużyła go instrukcja switch, na koniec będzie próba
wypisania niezainicjalizowanych zmiennych a to jest UB.

edit: Jak mniemam brakuje jeszcze case 2: do obliczania prostokąta.

0

To jak zainicjować zmienne pole i obwód? czytałem gdzieś ze w double wystarczy jak bedą

Nadaj im jakieś wartości początkowe, np.

double pole = 0.0, obwod = 0.0;
0
YooSy napisał(a):

To jak zainicjować zmienne pole i obwód? czytałem gdzieś ze w double wystarczy jak bedą

Nadaj im jakieś wartości początkowe, np.

double pole = 0.0, obwod = 0.0;

Próbowałem już tego i też nie działa :/

1

Dlaczego ten kawałek kodu:

cout << endl << "pole wynosi " << pole << endl << endl;
cout << endl << "obwod wynosi " << obwod << endl << endl;

znajduje się w środku default?
default wykonuje się wtedy kiedy żaden case nie pasuje to wartości. Czyli w tym momencie wszystko co nie jest jedynką.

Dodatkowo, przyjrzyj się co robisz tutaj:

case 1:
	cout << endl
		<< "podaj bok kwadratu :";
	cin >> a;
	pole = a * a;
	obwod = 4 * a;
	break; // Wyjście z case
	cout << endl
		<< " podaj boki :";
	cin >> a >> b;
	pole = a * b;
	obwod = a + a + b + b;

Po break kod jest już nieosiągalny.

0

W niewłaściwym miejscu jest wypisanie wyników. Część default wykonuje się gdy podamy niewłaściwą wartość
zmiennej dzialanie. Wynieś wpisywanie wyników poza nawias instrukcji warunkowej.

Dobra rada na przyszłość. Poznaj działanie debuggera, bo to podstawowe narzędzie programisty. Ułatwisz sobie życie.

0
atmal napisał(a):

Dlaczego ten kawałek kodu:

cout << endl << "pole wynosi " << pole << endl << endl;
cout << endl << "obwod wynosi " << obwod << endl << endl;

znajduje się w środku default?
default wykonuje się wtedy kiedy żaden case nie pasuje to wartości. Czyli w tym momencie wszystko co nie jest jedynką.

Dodatkowo, przyjrzyj się co robisz tutaj:

case 1:
	cout << endl
		<< "podaj bok kwadratu :";
	cin >> a;
	pole = a * a;
	obwod = 4 * a;
	break; // Wyjście z case
	cout << endl
		<< " podaj boki :";
	cin >> a >> b;
	pole = a * b;
	obwod = a + a + b + b;

Po break kod jest już nieosiągalny.

Dzięki poprawiłem błędy ale po naprawieniu wsykoczył taki błąd
screenshot-20180316225129.png

0

#include <iostream>
#include <ostream>
#include <cmath>
using namespace std;

int main()
{
double a, b, pole=0.0, obwod=0.0;
int dzialanie;

cout << "Wybierz dzialanie :" << endl << "1. kwadrat" << endl
<< "2. prostokat" << endl << endl;
    cin >> dzialanie;

    switch (dzialanie){
case 1:
    cout << endl << "podaj bok kwadratu :";
cin >> a;
pole = a * a;
obwod = 4 * a;
break;
case 2:
cout << endl <<" podaj boki :";
cin >> a >> b;
pole = a * b;
obwod = a + a + b + b;
default :

}
    cout << endl << "pole wynosi " << pole << endl << endl;
    cout << endl << "obwod wynosi " << obwod << endl << endl;


    return 0;

}


1

Jeżeli default ma być pusty to po prostu go usuń - stąd bierze się ten błąd.

0

Dobra działa. Dzięki za pomoc i przepraszam za kłopoty ale jak już wspomniałem dopiero zaczynam ;) . Jeszcze raz dzięki

1

... albo napisz, że

default:
    cerr << "Podano niepoprawna wartosc zmiennej dzialanie\n";
0

Może zacznij od 0 i staraj się porządek utrzymać :P

#include <iostream>
#include <ostream>
#include <cmath>
using namespace std;

int main()
{
	int length = 5;
	int width = 10;
	
	int task_case = 1;
	
	cout << "Enter a number of a task to do" << endl;
	cout << "1 - Area of Square" << endl;
	cout << "2 - Area of Rectangle" << endl;
	
	cin >> task_case;
	
	switch(task_case)
	{
		case 1:
	    	cout << "Area of Square: " << length*length << endl;
			break;
		   
		case 2:
			cout << "Area of Rectangle: " << length*width << endl;
	    	break;
			
		default:
		    cerr << "something went wrong";
			break;
	}
	return 0;
}
0

Działa już :D Dzięki za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1