Forum
Tipps
News
Menu-Icon

Exponentialfunktion in C annähern

Hallo!

Ich hoffe ihr könnt mir helfen. Ich studiere Bau- und Umweltingenieurwissenschaften im ersten Semester und lerne dort auch zu programmieren. Leider bin ich im Programmieren offensichtlich eine absolute Null und konnte bis jetzt nur 2 der 6 Hausübungen lösen und wenn ich noch 6 mehr nicht schaffe, kann ich das Semester in diesem Fach nicht beenden.

Die Angabe zur Hausübung habe ich angehängt und hier folgt meine Lösungsidee:


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

#define EXP 2.718281

int main()
 {
 int x, fak, n;
 double zwischenwert, expwert;
 
 
 printf("Bitte Zahl eingeben:");
 scanf("%d", &x);
 
 
 
 do
 {
   if(x<=-100)
      return EXIT_FAILURE;
 
   if(x<=0)
       {
       printf("Negative Zahl eingegeben. Bitte positive Zahl eingeben:");
       scanf("%d", &x);
       }
 
  }
 
 while (x>0);
 
 
    {
    expwert=0;
    fak=1;
    n=1;
   
    if(x<=30)
   
       {
       zwischenwert = pow(x,n) / fak;
       expwert = expwert + zwischenwert;
       n++;
       fak = fak * n;
      
      
      
      
       printf("Der angenäherte Wert ist: %.4lf\n", expwert);
       printf("Der reale Wert ist: %.4lf\n", pow(EXP, x));
       }
   
   
    }
 
 }


Die beiden ersten "ifs" Funktionieren, also diejenigen, die bei einer Zahl, die kleiner als 0 ist, eine Fehlermeldung ausgeben sollen. Bei der letzten allerdings hänge ich dann in einer Endlosschleife drinnen, in der Terminal kein Ergebnis ausrechnen kann und ich mit "ctrl c" abbrechen muss.

Ich wäre euch sehr dankbar, wenn mir jemand helfen und mir meine(n) Fehler erklären könnte.

LG Daniel 


Antworten zu Exponentialfunktion in C annähern:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Du hast eine do..while-Schleife, die nichts weiter macht, als die eigegebene Zahl zu prüfen, ob sie negativ ist und wenn ja, zur Eingabe einer positiven Zahl aufzufordern. Gibst du eine positive Zahl ein, läuft die Schleife ewig. Der zweite Teil deines Programms (unter dem while(x>0); wird *nie* durchlaufen, egal was du eingibst.
Du müsstest also eher sowas machen wie

while(1) {
    printf("Bitte positive Zahl eingeben:");
    scanf("%d", &x);

    if (x <= -100) {
        return EXIT_FAILURE;
    }
 
    if (x <= 0) {
        printf("Negative Zahl eingegeben.\n");
        continue; // Schleife von vorne beginnen
    }

    // Hier muss der Code stehen, der die Berechnungen durchführt
}

Ich bin jetzt nicht so das Mathe-Ass, aber steht in der Aufgabe, dass negative Zahlen nicht erlaubt sind? Oder lässt sich der Kram für negative Zahlen gar nicht berechnen?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Vielen Dank, mit deinem versteh ich auch, warum meine letzte Hausübung nicht funktioniert hat, mit der while Schleife funktioniert auch diese :)

Wegen deiner Frage: Die Angabe besagt, dass bei einem negativem Wert ein neuer, positiver, angefordert werden und bei einer Zahl kleiner -100 das Programm beendet werden soll.

Dadurch hat Terminal dann auch die positiven Werte ausgerechnet, allerdings war der Code für die Berechnung falsch. Danach habe ich folgenden Lösungsansatz versucht:


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

#define EXP 2.718281


long fak (long x)
{
  long i = 1, ergebnisfak = 1;
  for(i = 1; i <= x; i++)
  ergebnisfak = ergebnisfak * i;
  return ergebnisfak;
}

int main(void)
 {
 int x, fak, n;
 double zwischenwert, expwert, ergebnisfak;
 
 
 printf("Bitte Zahl eingeben:");
 scanf("%d", &x);
 
 
 
 while (1)
 {
   if(x<=-100)
       return EXIT_FAILURE;
 
   if(x<=0)
       {
       printf("Negative Zahl eingegeben. Bitte positive Zahl eingeben:");
       scanf("%d", &x);
       continue;
       }
 
    expwert=0;
    fak=1;
    n=1;
    ergebnisfak=0;
   
   
   
    zwischenwert = pow(x,n) / fak (x);
    expwert = expwert + zwischenwert;
    n++;
    ergebnisfak = fak (x);
   
    printf("fak: %2.10f\n", fak);
   
   
    printf("Der angenaeherte Wert ist: %2.10f\n", expwert);
    printf("Der reale Wert ist: %2.10f\n", pow(EXP, x));
   
    return EXIT_SUCCESS;

   
   
  }
 
 }

Ich habe also die Funktion "fak" definiert, allerdings meldet mir Terminal nun, dass fak keine Funktion sei. Diese hab ich aber aus der vorigen nun funktionierenden Hausübung, in welcher wie die Fakultät berechnen sollten, kopiert. An was könnte das liegen?

LG

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

So also das mit der Funktion hätte ich hingekriegt, allerdings stimmt der Rechencode immernoch nicht...

Hat irgendjemand eine Ahnung was der Fehler sein könnte?  ???

LG 


« Oracle: formatiert ausgebenRätselspaß - wer kann mir bei diesen Aufgaben helfen? »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Explorer
Der Windows Explorer, kurz Explorer, ist ein Dateiverwaltungsprogramm von Microsoft, das seit den früheren Versionen von Windows wie Windows 95 integraler Bestandt...

Express-Card
Die Express-Card ist eine neue Form von Erweiterungskarten für Laptops und andere tragbare Computer und der Nachfolger der PC-Card (auch PCMCIA Karte genannt). Die E...

Eingabefelder
Als Eingabefelder werden in einem Programm oder in Online-Formularen die Stellen bezeichnet, an denen Informationen eingetippt werden können. Die Beschriftung neben ...