Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Autor artykułu: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek
|
Przedstawiony tutaj artykuł ma na celu zaznajomienie uczniów z podstawowymi sposobami kodowania liczb we współczesnych komputerach. Wiedza ta jest niezbędna przy programowaniu, ponieważ zrozumienie sposobu reprezentacji informacji w komputerze pozwala nam ustrzec się wielu pułapek, które czyhają na nieświadomych programistów.
Poniższy program (zobacz na uwagi o językach programowania) umieszcza w zmiennej liczbę 255, dodaje do tej zmiennej 1 i wyświetla jej zawartość. Czy wynik jest zgodny z twoimi oczekiwaniami?
C++#include <iostream> using namespace std; main() { unsigned char a; char s[1]; a = 255; a++; cout << (int)a << "\nNacisnij ENTER...\n"; cin.getline(s,1); } |
Pascalprogram test; {$APPTYPE CONSOLE} var a : byte; begin a := 255; a := a + 1; writeln(a); writeln; writeln('Nacisnij ENTER...'); readln; end. |
W tym przykładzie w zmiennej umieszczamy wartość 1/10, mnożymy ją przez 10 i jeśli wynik wynosi 1, wypisujemy w okienku konsoli tekst "Mam", a w przeciwnym razie wypisujemy tekst "Nie mam". Sprawdź, co pojawi się na ekranie
C++#include <iostream> using namespace std; main() { float a; char s[1]; a = 0.1; if(10 * a == 1) cout << "Mam\n"; else cout << "Nie mam\n"; cout << "\nNacisnij ENTER...\n"; cin.getline(s,1); } |
Pascalprogram test; var a : real; begin a := 0.1; if 10 * a = 1 then writeln('Mam') else writeln('Nie mam'); writeln; writeln('Nacisnij ENTER...'); readln; end. |
Ten przykład daje jeszcze dziwniejsze wyniki - jakby komputer przestawał liczyć. Na początku zerujemy zmienną, a następnie dodajemy do niej 1 w pętli wykonywanej 20 milionów razy. Logika podpowiada nam, iż zmienna powinna osiągnąć wartość 20 milionów, a osiąga ... - sprawdźcie sami ile.
C++#include <iostream> #include <iomanip> using namespace std; main() { float a; int i; char s[1]; cout.precision(0); cout.setf(ios::fixed); a = 0; for(i = 1; i <= 20000000; i++) a++; cout << a << "\nNacisnij ENTER...\n"; cin.getline(s,1); } |
Pascalprogram test;
var
a : single;
i : integer;
begin
a := 0;
for i := 1 to 20000000 do a := a + 1;
writeln(a:0:0);
readln;
end.
|
Jeśli wyniki pracy tych programów wywołały u ciebie lekkie zaniepokojenie, to jest to pozytywny objaw. Nie są to żadne sztuczki czy też błędy - po prostu zwykła konsekwencja binarnego zapisu liczb w komputerze i własności tego zapisu. Po przeczytaniu naszego opracowania tego typu sytuacje staną się dla ciebie zupełnie jasne i oczywiste. Co więcej, będziesz w stanie przewidzieć różne pułapki, które mogą pojawić się w trakcie wykonywania obliczeń na komputerze bez względu na zastosowany język programowania.
Prezentowane w artykule algorytmy wzbogaciliśmy o proste przykłady programów w poniższych środowiskach programowania:
Wszystkie są darmowo dostępne poprzez sieć Internet.
Zapraszamy
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.