/*Antud on funktsioon ja teatud algväärtused. * Leida funktsiooni väärtused antud punktides (mitte rohkem kui 15). * Kui funktsiooni väärtus pole määratud, väljastada vastavasse veergu * 'puudub'. Funktsiooni väärtused esitada tabelina. */ #include <stdio.h> #include <math.h> #define veerg 2 #define rida 15 //Prototüübid double sisestusA(); double sisestusH(); double sisestusC(); double sisestusYM(); void XVäärtused(double, double, double, double, double[][15]); void YVäärtused(double[][15], double[]); void Väljastus(double, double[][15], double[]); int main(void) { double A = sisestusA(); //argumendi x algväärtus A double H = sisestusH(); //Samm double C = sisestusC(); //Sammu koefitsent double YM = sisestusYM(); //Väärtuste ülempiir double Vastus[veerg][rida]; //Tabeli veergude ja ridade massiiv double puudub[rida]; //Massiiv, et näidata x väärtusi, mille korral y väärtus puudub. XVäärtused(A, H, C, YM, Vastus); YVäärtused(Vastus, puudub); Väljastus(YM, Vastus, puudub); return 0; } //Sisestus double sisestusA() { double A; int Kontroll; //Muutuja, mis näitab mitu sisendväärtust omistati kindlale muutujale do { printf("Sisestage argumendi x algväärtus A \n"); Kontroll = scanf("%lf", &A); //Kontroll näitab mitu väärtust omistati muutujale //Antud juhul 0 (sisestatud väärtus pole double) või 1. if(Kontroll == 0) //Sisestati väärtus, mis pole reaalarv. { printf("Sisestatud väärtus ei sobi, sisestage reaalarv."); scanf("%*s"); //Kui väärtus pole reaalarv, ei anta A-le väärtust. } //Ehk sisestatud väärtust ei arvestata. Vastasel juhul loop ei lõpeks. } while(Kontroll == 0); //Kontroll, kas sisestatud on reaalarv, /*Kui ...=0, siis A-le ei ole määratud väärtust ehk *(A ei ole double väärtus), kui ...=1, siis on.*/ return A; } double sisestusH() { double H; int Kontroll; do { printf("Sisestage samm H \n"); Kontroll = scanf("%lf", &H); if(Kontroll == 0 || H<=0) //H ei saa olla väiksem kui 0, peab olema reaalarv. { printf("Sisestatud väärtus ei sobi, sisestage reaalarv, mis on suurem kui 0"); scanf("%*s"); } } while(Kontroll == 0 || H<=0); //H ei saa olla väiksem kui 0. //H peab olema reaalarv. return H; } double sisestusC() { double C; int Kontroll; do { printf("Sisestage sammu koefitsent C (C>=1) \n"); Kontroll = scanf("%lf", &C); if(Kontroll == 0 || C<0) { printf("Sisestatud väärtus ei sobi, sisestage reaalarv, mis on suurem või võrdne kui 1"); scanf("%*s"); } } while(C<0 || Kontroll == 0); //C<0 ja reaalarv kontroll return C; } double sisestusYM() { double YM; int Kontroll; do { printf("Sisestage funktsiooni väärtuse y ülempiir YM \n"); Kontroll =scanf("%lf", &YM); if(Kontroll == 0) { printf("Sisestatud väärtus ei sobi, sisestage reaalarv."); scanf("%*s"); } } while(Kontroll == 0); //reaalarvu kontroll return YM; } //Töötlus //x väärtuste leidmine void XVäärtused(double A, double H, double C, double YM, double Vastus[][rida]) { int i; //Järjenumber double XSumma; //Ajutine summa, et leida x väärtuste rea liikmeid. for(i = 0;i < rida;i++) //funktsiooni väärtusi võib olla max 15. { switch (i) { case 0: Vastus[0][i]=A; XSumma=Vastus[0][i]; //Jada 1. liikme A leidmine break; case 1: XSumma=XSumma+H; Vastus[0][i]=A+H; //Jada 2. liikme A+H leidmine break; default: XSumma=XSumma+(H*(pow(C,(i-1)))); //Jada n. liige A+H+CH+C^(i-1)*H+.... Vastus[0][i]=XSumma; } } } //y väärtuste leidmine void YVäärtused(double Vastus[][rida], double puudub[]) { int i; double x; //Ajutine väärtus x väärtuste leidmiseks for(i=0;i<rida;i++) //funktsiooni väärtusi võib olla max 15. { if(Vastus[0][i]<-2 || Vastus[0][i]>2) //Määramispiirkond (-2;2) { Vastus[1][i]=puudub[i]; } else { x=Vastus[0][i]; Vastus[1][i]=(7*pow(x,2)+18*x-14)/(sqrt(4-pow(x,2))); } } } //Väljastus void Väljastus(double YM, double Vastus[][rida], double puudub[]) { printf("\n Tulemused on esitatud tabelis: \n"); int i; for (i=0;i < rida;i++) //15 rida { if(Vastus[1][i]<YM) { if (Vastus[1][i] == puudub[i]) { printf("%lf, Puudub ", Vastus[0][i]); }else { printf("%lf, %lf ", Vastus[0][i], Vastus[1][i]); } printf("\n"); }else { i=rida; } } }