• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 2 głosów - średnia: 5
  • 1
  • 2
  • 3
  • 4
  • 5
Sandbox 2: Zmienne - ćwiczenie na wyobraźnie
#1
Witam ponownie
Kurcze mały tu jeszcze ruch w interesie, więc może zachęcę zaglądających tu kolegów i koleżanki (bo pewnie takie są, albo będą) do odrobiny intelektualnego wysiłku.
Na początek pierwsze ćwiczenie z C++:
Proszę przy użyciu tylko DWÓCH zdefiniowanych zmiennych, zamienić ich wartości miejscami.
czyli mamy np:
int x=5;
int y=8;
sprawić aby po zamianie x=8 a y=5
Nie wolno posługiwać się zmiennymi pomocniczymi , tylko x i y.
Czekam na odpowiedzi... może ten banalny przykład rozrusza nieco atmosferę :-)
Pozdrawiam
 
Odpowiedź
#2
Hmmm czy takie coś zda egzamin ?

x = x + y;
y = x - y;
x = x - y;
 
Odpowiedź
#3
(14-01-2016, 11:33)Bogusz napisał(a): Hmmm czy takie coś zda egzamin ?

x = x + y;
y = x - y;
x = x - y;

Cześć jasne!
Zgłoś się teraz do do admina... niech da to co obiecał :-)
ps. Nareszcie jakiś ruch :-)

Przypomniałem sobie przy tej okazji, że kiedyś było takie kultowe coś jak COMMODORE C64 ,gdzie pamięć była sprzętowo podzielona na osobne obszary przeznaczone na przechowywanie zmiennych i kodu maszynowego programu. Jeśli dobrze pamiętam to na zmienne było tylko 4 kB i  trzeba było bardzo uważać aby nie przykryć jednego drugim, bo to powodowało 100% zwis komputerka, zwłaszcza że niemal wszystko przechowywane było w tablicach. Ale to bardzo stare dzieje, które jednak miło się wspomina (oj te noce spędzone przy magnetofonie z ołówkiem, który miał sześciokątny przekrój. Kto dziś pamięta dlaczego akurat taki? :-)
Pozdrawiam
Na pocieszenie dla tych pozostałych, którzy nie zdążyli z odpowiedzią napiszę tylko tyle,że jest jeszcze jedno rozwiązanie oparte na referencjach( czyli do miejsc w pamięci gdzie przechowywane są wartości) - jednak niezupełnie o to chodziło.
 
Odpowiedź
#4
Szkoda, że tak mało tego ruchu. Możliwe, że wieczorem ktoś jeszcze się odezwie Smile
 
Odpowiedź
#5
Ja tez zaglądałem ale rozwiązania nie znałem Sad
 
Odpowiedź
#6
if(x=5) y=5;
if(y=5) x=8;
 
Odpowiedź
#7
(27-01-2016, 23:22)adix napisał(a): if(x=5) y=5;
if(y=5) x=8;

Cześć... z tymi wartościami to był przykład. Twój kod jest logicznie poprawny, ale działa tylko wtedy gdy znasz wartość x i y. Ogólnie chodzi o zamianę wartości obu zmiennych, dowolnych wartości.
W języku C operatorem porównania jest ==. W twoim przypadku, jeśli to jest C (C++) to już w pierwszej linii masz:
x=5 i  y =5 :-)
Pozdrawiam
 
Odpowiedź
#8
o tym == podwójnym zapominam czasem ale kompilator mi przypomina a co do twojego pytania wystarczy i 2 zimne pomocnicze i 2 warunków.
x1=x;
y1=y;
if(x=x1) y=x;
if(y=x) x=y1;
 
Odpowiedź
#9
(30-01-2016, 00:43)adix napisał(a): o tym == podwójnym zapominam czasem ale kompilator mi przypomina a co do twojego pytania wystarczy i 2 zimne pomocnicze i 2 warunków.
x1=x;
y1=y;
if(x=x1) y=x;
if(y=x) x=y1;

To niezgodne z warunkami ćwiczenia. Przeczytaj pierwszy post. Jedyne właściwe rozwiązanie przesłał pierwszy odpowiadający.
.. A Twoje rozwiązanie aż z 2 zmiennymi pomocniczymi i 2 if-ami - to chyba najbardziej zawiłe jest. Po co aż 2 zmienne pomocnicze? A z jedną nie łaska?
z=x; x=y; y=z;
Pozdrawiam :-)
 
Odpowiedź
#10
Kod:
switch( x )
{
case 1:
x=y;
  y=1;

    break;
  
case 2:
  x=y;
  y=2;
    break;
case 3:
  x=y;
  y=3;
    break;case 4:
   x=y;
   y=4;
    break;
case 5:
   x=y;
  y=5;
    break;case 6:
   x=y;
  y=6;
    break;
case 7:
   x=y;
  y=7;
    break;
case 8:
   x=y;
  y=8;
    break;
case 9:
   x=y;
  y=9;
    break;
case 0:
  x=y;
  y=0;
    break;

}
proszę cie bardzo zamiana bez końca i bez dodatkowych zmiennych
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości