program merge (input, output); { liest ohne Eingabeueberpruefung zwei sortierte Felder mit integer-Zahlen ein; beide Felder werden in Feld sortiert zusammengefuegt; das Ergebnis wird ausgegeben; ist die Eingabe unsortiert, so ist das Ergebnisfeld nicht sortiert } const GRENZE1 = 5; GRENZE2 = 8; GRENZE = 13; { GRENZE1 + GRENZE2 } GRENZE1PLUS1 = 6; GRENZE2PLUS1 = 9; GRENZEPLUS1 = 14; type tIndex1 = 1..GRENZE1; tIndex2 = 1..GRENZE2; tIndex = 1..GRENZE; tIndex1Plus1 = 1..GRENZE1PLUS1; tIndex2Plus1 = 1..GRENZE2PLUS1; tIndexPlus1 = 1..GRENZEPLUS1; tFeld1 = array [tIndex1] of integer; tFeld2 = array [tIndex2] of integer; tFeld = array [tIndex] of integer; var Feld1 : tFeld1; Feld2 : tFeld2; Feld : tFeld; i : tIndex1Plus1; j : tIndex2Plus1; k : tIndexPlus1; begin { sortierte Felder einlesen } writeln ('Bitte', GRENZE1:2, ' Werte des ersten Feldes ', 'sortiert eingeben!'); for i := 1 to GRENZE1 do readln (Feld1[i]); writeln ('Bitte', GRENZE2:2, ' Werte des zweiten Feldes ', 'sortiert eingeben!'); for j := 1 to GRENZE2 do readln (Feld2[j]);
i:=1; j:=1; for k:=1 to GRENZE do {tue solange in beiden Feldern Zahlen} if ((i<=GRENZE1) and (j<=GRENZE2)) then begin if Feld1[i]<=Feld2[j] then begin Feld[k]:= Feld1[i]; i:=i+1; end else begin Feld[k]:= Feld2[j]; j:=j+1; end; end else if (i<=GRENZE1) then begin Feld[k]:=Feld1[i]; i:=i+1; end else begin Feld[k]:=Feld2[j]; j:=j+1; end;
writeln ('Das Ergebnisfeld ist:'); for k := 1 to GRENZE do write (Feld[k]:8); writeln end. { merge }
program merge2 (input, output); { liest ohne Eingabeueberpruefung zwei sortierte Felder mit integer-Zahlen ein; beide Felder werden in Feld sortiert zusammengefuegt; das Ergebnis wird ausgegeben; ist die Eingabe unsortiert, so ist das Ergebnisfeld nicht sortiert } const GRENZE1 = 5; GRENZE2 = 8; GRENZE = 13; { GRENZE1 + GRENZE2 } GRENZE1PLUS1 = 6; GRENZE2PLUS1 = 9; GRENZEPLUS1 = 14; type tIndex1 = 1..GRENZE1; tIndex2 = 1..GRENZE2; tIndex = 1..GRENZE; tIndex1Plus1 = 1..GRENZE1PLUS1; tIndex2Plus1 = 1..GRENZE2PLUS1; tIndexPlus1 = 1..GRENZEPLUS1; tFeld1 = array [tIndex1] of integer; tFeld2 = array [tIndex2] of integer; tFeld = array [tIndex] of integer; var Feld1 : tFeld1; Feld2 : tFeld2; Feld : tFeld; i : tIndex1Plus1; j : tIndex2Plus1; k : tIndexPlus1;
begin { sortierte Felder einlesen } writeln ('Bitte', GRENZE1:2, ' Werte des ersten Feldes ', 'sortiert eingeben!'); for i := 1 to GRENZE1 do readln (Feld1[i]); writeln ('Bitte', GRENZE2:2, ' Werte des zweiten Feldes ', 'sortiert eingeben!'); for j := 1 to GRENZE2 do readln (Feld2[j]);
i:=1; j:=1;
for k:=1 to GRENZE do {tue solange in beiden Feldern Zahlen} begin if i>GRENZE1 then begin Feld[k]:=Feld2[j]; j:=j+1; end else if j>GRENZE2 then begin Feld[k]:=Feld1[i]; i:=i+1; end else if Feld1[i]<=Feld2[j] then begin Feld[k]:= Feld1[i]; i:=i+1; end else begin Feld[k]:= Feld2[j]; j:=j+1; end; end;
writeln ('Das Ergebnisfeld ist:'); for k := 1 to GRENZE do write (Feld[k]:8); writeln end. { merge }
program merge2 (input, output); { liest ohne Eingabeueberpruefung zwei sortierte Felder mit integer-Zahlen ein; beide Felder werden in Feld sortiert zusammengefuegt; das Ergebnis wird ausgegeben; ist die Eingabe unsortiert, so ist das Ergebnisfeld nicht sortiert } const GRENZE1 = 5; GRENZE2 = 8; GRENZE = 13; { GRENZE1 + GRENZE2 } GRENZE1PLUS1 = 6; GRENZE2PLUS1 = 9; GRENZEPLUS1 = 14; type tIndex1 = 1..GRENZE1; tIndex2 = 1..GRENZE2; tIndex = 1..GRENZE; tIndex1Plus1 = 1..GRENZE1PLUS1; tIndex2Plus1 = 1..GRENZE2PLUS1; tIndexPlus1 = 1..GRENZEPLUS1; tFeld1 = array [tIndex1] of integer; tFeld2 = array [tIndex2] of integer; tFeld = array [tIndex] of integer; var Feld1 : tFeld1; Feld2 : tFeld2; Feld : tFeld; i : tIndex1Plus1; j : tIndex2Plus1; k : tIndexPlus1;
begin { sortierte Felder einlesen } writeln ('Bitte', GRENZE1:2, ' Werte des ersten Feldes ', 'sortiert eingeben!'); for i := 1 to GRENZE1 do readln (Feld1[i]); writeln ('Bitte', GRENZE2:2, ' Werte des zweiten Feldes ', 'sortiert eingeben!'); for j := 1 to GRENZE2 do readln (Feld2[j]);
i:=1; j:=1; k:=1;
while (i<=GRENZE1) and (j<=GRENZE2) do {beide Feldwerte werden verglichen} begin if Feld1[i]<=Feld2[j] then begin Feld[k]:= Feld1[i]; i:=i+1; end else begin Feld[k]:= Feld2[j]; j:=j+1; end; k:=k+1; end;
while (i<=GRENZE1) do {Feld1 enthält noch Werte} begin Feld[k]:=Feld1[i]; i:=i+1; k:=k+1; end;
while (j<=GRENZE2) do {Feld2 enthält noch Werte} begin Feld[k]:=Feld2[j]; j:=j+1; k:=k+1; end;
writeln ('Das Ergebnisfeld ist:'); for k := 1 to GRENZE do write (Feld[k]:8); writeln end. { merge }
program MatrixSummen (input, output); { ueberprueft bei einer Matrix von integer-Zahlen, ob jede Spaltensumme groesser ist als die Zeilensumme einer angegebenen Zeile } const ZEILENMAX = 3; SPALTENMAX = 4; type tZeile = 1..ZEILENMAX; tSpalte = 1..SPALTENMAX; tMatrix = array [tZeile, tSpalte] of integer; var Matrix : tMatrix; Zeile : tZeile; Spalte : tSpalte; Eingabe : integer;
function ZeilenSummeKleiner(Matrix: tMatrix; zeile: integer) : boolean; var ZeileLokal: integer; fertig, ZeilenSpaltensummeGroesserGleich: boolean; Spalte: tSpalte; ZeilenSumme, SpaltenSumme: integer;
begin ZeilenSumme:=0; for Spalte:= 1 to SPALTENMAX do ZeilenSumme:=ZeilenSumme+ Matrix[zeile, Spalte]; Spalte:=1; repeat SpaltenSumme:=0; for ZeileLokal:=1 to ZEILENMAX do SpaltenSumme:= SpaltenSumme + Matrix[ZeileLokal, Spalte]; if SpaltenSumme<= ZeilenSumme then ZeilenSpaltensummeGroesserGleich:= true else if Spalte< SPALTENMAX then Spalte:= Spalte+1 else fertig:= true; until fertig or ZeilenSpaltensummeGroesserGleich; ZeilenSummeKleiner := not ZeilenSpaltensummeGroesserGleich;
end;
begin { Matrixelemente einlesen } for Zeile := 1 to ZEILENMAX do for Spalte := 1 to SPALTENMAX do readln (Matrix[Zeile, Spalte]); repeat write ('Welche Zeile soll überprüft werden ? (1..', ZEILENMAX:1, ') (anderes = Ende) '); readln (Eingabe); if (Eingabe > 0) and (Eingabe <= ZEILENMAX) then begin Zeile := Eingabe; if ZeilenSummeKleiner (Matrix, Eingabe) then writeln ('Jede Spaltensumme ist größer als die ', 'Zeilensumme der ',Zeile:1,'. Zeile.') else writeln ('Es sind nicht alle Spaltensummen größer als ',
'die Zeilensumme der ',Zeile:1,'. Zeile.') end; until (Eingabe <= 0) or (Eingabe > ZEILENMAX) end. { MatrixSummen }
program gauss; {Summiert alle Zahlen von 1 bis n} uses crt; var n, i, summe, fak : integer;
BEGIN readln(n); summe:=0; for i:=1 to n do begin summe := summe+i; end; writeln('Summe 1 bis n: ', summe); fak:=1; for i:= 1 to n do fak:= fak*i; writeln('Produkt 1 bis n: ', fak); END.
program untitled;
const ZEILEN = 3; SPALTEN = 3; type tMatrix = array[ 1..ZEILEN , 1..SPALTEN] of integer; var i, j : integer; Matrix : tMatrix;
BEGIN for i:= 1 to ZEILEN do for j:=1 to SPALTEN do readln(Matrix[i,j]); for i:= 1 to ZEILEN do begin for j:=1 to SPALTEN do write(Matrix[i,j],' '); writeln(); end; END.
program palindrom;
uses crt; var wort : string; gedreht: string; function wortdrehen(original: string) : string; {dreht das Wort original um} var umgedreht: string; laenge: integer; i: integer; begin laenge:=length(original); umgedreht:=''; for i:=laenge downto 1 do umgedreht:= umgedreht + original[i]; original:= umgedreht; wortdrehen:= umgedreht; end;
BEGIN readln(wort); gedreht:= wortdrehen(wort); if wort=gedreht then writeln('Palindrom') else writeln('kein Palindrom') ; writeln(wort); END.
program person;
uses crt;
type tPerson = record Name, Vorname: string; Alter : integer; end {tPerson für Personen};
var Kunde : tPerson;
BEGIN readln(Kunde.Name); readln(Kunde.Vorname); readln(Kunde.Alter); END.
program collatz (input,output);
uses crt; var n, zaehler : integer;
BEGIN readln(n); zaehler:=0; while n<>1 do begin if (n mod 2) =0 then {n ist gerade} n := n div 2 else {n ist ungerade} n := n * 3 +1; zaehler:= zaehler+1; write(n,' '); end; writeln(); writeln('Durchläufe: ', zaehler); END.