Execução de Algoritmos – Linguagens de - Facom

Propaganda
GBC015:
INTRODUÇÃO À CIÊNCIA DA
COMPUTAÇÃO
Execução de Algoritmos:
Linguagens e Compiladores
Ilmério Reis da Silva
[email protected]
www.facom.ufu.br/~ilmerio/icc
UFU/FACOM/BCC
Linguagens


Humanos: mais de 5.000 línguas
Características:
– Símbolos
– Regras gramaticais
– Semântica
Linguagem dos Computadores Digitais



Símbolos primitivos: 1 ou 0
Porque?
– BInary digiT
– 1 : passagem de energia
– 0 : corte de energia
Símbolos derivados:
– Padrões de bits
– Byte = 8 bits
MONTADOR (assembly)


Linguagem de máquina é muito difícil para humanos
Tradutores
MOV $1, AL
10110000 01100001
EXEMPLO ASSEMBLY
movl $5, %eax
movl $1, %edx
.L4:
imull %eax, %edx
decl %eax
testl %eax, $0
jg .L4
; Coloque 5 em eax
; Coloque 1 em edx
; Multiplique eax por edx em edx
; Subtraia 1 de eax
; Teste se eax é 0
; Va_para .L4 se teste maior que 0
OBS: o que faz esse programa?
LINGUAGENS DE ALTO NÍVEL

Assembly não foi suficiente, continuava difícil

Busca por linguagens mais próximas do programador e não da máquina

Lista não exaustiva de linguagens de alto nível:
–
FORTRAN, IBM, 1954 (imperativa)
–
LISP, MIT, 1958 (funcional)
–
ALGOL, 1958 (imperativa)
–
COBOL, 1958 (comercial)
–
C, Bell, 1972 (imperativa)
–
PROLOG, Universidade de Marselha, 1972 (declarativa)
–
JAVA, Sun, 1995 (OO : portabilidade)
–
PHP, Rasmus, 1995 (interpretada)
–
Etc.
FORTRAN (1954)
nfact=1
do i=1, 5
nfact = nfact*i
enddo
OBS:
- procedural/imperativa: instruções
mudam o estado da máquina
- variáveis, laços,sequências
- 20 vezes mais fácil q o Assembly
- usada em cálculos científicos
LISP (1958)
(def un factorial (n)
(i f (<= n 1)
1
(* n (factorial (- n 1)))))
OBS:
- funcional
- pré-fixada
- recursividade
- muitos parêntesis
- usada por teóricos da computação
ALGOL (1958)
integer procedure Factorial(m); integer m;
Begin
integer F;
F := if m=1 then 1 else m*Factorial(m‐1);
Factorial := F
end;
OBS:
- em busca de um padrão
- linguagem muito influente
- recursividade
- acadêmica
COBOL (1958)
IDENTIFICATION DIVISION.
PROGRAM-ID. 'FATORIAL'.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-FAT
PIC 9(09)
VALUE ZEROS.
01 WS-N
PIC 9(09)
VALUE ZEROS.
PROCEDURE DIVISION.
RT-0-PRINCIPAL
SECTION.
MOVE 5 TO WS-FAT.
SUBTRACT 1 FROM WS-FAT GIVING WS-N.
PERFORM RT-1-INICIAR UNTIL WS-N EQUAL 0.
DISPLAY 'WS-FAT = ' WS-FAT.
STOP RUN.
RT-0-PRINCIPALX.
EXIT.
RT-1-INICIAR
SECTION.
MULTIPLY WS-FAT BY WS-N GIVING WS-FAT.
SUBTRACT 1 FROM WS-N GIVING WS-N.
OBS:
- em busca de um padrão para área comercial
C (1972)
i nt main() {
i nt n = 5;
i nt fact = 1;
whi l e (n > 1) {
fact *= n;
n--;
}
printf("%d\n", fact);
}
OBS:
- prevalente por muitos anos
PROLOG (1972)
factorial(0,1).
factorial(N,F) :N>0,
N1 is N-1,
factorial(N1, F1),
F is N * F1.
OBS:
Linguagem declarativa
* o programa é um conjunto de restrições
* o programa descreve uma verdade
* ausência de efeitos colaterais:
(resultados diferentes de uma mesma
função com os mesmos parâmetros)
* laços são obtidos por recursão
JAVA (1994)
public class Fact {
public static void main(String a[]) {
int n = 5;
int fact = 1;
while (n > 1) {
fact *= n;
n--;
}
System.out.println(fact);
}
}
OBS:
- prevalente
- orientada a objetos
- portabilidade
PHP (1994)
<?php
$fat = $_POST['fat'];
$resul = 1;
for($i = $fat; $i >= 1; $i--){
$resul *= $fat;
$fat--;
}
echo "<br><br>".$resul."<br><br><br>";
?>
<br><br>
<form method="post" action="fatorial.php">
<input type="text" name="fat"><br>
<input type="submit" name="aa" value="enviar">
</form>
OBS:
- interpretado por um servidor web
- boa interface com SGBD via SQL
QUANTAS LINGUAGENS DE
PROGRAMAÇÃO?
- 2.500 SEGUNDO A EDITORA O'REILLY
- 600 DOCUMENTADAS NA WIKIPÉDIA
- Prevalência linguagens(www.tiobe.com, 01/16)
* Java, 21,5%
* C, 16,0%
* C++, 6,9%
* C#, 4,7%
* Python, 3,9%
* PHP, 2,7%
PREVALÊNCIA DE LINGUAGENS DE
PROGRAMAÇÃO (www.tiobe.com)
COMPILADORES
traduzem o programa para linguagem de máquina
INPERPRETADORES
traduzem cada comando
Bibliografia
[1] BROOKSHEAR, J. Glenn. Ciência da computação: uma
visão abrangente, ,tradução da 11a ed [por] Eduardo K
Pivete, Porto Alegre, Bookman, 2013.
[2] FEDELI, Ricardo Daniel; POLLONI, Enrico Giulio
Franco; PERES, Fernando Eduardo. Introdução à ciência da
computação. 2. ed. São Paulo: Cengage Learning, 2010.
[3] MOKARZEL, Fábio Carneiro. Introdução à ciência da
computação. Rio de Janeiro: Elsevier, 2008.
[4] Autran Macedo, Maria Adriana, Renato Pimentel e Ilmério
Silva, http://www.facom.ufu.br
Material de Apoio


Capítulo 6 de [1], incluindo exercícios
Capítulo 5 de [2], incluindo exercícios
FIM
Execução de Algoritmos:
Linguagens e Compiladores
Download