logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak napisać program w Pascalu do obliczania pola pod wykresem funkcji?

trelek 13 Kwi 2007 09:02 8428 11
REKLAMA
  • #1 3782767
    trelek
    Poziom 14  
    Posty: 134
    Pomógł: 4
    Ocena: 5
    Witam :!:

    Potrzebuję napisać program liczący pole pod wykresem dowolnej funkcji...
    przy zdefiniowanym przedziale X'ów
    Z tego co wiem, ma on dzielić pole pod wykresem na b.małe prostokąty i je sumować. Pachnie mi tu całką, której z resztą nie miałem... :/

    Program najlepiej w pascalu, VBasic, czy C++ również mile widziany :)

    Z góry ogromne dzięki :!:
  • REKLAMA
  • Pomocny post
    #2 3783284
    radekr
    Poziom 16  
    Posty: 122
    Pomógł: 11
    Ocena: 5
    trelek napisał:
    Witam :!:
    ....
    Z tego co wiem, ma on dzielić pole pod wykresem na b.małe prostokąty i je sumować.
    ...
    :


    Dokładnie, ma to działać tak jak napisałeś. Dzielisz przedział "X'ów" na odpowiednio dużą ilość podprzedziałów, a następnie sumujesz po tych podprzedziałach iloczyn jego szerokości i wartości funkcji w tym podprzedziale (na jego środku, albo na początku)

    P.S. Podałem jedynie "powierzchowny" opis metody, jeśli jest to zadanie na metody numeryczne to jednak radze zerknąć do literatury fachowej, choćby po to aby wiedzieć jak dobrać ilość podprzedziałów, czy też jakim błędem obarczony jest uzyskaną za jej pomocą wynik.
    P.S.2 Zgodnie z "Zasady pisania postów i FAQ "Programowanie Ogólne"" nie można prosić o podanie gotowego rozwiązania problemu, sugeruję więc próbę samodzielnego napisania programu, a w przypadku pojawienia się jakiś konkretnych problemów zadawanie tu pytań, na pewno ktoś pomoże.
  • #3 3783303
    trelek
    Poziom 14  
    Posty: 134
    Pomógł: 4
    Ocena: 5
    Heh... no nie wiele mi się rozjaśniło, bo to, to ja wiedziałem... bardziej mi chodziło o bardziej "techniczny" opis, no ale i tak dzięki :wink:
  • REKLAMA
  • REKLAMA
  • #5 3783366
    Konto nie istnieje
    Konto nie istnieje  
  • #6 3784299
    trelek
    Poziom 14  
    Posty: 134
    Pomógł: 4
    Ocena: 5
    WojcikW dzięki, ale na razie nie trzeba.. :) spróbuje zrobić to sam :) - a nuż się dowartościuje :)

    zaytzev wielkie dizęki :wink:

    tylko pojawił się problem. pisze to wszystko w pascalu (no cóż, język szkolny :P ) i mam problem jak zdefiniować zmienną czy coś, żeby można było podać własną funkcję. by nie była stała, a definiowalna... Ta z linku od zaytzev jest stała...

    na razie mam tyle :

    program pole pod wykresem;
    
    const
    n=1000;
    
    function f(x : real) : real;  /
    begin                               /
      f := x * x;                      /--> potrzeba mi zmienić tą czesć, by 
    end;                                 /    zamiast stałej, była tu zmienna...
                                           /
    var
    x1, x2, s, d : real;
    i : integer;
    begin
    write ('podaj początek przedziału x1= ');
    readln (x1);
    write ('podaj początek przedziału x2= ');
    readln (x2);
    
    s:=0;
    d:=(x2-x1)/n;
    
    for i:= 1 to n do s:= s+ f(x1 + i*d);
    s:= s*d;
    
    writeln('wartość pola pod wykresem wynosi: ',s:8:3);
    end.


    any idea :?:
  • #7 3784511
    zaytzev
    Poziom 13  
    Posty: 51
    Pomógł: 6
    Ocena: 6
    Najprościej, jeżeli zrobisz wybór kilku określonych funkcji.
    Żeby wprowadzać własną funkcję musiałbyś zrobić parser strumienia wejściowego z konwersją np. na odwrotną notację polską. Ale to jest już dość skomplikowane i raczej zadaje się to studentom na bardziej zaawansowanym poziomie.
  • #8 3784731
    trelek
    Poziom 14  
    Posty: 134
    Pomógł: 4
    Ocena: 5
    hehe... :) nie to raczej nie dla mnie :)

    A czy mógłbyś napisać fragment kodu, czy coś podobnego, bo szczerze mówiąc nie wiem jak się do tego zabrać. Wiem co masz namyśli, rodzaj :
    1. dla x2
    2. dla x3
    3. dla 2x+13
    itd...

    tylko ..... " jak " :?: :wink:
  • REKLAMA
  • #9 3784819
    zaytzev
    Poziom 13  
    Posty: 51
    Pomógł: 6
    Ocena: 6
    Kombinuj. Zakładam, że znasz "if" i "case". Nic więcej Ci nie potrzeba. :P
  • #10 3785977
    trelek
    Poziom 14  
    Posty: 134
    Pomógł: 4
    Ocena: 5
    hm.. jeśli będę mógł zdefiniować na początku kilka funkcji to już chyba wiem jak... :)

    po chwili


    zaytzev, masz u mnie piwo :!:, albo nie 2 :!: :)

    udało się, obyło się bez "if'a" , a case nie znałem, ale się nauczyłem :)
    wszystko śmiga jak malina :)

    oto wynik: (załącznik)

    jeszcze raz wielkie dzięki :)

    /tylko pytanie, co mam dopisać na końcu kodu, by się program nie wyłączał do póki nie wcisnę klawisza, bo tak szybko się wyłącza, że nie zauważe wyniku :P kompilator: TurboPascal 7.0
    Załączniki:
    • POLE_POD.EXE (6.39 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • Pomocny post
    #11 3786280
    Stepel
    Poziom 20  
    Posty: 490
    Pomógł: 26
    Ocena: 28
    dopisać readln;
  • #12 3786395
    trelek
    Poziom 14  
    Posty: 134
    Pomógł: 4
    Ocena: 5
    dzięki :wink: works !

Podsumowanie tematu

✨ Dyskusja dotyczyła napisania programu w Pascalu (lub alternatywnie w Visual Basic czy C++) do obliczania pola pod wykresem dowolnej funkcji na zadanym przedziale. Metoda opiera się na numerycznym całkowaniu przez podział przedziału na wiele małych prostokątów i sumowanie ich pól, co jest przybliżeniem całki oznaczonej. Wskazano na potrzebę wyboru odpowiedniej liczby podprzedziałów oraz na literaturę dotyczącą całkowania numerycznego. Autor miał problem z definiowaniem funkcji jako zmiennej, a nie stałej, co rozwiązano przez implementację wyboru spośród kilku predefiniowanych funkcji za pomocą instrukcji case. Zaproponowano prosty sposób na zatrzymanie programu po wyświetleniu wyniku przez dodanie polecenia readln. Dyskusja zawierała fragmenty kodu w Turbo Pascal 7.0 oraz sugestie dotyczące implementacji parsera wyrażeń, który jednak uznano za zbyt skomplikowany dla początkującego. Ostatecznie autor samodzielnie napisał działający program z możliwością wyboru funkcji i poprawnym obliczaniem pola pod wykresem.
Wygenerowane przez model językowy.
REKLAMA