Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hilfe ... hab ein problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ]
000
05.12.2003, 23:02 Uhr
~cosmic
Gast


hallo ... soll folgende aufgabe lösen... weiß aber nicht wie ...

Entwickeln sie ein C-Programm, welches nach Eingabe eines Quotienten q ( 0<q<1 ) die summe S=q+q^1+q^2+q^3+... einer unendlichen geometrischen reihe näherungsweise berechnet ...
Bei der Lösung der Summe darf die Summenformel S=1/(1/q) nicht verwendet werden ...


gruß
thorsten


wäre lieb wenn mir jemand helfen könnte
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.12.2003, 23:06 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


einfach eine schleifen nehmen. potenzieren kannst du mit hilfe der funktion pow.

wenn du nicht weiterkommst lass mal ein ansatz von dir sehen

ach so die Summe einer geometrichen reihe ist IMHO (1/1-q)
und die summe startet von null aus und nicht von 1. Soll heissen du musst mit q^0 anfangen was ja bekanntlich 1 ist

ich habe übrigens mal eine rätselaufgabe dazu gestellt. DIe sollte dir eigentlich weiterhelfen
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 05.12.2003 um 23:18 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.12.2003, 23:45 Uhr
Pablo
Supertux
(Operator)


wir sind kein Hausazfgaben-Service. Aber wenn du uns sagst, was du schon versucht hast, dann helfen wir dir. @Windalf hat dir schon ne Lösung gegeben, versuche sie zu realisieren. Wenn etwa schief geht, dann können wir dir helfen, aber wenn wir die Aufgaben für dich lösen, wirst du das nie lernen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.12.2003, 11:01 Uhr
~cosmic
Gast


hi ...
sorry wegen der hausaufgabe, ich weiß das man das normal nicht macht, bin aber irgendwie verzeifelt ...
die summenformel IMHO darf ich dafür ja nicht verwenden ...

hab das ganze jetzt so verstanden:

q ist dabei eine Zahl zwischen 0 und 1. Diese haben die Eigenschaft, dass ganzzahlige Potenzen von q kleiner sind als q.
Also: q > q^2 > q^3 usw.
Wenn man daraus die Summe bildet, also:
q + q^2 + q^3 + q^4 + ...
werden die Summanden immer kleiner. Das heißt, die Summe konvergiert gegen einen bestimmten Wert. Und den kann man berechnen.
Programmatisch kann man das ganze so umsetzen:
Man berechnet:
S(n) := q^1 + ... + q^n
bis zu einem gewissen Wert n. Dann vergleicht man S(n) mit S(n+1).
Ab einem gewissen Wert n wird q^(n+1) so klein, dass für den Rechner S(n) = S(n+1) - weil man ja nur mit einer eingeschränkten Genauigkeit rechnen. Das ist dann die Abbruchbedingung.

nur bin ich net wirklich in der lage das zu programmiern...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.12.2003, 11:38 Uhr
Pablo
Supertux
(Operator)


Das ist gar keine schlechte Idee.

Ich gebe dir ein Paar Ideen, die mir grad eingefallen sind.
Du musst es nur rekursiv machen.
1.

Code:
algorithmus geometrischereihe_aprox(wert,aprox)
    Variablen: wert - Fließkommazahl
                     aprox - Integer
{
    if (aprox == 0) return 1;
    return geometrischereihe_aprox(wert,aprox-1) + wert^aprox;
}



das ist ein einfacher Algorithmus, der sich fast genauso in C/C++ umschreiben lässt.
Laufzeit: O(n), aprox == n

2. Den Algorithmus von 1. benutzen und in eine for-Schleifen packen und überprüfen:

Code:
algorithmus geometrische(wert)
    Variablen: wert - Fließkommazahl
{
    do {
    n --> Wert, bei dem |geometrischereihe_aprox(wert,n-1) - geometrischereihe_aprox(wert,n)| <= epsilon > 0 ; setze flag FOUND als TRUE
    n --> n+1
    } while (FOUND == FALSE)
    return geometrischereihe_aprox(wert,n);
}



Laufzeit: OMEGA(n²), oder sogar expotential, ziemlich langsamer Algorithmus

3. Du fragst den Anwender, welche Aproximation er will, d.h. er muss die Grenze eingeben, bsp: 1000 und das Programm rechnet beispielsweise mit Tipp 1. den Wert.


Bearbeitung von Pablo:

Ich habe es implementiert, wie ich es gesagt habe, hat gut funktioniert. Ich poste das aber später!


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 06.12.2003 um 17:55 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.12.2003, 13:18 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hab gerade super viel langeweile deswegen mach ich mal schnell deine Hausaufgaben...
ich habs aber direkt ins forum gepostet und nicht kompiliert kann also auch falsch sein....

C++:
double geom_Reihe(double q,double delta){
double temp=0,summe=1+q,p=q;
if(fabs(q)>=1)return-1;
while(fabs(temp-(summe+=p*=q))>delta)temp=summe;
return summe;
}

int main(){
std::cout<<geom_Reihe(0.2,0.001)<<"\t"<< 1/(1-0.2)<<std::endl;;
return 0;
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.12.2003, 17:57 Uhr
Pablo
Supertux
(Operator)



C++:
#include <stdio.h>
#include <math.h>

#define EPSILON 0.01

float geo_aprox(float wert, int aprox)
{
    if (aprox <0)
        return -1; // Fehler!
    if ( !(fabs(wert) < 1-EPSILON) || !(fabs(wert) > 0+EPSILON) )
        return -1; // Fehler

    if(aprox==0) return 1;
    return geo_aprox(wert, aprox-1) + pow(wert, aprox);
}

int main()
{
    int a;
    float f,r;
    printf("Geben Sie die Zahl zwischen -1 und 1 ein: ");
    scanf("%f", &f);
    printf("Geben Sie die Aprox. ein: ");
    scanf("%d", &a);
    r = geo_aprox(f, a);
    if (r<0) {
        printf("Ein Fehler ist aufgetretten.\n");
        return 1;
    }
    printf("Die Geometrische Reihe für %f mit Aprox %d ist: %f\n",f,a,r);
    return 0;
}



So, das ist ein gutes schnelles (O(n)) Programm.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 06.12.2003 um 18:16 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.12.2003, 20:29 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@Pablo
meins ist geiler
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.12.2003, 21:42 Uhr
(un)wissender
Niveauwart


Das alte Thema
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.12.2003, 22:29 Uhr
Pablo
Supertux
(Operator)


@Windalf:
Meiner Meinung nach ist meins aber verständlicher und mathematisch näher , denn ich behandle die Geo Reihe als die Folge der Partialsummen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 06.12.2003 um 22:31 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: