Programik w C

profesorq
Użytkownik
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

Post autor: profesorq » 26 paź 2007, o 17:28

i jak unikac tego przepelnienia?
twojego programu nie udaje mi sie skompilowac
Rekrutacja Instytut Matematyczny, Uniwersytet Wrocławski (gif)

smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Programik w C

Post autor: smiechowiec » 26 paź 2007, o 23:04

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 MinGW Developer Studio 2.05 to polecam ściągnąć ostatnią wersję, mi w tym poszło bez problemów

profesorq
Użytkownik
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

Post autor: profesorq » 26 paź 2007, o 23:51

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

smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Programik w C

Post autor: smiechowiec » 27 paź 2007, o 11:52

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

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;
}

ODPOWIEDZ