Problem z programem do wyliczenia funkcji sinus
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Problem z programem do wyliczenia funkcji sinus

AutorWiadomość
Temat założony przez niniejszego użytkownika
Problem z programem do wyliczenia funkcji sinus
» 2013-10-28 23:23:29
Przesyłam kod:
FUNKCJA:
C/C++
float stopnieNAradiany( float wartosc )
{
    float wynik;
    wynik =( wartosc / 180 ) * 3, 14;
    return wynik;
}



float sinus( float wartosc, int iteracje )
{
    float wynik = 0;
    int a = - 1, b;
    for( int n = 0; n < iteracje; n++ )
    {
        b =( 2 * n ) + 1;
        wynik = wynik + potega( a, n ) *( potega( wartosc, b ) / silnia( b ) );
    }
    return wynik;
}
Wywołanie funkcji:
C/C++
case '3':
{
   
    int wybor, iteracja;
    double wartosc, wynik;
   
    cout << "Podaj wartosc dla jakiej obliczyc sinus ";
    cin >> wartosc;
   
    cout << "Podaj ilosc iteracji ";
    cin >> iteracja;
    wartosc = stopnieNAradiany( wartosc );
   
   
    wynik = sinus( wartosc, iteracja );
    cout << "sinus (" << wartosc << ") wynosi: " << wynik << endl;
   
   
    system( "pause" );
    system( "cls" );
    break;
   
}
Problem mam taki, ze dla niektórych wartości kąta wynik wynosi 0 np dla sinusa 14 stopni i iteracji 10 wynik jest zero, a dobrze wiadomo, ze to nieprawidłowy wynik.
Co tutaj zmienic zeby to działało prawidłowo?
P-94753
» 2013-10-28 23:38:20
Być może dlatego,że mieszasz typy rzeczywiste.
Double i float mają inne dokładności.

Jak wygląda silnia ?

Daj cały kod .
P-94754
Temat założony przez niniejszego użytkownika
» 2013-10-28 23:43:44
C/C++
// Zadanie11.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>


using namespace std;




float poletrojkata( float a, float b, float c )
{
    float wynik;
    wynik =( sqrt(( a + b + c ) *( a + b - c ) *( a - b + c ) *( - a + b + c ) ) ) / 4;
    return wynik;
}


float silnia( int liczba )
{
    float wynik = 1;
   
    if( liczba != 1 || liczba != 0 )
    {
        for( int i = 2; i <= liczba; i++ )
        {
            wynik = wynik * i;
        }
    }
    return wynik;
   
}

float potega( int liczba, int potega )
{
    float wynik = 1;
   
    if( potega != 0 )
    {
        for( int i = 0; i < potega; i++ )
        {
            wynik = wynik * liczba;
        }
    }
    return wynik;
}

double stopnieNAradiany( double wartosc )
{
    double wynik;
    wynik =( wartosc / 180 ) * 3, 14;
    return wynik;
}



double sinus( double wartosc, int iteracje )
{
    double wynik = 0;
    int a = - 1, b;
    for( int n = 0; n < iteracje; n++ )
    {
        b =( 2 * n ) + 1;
        wynik = wynik + potega( a, n ) *( potega( wartosc, b ) / silnia( b ) );
    }
    return wynik;
}

int zamianaliter( char * tab, int n )
{
    for( int i = 0; i < n; i++ )
    {
        char tymczasowa;
        tymczasowa = tab[ i ];
        if( tymczasowa >= 'A' && tymczasowa <= 'z' )
        {
            if( tymczasowa >= 'A' && tymczasowa <= 'Z' )
            {
                tymczasowa = tymczasowa + 32;
                tab[ i ] = tymczasowa;
            }
            else
            {
                tymczasowa = tymczasowa - 32;
                tab[ i ] = tymczasowa;
            }
        }
        else { tab[ i ] = tymczasowa; }
    }
    return n;
}

int _tmain( int argc, _TCHAR * argv[] )
{
   
   
    char wybor;
    while( 1 )
   
   
    {
       
        cout << "  MENU:\n" << endl;
        cout << " (1) - Zadanie 1 (Oblicz wartosc potegi)" << endl;
        cout << " (2) - Zadanie 2 (Oblicz wartosc silni)" << endl;
        cout << " (3) - Zadanie 3 (Oblicz wartosc sinus)" << endl;
        cout << " (4) - Zadanie 4 (Oblicz pole trojkata)" << endl;
        cout << " (5) - Zadanie 5 (Zamiana wielkosci znakow)" << endl;
        cout << " (x) - Jesli chcesz zakonczyc prace z programem\n\n" << endl;
        cout << " Wybierz co chcesz zrobic" << endl;
        cin >> wybor;
       
       
       
        switch( wybor )
        {
        case 'X':
            {
                return 0;
            }
           
        case 'x':
            {
                return 0;
            }
        case '1':
            {
                int liczba, potega1;
               
                cout << "Podaj liczbe, ktora chcesz potegowac: " << endl;
                cin >> liczba;
                cout << "Podaj potege (wykladnik): " << endl;
                cin >> potega1;
               
                liczba = potega( liczba, potega1 );
               
                cout << "Twoja liczba to: " << liczba << endl << endl;
                system( "pause" );
                system( "cls" );
                break;
            }
           
        case '2':
            {
               
                float liczba;
               
                cout << "Podaj liczbe z ktorej chcesz wyliczyc silnie ";
                cin >> liczba;
               
                liczba = silnia( liczba );
               
                cout << "silnia wynosi " << liczba << endl << endl;
               
                system( "pause" );
                system( "cls" );
                break;
            }
        case '3':
            {
               
                int wybor, iteracja;
                double wartosc, wynik;
               
                cout << "Podaj wartosc dla jakiej obliczyc sinus ";
                cin >> wartosc;
               
                cout << "Podaj ilosc iteracji ";
                cin >> iteracja;
                wartosc = stopnieNAradiany( wartosc );
               
               
                wynik = sinus( wartosc, iteracja );
                cout << "sinus (" << wartosc << ") wynosi: " << wynik << endl;
               
               
                system( "pause" );
                system( "cls" );
                break;
               
            }
           
        case '4':
            {
               
                float a, b, c;
                float wynik;
                cout << " Wprowadz dlugosc boku a:\n" << endl;
                cin >> a;
                cout << " Wprowadz dlugosc boku b:\n" << endl;
                cin >> b;
                cout << " Wprowadz dlugosc boku c:\n" << endl;
                cin >> c;
                wynik = poletrojkata( a, b, c );
                cout << "Pole trojkata wynosi:" << wynik << endl;
               
                system( "pause" );
                system( "cls" );
                break;
               
            }
        case '5':
           
            {
               
               
                int n = 100, zmienna = 0;
                char tablica[ 100 ];
               
               
                cout << "Podaj znaki do zapisania : ";
                cin >> tablica;
               
               
                zamianaliter( tablica, n );
               
                cout << tablica << endl;
               
               
            }
           
           
           
           
            cout << "To juz ostatnie zadanie jakie wykonuje program, dziekuje za skorzystanie z programu" << endl << endl;
           
            system( "pause" );
            system( "cls" );
            break;
           
        }
    }
   
}
P-94755
» 2013-10-28 23:48:53
pi nie jest równe 3.
P-94756
Temat założony przez niniejszego użytkownika
» 2013-10-28 23:52:53
Nadal nie wiem co poprawić :)
P-94757
» 2013-10-29 00:38:12
Funkcja potega obcina cześć ułamkową aragumentu.

Poza tym, przy obliczaniu silni i potęgi można wykorzystać ich wartości z poprzedniej iteracji.
P-94760
Temat założony przez niniejszego użytkownika
» 2013-10-29 00:48:13
Z wyświetlaniem po przecinku sobie poradziłem :) To powiedz mi jak prawidłowo usunąc tą iteracje. Bo kiedy ja usuwam to mam błąd, ze funkcja potrzebuje 2 argumentów :)
P-94761
» 2013-10-29 15:28:36
C/C++
double stopnieNAradiany( double wartosc )
{
    double wynik;
    wynik =( wartosc / 180 ) * 3, 14;
    return wynik;
}
3,14 != 3.14
P-94777
« 1 »
 Strona 1 z 1