• 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

VPS Starter Arubacloud
0 głosów
779 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 251 wizyt
pytanie zadane 22 marca 2021 w C# przez Avernis Nałogowiec (27,400 p.)
0 głosów
1 odpowiedź 327 wizyt
0 głosów
1 odpowiedź 563 wizyt
pytanie zadane 12 września 2019 w Matematyka, fizyka, logika przez adam11 Użytkownik (570 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...