![]() |
10 Zahl und Erg. -> + u. - Berechnen
Hallo,
ich soll für die Schule ein Programm schreiben. Man soll in den Programm 10 Zahlen eingeben und das ergebnis. Das Programm soll dann solange rechnen bis das ergbnis mit plus uns minus gefunden ist. kleines Bsp.: - Eingabe: 1 2 3 5 9 7 3 6 9 1 Ergebnis: -10 und das programm soll das berechnen: 1+2+3+5-9-7-3+6-9+1=-10 ich hoffe ich konnte mein großes problem ein bisschen verständlich machen. vorgegeben ist auch noch maximale länge das quellcodes. (100 Zeilen) Leidert weiß ich überhaupt nicht wie ich anfangen kann. Deshalb kann ich noch keinen Code geben. Mit freundlichen Grüßen Christian18 |
Re: kleine Herausforderung :-)
Und was erwartest du jetzt von uns?
|
Re: kleine Herausforderung :-)
Zitat:
mfg |
Re: kleine Herausforderung :-)
|
Re: kleine Herausforderung :-)
Musst halt alle Möglichkeiten durchgehen und das sind ne verdammte Menge...
Anfang: 1+2-3-4-5-6-7-8-9 1+2+3-4-5-6-7-8-9 usw. bis 1-2-3-4-5-6-7-8+9 oder so :) Mach halt ein Algorithmus draus :D. mfG |
Re: kleine Herausforderung :-)
Stichwort:
![]() |
Re: kleine Herausforderung :-)
Zitat:
mfg |
Re: kleine Herausforderung :-)
Warum sollte der Algorithmus länger als 100 Zeilen werden?
|
Re: kleine Herausforderung :-)
Könntest du bitte erstmal deinen Titel ändern?
kleine Herausforderung :-) sagt absolut nichts über dein Problem aus. Danke. Edit: Smileys deaktiviert |
Re: kleine Herausforderung :-)
Eine Idee: :idea:
eine Zahl von 0 hochzählen in eine Binärzahl übersetzen dann Stelle für Stelle maskieren wenn 0 dann minus wenn 1 dann plus das Ganze solang bis das Ergebnis vorliegt. Ich hoffe ich konnte dir helfen Gruß MrFish :stupid: |
Re: 10 Zahl und Erg. -> + u. - Berechnen
es kann doch aber auch vorkommen dass es mehrere möglichkeiten gibt? sollt ihr das auch berücksichtigen?
|
Re: 10 Zahl und Erg. -> + u. - Berechnen
Also ich würde das erstmal nicht mit 10 zahlen machen, sonder vielleicht erstmal mit 3 Zahlen beginnen...
|
Re: 10 Zahl und Erg. -> + u. - Berechnen
(Hab es nicht ausgiebig getestet :| )
Es gibt insgesamt 512 Möglichkeiten (also 9 Bits) Im "Edit1" stehen die 10 Ziffern (direkt hintereinander) Im "Edit2" steht das zu suchende Ergebnis "Button1" startet den Vorgang und die "ListBox1" gibt das ganze aus
Delphi-Quellcode:
function GetBitStatus(W:Integer):String;
var BS : String; begin BS:=''; If W-256 >= 0 then begin BS:=BS+'1'; W:=W-256; end else BS:=BS+'0'; If W-128 >= 0 then begin BS:=BS+'1'; W:=W-128; end else BS:=BS+'0'; If W-64 >= 0 then begin BS:=BS+'1'; W:=W-64; end else BS:=BS+'0'; If W-32 >= 0 then begin BS:=BS+'1'; W:=W-32; end else BS:=BS+'0'; If W-16 >= 0 then begin BS:=BS+'1'; W:=W-16; end else BS:=BS+'0'; If W-8 >= 0 then begin BS:=BS+'1'; W:=W-8; end else BS:=BS+'0'; If W-4 >= 0 then begin BS:=BS+'1'; W:=W-4; end else BS:=BS+'0'; If W-2 >= 0 then begin BS:=BS+'1'; W:=W-2; end else BS:=BS+'0'; If W-1 >= 0 then begin BS:=BS+'1'; W:=W-1; end else BS:=BS+'0'; Result:=BS; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,i1 : Integer; A : Array[1..10] of Integer; W : Integer; S, S1 : String; begin ListBox1.Clear; For i:=1 to 10 do A[i]:=StrToInt(Edit1.Text[i]); For i:=0 to 511 do begin W:=A[1]; For i1:=2 to 10 do begin S:=GetBitStatus(i); If S[i1-1]='0' then W:=W-A[i1] else W:=W+A[i1]; end; If StrToInt(Edit2.Text)=W then begin S1:=Edit1.Text[1]; For i1:=1 to 9 do If S[i1]='0' then S1:=S1+'-'+Edit1.Text[i1+1] else S1:=S1+'+'+Edit1.Text[i1+1]; ListBox1.Items.Add(S1+'='+Edit2.Text); end; end; end; |
Re: 10 Zahl und Erg. -> + u. - Berechnen
Hallo,
ich denke mal der didaktische Sinn ist ne Rekursion, also etwas der Art:
Delphi-Quellcode:
var
zahlen: array[1..10] of Integer; // die vorgegebenen Zahlen ergebnis: Integer; // das vorgegebene Ergebnis formelerg: String; // Var. für's Ergebnis function myfunc(pos: Integer; mysum: Integer; formel:string): boolean; begin if pos>10 then begin if mysum<>ergebnis then result:=false else begin formelerg:=formel; result:=true end; end else result:=myfunc(pos+1, mysum-zahlen[pos], formel+'-'+IntToStr(zahlen[pos])) or myfunc(pos+1, mysum+zahlen[pos], formel+'+'+IntToStr(zahlen[pos])); end; if myfunc(2, zahlen[1], IntToStr(zahlen[1])) then ShowMessage('Formel lautet: '+formelerg) else ShowMessage('Nicht lösbar!'); (Ja, ziemlicher Spagetti-Code... ist auch nicht getestet aber die Idee ist hoffentlich klar.) Dieser Ansatz erfaßt alle möglichen Lösungen, es wird aber nur die letzte Ausgegeben... [edit]es werden natürlich nur alle Möglichkeiten erfaßt, wenn booleasche Ausdrücke vollständig ausgewertet werden...[/edit] |
Re: 10 Zahl und Erg. -> + u. - Berechnen
Liste der Anhänge anzeigen (Anzahl: 1)
ich hab den code von Ka1 genommen und nen wenig optimiert... damit die string vergleiche raus sind und nen proof einbaut der nen error ausgibt wenn was nicht stimmen sollte :)
Delphi-Quellcode:
grüße, paresy
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,StrUtils; type TNumbers = record myResult : Integer; myNumbers : Array[0..9] of Integer; end; TForm1 = class(TForm) lblIS: TLabel; edResult: TEdit; btnCalc: TButton; lstResults: TListBox; procedure btnCalcClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } EditsNumbers : Array[0..9] of TEdit; public { Public declarations } end; var Form1: TForm1; const DefaultNumbers: TNumbers = (myResult: -10; myNumbers: (1,2,3,5,9,7,3,6,9,1); ); implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin for i:=0 to 9 do begin EditsNumbers[i] := TEdit.Create(Self); EditsNumbers[i].Parent := Self; EditsNumbers[i].Top := 8; EditsNumbers[i].Left := 8+i*36; EditsNumbers[i].Width := 25; EditsNumbers[i].TabOrder := i; end; //Load default Numbers for i:=0 to 9 do EditsNumbers[i].Text := IntToStr(DefaultNumbers.myNumbers[i]); edResult.Text := IntToStr(DefaultNumbers.myResult); end; procedure TForm1.btnCalcClick(Sender: TObject); var i,i1 : Integer; W : Integer; S1 : String; Proof : Integer; Numbers: TNumbers; begin //copy numbers for i:=0 to 9 do Numbers.myNumbers[i] := StrToInt(EditsNumbers[i].Text); Numbers.myResult := StrToInt(edResult.Text); lstResults.Clear; For i:=0 to 511 do begin W:=Numbers.myNumbers[0]; For i1:=1 to 9 do begin If (i and (1 shl i1)) = 0 then W:=W-Numbers.myNumbers[i1] else W:=W+Numbers.myNumbers[i1]; end; If Numbers.myResult=W then begin S1:=IntToStr(Numbers.myNumbers[0]); Proof := Numbers.myNumbers[0]; For i1:=1 to 9 do If (i and (1 shl i1)) = 0 then begin S1:=S1+'-'+IntToStr(Numbers.myNumbers[i1]); Proof := Proof - Numbers.myNumbers[i1]; end else begin S1:=S1+'+'+IntToStr(Numbers.myNumbers[i1]); Proof := Proof + Numbers.myNumbers[i1]; end; if Proof <> Numbers.myResult then S1 := 'ERROR: '+S1; lstResults.Items.Add(S1+'='+IntToStr(Numbers.myResult)); end; end; end; end. |
Re: 10 Zahl und Erg. -> + u. - Berechnen
Na prima, jetzt hat er es doch geschafft euch seine Hausaufgaben machen zu lassen. :roll:
|
Re: 10 Zahl und Erg. -> + u. - Berechnen
Zitat:
grüße, paresy |
Re: 10 Zahl und Erg. -> + u. - Berechnen
Zitat:
Mit freundlichen Grüßen Christian18 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz