Programik w C
-
- Użytkownik
- Posty: 384
- Rejestracja: 12 lut 2007, o 19:40
- Płeć: Mężczyzna
- Lokalizacja: wawa
- Podziękował: 77 razy
- Pomógł: 1 raz
Programik w C
Mam napisać program obliczający z zadaną dokładnością n wartość funkcji \(\displaystyle{ y=exp(-x^2)}\) w zadanym punkcie x korzystając z rozwinięcia w szereg:
\(\displaystyle{ exp(-x^2)=1-x^2+ \frac{x^4}{2!}-\frac{x^6}{3!} + \frac{x^8}{4!} - ....+\frac{(-1)^n x^{2n}}{n!}}\) , n - całkowite nieujemne
Ponadto program powinien obliczyć wartość błedu względnego w stosunku do wartości uzyskanej przy pomocy standardowej funkcji bibliotecznej języka C. Formuła błedu:
\(\displaystyle{ blad=\frac{y-yo}{yo} *100%%}\)%,
gdzie y-wartość obliczona przy pomocy szeregu, yo- wartość obliczona przy pomocy funkcji standardowej.
\(\displaystyle{ exp(-x^2)=1-x^2+ \frac{x^4}{2!}-\frac{x^6}{3!} + \frac{x^8}{4!} - ....+\frac{(-1)^n x^{2n}}{n!}}\) , n - całkowite nieujemne
Ponadto program powinien obliczyć wartość błedu względnego w stosunku do wartości uzyskanej przy pomocy standardowej funkcji bibliotecznej języka C. Formuła błedu:
\(\displaystyle{ blad=\frac{y-yo}{yo} *100%%}\)%,
gdzie y-wartość obliczona przy pomocy szeregu, yo- wartość obliczona przy pomocy funkcji standardowej.
- aNom4Ly
- Użytkownik
- Posty: 14
- Rejestracja: 5 sty 2007, o 19:08
- Płeć: Mężczyzna
- Lokalizacja: Gliwice
- Pomógł: 10 razy
Programik w C
Napisałem dla Ciebie programik - jeden minus - dla dużych wartości n nie obliczy silni (typ integer nie zmieści bardzo (ale to bardzo) dużych liczb). Jesli tak sie zdarzy, to zamiast liczby otrzymasz na ekranie: #IND
Oto program (pisany w Dev-C++):
#include
#include
#include
using namespace std;
int n,silnia;
float x,y,y_funkcja,blad;
int main()
{
coutx;
coutn;
if (n
Oto program (pisany w Dev-C++):
#include
#include
#include
using namespace std;
int n,silnia;
float x,y,y_funkcja,blad;
int main()
{
coutx;
coutn;
if (n
- aNom4Ly
- Użytkownik
- Posty: 14
- Rejestracja: 5 sty 2007, o 19:08
- Płeć: Mężczyzna
- Lokalizacja: Gliwice
- Pomógł: 10 razy
Programik w C
Proszę, teraz jest beż użycia iostream:
#include
#include
int n,silnia;
float x,y,y_funkcja,blad;
int main()
{
printf("
Podaj wartosc x: "); scanf("%f", &x);
printf("
Podaj wartosc n: "); scanf("%d", &n);
if (n
#include
#include
int n,silnia;
float x,y,y_funkcja,blad;
int main()
{
printf("
Podaj wartosc x: "); scanf("%f", &x);
printf("
Podaj wartosc n: "); scanf("%d", &n);
if (n
-
- Użytkownik
- Posty: 384
- Rejestracja: 12 lut 2007, o 19:40
- Płeć: Mężczyzna
- Lokalizacja: wawa
- Podziękował: 77 razy
- Pomógł: 1 raz
Programik w C
jeszcze mam takie może banalne pytanie (zaczynam programowanie w C) jak najlepiej skompilować taki program skoro mam windowsa xp a to musi chodzic na linuxie/unixie.
mam zainstalowane takei programy:
winscp
putty
cygwin
openssh
jakie komendy pisać i w jakim programie?
mam zainstalowane takei programy:
winscp
putty
cygwin
openssh
jakie komendy pisać i w jakim programie?
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
Programik w C
Jak mi sie zdaje to sa programy TYLKO do laczenia sie ssh z kompami w lab, a nie do kompilowania programow pod unixa. Ja robie wszystko w DEV-Cpp, zapisuje jako *.c i kompiluje pod wind. Teraz sobie rowniez wyslalem projekt na maila ktorego odbiore podczas laborek i tam sprawdze ewentualne bledy podczas kombilacji.
BTW. Ostatnio mialem laboratoria w 09 i tam nie dzialaly standardowe funkcje z math.h typu sin, exp, log.... Nawet prowadzacy nie wiedzial co jest POZDRO
BTW. Ostatnio mialem laboratoria w 09 i tam nie dzialaly standardowe funkcje z math.h typu sin, exp, log.... Nawet prowadzacy nie wiedzial co jest POZDRO
Ostatnio zmieniony 26 paź 2007, o 18:52 przez soku11, łącznie zmieniany 1 raz.
-
- Użytkownik
- Posty: 384
- Rejestracja: 12 lut 2007, o 19:40
- Płeć: Mężczyzna
- Lokalizacja: wawa
- Podziękował: 77 razy
- Pomógł: 1 raz
Programik w C
a ty jakie masz zadanie?
a myślisz że jak skompiluje w dev-cpp na windowsie to bedzie chodzic na unixie?
ale to zawsze nie działają czy akurat tego dnia?
a myślisz że jak skompiluje w dev-cpp na windowsie to bedzie chodzic na unixie?
ale to zawsze nie działają czy akurat tego dnia?
-
- Użytkownik
- Posty: 8601
- Rejestracja: 1 maja 2006, o 20:54
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Podziękował: 47 razy
- Pomógł: 1816 razy
Programik w C
Binarny plik z windowsa na pewno natywnie na systemach uniksopodobnych się nie uruchomi.a myślisz że jak skompiluje w dev-cpp na windowsie to bedzie chodzic na unixie?
Jeżeli jednak program korzysta jedynie ze standardowej biblioteki C to powinien się bezproblemów skompilować na każdej platformie wyposażonej w odpowiednie narzędzia programistyczne (tj. kompilator).
-
- Użytkownik
- Posty: 384
- Rejestracja: 12 lut 2007, o 19:40
- Płeć: Mężczyzna
- Lokalizacja: wawa
- Podziękował: 77 razy
- Pomógł: 1 raz
Programik w C
ten program chyba coś do końca nie działa poprawnie mógłby go ktoś wnieść jakieś poprawki?
ja zrobiłem troszkę poprawek i w tej chwili wygląda tak:
to jeszcze nie jest dobra wersja, dla x i n rownych 1,2,3,4 raczej wychodzi prawidłowo ale pozniej to juz jest cos nie tak.
Proszę o próbę jakiś popraw
#include
#include
int n,i,k;
double silnia;
float x,y,y_funkcja,blad;
int main()
{
printf("
Podaj wartosc x: "); scanf("%f", &x);
printf("
Podaj wartosc n: "); scanf("%d", &n);
if (n
ja zrobiłem troszkę poprawek i w tej chwili wygląda tak:
to jeszcze nie jest dobra wersja, dla x i n rownych 1,2,3,4 raczej wychodzi prawidłowo ale pozniej to juz jest cos nie tak.
Proszę o próbę jakiś popraw
#include
#include
int n,i,k;
double silnia;
float x,y,y_funkcja,blad;
int main()
{
printf("
Podaj wartosc x: "); scanf("%f", &x);
printf("
Podaj wartosc n: "); scanf("%d", &n);
if (n
- Undre
- Użytkownik
- Posty: 1430
- Rejestracja: 15 lis 2004, o 02:05
- Płeć: Mężczyzna
- Lokalizacja: UĆ
- Podziękował: 3 razy
- Pomógł: 92 razy
Programik w C
No odnośnie cygwin to chyba nie do końca. Właśnie sobie zresztą instaluję cygwin i do wyboru wśród packages wybrałem gcc ;]soku11 pisze:Jak mi sie zdaje to sa programy TYLKO do laczenia sie ssh z kompami w lab, a nie do kompilowania programow pod unixa.
W sumie jest nawet kde, całość się zainstaluje to zobaczymy co to za cudo, może nawet taka namiastka linuxa na windows
-
- Użytkownik
- Posty: 384
- Rejestracja: 12 lut 2007, o 19:40
- Płeć: Mężczyzna
- Lokalizacja: wawa
- Podziękował: 77 razy
- Pomógł: 1 raz
Programik w C
no właśnie raczej Undre masz racje
cygwin ma duże możliwości tylko że trzeba odpowiednie pakiety zainstalować.
a co do programu to jak zrobić żeby jak ktoś wpisuje liczbę n nie całkowitą napisało komunikat niepoprawna liczba a nie tak jak teraz się program wyłącza?
cygwin ma duże możliwości tylko że trzeba odpowiednie pakiety zainstalować.
a co do programu to jak zrobić żeby jak ktoś wpisuje liczbę n nie całkowitą napisało komunikat niepoprawna liczba a nie tak jak teraz się program wyłącza?
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
Programik w C
Możesz na przykład pobierać liczbę n jako zmiennoprzecinkowa np. float i potem zrobić pętlę
A swoj ą drogą fajny jest ten tekst:
Kod: Zaznacz cały
float n=1.1;//1.1 żeby na początku weszło w pętlę
while(n-(int)n!=0)
{
scanf("%f",&n);
printf("n musi być calkowite-probuj do skutku :)
");
}
Wiem, że to literówki, ale w jednym zdaniu...? PozdrawiamJa robie wszystko w DEV-Cpp, zapisuje jako *.c i kompiuje pod wind. Teraz sobie rowniez wyslalem projekt na maila ktorego odbiore podczas laborek i tam sprawdze ewentualne bledy podczas kombinacji.
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
Programik w C
Przetestowałem ten program na kompilatorze gcc używanym przez Dev-cpp i wyniki dla podanych przez Ciebie liczb nie pokrywają się.
Wynika to z przekroczenia zakresów liczb 50! czy 5 do potęgi 100 są poza zakresem podstawowych typów i po przekręceniu się liczby dają wyniki raczej losowe, w każdym razie nie wiarygodne.
Dla x = 2
y dla dokladnosci n= 50 wynosi: 0.018316
y obliczone z funkcji e^(-4) wynosi: 0.018316
Blad wynosi: 0.000000
Dla x = 3
y dla dokladnosci n= 50 wynosi: 0.000123
y obliczone z funkcji e^(-9) wynosi: 0.000123
Blad wynosi: 0.000000
Dla x = 4
y dla dokladnosci n= 50 wynosi: 0.000013
y obliczone z funkcji e^(-16) wynosi: 0.000000
Blad wynosi: 11251.745802
widać że wynik już jest poza dopuszczalnym zakresem
Dopisałem do kodu wypisywanie kolejnych wyrazów szeregu, aby łatwiej można było analizować czy wystąpiło przepełnienie.
Wynika to z przekroczenia zakresów liczb 50! czy 5 do potęgi 100 są poza zakresem podstawowych typów i po przekręceniu się liczby dają wyniki raczej losowe, w każdym razie nie wiarygodne.
Dla x = 2
y dla dokladnosci n= 50 wynosi: 0.018316
y obliczone z funkcji e^(-4) wynosi: 0.018316
Blad wynosi: 0.000000
Dla x = 3
y dla dokladnosci n= 50 wynosi: 0.000123
y obliczone z funkcji e^(-9) wynosi: 0.000123
Blad wynosi: 0.000000
Dla x = 4
y dla dokladnosci n= 50 wynosi: 0.000013
y obliczone z funkcji e^(-16) wynosi: 0.000000
Blad wynosi: 11251.745802
widać że wynik już jest poza dopuszczalnym zakresem
Dopisałem do kodu wypisywanie kolejnych wyrazów szeregu, aby łatwiej można było analizować czy wystąpiło przepełnienie.
Kod: Zaznacz cały
#include <stdio.h>
#include <math.h>
long double fsilnia(int n) {
long double wynik = 1.0;
for(int i = 2; i <= n; i++)
wynik = wynik * i;
return wynik;
}
double fszereg(double x, int n) {
double wynik = 1;
long double felement = 0;
int bznak = 1;
printf("*** Obliczenia wartosci elementow szeregu ***
");
for(int i = 1; i <= n; i++) {
felement = (long double) (bznak = -bznak) * ( pow(x, 2 * i) / fsilnia(i) );
wynik = wynik + felement;
printf("%2i(%lf^%i)/%g = %g
", bznak, x, 2 * i, (double) fsilnia(i), (double) felement );
}
printf("*** *** ***
");
return wynik;
}
int main() {
int n;
double x, y, y_funkcja, blad;
char s[80] = "zmienna pomocnicza";
printf("
Podaj wartosc x: "); scanf("%lf", &x);
printf("
Podaj wartosc n: "); scanf("%d", &n);
if ( n < 0) {
printf("
Wartosc jest ujemna. Podaj nieujemna wartosc n: ");
scanf("%d", &n);
}
y = fszereg(x, n);
y_funkcja = exp( - (x * x) );
blad = (fabs((y - y_funkcja) / y_funkcja) * 100);
printf("
y dla dokladnosci n= %d wynosi: %lf", n, y);
printf("
y obliczone z funkcji e^(-%g) wynosi: %lf", x * x, y_funkcja);
printf("
Blad wynosi: %lf ", blad);
puts("
Wcisnij Enter, aby zakonczyc");
gets(s);
return 0;
}