Język programowania algorytmicznego to język formalny używany do pisania, wdrażania i badania algorytmów. W przeciwieństwie do większości języków programowania, język algorytmiczny nie jest związany z architekturą komputera, nie zawiera szczegółów związanych z urządzeniem maszyny.

Aby poznać podstawy algorytmizacji, tzw Rosyjski język algorytmiczny(szkolny język algorytmiczny), używając słów zrozumiałych dla ucznia w języku rosyjskim.

Język algorytmiczny podobny do Algola z rosyjską składnią został wprowadzony przez akademika A.P. Erszowa w połowie lat 80. jako podstawa „bezmaszynowego” kursu informatyki.

Główne słowa serwisowe języka algorytmicznego

Opis algorytmu

  • alg(algorytm)
  • argumentować(argument)
  • skaleczenie(wynik)
  • wczesny(początek) - początek algorytmu
  • kon(koniec) - koniec algorytmu
  • dany- dane początkowe w dowolnej formie
  • niezbędny jest celem algorytmu

Typy danych:

  • cały(cały)
  • rzecz(prawdziwy)
  • Sim(postać)
  • lita(dosłowny) - ciąg
  • dziennik(logiczny)
  • patka(tabela) - do wyznaczenia tablicy
  • długości(długość) — liczba elementów tablicy

Notacja warunku

  • jeśli
  • Inaczej
  • wybór
  • wartość

Oznaczenie cyklu

  • nc(początek cyklu)
  • kts(koniec cyklu)
  • PA

Funkcje i wartości logiczne do tworzenia wyrażeń

Wejście wyjście

  • Wejście
  • wniosek

Ogólny widok algorytmu

1
2
3
4
5
6

alg nazwa algorytmu (argumenty i wyniki)
| dany warunki stosowania algorytmu
| niezbędny cel algorytmu
wczesny opis wartości pośrednich
| sekwencja poleceń (treść algorytmu)
kon

Część algorytmu od słowa alg na słowo wczesny nazywa się nagłówkiem, a część zawarta między słowami wczesny oraz kon- treść algorytmu.

W zdaniu alg po nazwie algorytmu cechy są podane w nawiasach ( argumentować, skaleczenie) i typ wartości ( cały, rzecz, Sim, lita lub dziennik) wszystkie zmienne wejściowe (argumenty) i wyjściowe (wyniki). Przy opisie tablic (tabel) używane jest słowo serwisowe patka, uzupełniony parami granic dla każdego indeksu elementu tablicy.

We wpisie algorytmu słowa kluczowe są zwykle podkreślone lub pogrubione. Wcięcie służy do podświetlania bloków logicznych, a pary słów początku i końca bloku są połączone pionową kreską.

Podstawowe struktury algorytmiczne

Szczegółowy opis głównych struktur algorytmicznych znajduje się w tym artykule. Poniżej znajdują się szablony do kompilacji tych struktur w języku algorytmicznym.
niekompletny widelec

| jeśli stan
| | następnie działania
| wszystko

Pełny widelec

1
2
3
4
5

| jeśli stan
| | następnie akcje 1
| | Inaczej akcja 2
| wszystko

rozgałęzienia

1
2
3
4
5
6
7
8

| wybór parametr
| | według wartości wartość 1
| | | akcje 1
| | według wartości wartość 2
| | | akcja 2
| | Inaczej
| | | domyślne działania
| wszystko

Pętla z warunkiem wstępnym

| nts pa stan
| | działania
| kts

Pętla z warunkiem końcowym

Napisanie algorytmu w języku algorytmicznym (formalnym) nazywa się programem. Czasami samo pojęcie algorytmu jest utożsamiane z jego zapisem, tak że słowa „algorytm” i „program” są niemal synonimami. Niewielka różnica polega na tym, że mówiąc o algorytmie, z reguły mamy na myśli główną ideę jego konstrukcji, wspólną dla wszystkich języków algorytmicznych. Program zawsze kojarzy się z napisaniem algorytmu w określonym języku formalnym.

Prezentując ideę algorytmu, na przykład publikując go w artykule naukowym, nie zawsze wskazane jest użycie konkretnego języka programowania, aby nie zaśmiecać prezentacji nieistotnymi szczegółami. W takich sprawach używany jest nieformalny język algorytmiczny jak najbardziej zbliżony do naturalnego. Ten rodzaj języka nazywa się pseudo kod. Specjaliście nie jest trudno przepisać program z pseudokodu na konkretny język programowania. Pisanie algorytmu w pseudokodzie jest często czytelniejsze i bardziej obrazowe, pozwala na swobodny wybór poziomu szczegółowości, zaczynając od opisu w najogólniejszych terminach, a kończąc na szczegółowej prezentacji.

Pseudokody są półsformalizowanymi opisami algorytmów w warunkowy język algorytmiczny, w tym zarówno elementy języka programowania, jak i frazy języka naturalnego, wspólną notację matematyczną i nie tylko.

Pseudokod to system notacji i reguł zaprojektowany do jednolitego pisania algorytmów.

Pseudokod zajmuje pozycję pośrednią między językiem naturalnym a językami programowania. Z jednej strony jest zbliżony do normalnego, naturalnego języka, więc algorytmy można w nim pisać i czytać jak zwykły tekst. Z drugiej strony w pseudokodzie zastosowano niektóre konstrukcje formalne i symbolikę matematyczną, co zbliża notację algorytmu do ogólnie przyjętej notacji matematycznej.

Pseudokod zwykle zawiera pewne konstrukcje, które są natywne dla języków programowania. Ułatwia to przejście od pisania w pseudokodzie do pisania algorytmu w języku programowania dla konkretnego komputera. W szczególności w pseudokodzie, a także w językach programowania występują słowa pomocnicze, których znaczenie jest ustalone raz na zawsze. Są pogrubione w tekście drukowanym i podkreślone w tekście odręcznym.

Ogólny widok algorytmu:

alg nazwa algorytmu (argumenty i wyniki)

dany warunki stosowania algorytmu

niezbędny cel algorytmu

wczesny opis wartości pośrednich

sekwencja poleceń(ciało algorytmu)

Część algorytmu od słowa alg na słowo wczesny nazywa się nagłówkiem, a część zawarta między słowami wczesny oraz kon - treść algorytmu.

W zdaniu alg po nazwie algorytmu, w nawiasach, podane są charakterystyki (arg, res) i typ wartości (integer, real, sim, lit lub log) wszystkich zmiennych wejściowych (argumenty) i wyjściowych (wyniki). Przy opisie tablic (tabel) używane jest słowo serwisowe patka, uzupełniony parami granic dla każdego indeksu elementu tablicy.

Przykłady zdań alg :

alg Objętość i powierzchnia cylindra (arg w R, H, res w V, S)

alg Korzenie KvUr ( argumentować rzecz a, b, c, skaleczenie pozycja x1, x2, res świeci t)

alg Wyklucz element ( argumentować liczba całkowita N, argumentować element wycięty zakładka A)

alg Przekątna ( argumentować liczba całkowita N, argumentować cała zakładka A, cięcie świeci. Odpowiedź)

Oferuje dany oraz niezbędny nie wymagane. Zaleca się pisanie wypowiedzi opisujących stan środowiska wykonawczego algorytmu, na przykład:

alg Wymiana(arg świeci Str1, Str2, arg res świeci Tekst)

podane | długości podciągów Str1 i Str2 są takie same

potrzeba | wszędzie w linii Text podłańcuch Str1 jest zastępowany przez Str2

alg Liczba maksimów (arg integer N, arg real tab A, res integer K)

podane | N>0

potrzeba | K - liczba maksymalnych elementów w tabeli A

alg Rezystancja (arg real R1, R2, arg integer N, res real R)

podane | N>5, R1>0, R2>0

potrzeba | R - rezystancja obwodu

Tutaj w propozycjach dany oraz niezbędny po znaku „|” komentarze są rejestrowane. Komentarze można umieszczać na końcu dowolnej linii. Nie są one przetwarzane przez tłumacza, ale znacznie ułatwiają zrozumienie algorytmu.

Główne słowa serwisowe języka algorytmicznego:

alg (algorytm) sim (symboliczny) podany za tak

arg (argument) świeci (dosłownie) musi od nie

res(result) log(boolean) if to at

start (start) tab (tabela), a następnie wartość wybierz

end (end) nts (cykl start) inaczej i enter

integer (integer) kts (koniec pętli) wszystko lub wyjście

rzeczywista (rzeczywista) długość (długość) jeszcze nie zatwierdzona

Podstawowe polecenia:

1. Polecenie przypisania. Służy do oceny wyrażeń i przypisywania ich wartości do zmiennych. Ogólna forma: A:= B, gdzie znak ":=" oznacza polecenie zastąpienia poprzedniej wartości zmiennej po lewej stronie obliczoną wartością wyrażenia po prawej stronie.

Na przykład: a:= (b+c) * sin(Pi/4); i:= i+1.

Polecenia wejściowe i wyjściowe.

Wejście nazwy zmiennych (wejście z klawiatury)

wniosek nazwy zmiennych, wyrażenia, teksty. (wyjście danych na ekran)

Polecenia rozgałęzione.

Polecenia te zapewniają, w zależności od wyniku sprawdzenia warunku (tak lub nie), wybór jednego z alternatywnych sposobów algorytmu. Każda ścieżka prowadzi do wspólnego wyjścia, więc algorytm będzie kontynuowany niezależnie od wybranej ścieżki.

Struktura rozgałęzień występuje w czterech głównych wariantach:

1. Zespół Jeśli następnie;

jeśli stan

następnie działania

2. Zespół jeśli - wtedy - inaczej;

jeśli stan

następnie akcje 1

Inaczej akcja 2

3. Zespół wybór;

Wybór

w warunek 1: działania 1

w warunek 2: akcje 2

. . . . . . . . . . . .

w warunek N: działania N

4. Zespół wybór jest inny.

Wybór

w warunek 1: działania 1

w warunek 2: akcje 2

. . . . . . . . . . . .

w warunek N: działania N

Inaczej Działania N+1

Polecenia cyklu.

Zapewnia wielokrotne wykonywanie określonego zestawu akcji, który nazywa się treścią pętli.

Istnieją dwie komendy do zapętlania:

1. Typ cyklu Do widzenia - Instruuje wykonanie ciała pętli, dopóki warunek zapisany po słowie nie zostanie spełniony PA.

nc PA stan

ciało pętli

(sekwencjonowanie)

kts

2. Typ cyklu Do - Instruuje wykonanie treści pętli dla wszystkich wartości jakiejś zmiennej (parametru pętli) w określonym zakresie.

nc dla i z i1 zanim i2

ciało pętli

(sekwencjonowanie)

kts

JĘZYKI PROGRAMOWANIA

Obecnie na świecie istnieje kilkaset faktycznie używanych języków programowania. Każdy ma swój własny obszar zastosowania.

Każdy algorytm, jak wiemy, jest ciągiem instrukcji, po których można przejść od danych początkowych do wyniku w skończonej liczbie kroków. W zależności od poziomu szczegółowości recept zwykle określany jest poziom języka programowania – im mniej szczegółowości, tym wyższy poziom języka.

Język programowania(język algorytmiczny) - zbiór reguł, które określają, które sekwencje znaków tworzą program (reguły składniowe), a jakie obliczenia opisuje program (reguły semantyczne).

Języki programowania mają następujące cechy:

  • Poziom języka - charakteryzuje się złożonością zadań rozwiązywanych za pomocą tego języka.
  • Potęga języka - charakteryzuje się liczbą i różnorodnością zadań, algorytmów rozwiązywania, które można napisać w tym języku.
  • Niezawodność - język powinien zawierać minimum błędów podczas pisania programów. Ponadto język musi być złe programy trudno było pisać.
  • Czytelność b -łatwość percepcji programów przez osobę. Ta cecha jest ważna w pracy zespołowej, kiedy kilka osób pracuje z tymi samymi tekstami programu.
  • kompletność - charakteryzuje umiejętność opisu klasy problemów z określonego obszaru tematycznego.
  • Elastyczność - charakteryzuje łatwość wyrażania niezbędnych działań.

Według tego kryterium można wyróżnić następujące poziomy języków programowania:

  • maszyna;
  • zorientowane maszynowo (monterzy);
  • niezależne od maszyny (języki wysokiego poziomu).

Języki maszynowe i języki zorientowane maszynowo to języki niskiego poziomu, które wymagają określenia drobnych szczegółów procesu przetwarzania danych. Z drugiej strony języki wysokiego poziomu naśladują języki naturalne, używając niektórych słów języka mówionego i popularnych symboli matematycznych. Te języki są bardziej przyjazne dla człowieka.

Języki wysokiego poziomu dzielą się na:

  • proceduralny (algorytmiczny)(Basic, Pascal, C itp.), które służą do jednoznacznego opisu algorytmów; aby rozwiązać problem, języki proceduralne wymagają wyraźnego zapisania procedury rozwiązania go w takiej czy innej formie;
  • łamigłówka ( Prolog, Lisp itp. ) , które skupiają się nie na opracowaniu algorytmu rozwiązania problemu, ale na usystematyzowanym i sformalizowanym opisie problemu tak, aby rozwiązanie wynikało z opracowanego opisu;
  • zorientowany obiektowo(Object Pascal, C++, Java itp.), które opierają się na koncepcji obiektu, który łączy dane i działania na nas. Program w języku obiektowym, rozwiązujący pewien problem, zasadniczo opisuje część świata związaną z tym problemem. Opis rzeczywistości w postaci układu oddziałujących ze sobą obiektów jest bardziej naturalny niż w postaci oddziałujących procedur.

Tworzenie programu komputerowego obejmuje następujące etapy:

§ analiza;

§ projekt;

§ programowanie;

§ testowanie i debugowanie;

§ eksploatacja.

Do chwili obecnej istnieje sześć generacji języków programowania. Każda z kolejnych generacji pod względem funkcjonalnym różni się jakościowo od poprzedniej.

  • Pierwsza generacja: Języki maszynowe. Pojawił się w połowie lat 40. XX wieku.
  • Drugie pokolenie: Monterzy. W rzeczywistości są to te same języki maszynowe, ale piękniej „zawinięte”. Pojawił się pod koniec lat 50.
  • Trzecia generacja: języki proceduralne. Pojawił się na początku lat 60. XX wieku. Ta generacja obejmuje uniwersalne języki wysokiego poziomu, które można wykorzystać do rozwiązywania problemów z dowolnego obszaru (na przykład Algol-60).
  • Czwarta generacja: Języki obsługujące złożone struktury danych(np. SQL). Pojawił się pod koniec lat 60. XX wieku.
  • Piąta generacja: Języki sztucznej inteligencji(np. Prolog). Pojawił się na początku lat 70. XX wieku.
  • Szósta generacja: Języki sieci neuronowych(języki samouczące się). Praca badawcza w tej dziedzinie rozpoczęła się w połowie lat 80-tych.

WNIOSEK

Aby komputer mógł wykonać zadanie, musi wykonać pewien program. Program musi być napisany według ścisłych reguł, w formie dostępnej do przetwarzania na komputerze.Taki zestaw reguł nazywamy językiem programowania lub językiem algorytmicznym. Porozumiewawczy ogólna zasada budując i pisząc programy na komputerze, można rozwiązać prawie wszystkie zadania niezbędne w pracy nad informacją o przetwarzaniu danych.

Ministerstwo Edukacji Federacja Rosyjska Państwowy Uniwersytet Techniczny w Permie

dział Technologie informacyjne i zautomatyzowane systemy

Vikentyeva O. L.

Streszczenie wykładów z przedmiotu „Języki algorytmiczne i programowanie” (Podstawy języka C++, I semestr)

Wstęp

W pierwszym semestrze omawiane są podstawowe konstrukcje języka C oraz podstawowa technologia programowania (programowanie strukturalne).

Programowanie strukturalne to technologia tworzenia programów, która dzięki przestrzeganiu określonych zasad skraca czas tworzenia i liczbę błędów, a także ułatwia możliwość modyfikacji programu.

1.1. Algorytm i program

Algorytm to dokładna recepta, która definiuje proces obliczeniowy, który przechodzi od zmiany danych początkowych do wyniku końcowego, czyli jest receptą na osiągnięcie jakiegoś celu.

Zestaw narzędzi i zasad prezentowania algorytmu w formie odpowiedniej do wykonania komputer nazywa się językiem programowania, algorytm napisany w tym języku nazywa się programem.

Najpierw zawsze opracowywany jest algorytm działania, a następnie pisany w jednym z języków programowania. Tekst programu jest przetwarzany przez specjalne programy serwisowe - translatory. Języki programowania to języki sztuczne. Różnią się od języków naturalnych ograniczoną liczbą „słów” i bardzo ścisłymi zasadami pisania poleceń (operatorów). Całość tych wymagań tworzy składnię języka programowania, a znaczeniem każdej konstrukcji jest jej semantyka.

1.2 Właściwości algorytmu

1. Charakter masowy: algorytm powinien być zastosowany nie do jednego problemu, ale do całej klasy podobnych problemów (algorytm rozwiązywania równania kwadratowego powinien rozwiązywać nie jedno równanie, ale wszystkie równania kwadratowe).

2. Wydajność: algorytm powinien prowadzić do wyniku w określonej liczbie kroków (przy dzieleniu 1 przez 3 otrzymuje się ułamek okresowy 0,3333(3), aby uzyskać wynik końcowy, należy określić dokładność uzyskania tego ułamka, na przykład do 4 miejsc po przecinku).

3. Jednoznaczność (determinizm) – każde działanie algorytmu powinno być jasne dla jego wykonawcy (instrukcja na sprzęt AGD w języku japońskim dla osoby nie znającej języka japońskiego nie jest algorytmem, ponieważ nie ma właściwości determinizmu).

4. Dyskrecja – proces należy opisać za pomocą niepodzielności

operacje wykonywane w każdym kroku (tj. kroków nie można podzielić na mniejsze kroki).

Algorytmy mogą być reprezentowane w następujących formach:

1) słowny opis algorytmu.

2) graficzny opis algorytmu.

3) za pomocą algorytmicznego języka programowania

1.2. Kompilatory i tłumacze

Z za pomocą języka programowania tworzony jest tekst opisujący wcześniej skompilowany algorytm. Aby uzyskać działający program, musisz przetłumaczyć ten tekst na sekwencję instrukcji procesora, co jest wykonywane za pomocą programy specjalne, które nazywane są tłumaczami. Istnieją dwa rodzaje tłumaczy: kompilatorzy i tłumacze ustni. Kompilator tłumaczy tekst modułu źródłowego na kod maszynowy, zwany modułem obiektowym, w jednym ciągłym procesie. Jednocześnie najpierw przygląda się kodowi źródłowemu programu w poszukiwaniu błędów składniowych. Interpreter wykonuje moduł źródłowy programu w trybie operator przez operatora, zgodnie z

przebiegu pracy, tłumacząc każdą wypowiedź na język maszynowy.

1.3 Języki programowania

Różne typy procesorów mają różne zestawy instrukcji. Jeśli język programowania koncentruje się na konkretnym typie procesora i uwzględnia jego cechy, nazywa się go językiem programowania niskiego poziomu. Językiem najniższego poziomu jest język asemblerowy, który po prostu reprezentuje każdą instrukcję kodu maszynowego w postaci specjalnych symboli zwanych mnemonikami. Za pomocą języków niskopoziomowych tworzone są bardzo wydajne i kompaktowe programy, ponieważ programista uzyskuje dostęp do wszystkich możliwości procesora. Dlatego zestawy instrukcji dla różne modele procesory też są inne, wtedy każdy model procesora ma swój własny język asemblera, a program w nim napisany może być używany tylko w tym środowisku. Takie języki służą do pisania małych aplikacji systemowych, sterowników urządzeń i tak dalej.

Dlatego języki programowania wysokiego poziomu nie uwzględniają specyfiki konkretnych architektur komputerowych stworzone programy na poziomie źródłowym są łatwo przenoszone na inne platformy, jeśli zostaną dla nich stworzeni odpowiedni tłumacze. Tworzenie programów w językach wysokiego poziomu jest znacznie łatwiejsze niż w językach maszynowych.

Języki wysokiego poziomu to:

1. Fortran to pierwszy skompilowany język stworzony w Lata 50. XX wieku. Wdrożył szereg ważnych koncepcji programistycznych. Dla tego języka został stworzony duża ilość biblioteki, od pakietów statystycznych po zarządzanie satelitami, dzięki czemu jest nadal używany w wielu organizacjach.

2. COBOL - Skompilowany język obliczeń i rozwiązań ekonomicznych zadania biznesowe opracowane na początku lat 60-tych. Cobol zaimplementował bardzo potężne narzędzia do pracy z dużymi ilościami danych przechowywanych na nośnikach zewnętrznych.

3. Pascal - stworzony na końcu 70s szwajcarskiego matematyka Niklausa Wirtha specjalnie do nauczania programowania. Pozwala rozwijać myślenie algorytmiczne, budować krótkie, dobrze czytelny program, demonstrują podstawowe techniki algorytmizacji, dobrze nadaje się również do realizacji dużych projektów.

4. BASIC - stworzony w 60s również do nauczania programowania. Istnieją do tego kompilatory i interpretery, jest to jeden z najpopularniejszych języków programowania.

5. C - powstał w latach 70. nie był początkowo uważany za masowy język programowania. Zaplanowano wymianę asemblera, aby móc tworzyć te same wydajne i krótkie programy, ale niezależne od konkretnego procesora. Pod wieloma względami jest podobny do Pascala i ma dodatkowe funkcje pracować z pamięcią. Zawiera wiele zastosowanych i programy systemowe, jak również system operacyjny Uniksa.

6. C++ to obiektowe rozszerzenie języka C stworzone przez Bjarne Stroustrupa w 1980 roku.

7. Java to język stworzony na początku przez firmę Sun Lata 90. oparte na C++. Został zaprojektowany w celu uproszczenia tworzenia aplikacji w C++ poprzez eliminację z niego funkcji niskopoziomowych. główna cecha język polega na tym, że nie jest kompilowany do kodu maszynowego, ale do kodu bajtowego niezależnego od platformy (każde polecenie zajmuje jeden bajt). Ten kod można wykonać za pomocą interpretera, wirtualnej maszyny języka Java (JVM).

2. Struktura programu w C++

Program w C ma następującą strukturę: #dyrektywy preprocesora

. . . . . . . . .

# dyrektywy preprocesora funkcja a ()

operatory funkcji w ()

operatorzy

void main() //funkcja od której rozpoczyna się wykonywanie programu operatory

opisy

zadania

funkcja pustej instrukcji

złożony

przemiana

Dyrektywy preprocesora - kontrolują transformację tekstu programu przed jego kompilacją. Autorski program przygotowany w SI w formie plik tekstowy, przechodzi przez 3 etapy przetwarzania:

1) konwersja tekstu preprocesora;

2) kompilacja;

3) układ (edycja łącza lub zespół).

Po tych trzech etapach tworzony jest kod wykonywalny programu. Zadaniem prepro-

cessor - przekształcenie tekstu programu przed jego kompilacją. Reguły przetwarzania wstępnego są definiowane przez programistę za pomocą dyrektyw preprocesora. Dyrektywa zaczyna się od #. Na przykład,

1) #define - wskazuje zasady zastępowania w tekście. #definiuj ZERO 0,0

Oznacza, że ​​każde użycie nazwy ZERO w programie zostanie zastąpione przez

2) #włącz< имя заголовочного файла>- służy do włączenia do tekstu programu tekstu z katalogu „Pliki nagłówkowe” dostarczanego z bibliotekami standardowymi. Każda funkcja z biblioteki C ma odpowiedni opis w jednym z plików nagłówkowych. Lista plików nagłówkowych jest określona przez standard językowy. Użycie dyrektywy include nie obejmuje odpowiedniego numeru startowego.

biblioteki, ale pozwalają jedynie na wstawianie opisów z określonego pliku nagłówkowego do tekstu programu. Kody biblioteczne są podłączane na etapie linkowania, czyli po kompilacji. Chociaż w pliki nagłówkowe zawiera wszystkie opisy funkcji standardowych, tylko te funkcje, które są używane w programie, są zawarte w kodzie programu.

Po przetworzeniu wstępnym w tekście programu nie pozostają żadne dyrektywy preprocesora.

Program jest zbiorem opisów i definicji oraz składa się ze zbioru funkcji. Wśród tych funkcji zawsze musi znajdować się funkcja o nazwie main. Bez tego program nie może działać. Nazwa funkcji poprzedzona jest informacją o typie wartości zwracanej przez funkcję (typ wyniku). Jeśli funkcja niczego nie zwraca, określany jest typ void: void main(). Każda funkcja, w tym main, musi mieć zestaw parametrów, może być pusta, wtedy (void) jest wskazane w nawiasach.

Treść funkcji następuje po nagłówku funkcji. Ciało funkcji to sekwencja definicji, deklaracji i wykonywalnych instrukcji zawartych w aparat ortodontyczny. Każda definicja, opis lub stwierdzenie kończy się średnikiem.

Definicje - wprowadzają obiekty (obiekt to nazwany obszar pamięci, szczególnym przypadkiem obiekt to zmienna) niezbędne do reprezentowania danych przetwarzanych w programie. Przykładem jest

int y = 10 ; //nazwana stała float x ; //zmienny

Opisy - powiadamia kompilator o właściwościach i nazwach obiektów i funkcji opisanych w innych częściach programu.

Operatorzy - definiują działania programu na każdym etapie jego realizacji

Przykładowy program C:

#włączać //dyrektywa preprocesora

pytania testowe

1. Jakie są części programu C++?

2. Czym różni się definicja od deklaracji?

3. Wymień etapy tworzenia programu wykonywalnego w C++.

4. Co to jest preprocesor?

5. Co to jest dyrektywa preprocesora? Podaj przykłady dyrektyw preprocesora.

6. Napisz program, który wypisuje tekst „Mój pierwszy program w C++”

2. Podstawowe udogodnienia języka C++ 2.1.Kompozycja języka

W tekście w dowolnym języku naturalnym można wyróżnić cztery główne elementy: symbole, słowa, frazy i zdania. Język algorytmiczny również zawiera takie elementy, tylko słowa nazywane są leksemami (konstrukcjami elementarnymi), frazy - wyrażeniami, zdaniami - operatorami. Tokeny powstają z symboli, wyrażeń z leksemów i symboli, operatorów z symboli wyrażeń i leksemów (rys. 1.1)

Ryż. 1.1. Kompozycja języka algorytmicznego Zatem elementami języka algorytmicznego są:

Identyfikatory to nazwy obiektów programu C. W identyfikatorze można stosować litery, cyfry i podkreślenia łacińskie. Rozróżniane są wielkie i małe litery, na przykład PROG1, prog1 i Prog1 to trzy różne identyfikatory. Pierwszy znak musi być literą lub podkreśleniem (nie cyfrą). Spacje w identyfikatorach są niedozwolone.

Słowa kluczowe (zarezerwowane) to słowa, które mają dla kompilatora specjalne znaczenie. Nie mogą być używane jako identyfikatory.

- Znaki operacji to jeden lub więcej symboli, które definiują operację na operandach. Operacje są podzielone na jednoargumentowe, binarne i trójargumentowe w zależności od liczby operandów zaangażowanych w tę operację.

Stałe są wartościami niezmiennymi. Istnieją stałe całkowite, rzeczywiste, znakowe i łańcuchowe. Kompilator rozróżnia stałą jako token (konstrukcję elementarną) i przypisuje ją do jednego z typów zgodnie z jej wyglądem.

Separatory - nawiasy, kropka, przecinek, spacja.

2.1.1. Stałe w C++

Stała to token reprezentujący reprezentację ustalonej wartości liczbowej, łańcuchowej lub znakowej.

Stałe są podzielone na 5 grup:

cały;

- rzeczywista (zmiennoprzecinkowa);

wyliczone;

Symboliczny;

Strunowy.

Kompilator wybiera leksem i przypisuje go do tej lub innej grupy, a następnie wewnętrznie

trzy grupy do określonego typu zgodnie z jego formą zapisu w tekście programu i według wartości liczbowej.

Stałe całkowite mogą być dziesiętne, ósemkowe i szesnastkowe. Stała dziesiętna jest zdefiniowana jako sekwencja cyfr dziesiętnych, która nie zaczyna się od 0, chyba że ta liczba wynosi 0 (przykłady: 8, 0, 192345). Stała ósemkowa to stała, która zawsze zaczyna się od 0. Po 0 następują cyfry ósemkowe (przykłady: 016 - wartość dziesiętna 14, 01). Stałe szesnastkowe to ciąg cyfr szesnastkowych poprzedzonych znakami 0x lub 0X (przykłady: 0xA, 0X00F).

W w zależności od wartości kompilatora stałych liczb całkowitych przedstaw to inaczej

w pamięć komputera (tzn. kompilator przypisze do stałej odpowiedni typ danych).

Stałe rzeczywiste mają inną formę reprezentacji wewnętrznej w pamięci komputera. Kompilator rozpoznaje takie stałe po ich formie. Stałe rzeczywiste mogą być reprezentowane w dwóch postaciach: stałoprzecinkowej i zmiennoprzecinkowej. Typ stałej zmiennoprzecinkowej: [cyfry].[cyfry] (przykłady: 5.7, .0001, 41.).Typ stałej zmiennoprzecinkowej: [cyfry][.][cyfry]E|e[+|-][cyfry ] (przykłady: 0.5e5, .11e-5, 5E3). W zapisie stałych rzeczywistych można pominąć liczbę całkowitą lub część ułamkową, kropkę dziesiętną lub znak wykładnika z wykładnikiem.

Stałe wyliczane są wprowadzane za pomocą słowa kluczowego enum. Są to zwykłe stałe całkowite, którym przypisano unikalną i łatwą w użyciu notację. Przykłady: enum ( jeden=1, dwa=2, trzy=3,cztery=4);

enum (zero,jeden,dwa,trzy) - jeśli pominiemy znaki = i wartości liczbowe w definicji stałych wyliczanych, to wartości zostaną przypisane domyślnie. W tym przypadku identyfikator skrajnie lewy otrzyma wartość 0, a każdy kolejny będzie rósł o 1.

liczba (dziesięć=10, trzy=3, cztery, pięć, sześć);

enum (niedziela, poniedziałek, wtorek, środa, czwartek, piątek, sobota

Stałe znakowe to jeden lub dwa znaki ujęte w apostrofy. Stałe znakowe składające się z jednego znaku są typu char i zajmują jeden bajt w pamięci, stałe znakowe składające się z dwóch znaków są typu int i zajmują dwa bajty. Sekwencje zaczynające się od znaku \ są nazywane sekwencjami ucieczki, są używane:

- Do reprezentowania znaków, które nie mają wyświetlacza graficznego, na przykład:

\a - sygnał dźwiękowy,

\b - powrót o jeden krok, \n - wysunięcie wiersza,

\t - zakładka pozioma.

- Do reprezentowania znaków: \ , ’ , ? , ” (\\, \’ ,\? ,\).

- Do reprezentowania znaków za pomocą kodów szesnastkowych lub ósemkowych (\073, \0xF5).

Stała łańcuchowa to sekwencja znaków ujęta w cudzysłów.

Znaki sterujące mogą być również używane w ciągach. Na przykład: "\nNowa linia",

„\n\”Algorytmiczne języki programowania wysokiego poziomu \”” .

2.2. Typy danych w C++

Dane wyświetlają świat w programie. Celem programu jest przetwarzanie danych. Dane różne rodzaje przechowywane i przetwarzane inaczej. Typ danych definiuje:

1) wewnętrzna reprezentacja danych w pamięci komputera;

2) zestaw wartości, jakie mogą przyjmować wartości tego typu;

3) operacje i funkcje, które można zastosować do danych tego typu.

W W zależności od wymagań zadania programista wybiera typ obiektów programu. Typy C++ można podzielić na typy proste i złożone. Typy proste to typy charakteryzujące się jedną wartością. C++ definiuje 6 prostych typów danych:

int (liczba całkowita)

znak (znak)

wchar_t (szeroki znak) bool (boolean) float (rzeczywista)

podwójna (rzeczywista o podwójnej precyzji)

Istnieją 4 specyfikatory typu określające wewnętrzną reprezentację i zakres standardowych typów

krótki (krótki) długi (długi) podpisany (podpisany)

bez znaku

2.2.1. wpisz int

Wartości tego typu są liczbami całkowitymi.

Rozmiar typu int nie jest zdefiniowany przez standard, ale zależy od komputera i kompilatora. Dla procesora 16-bitowego przydzielone są 2 bajty, dla procesora 32-bitowego 4 bajty.

Jeśli istnieje krótki specyfikator przed int, to 2 bajty są przydzielane dla liczby, a jeśli specyfikator jest długi, to 4 bajty. Zestaw zależy od ilości pamięci przydzielonej dla obiektu. dozwolone wartości, które obiekt może przyjąć:

short int - zajmuje 2 bajty, stąd ma zakres -32768 ..+32767;

long int - zajmuje 4 bajty, stąd ma zakres -2 147 483 648..+2 147 483 647

Typ int jest taki sam jak typ short int na 16-bitowych komputerach PC i długi typ int na komputerach 32-bitowych.

Modyfikatory ze znakiem i bez znaku wpływają również na zestaw poprawnych wartości, jakie obiekt może przyjąć:

unsigned short int - zajmuje 2 bajty, stąd ma zakres 0 ..65536; unsigned long int - zajmuje 4 bajty, zatem ma zakres 0..+4 294 967

2.2.2. wpisz char

Wartości tego typu są elementami skończonego uporządkowanego zestawu znaków. Każdemu znakowi przypisany jest numer, zwany kodem znaku. Pod wartością typ znaku Przydzielony jest 1 bajt. Typu char można używać ze specyfikatorami ze znakiem i bez znaku. Dane znaków ze znakiem mogą przechowywać wartości z zakresu od -128 do 127. Znak bez znaku może przechowywać wartości z zakresu od 0 do 255. Kodowanie wykorzystuje ASCII (American Standard Code foe International Interchange). Symbole o kodach od 0 do 31 są symbolami serwisowymi i mają niezależne znaczenie tylko w instrukcjach We/Wy.

Wartości typu char służą również do przechowywania liczb z określonych zakresów.

2.2.3. typ_char_t

Zaprojektowany do pracy z zestawem znaków, dla których kodowanie nie wystarcza na 1 bajt, np. Unicode. Rozmiar tego typu z reguły odpowiada krótkiemu typowi. Stałe łańcuchowe tego typu są zapisywane z przedrostkiem L: L"String #1".

2.2.4. wpisz bool

Typ bool to boolean. Jego wartości mogą przyjmować wartości prawdziwe i fałszywe. Wewnętrzna reprezentacja fałszu to 0, każda inna wartość jest interpretowana jako prawda.

2.2.5. typy zmiennoprzecinkowe.

Reprezentacja wewnętrzna prawdziwy numer składa się z 2 części: mantysy i wykładnika. W komputerach kompatybilnych z IBM wartości zmiennoprzecinkowe zajmują 4 bajty, z których jeden bit jest przydzielony na znak mantysy, 8 bitów na wykładnik i 24 na mantysę.

Wartości typu double zajmują 8 bajtów, odpowiednio 11 i 52 cyfry są przypisane do porządku i mantysy. Długość mantysy określa dokładność liczby, natomiast długość wykładnika określa jej zakres.

Jeśli nazwa typu podwójnego jest poprzedzona specyfikatorem long, dla wartości przydzielane są bajty.

2.2.6. pusty typ

Do do głównych typów zalicza się również typ void, zbiór wartości tego typu jest pusty.

2.3. Zmienne

Zmienna w C++ to nazwany obszar pamięci przechowujący dane określonego typu. Zmienna ma nazwę i wartość. Nazwa jest używana w odniesieniu do obszaru pamięci, w którym przechowywana jest wartość. Każda zmienna musi być zadeklarowana przed użyciem. Przykłady:

Widok ogólny operatora opisu:

[klasa pamięci] nazwa typu [inicjalizator];

Klasa pamięci może przyjmować następujące wartości: auto, extern, static, register. Klasa pamięci definiuje czas życia i zakres zmiennej. Jeśli klasa pamięci nie jest wyraźnie określona, ​​kompilator określa ją na podstawie kontekstu deklaracji. Żywotność może być stała - w trakcie wykonywania programu lub tymczasowa - w trakcie bloku. Zakres to część tekstu programu, z której dozwolony jest normalny dostęp do zmiennej. Zwykle zakres jest taki sam jak zakres. Z wyjątkiem sytuacji, gdy w bloku wewnętrznym znajduje się zmienna o tej samej nazwie.

Const - wskazuje, że ta zmienna nie może być zmieniona (o nazwie stała). Przy opisie możesz przypisać wartość początkową do zmiennej (inicjalizacja). Klasy pamięci:

auto jest automatyczną zmienną lokalną. Specyfikator auto można określić tylko podczas definiowania obiektów bloku, na przykład w treści funkcji. Pamięć jest przydzielana do tych zmiennych, gdy blok jest wpisywany i zwalniana, gdy blok jest opuszczany. Poza blokiem takie zmienne nie istnieją.

extern jest zmienną globalną, znajduje się w innym miejscu programu (w innym pliku lub później w tekście). Służy do tworzenia zmiennych, które są dostępne we wszystkich plikach programu.

static jest zmienną statyczną, istnieje tylko w pliku, w którym zmienna jest zdefiniowana.

register - podobny do auto, ale pamięć dla nich jest alokowana w rejestrach procesora. Jeśli nie jest to możliwe, zmienne są traktowane jako auto.

int; //zmienna globalna void main()(

int b;//zmienna lokalna

extern int x;//zmienna x jest zdefiniowana gdzie indziej static int c;//lokalna zmienna statyczna a=1;//przypisanie do zmiennej globalnej

int a;//zmienna lokalna a

a=2;//przypisanie do zmiennej lokalnej::a=3;//przypisanie do zmiennej globalnej

int x=4;//zdefiniuj i zainicjuj x

W tym przykładzie zmienna a jest zdefiniowana poza wszystkimi blokami. Zakres zmiennej a obejmuje cały program, z wyjątkiem tych wierszy, w których używana jest zmienna lokalna a. Zmienne b i c są lokalne, ich zakres jest blokowy. Żywotność jest inna: pamięć pod b jest przydzielana przy wchodzeniu do bloku (ponieważ domyślna klasa pamięci to auto), jest zwalniana przy wyjściu. Zmienna z (statyczna) istnieje podczas działania programu.

Jeśli zmienne nie są jawnie inicjowane podczas ich definiowania, kompilator ustawia zmienne globalne i statyczne na zero. Zmienne automatyczne nie są inicjowane..

Nazwa zmiennej musi być unikalna w swoim zakresie.

Deklaracja zmiennej może być wykonana jako deklaracja lub jako definicja. Deklaracja zawiera informacje o klasie pamięci i typie zmiennej, a definicja wraz z tymi informacjami nakazuje przydzielić pamięć. W przykładzie extern int x; - deklaracja, a reszta - definicje.

2.4 Znaki operacji w C++

Znaki operacyjne zapewniają tworzenie wyrażeń. Wyrażenia składają się z operandów, znaków operatora i nawiasów. Każdy operand jest z kolei wyrażeniem lub szczególnym przypadkiem wyrażenia - stałą lub zmienną.

Operacje jednoargumentowe

& zdobądź adres operandu

* Odniesienie do adresu (dereferencja)

- jednoargumentowy minus, zmienia znak operandu arytmetycznego

++ Zwiększenie jednostki:

operacja prefiksowa - zwiększa operand przed jego użyciem

operacja postfiksowa zwiększa operand po jego użyciu

int a=(m++)+n; // a=4,m=2,n=2

int b=m+(++n);//a=3,m=1,n=3

zmniejszyć o jeden:

operacja prefiksowa - redukuje operand do jego użycia

operacja postfiksowa zmniejsza operand po jego użyciu

obliczenie rozmiaru (w bajtach) dla obiektu typu, który

ma operand

ma dwie formy

wielkośćwyrażenia

rozmiar(pływak)//4

sizeof(1.0)//8 ponieważ rzeczywiste stałe są domyślne

Edukacyjny język algorytmiczny to środek do pisania algorytmów w formie pośredniej między pisaniem algorytmu w języku naturalnym (ludzkim) a pisaniem w języku komputerowym (języku programowania).

Zaletami edukacyjnego języka algorytmicznego jest jego prostota, a także fakt, że algorytm napisany jest w języku rosyjskim przy użyciu pewnej ograniczonej liczby słów, których znaczenie i sposób użycia są ściśle określone. Te słowa nazywane są słowami funkcyjnymi.

Aby odróżnić słowa serwisowe od innych słów języka, podczas pisania są one podkreślane.

Wpis algorytmu w uczącym się języku algorytmicznym składa się z nagłówka i korpusu algorytmu. Ciało algorytmu jest zawarte między słowami kluczowymi wczesny oraz kon i jest sekwencją poleceń algorytmu. Tytuł zawiera nazwę algorytmu, odzwierciedlającą jego zawartość, wykazy danych wejściowych (argumentów) oraz wyników.

Atrybutem nagłówka algorytmu jest słowo kluczowe alg.

Tak więc algorytm napisany w edukacyjnym języku algorytmicznym ma następującą postać:

alg nazwa algorytmu

argumentować lista danych początkowych

skaleczenie lista wyników

sekwencja poleceń algorytmu

Wskazane jest rozpoczęcie nauki szkolnego języka algorytmicznego od polecenia przypisania, jest to jedno z głównych poleceń.

Jest napisane tak:

<переменная> := <выражение>

Znak „: =” jest odczytywany „przypisz”.

W przypadku, gdy wartość, do której jest przypisana wartość, znajduje się po prawej stronie polecenia, dzieje się co następuje:

1) wartość wyrażenia zapisanego po prawej stronie polecenia przypisania jest obliczana przy użyciu bieżących wartości wszystkich wartości zawartych w tym wyrażeniu;

2) zmiennej zostaje przypisana nowa obliczona wartość prądu. W takim przypadku poprzednia wartość zmiennej zostaje zniszczona.

Dlatego polecenie b: = a + b oznacza, że ​​wartość zmiennej a jest dodawana do poprzedniej wartości bieżącej b, a otrzymany wynik staje się nową wartością bieżącą b.

Ten przykład ilustruje trzy główne właściwości przypisania:

1) dopóki zmienna nie ma przypisanej wartości, pozostaje niezdefiniowana;

2) wartość przypisana zmiennej jest w nim przechowywana do czasu kolejnego przypisania tej zmiennej nowej wartości;

3) nowa wartość przypisana do zmiennej zastępuje jej poprzednią wartość.

Zapoznajmy się teraz z podstawowymi strukturami, zacznijmy od takiej operacji jak „follow”. Składa się z sekwencji następujących po sobie czynności:

akt 1

akt 2

. . . . . . . . .

akcja nr

Następnie rozważ podstawową strukturę „gałęzi”. Zapewnia, w zależności od wyniku sprawdzenia warunku (tak lub nie), wybór jednej z alternatywnych dróg algorytmu. Każda ścieżka prowadzi do wspólnego wyjścia, więc algorytm będzie kontynuowany niezależnie od wybranej ścieżki. Struktura rozgałęzień występuje w czterech głównych wariantach:



1. jeśli-to;

jeśli stan

następnie działania

2. jeśli-to-inaczej;

jeśli stan

następnie akcje 1

Inaczej akcja 2

wybór

wwarunek 1: działania 1

wwarunek 2: akcje 2

. . . . . . . . . . . .

w warunek N: działania N

{InaczejDziałania N+1}

I wreszcie tak będzie wyglądać podstawowa struktura cyklu wykorzystująca szkolny język algorytmiczny.

W szkołach, aby uczyć się podstaw algorytmizacji, tzw. szkolny język algorytmiczny (edukacyjny język algorytmiczny), używając słów zrozumiałych dla ucznia w języku rosyjskim. W przeciwieństwie do większości języków programowania, język algorytmiczny nie jest związany z architekturą komputera, nie zawiera szczegółów związanych z urządzeniem maszyny.

Przykłady

Algorytm w języku algorytmicznym w ujęciu ogólnym zapisany jest w postaci:

alg nazwa algorytmu (argumenty i wyniki) dany warunki stosowania algorytmu niezbędny cel algorytmu wczesny opis wartości pośrednich | sekwencja poleceń (treść algorytmu) kon

Podczas pisania algorytmu słowa kluczowe były zazwyczaj podkreślane lub wyróżniane pogrubieniem. Wcięcia użyto do wyróżnienia bloków logicznych, a pary słów początku i końca bloku były połączone pionową kreską.

Przykład obliczenia sumy kwadratów:

alg Suma kwadratów ( argumentować cały n, skaleczenie cały S) dany| n > 0 niezbędny| S = 1*1 + 2*2 + 3*3 + … + n*n wczesny cały ja | Wejście n; S:=0 | nc dla i od 1 do n | | S:= S + i * i | kts | wniosek„S=”, S kon

E-warsztat

Aby wzmocnić teoretyczne studia nad programowaniem w języku algorytmicznym, w 1985 roku specjaliści z Mechmatu Moskiewskiego Uniwersytetu Państwowego stworzyli edytor-kompilator "E-warsztat"(„E” - na cześć Erszowa), który pozwala wprowadzać, edytować i wykonywać programy w języku algorytmicznym.

W 1986 roku został wydany zestaw światów treningowych (wykonawców) dla „E-praktyki”: „Robot”, „Drafter”, „Dwunożny”, „Pojazd terenowy”, które pozwalają po prostu wprowadzić koncepcje algorytmu. "E-warsztat" został zaimplementowany na komputerach: Yamaha, Corvette, UKNC i był szeroko stosowany.

Ten język programowania był stale ulepszany, a opis późniejszej wersji „E-warsztatu” pojawił się w podręczniku z 1990 roku. System programowania „KuMir” („Zestaw światów edukacyjnych”), który obsługuje ten podręcznik, został wydany przez przedsiębiorstwo InfoMir w 1990 roku. Język tego systemu jest również nazywany „KuMir”.

W 1995 roku „KuMir” został rekomendowany przez Ministerstwo Edukacji Federacji Rosyjskiej jako główny materiał edukacyjny do kursu „Podstawy informatyki i inżynierii komputerowej” na podstawie podręcznika A.G. Kushnirenko, G.V. Lebiediewa i RA Svorenyi. .

Krytyka

Należy jednak zauważyć, że język algorytmiczny, przy braku szczegółów łączących go bezpośrednio z architekturą komputerową, niemniej jednak odwołuje się do Algolo -jak języki, pośrednio uczy uczniów polegania na architekturze maszyn von Neumanna. (Architektura Von Neumanna jest praktyczną realizacją wcześniejszej idei zwanej Maszyną Turinga. Oprócz idei Turinga istnieją inne pomysły. Najpopularniejszy z nich to Rachunek Lambda: pracował nad nią Alonzo Church. Maszyna Lisp to architektura, która jest na podstawie Lambda - rachunek różniczkowy.)

Spinki do mankietów

  • A. P. Erszow. Język algorytmiczny w szkolnym kursie podstaw informatyki i techniki komputerowej. 05/07/1985
  • Forum dotyczące rosyjskich języków programowania i narzędzi programistycznych

Fundacja Wikimedia. 2010 .

Zobacz, co „rosyjski język algorytmiczny” znajduje się w innych słownikach:

    Język algorytmiczny to język formalny używany do pisania, wdrażania lub badania algorytmów. Każdy język programowania jest językiem algorytmicznym, ale nie każdy język algorytmiczny nadaje się do użycia jako język ... ... Wikipedia

    Termin ten ma inne znaczenia, patrz Smok (znaczenia). Przykład schematu blokowego algorytmu w języku smoka DRAKON w schemacie DRAKON (przyjazny rosyjski język algorytmiczny zapewniający widoczność) wizualny ... ... Wikipedia

    Termin ten ma inne znaczenia, patrz Język algorytmiczny. Uczący się język algorytmiczny to język formalny używany do pisania, wdrażania i uczenia się algorytmów. W przeciwieństwie do większości języków programowania nie jest związany z ... Wikipedia

    Język algorytmiczny (również rosyjski język algorytmiczny, RAYA) to język programowania używany do pisania i badania algorytmów. Studiując informatykę w szkołach, studiować podstawy algorytmizacji, tzw. szkoła algorytmiczna ... ... Wikipedia

    Edukacyjny język programowania to język programowania przeznaczony do nauczania programowania specjalistów. Taki język musi spełniać główny wymóg: prostotę. Im prostsze, tym szybciej początkujący go opanuje. Możliwości takich ... ... Wikipedia

    Przykładowy schemat blokowy algorytmu w smoczym diagramie języka DRAKON DRAKON (Przyjazny Rosyjski Język Algorytmiczny Zapewniający Widoczność) to wizualny język algorytmiczny stworzony w ramach programu kosmicznego Buran. Rozwój podany język... Wikipedia