www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Pascal" - Delphi 7
Delphi 7 < Pascal < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Pascal"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Delphi 7: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 16:49 Sa 13.01.2007
Autor: garfieldone

hallo alle zusammen,
ich habe ein ganz dringendes problem. und zwar möchte ich gerne mit delphi 7 gerne die binomialverteilung berechnen. mein spezielles problem ist die berechnung von n über k.
ich bin für jede kleinste hilfe und andeutung, wie ich das programmieren kann dankbar. ausführliche erklärungen würden mir besonders weiter helfen.

schon mal vielen dank
lg kerstin

        
Bezug
Delphi 7: Antwort
Status: (Antwort) fertig Status 
Datum: 16:58 Sa 13.01.2007
Autor: VNV_Tommy

Hallo Kerstin!

> mein spezielles problem ist die berechnung von n über k.

Das sollte nicht so schwierig sein, denke ich.

"n über k" ist ganz einfach wie folgt zu berechnen:
[mm] \vektor{n \\ k}=\bruch{n!}{k!(n-k)!} [/mm]

Die Fakultäten im Bruch sollten sich relativ einfach z.B. mit einer FOR-Schleife oder einer REPAT-Schleife bestimmen lassen.

Gruß,
Tommy


Bezug
                
Bezug
Delphi 7: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:37 So 14.01.2007
Autor: garfieldone

hallöle,
erstmal vielen dank, dass hatte ich mir auch so gedacht... allerdings hapert es beim umsetzen, irgendwie steh ich momentan voll auf dem schlauch... könntest du mir oder jemand anderes bitte noch etwas genauer helfen?
vielen dank für eure mühe
lg kerstin

Bezug
                        
Bezug
Delphi 7: Antwort
Status: (Antwort) fertig Status 
Datum: 17:15 So 14.01.2007
Autor: rahu

hallo kerstin

Tommy hat dir ja schon die formel zur bereichung gezeigt.

leider bin ich mir grade nicht sicher wie die syntax in delphi ist, hoffe aber dass sie wenigstens einigermaßen c - ähnlich ist :-)

deine 2 varibalen n und k nenne ich mal k_in und n_in (beides int)

int Fakultaet(int in) //Funktion zur berechnung der Fakultät von in
{
        int fak=1;
        if(in<=0)return -1;
        do{
             fak = fak * in;
             in--;
        }while(in>0);
}

void main()
{
       cin>>n_in;//einlesen n
       cin>>k_in;//und k
       if(n_in == k_in || n_in <= 0 || k_in <= 0)return;
       cout<<"n über k="<<( Fakultaet(n_in) / (Fakultate(k_in)*(Fakultaet(n_in - k_in);
}

viele grüße
ralf


Bezug
                        
Bezug
Delphi 7: Antwort
Status: (Antwort) fertig Status 
Datum: 20:23 So 14.01.2007
Autor: VNV_Tommy


> hallöle,
>  erstmal vielen dank, dass hatte ich mir auch so gedacht...
> allerdings hapert es beim umsetzen, irgendwie steh ich
> momentan voll auf dem schlauch... könntest du mir oder
> jemand anderes bitte noch etwas genauer helfen?
>  vielen dank für eure mühe
>  lg kerstin

Spontan fällt mir folgender ansatz dazu ein:

1) Der Bruch wird in drei Faktoren aufgeteilt:
Z sei die Fakultät im Zähler [n!].
N1 sei die erste Fakultät im Nenner [k!].
N2 sei die zweite Fakultät im Nenner [(n-k)!].

Somit musst du bei den Variablendeklarionen noch folgendes festlegen:
nueberk : longint; (Variable, welche am Ende das Ergebnis speichern soll)
i, Z, N1, N2 : longint; (i ist hier eine Laufzeitvariable, die wir Später brauchen)

2) Die einzelnen Fakultäten (also Z, N1 und N2) werden separat ermittelt. (vorher musst du natüröich die Parameter n und k einlesen - vielleicht indem du Werte aus einem Edit-Fenster ausliest)

Für Z ermittelt man den Wert wie folgt:
Z:=1; i:=1; (dies sind die Startwerte für Z und i; am besten weist du diese Werte gleich bei Programmstart zu. Besser wäre es jedoch die folgenden Anweisungen erst bei Proceduraufruf - oder Button-Click - zuzuweisen)
REPEAT
Z:=Z*i;
i:=i+1;
UNTIL i=n;

Anlog dazu gehst du bei der Bestimmung von k! und (n-k)! vor.

3) Es wird der Wert für nueberk mit folgender Anweisung ermittelt:
nueberk:=Z/(N1*N2);

4) Das Ergebnis wird ausgegeben (z.B. in ein Label)

Soweit meine Hinweise.

Einen Tipp noch am Schluß:
Definiere dir die Variablen am besten global (also im Hauptprogramm), dann sparst du dir die Übermittlung der Werte in die einzelnen Prozeduren.

Gruß,
Tommy

Bezug
                                
Bezug
Delphi 7: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:45 Mo 15.01.2007
Autor: Martin243

Hallo,

von mir noch eine kleine Optimierung der ersten beiden Punkte. Nicht Delpi-Spezifisches, nur etwas weniger Rechenaufwand. Ich erlaube mir, Tommys Text zu modifzieren:

1) Der Bruch wird in drei Faktoren aufgeteilt:
Z sei die Fakultät im Zähler dividiert durch max(k!, (n-k)!)
N sei die kleinere Fakultät im Nenner, also min(k!, (n-k)!)

Somit musst du bei den Variablendeklarionen noch folgendes festlegen:
nueberk : longint; (Variable, welche am Ende das Ergebnis speichern soll)
i, Z, N : longint; (i ist hier eine Laufzeitvariable, die wir Später brauchen)

2) Z und N werden separat ermittelt. (vorher musst du natüröich die Parameter n und k einlesen - vielleicht indem du Werte aus einem Edit-Fenster ausliest)

Für Z ermittelt man den Wert wie folgt:
Z:=1; i:=max(k+1, n-k+1); (oder wie auch immer die Funktion in Delphi lautet; dies sind die Startwerte für Z und i. Besser wäre es jedoch die folgenden Anweisungen erst bei Proceduraufruf - oder Button-Click - zuzuweisen)
REPEAT
Z:=Z*i;
i:=i+1;
UNTIL i >= n;  (größer/gleich)

N:=1; i:=1;
REPEAT
N:=N*i;
i:=i+1;
UNTIL i = min(k,n-k);  (oder die entsprechende Delphi-Funktion)


3) Es wird der Wert für nueberk mit folgender Anweisung ermittelt:
nueberk:=Z/N;


Das ist nur eine Frage de Effizienz. Für nicht allzu große Zahlen ist das aber unerheblich...


Gruß
Martin

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Pascal"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.englischraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]