| Autor |
Beitrag |
drummer
Hält's aus hier
Beiträge: 5
|
Verfasst: So 10.12.06 11:44
hi leute...ich habe von der schule eine aufgabe bekommen ich soll ien prog schreiben welches entscheidet ob ein dreieck eindeutig zu konstruieren ist (2 seiten müssen länger als eine dritte sein) jedenfalls soll ich dazu "FUNCTION dreieck(a, b, c:integer):boolean" verwenden...gut hab ich gemacht, doch nun hab ich ein problem...dass programm sagt mir ich habe nicht genügend wirkliche parameter...
sagt mir bitte was an dem quelltext falsch ist!!!
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; procedure Button1Click(Sender: TObject); private public end;
FUNCTION dreieck (a, b, c:integer):boolean;
var Form1: TForm1; a,b,c :integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin a:=strtoint(edit1.Text); b:=strtoint(edit2.Text); c:=strtoint(edit3.text);
if dreieck=(a+b)>c then begin dreieck:=true end;
if dreieck=(a+c)>b then begin dreieck:=true end;
if dreieck=(b+c)>a then begin dreieck:=true end;
if dreieck=(a+b)<c then begin dreieck:=false end;
if dreieck=(a+c)<b then begin dreieck:=false end;
if dreieck=(b+c)<a then begin dreieck:=false end;
if dreieck=true then begin showmessage('das dreieck ist eindeutig zu konstruieren, da 2 seiten größer als eine dritte sind') end;
if dreieck=false then begin showmessage('das dreieck ist nicht zu konstruieren da zwei seiten icht länger sind als eine dritte') end; end;
end. |
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 10.12.06 11:52
Hi
*g* wenn du statt " FUNCTION dreieck (a, b, c:integer):boolean;" "var dreieck: boolean" hinschreibst gehts  aber ohne die Funktion. Du musst also deinen ganzen Code, den du hast unter FUNCTION dreieck (a, b, c:integer):boolean; schreiben (unten im Quelltext). Dann musst du Dreieck im Quelltext durch Result ersetzen => Die funktion gibt den Wert zurück. In die Button procedure bleibt dann nurnoch das zurück:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| var a,b,c: integer; dr: boolean; begin a:=strtoint(edit1.Text); b:=strtoint(edit2.Text); c:=strtoint(edit3.text); dr:=Dreieck(a,b,c); if dr=true then begin showmessage('das dreieck ist eindeutig zu konstruieren, da 2 seiten größer als eine dritte sind') end;
if dr=false then begin showmessage('das dreieck ist nicht zu konstruieren da zwei seiten icht länger sind als eine dritte') end; end; |
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 10.12.06 11:52
Du musst natürlich auch eine Funktion schreiben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function Dreieck(A, B, C: Integer): Boolean; begin Result := False;
if A + B > C then Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject); begin if Dreieck(A, B, C) = True then ShowMessage('Geht...');
end; |
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 10.12.06 12:28
Hallo,
bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:
| 1.2 Beiträge: | | Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf  klicken und den Titel ändern. Danke Dir!
Viele Grüße,
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Dragonclaw
      
Beiträge: 196
Windows Vista
Delphi 7 Prof.
|
Verfasst: So 10.12.06 12:49
Um damit du nicht alle Möglichkeiten überprüfen musst, kannst du ja einfach dem Benutzer sagen das er Die Hypothenuse in ein bestimmtes Feld eintragen MUSS!! Ob sie es wirklich ist kannst du ja ganz einfach mit üerbprüfen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| a := Edit1.text; b := Edit2.text; c := Edit3.text; if (c > a) AND (c > b) then begin dreieck (a, b, c); end else ShowMessage('Die eigegebene Zahl ist keine Hypothenuse'); |
|
|
drummer 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 10.12.06 13:38
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 10.12.06 14:38
Dragonclaw hat folgendes geschrieben: | Um damit du nicht alle Möglichkeiten überprüfen musst, kannst du ja einfach dem Benutzer sagen das er Die Hypothenuse in ein bestimmtes Feld eintragen MUSS!! Ob sie es wirklich ist kannst du ja ganz einfach mit üerbprüfen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| a := Edit1.text; b := Edit2.text; c := Edit3.text; if (c > a) AND (c > b) then begin dreieck (a, b, c); end else ShowMessage('Die eigegebene Zahl ist keine Hypothenuse'); | |
so stimmts net ganz, weil wenn du ein gleichseitiges Dreieck hast dann is ja die Hypothenuse = den andren Seiten. (soviel zur "unfähigkeit des Benutzers"  )
Also muss es statt
if (c > a) AND (c > b) then
so heißen
if (c >= a) AND (c >= b) then
Xion
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Dragonclaw
      
Beiträge: 196
Windows Vista
Delphi 7 Prof.
|
Verfasst: So 10.12.06 14:43
Stimmt, an ein gleichseitiges Dreieck hatte ich garnicht gedacht... Hab das Programm auch nicht selber getestet nur schnell hingeschrieben.
|
|
aim65
      
Beiträge: 312
Win 9x, Win XP
Delphi 3pro, 7PE
|
Verfasst: So 10.12.06 15:40
Bin zwar schon lange aus der Schule, aber soviel ich weiß, gibt's den Begriff Hypotenuse NUR bei einem rechtwinkligen Dreieck. Oder habt ihr die Spielregeln verändert?
Und was passiert, wenn man folgendes eingibt: a=10, b=2, c=3 ?
Es muß ja auch sichergestellt sein, daß die Summe der Längen der beiden kürzeren Seiten immer größer ist als die Länge der längsten. Sonst gibt's kein Dreieck.
Viel Spaß beim Weiteknobeln.
|
|
Dragonclaw
      
Beiträge: 196
Windows Vista
Delphi 7 Prof.
|
Verfasst: So 10.12.06 15:47
ARG... wieso bin ich eigentlich im MAthe LK. Klar du hast recht Hypothenusen gibts nur in rechtwinkligen Dreiecken. Ist aber im Endeffekt das gleiche ob man jetzt die Hypotenuse oder die längste Seite angibt.
|
|
aim65
      
Beiträge: 312
Win 9x, Win XP
Delphi 3pro, 7PE
|
Verfasst: So 10.12.06 22:31
War ja nur so eine Randbemerkung.
@Drummer: Dein anfänglicher Ansatz ist übrigens der flexibelste, weil er eine beliebige Eingabe der drei Werte in die Felder ermöglicht. Hat halt jede Menge Fehler in der Umsetzung.
Hab's mal etwas umgeschrieben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Button1Click(Sender: TObject); var a,b,c: Integer; Dreieck: Boolean; begin a:=strtoint(edit1.Text); b:=strtoint(edit2.Text); c:=strtoint(edit3.text);
if (a+b)>c then dreieck:=true; if (a+c)>b then dreieck:=true; if (b+c)>a then dreieck:=true; if (a+b)<=c then dreieck:=false; if (a+c)<=b then dreieck:=false; if (b+c)<=a then dreieck:=false;
if dreieck then showmessage('das dreieck ist eindeutig zu konstruieren....') else showmessage('das dreieck ist nicht zu konstruieren....'); end; |
Geht auch noch kompakter - aber so kann man das besser mit der Originalroutine vergleichen. Ist auch keine Funktion, aber wie man das umwandelt, kannst Du ja jetzt selbst herausfinden.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 11.12.06 00:55
Es ist höchstens eine Bedingung nicht erfüllt, also:
Delphi-Quelltext 1: 2: 3: 4:
| function Dreieck(a, b, c: Integer): Boolean; begin Result := (a+b-c)*(b+c-a)*(a+c-b) > 0; end; |
|
|
|