% Darstellung = convert2base(n,q) gibt eine Zeichenkette mit der
% Darstellung der ganzen Zahl n zur Basis q aus.

function Str = convert2base(n,q)  

  Begin = '';   % Eventuell an den Anfang zu setzende Zeichen
                % werden in dieser Zeichenkette gespeichert.
  Str   = '';   % Zu Beginn ist die Ausgabe leer
                
  if (n == 0)       % sonderfall n = 0 
    Str = '0';      % triviale Rückgabe '0'
    return          % Weitere Überprüfung unnötig
  end
  if (n < 0)        % Negative Zahlen
    Begin = '-';    % vorzeichen davorsetzen
    n = -n;         % Meine Funktion kann nur positive Zahlen
  end
  
  while n > 0       % Solange noch Stellen erzeugt werden müssen
    Str = strcat(numchar(rem(n,q)), Str);  % Den Rest in eine
                    % 'Ziffer' umwandeln (mit Unterfunktion
                    % numchar) und vor die bereits ermittelten
                    % Ziffern (Zeichenkette Str) setzen
    n = floor(n/q); % 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(Begin, Str);  % eventuelles '-' davorsetzen
  
end



function Zeichen = numchar(Number)
  % Unterfunktion (die Funktion ist nur für convert2base() sichtbar)
  % die zu einer Zahl das zugehörige Zeichen für die q-adische
  % Darstellung ausgibt. Also: 0-9, A-Z, a-z, [61]+
  
  
  if     Number <= 9                % Darstellbar als 0-9
    Zeichen = char('0'+Number);     % Zahl ausgeben
  elseif Number <= 9+26             % Darstellbar als A-Z
    Zeichen = char('A'+Number-10);  % Zeichen ausgeben
  elseif Number <= 9+26+26          % Darstellbar als a-z
    Zeichen = char('a'+Number-36);  % Zeichen ausgeben
  else                              % Nicht schön darstellbar
    Zeichen = strcat('[', int2str(Number), ']'); % Not-Darstellung
  end

  % Erklärendes zu dieser Methode:
  % Jedes Zeichen in Matlab ist eigentlich eine Zahl. Damit kann
  % man auch damit rechnen. Die Zeichen '0' bis '9', 'A' bis 'Z'
  % und 'a' bis 'z' besitzen direkt hintereinander liegende Zahlen.
  % z.B.: 'A' = 65, 'B' = 66, 'C' = 67 usw.
  % Daher kann ich so rechnen, wie oben und beschränke somit die
  % Anzahl der zu unterscheidenden Fälle drastisch.
  
end
