matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Hochschulmathe
  Status Uni-Analysis
    Status Reelle Analysis
    Status UKomplx
    Status Uni-Kompl. Analysis
    Status Differentialgl.
    Status Maß/Integrat-Theorie
    Status Funktionalanalysis
    Status Transformationen
    Status UAnaSon
  Status Uni-Lin. Algebra
    Status Abbildungen
    Status ULinAGS
    Status Matrizen
    Status Determinanten
    Status Eigenwerte
    Status Skalarprodukte
    Status Moduln/Vektorraum
    Status Sonstiges
  Status Algebra+Zahlentheo.
    Status Algebra
    Status Zahlentheorie
  Status Diskrete Mathematik
    Status Diskrete Optimierung
    Status Graphentheorie
    Status Operations Research
    Status Relationen
  Status Fachdidaktik
  Status Finanz+Versicherung
    Status Uni-Finanzmathematik
    Status Uni-Versicherungsmat
  Status Logik+Mengenlehre
    Status Logik
    Status Mengenlehre
  Status Numerik
    Status Lin. Gleich.-systeme
    Status Nichtlineare Gleich.
    Status Interpol.+Approx.
    Status Integr.+Differenz.
    Status Eigenwertprobleme
    Status DGL
  Status Uni-Stochastik
    Status Kombinatorik
    Status math. Statistik
    Status Statistik (Anwend.)
    Status stoch. Analysis
    Status stoch. Prozesse
    Status Wahrscheinlichkeitstheorie
  Status Topologie+Geometrie
  Status Uni-Sonstiges

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
StartseiteMatheForenSoftwaretechnik und ProgrammierungProgramm funktioniert nicht
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
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.unimatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]