#1 2010-11-10 21:02:35

Micah

Użytkownik

Zarejestrowany: 2010-11-06
Posty: 92
Punktów :   

Lab3

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

 

#2 2010-11-10 21:59:17

mess

Użytkownik

3038132
Zarejestrowany: 2010-10-21
Posty: 17
Punktów :   

Re: Lab3

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

 

#3 2010-11-19 18:00:57

Hubert_J

Nowy użytkownik

Zarejestrowany: 2010-11-19
Posty: 4
Punktów :   

Re: Lab3

Zadanie domowe (horner z menu)

Kod:

// 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

 

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
przegrywanie kaset hi8 ,digital8 ,video8 warszawa