If-else und repeat-until

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Kaesekruemel
Beiträge: 1
Registriert: Do 2. Jun 2016, 19:50

If-else und repeat-until

Beitrag von Kaesekruemel »

Hallo. Das hier ist mein erster Beitrag also weiß ich nicht ob ich irgendwas falsch mache oder so.
Ich habe für den EDV-Unterricht eine Aufgabe bekommen, nach der ich ein Programm schreiben soll, in welches mit einem Edit-Feld eine Jahreszahl eingeben kann und das Programm nun bescheiben soll ob es ein Schaltjahr ist. Dies habe ich mit Hilfe von if/then/else gelöst.

Der zweite Aufgabenteil besagt nun Folgendes:

b) Ergänze einen Button „nächstes Schaltjahr“ ergänzen: Ausgabe soll das jeweils nächste Schaltjahr sein.
Beispiele: Eingabe: 1995 Ausgabe: 1996 Eingabe: 1897 Ausgabe: 1904 Eingabe: 2012 Ausgabe: 2016

Der Button ist schnell erstellt, aber ich weiß nicht wie ich das in Lazarus eingeben soll. kann mir da einer helfen?

Falls das hilft, hier mein bisheriger Code:

Code: Alles auswählen

procedure TForm1.BuBerechnenClick(Sender: TObject);
begin
  try
  Jahreszahl:=strtoint(EdEingabe.text);
      if
          (jahreszahl mod 4=0)
      then
           LaAusgabe.caption:='ja, das Jahr '+inttostr(Jahreszahl)+' ist ein Schaltjahr.'
      else
           LaAusgabe.caption:='Nein, das Jahr '+inttostr(jahreszahl)+' ist KEIN Schaltjahr.'  ;
  if
    (jahreszahl mod 4=0)
  and
    (jahreszahl mod 100 =0)
  then
 
                  if
                      (Jahreszahl mod 400=0)
                    then
                       LaAusgabe.caption:='ja, das Jahr '+inttostr(Jahreszahl)+' ist ein Schaltjahr.'
                    else
                       LaAusgabe.caption:='Nein, das Jahr '+inttostr(jahreszahl)+' ist KEIN Schaltjahr.'
  except
   LaAusgabe.caption:='BITTE NUR GANZE JAHRESZAHLEN!'
  end;
 
end;
Zuletzt geändert von Lori am Sa 4. Jun 2016, 15:08, insgesamt 1-mal geändert.
Grund: Highlighter

Mathias
Beiträge: 6914
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: If-else und repeat-until

Beitrag von Mathias »

Ein bisschen leserlicher. :wink:

Code: Alles auswählen

procedure TForm1.BuBerechnenClick(Sender: TObject);
begin
  try
    Jahreszahl := StrToInt(EdEingabe.Text);
    if
    (jahreszahl mod 4 = 0)
    then begin
      LaAusgabe.Caption := 'ja, das Jahr ' + IntToStr(Jahreszahl) + ' ist ein Schaltjahr.';
    end else begin
      LaAusgabe.Caption := 'Nein, das Jahr ' + IntToStr(jahreszahl) + ' ist KEIN Schaltjahr.';
    end;
    if
    (jahreszahl mod 4 = 0)
      and
      (jahreszahl mod 100 = 0)
    then
    begin
      if
      (Jahreszahl mod 400 = 0)
      then begin
        LaAusgabe.Caption := 'ja, das Jahr ' + IntToStr(Jahreszahl) + ' ist ein Schaltjahr.';
      end else begin
        LaAusgabe.Caption := 'Nein, das Jahr ' + IntToStr(jahreszahl) + ' ist KEIN Schaltjahr.';
      end;
    end
  except
    LaAusgabe.Caption := 'BITTE NUR GANZE JAHRESZAHLEN!'
  end;
 
end;  
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 5142
Registriert: Fr 8. Apr 2011, 09:01

Re: If-else und repeat-until

Beitrag von wp_xyz »

Um von einem Jahr zum nächsten Schaltjahr zu kommen, könntest du doch in einer Schleife immer 1 Jahr addieren. In der Schleife prüfst du, ob das neue Jahr ein Schaltjahr ist. Wenn ja, ist die Schleife zu Ende, wenn nein, läuft sie weiter. Dazu solltest du aus deinem gezeigten Code eine Funktion extrahieren, die prüft, ob ein Jahr ein Schaltjahr ist, etwa

Code: Alles auswählen

functon IstSchaltjahr(Jahr: Integer): Boolean;
begin
  if Jahr mod 4 = 0 then
    Result := true;
  // usw. -- ich will ja nicht alles verraten...
end;
Als Gegenkontrolle kannst du auch die Funktion IsLeapYear aus der Unit DateUtils aufrufen.

Antworten