Advertisement
ziobrowskyy

Untitled

Nov 13th, 2019
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.50 KB | None | 0 0
  1. #include <stdio.h> // standardowe wejscie/wyjscie
  2. #include <math.h> // funkcje matematyczne
  3.  
  4. #define JednaTrzecia (1.0/3.0) // pozwala zdefiniowac slowo kluczowe ktore pozniej bedzie podmienione na odpowiednia wartosc ((1.0)(3.0) )
  5. #define JednaTrzeciaFloat (1.0f/3.0f)
  6.  
  7. #define TOLERANCE 2e-50// okresla ile cyfr po przecinku pokazywac
  8.  
  9. int main(void)
  10. {
  11.  
  12.  
  13.   int n;
  14.   char znak_do_testowania;
  15.   // deklaracje - informacje o nazwie i typie zmiennych (moga by zbudowane z malych i wielkich liter)
  16.  
  17.  
  18.    n = 1/3; // instrukcja przypisania( do pewnej lokacji jest przypisywana wartosc ktora bedzie w niej przechowywana)
  19.    znak_do_testowania = 'a'; // stała znakowa
  20.  
  21.  
  22.    float f = 1.0/3.0; // stałe
  23.    double d = 1.0/3.0; // zapis
  24.    d=f;
  25.    // przypisywanie wartosci do danej zmiennej w momencie jej deklaracji
  26.  
  27.    printf("liczby i znaki: znak = %c, n = %7d, f = %20.15f, d = %20.15lf\n", znak_do_testowania, n, f, d);//operacje wypisywania wartosci zmiennych
  28.  
  29.    d = 1111 + 1000 * n;  d = (double) n;// zmiana int na double - pozwala na przechowanie wiekszej ilosci informacji
  30.    n = f + 2.5;  n = (int) f;// zmiana float na int - pozwala na przechowywanie mniejszej ilosci informacji
  31.    f =  (double) (n / 3);//n / 3.0;//n / 3; (double)n/3
  32.    printf("\nNiejawne i jawne konwersje typów:\n");
  33.    printf("liczby i znaki: n = %d, f = %f, d = %lf lub d = %le\n", n, f, d, d);// dochodzi do uzycia operatora wiec sa jawne
  34.  
  35.    d = JednaTrzecia * 0.966661;
  36.    double e = JednaTrzeciaFloat * 3.0;
  37.    float g = JednaTrzeciaFloat * 3.0f;
  38.    printf("\nPrecyzja stałych i niejawne konwersje:\n");
  39.    printf("(1/3)*0.966661: \td = %20.15lf; e = %20.15lf, g = %20.15lf\n", d, e, g);// w pewnych przypadkach beda wystepowac problemy z dokladnoscia
  40.  
  41.    operatory i ich priorytety - programowanie zaawansowane a programowanie bezpieczne
  42.    double h;
  43.    h = f + d; // do testowania: f++d; f+++d najlepiej nawiasy aby bylo pewnie (f+d; f++;) (++d;f+d;))
  44.    printf("\nPriorytety operatorów:\n");
  45.    printf("\td = %20.15lf; f = %20.15lf, h = %20.15lf\n, d, f, h);
  46.  
  47.   x = a++;  x = ++a;  //wyniki beda sie roznily poniewaz jedno dublikuje wartosc poczatkowa a dugie wynik dodawania
  48.  
  49.  
  50.    n = 1574;
  51.    int m = n % 7;// %- modulo- reszta z dzielenia
  52.    int o = n / 7;
  53.   printf("\nn = %d, n/7 = %d, n%7 = %d, n = (n/7)*7 + (n%7) = %d\n", n, o, m, o*7+m);
  54.  
  55.   // // wartość logiczna wyrażeń
  56.   // printf("\nWartość logiczna wyrażenia: %d<%d wynosi %d\n", n, m, n<m);
  57.   // printf("\nWartość logiczna wyrażenia: %d<%d lub %d>%d wynosi %d\n", n, m, n, m, (n<m)||(n>m));
  58.  
  59.  
  60.   // // kłopoty z precyzją:
  61.   // double dx1 = 1.23e7;
  62.   // double dx2 = 1.23e-7;
  63.  
  64.   // printf("\ndx1 = %20.15lf, dx2 = %20.15lf, \n",
  65.   //    dx1, dx2);
  66.   // if( (dx1+dx2)-dx1 == dx2 ){
  67.   //   printf("\n(dx1+dx2)-dx1 == dx2 (dla double)\n");
  68.   // }
  69.   // else {
  70.   //   printf("\n(dx1+dx2)-dx1 != dx2 (nawet dla double!) ( (dx1+dx2)-dx1 = %20.15lf )\n",
  71.   //      (dx1+dx2)-dx1);
  72.   // }
  73.  
  74.   // // kłopoty z precyzją:
  75.   // float fx1 = 1.23e7;
  76.   // float fx2 = 1.23e-7;
  77.  
  78.   // printf("\nfx1 = %20.15lf, fx2 = %20.15lf, \n",
  79.   //    fx1, fx2);
  80.   // if( (fx1+fx2)-fx1 == fx2 ){
  81.   //   printf("\n(fx1+fx2)-fx1 == fx2 (dla float)\n");
  82.   // }
  83.   // else {
  84.   //   printf("\n(fx1+fx2)-fx1 != fx2 (dla float) ( (fx1+fx2)-fx1 = %20.15lf )\n",
  85.   //      (fx1+fx2)-fx1);
  86.   // }
  87.   // // obsługa błędów - temat rzeka
  88.   // // wariant prosty:
  89.  
  90.   // // chcemy obliczyć 1 / ( (fx1+fx2)-fx1 ) - powinno być równe 1/fx2
  91.  
  92.   // // próba uniknięcia dzielenia przez zero:
  93.   // // if( fx2 != 0.0 ){ - błędy 1. (fx1+fx2)-fx1 != fx2, 2. porównanie float
  94.  
  95.   // // poprawna próba uniknięcia dzielenia przez zero lub utraty precyzji:
  96.   // if( fabs ((fx1+fx2)-fx1) < TOLERANCE){
  97.    
  98.   //   printf("\nPróba dzielenia przez liczbę bliską zero! Przerwanie programu!\n");
  99.    
  100.   //   //return(-1);
  101.   //   // lub exit(-1) - exit przerywa wykonanie całego programu, nie tylko aktualnej funkcji
  102.    
  103.   // }
  104.  
  105.   // float fx3 = 1.0f / ((fx1+fx2)-fx1); // powinno byc równe 1/fx2...
  106.   // printf("\n1.0f / ((fx1+fx2)-fx1) = %20.15lf\n", fx3);
  107.  
  108.   // double dx3 = 1.0 / ((dx1+dx2)-dx1); // powinno byc równe 1/dx2...
  109.   // printf("\n1.0 / ((dx1+dx2)-dx1) = %20.15lf  != 1.0/dx2 = %20.15lf\n", dx3, 1.0/dx2);
  110.   // printf("Zostały tylko trzy cyfry znaczące na skutek skończonej precyzji...\n");
  111.  
  112.   printf("\nProgram dotarł do końca\n");
  113.   return(0);
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement