Wątek przeniesiony 2018-10-21 20:46 z C/C++ przez furious programming.

Wyznaczenie dokładnie jednej liczby dodatniej.

0

Mam takie zadanie do zrobienia:

Biorąc pod uwagę trzy liczby całkowite A, B, C, zweryfikuj następującą propozycję: "Dokładnie jedna z liczb A, B, C jest dodatnia.

Zastanawiam się w tym zadaniu nad jedną rzeczą czy po wpisaniu przez użytkownika dodatniej liczby powinien on od razu zakończyć pracę czy jakoś inaczej to powinno wyglądać. Jeśli możliwe to prosiłbym żeby za pomocą 'if' było to pokazane.

1

No ale jeśli wpisze dwie, to program nie powinien wypisać że jest ok, więc nie możesz po pierwszej dodatniej liczbie zakończyć.

0

Zastanawiam się w tym zadaniu nad jedną rzeczą czy po wpisaniu przez użytkownika dodatniej liczby powinien on od razu zakończyć pracę czy jakoś inaczej to powinno wyglądać.

A gdzie w tym zadaniu masz napisane coś o użytkowniku?
Masz napisane Biorąc pod uwagę trzy liczby całkowite A, B, C, czyli one są już dostępne, a skąd się wzięły nie ma znaczenia dla zadania.
Mogą być wczytane z pliku (jak będziesz przekonywał plik, że wartość C cię nie interesuje).
Mogą być wyznaczone z innych obliczeń (jak będziesz zmuszał kod, by nie liczył ci wartości C).
albo po prostu kot przebiegł po klawiaturze :).

Niepotrzebnie sam sobie utrudniasz zadanie.

0

"Dokładnie jedna z liczb A, B, C jest dodatnia"

Czyli że jak? Zakładając, że nią będzie np. A - A>0 i (B <=0 i C <= 0) ma dać True.
Analogicznie dla B oraz C, a potem - liczbą_jest_A operator liczbą_jest_B operator liczbą_jest_C jest True, czy konieczne są jakieś kombinacje?

Mały tip - nie ma tu żadnych ifów.

0

Bracie @Jcobbe

  1. Podejście na ifach - musisz rozważyć musisz z grubsza takie przypadki:
 czy bieżąca liczba jest dodatnia? (czyli > 0)
    |-> jeśli jest to czy pozostałe są mniejsze od 0?
        |-> jeśli są to odpowiedzią zadania jest "tak, dokładnie jedna z liczb jest dodatnia".
        |-> jeśli nie to odpowiedzią zadania jest "nie, jest więcej dodatnich liczb"
    |-> bieżąca liczba jest ostatnia z możliwych do wyboru?
        |-> jeżeli jest, to oznacza że wszystkie dostępne liczby są ujemne
        |-> jeżeli nie, to użyj tej liczby jako bieżącej i przejdź do początku ścieżki
  1. Podejście sprytne - obczaj operację logiczną XOR ;]
1

Podejście sprytne:

int czy_jedna_dodatnia(int A, int B, int C)
{
    int licznik = 0;
    if (A > 0) licznik++;
    if (B > 0) licznik++;
    if (C > 0) licznik++;
    return licznik == 1;
}
2

Podejście sprytne skrócone:

int czy_jedna_dodatnia(int A, int B, int C)
{
    return (A > 0) + (B > 0) + (C > 0) == 1;
}

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