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 Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

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:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenC/C++for-Schleifen (C)
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Informatik • Physik • Technik • Biologie • Chemie
Forum "C/C++" - for-Schleifen (C)
for-Schleifen (C) < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

for-Schleifen (C): Hilfe, Korrektur, Tipp
Status: (Frage) beantwortet Status 
Datum: 14:14 So 09.12.2012
Autor: Mija

Hallo, ich habe ein Problem mit zwei Schleifen. Undzwar will ich die Länge von den Diagonalen in einem n-Eck berechnen. Dabei sollen soviele verschiedene Diagonallängen ausgegeben werden, wie es verschiedene Diagonallängen in einem regelmäßigen n-Eck gibt.

Nun bekomme ich zwar bisher soviele Ergebnisse ausgegeben, wie es Diagonallängen gibt. Aber ich bekomme immer nur die zuletzt berechnete Diagonallänge als Ergebnis ausgegeben.

Wenn ich das "return laengeDiagonalen;" in meine erste for-Schleife (die unter den Funktionsdefinitionen) reinziehe, dann kommen jedoch total sinnlose negative Werte heraus.

Hier sind mal die wichtigsten Eckpunkte meines Codes:

#include <stdio.h>
#include <math.h>

#define PI 3.14592653689793

//Funktionsdeklarationen
double klBerechnen(double, int);
double umfangBerechnen(int, double);
double flaecheBerechnen(double,int);
double innererWinkelBerechnen(int);
int anzahlDiagonalen(int);
double laengeDiagonalen(double,int);


//Funktionsdefinitionen

...

double laengeDiagonalenBerechnen(double radius, int anzahlDiagonalen)
{
double laengeDiagonalen;
int i;
for (i=1; i <= anzahlDiagonalen; i++)
{
laengeDiagonalen = 2*radius*sin(2*PI*180/(360*i)); //Umrechnung Grad in Bogenmaß beachten!
}
return laengeDiagonalen;
}


//Main-Programm

int main(void) {

//Definition lokaler Variablen
double radius;
int anzahlEcken;
double kantenlaenge;
double umfang;
double flaeche;
double innererWinkel;
int anzahlDiagonalen;
double laengeDiagonalen;
int k;

//Eingabe
...


//Ausgabe

...

laengeDiagonalen = laengeDiagonalenBerechnen(radius,anzahlDiagonalen);
for (k=1; k <= anzahlDiagonalen; k++)
{
printf("Diagonale k=%d: [mm] %lf\n", [/mm] k, laengeDiagonalen);
}

...

}


/*Codeende*/


Ich weiß, ich muss eine (oder beide?) meiner for-Schleifen in Abhängigkeit von i schreiben, d.h. für die obere in etwa:

double laengeDiagonalenBerechnen(double radius, int anzahlDiagonalen)
{
double laengeDiagonalen[50];
int i;
for (i=1; i <= anzahlDiagonalen; i++)
{
laengeDiagonalen[i] = 2*radius*sin(2*PI*180/(360*i)); //Umrechnung Grad in Bogenmaß beachten!
}
return laengeDiagonalen[i];
}


Aber irgendwie funktioniert das so auch alles noch nicht.

Kann mir bitte jemand behiflich sein?

        
Bezug
for-Schleifen (C): Antwort
Status: (Antwort) fertig Status 
Datum: 17:04 So 09.12.2012
Autor: MathePower

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 Mija,

> Hallo, ich habe ein Problem mit zwei Schleifen. Undzwar
> will ich die Länge von den Diagonalen in einem n-Eck
> berechnen. Dabei sollen soviele verschiedene
> Diagonallängen ausgegeben werden, wie es verschiedene
> Diagonallängen in einem regelmäßigen n-Eck gibt.
>  
> Nun bekomme ich zwar bisher soviele Ergebnisse ausgegeben,
> wie es Diagonallängen gibt. Aber ich bekomme immer nur die
> zuletzt berechnete Diagonallänge als Ergebnis ausgegeben.
>
> Wenn ich das "return laengeDiagonalen;" in meine erste
> for-Schleife (die unter den Funktionsdefinitionen)
> reinziehe, dann kommen jedoch total sinnlose negative Werte
> heraus.
>  


Da musst Du den Betrag dieses Wertes nehmen.


> Hier sind mal die wichtigsten Eckpunkte meines Codes:
>  
> #include <stdio.h>
>  #include <math.h>
>  
> #define PI 3.14592653689793
>  
> //Funktionsdeklarationen
>  double klBerechnen(double, int);
>  double umfangBerechnen(int, double);
>  double flaecheBerechnen(double,int);
>  double innererWinkelBerechnen(int);
>  int anzahlDiagonalen(int);
>  double laengeDiagonalen(double,int);
>  
>
> //Funktionsdefinitionen
>  
> ...
>  
> double laengeDiagonalenBerechnen(double radius, int
> anzahlDiagonalen)
>  {
>   double laengeDiagonalen;
>   int i;
>   for (i=1; i <= anzahlDiagonalen; i++)
>   {
>   laengeDiagonalen = 2*radius*sin(2*PI*180/(360*i));
> //Umrechnung Grad in Bogenmaß beachten!
>   }
>   return laengeDiagonalen;
>  }

>

>
> //Main-Programm
>  
> int main(void) {
>  
> //Definition lokaler Variablen
>   double radius;
>   int anzahlEcken;
>   double kantenlaenge;
>   double umfang;
>   double flaeche;
>   double innererWinkel;
>   int anzahlDiagonalen;
>   double laengeDiagonalen;
>   int k;
>  
> //Eingabe
>  ...
>  
>
> //Ausgabe
>  
> ...
>  
> laengeDiagonalen =
> laengeDiagonalenBerechnen(radius,anzahlDiagonalen);
>   for (k=1; k <= anzahlDiagonalen; k++)
>   {
>   printf("Diagonale k=%d: [mm]%lf\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)

k, laengeDiagonalen);

>   }
>  
> ...
>  
> }
>  
>
> /*Codeende*/
>  
>
> Ich weiß, ich muss eine (oder beide?) meiner for-Schleifen
> in Abhängigkeit von i schreiben, d.h. für die obere in
> etwa:
>  
> double laengeDiagonalenBerechnen(double radius, int
> anzahlDiagonalen)
>  {
>   double laengeDiagonalen[50];
>   int i;
>   for (i=1; i <= anzahlDiagonalen; i++)
>   {
>   laengeDiagonalen = 2*radius*sin(2*PI*180/(360*i));
> //Umrechnung Grad in Bogenmaß beachten!
> }
> return laengeDiagonalen;
> }
>
>
> Aber irgendwie funktioniert das so auch alles noch nicht.
>


Muss des Formel zur Berechnung der Diagonalenlängen nicht so lauten:

[mm]laengeDiagonalen = 2*radius*sin(2*PI*\blue{i}*180/360); [/mm]

Das Feld laengeDiagonalen muss global sein.


> Kann mir bitte jemand behiflich sein?


Gruss
MathePower

Bezug
                
Bezug
for-Schleifen (C): Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:01 So 09.12.2012
Autor: Mija

Danke für den Hinweis zu der Formel! :)

Also jetzt sieht es bei mir so aus:

#include <stdio.h>
#include <math.h>

#define PI 3.14592653689793

//Funktionsdeklarationen
double klBerechnen(double, int);
double umfangBerechnen(int, double);
double flaecheBerechnen(double,int);
double innererWinkelBerechnen(int);
int anzahlDiagonalen(int);
double laengeDiagonalen(double,int,int);
double laengeDiagonalenArray[50];


//Funktionsdefinitionen

...

double laengeDiagonalenBerechnen(double radius, int anzahlDiagonalen, int anzahlEcken)
{
double laengeDiagonalen;
int i;
for (i=1; i <= anzahlDiagonalen; i++)
{
laengeDiagonalenArray[i] = 2*radius*sin(2*PI*i*180/(360*anzahlEcken)); //Umrechnung Grad in Bogenmaß beachten!
laengeDiagonalen = laengeDiagonalenArray[i];
}
return laengeDiagonalen;
}


//Main-Programm

int main(void)
{

//Definition lokaler Variablen
double radius;
int anzahlEcken;
double kantenlaenge;
double umfang;
double flaeche;
double innererWinkel;
int anzahlDiagonalen;
double laengeDiagonalen;
int k;

//Eingabe
...
  
//Ausgabe

...

laengeDiagonalen = laengeDiagonalenBerechnen(radius, anzahlDiagonalen, anzahlEcken);
for (k=1; k <= anzahlDiagonalen; k++)
{
printf("Diagonale k=%d: [mm] %lf\n", [/mm] k, laengeDiagonalen);
}

return 0;

}


Nun gibt er mir zwei Ergebnisse aus, aber immer nur die kürzeste Diagonale.

Bezug
                        
Bezug
for-Schleifen (C): Antwort
Status: (Antwort) fertig Status 
Datum: 18:28 So 09.12.2012
Autor: MathePower

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 Mija,

> Danke für den Hinweis zu der Formel! :)
>  
> Also jetzt sieht es bei mir so aus:
>  
> #include <stdio.h>
>  #include <math.h>
>  
> #define PI 3.14592653689793
>  
> //Funktionsdeklarationen
>  double klBerechnen(double, int);
>  double umfangBerechnen(int, double);
>  double flaecheBerechnen(double,int);
>  double innererWinkelBerechnen(int);
>  int anzahlDiagonalen(int);
>  double laengeDiagonalen(double,int,int);
>  double laengeDiagonalenArray[50];
>  
>
> //Funktionsdefinitionen
>  
> ...
>  
> double laengeDiagonalenBerechnen(double radius, int
> anzahlDiagonalen, int anzahlEcken)
>  {
>   double laengeDiagonalen;
>   int i;
>   for (i=1; i <= anzahlDiagonalen; i++)
>   {
>   laengeDiagonalenArray =
> 2*radius*sin(2*PI*i*180/(360*anzahlEcken)); //Umrechnung
> Grad in Bogenmaß beachten!
> laengeDiagonalen = laengeDiagonalenArray;
> }
> return laengeDiagonalen;
> }
>
>
> //Main-Programm
>
> int main(void)
> {
>
> //Definition lokaler Variablen
> double radius;
> int anzahlEcken;
> double kantenlaenge;
> double umfang;
> double flaeche;
> double innererWinkel;
> int anzahlDiagonalen;
> double laengeDiagonalen;
> int k;
>
> //Eingabe
> ...
>     
> //Ausgabe
>
> ...
>
> laengeDiagonalen = laengeDiagonalenBerechnen(radius,
> anzahlDiagonalen, anzahlEcken);
> for (k=1; k <= anzahlDiagonalen; k++)
> {
> printf("Diagonale k=%d: [mm]%lf\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)

k, laengeDiagonalen);

> }
>
> return 0;
>
> }
>
>
> Nun gibt er mir zwei Ergebnisse aus, aber immer nur die
> kürzeste Diagonale.


In der Funktion laengeDiagonalenBerechnen ist doch das Array
mit den Absolutwerten der Formel zu füllen.

Demach so:

laengeDiagonalenArray[i] =2*radius*abs(sin(2*PI*i*180/(360*anzahlEcken)));

Auszugeben ist doch laengeDiagonalenArray[k].

Willst Du die kürzeste und längste Diagonale bestimmen,
so ist eine Funktion zu schreiben,die das bewerkstelligt.


Gruss
MathePower

Bezug
                                
Bezug
for-Schleifen (C): Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 19:47 So 09.12.2012
Autor: Mija

Ich dachte, ich kann mit der Funktion laengeDiagonalenBerechnen schon alle Diagonallängen berechnen lassen? (also nicht nur die kürzeste und längste, sondern soviele wie es verschiedene Diagonallängen in dem betreffenden n-Eck gibt)

So dass ich die dann im Main-Programm nur noch ausgeben lassen muss..

Bezug
                                        
Bezug
for-Schleifen (C): Antwort
Status: (Antwort) fertig Status 
Datum: 20:10 So 09.12.2012
Autor: MathePower

Hallo Mija,

> Ich dachte, ich kann mit der Funktion
> laengeDiagonalenBerechnen schon alle Diagonallängen
> berechnen lassen? (also nicht nur die kürzeste und
> längste, sondern soviele wie es verschiedene
> Diagonallängen in dem betreffenden n-Eck gibt)
>  


Genau so ist es.


> So dass ich die dann im Main-Programm nur noch ausgeben
> lassen muss..


Gruss
MathePower

Bezug
                                                
Bezug
for-Schleifen (C): Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 16:34 Mo 10.12.2012
Autor: Mija

Sollte meine Schleife nicht schon dieWerte für ALLE Diagonalen verschiedener Längen ausgeben? (es ist doch eine for-Schleife..)

Oder wo ist mein Denkfehler?

Bezug
                                                        
Bezug
for-Schleifen (C): Antwort
Status: (Antwort) fertig Status 
Datum: 17:27 Mo 10.12.2012
Autor: link963


> Sollte meine Schleife nicht schon dieWerte für ALLE
> Diagonalen verschiedener Längen ausgeben? (es ist doch
> eine for-Schleife..)
>  
> Oder wo ist mein Denkfehler?

Natürlich geht das. Aber:

> double laengeDiagonalenBerechnen(double radius, int anzahlDiagonalen, int anzahlEcken)
> {
> double laengeDiagonalen;
> int i;
> for (i=1; i <= anzahlDiagonalen; i++)
> {
> laengeDiagonalenArray[i] = 2*radius*sin(2*PI*i*180/(360*anzahlEcken)); //Umrechnung Grad in Bogenmaß beachten!

Das ist soweit ok.

> laengeDiagonalen = laengeDiagonalenArray[i];

Hier gibst du der Variable "laengeDiagonalen" in jedem Durchlauf einen neuen Wert. Erst nachdem die Schleife alle i abgelaufen hat, wird zum nächsten Schritt gegangen.

> }
> return laengeDiagonalen;

laengeDiagonalen kann nur einen Wert haben. Welcher ist das nach Beenden der for-Schleife ?

> }


> //Main-Programm

> int main(void)
> {

> //Definition lokaler Variablen
> double radius;
> int anzahlEcken;
> double kantenlaenge;
> double umfang;
> double flaeche;
> double innererWinkel;
> int anzahlDiagonalen;
> double laengeDiagonalen;
> int k;

> //Eingabe
> ...

  

> //Ausgabe

> ...

> laengeDiagonalen = laengeDiagonalenBerechnen(radius, anzahlDiagonalen, anzahlEcken);
> for (k=1; k <= anzahlDiagonalen; k++)
> {
> printf("Diagonale k=%d: $ [mm] %lf\n", [/mm] $ k, laengeDiagonalen);

Für jeden Schleifendurchlauf hat deine Variable "laengeDiagonalen" den gleichen Wert. Du musst hier die Feldwerte laengeDiagonalenArray[k] ausgeben lassen, die du eigentlich alle schon berechnet hast in deiner laengeDiagonalenBerechnen Mehode.

> }

> return 0;

> }


Gruß link963

Bezug
                
Bezug
for-Schleifen (C): Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:11 So 09.12.2012
Autor: felixf

Moin!

> Muss des Formel zur Berechnung der Diagonalenlängen nicht
> so lauten:
>  
> [mm]laengeDiagonalen = 2*radius*sin(2*PI*\blue{i}*180/360);[/mm]

Sollte da nicht noch $n$ auftauchen, da es doch um regelmaessige $n$-Ecke geht?

> Das Feld laengeDiagonalen muss global sein.

Oder an die Funktion uebergeben werden, damit diese dort Werte reinschreiben kann.

LG Felix


Bezug
                        
Bezug
for-Schleifen (C): Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:18 So 09.12.2012
Autor: Mija

Ja, genau, die Formel lautet richtig:

$ laengeDiagonalen = [mm] 2\cdot{}radius\cdot{}sin(2\cdot{}PI\cdot{}\blue{i}\cdot{}180/(360*n)); [/mm] $

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


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