|
Serwis Edukacyjny Nauczycieli I-LO w Tarnowie
Materiały dla uczniów liceum |
Autor artykułu: mgr Jerzy Wałaszek |
©2026 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;
a = 255;
a++;
cout << (int)a
<< endl;
system("pause");
return 0;
} |
Pascalprogram test;
{$APPTYPE CONSOLE}
var
a : byte;
begin
a := 255;
a := a + 1;
writeln(a);
writeln;
writeln('Nacisnij ENTER...');
readln;
end. |
BasicDim As Byte a a = 255 a += 1 Print a Print Print "Nacisnij klawisz..." Sleep End |
W tym przykładzie do zmiennej a o wartości początkowej 0 dodajemy dziesięć razy liczbę 0.1 = 1/10 i jeśli wynik wynosi 1, wypisujemy w okienku konsoli tekst "Jest", a w przeciwnym razie wypisujemy tekst "Brak". Sprawdź, co pojawi się na ekranie.
C++#include <iostream>
using namespace std;
main()
{
float a;
a = 0;
for(int i = 0; i < 10; i++)
a += 0.1;
if(a == 1.0)
cout << "Jest";
else
cout << "Brak";
cout << endl;
system("pause");
return 0;
}
|
Pascalprogram test;
var
a : real;
i : integer;
begin
a := 0;
for i := 1 to 10 do
a := a + 0.1;
if a = 1 then
writeln('Jest')
else
writeln('Brak');
writeln;
writeln('Nacisnij ENTER...');
readln;
end.
|
BasicDim As Single a Dim As Integer i a = 0 For i = 1 to 10 a += 0.1 Next If a = 1.0 Then Print "Mam" Else Print "Nie mam" End If Print Print "Nacisnij klawisz..." Sleep 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 << endl;
system("pause");
return 0;
} |
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. |
BasicDim As Single a Dim As Integer i a = 0.0 For i = 1 To 20000000 a += 1.0 Next Print Using "########";a Print Print "Nacisnij klawisz..." Sleep 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. Programy są jedynie dodatkiem, a nie celem tego opracowania.
Zapraszamy
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.