Moze mi to ktoś sprawdzić, ten programik z schematem Horner'a coś naskrobałem ale wychodzą złe wyniki.
#include "stdafx.h"
int n,y;
int x,A[100];
int _tmain(int argc, _TCHAR* argv[])
{
fprintf(stderr,"Podaj stopien wielomianu: ");
scanf_s("%d",&n);
fprintf(stderr,"Podaj x: ");
scanf_s("%d",&x);
fprintf(stderr,"Podaj wspolczynniki: \n");
for (int i=0;i<=n;i++)
scanf_s("%d",&A[i]);
for (int i=n;i>=0;i--)
y=y*x+A[i];
printf("Wartosc wielomianu = %d\n",y);
return 0;
}
Offline
double horner(double coefficients[], int n, double x)
{
double result = coefficients[n];
for (int i = n - 1; i >= 0; --i) {
result = result * x + coefficients[i];
}
return result;
}
spróbuj z tą funkcją :) zdaje się działać poprawnie
Offline
Zadanie domowe (horner z menu)
// Horner_menu.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <conio.h> #include <iostream> #include <vector> #include <direct.h> using namespace std; vector<double> WczytWspol(int stopien){ vector<double> wspol; printf("Podaj wspolczynniki \n"); //wczytanie w tablice vector for(int i=0; i<=stopien; i++){ double temp= 0; printf("a[%d]= ", i); scanf_s("%lf", &temp); wspol.push_back(temp); } return wspol; } int WczytStopien(){ int stopien= -1; while(stopien < 0){ printf("Podaj stopien wielomianu: "); scanf_s("%d", &stopien); printf("\n"); } return stopien; } double WczytX(){ double ix; printf("Podaj wartosc x: "); scanf_s("%lf", &ix); return ix; } void WypiszWspol(vector<double> wspol, int stopien){ for(int i=0; i<=stopien; i++){ printf("%d : a[%d]= %lf\n", i, i, wspol[i]); } } void Horner( vector<double> a, int n, double x ) { double result = a[n]; for(int i=n-1; i >= 0 ; --i) result = result * x + a[i]; printf("Wynik: %lf \n", result); } void Swap1(vector<double> wspol, int stopien){ system("cls"); int zam[2]; double temp; WypiszWspol(wspol, stopien); printf("Podaj pierwszy wspolczynnik do zamiany: "); scanf_s("%d", &zam[0]); printf("Podaj drugi wspolczynnik do zamiany: "); scanf_s("%d", &zam[1]); temp= wspol[zam[0]]; wspol[zam[0]]= wspol[zam[1]]; wspol[zam[1]]= temp; system("cls"); WypiszWspol(wspol, stopien); system("pause"); } int _tmain(int argc, _TCHAR* argv[]) { int stopien= -1; vector<double> wspol; double ix; int menu= 1, quit=0; while(!quit){ system("cls"); printf("1 - policz nowy wielomian\n"); if(stopien>=0){ printf("2 - edytuj wspolczynniki\n"); printf("3 - zmien x\n"); printf("4 - pokaz wynik\n"); printf("5 - zamien wspolczynniki miejscami\n"); } printf("6 - wyjdz\n\n"); scanf_s("%d", &menu); switch(menu){ case 4: system("cls"); Horner(wspol, stopien, ix); system("pause"); break; case 5: Swap1(wspol, stopien); break; case 6: quit= 1; break; case 3: system("cls"); printf("Podaj nowy x: "); scanf_s("%lf", &ix); Horner(wspol, stopien, ix); system("pause"); break; case 1: system("cls"); stopien= WczytStopien(); wspol= WczytWspol(stopien); ix= WczytX(); Horner(wspol, stopien, ix); system("pause"); break; case 2: int nastepny= 1; while(nastepny==1){ system("cls"); WypiszWspol(wspol, stopien); int wybor= -1; double nowy= 0; printf("Ktory wspołczynnik chcesz edytowac? "); scanf_s("%d", &wybor); printf("\nPodaj nowa wartosc: "); scanf_s("%lf", &nowy); wspol[wybor]= nowy; system("cls"); printf("\n Edytowac kolejny? \n"); printf("1 - TAK\n"); printf("2 - NIE\n"); scanf_s("%d", &nastepny); } Horner(wspol, stopien, ix); system("pause"); break; } } return 0; }
Offline