program Collatz_eleganter_1_2;

uses
  Crt,Dos,SysUtils;

var
  zuTesten,varName,(*a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1,q1,r1,s1,t1,u1,v1,w1,x1,y1,z1,x*)perLaenge,i1 : Int64;
  eingabeString,pfadUndDateiName,werteString : String;
  uebergabeWertAbbruch,speichern,prim,quad,kub,treff : Boolean;
  textDatei : TextFile;

procedure DatenSpeichern;

var
  jaNein : string;

begin
  WriteLn;
  jaNein:= '';
  speichern := false;
  Write('Moechten Sie Die Ergebnisse abspeichern? j fuer ja, ansonsten beliebige Taste: ');
  Readln(jaNein);
  if jaNein = 'j' then begin
    speichern := true;
  end;

end;

procedure DateiErstellen;

var
  pfad,dateiName,eingabeLokal,zahlString : String;
  jaNeinLokal : Boolean;

begin
  zahlString := '';
  if speichern = false then exit;
  WriteLn;
  Write('Wollen Sie die Datei selber benennen? j fuer ja, ansonsten ist die zu testende Zahl der Name:');
  ReadLn(eingabeLokal);
  if eingabeLokal = 'j' then begin
    jaNeinLokal := true;
    WriteLn;
    Write('Geben Sie einen Dateinamen ein: ');
    ReadLn(dateiName);
  end;
  WriteLn;
  Write('Geben Sie einen Dateipfad ein, Return fuer lokales Verzeichnis: ');
  ReadLn(pfad);
  if jaNeinLokal = true then begin
    pfadUndDateiName :=  pfad + dateiName + '.txt';
    AssignFile(textDatei, pfadUndDateiName);
    Rewrite(textDatei);
    CloseFile(textDatei);
  end;
  if jaNeinLokal = false then begin
    ZahlString := IntToStr(zuTesten);
    pfadUndDateiName :=  pfad + zahlString + '.txt';
    AssignFile(textDatei, pfadUndDateiName);
    Rewrite(textDatei);
    CloseFile(textDatei);
  end;
  ClrScr;
end;

function IstPrim(n: Int64): Boolean;

var
  i : Int64;
begin
  prim := true;
  istPrim := true;
  if n = 0 then exit(false);
  if n = 1 then exit(false);
  for i := 2 to n div 2 do
    if n mod i = 0 then begin
      prim := false;
      exit(false);
    end;
end;

function quadratz(n: Int64): Boolean;

var
  i,q : Int64;

begin
  quadratz := false;
  quad := false;
  if n = 0 then exit(false);
  i := 0;
  q := 0;
  while q < n do begin
    inc(i);
    q := i * i;
    if q = n then begin
      quad := true;
      exit(true);
    end;
  end;
end;

function Kubus(n: Int64): Boolean;

var
  i,k : Int64;

begin
  Kubus := false;
  kub := false;
  if n = 0 then exit(false);
  i := 0;
  k := 0;
  while k < n do begin
    inc(i);
    k := i * i * i;
    if k = n then begin
      kub := true;
      exit(true);
    end;
  end;
end;

procedure PrimFaktoren(n: Int64);

var
  i,j : Int64;

begin
  if IstPrim(zuTesten) = true then exit;
  if n = 0 then exit;
  if n = 1 then exit;
  writeln;
  write('Die Primfaktorzerlegung ist: ');
  if speichern = true then begin
    AssignFile(textDatei, pfadUndDateiName);
    Append(textDatei);
    write(textDatei,'Die Primfaktorzerlegung ist: ');
    CloseFile(textDatei);
  end;
  for i := 2 to n-1 do
    begin
      j := 0;
      while n mod i = 0 do
        begin
          n := n div i;
          inc(j)
        end;
        if j > 0 then
        begin
          if j = 1 then write(i) else write(i, '^', j);
          if n <> 1 then write(',');
          if Speichern = true then begin
            AssignFile(textDatei, pfadUndDateiName);
            Append(textDatei);
            if j = 1 then Write(textDatei, i) else Write(textDatei, i, '^', j);
            if n <> 1 then write(textDatei,',');
            CloseFile(textDatei);
          end;
        end;
    end;
  AssignFile(textDatei, pfadUndDateiName);
  Append(textDatei);
  writeln(textDatei, '');
  CloseFile(textDatei);
end;

procedure TeilerAnzahl(n: int64);

var i,j,s,k,l : int64;

begin
  j := 0;
  s := 0;
  if n = 0 then exit;
  if n = 1 then exit;
  if prim = true then exit;
  writeln;
  writeln;
  write('Die echten Teiler der Zahl ',n,' sind: ');
  if speichern = true then begin
    AssignFile(textDatei, pfadUndDateiName);
    Append(textDatei);
    write(textDatei, 'Die echten Teiler der Zahl ',n,' sind: ');
    CloseFile(textDatei);
  end;
  k := 0;
  l := 0;
    for i := 1 to n div 2 do
      begin
        if n mod i = 0 then begin
          inc(j);
          s := s + i;
          if i = n div 2 then write('',i,'')
          else
          write('',i,',');
          if speichern = true then begin
            AssignFile(textDatei, pfadUndDateiName);
            Append(textDatei);
            if i = n div 2 then write(textDatei,'',i,'')
            else
            write(textDatei,'',i,',');
            CloseFile(textDatei);
          end;
        end;
      end;
      AssignFile(textDatei, pfadUndDateiName);
      Append(textDatei);
      writeln(textDatei, '');
      CloseFile(textDatei);
      writeln;
      writeln;
      writeln('Die Zahl ',n,' hat ',j,' echte Teiler');
      if speichern = true then begin
        AssignFile(textDatei, pfadUndDateiName);
        Append(textDatei);
        writeln(textDatei,'Die Zahl ',n,' hat ',j,' echte Teiler');
        CloseFile(textDatei);
      end;
      begin
        if s < n then begin
          writeln;
          write('Die Zahl ',n,' ist defizient mit Teilersumme ',s,'');
          if speichern = true then begin
            AssignFile(textDatei, pfadUndDateiName);
            Append(textDatei);
            writeln(textDatei,'Die Zahl ',n,' ist defizient mit Teilersumme ',s,'');
            CloseFile(textDatei);
          end;
        end;
        if s = n then begin
          writeln;
          write('Die Zahl ',n,' ist vollkommen');
          if speichern = true then begin
            AssignFile(textDatei, pfadUndDateiName);
            Append(textDatei);
            writeln(textDatei,'Die Zahl ',n,' ist vollkommen');
            CloseFile(textDatei);
          end;
        end;
        if s > n then begin
          writeln;
          write('Die Zahl ',n,' ist abundant mit Teilersumme ',s,'');
          if speichern = true then begin
            AssignFile(textDatei, pfadUndDateiName);
            Append(textDatei);
            writeLn(textDatei,'Die Zahl ',n,' ist abundant mit Teilersumme ',s,'');
            CloseFile(textDatei);
          end;
        end;
      end;
  writeln;
end;

procedure IstDreieckszahl(n: int64);

var
  Produkt,teiler: int64;
  wahr : Boolean;

begin
  Produkt := 0;
  teiler := 0;
  writeln;
  while Produkt < n do
  begin
    inc(teiler);
    Produkt := (teiler * (teiler+1)) div 2;
    if Produkt > n then begin
      wahr := false;
      writeln('Die Zahl ',zuTesten,' ist keine Dreieckszahl')
    end
    else
    if n mod Produkt = 0 then begin
      if Produkt div n = 1 then  writeln('Die Zahl ',zuTesten,' ist die ',teiler,'-te Dreieckszahl');
    end;
  end;
  if speichern = true then begin
    AssignFile(textDatei, pfadUndDateiName);
    Append(textDatei);
    if wahr = false then
    writeLn(textDatei,'Die Zahl ',zuTesten,' ist keine Dreieckszahl')
    else
    writeLn(textDatei,'Die Zahl ',zuTesten,' ist die ',teiler,'-te Dreieckszahl');
    CloseFile(textDatei);
  end;
end;

procedure Collatz(n: int64);

var i,j,k : int64;

begin
  i := n;
  j := 1;
  k := 0;
  if n > 1 then
    begin
      Textcolor(white);
      Writeln;
      write('Die Collatz-Folgenglieder sind: ');
      if speichern = true then begin
        AssignFile(textDatei, pfadUndDateiName);
        Append(textDatei);
        write(textDatei,'Die Collatz-Folgenglieder sind: ');
        CloseFile(textDatei);
      end;
      write('',n,',');
      if speichern = true then begin
        AssignFile(textDatei, pfadUndDateiName);
        Append(textDatei);
        write(textDatei,'',n,',');
        CloseFile(textDatei);
      end;
      while i <> 1 do
        begin
          inc(j);
          if i mod 2 = 0 then i := i div 2
          else
          if i mod 2 <> 0 then i := (3 * i) +1;
          IstPrim(i);
          if IstPrim(i) = true then begin
            Textcolor(green);
            inc(k);
          end;
          quadratz(i);
          Kubus(i);
          if quad = true then TextColor(yellow) else
          if kub = true then TextColor(blue);
          if quad = true then begin
            if kub = true then begin
              TextColor(red);
            end;
          end;
          Write('',i,'');
          TextColor(white);
          if speichern = true then begin
            AssignFile(textDatei, pfadUndDateiName);
            Append(textDatei);
            write(textDatei,'',i,'');
            CloseFile(textDatei);
          end;
          if i <> 1 then write(',');
          if speichern = true then begin
            AssignFile(textDatei, pfadUndDateiName);
            Append(textDatei);
            if i <> 1 then write(textDatei,',');
            CloseFile(textDatei);
          end;
        end;
        writeln;
    end
  else exit;
  IstPrim(j);
  Istprim(k);
  writeln;
  write('Die Collatz-Folge hat ');
   if speichern = true then begin
     AssignFile(textDatei, pfadUndDateiName);
     Append(textDatei);
     WriteLn(textDatei, '');
     write(textDatei,'Die Collatz-Folge hat ');
     CloseFile(textDatei);
   end;
  if istprim(j) = true then Textcolor(green);
  write(j);
  if speichern = true then begin
    AssignFile(textDatei, pfadUndDateiName);
    Append(textDatei);
    write(textDatei, j);
    CloseFile(textDatei);
  end;
  Textcolor(white);
  write(' Glieder, ');
  if speichern = true then begin
    AssignFile(textDatei, pfadUndDateiName);
    Append(textDatei);
    write(textDatei,' Glieder, ');
    CloseFile(textDatei);
  end;
  if istprim(k) = true then Textcolor(green);
  Write(k);
  if speichern = true then begin
    AssignFile(textDatei, pfadUndDateiName);
    Append(textDatei);
    write(textDatei, k);
    CloseFile(textDatei);
  end;
  Textcolor(white);
  Write(' davon sind Primzahlen');
  if speichern = true then begin
    AssignFile(textDatei, pfadUndDateiName);
    Append(textDatei);
    write(textDatei,' davon sind Primzahlen');
    WriteLn(textDatei, '');
    CloseFile(textDatei);
  end;
  writeln;
end;



procedure AusgabeIstPrim;

begin
  if IstPrim(zuTesten) = true then begin
    writeln;
    writeln('Die Zahl ',zuTesten,' ist eine Primzahl');
    if speichern = true then begin
      AssignFile(textDatei, pfadUndDateiName);
      Append(textDatei);
      WriteLn(textDatei,'Die Zahl ',zuTesten,' ist eine Primzahl');
      CloseFile(textDatei);
    end;
  end
  else
  begin
    if zuTesten = 0 then begin
    writeln;
    writeln('Die Null ist 0 ! ;)');
  end
  else
    begin
      writeln;
      writeln('Die Zahl ',zuTesten,' ist keine Primzahl');
      if speichern = true then begin
        AssignFile(textDatei, pfadUndDateiName);
        Append(textDatei);
        WriteLn(textDatei,'Die Zahl ',zuTesten,' ist keine Primzahl');
        CloseFile(textDatei);
      end;
    end;
  end;
end;

function SichereIntEingabe(eingabeWert: String): Int64;

var
  Wert,Code : Int64;

begin
  Textcolor(white);
  writeln;
  Code := 1;
  While Code <> 0 do begin
    Writeln;
    Write('Welche ganze Zahl wollen Sie testen: ');
    Readln(eingabeWert);
    Val(eingabeWert,Wert,Code);
    if Code = 0 then begin
      zuTesten := Wert;
      exit(zuTesten)
    end
    else
    Writeln;
    Writeln('Die Eingabe muss eine ganze Zahl sein');
  end;
end;

function SichereIntEingabeCollatz(eingabeWert,abfrage: String): Int64;

var
  Wert,Code : Int64;

begin
  Textcolor(white);
  Code := 1;
  While Code <> 0 do begin
    Writeln;
    Write('',abfrage,'');
    Readln(eingabeWert);
    Val(eingabeWert,Wert,Code);
    if Code = 0 then begin
      varName := Wert;
      exit(varName);
    end
    else
    Writeln;
    Writeln('Die Eingabe muss eine ganze Zahl sein');
  end;
end;

function WerteVergleich(w_s: String): Boolean;

var
  j,k,l,n : Int64;
  s1 : String;

begin
  WerteVergleich := false;
  treff := false;
  s1 := '';
  k := 0;
  l := 0;
  for j := 1 to Length(w_s) do begin
    inc(k);
    s1 := s1 + w_s[j];
    if w_s[j] = ',' then begin
      inc(l);
      delete(s1,k,1);
      n := StrToInt(s1);
      if n = i1 then begin
        perLaenge := l;
        treff := true;
      end;
      s1 := '';
      k := 0;
    end;
  end;
end;

(*procedure WerteSchieben;

begin
  z1 := y1;
  y1 := x1;
  x1 := w1;
  w1 := v1;
  v1 := u1;
  u1 := t1;
  t1 := s1;
  s1 := r1;
  r1 := q1;
  q1 := p1;
  p1 := o1;
  o1 := n1;
  n1 := m1;
  m1 := l1;
  l1 := k1;
  k1 := j1;
  j1 := i1;
  i1 := h1;
  h1 := g1;
  g1 := f1;
  f1 := e1;
  e1 := d1;
  d1 := c1;
  c1 := b1;
  b1 := a1;
  a1 := x;
end;

procedure WerteVergleich;

begin
  if a1 > 0 then begin
    if b1 > 0 then begin
      if a1 = b1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if c1 > 0 then begin
      if a1 = c1 then begin
        treff := true;
      end;
    end;;
  end;
  if a1 > 0 then begin
    if d1 > 0 then begin
      if a1 = d1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if e1 > 0 then begin
      if a1 = e1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if f1 > 0 then begin
      if a1 = f1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if g1 > 0 then begin
      if a1 = g1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if h1 > 0 then begin
      if a1 = h1 then begin
        treff := true;
      end;
    end;;
  end;
  if a1 > 0 then begin
    if i1 > 0 then begin
      if a1 = i1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if j1 > 0 then begin
      if a1 = j1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if k1 > 0 then begin
      if a1 = k1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if l1 > 0 then begin
      if a1 = l1 then begin
        treff := true;
       end;
    end;
  end;
  if a1 > 0 then begin
    if m1 > 0 then begin
      if a1 = m1 then begin
        treff := true;
      end;
    end;;
  end;
  if a1 > 0 then begin
    if n1 > 0 then begin
      if a1 = n1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if o1 > 0 then begin
      if a1 = o1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if p1 > 0 then begin
      if a1 = p1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if q1 > 0 then begin
      if a1 = q1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if r1 > 0 then begin
      if a1 = r1 then begin
        treff := true;
      end;
    end;;
  end;
  if a1 > 0 then begin
    if s1 > 0 then begin
      if a1 = s1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if t1 > 0 then begin
      if a1 = t1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if u1 > 0 then begin
      if a1 = u1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if v1 > 0 then begin
      if a1 = v1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if w1 > 0 then begin
      if a1 = w1 then begin
        treff := true;
      end;
    end;;
  end;
  if a1 > 0 then begin
    if x1 > 0 then begin
      if a1 = x1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if y1 > 0 then begin
      if a1 = y1 then begin
        treff := true;
      end;
    end;
  end;
  if a1 > 0 then begin
    if z1 > 0 then begin
      if a1 = z1 then begin
        treff := true;
      end;
    end;
  end;
end;
*)


procedure CollatzAllgemein(n: int64);

var
  a,b,j,k,maxDurchlauf,perLaenge1 : Int64;
  jaNeinLokal,eingabeWert,abFrage,sprung,i_s : String;

begin
  WriteLn;
  WriteLn('Moechten Sie eine allgemeine Collatz-Folge der Form');
  WriteLn;
  Writeln('Ni+1 = Ni /2 wenn Ni gerade');
  WriteLn;
  WriteLn('Ni+1 = a * Ni +b wenn Ni ungerade');
  WriteLn;
  WriteLn('fuer die zu testende Zahl definieren?');
  WriteLn;
  Write('Fuer ja "j" eingeben:');
  ReadLn(jaNeinLokal);
  if jaNeinLokal = 'j' then begin
    repeat
      ClrScr;
      varName := 0;
      eingabeWert := '';
      abfrage := 'Wert a: ';
      SichereIntEingabeCollatz(eingabeWert,abfrage);
      a := varName;
      abfrage := 'Wert b: ';
      SichereIntEingabeCollatz(eingabeWert,abfrage);
      b := varName;
      abfrage := 'Maximale Aanzahl Folgenglieder zu berechnen(Konvergenz unklar): ';
      SichereIntEingabeCollatz(eingabeWert,abfrage);
      maxDurchlauf := varName;
      i1 := n;
      werteString := '';
      i_s := '';
      i_s := IntToStr(i1);
      werteString := werteString + i_s + ',';
      i_s := '';
      (*a1 := 0;
      b1 := 0;
      c1 := 0;
      d1 := 0;
      e1 := 0;
      f1 := 0;
      g1 := 0;
      h1 := 0;
      i1 := 0;
      j1 := 0;
      k1 := 0;
      l1 := 0;
      m1 := 0;
      n1 := 0;
      o1 := 0;
      p1 := 0;
      q1 := 0;
      r1 := 0;
      s1 := 0;
      t1 := 0;
      u1 := 0;
      v1 := 0;
      w1 := 0;
      x1 := 0;
      y1 := 0;
      z1 := 0;*)
      j := 1;
      k := 0;
        begin
          Textcolor(white);
          Writeln;
          write('Die ersten ',maxDurchlauf,' Collatz-Folgenglieder sind: ');
          if speichern = true then begin
            AssignFile(textDatei, pfadUndDateiName);
            Append(textDatei);
            write(textDatei,'Die ersten ',maxDurchlauf,' Collatz-Folgenglieder sind: ');
            CloseFile(textDatei);
          end;
          write('',n,',');
          if speichern = true then begin
            AssignFile(textDatei, pfadUndDateiName);
            Append(textDatei);
            write(textDatei,'',n,',');
            CloseFile(textDatei);
          end;
          while j < maxDurchlauf do
            begin
              (*treff := false;*)
              inc(j);
              if i1 mod 2 = 0 then i1 := i1 div 2
              else
              if i1 mod 2 <> 0 then i1 := (a * i1) +b;
              IstPrim(i1);
              if IstPrim(i1) = true then begin
                Textcolor(green);
                inc(k);
              end;
              (*x := i;
              WerteSchieben;
              WerteVergleich;*)
              WerteVergleich(werteString);
              i_s := IntToStr(i1);
              werteString := werteString + i_s + ',';
              i_s := '';
              quadratz(i1);
              Kubus(i1);
              if quad = true then TextColor(yellow) else
              if kub = true then TextColor(blue);
              if quad = true then begin
                if kub = true then begin
                  TextColor(red);
                end;
              end;
              write('',i1,'');
              if speichern = true then begin
                AssignFile(textDatei, pfadUndDateiName);
                Append(textDatei);
                write(textDatei, '',i1,'');
                CloseFile(textDatei);
              end;
              Textcolor(white);
              if treff = true then Write(' Treffer') else
              if j < maxDurchlauf then write(',');
              if speichern = true then begin
                AssignFile(textDatei, pfadUndDateiName);
                Append(textDatei);
                if treff = true then Write(textDatei, ' Treffer') else
                if j < maxDurchlauf then write(textDatei, ',');
                CloseFile(textDatei);
              end;
              if treff = true then break;
            end;
            perLaenge1 := j - perLaenge + 1;
            werteString := '';
          end;
  IstPrim(j);
  Istprim(k);
  writeln;
  writeln;
  write('Die allgemeine Collatz-Folge der Form Ni+1 = n/2 v Ni+1 = ',a,'*n+',b,' hat ');
   if speichern = true then begin
     AssignFile(textDatei, pfadUndDateiName);
     Append(textDatei);
     WriteLn(textDatei, '');
     write(textDatei,'Die allgemeine Collatz-Folge der Form Ni+1 = n/2 v Ni+1 = ',a,'*n+',b,' hat ');
     CloseFile(textDatei);
   end;
   quadratz(j-1);
   Kubus(j-1);
   if istprim(j) = true then Textcolor(green);
   if quad = true then TextColor(yellow) else
   if kub = true then TextColor(blue);
   if quad = true then begin
   if kub = true then begin
     TextColor(red);
     end;
   end;
   write(j-1);
   if speichern = true then begin
     AssignFile(textDatei, pfadUndDateiName);
     Append(textDatei);
     write(textDatei, j-1);
     CloseFile(textDatei);
   end;
   Textcolor(white);
   write(' Glieder, ');
   if speichern = true then begin
     AssignFile(textDatei, pfadUndDateiName);
     Append(textDatei);
     write(textDatei,' Glieder, ');
     CloseFile(textDatei);
   end;
   if istprim(k) = true then Textcolor(green);
   Write(k);
   if speichern = true then begin
     AssignFile(textDatei, pfadUndDateiName);
     Append(textDatei);
     write(textDatei, k);
     CloseFile(textDatei);
   end;
   Textcolor(white);
   Write(' davon sind Primzahlen');
   if speichern = true then begin
     AssignFile(textDatei, pfadUndDateiName);
     Append(textDatei);
     write(textDatei,' davon sind Primzahlen');
     WriteLn(textDatei, '');
     CloseFile(textDatei);
    end;
    WriteLn;
    WriteLn;
    Write('Die Periodenlaenge ist ',perLaenge1,'');
    if speichern = true then begin
      AssignFile(textDatei, pfadUndDateiName);
      Append(textDatei);
      write(textDatei,'Die Periodenlaenge ist ',perLaenge1,'');
      WriteLn(textDatei, '');
      CloseFile(textDatei);
   end;
   writeln;
   Writeln;
   Write('Moechten Sie eine weitere Folge berechnen? "n" fuer abbrechen:');
   ReadLn(sprung);
    until sprung = 'n';
    ClrScr;
   end;
end;


function Abbruch(eingabeAbbruch: string): boolean;

begin
  writeln;
  write('Abbruch mit "j":');
  readln(eingabeAbbruch);
  Writeln;
  if eingabeAbbruch = 'j' then begin
    uebergabeWertAbbruch := true;
    exit(uebergabeWertAbbruch);
  end;
end;

begin
  repeat
    eingabeString := '';
    quad := false;
    kub := false;
    SichereIntEingabe(eingabeString);
    DatenSpeichern;
    DateiErstellen;
    IstPrim(zuTesten);
    AusgabeIstPrim;
    PrimFaktoren(zuTesten);
    TeilerAnzahl(zuTesten);
    IstDreieckszahl(zuTesten);
    Collatz(zuTesten);
    CollatzAllgemein(zuTesten);
    Abbruch(eingabeString);
  until uebergabeWertAbbruch = true;
end.

