AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

10 Zahl und Erg. -> + u. - Berechnen

Ein Thema von Christian18 · begonnen am 28. Dez 2004 · letzter Beitrag vom 29. Dez 2004
Antwort Antwort
Seite 2 von 2     12   
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#11

Re: 10 Zahl und Erg. -> + u. - Berechnen

  Alt 28. Dez 2004, 21:12
es kann doch aber auch vorkommen dass es mehrere möglichkeiten gibt? sollt ihr das auch berücksichtigen?
  Mit Zitat antworten Zitat
Benutzerbild von hibbert
hibbert

Registriert seit: 26. Aug 2003
Ort: Berlin
262 Beiträge
 
Delphi 2005 Personal
 
#12

Re: 10 Zahl und Erg. -> + u. - Berechnen

  Alt 28. Dez 2004, 21:19
Also ich würde das erstmal nicht mit 10 zahlen machen, sonder vielleicht erstmal mit 3 Zahlen beginnen...
  Mit Zitat antworten Zitat
Ka1

Registriert seit: 28. Dez 2004
1 Beiträge
 
#13

Re: 10 Zahl und Erg. -> + u. - Berechnen

  Alt 28. Dez 2004, 21:31
(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]='0then 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]='0then S1:=S1+'-'+Edit1.Text[i1+1]
      else S1:=S1+'+'+Edit1.Text[i1+1];
      ListBox1.Items.Add(S1+'='+Edit2.Text);
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#14

Re: 10 Zahl und Erg. -> + u. - Berechnen

  Alt 28. Dez 2004, 22:06
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]
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#15

Re: 10 Zahl und Erg. -> + u. - Berechnen

  Alt 28. Dez 2004, 22:16
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:
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.
grüße, paresy
Angehängte Dateien
Dateityp: rar matheapp_246.rar (4,7 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

Re: 10 Zahl und Erg. -> + u. - Berechnen

  Alt 28. Dez 2004, 22:21
Na prima, jetzt hat er es doch geschafft euch seine Hausaufgaben machen zu lassen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#17

Re: 10 Zahl und Erg. -> + u. - Berechnen

  Alt 28. Dez 2004, 22:28
Zitat von Luckie:
Na prima, jetzt hat er es doch geschafft euch seine Hausaufgaben machen zu lassen.
naja wenn er nicht weiß wie es funktioniert... nützt ihm der beste code nix... das war schon meinen zeiten so wo die im info unterricht meinen code abgeschrieben haben... und als der lehrer nachhakte.... kam nur nen öhm.... hab ich grad vergessen

grüße, paresy
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#18

Re: 10 Zahl und Erg. -> + u. - Berechnen

  Alt 29. Dez 2004, 11:20
Zitat von Luckie:
Na prima, jetzt hat er es doch geschafft euch seine Hausaufgaben machen zu lassen.
nein das würde ich nicht so sehen. Ich muß ja auch erklären können was da gemacht wird. und deshalb programmiere ich es nochmal selbst. Das mit den Code hat mir aber sehr geholfen.

Mit freundlichen Grüßen

Christian18
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 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