algorytmy3, Programowanie


Konrad Kukulski, 163930 Wrocław, 11.06.2010

Elżbieta Tchorowska, 171067

Struktury danych i złożoność obliczeniowa

Projekt nr 3

Temat: Maszyna Turinga.

Prowadzący: prof. dr hab. inż. A. Janiak

Spis treści:

Plan doświadczenia

Do przeprowadzenia doświadczenia użyto komputera z procesorem Intel Core Duo 1,86GHz, 1 Gb RAM. Programem do pisania programów na Maszynę Turinga był program dostarczony przez Zakład.

Sumator

Założenia

Danymi wejściowymi są cyfry 0 i 1. Separacją znak #. Przeprowadza się standardowe dodawanie dwóch liczb binarnych. Dwie liczby oddzielone są pojedynczym separatorem. Wynik dodawania ma znaleźć się po ich prawej stronie, w oddaleniu jednego separatora. Liczby mogą być dowolnej długości.

0x08 graphic
Algorytm

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

Wykonanie

Każdy z bloczków schematu jest przedstawiony jako osobna grupa stanów programu. Cały program załączony na płycie. Całość posiada 63 stany + początkowy i końcowy. Samo dodawanie zajmuje tylko 9 stanów. Cała reszta odpowiada za przeniesienia i ustawienia stanu końcowego maszyny.

Największy problem stanowiło dodanie dwóch liczb, gdzie wynik był powiększony o jeden bit. Rozwiązano, dodając niestety trzy dodatkowe stany.

Palindrom

Założenia

Alfabetem wejściowym jest alfabet angielski, 24-cztero znakowy. Separatorem znak #. Program sprawdza, czy wprowadzony ciąg znaków jest taki sam przeglądany od prawej i od lewej. Program ma zwracać odpowiedź `tak' lub `nie', w zależności od wyniku doświadczenia.

Algorytm

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

Wykonanie

Cały program zajmuje 53 stany i wygląda jak bardzo rozległa sieć Całość jest wykonana praktycznie na samych realizacjach komendy `if', więc utworzone drzewo jest bardzo rozrośnięte w dół, zaś w prawo pozostaje takie samo, nie ważne dla jakiej ilości liter alfabetu. Nie pojawiły się większe problemy w realizacji zadania.

Zawieranie się ciągów

Założenia

Dane są dwa ciągi dowolnych znaków - liter alfabetu angielskiego, oddzielonych separatorem #. Pierwszy po lewej jest mniejszy, drugi większy. Zadaniem jest sprawdzenie, czy pierwszy zawiera się w drugim. Odpowiedzią programu ma być `tak' lub `nie', w zależności od rezultatu doświadczenia.

Algorytm

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

Wykonanie

Cały program ma ponad 100 stanów. Niestety program nie spełnia pełnych oczekiwań. W chwili pisania zapomniano, że ostatnie pasujące elementy starego sprawdzania ciągu, mogą być pasującymi elementami już w nowym podciągu. Nie dopracowano do końca tego problemu. Całe drzewo jest mało czytelne

0x08 graphic

START

skopiowanie liczby 1 i 2 na prawą stronę

Przeniesienie liczb o jedno miejsce w lewo

Standardowa operacja dodawania binarnego z przeniesieniem.

Przeniesienie liczb na ich pierwotne miejsca

KONIECSTART

KONIECSTART

START

Szukanie pierwszej litery ciągu

Zamiana litery na #, przejście na ostatnią literę

Jeśli litera ostatnia jest równa pierwszej, zamień na #

Wróć na początek, do następnej litery, jeśli istnieje

Wróć na początek, do następnej litery, jeśli istnieje

Jeśli nie ma więcej liter, zakończ

KONIEC

START

Przepisanie mniejszego ciągu o dwie pozycje w lewo

Odczytanie pierwszej litery krótszego ciągu

Przesunięcie do 1. litery drugiego ciągu, sprawdzenie, czy są równe

Jeśli tak, przeniesienie litery z drugiego ciągu o pozycję w lewo

Jeśli nie, to przepisujemy literę dwa pola dalej



Wyszukiwarka

Podobne podstrony:
algorytmy, programy, jezyki pro Nieznany (2)
algorytmy programy
IT Wprowadzenie do algorytmiki i programowania wyszukiwanie i porządkowanie informacji
elementy algorytmu programu kolektorek
Wyklad 07 Problem Algorytm Program
ALgorytmy i programowanie, POLITECHNIKA wydział E kierunek I, ALGORYTMY I ZLOZONOSC, ROZNE JAKIES TA
Algorytmy i programowanie
algorytmy2, Programowanie
algorytmy, programy, jezyki pro Nieznany (2)
Metody układania algorytmów rekurencja, metoda dziel i zwyciężaj, programowanie dynamiczne, metoda
ALGORYTM, Tutoriale, Programowanie
Algorytmy, struktury danych i techniki programowania wydanie 3
2009 12 Metaprogramowanie algorytmy wykonywane w czasie kompilacji [Programowanie C C ]

więcej podobnych podstron