Jak mogę prościej to zapisać?
if (y>=z)
mniejsza = y;
if (z>=y)
mniejsza = z;
Jak mogę prościej to zapisać?
if (y>=z)
mniejsza = y;
if (z>=y)
mniejsza = z;
Oto cały kod.
Chciałbym zapisać go jakoś prościej.
if ((x>=y) && (x>=z)){
najwieksza = x;
{
if (y>=z)
mniejsza = y;
if (z>=y)
mniejsza = z;
}
} else if ((y>=x) && (y>=z)){
najwieksza = y;
{
if (x>=z)
mniejsza = x;
if (z>=x)
mniejsza = z;
}
} else if ((z>=x) && (z>=y)){
najwieksza = z;
{
if (x>=y)
mniejsza = x;
if (y>=x)
mniejsza = y;
}
}
Co do pytania jak uprościć tego wewnętrznego ifa to ja bym napisał:
mniejsza = (y < z) ? y : z
Kod ma wybierać największą liczbę i środkową.
mniejsza = (y < z) ? y : z
Możesz mi to wyjaśnić za co odpowiada ? oraz :
No to:
mniejsza = (y >= z) ? y : z
Możesz mi to wyjaśnić za co odpowiada ? oraz :
Operator trójargumentowy - skrócony zapis ifa, odpowiednik:
if (y >= z)
mniejsza = y
else
mniejsza = z;
#include <algorithm>
...
int najwieksza, srodkowa;
int tablica[3] = {x, y, z};
std::sort(tablica, tablica + 3);
najwieksza = tablica[2];
srodkowa = tablica[1];
W sumie masz tylko 2 sensownych warianty:
#include <iostream>
using namespace std;
int main()
{
for(int w,x,y,z;cin>>x>>y>>z;)
{
cout<<"w1: ";
if(x<=y)
{
if(x<=z)
{
if(y<=z) cout<<x<<' '<<y<<' '<<z;
else cout<<x<<' '<<z<<' '<<y;
}
else cout<<z<<' '<<x<<' '<<y;
}
else
{
if(y<=z)
{
if(x<=z) cout<<y<<' '<<x<<' '<<z;
else cout<<y<<' '<<z<<' '<<x;
}
else cout<<z<<' '<<y<<' '<<x;
}
cout<<endl;
cout<<"w2: ";
if(x>y) w=x,x=y,y=w;
if(x>z) w=x,x=z,z=w;
if(y>z) w=y,y=z,z=w;
cout<<x<<' '<<y<<' '<<z;
cout<<endl;
}
return 0;
}
@_13th_Dragon: Wszystko musi być z zastosowaniem if
Bez używania for
bifed85954 napisał(a):
Jak mogę prościej to zapisać?
if (y>=z) mniejsza = y; if (z>=y) mniejsza = z;
Nie wiem czemu nazywa się mniejsza
ale logicznie to masz to
mniejsza = std::max(y, z);
several napisał(a):
bifed85954 napisał(a):
Jak mogę prościej to zapisać?
if (y>=z) mniejsza = y; if (z>=y) mniejsza = z;
Nie wiem czemu nazywa się
mniejsza
ale logicznie to masz tomniejsza = std::max(y, z);
Mogę zrobić coś na zasadzie?
najwieksza = max(x, y, z);
najmniejsza = min(x, y, z);
posrednia != najwieszka && najmniejsza
bifed85954 napisał(a):
Kod ma wybierać największą liczbę i środkową.
mniejsza = (y < z) ? y : z
Możesz mi to wyjaśnić za co odpowiada ? oraz :
A z ilu liczb, inaczej co na wejściu?
bifed85954 napisał(a):
Mogę zrobić coś na zasadzie?
najwieksza = max(x, y, z);
najmniejsza = min(x, y, z);posrednia != najwieszka && najmniejsza
Tak
#include <algorithm>
najwieksza = std::max({x,y,z});
lion137 napisał(a):
bifed85954 napisał(a):
Kod ma wybierać największą liczbę i środkową.
mniejsza = (y < z) ? y : z
Możesz mi to wyjaśnić za co odpowiada ? oraz :
A z ilu liczb, inaczej co na wejściu?
3 liczby są,
x, y, z
wybieramy największą liczbę i środkową
W obiektowym świecie, tak by to wyglądało
(pseudo kod):
class Triplet {
public Triplet(int a, int b, int c) {
this.a=a;
this.b=b;
this.c=c;
}
public int max() {
return max(a, max(b, c));
}
public int min() {
return min(a, min(b, c));
}
public int mid() {
if ((b < a && a < c) || (c < a && a < b)) {
return a;
}
if ((a < b && b < c) || (c < b && b < a)) {
return b;
}
return c;
}
}
TomRiddle napisał(a):
W obiektowym świecie, tak by to wyglądało
(pseudo kod):
... public int mid() { if ((b < a && a < c) || (c < a && a < b)) { return a; } if ((a < b && b < c) || (c < b && b < a)) { return b; } return c; } }
else
co zwiększa ilość porównań! WTF?Ktokolwiek to przeczyta, doprawdy nie tak wygląda obiektowy świat!
Jeżeli już mówimy obiektowości to coś w rodzaju:
class TripletA
{
private:
array<int,3> tb;
static array<int,3> srt(int x,int y,int z)
{
if(x<=y)
{
if(x<=z)
{
if(y<=z) return {x,y,z};
else return {x,z,y};
}
else return {z,x,y};
}
else
{
if(y<=z)
{
if(x<=z) return {y,x,z};
else return {y,z,x};
}
else return {z,y,x};
}
}
public:
TripletA(int a,int b,int c):tb(srt(a,b,c)) {}
int min()const { return tb[0]; }
int mid()const { return tb[1]; }
int max()const { return tb[2]; }
};
class TripletB
{
private:
int x,y,z;
array<int,3> srt()const
{
if(x<=y)
{
if(x<=z)
{
if(y<=z) return {x,y,z};
else return {x,z,y};
}
else return {z,x,y};
}
else
{
if(y<=z)
{
if(x<=z) return {y,x,z};
else return {y,z,x};
}
else return {z,y,x};
}
}
public:
TripletB(int x,int y,int z):x(x),y(y),z(z) {}
int min()const { return srt()[0]; }
int mid()const { return srt()[1]; }
int max()const { return srt()[2]; }
};
class TripletC
{
private:
array<int,3> tb;
static int index(int x,int y,int z) { return (((x>y)<<2)|((y>z)<<1)|((z>x)<<0)); }
public:
TripletC(int x,int y,int z):tb{x,y,z} {}
int index()const { return index(tb[0],tb[1],tb[2]); }
int min()const { static int ord[]{0, 0, 2, 0, 1, 1, 2}; return tb[ord[index()]]; }
int mid()const { static int ord[]{1, 1, 0, 2, 2, 0, 1}; return tb[ord[index()]]; }
int max()const { static int ord[]{2, 2, 1, 1, 0, 2, 0}; return tb[ord[index()]]; }
};
Po co zakładać kilka wątków o tym samym?
https://4programmers.net/Forum/C_i_C++/360565-warunek_if_2_najwieksze_liczby?p=1842142
LukeJL napisał(a):
Po co zakładać kilka wątków o tym samym?
https://4programmers.net/Forum/C_i_C++/360565-warunek_if_2_najwieksze_liczby?p=1842142
Bo od tego jest forum, zeby pytania zadawac, a my nie jestesmy druga elektroda. W tym dziale zawsze byl i bedzie smietnik, trzeba z tym jakos zyc