Lista 3 -- Wstęp do informatyki, W. Hebisch
Zadanie 1
Poniższy program wypisuje liczbę w postaci binarnej:
#include <stdio.h>
int main(void)
{
char tabela_cyfr[]={'0','1'};
char cyfry_wynikowe[32];
unsigned int n = 1000000222;
int i;
for(i=0; i < 32; i = i + 1) {
int cyfra = n % 2;
n = n / 2;
cyfry_wynikowe[i] = tabela_cyfr[cyfra];
}
for(i=31; i >= 0; i = i - 1) {
putchar(cyfry_wynikowe[i]);
}
putchar('\n');
return 0;
}
Przerobić program tak by wypisał reprezentację dziesiętną liczby.
Następnie zająć się reprezentacją szesnastkową.
Zadanie 2
Wypróbować poniższy program:
#include <stdio.h>
int main(void)
{
signed char i;
/* Kiedy pętla zakończy działanie ? */
for(i = 0; i > -100; i = i + 50) {
printf("i = %d\n", i);
}
return 0;
}
Wyjaśnić teoretycznie działanie programu. Sprawdzić co się stanie
gdy 'signed char' zastąpi się przez 'unsigned char'. Znaleźć podobne
przypadki dla liczb 'short int'
Zadanie 3
Dla 16-bitowych ('short') argumentów i wyniku
znaleźć najmniejszą liczbę dodatnią n taką żę n*n<0 (napisać
odpowiedni program). To samo
przy 32-bitowej dokładności ('int').
Zadanie 4
Spróbować wyznaczyć epsilon maszynowy dla naszych komputerów,
tzn. wyznaczyć najmniejszą dodatnią liczbę 'eps' typu 'double'
taką że 1.0+eps == 1.0. Wskazówka: eps powinno być ujemną potegą
2, więc wystarczy wstępnie podstawić 1 za eps, a następnie dzielić
eps przez dwa, tak długo dopóki nie zajdzie równość. Sprawdzić jak
na wynik wpływa optymalizacja i przechowywanie pośrednich
wyników w zmiennych. Wyjaśnić teoretycznie otrzymane wartości.
Zadanie 5
Znaleźć najmniejsze naturalne j, takie że w arytmetyce komputerowej
(typu 'double') j*(1/j) nie jest równe 1. Jak by to wyglądało, gdyby
komputer zamiast zaokrąglać
odrzucał cyfry dla których zabrakło miejsca.
Zadanie 6
Ręcznie wykonać następujace obliczenia:
- Zapisać 55, 1025, 500, 2000, jako liczby dwójkowe.
- Jak wygląda zapis liczb -1, -55 jako liczb 16-bitowych ('short')
--- podać postać dwójkową.
- Dodać liczby dwójkowe 10010101 i 00101011.
- Zapisać liczbę 1/5 jako ułamek dwójkowy (liczbę dwójkową z
przecinkiem).