Wstęp


Podrozdziały

 

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?

 

// Przykład w Delphi

program test;

{$APPTYPE CONSOLE}

var
  a : byte;
begin
  a := 255;
  a := a + 1;
  writeln(a);
  writeln;
  writeln('Nacisnij ENTER...');
  readln;
end.

 

Jeśli sądzisz, że zjawisko to występuje tylko w języku Pascal, to wypróbuj ten program:

 

// Przykład w języku 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);
}

 

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

 

// Przykład w języku Pascal

program 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.

 

// Przykład w języku 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);
}

 

 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.

 

// Program w języku 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.

 

// Przykład w języku 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);
}

 

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:

 

Borland Delphi 7.0 Personal

Borland C++ Builder 6.0 Personal

Microsoft Visual Basic 2005 Express Edition

JavaScript

 

Wszystkie są darmowo dostępne poprzez sieć Internet. Zamiast Delphi 7.0 Personal możesz używać Free Pascal. Zamiast C++ Builder 6.0 możesz używać Code::Blocks lub Dev-C++.

Zapraszamy.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.