Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
kotmarjak
HV Guru
liitunud: 11.12.2003
|
15.01.2008 23:00:54
c keeles väike abi |
|
|
nii.
panen terve koodi siia kirja
#include <stdio.h>
float a, h, n, c;
float massiiv[2][100];
void sisendid();
void arvuta();
float arvuta_y(float x);
void valjasta();
int main() {
sisendid();
arvuta();
valjasta();
getch();
return 0;
}
void sisendid() {
printf("Sisesta argumendi algväärtus a: "); scanf("%f", &a);
printf("Sisesta sammmude arv n: "); scanf("%f", &n);
printf("Sisesta sammu algväärtus h: "); scanf("%f", &h);
}
void arvuta() {
float x=a, y;
int i;
printf("\n\n X | f(x) ");
printf("\n------------------\n");
for(i=0;i<=n;i++) {
y = arvuta_y(x);
massiiv[0][i] = x;
massiiv[1][i] = y;
x += a+i*h;
}
}
float arvuta_y(float x) {
return (x + 4 / sqrt((x * x) + x) - (x * x) * sqrt(4 - (x * x * x)));
}
void valjasta() {
int i;
for(i=0;i<=n;i++) {
printf(" %.4f | %.4f \n", massiiv[0][i], massiiv[1][i]);
}
} |
nimelt oleks vaja panna selline rida sisse, kus tuleb öelda, et kui x=1,587401052, siis vastus puudub ja selle sama annab ta ka massiivi
_________________ Ole tore ! |
|
Kommentaarid: 144 loe/lisa |
Kasutajad arvavad: |
|
:: |
5 :: |
8 :: |
117 |
|
tagasi üles |
|
|
AMD
HV veteran
liitunud: 29.07.2003
|
15.01.2008 23:11:11
|
|
|
No aga pane siis vajalikku kohta
c:
|
if(x = 1.58....) { /* tee midag */ }
|
_________________ From now on, the forum is owned by AMD.That means that you are NO LONGER allowed to talk about, or even mention *ntel. |
|
Kommentaarid: 335 loe/lisa |
Kasutajad arvavad: |
|
:: |
145 :: |
3 :: |
12 |
|
tagasi üles |
|
|
kotmarjak
HV Guru
liitunud: 11.12.2003
|
15.01.2008 23:53:29
|
|
|
AMD, seda kuidagi üritasin, aga ei tulnud välja.
see peab ju ka kuidagi massiivis kajastuma. ja kui ma niimoodi kirjutan selle rea sinna, siis massiivi see ei tule
_________________ Ole tore ! |
|
Kommentaarid: 144 loe/lisa |
Kasutajad arvavad: |
|
:: |
5 :: |
8 :: |
117 |
|
tagasi üles |
|
|
Ohohh
Kreisi kasutaja
liitunud: 13.09.2003
|
16.01.2008 02:37:01
|
|
|
Murdarve ei saa eiriti hästi võrdus märgiga võrrelda, kuna need ei teisendu alati üks-ühele kümnend süsteemi. Sa pead kontrollima, et väärtus jääb mingisse vahemikku.
Väike näide:
c++:
|
#include <iostream> using namespace std; int main() { float i = 0; while (i!=1) { i+= 0.1; cout << i << endl; getchar(); } return 0; }
|
Loogiliselt võttes peaks see kood olema tsüklis 10 korda ja siis väljuma, aga reaalselt jääb lõputusse tsüklisse. Antud juhul ei ole i väärtus kunagi täpselt 1 vaid 0.99... või 1.00...01
EDIT:
Sa ei pea mitte kontrollima, kas x=1,587401052 vaid seda, et 4 - (x * x * x) ei tohi olla väiksem nullist.
Samasse massiivi panemiseks võid näiteks kontrollida, et kui x on lubamatu, siis tagastad mingi hästi suure arvu. Pärast tabeli välja trükkimisel kontrollid, kui arv on ebanormaalselt suur, siis kirjutad, et väärtus puudub
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
|
kotmarjak
HV Guru
liitunud: 11.12.2003
|
16.01.2008 12:39:03
|
|
|
tsitaat: |
et 4 - (x * x * x) ei tohi olla väiksem nullist.
|
seda ma tean, kui x ongi see arv, siis ta ongi null see võrdus.
ma vaatan neid erinevad võimalusi ja proovin
_________________ Ole tore ! |
|
Kommentaarid: 144 loe/lisa |
Kasutajad arvavad: |
|
:: |
5 :: |
8 :: |
117 |
|
tagasi üles |
|
|
Supiplex
HV veteran
liitunud: 11.12.2002
|
16.01.2008 14:15:22
|
|
|
Kas sa oled kursis, et arvuti arvutab float arvudega ligikaudselt? Osad tehted murdarvudega annavad viimased paar kohta täiesti valesti. Arvuti tehte vastus ei ole lõpuni täpne. Tasub arvesse võtta, kui koodi kirjutad.
_________________ The young lady had an unusual list,
Linked in part to a structural weakness.
She set no preconditions. |
|
Kommentaarid: 38 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
34 |
|
tagasi üles |
|
|
kotmarjak
HV Guru
liitunud: 11.12.2003
|
16.01.2008 14:18:11
|
|
|
sain muidu asja tehtud. lisasin sellised asjad
float arvuta_y(float x) {
if(x>=1.587401052)
return 0;
else
return (x + 4 / sqrt((x * x) + x) - (x * x) * sqrt(4 - (x * x * x))); [/code]
ja
void valjasta() {
int i;
for(i=0;i<=n;i++) {
if(massiiv[0][i]>=1.587401052)
printf(" %.4f | puudub \n", massiiv[0][i]);
else
printf(" %.4f | %.4f \n", massiiv[0][i], massiiv[1][i]);
_________________ Ole tore ! |
|
Kommentaarid: 144 loe/lisa |
Kasutajad arvavad: |
|
:: |
5 :: |
8 :: |
117 |
|
tagasi üles |
|
|
.Eestlane.
HV kasutaja
liitunud: 14.01.2006
|
16.01.2008 19:43:05
|
|
|
Ma nii enda huvi pärast küsin, mida tähendab see rida?
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
|
AMD
HV veteran
liitunud: 29.07.2003
|
16.01.2008 23:38:11
|
|
|
sama, mida see:
float x = a;
float y;
_________________ From now on, the forum is owned by AMD.That means that you are NO LONGER allowed to talk about, or even mention *ntel. |
|
Kommentaarid: 335 loe/lisa |
Kasutajad arvavad: |
|
:: |
145 :: |
3 :: |
12 |
|
tagasi üles |
|
|
.Eestlane.
HV kasutaja
liitunud: 14.01.2006
|
16.01.2008 23:41:13
|
|
|
Aa, muidugi, stupid me. Aitäh
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
|
spikhoff
HV veteran
liitunud: 26.01.2005
|
17.01.2008 13:21:14
|
|
|
nii on ka võimalik
Spoiler
#include <stdio.h>
#include <math.h>
#define Valem (1+sqrt((a+(i*h))*(a+(i*h))-4))/((a+(i*h))-8)
double a, h, x[2][65536];
int i, n;
int input(){
printf("Sisesta a: ");
scanf("%lf", &a);
printf("Sisesta h: ");
scanf("%lf", &h);
printf("Sisesta n: ");
scanf("%d", &n);
}
int calculate(){
for (i = 0; i < n; i++){
x[0][i]=(a+(i*h));
if (a+(i*h)==8 || a+(i*h)==1 || a+(i*h)==0 || a+(i*h)==-1 ){
x[1][i]=0; }
else{
x[1][i]=Valem;}
}
}
int output(){
printf("\tx\t|\tf(x)\n");
for(i =0; i < n; i++){
printf("%lf\t|\t%lf\n", x[0][i], x[1][i]);
}
}
int main(void) {
input();
calculate();
output();
return 0;}
|
|
|
Kommentaarid: 59 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
|
Urmet
HV vaatleja
liitunud: 29.07.2005
|
17.01.2008 13:33:25
|
|
|
Aga arvuta see ruutjuur 3 kuskil main() alguses ära ja salvesta muutujasse. sellega peaks olema võimalik täpselt võrrelda. Kuidagi sarnaselt sai ise ka seda lahendatud.. vist. Ei leia enam üles seda koodi
|
|
Kommentaarid: 10 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
10 |
|
tagasi üles |
|
|
kotmarjak
HV Guru
liitunud: 11.12.2003
|
17.01.2008 16:13:22
|
|
|
enam pole vaja ka. sain enda võimalusega kaitstud kõik ja korras ka.
tänud abipakkujatele.
_________________ Ole tore ! |
|
Kommentaarid: 144 loe/lisa |
Kasutajad arvavad: |
|
:: |
5 :: |
8 :: |
117 |
|
tagasi üles |
|
|
|