Algorytmy

Tytułem wstępu

Tak jakoś dziwnie wyszło, że przypadło mi w udziale prowadzenie zajęć ,,Wstęp do informatyki''. Zajęcia stanowią niejako zwięzłe wprowadzenie w świat terminów i pojęć z którymi każdy informatyk powinien być obeznany. Część zagadnień będzie poruszana na osobnych zajęciach a do części już nigdy się nie wróci. Jednym z tematów zaliczanych do istonych są z punktu widzenia dalszego toku studiów są algorytmy. W ujęciu tych zajęć, cel jaki sobie stawiam w kontekście algorytmów to umiejętność ich poprawnego przedstawiania (w postaci pseudokodu, schematów blokowych i języka naturalnego) i rozumienia dlaczego algorytm wygląda tak a nie inaczej i jak wygląda w nim przepływ danych. Dlatego istotne w tych zajęciach jest nie to aby znać konkretne algorytmy, ale aby, wiedząc jak działają, umieć je przedstawić w sposób formalny. Ważne jest także aby umieć powiedzieć co się w algorytmie dzieje, jaki jest wpły użytych zmiennych i konstrukcji.

Niestety, z przyczyn mi nieznanych, myślenie algorytmiczne dla większości osób stanowi bardzo ciężkie zadanie. Nawet najprostsze zadania, typu wypisanie elementów macierzy, jest trudnym problemem. W tej sytuacji, nie pozostaje nic innego jak ćwiczenie, ćwiczenie i jeszcze raz ćwiczenie. Kłopot jest tylko taki, że nie ma do tego odpowiednich materiałów. Stąd pomysł na teść jaka jest poniżej. Zamieszczam tutaj różne algorytmy. Nie zależy mi na wyrafinowaniu, ale na przejrzystości i jasności. Każdy może przeczytać sobie opis algorytmu, spróbować samemu go zapisać np. w pseudokodzie po czym porównać z zamieszczonym rozwiązaniem.

UWAGA! Materiał będę rozbudowywał w miarę dostępnego czasu. Planuje do każdego algorytmu umieścić opis, jego pseudokod, implementację w PHP i schemat blokowy. Pewne różnce jakie mogą się pojawiać spowodowane mogą być np. innym indeksowaniem tablic (czasem od 0, czasem od 1).



Zajęcia I

---

???

Zajęcia II

MatMul

Algorytm mnożenia dwóch macierzy.

Pokaż kod PHP

One2TwoDim

Algorytm przekształcający wektor w macierz.

Pokaż kod PHP

One2TwoDim

Algorytm przekształcający wektor w macierz - wersja druga.

Pokaż kod PHP

Zajęcia III

DecToBase

Zamiana liczby o podstawie 10 na liczbę o dowolnej innej podstawie. Przedstawione rozwiązanie działa poprawnie dla systemów docelowych o podstawie mniejszej od 10. Dla podstaw większych nie ma zamiany ,,cyfr'' dwuznakowych na ,,cyfry'' jednoznakowe, tzn. liter. Rozwiązanie pełniejsze przedstawione jest dalej.

Pokaż kod PHP

DecToBase

Zamiana liczby o podstawie 10 na liczbę o dowolnej innej podstawie. Przedstawione rozwiązanie działa poprawnie dla systemów docelowych o podstawie większej od 10 (w tym przypadku do maksymalnie 16, ale można to bardzo łatwo zmienić).

Pokaż kod PHP

BaseToDec

Zamiana liczby o zadanej podstawie na liczbę o podstawie 10. Przedstawione rozwiązanie działa poprawnie dla systemów źródłowych o podstawie mniejszej od 10. Dla podstaw większych nie ma zamiany ,,cyfr'' dwuznakowych na ,,cyfry'' jednoznakowe, tzn. liter. Rozwiązanie pełniejsze przedstawione jest dalej.

Pokaż kod PHP

BaseToDec

Ulepszona wersja poprzedniego zadania. Zamiana liczby o zadanej podstawie na liczbę o podstawie 10. Przedstawione rozwiązanie działa poprawnie dla systemów źródłowych o podstawie mniejszej od 10. Dla podstaw większych nie ma zamiany ,,cyfr'' dwuznakowych na ,,cyfry'' jednoznakowe, tzn. liter. Rozwiązanie pełniejsze przedstawione jest dalej.

Pokaż kod PHP

BaseToDec

Ulepszona wersja poprzedniego zadania. Zamiana liczby o zadanej podstawie na liczbę o podstawie 10. Przedstawione rozwiązanie działa poprawnie dla systemów źródłowych o podstawie większej od 10 (w tym przypadku do maksymalnie 16, ale można to bardzo łatwo zmienić).

Pokaż kod PHP

EratostenesSieve

Wyszukiwanie liczb pierwszych za pomocą Sita Eratostenesa.

Pokaż kod PHP

PrimeNumbersFromInterval

Inna metoda znajdowania (sprawdzania) liczb pierwszych.

Pokaż kod PHP

Zajęcia IV

DecToBase

Program generuje wektory o zadanej długości takie, że każda współrzędna zmienia się z ustalonym krokiem od 0 do pewnej wartości maksymalnej.

Pokaż kod PHP

SelSort

Sortowanie przez wybór.

Pokaż kod PHP

MulRec

Rekurencyjna wersja mnożenia.

Pokaż kod PHP

FindMin

Rekurencyjna wersja wyszukiwania elementu najmniejszego (metoda typu ,,dziel i zwyciężaj'').

Pokaż kod PHP

SimpleFill

Wypełnianie obsszaru ograniczonego krzywą (rekurencja).

Pokaż kod PHP

SumCols

Program obliczający w każdej kolumnie macierzy sumę n pierwszych wierszy i zapisujący wynika w ostatnim, n+1, wierszu.

Pokaż kod PHP

Zajęcia V

MulStar

Funkcja mnożąca wszystkie elementy macierzy przez -2 i wypisująca symbol '*' jeśli liczba otrzymana w wyniku tego mnożenia jest większa od 10.

Pokaż kod PHP

Stars

Funkcja wypisująca n gwiazdek, przy czym zamiast co piątej wiazdki wypisywany jest jej numer kolejny.

Pokaż kod PHP

Frame

Funkcja wypełniająca podaną jako argument macierz kwadratową zerami, przy czy elementy w pierwszej i ostatniej kolumnie, oraz pierwszym i ostatnim wierszu wynoszą jeden.

Pokaż kod PHP

FindMinDist

Funkcja sprawdzająca jaka jest najmniejsza odległość pomiędzy punktami rozmieszczonymi na osi OX a opisanym w tablicy.

Pokaż kod PHP

IfSubstr

Funkcja wyszukująca podciągu w ciągu.

Pokaż kod PHP