% Darstellung = convert2bin(n) gibt eine Zeichenkette mit der
% Darstellung der ganzen Zahl n zur Basis 2 aus (mit führender 0
% um positive Zahlen zu kennzeichnen)
% Negative Zahlen werden im Zweierkomplement dargestellt.

% Autor:     Matthias Bosewitz
% Tutorium:  Jan-Henning Hansen, Mo 10-12
% Aufgabe:   Übungszettel 3, 4b


function Str = convert2bin(n)  

  Str   = '';   % Zu Beginn ist die Ausgabe leer
                
  if (n == 0)       % Sonderfall n = 0
    Str = '00';     % triviale Rückgabe '00' (es wäre
                    % auch '0' eindeutig, aber dann entspräche es 
                    % nicht mehr der Form "Führende 0""Zahl")
    return          % Weitere Überprüfung unnötig
  end
  if (n == 1)       % Sonderfall n = -1
    Str = '10';     % Triviale Rückgabe '10'
    return          % Weitere Überprüfung unnötig
  end
  
  if (n < 0)        % Negative Zahlen
    Bins  = ['1' '0']; % Array mit den Verfügbaren Ziffern ist
                    % hier verkehrherrum, wodurch man sich die
                    % Umdrehung der Ziffern komplett sparrt.
    n = -n - 1;     % Erstmal positive Zahl bearbeiten
                    % Statt später bei der umgedrehten Darstellung
                    % +1 zu rechnen, ziehe ich die 1 hier ab, da es
                    % einfacher ist und am Ergebnis nichts ändert
  else                % Positive Zahlen
    Bins  = ['0' '1']; % Array mit den Verfügbaren Ziffern normal
  end
  
  while n > 0       % Solange noch Stellen erzeugt werden müssen
    Str = strcat(Bins(rem(n,2)+1), Str);  % Den Rest in ein
                    % Zeichen umwandeln und vor die bereits
                    % ermittelten Ziffern (Str) setzen *
    n = floor(n/2); % Zahl durch q Teilen (Rest wird oben schon
                    % benutzt, wesgegen abgerundet wird)
  end
  % Schematisch führt diese Funktion also einfach so lange eine
  % Division mit Rest aus bis die Zahl 0 wird und schreibt alle
  % Reste in der für uns gewohnten Weise hintereinander.
  
  Str = strcat(Bins(1), Str);  % '0' oder '1' davorsetzen, damit
                               % man auch das Vorzeichen erkennt
  
end

% Anmerkung *:
% Da die Zeile nicht sofort einsichtig ist will ich sie hier
% kurz erläutern
% Für n > 0 wurde zu Beginn Bins = ['0' '1'] gesetzt wodurch
% für     rem(n,2) == 0  ->  Bins(0+1) = '0'
% und für rem(n,2) == 1  ->  Bins(1+1) = '1' wie gewünscht.
%
% Für n < 0 wurde zum einen n = -n - 1 gesetzt und Bins = ['1' '0']
% dadurch ist es dafür genau umgekehrt, die Ziffern 1 und 0 werden
% also vertauscht. Dies entspricht eben genau der Darstellung im
% Zweierkomplement.
% Nach dem Hinweis vorgehend, wäre eine Funktion viel langsamer.


