berechnungggt.pas

In diesem Pascal-Programm lasse ich so ziemlich alles berechnen, was ich zur Berechnung des größten gemeinsamen Teilers und des kleinsten gemeinsamen Vielfachen brauche und gleich in LaTeX-Code ausgeben.

 berechnungggt.pas 
program Berechnung_ggT; uses arithmetik; procedure teiler(n : integer); var i : integer; first : boolean; begin first:=true; write('\{'); for i:=1 to n do if (n mod i=0) then begin if (first) then write(' ',i) else write(',',i); first:=false; end; write(' \}'); end; { teiler } procedure teilerzwei(n, m : integer); var i : integer; first : boolean; min : integer; begin if (n < m) then min := n else min := m; first:=true; write('\{'); for i:=1 to min do if ((n mod i=0) and (m mod i=0)) then begin if (first) then write(' ',i) else write(',',i); first:=false; end; write(' \}'); end; { teilerzwei } procedure teilerdrei(n, m, p: integer); var i : integer; first : boolean; min : integer; begin if (n < m) then min := n else min := m; if (min < p) then min := min else min:=p; first:=true; write('\{'); for i:=1 to min do if ((n mod i=0) and (m mod i=0) and (p mod i = 0)) then begin if (first) then write(' ',i) else write(',',i); first:=false; end; write(' \}'); end; { teilerdrei } procedure primfaktorzerlegung(n : integer); var i : integer; first : boolean; begin if (n<=1) then writeln(n); if (n>2) then begin i:=2; first:=true; while (n>1) do begin if (n mod i=0) then begin n:=n div i; if first then write(i) else write(' \* ',i); first:=false; end else i:=i+1; end; end; end; { primfaktorzerlegung } procedure vielfach(n,m : integer); var i : integer; first : boolean; begin first:=true; write('\{'); for i:=1 to m do begin if (first) then write(' ',i*n) else write(',',i*n); first:=false; end; write(',\dots \}'); end; { vielfach } procedure rechne_ggt(a,b : integer); begin writeln('\begin{figure}[H]'); writeln('\centerline{'); writeln('\xymatrix@R=3pt{'); writeln('&&& \txt{Rechnung} \\'); while (a<>b) do begin write('\txt{$\ggT(',a,';',b,')$} &\txt{$=$} &'); if (a}[dll] &'); writeln('\txt{$',b,'-',a,'=',b-a,'$} \\'); b:=b-a; end else begin write('\txt{$\ggT(',a-b,';',b,')$}\ar@{->}[dll] &'); writeln('\txt{$',a,'-',b,'=',a-b,'$} \\'); a:=a-b; end; end; writeln('\txt{$\ggT(',a,';',b,')$} &\txt{$=$} & \txt{$',a,'$} \\'); writeln('}}'); writeln('\end{figure}'); end; { rechne_ggt } var x,y,z,t : integer; eingabe : char; i,k : integer; begin writeln; writeln('Berechnung des ggT und kgV auf verschiedene Arten'); writeln('-------------------------------------------------'); writeln('Eingabe für ggT = g, Teilermengen = t, Primfaktorzerlegung = p und kgV = k'); readln(eingabe); case (eingabe) of 'p', 'P' : begin writeln('Primfaktorzerlegung'); while (not eof) do begin readln(x); write('\item '); write(' $ ',x, ' = '); primfaktorzerlegung(x); writeln('$'); end; end; 'k', 'K' : begin writeln('kgv normal = 1'); writeln('kgv schnell = 2'); writeln('kgv prim = 3'); readln(i); case (i) of 1 : begin while (not eof) do begin readln(x); readln(y); if ( x <= 0) or (y <= 0) then writeln('dies ist keine ordentliche Eingabe') else begin write('\item '); write(' $V_{' ,x, '} = '); vielfach(x,(2*kgv(x,y) ) div x); writeln('$, \\ '); write(' $V_{' ,y, '} = '); vielfach(y,(2*kgv(x,y) ) div y); writeln('$, \\ '); write('$V = '); vielfach(kgv(x,y),3); writeln('$, \\ '); write('$\kgV( ' ,x, '; ', y, ') = ' ,kgv(x,y), '$'); writeln; end; end; end; 2 : begin while (not eof) do begin readln(x); readln(y); if ( x <= 0) or (y <= 0) then writeln('dies ist keine ordentliche Eingabe') else begin write('\item'); writeln('$\kgV(',x,';',y,') = ?$ \\'); z:=max(x,y); i:=z; writeln('Wähle ' ,z,'. \\'); while (i< kgv(x,y)) do begin writeln('Ist ',i,' Vielfaches von ' ,min(x,y),'? \quad nein \\'); i:=i+z; end; writeln('Ist ',kgv(x,y),' Vielfaches von ' ,min(x,y),'? \quad ja \\'); writeln('Also ist: \\'); writeln('$\kgV( ' ,x, '; ', y, ') = ' ,kgv(x,y), '$'); writeln; end; end; end; 3 : begin while (not eof) do begin readln(x); readln(y); if ( x <= 0) or (y <= 0) then writeln('dies ist keine ordentliche Eingabe') else begin write('\item '); write(' $ ',x, ' = '); primfaktorzerlegung(x); writeln('$, \\ '); write('$ ',y, ' = '); primfaktorzerlegung(y); writeln('$, \\ '); z:= kgv(x,y); write('$\kgV( ' ,x, '; ', y, ') = '); primfaktorzerlegung(z); write(' = ' ,kgv(x,y), '$'); writeln; writeln; end; end; end; end; { case } end; 't', 'T' : begin writeln('Teilermengen normal = 1'); writeln('Schnittmengen von zwei = 2'); writeln('Schnittmengen von drei = 3'); readln(i); writeln; case (i) of 1 : begin while (not eof) do begin readln(x); write('\item'); write(' $T_{' ,x, '} = '); teiler(x); write('$'); writeln; end; end; 2 : begin while (not eof) do begin readln(x); readln(y); write('\item'); write(' $T_{' ,x, '} = '); teiler(x); write('$ \\'); writeln; write(' $T_{' ,y, '} = '); teiler(y); write('$ \\'); writeln; write('$T_{' ,x, ' \cap ' ,y,'} = '); teilerzwei(x,y); writeln('$'); end; end; 3 : begin while (not eof) do begin readln(x); readln(y); readln(z); write('\item'); write(' $T_{' ,x, '} = '); teiler(x); write('$ \\'); writeln; write(' $T_{' ,y, '} = '); teiler(y); write('$ \\'); writeln; write(' $T_{' ,z, '} = '); teiler(z); write('$ \\'); writeln; write('$T_{' ,x, ' \cap ' ,y,' \cap ' ,z,'} = '); teilerdrei(x,y,z); writeln('$'); end; end; end; { case } end; else writeln('ggT normal = 1'); writeln('ggT schnell = 2'); writeln('ggT prim = 3'); writeln('ggT euklid = 4'); writeln('ggT für drei Zahlen (normal) = 5'); writeln('ggT für drei Zahlen (prim) = 6'); writeln('ggT teilerfremd = 7'); readln(i); writeln; case (i) of 1 : begin while (not eof) do begin readln(x); readln(y); if ( x <= 0) or (y <= 0) then writeln('dies ist keine ordentliche Eingabe') else begin write('\item '); write(' $T_{' ,x, '} = '); teiler(x); writeln('$, \\ '); write(' $T_{' ,y, '} = '); teiler(y); writeln('$, \\ '); write('$T_{' ,x, ' \cap ' ,y,'} = '); teilerzwei(x,y); writeln('$, \\ '); write('$\ggT( ' ,x, '; ', y, ') = ' ,ggt(x,y), '$'); writeln; end; end; end; 2 : begin while (not eof) do begin readln(x); readln(y); if ( x <= 0) or (y <= 0) then writeln('dies ist keine ordentliche Eingabe') else begin write('\item '); writeln('$\ggT(',x,';',y,') = ?$'); writeln('\begin{enumerate}[1)]'); write('\item '); write('$T_{' ,min(x,y), '} = '); teiler(min(x,y)); write('$'); writeln; write('\item '); k:=teilersuche(min(x,y),min(x,y)); while (max(x,y) mod k <> 0) do begin writeln('Ist ',k,' Teiler von ' ,max(x,y),'? \quad nein \\'); k:=teilersuche(min(x,y),k-1); end; writeln('Ist ',ggt(x,y),' Teiler von ' ,max(x,y),'? \quad ja'); writeln; write('Also ist: '); writeln('$\ggT( ' ,x, '; ', y, ') = ' ,ggt(x,y), '$'); writeln('\end{enumerate}'); end; end; end; 3 : begin while (not eof) do begin readln(x); readln(y); if ( x <= 0) or (y <= 0) then writeln('dies ist keine or dentliche Eingabe') else begin write('\item '); write('$ ',x, ' = '); primfaktorzerlegung(x); writeln('$, \\ '); write('$ ',y, ' = '); primfaktorzerlegung(y); writeln('$, \\ '); z:= ggT(x,y); write('$\ggT( ' ,x, '; ', y, ') = '); primfaktorzerlegung(z); write(' = ' ,ggt(x,y), '$'); writeln; end; end; end; 4 : begin while (not eof) do begin readln(x); readln(y); if ( x <= 0) or (y <= 0) then writeln('dies ist keine ordentliche Eingabe') else begin rechne_ggt(x,y); end; end; end; 5 : begin while (not eof) do begin readln(x); readln(y); readln(z); if ( x <= 0) or (y <= 0) or (z <= 0) then writeln('dies ist keine ordentliche Eingabe') else begin write('\item '); write(' $T_{' ,x, '} = '); teiler(x); write('$, \\ '); write(' $T_{' ,y, '} = '); teiler(y); writeln('$, \\ '); write(' $T_{' ,z, '} = '); teiler(z); writeln('$, \\ '); write('$T_{' ,x, ' \cap ' ,y,' \cap ' ,z,'} = '); teilerdrei(x,y,z); writeln('$, \\ '); write('$\ggT( ' ,x, '; ', y, '; ', z, ') = ' ,ggt(ggt(x,y), z), '$'); writeln; end; end; end; 6 : begin while (not eof) do begin readln(x); readln(y); readln(t); if ( x <= 0) or (y <= 0) or (t<= 0) then writeln('dies ist keine ordentliche Eingabe') else begin write('\item '); write(' $ ',x, ' = '); primfaktorzerlegung(x); writeln('$, \\ '); write('$ ',y, ' = '); primfaktorzerlegung(y); writeln('$, \\ '); write(' $ ',t, ' = '); primfaktorzerlegung(t); writeln('$, \\ '); z:= ggT(ggT(x,y),t); write('$\ggT( ' ,x, '; ', y, '; ' ,t,') = '); primfaktorzerlegung(z); write(' = ' ,ggT(ggt(x,y),t), '$'); writeln; writeln; end; end; end; 7 : begin readln(y); for x:=1 to y do begin if ( x <= 0) or (y <= 0) then writeln('dies ist keine ordentliche Eingabe') else if ggt(x,y) = 1 then begin write('\item '); write(' $T_{' ,x, '} = '); teiler(x); write('$, \\ '); write(' $T_{' ,y, '} = '); teiler(y); write('$, \\ '); write('$\ggT( ' ,x, '; ', y, ') = ' ,ggt(x,y), '$'); writeln; writeln; end; end; end; end; { case } end; { case } end.

Letzte Änderung: 26.04.2012: 17:23:44 von X. Rendtel

Creative Commons Lizenzvertrag
Dieses Werk bzw. Inhalt steht unter einer Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.
Beruht auf einem Inhalt unter www.rendtel.de.