Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mathe Problem 1+2-3 ... +99-100 (https://www.delphipraxis.net/47187-mathe-problem-1-2-3-99-100-a.html)

citybreaker 7. Jun 2005 16:41


Mathe Problem 1+2-3 ... +99-100
 
Hallo,

ich hab da mal ein kleines Denkproblem. Ich hoffe mir
kann jemand auf die spränge helfen.
Ich hab eine Mathe Aufgabe die ich mit dem Pc lösen möchte.

Undzwar:
Zitat:

1+2-3+4-5+6-7 .... +99-100 =

So jetzt habe ich flogendes gemacht
Delphi-Quellcode:
var i,e: integer;
    a: Array [1..100] of Integer;
begin
  e := 0;
  for i := 1 to 100 do begin
    a[i] := i;
    g := g + a[i] - a[i+1];
    // ListBox1.Items.Add(IntToStr(a[i]));
  end;
  Caption := IntToStr(e);
end;
Das ganze klappt natürlich mal wieder nicht. Hat jemand ne Idee?

Dax 7. Jun 2005 16:44

Re: Mathe Problem 1+2-3 ... +99-100
 
So könnts gehen:

Delphi-Quellcode:
var
  Num, i: Integer;
  b: Boolean;

Num := 1;
b := True;
for i := 2 to 100 do
begin
  if b then
    Num := Num + i
  else
    Num := Num - i;
  b := not b;
end;

Boombuler 7. Jun 2005 16:49

Re: Mathe Problem 1+2-3 ... +99-100
 
Also wenn du dir das mal vorstellst was du da machst sieht das ungefähr so aus:

G := 1 - 2 + 2 - 3 + 3 - 4 + 5 - 6...

also
Delphi-Quellcode:
var
  g:integer;
begin
  for i := 1 to 100 do
    if (i mod 2 = 0) or (i = 1) then
      g := g + i
    else
      g := g - i;
end;
das sollte besser gehn...
habs aber net getestet nur fix runtergetippt...

PS: Poste das obwohl wieder jemand schneller war...


Greetz
Boombuler

JasonDX 7. Jun 2005 16:51

Re: Mathe Problem 1+2-3 ... +99-100
 
um ne 3. möglichkeit zu präsentieren, die kk (komplizierter und kürzer :mrgreen: ) is:
Delphi-Quellcode:
function EinsBisHundert: integer;
var
  i: integer;
begin
  result := 1;
  for i := 2 to 100 do
    inc(result, (ord(not odd(i)) * 2 - 1) * i); //Das lange dings vor dem i gibt entweder +1 oder -1, also entweder dazu- oder wegzählen
end;
Ich mag kurze schleifen und wenig ifs :mrgreen:

leddl 7. Jun 2005 16:53

Re: Mathe Problem 1+2-3 ... +99-100
 
Ich würde aber raten, g vorher 0 zu setzen. Man weiß ja nie. ;)

citybreaker 7. Jun 2005 16:53

Re: Mathe Problem 1+2-3 ... +99-100
 
Vielen dank, war wohl mal wieder auf'm falschen Dampfer.
Klappen beide möglichkeiten. :)

Eine Frage habe ich noch warum fangt ihr die Schleife mit der 2 an?

nailor 7. Jun 2005 16:54

Re: Mathe Problem 1+2-3 ... +99-100
 
das kann man aber auch mit hilfe der mathematik umformen und muss dann nicht iterativ/rekursiv rechnen.

JasonDX 7. Jun 2005 17:06

Re: Mathe Problem 1+2-3 ... +99-100
 
Zitat:

Zitat von nailor
das kann man aber auch mit hilfe der mathematik umformen und muss dann nicht iterativ/rekursiv rechnen.

Stimmt:
Delphi-Quellcode:
uses math;
//...
function AlternierendeSumme(von: integer): integer;
begin
  SetRoundMode(rmUp);
  result := (ord(not odd(von)) * 2 - 1) * round(von / 2) + 2;
  SetRoundMode(rmNearest);
end;

glkgereon 7. Jun 2005 17:07

Re: Mathe Problem 1+2-3 ... +99-100
 
ma ne frage:

ist nicht

a + a+1 - a+2 + a+3 .... - a+n

automatisch gleich

a-(n/2)

wenn n gerade ist?

(a=Anfang, n=Anzahl der schritte sozusagen)

da immer zwei zahlen insgesamt gesehen eins abziehen?

also:
Delphi-Quellcode:
function WieHeisstDas(Anfang, N: Int64):Int64;
begin
//Für gerades N
  Result:=Anfang-(N Div 2);
//Für jedes N
  Result:=Anfang-(N Div 2) + (N Mod 2) * (Anfang + N);
end;

simonko 7. Jun 2005 17:57

Re: Mathe Problem 1+2-3 ... +99-100
 
Gauß hatte sich überlegt, dass man anstatt die Zahlen der Reihe nach zu addieren, sie sozusagen immer an den beiden Enden der Folge addieren kann, also statt 1 + 2 + 3 + ...

+ 100 rechnete er (1 + 100) + (2 + 99) + ... + (50 + 51). Er erhielt genau 50 zweiteilige Summen, von denen jede = 101 betrug. Daher konnte er auch multiplizieren: 50 mal 101 = 5050.

vielleicht findest du auch was mit minus.

ibp 7. Jun 2005 18:10

Re: Mathe Problem 1+2-3 ... +99-100
 
wie wäre es mit...
Delphi-Quellcode:
var i: integer;
    e: extended;
begin
  e := 1.0;
  for i := 2 to 100 do
    e:=e+(power(-1,i)*i);

  Caption := floattostr(e);
end;

glkgereon 7. Jun 2005 20:03

Re: Mathe Problem 1+2-3 ... +99-100
 
hallo....meine lösung?

1 + 2-3 + 4-5 + 6-7 ...

jedes paket macht -1

daher 1 - Anzahl der Pakete...

DGL-luke 7. Jun 2005 20:08

Re: Mathe Problem 1+2-3 ... +99-100
 
auch eine alternative :D

ibp 7. Jun 2005 23:16

Re: Mathe Problem 1+2-3 ... +99-100
 
es ginge auch...
Code:
1+2  -3+4  -5+6  -7+8  ... -(n-1) + n
  3  +  1   + 1  +  1   ... 2+(n/2)    für alle n=2*m {m=1,2..x)
                             2-((n+1)/2) für alle n=2m-1 {m=1,2..x)

malo 8. Jun 2005 13:30

Re: Mathe Problem 1+2-3 ... +99-100
 
Eine Überlegung noch von mir...

Ich bin durch glkgereons "Paketmethode" drauf gekommen.

Mann addiert immer Pakete, die eine Zahl rechnet, minus die nächstgrößere ganze Zahl. Das hieße doch dann, es würde immer um eins kleiner werden ( (-) + (-) = (-) ). Man könnte doch dann prinzipiell folgendermaßen vorgehen:

Code:
1 + (100 div (-2) )
Also so in etwa... die Anzahl der Pakete wäre dann die Zahl im negativen Bereich, zu der dann die 1 zugezählt wurde.

Ich bin mir jedoch nicht sicher, ob meine oben genannte Rechnung so korrekt ist... ;)

//edit: :wall: Hab wohl nicht genau nachgelesen. glkgereon hat ja genau dieselbe Lösung :oops:

ibp 8. Jun 2005 13:37

Re: Mathe Problem 1+2-3 ... +99-100
 
Zitat:

Zitat von malo
Eine Überlegung noch von mir...

Ich bin durch glkgereons "Paketmethode" drauf gekommen.

Mann addiert immer Pakete, die eine Zahl rechnet, minus die nächstgrößere ganze Zahl. Das hieße doch dann, es würde immer um eins kleiner werden ( (-) + (-) = (-) ). Man könnte doch dann prinzipiell folgendermaßen vorgehen:

Code:
1 + (100 div (-2) )
Also so in etwa... die Anzahl der Pakete wäre dann die Zahl im negativen Bereich, zu der dann die 1 zugezählt wurde.

Ich bin mir jedoch nicht sicher, ob meine oben genannte Rechnung so korrekt ist... ;)

//edit: :wall: Hab wohl nicht genau nachgelesen. glkgereon hat ja genau dieselbe Lösung :oops:

was ist mit ungeraden?

malo 8. Jun 2005 13:39

Re: Mathe Problem 1+2-3 ... +99-100
 
Wenn die letzte Zahl ungerade ist, müsste man prüfen, ob sie ungerade ist. Wenn ja, dann muss die letzte Zahl imho noch dazu addiert werden ;)

Boombuler 8. Jun 2005 14:03

Re: Mathe Problem 1+2-3 ... +99-100
 
Das mag ich so an diesem Forum :dp: über die simpelsten Probleme wird sich hier gleich totdiskutiert :)

Schick mir mal jemand ne PM wenn das Thema hier die 100 Lösungsvorschläge gesprengt hat!
:drunken:

Greetz
Boombuler

nailor 8. Jun 2005 14:14

Re: Mathe Problem 1+2-3 ... +99-100
 
Zitat:

Zitat von Boombuler
Das mag ich so an diesem Forum :dp: über die simpelsten Probleme wird sich hier gleich totdiskutiert :)

das muss man differenzierter betrachten.

1. jemand hat ne frage gestellt
2. sie wurde vom informatischen teil her beantwortet
3. ich hab eingeworfen, dass das vom mathematischen gesichtspunkt gesehen "suboptimal" ist
4. jetzt wird ne vernünftige mathematische lösung gesucht

ibp 8. Jun 2005 14:15

Re: Mathe Problem 1+2-3 ... +99-100
 
Zitat:

Zitat von Boombuler
...die simpelsten Probleme wird sich hier gleich totdiskutiert...

das sehe ich nicht so, jeder kann ja seinen lösungsvorschlag unterbreiten oder andere verbessern. das was der dp und den beiträgen schadet, sind beitäge die 1. nichts zum thema beitragen und 2. die ewigen ich nehme aber lieber... und ... ist sch...
Der einzige Beitrag der hier unproduktiv ist, ist Deiner und nun auch meiner :wall:

glkgereon 8. Jun 2005 14:28

Re: Mathe Problem 1+2-3 ... +99-100
 
und nocheinmal werde ich meine Lösung wiederholen, da sie auch für ungerade anzahlen funktioniert und kurz ist und überhaupt und so!!! :twisted:

Delphi-Quellcode:
function WieHeisstDas(Anfang, N: Int64):Int64;
begin
//Für gerades N : Result:=Anfang-(N Div 2);
//Für jedes N
  Result:=Anfang-(N Div 2) + (N Mod 2) * (Anfang + N);
end;
falls n gerade ist, kommt genau das obere raus, da N Mod 2 = 0 ist...
anderenfalls kommt 1 raus, und eine ungerade zahl wird immer addiert, A + N

in diesem Fall würde man 1,99 übergeben (erste Zahl: 1, Weitere Zahlen: 99)

ich hoffe da sind keine fehler mehr drin (ich liebe es immer wenn irgendwo ein (x+1) oder (x-1) fehlt :( )

citybreaker 8. Jun 2005 14:43

Re: Mathe Problem 1+2-3 ... +99-100
 
Habe die erste 3 Lösungen ausprobiert und alle drei sind zum Ergebnis von 52 gekommen.
Ich habe das ganze noch einmal so nach gerechnet und bin auf 50 gekommen. Auch in der
Schule sind wir auf 50 gekommen.


--- Edit ---
In der Schule haben wie als Mathematische Lösungen immer 2 Zahlen zusammengefasst
so das wir immer auf -1 gekommen sind. Das dann halt 50 mal. 50*(-1) = -50

glkgereon 8. Jun 2005 14:50

Re: Mathe Problem 1+2-3 ... +99-100
 
also ich komme auf -49...

1, dann 50 Paare zu je -1

nix +50...

ibp 8. Jun 2005 14:54

Re: Mathe Problem 1+2-3 ... +99-100
 
Zitat:

Zitat von citybreaker
Habe die erste 3 Lösungen ausprobiert und alle drei sind zum Ergebnis von 52 gekommen.
Ich habe das ganze noch einmal so nach gerechnet und bin auf 50 gekommen. Auch in der
Schule sind wir auf 50 gekommen.


--- Edit ---
In der Schule haben wie als Mathematische Lösungen immer 2 Zahlen zusammengefasst
so das wir immer auf -1 gekommen sind. Das dann halt 50 mal. 50*(-1) = -50

du hast aber nicht 50 sondern nur 49 !!!

Code:
.  1     = +1
1   2-3   = -1
2   4-5   = -1
.. ..
49  99-99 = -1
    100   =+100
----------------
             52 
===============

glkgereon 8. Jun 2005 14:59

Re: Mathe Problem 1+2-3 ... +99-100
 
Huppsala..meine rechnung is falsch da im ersten post folgendes steht:

1+2-3+4-5+6-7...99-100

da muss ein plus hin!!!
(ungerade Zahlen bis auf die 1 werden abgezogen....gerade addiert)

demnach ergibt sich folgende Formel.

X = Anfang + N - (N-1) Div 2
bzw
X = Anfang + (N Mod 2) * N - (N-1) Div 2

(soweit ich das sehe und mich nicht vertue)

citybreaker 8. Jun 2005 15:03

Re: Mathe Problem 1+2-3 ... +99-100
 
Zitat:

Zitat von glkgereon
Huppsala..meine rechnung is falsch da im ersten post folgendes steht:

1+2-3+4-5+6-7...99-100

da muss ein plus hin!!!
(ungerade Zahlen bis auf die 1 werden abgezogen....gerade addiert)

demnach ergibt sich folgende Formel.

X = Anfang + N - (N-1) Div 2
bzw
X = Anfang + (N Mod 2) * N - (N-1) Div 2

(soweit ich das sehe und mich nicht vertue)

Hu das lag aber an mir. Es hätte heißen müssen:
1-2+3-4+5-6 ...
-1| -1| -1| ...


:oops:

ibp 8. Jun 2005 15:11

Re: Mathe Problem 1+2-3 ... +99-100
 
:shock: oh mann :wall:

dann sind es natürlich -n/2 für alle graden n und (-3n+1)/2 für alle ungeraden!

glkgereon 8. Jun 2005 15:19

Re: Mathe Problem 1+2-3 ... +99-100
 
-(n/2) is korrekt, aber wieso (-3n+1)/2 ?

ich hätte gesagt:

-(n/2)+n

also -(n/2) + (n mod 2)*n

Edit:
und, um nochmal auf das problem M - M+1 + M+2 - M+3 ... M+N zurückzukommen....also eine variable Anfangszahl, sei gesagt:

die Formel -(n/2) muss nicht geändert werden.
-(n/2)+(n mod 2)*n muss wie folgt geändert werden:
-(n/2) + (n mod 2) * (n+anfang)

bttb930 8. Jun 2005 15:26

Re: Mathe Problem 1+2-3 ... +99-100
 
mein gott, ich versteh nicht wieso ihr über so einen pipifax immer so lange diskutiert. und bei den ganzen beiträgen sieht man auch, dass 87% nicht mal nachdenken geschweige denn die vorigen beiträge ordentlich lesen. das kann doch echt nicht mehr angehen. habt ihr alle langeweile oder wie?

denkt doch mal ein kleines bißchen nach, bevor ihr hier einen beitrag schreibt. bitte.

ibp 8. Jun 2005 15:31

Re: Mathe Problem 1+2-3 ... +99-100
 
Zitat:

Zitat von glkgereon
ich hätte gesagt: -(n/2)+n

... wenn ich das ausrechne bekomme ich eine ugebrochene zahl heraus !


(-3n+1)/2 teste es daoch aus....

ibp 8. Jun 2005 15:32

Re: Mathe Problem 1+2-3 ... +99-100
 
Zitat:

Zitat von bttb930
mein gott, ich versteh nicht wieso ihr über so einen pipifax immer so lange diskutiert. und bei den ganzen beiträgen sieht man auch, dass 87% nicht mal nachdenken geschweige denn die vorigen beiträge ordentlich lesen. das kann doch echt nicht mehr angehen. habt ihr alle langeweile oder wie?

denkt doch mal ein kleines bißchen nach, bevor ihr hier einen beitrag schreibt. bitte.

... dann fang mal an mit nachdenken über unqualifizierte beiträge...

Khabarakh 8. Jun 2005 16:41

Re: Mathe Problem 1+2-3 ... +99-100
 
Jetzt noch ein Lösungsvorschlag von mir :mrgreen: :
Man errechnet die Summe der positiven und die der negativen Zahlen mit der Gaußschen Summenformel und subtrahiert sie dann.
Sollte langsamer als die "Pakete"-Idee sein, dafür kann man alles schnell von 1+2-3+4... auf 1-2+3-4... oder auch 2-3+4-6+6-9... umstellen.
Delphi-Quellcode:
function Foo: Integer;
  // Erste Zahl, Letzte Zahl, Anzahl
  function Gauss(AFrom, ATo, ACount: Integer): Integer;
  begin
    Result := (AFrom + ATo) * ((ATo - AFrom) div ACount + 1) div 2;
    // = (From + To) * Steps / 2
    // Steps = (From - To) div Count + 1
  end;

begin
  Result := Gauss(1, 99, 2) - Gauss(2, 100, 2); //1 - 2 + 3...
  // Result := Gauss(2, 50 * 2, 2) - Gauss(3, 50 * 3, 3);
  //2 - 3 + 4 - 6..., 50 Paare
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:38 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 by Thomas Breitkreuz