Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Schulprojekt: Thema: Berechnungen am Rechteck (https://www.delphipraxis.net/147795-schulprojekt-thema-berechnungen-am-rechteck.html)

Dennis S. 16. Feb 2010 15:15


Schulprojekt: Thema: Berechnungen am Rechteck
 
Hallo Leute,
ich habe das Programieren ganz neu in der Schule gelernt.
Wir sollen nun ein Programm schreiben, mit dem man die Fläche, den Umfang und die Diagonale eines Rechtecks berechnen kann, wenn man die Seiten a und b hat. Aufgabe 2 war, das Programm so zuerweitern, das wenn man Seite a oder b + die Fläche eingibt, dass das Programm dann die fehlende Seite ausspuckt.
Hier mein Quelltext:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    LaengeEdit: TEdit;
    BreiteEdit: TEdit;
    FlaecheEdit: TEdit;
    DiagonaleEdit: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    UmfangEdit: TEdit;
    RechnenButton: TButton;
    AbbruchButton: TButton;
    Label11: TLabel;
    procedure AbbruchButtonClick(Sender: TObject);
    procedure RechnenButtonClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AbbruchButtonClick(Sender: TObject);
begin
 Close;
end;

procedure TForm1.RechnenButtonClick(Sender: TObject);
begin
 IF (LaengeEdit.Text <> '') and (BreiteEdit.Text <> '')
 THEN
  begin
   FlaecheEdit.Text := IntToStr(StrToInt(LaengeEdit.Text)*StrToInt(BreiteEdit.Text));
   UmfangEdit.Text := IntToStr(StrToInt(LaengeEdit.Text)*2+StrToInt(BreiteEdit.Text)*2);
   DiagonaleEdit.Text := FloatToStr(sqrt(StrToInt(LaengeEdit.Text)*StrToInt(LaengeEdit.Text)+StrToInt(BreiteEdit.Text)*StrToInt(BreiteEdit.Text)));
   Label11.Caption := '';
  end
 ELSE
  begin
   IF (LaengeEdit.Text <> '') or ((BreiteEdit.Text<> '') and (FlaecheEdit.Text <> ''))
   THEN
    begin
     LaengeEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text));
     BreiteEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text));
    end
    ELSE Label11.Caption := 'Fehlende Eingabe'
  end
end;

end.
So. Folgendes Problem hat sich nun ergeben: Delphi gibt mir an den letzten 2 Befehlen
Delphi-Quellcode:
    begin
     LaengeEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text));
     BreiteEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text));
    end
die Meldung:
'[Fehler] Unit1.pas(65): Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann'
Mein Informatiklehrer hat auch keinen Plan wie das funktionieren könnte. Wäre echt cool wenn mir jemand sagen könnte was ich da falsch mache.
Danke im Vorraus.
MfG Dennis

Reinhardtinho 16. Feb 2010 15:22

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Bei der Berechnung kann eine Zahl rauskommen, die keine Ganzzahl ist (zB: 5/3). IntToStr wandelt aber nur Ganzzahlen in eine Zeichenkette.

patti 16. Feb 2010 15:25

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Wenn du stattdessen FloatToStr oder Format nimmst, lässt sich dieses Problem jedoch ganz einfach umgehen.

mfg

markus5766h 16. Feb 2010 15:25

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Hallo

FloatToStr
oder
FloatToStrF

sind hier Deine Freunde.

Dennis S. 16. Feb 2010 15:27

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Danke
kannst ihr mir den genauen Befehl für dafür sagen? Soweit sind wir noch nicht gekommen und im Netz steht soviel Zeugs das ich eweig suchen würde.
Wir hatten bisher nur FloatToStr aber der geht ja nicht.
Und bei FloatToStrF kommt wieder
' [Fehler] Unit1.pas(65): Es gibt keine überladene Version von 'FloatToStrF', die man mit diesen Argumenten aufrufen kann '

patti 16. Feb 2010 15:30

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Zitat:

Zitat von Dennis S.
Wir hatten bisher nur FloatToStr aber der geht ja nicht.

Meinst du IntToStr? Denn FloatToStr sollte in deinem Fall eigentlich sehr gut funktionieren... Einfach oben das IntToStr durch FloatToStr ersetzen und ausprobieren.

Tyrael Y. 16. Feb 2010 15:32

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Delphi-Quellcode:
  LaengeEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text));
  BreiteEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text));
...auch an der richtigen Stelle benutzt?

Dennis S. 16. Feb 2010 15:36

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
@ Tyreal: Ja genau da stehts :wink: ich sitze hier schon ne ganzeweile und versuche alles mirbekannte durch. Das ist sicher nicht der Fehler.
@ Patti:
Das habe ich schon probiert, aber wenn ich dann das Programm im Testlauf starte und auf den RechnenButton drücke gibt es eine Fehlermeldung:
' Im Projekt Project1.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: ''' ist kein gültiger Integerwert'. Prozess wurde angehalten. '

patti 16. Feb 2010 15:40

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Dann stimmt wohl eine Eingabe in den EditFeldern nicht. Wenn da z.B. Buchstaben drinstehen, dann liefert FloatToStr (wie auch IntToStr) einen Fehler. Du musst vorher überprüfen, ob eine gültige Eingabe in allen Feldern vorhanden ist. Deiner Beschreibung nach ist wohl mindestens eines der Felder leer, wenn du auf den Button klickst.

Dennis S. 16. Feb 2010 15:42

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
also es sind insgesammt 5 Felder. Wovon 3 angesprochen wurden. Eins ist leer, endweder ist es BreiteEdit oder LaengeEdit. FlaecheEdit muss ja was drinstehen
Delphi-Quellcode:
IF (LaengeEdit.Text <> '') or ((BreiteEdit.Text<> '') and (FlaecheEdit.Text <> ''))

hoika 16. Feb 2010 15:43

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Hallo,

Delphi-Quellcode:
IF (LaengeEdit.Text <> '') or ((BreiteEdit.Text<> '') and (FlaecheEdit.Text <> '')) THEN
begin
  LaengeEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text));
Das nehmen wir mal auseinander

Delphi-Quellcode:
IF (LaengeEdit.Text <> '') then
begin
  LaengeEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text));
[/delphi]

Der FlaecheEdit oder Breitedit können hier leer sein
dann kommt bei StrToInt('') die besagte Exception


OR

Delphi-Quellcode:
IF ((BreiteEdit.Text<> '') and (FlaecheEdit.Text <> '')) THEN
begin
  LaengeEdit.Text := IntToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text));
[/delphi]


Also stimmt dein if nicht immer


Heiko

Dennis S. 16. Feb 2010 15:45

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
hää?? Bei Fläche muss ja was stehen sonst funktioniert das alles ja nicht aber seite a oder b ist ja immer ins leer.

implementation 16. Feb 2010 17:22

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Eben. Deshalb musst du das or ja auch durch ein and ersetzen. Es muss ja alles zutreffen.
[ADD]
Außerdem solltest du das erste <> durch = ersetzen.

Dennis S. 16. Feb 2010 17:29

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
also wenn ich das 'or' durch ein 'and' ersetze, dann würde es funktionieren, aber dann kann ich die Fehlende Seite, welches genau mein Ziel ist, ja nicht mehr berechnen und der gesamte Befehl wäre überflüssig, da er ja mit dem 1. IF gedeckt ist.
Sobalt ich aber 'or' verwende schmeißt er mir diesen blöden Error rein.

Dennis S. 16. Feb 2010 17:38

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
@implementation:
ja aber dann müsste feld 1 immer leer sein.
wie müsste das sein wenns auch feld 2 sein kann?

implementation 16. Feb 2010 17:48

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Wenn das zweite Feld leer ist, soll das ja ausgerechnet werden, oder verstehe ich das falsch?

Dennis S. 16. Feb 2010 17:51

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
genau
Delphi-Quellcode:
IF (LaengeEdit.Text <> '') or ((BreiteEdit.Text<> '') and (FlaecheEdit.Text <> ''))
   THEN
    begin
     LaengeEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text));
     BreiteEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text));
    end
ist LaengeEdit leer soll dieses ausgerechnent werden. Ist BreiteEdit frei dann das.

implementation 16. Feb 2010 18:09

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Delphi-Quellcode:
IF (LaengeEdit.Text { --> } = { <-- } '') { --> } and { <-- } (BreiteEdit.Text<> '') and (FlaecheEdit.Text <> '')
   THEN
    begin
     LaengeEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text));
     BreiteEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text));
    end

Dennis S. 16. Feb 2010 18:14

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
es ist zum weinen :wall: Ich wenn ich BreiteEdit und FlaecheEdit ausfülle kommt LaengeEdit aber wenn ich LaengeEdit und FlaecheEdit ausfülle kommt aber keine Breite

hoika 16. Feb 2010 18:17

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Hallo,

noch mal die Aufgabe

das wenn man Seite a oder b + die Fläche

Delphi-Quellcode:
if (Edit_a.Text<>'') and (Edit_Area.Text<>'') then
begin
 // a und Fläche gegeben
 // b wird berechnet


  Exit;
end;

if (Edit_b.Text<>'') and (Edit_Area.Text<>'') then
begin
 // b und Fläche gegeben
 // a wird berechnet

  Exit;
end;
Jetzt könnte natürlich auch a und b und die Fläche
per Editor eingegeben sein
-> es wird b berechnet,

oder du fängst da ab

Delphi-Quellcode:
if (Edit_a.Text<>'') and (Edit_b.Text<>'') and (Edit_Area.Text<>'') then
begin
  ShowMessage('ööööö');
  Exit;
end;

Heiko

Dennis S. 16. Feb 2010 18:26

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Danke Danke :-D
das funktioniert :) zwar in etwas anderer Form, könnte aber auch das selbe sein :lol:
ich hab jetzt das da stehen:
Delphi-Quellcode:
begin
   IF (LaengeEdit.Text <> '') and (FlaecheEdit.Text <> '')
   THEN
    BreiteEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(LaengeEdit.Text))
   ELSE
    begin
     IF (BreiteEdit.Text <> '') and (FlaecheEdit.Text <> '')
     THEN
      LaengeEdit.Text := FloatToStr(StrToInt(FlaecheEdit.Text)/StrToInt(BreiteEdit.Text))
     Else Label11.Caption := 'Fehlende Eingabe'
    end
  end
Dennis

Blackheart 16. Feb 2010 18:45

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Delphi-Quellcode:
IF (LaengeEdit.Text <> '') and (FlaecheEdit.Text <> '')
   THEN
Ich glaube du solltest das mal alles übersetzen damit du klar kommst
steht in LaengeEdit etwas drin oder nicht und in FlaecheEdit etwas drin oder nicht dann tue ...

Dennis S. 16. Feb 2010 18:50

Re: Schulprojekt: Thema: Berechnungen am Rechteck
 
Das weiß ich doch ^^. Also ich hatte ja vorher das mit 'or' und 3 Bedingungen. Nun habe ich im 1. If 2 Bedingungen und unter ELSE ein weiteres IF mit der fehelnden Bedingung und der notwendigen (indesemfalle die Fläche). Alles paletti und ich kann gleich alle 5 Werte mit 2 berechenen ;) sprich mit der Diagonale und 1 Seite kann ich dann Umfang, Fläche und Seite 2 ausrechenen.
Vielen Dank für die Hilfe. Ihr habt mir 3 Tage suchen erspart.

Lg Dennis


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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