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: