i jak unikac tego przepelnienia?
twojego programu nie udaje mi sie skompilowac
Programik w C
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
Programik w C
Ogólnie nie da się uniknąć przepełnień dla dowolnych liczb, bo wymagałoby to operacji na liczbach o nieskończonej precyzji.
Są jakieś biblioteki dla C, dla bardzo dużych zakresów liczb, ale ja z nich nie korzystałem, więc liczę na doświadczonych forumowiczów.
Jeśli nie udało Ci się skompilować programu w Dev-Cpp lub to polecam ściągnąć ostatnią wersję, mi w tym poszło bez problemów
Są jakieś biblioteki dla C, dla bardzo dużych zakresów liczb, ale ja z nich nie korzystałem, więc liczę na doświadczonych forumowiczów.
Jeśli nie udało Ci się skompilować programu w Dev-Cpp lub to polecam ściągnąć ostatnią wersję, mi w tym poszło bez problemów
-
- 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
udalo mi sie tylko ze ty ten program zrobiles w c++ a mi potrzeba w c
jako c++ kompiluje sie bez bledow ale pozniej jakos sie nie chce odpalic program
jako c++ kompiluje sie bez bledow ale pozniej jakos sie nie chce odpalic program
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
Programik w C
Jedyną różnica w tym kodzie między C a cpp jest konieczność deklaracji zmiennej przed jej użyciem w C.
Trzeba zamienić kod
for(int i = 0; ...
na
int i;
for(i = 0; ...
Ostatecznie
Trzeba zamienić kod
for(int i = 0; ...
na
int i;
for(i = 0; ...
Ostatecznie
Kod: Zaznacz cały
#include <stdio.h>
#include <math.h>
long double fsilnia(int n) {
long double wynik = 1.0;
int i;
for(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;
int i;
printf("*** Obliczenia wartosci elementow szeregu ***
");
for(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;
}