Kezdőoldal » Számítástechnika » Programozás » Programozás C-ben függvényes...

Programozás C-ben függvényes feladat?

Figyelt kérdés

f(x)= sin^5(3x-sqrtx)(1,3-arccosx) Meg van adva ez a függvény és egy adott intervallumban egymástól egyenlő távolságokra levő x változókra kellene kiszámolni. Valamint ahol nincs értelmezve ott egy hibaüzenetet kellene kidobnia. Eddig ezt sikerült összehozni:

#include<stdio.h>

#include<stdlib.h>

#include<math.h>


float fuggveny(float a, float b, float c);


int main()

{

float a,b,c,x;


a = pow(sin(b*c),5);

b = (3*x-sqrt(x));

c = (1,3-acos(x));


printf("Adja meg az 'x' valtozo erteket!\n");

scanf("%f" , &x);

printf("A fuggveny erteke : %f\n",fuggveny(a,b,c));

return 0;

}

float fuggveny(float a, float b, float c)

{

return a*b*c;

}

Elég kezdő vagyok, szóval valószínűleg több sebből is vérzik a dolog :D Valaki meg tudná mondani, hogy mik a hibák benne és a feladatnak azt a részét, hogy lehetne megoldani, hogy egymástól egyenlő távolságra lévő x változókra számolja ki az intervallumon amit bekérek?

Előre is köszönöm!



2018. nov. 22. 21:46
1 2 3
 11/21 A kérdező kommentje:

Egész pontosan így néz ki a feladat: [link]

Bocsi ha valamit elírtam, már én is elég fáradt voltam.

2018. nov. 23. 19:49
 12/21 A kérdező kommentje:
Még annyi lenne a kérdésem, ha esetleg benéz még valaki, hogy, hogyan oldom meg, hogy a lépésközökkel léptesse a for ciklust? Meghatároztam a lépésközök számát, ahogy írtátok, de, vagy végtelen ciklus lesz belőle, vagy csak a lépésköz értékére sikerül kiszámolni :(
2018. nov. 23. 21:00
 13/21 tabaki ***** válasza:
Ahogy látom, lényegében jól írtad, akkor pedig mintha a függvény mostani formája is stimmelne. Annyi mindenesetre bizonyos, hogy én már nem tudok vele mit kezdeni, szóljon hozzá okosabb...
2018. nov. 23. 21:06
Hasznos számodra ez a válasz?
 14/21 tabaki ***** válasza:

#12: Talán valahogy így:


float x;

for (x = eleje; x <= vege; x += lepeskoz)

      printf("fuggveny(%f) --> %f\n", x, fuggveny(x);

2018. nov. 23. 21:19
Hasznos számodra ez a válasz?
 15/21 tabaki ***** válasza:

+ Bocs, egy zárójel lemaradt a végéről:

printf("fuggveny(%f) --> %f\n", x, fuggveny(x));

2018. nov. 23. 21:21
Hasznos számodra ez a válasz?
 16/21 A kérdező kommentje:

#include<stdlib.h>

#include<stdio.h>

#include<math.h>


float f(float x);


int main(){

float x;

float k,v,o;

int i;

printf("Adja meg az intervallum kezdo es vegpontjat!\n");

scanf("%f %f" , &k , &v);

for(i=0; i<100; i++){

if(v<=k){

printf("Az intervallum vegpontjanak nagyobbnak kell lennie, mint az intervallum kezdopontja, kerlek add meg ujra:\n");

scanf("%f" , &v);

}

}

printf("Adja meg az osztaskozok szamat!\n");

scanf("%f" , &o);

float c = (v-k)/o;

for(x=k; x<v; x+=c){

printf("A f(x) erteke a %f. pontban: %f\n" ,x, f(x));

if(x>1 || x<0){

printf("A fuggveny nincs ertelmezve ebben a pontban!\n");

}

}

return 0;

}


float f(float x){

return pow(sin((3*x-sqrt(x))*(1.3-acos(x))),5);

}

Ezt sikerült összehozni eddig, így már csak annyi a baja, hogy a végpontban nem számolja ki x értékét

2018. nov. 23. 21:30
 17/21 anonim ***** válasza:

"a végpontban nem számolja ki x értékét"

x <= v;

de egyébként a k, v, c, o változók helyett nevezd el rendesen őket: kezdet, veg, lepeskoz, osztas.


Illetve ez:

float f(float x);

nem kell: a main függvény elé dobd be az f függvényt (lásd a belinkelt forráskódokat).


No meg ez mi:

for(i=0; i<100; i++){

if(v<=k){

printf("Az intervallum vegpontjanak nagyobbnak kell lennie, mint az intervallum kezdopontja, kerlek add meg ujra:\n");

scanf("%f" , &v);

}

}


Mi a manónak kéred be százszor a végpontot?

Nem elég egy while ciklus?

2018. nov. 23. 22:04
Hasznos számodra ez a válasz?
 18/21 A kérdező kommentje:

Ha azt írom, hogy x<=v akkor sem számolja ki a végpontra.

Ja azt a 100-ast csak úgy véletlenszerűen írtam, gondoltam 100-adjára csak sikerül megadni :,D de igen egy while ciklussal jobb lenne köszi :D

2018. nov. 23. 22:25
 19/21 A kérdező kommentje:
Sajnos csak este tudok vele foglalkozni, így fáradtan meg nem mindig jutnak eszembe a legjobb megoldások, vagy egyátalán a megoldás.
2018. nov. 23. 22:26
 20/21 tabaki ***** válasza:

Aha, látom, hogymás is megírta a lényeget, de most már nem szerkesztem át, ismétlés a tudás anyja...


„a végpontban nem számolja ki x értékét”

Ez az egyik, amit nem értek. Tapasztalatom szerint, ha a végpont kiszámolható, akkor ki is számolja. Ettől függetlenül előfordulhat, hogy a kerekítési hiba miatt nem pontosan érkezik a határra, hanem átlépi azt, ezért aztán nem is írja ki. Emiatt a törtszámok esetén nem is szokás egyszerűen egyenlőségre vizsgálni, hanem olyan tűréssel (pl. az eredmény egy-két tizedesjegyének levágásával), amely már biztosan nagyobb a hibahatárnál.

Ezenkívül még három dolog nem világos:

1. Honnan tudod, hogy pont 0-1 az értelmezési tartomány? Jó-jó, LÁTOD az eredményekből, vagy éppenséggel a függvény matematikai levezetésével bizonyítottad, de az lenne a korrekt megoldás, ha a program maga határozná meg (mondjuk a levezetés programbéli megvalósításával) a tilos értékeket.

2. Akárhogyan határozod is meg az értelmezési tartományt, mi értelme van annak, hogy a tiltott értékekkel is meghívd a függvényt? Az rendben van, hogy ez egy okos fordító, amelynek a visszakapott NaN sem szegi a nyakát, de minek számoltatod, és pláne íratod ki, ha előre tudod, hogy nincs értelme? Most először elvégezteted a számítást, kiíratod az eredményt, AZUTÁN az eleve ismert feltétel alapján közlöd, amit a vak is láthat a programba épített NaN-jelzésből, hogy ennek nem volt semmi értelme. Nem az volna a logikus, hogy először eldöntöd, kell-e számolni, és ha igen, megcsináltatod, ha nem, kiíratod a saját hibaüzidet?

3. Miért pont százszor próbálkozhat a felhasználó a végpont bevitelével? Tudom, nem túl életszerű, de mi van, ha százegyedjére is hülyeséget ír? Akkor ő győzött, elfogadod a véleményét? Nem volna egyszerűbb -- pl. egy while ciklussal -- pont addig bekérni, míg végre megfelelő értéket ír be az a világ barma?

2018. nov. 23. 22:44
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!