View
935
Download
7
Category
Preview:
DESCRIPTION
Citation preview
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 1/30
Языки Программирования
Обзорная экскурсия
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 2/30
Программа
греч. πρόγραμμα – объявление, распоряжение, указ
«упорядоченная последовательность действий для ЭВМ, реализующая алгоритм решения некоторой задачи» (БСЭ) не для всех языков верно
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 3/30
Язык программирования «Язык программирования –
формальная знаковая система, предназначенная для описания алгоритмов в форме, которая удобна для исполнителя»(Wikipedia)
«Языки программирования – это выразительное средство в искусстве компьютерного программирования»(Mitchel)
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 4/30
История Программы для машин
разностная машина (Дж.Мюллер, 1786) ткацкий станок (Жаккар, 1801) аналитическая машина (Бэббидж, 1833)
Теоретические языки λ-исчисление (1936) машина Тьюринга (1936)
1GL – машинные коды (1940-ые) 2GL – языки ассемблера (1952)
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 5/30
Последующие поколения
3GL – универсальные и удобные FORTRAN (1954), Algol, BASIC, Pascal, C
4GL – спец. область применения FOCUS (1975), SQL, PostScript, GUI
5GL – искусственный интеллект Prolog (1972), Mercury
Скриптовые языки Perl, Python, Lua, Tcl/Tk
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 6/30
Слепой робот в лабиринте
Иллюстрация поколений языков программирования
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 7/30
Алгоритм Проехать вперед
на пять клеток, затем повернуть направо, вперед на две клетки, повернуть направо и опять проехать пять клеток, повернуть налево, проехать четыре клетки.
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 8/30
Программа для робота (1GL) 0001 0101 0011
0001 0010 0011 0001 0101 0010 0001 0100 0000
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 9/30
Программа для робота (2GL) ШАГ 5
ПРВШАГ 2ПРВШАГ 5ЛЕВШАГ 4СТП
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 10/30
Программа для робота (3GL) Программа Выход
Вперед на 5; Повернуть направо; Вперед на 2; Повернуть направо; Вперед на 5; Повернуть налево; Вперед на 4;Конец Программы.
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 11/30
Программа для робота (5GL) Дано: робот в (2,6)
Цель: робот в (8,6)Правила: налево, направо, вперед.Ограничения: ...стены...
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 12/30
Сложение чисел от 1 до N
Варианты решений на различных языках программирования
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 13/30
Задача: Сумма от 1 до N (>0) 1+2+…+N = (…(((0+1)+2)+3)+…)
+N
S 0i 1повторить N раз S S + i i i + 1конец повтора
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 14/30
Сумма от 1 до N: Примеры (1)
Машинный код
8B C8 33 DB 03 D9 E0 FC
00 80 10 2124 84 FF FF14 80 FF FE00 44 10 21
Ассемблер
MOV CX, AX XOR BX, BXA: ADD BX, CX LOOPNZ A
addu v0, a0, $0B: addiu a0, a0, -1 bne a0, $0, B addu v0, v0, a0
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 15/30
Сумма от 1 до N: Примеры (2)
FORTRAN 77
SUM = 0 DO 10 I = 1,N SUM = SUM + I10 CONTINUE
Pascal
sum := 0; for i := 1 to n do sum := sum + i;
BASIC
10 SUM = 020 FOR I = 1 TO N30 SUM = SUM + I40 NEXT I
C, С++, Java
sum = 0;for (i = 1; i <= n; i++) sum += i;
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 16/30
Сумма от 1 до N: Примеры (3)
Perl
$sum = 0;foreach $i (1..$n) { $sum += $i;}
Lua
sum = 0for i = 1, n do sum = sum + iend
Python
sum = 0for i in range(1, n+1): sum += i
Ruby
sum = 0for i in (1..n) sum += iend
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 17/30
Сумма от 1 до N: Примеры (4)
SmallTalk
sum := 0.1 to: n do: [:i | sum := sum + i ].
Forth
: sum ( n -- sum ) 0 swap 1+ 0 do i + loop ;
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 18/30
Сумма от 1 до N: Примеры (5)
Lisp
(defun sum (n) (if (= n 0) 0 (+ n (sum (- n 1)))))
Haskell
sum’ 0 = 0sum’ n = n + sum’ (n-1)
sum’’ n = foldl (+) 0 [1..n]
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 19/30
Сумма от 1 до N: Примеры (6)
Prolog
sum(0, 0).sum(N, S) :- N > 0, N1 is N - 1, sum(N1, S1), S is N + S1.
Mercury
sum(N) = S :- (N = 0 -> S = 0; S = N + sum(N-1)).
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 20/30
Многообразие языков
Как же выбрать из имеющегося инструментария?
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 21/30
Парадигмы программирования Императивные языки
Процедурные FORTRAN, ALGOL, BASIC, PL/I, Pascal, C, Ada.
Объектно-ориентированные Simula, SmallTalk, C++, Eiffel, Java, C#.
Декларативные яыки Функциональные
Lisp, Logo, Scheme, ML, Miranda, Haskell. Логические
PLANNER, Prolog, Fril, Mercury.
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 22/30
Язык ассемблера
A-0 (1952) Минусы
сложный в использовании многословный
Плюсы близкий к аппаратуре быстрый код
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 23/30
FORTRAN
FORTRAN I (1954) ... Fortran 2003 The IBM Mathematical FORmula TRANslating System
Плюсы высокая точность математики огромная база кода
Минусы архаичен
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 24/30
C
C (1972), ANSI C (1989), C99 Плюсы
близкий к аппаратуре широко использующийся
Минусы не прощает ошибок позволяет слишком многое
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 25/30
С++
C++(1983), ANSI C++ (1998),C++ TR1 (2005)
Плюсы объектно-ориентированный совместимый с С
Минусы плохая поддержка компиляторами мешанина стилей
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 26/30
C#
С# 1.0 (2000) … C# 3.0 (2005) Плюсы
простота создания win-приложений Минусы
низкая скорость выполнения непортируемость
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 27/30
Perl
Perl 1.0 (1987) … Perl 5.8.8 (2006) Плюсы
высокоуровневый язык простота обработки текста
#!perl –pi.bak s/\b(\d+\.\d+)\b/$1f/g;
Минусы “write-only” (сложность восприятия) интерпретируемый
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 28/30
Forth
Forth (1971), ANSI Forth (1994) Плюсы
простота реализации компилятора мощный язык
Минусы обратная польская запись непонятна
2 2 * 4 = . против print(2 * 2 = 4) близок к ассемблеру
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 29/30
Haskell
Haskell (1987), Haskell 98 Плюсы
математичен работает с бесконечными объектами
let evens = map (*2) [1..] take 10 evens
Минусы непривычная парадигма (функц.) небыстрый, требует много памяти
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 30/30
Prolog
Prolog (1972) PROgrammation en LOGique
Плюсы язык искусственного интеллекта
Минусы непривычная парадигма (логич.) ограниченные возможности
Recommended