Summenberechnung Horner Schema



  • Hey versuche gerade eine Aufgabe meines Lehrers zu meistern, (absoluter Anfänger). Lediglich der Teil des Horner Schemas ist interessant, bzw. von mir.

    Vermute, dass dort wo meine Smylies sind, die Summe immer wieder überschrieben wird. Wäre schön wenn ihr mal drüber schauen könntet, prinzipell kann ich aber nix groß am Aufbau ändern ist vorgegeben und ich muss nach Schema F arbeiten...
    Weiß das da viel Mist drin ist...

    Fehler: Gibt falsche Zahlen aus.

    Ziel: Die Summe der Ganzrationalen Funktion auszugeben.

    Gl&HF und danke 😉

    Hier der Code:

    #include "stdafx.h"
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    
    int ReadInt(int,int,char*);
    int Menue();
    void Fibonacci(int*,int);
    void FibAuslesen(int*,int);
    int HornerSchema(int*,int,int);
    void HornerFeldeinlesen(int*, int);
    void Message (char*, int);
    //--------------------------------------------------------------------------------------------------------------------------
    
    void main()
    {
     while (Menue());
    }//main
    //--------------------------------------------------------------------------------------------------------------------------
    // Funktionsdefinitionen
    //--------------------------------------------------------------------------------------------------------------------------
    int Menue ()
    {
     int Wahl=0;
     system("cls");
     printf("\n\n\t Abschlusspr\x81 \bfung Informatik ");
     printf("\n\n\t-----------------------------------------");
     printf("\n\n\tFibonacci-Zahlen......................(1)");
     printf("\n\n\tHornerschema..........................(2)");
     printf("\n\n\tBeenden...............................(o)");
     printf("\n\n\t-----------------------------------------");
     Wahl=ReadInt(0,2,"\n\n\tBitte Wählen: ");
     system("cls");
    
     switch (Wahl)
     {
     case 0: exit(1);//Programmende
     case 1: {
      const int N=30;
      int Fib[N];
      int FibAnzahl;
    
      printf("\n\n %s","\tFibonacci - Zahlen");
      FibAnzahl=ReadInt(0,30,"\n\n\tWieviele Fibonacci Zahlen? ");
      Fibonacci(Fib,FibAnzahl);
      FibAuslesen(Fib,FibAnzahl);
    
      getch();
       break;
       }
     case 2: {
        printf("\n\n\tHorner Schema");
     int Feld[1000];
    
     int n=ReadInt(0,6,"Bitte Polynomgrad eingeben");
     int x=ReadInt(-10,10,"Bitte Wert für X eingeben");
     HornerFeldeinlesen(Feld,n);
     printf("Summe %i" ,HornerSchema(Feld,n,x));
     getch();
    
       break;
        }
     }
     return(Wahl);
    }//Menue
    //--------------------------------------------------------------------------------------------------------------------------
    void Fibonacci (int*Fib,int FibAnzahl)
    {
    Fib[1]=1;
    Fib[2]=1;
    
    for(int i=3;i<=FibAnzahl+2;i++)
    {
    Fib[i]=Fib[i-1]+Fib[i-2];
    }
    
    }//Fibonacci
    //--------------------------------------------------------------------------------------------------------------------------
    void FibAuslesen (int*Fib,int FibAnzahl)
    {
     printf("\n\n");
     for(int i=3;i<=FibAnzahl+2;i++)
     {
      printf(" %4i ",Fib[i-2]);
     }
    
    }//FibAuslesen
    //--------------------------------------------------------------------------------------------------------------------------
    void HornerFeldeinlesen(int* HornerFeld, int n)
    {
     for(int i=n; i>=0;i--)
     {
      printf(" Koeffizient %i",i+1);
      HornerFeld[n-i]=ReadInt(-10,10,"\n\n\t a");
     }
    }// HornerFeldeinlesen
    
    int HornerSchema(int* HornerFeld, int x, int n)
    {
      int Summe=0;
    
     for(int i=n-1;i>=0;i--)
     {
      Summe= Summe *x +HornerFeld[i];        //:D :D
    
     }
      return Summe;
    
    }// Horner Schema
    
    int ReadInt(int UG,int OG,char* Text)
    {
     int Wahl=0;
     do
     {
      fflush(stdin);
      printf ("\n %s (%i...%i) ", Text,UG,OG);scanf("%i",&Wahl);
       if(Wahl<UG||Wahl>OG) printf("\a\n\n");
     }
     while (Wahl<UG||Wahl>OG);
     return Wahl;
    }//ReadInt
    //--------------------------------------------------------------------------------------------------------------------------
    void Message (char* Text, int Stop)
    {
      fflush(stdin);
     if(Text !="")
      printf(Text); //Text wird geschrieben
     if(Stop==1)
     {fflush(stdin);getchar();} //Programm wird angehalten
    }//Halt
    

    ~
    edit durch SeppJ: Codetags korrigiert.~


  • Mod

    Bist du ein Kollege oder versuchst du es erneut unter neuem Namen, da dir die alte Lösung nicht passte?
    http://www.c-plusplus.net/forum/325891

    Benutze bitte die Codetags korrekt, sonst liest sich niemand deinen Code durch. Benutze die Vorschau vorm Absenden, um zu prüfen, ob du alles richtig gemacht hast. Ausnahmsweise korrigiere ich die Tags mal für dich, weil dies dein erster Beitrag ist, in Zukunft solltest du selber drauf achten. Tags beginnen mit etwas wie [tag] und enden mit [/tag] . Die Buttons unter dem Editfenster funktionieren so:
    a) Text markieren, Button drücken -> markierter Text wird in entsprechende Tags gesetzt
    b) Button drücken -> Anfangstag wird an aktueller Cursorposition eingefügt. Button wird mit einem '*' markiert. Button erneut drücken -> Endtag wird eingefügt.

    Wutz Beitrag im anderen Thread sollte deine Frage halbwegs beantworten. Bereite dich darauf vor, dass gleich ein Shitstorm losgeht, wenn die Leute den Code sehen, den euer von C völlig ahnungsloser* Lehrer euch vorgegeben hat.

    *: Noch viel schlimmer ist wohl, dass das ja angeblich C++ sein soll 🙄 . Das Programm hat mit C++ so viel zu tun, wie dieser Text hier mit Französisch. Er verwendet die gleichen Buchstaben.



  • Dave1990 schrieb:

    Vermute, dass dort wo meine Smylies sind, die Summe immer wieder überschrieben wird.

    Das soll ja auch so sein. Zwei Reparaturen woanders reichen aus:

    Dave1990 schrieb:

    int n=ReadInt(0,6,"Bitte Polynomgrad eingeben");
     int x=ReadInt(-10,10,"Bitte Wert für X eingeben");
     HornerFeldeinlesen(Feld,n);
     printf("Summe %i" ,HornerSchema(Feld,n,x));
     getch();
    
    printf("Summe %i" ,HornerSchema(Feld,x,n));
    

    Dave1990 schrieb:

    int HornerSchema(int* HornerFeld, int x, int n)
    {
      int Summe=0;
     
    
     for(int i=n-1;i>=0;i--)
     {
      Summe= Summe *x +HornerFeld[i];        //:D :D
      
     }
      return Summe;
     
    }// Horner Schema
    
    for(int i=n;i>=0;i--)
    


  • doppelpost



  • Vielen Dank, ja bin ein Kollge was mir aber gerade zeigt wie aussichtslos unsere Situation sein muss wenn ich die selben Probleme habe. Habe mir Eure Posts durchgelesen, die nächsten kommen korrekt ins Forum.

    Und Danke für die Lösung, probiere ich direkt aus 🙂


Anmelden zum Antworten