19.10.2010 14:52:37
Języki, automaty, obliczenia
Laboratorium 1
Celem ćwiczenia jest zapoznanie się z podstawami programowania w języku PHP.
Należy napisać program, który wczyta z dysku plik zawierający informację o N zbiorach, zapamięta
tę informację w odpowiednich zmiennych i wyświetli wczytane dane zbiory na konsoli. Zawartość
pliku z danymi:
{A,B,C,D,E}
{1,2,3}
{x1,x2,x3,x4}
{y1,y2,y3,y4,y5}
1. Wstęp do ćwiczenia
Język programowania PHP jest językiem skryptowym, łączącym elementy programowania
strukturalnego i obiektowego. Ponieważ programowanie strukturalne należy obecnie do historii
informatyki, na zajęciach skupimy się na programowaniu obiektowym.
1.1. Program w języku PHP
Wg paradygmatu programowania obiektowego, program składa się z klas. Dobra praktyka
programistyczna nakazuje umieszczać deklarację jednej klasy w jednym pliku. Nazwa klasy jest jest
identyczna z nazwą pliku. Do klasy możemy przypisać pola lub metody:
•
pole to zmienna przypisana do klasy,
•
metoda to funkcja przypisana do klasy.
Klasy są podobne do struktur z języka C – oprócz danych zawierają też kod operacji na danych.
W powyższym kodzie pokazano klasę o nazwie
ProgramJAO
, która posiada pole o nazwie
wynik
i metodę o nazwie
main
. Metoda
main
otrzymuje dwa parametry. Słowo public mówi, że pole
i metoda mogą być używana przez dowolną inna klasę.
1.2. Zmienne, funkcje, parametry funkcji w języku PHP
•
W języku PHP nazwa zmiennej musi być poprzedzona znakiem $.
•
W przeciwieństwie do języka C, nie trzeba deklarować zmiennych. Deklaracja następuje
w momencie pierwszego przypisania wartości do zmiennej.
1
•
W PHP występują następujące typy zmiennych:
boolean
,
integer
,
float
,
string
,
array
i typy obiektowe. Interpreter PHP przypisuje typ do zmiennej podczas wykonywania
programu.
•
W deklaracji funkcji nie określamy typów parametrów.
1.3. Konwencje nazewnicze
Przez lata rozwoju informatyki programiści wypracowali pewne nawyki, których bezwzględnie
należy przestrzegać:
1. Nazwy klas piszemy zawsze wielką literą, np. klasa
ProgramJAO
.
2. Nazwy zmiennym piszemy zawsze małą literą, np.
$parametr
.
3. Nazwy funkcji i metod piszemy zawsze małą literą.
4. Na granicy słów stosujemy wielką literę, np. klasa
StudentPolitechniki
, zmienna
$ocenaKoncowa
, funkcja
wystawOcenę($student)
.
1.4. Klasy i obiekty
Klasa jest opisem informacji i zachowania pewnej grupy obiektów, charakteryzujących się wspólnymi
cechami. Obiekt jest instancją klasy.
Powyższy kod deklaruje zmienną o nazwie
program
i przypisuje do niej obiekt klasy
ProgramJAO
. Druga linijka wywołuje metodę
main
obiektu
program
. Trzecia linijka wyświetla
wartość pola
wynik
obiektu
program
. Operatorem dostępu do pól i metod obiektu jest „
->
”.
1.5. Dostęp do pól w klasie
Z kodu metody klasy możemy uzyskać dostęp do pól klasy, poprzedzając ich nazwy słowem
kluczowym
this
:
class ProgramJAO {
public $wynik;
public function main($parametr1, $parametr2) {
//zwróć uwagę, gdzie jest znak $
$this->wynik = $parametr1 + $parametr2;
}
}
1.6. Tablice
W języku PHP występuja asocjacyjne tablice dynamiczne, tworzone następująco:
$tablica1 = array(); // tworzy pustą tablicę
$tablica1[] = 1; // dodaje element do tablicy
$tablica2[] = 2;
$tablica3[] = ”abc”;
$tablica2 = array(1, 2, ”abc”); // tworzy tablicę
W powyższym przykładzie $tablica1 i $tablica2 zawierają identyczne dane.
2
1.7. Wczytywanie danych tekstowych z pliku
Używamy instrukcji podobnych do języka C.
Linia 36 otwiera plik o nazwie
dane.txt
w trybie do odczytu. W pętli
while
(linia 38) wczytujemy
kolejne linie tekstu z pliku (linia 40). W linii 42 sprawdzamy, czy przeczytano pustą linię.
Po zakończeniu operacji na pliku, plik jest zamykany (linia 47).
1.8. Pobieranie znaków z tekstu
W celu odczytania z łańcucha tekstowego znaku z pozycji n, używamy funkcji:
1.9. Zastępowanie znaków w tekście
W języku PHP do zastępowania znaków w tekście używamy funkcji str_replace:
W linii 41 tworzymy tablicę zawierającą znaki, które będą wyszukiwane w tekście. Linia 42 powinna
zawierać tablicę przechowującą znaki, którymi zastąpione zostaną znalezione. Ponieważ zmienna ta
jest pusta, funkcja
str_replace
usunie znalezione znaki. Linia 43 wykonuje operację zastąpienia.
Ze zmiennej
linia
usunięte zostaną elementy tablicy
znaki
.
1.10. Usuwanie znaków
W języku PHP do usunięcia znaków z początku lub końca linii uzywamy funkcji ltrim i rtrim:
$linia = rtrim($linia, ","); // usuwa ”,” z końca linii
$linia = ltrim($linia, "#"); // usuwa ”#” z początku linii
$linia = trim($linia, "-+"); // usuwa ”+-” z początku i końca linii
3
1.11. Zamiana tekstu na tablicę
W języku PHP zamianę tekstu na tablicę wykonuje funkcja
explode
:
// jeżeli jest $linia=”a:b:c”;
// to będzie $zbior=array(”a”, ”b”, ”c”);
$zbior = explode(”:”, $linia);
Pierwszym parametrem funkcji
explode
jest separator elementów tablicy. W przykładzie powyżej
w zmiennej
zbior
pojawi się tablica utworzona z zawartości zmiennej
linia
.
1.12. Łączenie i wyświetlanie tekstów
Operatorem łączenia łańcuchów tekstowych w języku PHP jest „.” (kropka):
$linia = $linia . " tekst";
Do wyświetlania informacji na konsoli służy m.in. funkcja echo:
echo "{" . $linia . "}\n";
Do wyświetlania zmiennych w sposób zrozumiały dla człowieka służy funkcja print_r:
print_r($tablica);
2. Przebieg ćwiczenia
Uruchom program Netbeans. Z menu Window wybierz polecenie Projects. Pojawi się okno
z projektami (może być puste). Jeżeli okno ma aktywny przycisk dokowania (po ustawieniu kursora
myszy, pojawi się podpowiedź Pin), kliknij go.
2.1. Zamknij otwarte projekty w Netbeans
Może się zdarzyć, że po uruchomieniu środowiska Netbeans, otwarte zostaną projekty z innych zajęć.
Zamknij je wszystkie.
Na rysunku poniżej otworzone są trzy projekty. Dla każdego projektu:
•
kliknij lewym przyciskiem myszy w
nazwę projektu
, żeby go podświetlić,
•
wciśnij na klawiaturze klawisz z napisem Delete lub Del,
•
w okienku Delete Project zaznacz opcję
Also delete sources
,
•
w okienku Delete Project kliknij przycisk z napisem Yes.
4
Czy po wykonaniu tych czynności okno projektów w Netbeans wygląda tak, jak na rysunku niżej?
NIE
→ wykonaj jeszcze raz punkt 2.1.
TAK → przejdź do punktu 2.2.
2.2. Utworzenie Projektu
Upewnij się, czy wykonany został punkt 2.1. instrukcji do ćwiczenia.
Utwórz nowy projekt z kategorii PHP, typ PHP Application, wybierając z menu File polecenie New
Project.
5
Nazwa
projektu
x
?
Podaj nazwę projektu, np. JAOLab1 i wybierz folder na pliki projektu. Wybierz taki folder, który jest
pusty i w którym masz uprawnienia do zapisu. Na systemie operacyjnym Windows prawa do zapisu
masz w folderze o nazwie Moje Dokumenty.
W kroku o nazwie Run Configuration wybierz opcję Run as Script (run in command line). Jeżeli
środowisko Netbeans nie znalazło interpretera języka PHP, osoba prowadząca zajęcia poda
odpowiednią ścieżkę.
2.3. Struktura programu
W okienku Projects rozwiń utworzony projekt i grupę
Source Files.
Czy w grupie Source Files jest plik o nazwie
index.php
?
Tak → przejdź do punktu 2.3.2
Nie → przejdź do punktu 2.3.1
6
?
2.3.1 Utworzenie pliku index.php
Jeżeli w grupie Source Files nie ma pliku o nazwie
index.php
, utwórz go:
•
kliknij prawym przyciskiem myszy w grupę Source files i z menu kontekstowego wybierz
polecenie New PHP File,
•
w oknie kreatora pliku wpisz nazwę pliku:
index
,
•
w oknie kreatora pliku kliknij przycisk z etykietą Finish.
2.3.2 Kontrola poprawności wykonywania ćwiczenia
Czy okno Netbeans wygląda tak, jak na rysunku niżej?
NIE
→ przejdź do punktu 2.1. instrukcji.
TAK → kontynuuj wykonywanie ćwiczenia.
7
2.3.3 Utworzenie klasy programu
1. Utwórz nową klasę PHP:
•
rozwiń zawartość projektu,
•
kliknij prawym przyciskiem myszy w grupę Source files i z menu kontekstowego wybierz
polecenie New PHP Class.
2. W oknie kreatora klasy wpisz nazwę klasy:
ProgramJAO
.
3. W grupie plików źródłowych Utwórz nowy pusty plik (New empty file) o nazwie dane
z rozszerzeniem txt (
dane.txt
). Wypełnij plik danymi postaci:
{ A, B,C, D , E}
{1,2,3 }
{x1,x2,x3,x4}
4. Zapisz plik z danymi.
5. Przejdź do klasy
ProgramJAO
. W miejscu, w którym podpowiada środowisko Netbeans (put
your code here) wpisz następujący kod (patrz punkt 1.1.):
•
utwórz publiczne pole o nazwie
wynik
,
•
utwórz publiczną bezparametrową metodę o nazwie
main
.
6. Przejdź do pliku
index.php
. Pomiędzy znacznikami
<?php
i
?>
dopisz następujący kod:
•
zadeklaruj zmienną o nazwie
program
i przypisz do niej obiekt klasy
ProgramJAO
(patrz punkt 1.4.),
•
wywołaj metodę
main
obiektu
program
,
•
wyświetl przy użyciu funkcji
print_r
pole
wynik
obiektu
program
(punkt 1.12.).
Sprawdź, czy liczba linii kodu wpisanych przez ciebie jest równa 3. Jeżeli wpisane zostało
więcej niż 3 linie kodu, skasuj je wszystkie i wykonaj punkt 6. od początku.
7. W pliku
index.php
, w pierwszej linijce, która zost-
ała napisana przez ciebie, kliknij prawym przyciskiem
myszy na nazwę klasy
ProgramJAO
. Z menu kon-
tekstowego wybierz polecenie Fast import. Pojawi się
okno z propozycjami klas, które należy dołączyć do
programu. Wybierz instrukcję
require_once ProgramJAO.php
.
8
8. Z menu Run wybierz polecenie Run project. Okno Output środowiska Netbean powinno być
puste.
2.4. Implementacja algorytmu
Pisząc kod programu, przestrzegaj następujące zasady:
1. Wstawiaj w komentarzach odnośniki do kroków algorytmu, np. punktom 1 i 2 algorytmu
odpowiada następujący kod PHP:
$zbiory = array(); // punkt 1
$zbior = array(); // punkt 2
2. Stosuj tabulatory w celu uczynienia kodu czytelnym, np.:
while(true) {
for($i = 0; $i<10; $i++) {
echo $i;
}
}
W metodzie
main
klasy
ProgramJAO
dodać kod działający wg algorytmu:
1. Utwórz zmienną o nazwie
zbiory
i przypisz do niej pustą tablicę (punkt 1.6.). Ta tablica
będzie przechowywać wszystkie zbiory z pliku.
2. Utwórz zmienną o nazwie
zbior
i przypisz do niej pustą tablicę (punkt 1.6.). Ta tablica
będzie przechowywać dane jednego zbioru.
3. Otwórz plik z danymi w trybie do odczytu (punkt 1.7.).
4. Dopóki są dane w pliku, w pętli wykonuj algorytm:
4.1. Pobierz linię z pliku. Zapisz ją do zmienne o nazwie
linia
.
4.2. Jeżeli linia wczytana z pliku jest pusta, przerwij pętlę.
4.3. Usuń z wczytanej linii znaki
” ”, ”\r”, ”\n”
(punkt 1.9.).
4.4. Sprawdź, czy na początku linii jest znak
”{”
, a na końcu
”}”
(punkt 1.8.). Jeżeli nie ma
tych znaków, przerwij pętlę.
4.5. Usuń znaki
”{”
i
”}”
z początku i końca linii (patrz 1.10.).
4.6. Zamień linię na tablicę o nazwie
zbior
. Separatorem elementów zbioru jest przecinek
(znak „ , ”) (punkt 1.11.).
4.7. Dodaj zmienną
zbior
do tablicy
zbiory
(punkt 1.6.)
5. Zamknij plik.
6. Przypisz zawartość zmiennej
zbiory
do pola
wynik
(patrz punkt 1.5.).
9
2.5. Koniec ćwiczenia
Sprawdź, czy:
1. Program napisany przez ciebie wykonuje się bez błędów i realizuje cel ćwiczenia.
2. Program składa się z trzech plików:
dane.txt
,
index.php
i
ProgramJAO.php
.
3. Plik
index.php
zawiera instrukcję dołączenia pliku
ProgramJAO.php
i 3 linijki kodu.
4. W pliku
ProgramJAO.php
znajduje się wyłącznie klasa
ProgramJAO
.
5. Klasa
ProgramJAO
zawiera jedno publiczne pole o nazwie
wynik
i jedną publiczną
bezparametrową metodę o nazwie
main
.
6. Kod wpisany do metody
main
klasy
ProgramJAO
jest zgodny z algorytmem z punktu 2.4.
7. Linie kodu z metody
main
klasy
ProgramJAO
zawierają w komentarzach odnośniki
do punktów algorytmu.
Zamknij projekt w środowisku Netbeans. Zarchiwizuj katalog z projektem i prześlij go na adres
e-mail podany przez osobę prowadzącą zajęcia.
3. Pytania na wejściówkę
1. Jak przetłumaczyć na język polski następujące zdanie w języku angielskim:
Put your code here.
Wskazówka: jest to zdanie w trybie rozkazującym, czasownikiem jest słowo put.
2. W języku C, zadeklaruj zmienną o nazwie i typu int.
3. W języku C, zadeklaruj zmienną typu wskaźnikowego do typu FILE. Używając dynamicznej
alokacji pamięci, zarezerwuj obszar pamięci o rozmiarze typu FILE i przypisz wskaźnik do tej
pamięci do zadeklarowanej zmiennej.
4. W języku C, zadeklaruj bezparametrową funkcję o nazwie
main
, nie zwracającą żadnej
wartości.
5. Napisz program w języku C wg algorytmu:
•
dana jest tablica znaków (
char [] tablica;
)
•
pobierz pierwszy i ostatni znak z tablicy (użyj funkcji
strlen
),
•
jeżeli pierwszy znak jest różny od „{” i ostatni jest różny od „}”, wyświetl komunikat
o treści „błąd”.
4. Sprawozdanie z ćwiczenia
Na stronie internetowej z materiałami dydaktycznymi znajduje się szablon sprawozdania
z ćwiczenia 1. Należy go zastosować do wykonania sprawozdania.
10