Lazarus/Geschachtelte Verzweigungen und Verzweigungen in Schleifen

Aus ZUM-Unterrichten
< Lazarus
Version vom 10. August 2019, 06:31 Uhr von Matthias Scharwies (Diskussion | Beiträge) (formatiert)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Wir haben jetzt die "Zutaten" für viele Programme zusammen.

  • Einerseits Befehle zum Rechnen, Zeichnen usw.
  • Andererseits Anweisungen, die dafür sorgen, dass Befehle oder Gruppen von Befehlen nur unter bestimmten Bedingungen oder auch mehrfach ausgeführt werden (Verzweigungen und Schleifen). Man spricht in diesem Zusammenhang auch allgemein von "Kontrollstrukturen".

Solche Kontrollstrukturen kann man nun kombinieren: Zwischen "Begin" und "End" einer Kontrollstruktur kann durchaus wieder eine weitere Kontrollstruktur stehen.

Das folgende Programm funktioniert, wenn es auf der Oberfläche die Komponenten Edit1, Button1 und Label1 gibt.

unit schaltjahr_main; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1;
  jahr : integer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  jahr:=StrToInt(Edit1.Text);
  if (jahr mod 400 = 0)
  then label1.Caption:='Schaltjahr'
  else begin
       if (jahr mod 100 =0)
       then label1.Caption:='Kein Schaltjahr'
       else begin
            if (jahr mod 4 = 0)
            then label1.Caption:='Schaltjahr'
            else label1.Caption:='Kein Schaltjahr';
            end;
       end;

end;

end.



Aufgabe
  1. Alltag: Schaltjahre
    Entwickle ein Programm, das alle Schaltjahre zwischen 1880 und 1920 ausgibt.
  2. Punktraster auf Rechteckfläche
    Schreibe ein Programm, das ein Raster von Punkten zeichnet, bei dem zwei horizontal bzw. vertikal benachbarte Punkte jeweils 10 Pixel voneinander entfernt sind.
  3. Punktraster auf Dreiecks-Fläche
    Ändere das Programm der vorhergehenden Aufgabe so ab, dass die Rasterpunkte nur innerhalb eines rechtwinkligen Dreiecks gezeichnet werden, wobei die Ecke mit dem rechten Winkel in der linken oberen Ecke der Image-Komponente liegt, die beiden anderen Ecken unten links und oben rechts.
  4. Mathematik: Mathe macht Muster
    Verwende eine Image-Komponente und färbe jedes Pixel blau ein, bei dem sich der x-Wert durch den y-Wert (restfrei) teilen lässt. Kann man die x-Werte erkennen, die Primzahlen entsprechen?
  5. Mathematik: Primzahlen
    Schreibe zunächst ein Programm, das für eine eingegebene Zahl bestimmt, ob es sich dabei um eine Primzahl handelt oder nicht.
  6. Mathematik: Primzahlen
    Erweitere danach das Programm so, dass alle Primzahlen zwischen 0 und 100 ausgegeben werden.
  7. Mathematik: Pythagoräische Tripel
    Als Pythagoräische Tripel bezeichnet man die Kombination von drei natürlichen Zahlen a, b und c, für die der Zusammenhang gilt. Finden Sie mit einem Programm alle möglichen pythagoräischen Tripel mit c<=1000.
  8. Mathematik: Schießen auf "Pi"
    Entwickle ein Programm, dass 1000 mal jeweils zwei Zufallszahlen zwischen 0 und 100 erzeugt. Zeichne auf einer Image-Komponente diejenigen Punkte, die einen Abstand vom Ursprung von weniger als 100 haben rot, die anderen blau ein. Kannst Du durch Zählen der roten Pixel einen Näherungswert für die Kreiszahl "Pi" bestimmen?