\begin{slide}{Aufgaben zu Parameter-Modi (I)}

Erkl�ren Sie den Unterschied zwischen (Ada)
\begin{verbatim}
with Ada.Text_IO;
use Ada.Text_IO;

procedure Check is

   procedure Sub (X: in out Integer;
                  Y: in out Integer;
                  Z: in out Integer) is
   begin
      Y := 8;
      Z := X;
   end;

   Foo: Integer := 9;
   Bar: Integer := 7;

begin

   Sub (Foo,Foo,Bar);
   Put_Line (Integer'Image(Foo));
   Put_Line (Integer'Image(Bar));

end Check;
\end{verbatim}
(in Datei \verb|Check.adb| schreiben, kompilieren mit \verb|gnatmake Check.adb|)

und (C++)
\begin{verbatim}
#include <iostream>

void sub (int & x, int & y, int & z) {
  y = 8;
  z = x;
}

int main () {
   int foo = 9;
   int bar = 7;

   sub (foo,foo,bar);
   std::cout << foo << std::endl;
   std::cout << bar << std::endl;
}
\end{verbatim}

\end{slide}

\begin{slide}{Aufgaben zu Parameter-Modi (II)}

Durch welchen Aufruf kann man diese beiden
Unterprogramme semantisch voneinander unterscheiden:

Funktion (C++): (call by reference)
\begin{verbatim}
void swap (int & x, int & y) 
   { int h = x; x = y; y = h; }
\end{verbatim}

Makro (C): (call by name)
\begin{verbatim}
#define swap(x, y) \ 
   { int h = x; x = y; y = h; }
\end{verbatim}

\bigskip

Kann man jedes der beiden von copy-in/copy-out unterscheiden?

\end{slide}

