DrKleiner Opublikowano 29 Marca 2007 Zgłoś Opublikowano 29 Marca 2007 Jako że w programowaniu jakoś super sprytny nie jestem i mam problem. Kazano mi napisać program w Pascalu który policzy mi miejsce przecięcia się dwóch funkcji. Coś próbowałem ale nie wiem jak zapisać drugą funkcje. Może jakiś układ? Pomoc. Nie jest to odrabianie zadań :unsure: tylko pomoc, bo niestety nie wychodzi mi to. Z góry dzięki za pomoc Var x:real; a,b,c:real; eps:real;Function f(x:real):real;Begin f:=x*x*x-8;End;Begin writeln('program znajduje miejsce zerowe funkcji'); writeln('w przedziale [a;b]'); write('podaj wartosc a:= '); readln(a); write('podaj wartosc b:= '); readln(b); write('podaj dokladnosc'); readln(eps); repeat; c:=(a+b)/2; if (f(a)+f(c)) < 0 then b:=c else a:=c; until (abs(b-a) < eps) Or (f(a)=0) Or (f(b)=0) Or (f(c)=0); if f(a)=0 then writeln('wynik a:= ',a) else if f(b)=0 then writeln('wynik b:= ',b) else if f(c)=0 then writeln('wynik c:= ',c) else writeln('wynik c:= ','+ -',eps); readln;End. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kfgz Opublikowano 29 Marca 2007 Zgłoś Opublikowano 29 Marca 2007 (edytowane) Tak na szybkiego: #pragma hdrstop#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#pragma argsusedfloat f1(float x) {return x * x + 3;}float f2(float x) {return -x * x + 3 * x + 6;}int main() { float a = 0, b = 4, c, eps = 0.001; int step = 0, max_step = 1000; do { c = (a + b) / 2; if ((f1(c) - f2(c)) * (f1(b) - f2(b)) < 0) a = c; else b = c; step++; } while (fabs(f1(c) - f2(c)) > eps && step < max_step); printf("x: %f", c); return 0;} Pascala nie trawię. Kod z łatwością przerobisz. Nie daję gwarancji, że w każdym przypadku będzie działać jak należy bo programista raczej kiepski ze mnie :/ P.S. 1 Max_step to "zawór bezpieczeństwa" w pętli. Dodałem na wszelki wypadek gdyby funkcje w przedziale [a, b] się nie przecięły. Jeśli funkcję się przecinają, a zadana dokładność nie została osiągnięta, to trzeba zwiększyć wart. max_step. P.S. 2 Przed wejściem do pętli można sprawdzić czy istnieje co najmniej jeden punkt przecięcia funkcji. Musi być spełniony ten warunek: (f1(a) - f2(a)) * (f1(b) - f2(b)) < 0 EDIT: Przy parzystej liczbie przecięć funkcji w przedziale w/w warunek nie będzie spełniony. W takim wypadku należy zawęzić przedział do jednego przecięcia. W przypadku nieparzystej liczby przecięć też należy zawęzić przedział. Edytowane 30 Marca 2007 przez Dj_AnT Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...