Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi programmiertechnisch besser? (https://www.delphipraxis.net/18863-programmiertechnisch-besser.html)

dR4g0N 25. Mär 2004 14:11


programmiertechnisch besser?
 
Also habe wieder ein ganz effes Konsolenprogramm geschrieben und wollt fragen ob man vom Code was vereinfachen kann?
Also man rechnet die Differenz von 2 zeiten aus.

Delphi-Quellcode:
program Zeitzeugsmitdensekundennochdazu;
{$APPTYPE CONSOLE}
uses
  sysutils;

Var Std1, Std2, Sek1, Sek2, Min1, Min2, Wert1, Wert2, Wert3, Wert4, ZEg, ZEg2, Egmin, Egstd, Egsek : Real;
begin
repeat
  writeln ('Bitte geben sie die Stunden der ersten Zeit ein!');
  readln (Std1);
until std1 < 25;
repeat
  writeln ('Bitte geben sie die Minuten der ersten Zeit ein!');
  readln (Min1);
until Min1 < 60;
repeat
  writeln ('Bitte geben sie die Sekunden der ersten Zeit ein!');
  readln (Sek1);
until Sek1 < 60;
repeat
  writeln ('Bitte geben sie die Stunden der zweiten Zeit ein!');
  readln (Std2);
until Std2 < 25;
repeat
  writeln ('Bitte geben sie die Minuten der zweiten Zeit ein!');
  readln (Min2);
until Min2 < 60;
repeat
  writeln ('Bitte geben sie die Sekunden der zweiten Zeit ein!');
  readln (Sek2);
until Sek2 < 60;
  if Std1 > Std2 then
  begin
  Wert1 := Std1 + (Min1/60);
  Wert2 := Std2 + (Min2/60);
  Wert3 := ((Min1*100)/60) + (Sek1/60);
  Wert4 := ((Min2*100)/60) + (Sek2/60);
  ZEg := Wert1 - Wert2;
  ZEg2 := Wert3 - Wert4;
  Egstd :=int(ZEg);
  Egmin :=(ZEg-int(ZEg))*60;
  Egsek :=(ZEg2 - int(Zeg2)) * 60;
  write ('Die Differrenz betraegt ', Egstd:0:1, ' Stunde(n) und ', Egmin:0:1, ' Minute(n) und ', Egsek:0:1, ' Sekunde(n).');
  end;
  if Std1 < Std2 then
  begin
  Wert1 := Std1 + (Min1/60);
  Wert2 := Std2 + (Min2/60);
  if sek1 < sek2 Then
  begin
  Wert3 := ((Min1*100)/60) + (Sek1/60);
  Wert4 := ((Min2*100)/60) + (Sek2/60);
  ZEg2 := Wert4 - Wert3;
  end;
  ZEg := Wert2 - Wert1;
  Egstd :=int(ZEg);
  Egmin :=(ZEg-int(ZEg))*60;
  Egsek :=(ZEg2 - int(Zeg2)) * 60;
  write ('Die Differrenz betraegt ', Egstd:0:1, ' Stunde(n) und ', Egmin:0:1, ' Minute(n) und ', Egsek:0:1, ' Sekunde(n).');
  end;
readln;
end.

Evian 30. Mär 2004 14:51

Re: programmiertechnisch besser?
 
Ich verstehe nicht ganz, was dein Programm für eine Aufgabe haben soll...
kannst Du vielleicht mal erklären, was der Zweck ist, vielleicht lässt sich
so erkännen, ob man was verbessern kann.

Evian 30. Mär 2004 17:08

Re: programmiertechnisch besser?
 
Naja Du hast Dich zwar nicht mehr gemeldet, aber ich geh mal davon aus,
dass Du einfach nur die Differenz zwischen zwei Zeiten ausgeben willst.
Also etwas verkürzt könnte Dein Code so aussehen:

Code:
program Zeitzeugsmitdensekundennochdazu;
{$APPTYPE CONSOLE} 
uses
sysutils;

Var
Std, Sek, Min : BYTE;
Wert1, Wert2, Diverenz : INTEGER;

Procedure Eingabe(time, part : STRING; max : byte; VAR wert : BYTE);
BEGIN
   REPEAT
   WRITELN('Bitte gegen Sie die ', time ,' der ' , part , ' Zeit ein!');
   READLN(wert);
   UNTIL wert < max;
END;

begin
   Eingabe('Stunden', 'ersten', 25, Std);
   Eingabe('Minuten', 'ersten', 60, Min);
   Eingabe('Sekunden', 'ersten', 60, Sek);
   wert1 := (std * 60 * 60) + (Min * 60) + Sek;
   
   Eingabe('Stunden', 'zweiten', 25, Std);
   Eingabe('Minuten', 'zweiten', 60, Min);
   Eingabe('Sekunden', 'zweiten', 60, Sek);
   wert2 := (std * 60 * 60) + (Min * 60) + Sek;
   
   IF wert1 >= wert2 THEN
   Diverenz := wert1 - wert2 ELSE Diverenz := wert2 - wert1;
   
   std := (Diverenz DIV 60) DIV 60;
   min := (Diverenz - (std * 60 * 60)) DIV 60;
   sek := Diverenz - ((std * 60 * 60) + (min * 60));
   
   write ('Die Differrenz betraegt ', Std, ' Stunde(n) und ', min, ' Minute(n) und ', sek, ' Sekunde(n).');
   
   readln;
end.
Nur weiß ich nicht genau welchen Compiler Du nutzt und welche Datentypen er unterstützt. Du brauchst einen Typ der den wert 93660 speichern kann, denn das ist die Maximale Sekunden Anzahl die eine Deiner Zeiten annehmen kann. Also ab Delphi 2 dürfte es keine Probleme mehr geben, aber falls Du mit Turbo Pascal(wo Integer -32768 bis +32767 speichern kann) compilierts, solltest Du doch REAL nehmen, dann müssen aber alle Deine Variablen REAL sein und Du musst das DIV durch "/" ersetzen.

Alles klar?! *g*

dR4g0N 31. Mär 2004 23:29

Re: programmiertechnisch besser?
 
jo sry hatte nen paar probs mit dem rechner ^^ ähmm wegem dem compiler sollte es kein prob darstellen ... big thx für deine filfe :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz