www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

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
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Softwaretechnik und Programmierung" - Programm funktioniert nicht
Programm funktioniert nicht < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Programm funktioniert nicht: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 11:00 Do 02.06.2011
Autor: jacob17

Hallo,
Möchte gerne ein Programm in C schreiben welches die Binomialkoeffizienten bis zu einem gewissen n berechnet. Dss Kompilieren funktioniert noch wunderbar, jedoch berechnet er nichts. Egal was man für n eingibt es erscheint jedesmal nur n mal die 1. Entdeckt jemand von euch den Fehler irgendwo? Denk'  das irgendwas mit meiner Schleife in der Funktion binom nicht stimmt. Viele Grüße
jacob


#include <stdio.h>

int fakul(int a) {
int i,prod;
prod=1;
if(a==0)
return 1;
else
for(i=1;i<=a;i++) {
   prod=prod*i;
}
return prod;
}

void binom(int b) {
int i,j,ko;
for(i=0;i<=b;i++) {
for(j=0;j<=i;j++)
ko=fakul(i)/(fakul(j)*fakul(i-j));
printf("%i",ko);
[mm] printf("\n"); [/mm]

}}


main()
{

   int N;
   printf("Bitte n eingeben: ");
   scanf("%i",&N);
   binom(N);



}

        
Bezug
Programm funktioniert nicht: Antwort
Status: (Antwort) fertig Status 
Datum: 11:09 Do 02.06.2011
Autor: fencheltee

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

> Hallo,
>  Möchte gerne ein Programm in C schreiben welches die
> Binomialkoeffizienten bis zu einem gewissen n berechnet.
> Dss Kompilieren funktioniert noch wunderbar, jedoch
> berechnet er nichts. Egal was man für n eingibt es
> erscheint jedesmal nur n mal die 1. Entdeckt jemand von
> euch den Fehler irgendwo? Denk'  das irgendwas mit meiner
> Schleife in der Funktion binom nicht stimmt. Viele Grüße
>  jacob
>  
>
> #include <stdio.h>
>  
> int fakul(int a) {
>  int i,prod;
>  prod=1;
>  if(a==0)
>  return 1;
>  else
> for(i=1;i<=a;i++) {
>     prod=prod*i;
>  }
>  return prod;
>  }
>  
> void binom(int b) {
>   int i,j,ko;
>   for(i=0;i<=b;i++) {
>   for(j=0;j<=i;j++)
>   ko=fakul(i)/(fakul(j)*fakul(i-j));
>   printf("%i",ko);
>  [mm] printf("\n");[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)


>  
> }}
>  
>
> main()
>  {
>  
> int N;
>     printf("Bitte n eingeben: ");
>     scanf("%i",&N);
>     binom(N);
>  
>
>
> }

hallo, da mein zug gleich kommt nur ne kleine anmerkung:
du berechnest nen bruch (beim binom) speicherst und gibst aber als int aus!

gruß tee

Bezug
                
Bezug
Programm funktioniert nicht: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 11:49 Do 02.06.2011
Autor: jacob17

Vielen Dank für deine Antwort.
Habe nun ko als Typ double initialisiert. Jetzt erscheint jedoch statt n-mal der 1 der Wert 0 :( Stimmt eigentlich die Logik dieser for Schleifen? Zunächst ist i gleich Null dann wird die innere Schleife durchlaufen für j ist Null dann geht es mit der äußeren weiter mit i gleich eins dann in die innere mit j=0 und j=1; Eigentlich müsste man das doch so programmieren könenn?
jacob

Bezug
                        
Bezug
Programm funktioniert nicht: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 16:24 Do 02.06.2011
Autor: Event_Horizon

Hallo!

Ich bin auch etwas in Eile, und hab deine Schleifen nicht all zu genau geprüft.

Aber: Das Deklarieren von ko als double reicht u.U. nicht, weil die Division auf zwei INTs erfolgt, das Ergebnis sollte erstmal auch ein INT sein.
Evtl solltest du gleich bei der Berechnung der Fakultät ein DOUBLE benutzen. Das INT ist hier schlecht, weil es nen Maximalwert von 2,1Mrd hat, das wird bei Fakultäten schnell erreicht. Besser wäre ein UNSIGNED LONG, aber das DOUBLE hat den größen Zahlenbereich (Wenngleich die Anzahl der Stellen nicht so hoch ist wie beim UNSIGNED LONG)

Dann eine Optimierung: Du hast da ein [mm] \frac{i!}{j!} [/mm] mit $i>j_$ Überlege mal, daß sich da einiges rauskürzt, z.B. bei [mm] \frac{5!}{3!}=\frac{5*4*3*2*1}{3*2*1}=5*4 [/mm]

Das spart Rechenzeit, und die Zahlen werden nicht so groß.


Bezug
                        
Bezug
Programm funktioniert nicht: Antwort
Status: (Antwort) fertig Status 
Datum: 13:24 So 05.06.2011
Autor: MathePower

Hallo jacob17,

> Vielen Dank für deine Antwort.
> Habe nun ko als Typ double initialisiert. Jetzt erscheint
> jedoch statt n-mal der 1 der Wert 0 :( Stimmt eigentlich
> die Logik dieser for Schleifen? Zunächst ist i gleich Null
> dann wird die innere Schleife durchlaufen für j ist Null
> dann geht es mit der äußeren weiter mit i gleich eins
> dann in die innere mit j=0 und j=1; Eigentlich müsste man
> das doch so programmieren könenn?

In der Funktion void binom(int b) sind
geschweifte Klammern vergessen worden:

void binom(int b) {
int i,j,ko;
for(i=0;i<=b;i++) {
for(j=0;j<=i;j++)
{  
ko=fakul(i)/(fakul(j)*fakul(i-j));
printf("%i",ko);
/* [mm] printf("\n"); [/mm] */
}
}}


>  jacob


Gruss
MathePower

Bezug
                
Bezug
Programm funktioniert nicht: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:19 Do 02.06.2011
Autor: felixf

Moin!

> hallo, da mein zug gleich kommt nur ne kleine anmerkung:
>  du berechnest nen bruch (beim binom) speicherst und gibst
> aber als int aus!

Was so auch richtig ist. Binomialkoefizienten sind nunmal ganzzahlig :)

LG Felix


Bezug
        
Bezug
Programm funktioniert nicht: Antwort
Status: (Antwort) fertig Status 
Datum: 17:28 Do 02.06.2011
Autor: felixf

Moin!

>  Möchte gerne ein Programm in C schreiben welches die
> Binomialkoeffizienten bis zu einem gewissen n berechnet.
> Dss Kompilieren funktioniert noch wunderbar, jedoch
> berechnet er nichts. Egal was man für n eingibt es
> erscheint jedesmal nur n mal die 1. Entdeckt jemand von
> euch den Fehler irgendwo?

Du willst das printf("%i",ko); in der innersten Schleife jedes mal durchfuehren. Momentan wird es nur nach der innersten Schleife ausgefuehrt, und ko hat dort den Wert [mm] $\binom{i}{i} [/mm] = 1$.

Du musst also geschweifte Klammern verwenden :)


Aber ganz allgemein. Du verwendest hier den moeglichst unguenstigsten und problematischsten Weg, alle Binomialkoeffizienten auszurechnen. Problematisch deswegen, da die Fakultaeten gerne mal nicht mehr in ein int passen, obwohl der zugehoerige Binomialkoeffizient noch locker in ein int passt. Und unguenstig, da du sehr viele Dinge viel zu oft ausrechnest und dein Programm damit unnoetig lange rechnet.

Besser geht es so: erstelle ein zweidimensionales Array der Groesse $(N+1) [mm] \times [/mm] (N+1)$, von dem du alle Eintraege $(i, j)$ mit $j [mm] \le [/mm] i$ nutzt, und fuelle es mit Hilfe der Additionsformel fuer Binomialkoeffizienten so, dass an $(i, j)$ der Wert [mm] $\binom{i}{j}$ [/mm] steht.

Das kannst du mit [mm] $O(N^2)$ [/mm] Additionen bewerkstelligen, und die auftretenden ganzen Zahlen verlassen nur dann den Wertebereich eines ints, wenn die Binomialkoeffizienten selber nicht mehr reinpassen.

LG Felix


Bezug
                
Bezug
Programm funktioniert nicht: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 21:29 Do 02.06.2011
Autor: jacob17

Hallo,
Das mit dem Feld probier ich später gleich mal aus.
Habe jetzt hinter der inneren Schleife um mein printf und der Variablenzuweisung für ko geschweifte Klammern gesetzt. Jetzt erscheint aufjedenfall nicht mehr nur die eins :)
In der Aufgabenstellung heißt es man solle eine Funktion schreiben mit int bin(int n,int k), wobei die Ergebnisse in einem Pascalschen Dreieck ausgegeben werden sollen. Jedoch frage ich mich warum man der Funktion noch eine zweite Variable übergeben soll. Falls man das tut wird doch nur n über k berechnet und nicht alle Kombinationen mit [mm] 0\le [/mm] k [mm] \le [/mm] n Somit kann man die Funktion schon so stehen lassen obwohl ihr nur eine Variable übergeben wird?  Die Ausgabe ist jetzt schon ein Dreieck, jedoch stimmen die Reihenfolge und die Werte noch nicht ganz. Seid ihr sicher dass diese Schleifenkonstruktion der richtige Ansatz ist?
viele grüße
jacob

Bezug
                        
Bezug
Programm funktioniert nicht: Antwort
Status: (Antwort) fertig Status 
Datum: 02:01 So 05.06.2011
Autor: felixf

Moin!

>  In der Aufgabenstellung heißt es man solle eine Funktion
> schreiben mit int bin(int n,int k), wobei die Ergebnisse in
> einem Pascalschen Dreieck ausgegeben werden sollen.

Damit kannst du die Feld-Methode ignorieren. Du sollst das hier wohl ganz primitiv mit der Fakultaetsmethode erledigen.

> Jedoch
> frage ich mich warum man der Funktion noch eine zweite
> Variable übergeben soll. Falls man das tut wird doch nur n
> über k berechnet und nicht alle Kombinationen mit [mm]0\le[/mm] k
> [mm]\le[/mm] n

Genau. Die Funktion soll ja auch nur [mm] $\binom{n}{k}$ [/mm] berechnen fuer gegebenes $n$ und $k$.

Und dann sollst du eine verschachtelte Schleife machen (wie du das schon hast), in der fuer jede Kombination von $n$ und $k$ der Binomialkoeffizient [mm] $\binom{n}{k}$ [/mm] ausgerechnet und ausgegeben wird.

LG Felix


Bezug
                
Bezug
Programm funktioniert nicht: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 21:44 Do 02.06.2011
Autor: jacob17

Also die Reihenfolge und die Werte stimmen doch. Jedoch fehlt der obere rechte Rand der nur aus einsen besteht. Habe die Laufindizes i und j bereits von Null auf Eins erhöht. Sieht jemand von euch den Fehler?
jacob

Bezug
                        
Bezug
Programm funktioniert nicht: Antwort
Status: (Antwort) fertig Status 
Datum: 01:59 So 05.06.2011
Autor: felixf

Moin!

> Also die Reihenfolge und die Werte stimmen doch. Jedoch
> fehlt der obere rechte Rand der nur aus einsen besteht.
> Habe die Laufindizes i und j bereits von Null auf Eins
> erhöht. Sieht jemand von euch den Fehler?

Nunja, wenn du den Laufindex von i und j nicht bei 0 anfangen laesst, dann ist es auch kein Wunder dass die Einsen fehlen... Es ist doch [mm] $\binom{n}{0} [/mm] = 1$ fuer jedes $n$.

LG Felix


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de