→ Slide 1

Lab. 1 Język C - powtórka

  • wybór środowiska programistycznego IDE
  • struktura programu
  • deklaracja zmiennych, podstawowe typy
  • wczytanie danych i wydruk na ekran (rożne dokładności, liczba miejsc znaczących)
  • pętle, instrukcje warunkowe
  • funkcje, ….
  • tablica, macierze
  • zapis/odczyt plik
  • programujemy bez grafiki, ew. wykresy ilustrujące w Excelu, Originie, Matlabie
→ Slide 2
#include <stdio.h>
 
/* definicja funkcji */
int nwd(int a, int b)
{
   int c;
   while (b != 0)
   {
      c = a % b;
      a = b;
      b = c;
   }
   return a;
}
 
int main()
{
   /* deklaracje zmiennych */
   int a, b;
 
   /* instrukjce programu */
   printf("Podaj dwie liczby calkowite dodatnie: ");
   scanf("%d %d", &a, &b);
 
   if ( a >0 && b > 0)
      printf("NWD(%d,%d) = %d\n", a, b, nwd(a,b));
   else 
      printf("Niepoprawne dane\n");
 
   return 0;
}
→ Slide 3

Typy zmiennych

→ Slide 4

Operatory

→ Slide 5

Specyfikatory formatu

#include <stdio.h>
/* program wczytuje i wyswietla wartosc podanej liczby rzeczywistej */
 
int main()
{
   float x; 
 
   printf("Podaj liczbe: ");
   scanf("%f", &x);
   printf("Podales liczbe %.3f \n", x);
   printf("Notacja naukowa %e \n", x);
 
  return 0; 
}
→ Slide 6
  • math.h - funkcje matematyczne
    sin(), cos(), sqrt(), pow(), log(),log10(), exp(), …
  • stdlib.h - zbiór podstawowych funkcji, np.:
    • rand() generator liczb losowych
    • exit() zamknięcie programu
    • system() uruchomienie polecenia systemowego
  • time.h - obsługa czasu:
    • clock() czas wykonywania programu
    • time() czas od dnia 1 stycznia 1970 roku
  • stdio.h - obsługa wejścia/wyjścia
pierwiastek.c
#include<math.h>
#include<stdio.h>
 
int main()
{
   float x, y;
 
   scanf("%f", &x);
 
   y = sqrt(x);
 
   printf("Pierwiastek z %f wynosi %f\n", x, y);
}
→ Slide 7
→ Slide 8

→ Slide 9

→ Slide 10

→ Slide 11

→ Slide 12

Co wyświetli poniższy kod?

#include <stdio.h>
 
int main ( )
{
   float x = 0.1;
 
   if ( x == 0.1 ) printf ( "OK" ) ;
   else printf ( "Nie OK") ;
}
→ Slide 13
  • nadmiar (overflow ) - przekroczenie zakresu
  • niedomiar (underflow ) - zaokrąglenie bardzo małej liczby do 0
  • błędy zaokrągleń
  • redukcja cyfr przy odejmowaniu bardzo bliskich sobie liczb zmiennoprzecinkowych
  • dodawanie (lub odejmowanie) dużej i małej liczby zmiennoprzecinkowej
  • kolejność operacji arytmetycznych może mieć wpływ na wielkość błędu
→ Slide 14

Błąd bezwzględny - różnica pomiędzy wartością zmierzoną $x$ a wartością rzeczywistą $x_{0}$

$$\Delta x = x - x_{0} $$

Błąd względny - iloraz błędu bezwzględnego i wartości dokładnej $x_{0}$

$$\delta_x = \frac{\Delta x}{x_{0}}$$

→ Slide 15

Treść zadania znajduje się w Moodle pod adresem Zadanie 1

→ Slide 16

Dodatkowe ćwiczenia nie podlegające ocenie.

Ćw. 1

Napisz program znajdujący pierwiastki równania kwadratowego $$y = ax^2 + bx + c$$ dla dowolnych $a, b, c$.

Przy wyznaczaniu pierwiastków tradycyjnym podejściem (z wyznaczeniem delty) może dojść do istotnego błędu zaokrągleń gdy delta $\sqrt{\Delta}$ jest bliska $b$. Spróbuj zniwelować wpływ tego błędu wykorzystując Wzory Viète’a

Ćw. 2 Napisz program wyznaczający $\sqrt{2}$ a następnie podnieś wynik do kwadratu. Wypisz wartość bledu względnego uzyskanego wyniku dla typu float oraz osobno dla typu double.

Ćw.3 Napisz program wyznaczający wartość wielomianu $f(x) = a_{n}x^n + \ldots + a_2x^2 +a_1x + a_0$ za pomocą schematu Hornera

Ćw. 4 Napisz program wyznaczający sumę szeregu $$\sum_{n=0}^{\infty} q^{n}=1+q+q^{2}+q^{3}+\ldots \qquad \text{dla}\quad |q| < 1$$

Dla podanych przez użytkownika wartości $q$ oraz $k$ program wypisuje:

  • informację, że szereg jest rozbieżny, gdy nie jest spełniony warunek $|q|<1$
  • dokładną wartość sumy szeregu równą $\frac{1}{1-q}$
  • przybliżoną wartość sumy szeregu uzyskaną po dodaniu $k$ kolejnych elementów ciągu $\sum_{n=0}^{k} q^{n}$ oraz wartość błędu względnego i bezwzględnego
  • przybliżoną wartość sumy szeregu uzyskaną po dodaniu $k$ kolejnych elementów ciągu w odwrotnej kolejności $\sum_{n=k}^{0} q^{n}$ oraz wartość błędu względnego i bezwzględnego

Sprawdź wyniki programu dla $q=0.99$ i $k=10^6$. Dlaczego błędy obu przybliżeń się różnią?