Wątek przeniesiony 2018-09-22 13:31 z C/C++ przez kq.

Zapisanie wyniku instrukcji "if" do zmiennej.

0

Witam, staję przed problemem zapisania wyniku instrukcji "if" do zmiennej.
W programie wprowadzam współrzędne dwóch punktów, w zależności od tego jakie poszczególne przyrosty będą posiadały znaki, wykona się określone działanie matematyczne.
Na końcu wyświetla mi się jeden wynik, bo przyrosty między dwoma punktami mogą spełnić tylko jeden z warunków. Chciałbym w dalszej części programu korzystać z tego wyniku, jednak nie wiem jak się do niego odwołać (pomysłem jest zapisanie do zmiennej, ale nie wiem jak to zrobić). Pomożecie?

float x2,y2,xW,yW,dx,dy,dx2,dy2,A2,Azymut;


cout<<endl<<("Podaj x2:");
cin >> x2;
cout<<endl<<("Podaj y2:");
cin >> y2;

cout<<endl<<("Podaj xW:");
cin >> xW;
cout<<endl<<("Podaj yW:");
cin >> yW;

dx=x2-xW;
dy=y2-yW;

if ((dy>0) & (dx>0))
{cout<<fixed<<setprecision(4)<<endl<<"Azymut odcinka W,2: "<<((atan((dy/dx)))*(200/M_PI))<<("[grad]")<<endl;} // I cwiartka
else if((dy>0) & (dx<0))
cout<<fixed<<setprecision(4)<<endl<<"Azymut odcinka W,2: "<<200-((atan((dy/dx*(-1))))*(200/M_PI))<<("[grad]")<<endl; // II cwiartka
else if((dy<0) & (dx<0))
cout<<fixed<<setprecision(4)<<endl<<"Azymut odcinka W,2: "<<200+((atan((dy*(-1)/dx*(-1))))*(200/M_PI))<<("[grad]")<<endl; // III cwiartka
else if((dy<0) & (dx>0))
cout<<fixed<<setprecision(4)<<endl<<"Azymut odcinka W,2: "<<400-((atan((dy*(-1)/dx)))*(200/M_PI))<<("[grad]")<<endl; // IV cwiartka
else if((dx==0) & (dy>0))
cout<<fixed<<setprecision(4)<<endl<<"Azymut odcinka W,2: 100"<<("[grad]")<<endl; //Przypadki szczegolne
else if((dx==0) & (dy<0))
cout<<fixed<<setprecision(4)<<endl<<"Azymut odcinka W,2: 300"<<("[grad]")<<endl;//Przypadki szczegolne
else if((dy==0) & (dx<0))
cout<<fixed<<setprecision(4)<<endl<<"Azymut odcinka W,2: 200"<<("[grad]")<<endl;//Przypadki szczegolne
else if((dy==0) & (dx>0))
cout<<fixed<<setprecision(4)<<endl<<"Azymut odcinka W,2: 0"<<("[grad]")<<endl;//Przypadki szczegolne
else if((dy==0) & (dx==0))
cout<<fixed<<setprecision(4)<<endl<<"Punkty W i 2 to te same punkty! Brak azymutu!"<<endl;//Przypadki szczegolne
1

W sensie, że na czym się konkretnie zaciąłeś?

Język przecież nie zabrania przypisywać wartości wewnątrz instrukcji warunkowej - musisz tylko pamiętać, aby deklaracja zmiennej znajdowała się wcześniej (w innym wypadku nie byłaby ona widoczna poza wnętrzem ifa).

int a, b;

std::cin >> a;

if (a > 10) {
  b = 10;
} else {
  b = 0;
}
0

Załóżmy zatem, że wynik chciałbym zapisać jako zmienną "A2".
Deklaruję zmienną

float A2;

Wywołuję instrukcję i wstawiam przypisanie do zmiennej, kompilator wyrzuca błąd. Chyba, że źle rozumuję.

if ((dy>0) & (dx>0))
{cout<<fixed<<setprecision(4)<<endl<<"Azymut odcinka W,2: "<<A2 = ((atan((dy/dx)))*(200/M_PI))<<("[grad]")<<endl;} // I cwiartka
else if((dy>0) & (dx<0))
cout<<fixed<<setprecision(4)<<endl<<"Azymut odcinka W,2: "<<A2 = 200-((atan((dy/dx*(-1))))*(200/M_PI))<<("[grad]")<<endl; // II cwiartka
else if((dy<0) & (dx<0))
1

Z powodu kolejności wykonywania działań kompilator rozumie Twój kod nieco inaczej - musiałbyś albo zawinąć całe A2 = atan(...) w nawias, albo - najczytelniej - rozbić to na dwie odrębne linijki:

if ((dy > 0) && (dx > 0)) {
  a2 = atan(...);
}

cout << "Azymut odcinka W,2: " << a2 << "[grad]" << endl;

Btw, w przypadku typu bool wykorzystuj operator &&. & oznacza bitowe AND.

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