• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

liczenie całki przybliżonej C

Object Storage Arubacloud
0 głosów
808 wizyt
pytanie zadane 8 czerwca 2016 w C i C++ przez Filius Gaduła (4,120 p.)

męczę się z napisaniem prostego programu do liczenia całek metodą prostokątów

może ktoś znajdzie błąd

​
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
#define L_PRZEDZIALOW 1000


double calka(double f(double x), double a, double b, double delta);

int main()
{
    double a, b;
    puts("Podaj a i b:");
    scanf("%d%d", &a, &b);
    double delta = (double) abs(b-a)/ (double)L_PRZEDZIALOW;

    double wynik = calka(sin(a), a, b, delta);

    printf("Wynik calki: %lf", wynik);

    return 0;
}

double calka(double f(double x), double a, double b, double delta)
{
    double suma=0;
    for(int i=0;  i < L_PRZEDZIALOW; i++)
    {
        suma += f((double)a+i*delta)*delta;
    }
    return suma;
}

1 odpowiedź

0 głosów
odpowiedź 8 czerwca 2016 przez draghan VIP (106,230 p.)
wybrane 8 czerwca 2016 przez Filius
 
Najlepsza
  1. Zamiarujesz wczytać double, w łańcuchu formatującym oczekujesz typów całkowitych.
  2. Masz błąd w wywołaniu funkcji calka() - chciałbyś przekazać do tej funkcji adres funkcji sin(), zaś Ty wywołujesz funkcję sin() z parametrem a.
komentarz 8 czerwca 2016 przez Filius Gaduła (4,120 p.)

ok 1 błąd to zmieniałem typ zmiennych zapomniałem zmienić w scanf

ad 2 to mam funkcję calka()

przerobić na  double calka(double *f(double x), double a, double b, double delta);

tylko co podać jako argument funkcji sin() ?

komentarz 8 czerwca 2016 przez draghan VIP (106,230 p.)

Co do 2. Możesz przerobić, chociaż to i tak (przynajmniej w GCC) działa.
Zauważ, że Ty nie chcesz podawać w wywołaniu funkcji calka() argumentu do sin(), bo to spowoduje po prostu wywołanie sin().

Powinieneś podać po prostu adres funkcji sin(), bez żadnego argumentu. Możesz to zrobić dwojako.

double wynik = calka(&sin, a, b, delta); // za pomocą operatora referencji - zauważ brak nawiasów dla argumentów
double wynik = calka(sin, a, b, delta); // lub po prostu przy pomocy nazwy funkcji - brak nawiasów dla argumentów jest dla kompilatora wystarczającą wskazówką

 

Podobne pytania

0 głosów
0 odpowiedzi 266 wizyt
pytanie zadane 22 marca 2021 w C# przez Avernis Nałogowiec (27,400 p.)
0 głosów
1 odpowiedź 341 wizyt
0 głosów
1 odpowiedź 591 wizyt
pytanie zadane 12 września 2019 w Matematyka, fizyka, logika przez adam11 Użytkownik (570 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...