Rozwiązanie q=n<p?n++:p++;

Rozwiązanie q=n<p?n++:p++;
J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Proszę o podpowiedź jak przy danych n=10, p=5, q=10, z takiego wyrażenia: q=n<p?n++:p++; mogą wyjść następujące wyniki: n=15, p=11, q=10?

LN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1398
0

A jesteś pewien, że to nie jest umieszczone w jakiejś pętli ? :>

J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Jest to interesujący mnie fragment zadania z książki C. Delanny-a "Ćwiczenia z języka C". I jeszcze jedna rzecz która może jest najważniejsza natępny wiersz po tym wyrażeniu: q=n<p?n++:p++; to printf("C: n%d, p%d, q%d\n", n, p, q);

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
1

Jak dla mnie n = 10; p = 6; q = 5.

Skąd masz swoje wyniki? Nawet z tym co napisałeś tak będzie...chyba, że się mylę.

J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Z tego co ja obliczyłem też mi tak wychodzi, odpowiedzi są podane w tej samej książce tuż pod zadaniem.

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

Wrzuć skan strony z książki...może errata jakaś do niej była? :)

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
0
Kopiuj
n = 10;
p = 5;
q = 10;

q = n<p?n++:p++;
q = ((n<p) ? n++ : p++);
q = p++
ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

To wiemy ;)

Ale skąd wzięły się podane przez @jaśko1 wyniki?

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
1

Zadałem sobie trochę trudu i znalazłem treść zadania, już nie potrzebujemy skanu ;)

Kopiuj
 
#include <stdio.h>

main()
{

int n=10, p=5, q=10, r;
r = n==(p=q);
printf("A: n=%d p=%d q=%d r=%d\n", n, p, q, r);
n=p=q=r=5;
n+=p+=q;
printf("B: n=%d p=%d q=%d\n", n, p, q);
q = n<p ? n++:p++;
printf("C: n=%d p=%d q=%d\n", n, p, q);
q = n>p ? n++:p++;
printf("D: n=%d p=%d q=%d\n", n, p, q);
}

Wynik, który podałeś jest prawidłowy...wystarczy, że rozwiążesz całe zadanie a nie tylko jedną z jego linii ;)

J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

I to chyba wyjaśnia całe zamieszanie.

J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Temat można by uznać za zakończony ale ponieważ nie chcę zaśmiecać forum dlatego zadam pytanie tutaj (chyba nadrzędne do tego tematu) a mianowicie skąd wiadomo jaka jest kolejność wykonywania operatorów? Poprzednie moje pytanie było dość trywialne z obecnej perspektywy i gdyby nie moja ignorancja poprzednich wyrażeń programu pewnie otrzymał bym poprawny wynik, nie mniej jednak kolega @stinger_t rozwiązał ten problem w 100%. A moje obecne pytanie wynika z przykładowo takiego wyrażenia a=c>b? c||e:b&&d!=a++d; Jak się do tego zabrać? Który operator jest najważniejszy a które będą wykonywane w następnej kolejności. Proszę was o schemat rozwiązywania takich problemów a nie gotowe rozwiązanie. Z góry dziękuję za pomoc.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

@jaśko1 istnieje hierarchia operatorów. Wygooglaj ją sobie.

ST
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

Najlepiej jeśli poszukasz w Google "priorytety operatorów".

Np. http://nadzieja.el-kfa.net/strony/operators.html

lub

http://pl.wikibooks.org/wiki/C/Operatory

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.