2010

 

Tutaj zamieszczamy odpowiedzi na listy wysłane przez czytelników do naszego serwisu edukacyjnego, które wg naszej opinii są warte publicznej odpowiedzi ze względu na powtarzający się charakter lub poruszane w nich zagadnienia.


Pytanie czytelnika:

Prześlijcie mi rozwiązania z artykułu Zadania do Informatyki...

Odpowiedź:

Taki list świadczy o tym, iż czytelnik, zgodnie z tradycją czytelników sieciowych, nie pofatygował się, aby przeczytać wstęp do artykułu (w sumie zastanawiam się, czy jest sens pisania takich wstępów, skoro wszyscy je i tak olewają). We wstępie dowiedziałby się dokładnie w jakim celu ten artykuł powstał. Są to pytania i projekty, które wykorzystujemy na sprawdzianach i ćwiczeniach. Co rok wymyślam nowe zadania, które mogą się przydać w roku następnym. Nie mam do nich odpowiedzi w formie pisemnej. To uczeń ma dać odpowiedź, a ja sprawdzam, czy jest prawidłowa.


Pytanie czytelnika:

Wpisałem wasz program do Visual coś tam i nie działa. Co jest źle?

Odpowiedź:

Zanim zaczniesz uruchamiać programy z artykułów naszego serwisu, powinieneś przeczytać wstęp, co zresztą przy każdym programie wyraźnie proponujemy. Wszystkie programy były uruchomione i na pewno działają ze standardowymi ustawieniami środowiska. We wstępie pisze dokładnie dla jakiego kompilatora są one przeznaczone. Jeśli próbujesz je uruchamiać w innym środowisku (np. w Visual C++ zamiast w Dev-C++), to musisz je sobie dostosować. Zwykle sprowadza się to do dodania kilku plików nagłówkowych - np. w Visual C++ 2008 EE należy utworzyć projekt konsoli (ang. Win32 Console Application) i dodać na początku:

#include "stdafx.h"

Nie są to jedyne zmiany - kompilatory nie są między sobą kompatybilne. Dlatego korzystaj z algorytmu, a nie z gotowca. Jeśli poznasz i zrozumiesz algorytm, to sam sobie napiszesz odpowiedni program.


Pytanie czytelnika:

Po co piszecie w artykułach nazwy angielskie? Chwalicie się znajomością angielskiego czy co?

Odpowiedź:

Dostałem kilka listów o powyższej treści. Nie, niczym się nie chwalę, bo nie muszę. Nazwy angielskie podaję dla wygody czytelników - oczywiście tych mądrzejszych, którzy nie szukają jedynie gotowców. Dzięki nazwie angielskiej czytelnik może przeszukać sieć. Internet jest już tak skonstruowany, iż nazwy polskie zwykle kierują nas na strony uczelni wyższych, na których znajdujemy tylko tematy prowadzonych tam wykładów. Nazwa angielska otwiera przed czytelnikiem prawie wszystkie zasoby Internetu. Jeśli znamy język angielski (zauważyłem, iż hiszpański również się przydaje), to bez problemu znajdziemy setki lub tysiące stron opisujących szeroko dane zagadnienie. Stąd dobra rada - inwestuj w siebie i ucz się matematyki, informatyki oraz angielskiego, a na pewno nie zginiesz w świecie.


Pytanie czytelnika:

Nie podobają mi się nazwy zmiennych w waszych programach, zmieńcie je na inne.

Odpowiedź:

Nazwy zmiennych to rzecz gustu. Zawsze staram się je dobierać do spełnianych przez nie funkcji. Z drugiej strony gratuluję czytelnikowi znajomości funkcji edycyjnych - każdy edytor posiada coś takiego jak znajdź i zamień (ang. find and replace). Jeśli mi się nie podoba nazwa zmiennej, wywołuję wspomnianą funkcję, wpisuje w pole find nazwę zmiennej, w pole replace swoją nazwę i wybieram opcję replace all i już po problemie.


Pytanie czytelnika:

Dlaczego artykuł XXX jest niedokończony?
Kiedy w końcu ukończycie artykuł XXX?
Dlaczego publikujecie niekompletne artykuły?

Odpowiedź:

Prawda jest następująca. Serwis edukacyjny I LO jest tworzony przez jedną osobę, z którą nikt nie chce podejmować współpracy za wyjątkiem kilku nauczycieli fizyki, np. duże podziękowania należą się mgr Tadeuszowi Sypkowi za przygotowanie bardzo interesujących artykułów w dziale fizyki i astronomii. W sumie nie dziwię się im, ponieważ przygotowanie jednego artykułu trwa miesiące i za wykonaną pracę nikt nie płaci ani złotówki - pozostaje jedynie satysfakcja. Często zdarza się tak, iż autor rozpoczyna pracę nad danym artykułem i musi ją przerwać na pewien czas, aby zająć się pilniejszymi sprawami. Jednakże fragmenty już napisanego artykułu mogą być potrzebne na prowadzonych w szkole zajęciach. Dlatego artykuł jest publikowany, chociaż nie został jeszcze ukończony. W wolnej chwili autor zawsze stara się kontynuować rozpoczętą pracę, czasami może to postępować bardzo wolno. Dlatego prosi się czytelników naszego serwisu o wyrozumiałość i cierpliwość - w ostateczności zawsze można podjąć współpracę z autorem i pomóc mu przyspieszyć zakończenie pracy...


Pytanie czytelnika:

Nie rozumiem systemu dwójkowego (ósemkowego, szesnastkowego). Wyjaśnijcie mi to.

Odpowiedź:

W ostatnim czasie coraz więcej pojawia się takich listów, co dziwniejsze są one wysyłane z wnętrza artykułu, w którym łopatologicznie wyłożyliśmy cały materiał z mnóstwem przykładów i ćwiczeń. Wniosek tylko jeden, albo piszącego opanowała tempotum totalis, albo po prostu nie chce mu się czytać (a może nie rozumie tekstu ze względu na analfabetyzm funkcjonalny). Cóż, autor nie będzie pisał nowego artykułu opisującego to, co jest w innym artykule. Aby studiować informatykę, uczeń musi posiadać pewien poziom intelektualny, w przeciwnym razie tylko marnuje swój czas oraz czas nauczyciela.

Prosty przykład:

W pewnej klasie ćwiczyliśmy programowanie na mniej więcej takim przykładzie w języku BASIC (było to dosyć dawno):

INPUT "WPISZ PROMIEN KOLA : ", R
OBW = 2 * PI * R
PRINT "OBWOD WYNOSI "; OBW
END

W pewnym momencie widzę, iż jedna z dziewczyn siedzi bezczynnie przed monitorem. Podchodzę i pytam dlaczego nic nie robi. Odpowiada, że nie wie co ma robić. Ponieważ program był uruchomiony i na ekranie widniał napis:

WPISZ PROMIEN KOLA : _

kazałem jej przeczytać to, co widzi. Przeczytała. Pytam co masz zrobić. Odpowiada, że nie wie. Mówię, przeczytaj jeszcze raz. Czyta. Co masz zrobić. No nie wiem, wpisać promień? Tak. Patrzę, a ona wpisuje:

P R O M I E N

W tym momencie zaswiędziała mnie łapa.

Inny przykład

Ćwiczymy operacje na tekstach. Mamy funkcję Delete(text,pozycja,ile), która usuwa z tekstu zadaną liczbę znaków od podanej pozycji. Mamy tekst "KOWALSKI JAN". Należy z niego usunąć KOWALSKI oraz spację tak, aby pozostało "JAN". Pytam którąś z kolei uczennicę jakie parametry przekaże do funkcji Delete. Trafiłem na mądrą, bo odpowiada:

Delete(tekst,1,1)

Ale, mówię, to usunie tylko pierwszą literkę z tekstu i pozostanie w nim "OWALSKI JAN", a ja chcę samo "JAN". To uczennica odpowiada, że można usunąć też drugą literę:

Delete(tekst,1,2)

Widzi ktoś sens w tym rozumowaniu? A nie można od razu Delete(tekst,1,9). To już chyba jest zbyt skomplikowane, duże liczby wchodzą w grę, większe od 3, zatem uczeń tego nie łapie...

Parę innych kwiatków:

1/4 + 1/8 = 2/12 - klasa matematyczna!

102 = 20 - klasa fizyczna!

sin(30) / sin(60) = 30 / 60 = 1/2 - znów klasa matematyczna!

profesor komputera - w znaczeniu procesor!

szuf - kwiatek z gimnazjum, znaczenie: żółw!

Proste pytanie - jak takich ludzi, a jest ich coraz więcej w szkole, mamy nauczyć metod informatyki, algorytmiki - sortowań, wyszukiwań, szyfrowania danych, zaawansowanych struktur danych takich, jak listy, stosy, kopce, drzewa, grafy?  Przecież dla nich to totalna magia. To pokolenie będzie pracowało na nasze emerytury. Włos się jeży, chyba przyjdzie nam umrzeć z głodu.


Pytanie czytelnika:

W artykule XXX jest błąd, jak coś takiego można było napisać!

Odpowiedź:

Autor pisze swoje artykuły najczęściej po dniu ciężkiej pracy. W takim stanie popełnia się różne błędy, co nie jest niczym dziwnym. Zamiast więc wylewać kubły zimnej wody na artykuł i autora, wystarczy po prostu uprzejmie zwrócić uwagę na błąd. Na przykład tak:

W artykule tym a tym zauważyłem błąd taki to a taki.

Dalszy komentarz jest zbędny, gdyż te błędy to najczęściej zwykłe literówki, opuszczenie znaku lub jakiejś cyfry albo drobny błąd rachunkowy. Dostałem parę listów odnośnie błędów w algorytmach, lecz najczęściej okazywało się, iż to czytelnik nie zrozumiał dobrze zasady działania algorytmu i próbował z nim zrobić coś, do czego nie był projektowany. Przed publikacją w serwisie wszystko dokładnie testujemy, co nie znaczy, iż nie może się tam pojawić żaden błąd. Dlatego zawsze dziękujemy i jesteśmy wdzięczni czytelnikom za wyłapanie jakiejś nieścisłości - błąd poprawimy i serwis stanie się jeszcze lepszy i bardziej wiarygodny dla innych użytkowników.


Pytanie czytelnika:

Dlaczego w artykule XXX nie ma programu w języku YYY?
Prześlijcie mi program w języku YYY z artykułu XXX
Jak będzie wyglądał program w języku YYY dla artykułu XXX.
...

Odpowiedź:

Nasze artykuły posiadają wstęp, w którym pisze co następuje:

Ponieważ dostaję dużo listów od nieuważnych czytelników, wyjaśniam, iż prezentowane programy są jedynie przykładami realizacji opisywanych algorytmów w wybranych językach programowania. W żadnym razie nie są one celem artykułu. Celem są ALGORYTMY. Znając algorytm można napisać dobry program w dowolnym języku programowania. Dla uzasadnienia mojej postawy przytoczę znany cytat profesora Donalda Knutha (jednego z największych współczesnych autorytetów w dziedzinie informatyki):

"Languages come and go,
but algorithms stand the test of time
"

Donald Knuth

"Języki programowania pojawiają się i odchodzą,
lecz algorytmy wytrzymują próbę czasu
"


Donald Knuth

Donald Knuth na potrzeby swoich książek "The Art of Computer Programming" stworzył nawet fikcyjną maszynę cyfrową oraz język asemblera dla niej, w którym prezentowane są wszystkie przykłady programów. Chodziło o to, aby pokazać uniwersalność rozwiązań, a nie sztuczki programowania w określonym języku, którego może za kilka lat nie być wcale.

Problemem jest tylko to, iż mało kto nasz wstęp czyta ze zrozumieniem. Jeśli ktoś, mając podany na tacy algorytm z pełną specyfikacją i opisem, nie potrafi zapisać go w swoim języku programowania, to raczej powinien się zabrać intensywnie za naukę podstaw tego języka - większość podawanych przez nas algorytmów wymaga jedynie kilku prostych konstrukcji:

  1. Deklaracja zmiennej, tablicy (np w C++: int x, a[20];)
  2. Instrukcja przypisania (np. w C++:  x = 5;)
  3. Instrukcja wejścia/wyjścia (np. w C++:  cin >> a; cout << "Hello\n";)
  4. Instrukcja warunkowa (np. w C++:  if(a == 5) b++)
  5. Instrukcja wyboru (np. w C++:  switch())
  6. Instrukcja pętli warunkowej (np. w C++:  while(), do...while())
  7. Instrukcja pętli iteracyjnej (np. w C++:  for())
  8. Wywołanie procedury, funkcji
  9. Powrót z procedury, funkcji ze zwrotem wyniku lub bez zwrotu (np. w C++:  return;)

Zagadnienia te omawiają szeroko wszystkie podręczniki programowania.