Serwis Edukacyjny
Nauczycieli I-LO w Tarnowie
obrazek Materiały dla uczniów liceum

  Wyjście       Spis treści       Dalej  


Autor artykułu: mgr Jerzy Wałaszek

©2026 mgr Jerzy Wałaszek

Wstęp

SPIS TREŚCI

Wstęp

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;
}
Pascal
program test;

{$APPTYPE CONSOLE}

var
  a : byte;
begin
  a := 255;
  a := a + 1;
  writeln(a);
  writeln;
  writeln('Nacisnij ENTER...');
  readln;
end.
Basic
Dim 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;
}
Pascal
program 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.
Basic
Dim 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;
}
Pascal
program test;

var
  a : single;
  i : integer;
begin
  a := 0;
  for i := 1 to 20000000 do
    a := a + 1;
  writeln(a:0:0);
  readln;
end.
Basic
Dim 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.

Uwagi na temat języków 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


do podrozdziału  do strony 

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: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.