SlideShare uma empresa Scribd logo
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
Projeto de especificac¸˜ao da linguagem C+-
Caio Santos, Gabriel Valsiljevic, Jean Silva, Victor Henrique
Universidade Federal do Rio Grande do Norte
Centro de Ciˆencias Exatas e da Terra
Departamento de Inform´atica e Matem´atica Aplicada
4 de junho de 2013
1/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
CONTE ´UDO
INTRODUC¸ ˜AO
LINGUAGEM IMPERATIVA
Dom´ınio de Aplicac¸˜ao
Principais caracter´ısticas
Sistema de Tipos
Tipos Primitivos
Designadores dos tipos primitivos
Tipos compostos
Express˜oes da Linguagem
Entrada e Sa´ıda
Estruturas de Controle
LINGUAGEM FUNCIONAL
Diferenc¸as marcantes do paradigma imperativo
Sistema de Tipos
Express˜oes da Linguagem
Escopo e Tempo de Vida
Arrays
Estruturas de controle
LINGUAGEM L ´OGICA
Diferenc¸as marcantes do paradigma imperativo
Tipos
Escopo
Operadores e express˜oes
Armazenamento de valores
Arrays
Estruturas de controle
2/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
DOM´INIO DE APLICAC¸ ˜AO
Linguagem baseada em C e FORTRAN
Dom´ınio de aplicac¸˜ao cient´ıfico
Estruturas de dados simples
Manipulac¸˜ao de grandes quantidades de dados
Alta precis˜ao
Publico alvo
Matem´aticos e cientistas
3/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
PRINCIPAIS CARACTER´ISTICAS
Legibilidade
Pequeno n´umero de componentes b´asicos (simplicidade
global)
Nomes (designadores) dos tipos primitivos refletem bem
suas finalidades. Ex.: int ≡ inteiro
´E case sensitve
Confiabilidade
´E fortemente tipada
Oferece mecanismos de tratamento de excec¸ ˜oes
Capacidade de escrita
´E pouca ortogonal
Sistema de implementac¸˜ao: compilada
Usa compilac¸˜ao separada
4/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
SISTEMA DE TIPOS
A linguagem ´e fortemente tipada
Compatibilidade entre tipos
Compatibilidade de nomes e estruturas ser˜ao usados
5/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
TIPOS PRIMITIVOS
Tabela: Designadores dos tipos primitivos da linguagem
Nome Descri¸c˜ao Tamanho Faixa
char Caractere 1byte −128 a 127 e unsigned: 0 a 255
short Inteiro curto 2bytes −32768 a 32767 e unsigned: 0 `a 65535
int Inteiro 4bytes −2147483648 a 2147483647 e unsigned: 0
`a 4294967295
long Inteiro longo 8bytes −263 `a 263 − 1 e unsigned: 0 `a 264 − 1
bigInt Inteiro muito longo 16bytes −2127 `a 2127 − 1 e unsigned: 0 `a 2128 − 1
bool Valor booleano. 1byte true ou false
float Pronto flutuante 4bytes ±3.4e ± 38
double Precis˜ao dupla do
ponto flutuante
8bytes ±1.7e ± 308
complex N´umeros comple-
xos
8bytes −264 `a 264 − 1
6/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
TIPOS COMPOSTOS
Conjunto (Set)
1 import utility.set;
2 ...
3 set <int> A;
4 set < set <int> > B;
5 B.add(A);
6 /**
7 * $B supset A$
8 */
7/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
TIPOS COMPOSTOS
Conjunto (Set)
1 import utility.set;
2 ...
3 set <int> A;
4 set < set <int> > B;
5 B.add(A);
6 /**
7 * $B supset A$
8 */
Lista (List)
1 import utility.list;
2 ...
3 list <int> a;
4 list < list <int> > b;
7/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
TIPOS COMPOSTOS
Pilha (Stack)
1 import utility.stack
2 ...
3 stack <int> mystack;
4 mystack.push(5);
5 mystack.push(4);
6 mystack.push(3);
7 mystack.pop();
8 write("%dn", mystack.top());
8/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
TIPOS COMPOSTOS
Pilha (Stack)
1 import utility.stack
2 ...
3 stack <int> mystack;
4 mystack.push(5);
5 mystack.push(4);
6 mystack.push(3);
7 mystack.pop();
8 write("%dn", mystack.top());
Fila (Queue)
1 import utility.queque;
2 ...
3 queue f<int> myqueue;
4 myqueue.push_back(8);
5 myqueue.push_back(7);
6 write("front: %d; back: %dn", myqueue.front(), myqueue.back());
7 myqueue.pop_front();
8/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
TIPOS COMPOSTOS
Vetor
1 int v[10];
2 int vet[3] = {1, 2, 3};
3 int mat[2][2] = {1, 0;
4 0, 1};
9/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
TIPOS COMPOSTOS
Vetor
1 int v[10];
2 int vet[3] = {1, 2, 3};
3 int mat[2][2] = {1, 0;
4 0, 1};
O usu´ario pode desejar definir seus pr´oprios tipos
1 struct ListaT {
2 int info;
3 ListaT * prox;
4 };
5 ...
9/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
EXPRESS ˜OES DA LINGUAGEM
Operador Descric¸˜ao
Operadores Aritim´eticos
+ adic¸˜ao
- subtrac¸˜ao
* multiplicac¸˜ao
/ divis˜ao
% mod ou resto de divis˜ao
Incremento e Decremento
++ incremento
– decremento
Operadores Relacionais
== Igualdade
!= Diferenc¸a
>, < maior que, e menor que
>=, <= maior igual, e menor igual
10/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
EXPRESS ˜OES DA LINGUAGEM
Operador Descric¸˜ao
Operadores L´ogicos
! NOT
&& AND
|| OR
Operadores bit-a-bit
& AND
| OR
ˆ XOR
˜ NOT
11/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
TIPOS DEFINIDOS PELO USU ´ARIO
Definic¸˜ao
1 template <typedef struct T>
2 typedef struct Par {
3 T a, b;
4 };
5
6 template <typedef struct T>
7 function getMax (Par <T> p ) : T {
8 return p.a > p.b ? p.a : p.b;
9 }
Uso
1 Par <double> p;
2 p.a = 5.5, p.b = 5.4;
3 write("%lf", getMax(p));
12/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ENTRADA E SA´IDA
1 import io;
2
3 function main(): int {
4 int a, b;
5 read("%i %i", &a, &b);
6 int soma = a + b;
7 write("%in", soma);
8 return 0;
9 }
13/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESTRUTURAS DE CONTROLE
CONDICIONAL: COMANDO IF
1 import io;
2
3 function main(): int {
4 int n;
5 read("%d", &n);
6 if (n > 0) {
7 write("%d eh um numero positivon", n);
8 } else if(n < 0){
9 write("%d eh um numero negativon", n);
10 } else {
11 write("%d eh zeron", n);
12 }
13 return 0;
14 }
14/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESTRUTURAS DE CONTROLE
CONDICIONAL: COMANDO SWITCH-CASE
1 import io;
2
3 function main(): int {
4 string op;
5 read("%s", &op);
6 switch(op) {
7 case "um":
8 write("1n");
9 break;
10 case "dois":
11 write("2n");
12 break;
13 case "tres":
14 write("3n");
15 break;
16 default:
17 write("qwertyn");
18 break;
19 }
20 return 0;
21 }
15/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESTRUTURAS DE CONTROLE
REPETIC¸ ˜AO: COMANDO FOR
1 import io;
2
3 function main(): int {
4 int n;
5 read("%d", &n);
6 for (int i = 0; i < n; i++) {
7 write("%d ", 2 * (i + 1));
8 }
9 write("n");
10 return 0;
11 }
16/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESTRUTURAS DE CONTROLE
REPETIC¸ ˜AO: COMANDO FOR-EACH
1 import io;
2 import utility.list;
3
4 function main(): int {
5 list <int> lst;
6 lst.add(0);
7 lst.add(2);
8 lst.add(3);
9 lst.add(4);
10
11 foreach (int a : lst) {
12 write("%d ", a);
13 }
14 write("n");
15 return 0;
16 }
17/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESTRUTURAS DE CONTROLE
REPETIC¸ ˜AO: COMANDO WHILE
1 import io;
2
3 function main(): int {
4 int n;
5 read("%d", &n);
6 int i = 0;
7 while(i < n) {
8 ++i;
9 write("%d ", 2 * i);
10 }
11 write("n");
12 return 0;
13 }
18/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESTRUTURAS DE CONTROLE
REPETIC¸ ˜AO: COMANDO DO-WHILE
1 import io;
2
3 function main(): int {
4 int i = 5;
5 do {
6 write("%d ", i);
7 i--;
8 } while (i != 0);
9 write("n");
10 return 0;
11 }
19/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESTRUTURAS DE CONTROLE
TRATAMENTO DE EXCEC¸ ˜OES
1 procedure g() {
2 int x;
3 write("Digite um numero positivo: n");
4 try {
5 read(x);
6 if(x < 0){
7 throw x;
8 }
9 } catch(int erro) {
10 write("Erro! numero negativo: %i n", erro);
11 }
12 }
20/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
SUBPROGRAMAS
1 function fib(int n): int {
2 if (n == 0 || n == 1) return n;
3 else
4 return fib(n - 1) + fib(n - 2);
5 }
1 procedure printTest() {
2 write("Opa...aprendi C+-!");
3 }
21/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
LINGUAGEM FUNCIONAL
DIFERENC¸ AS MARCANTES DO PARADIGMA IMPERATIVO
Linguagems de programac¸˜ao funcional tratam
computac¸oes como avaliac¸ ˜oes matem´aticas.
N˜ao usa vari´aveis ou instruc¸ ˜oes de atribuic¸˜ao.
Programas s˜ao definic¸ ˜oes e aplicac¸ ˜oes de func¸ ˜oes.
Simplificac¸˜ao da semˆantica.
22/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
SISTEMA DE TIPOS
Praticamente todos os tipos primitivos permanecer˜ao.
Os tipos compotos ser˜ao representados pela tupla.
23/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
EXPRESS ˜OES DA LINGUAGEM
Os operadores aritm´eticos permanecem da mesma forma.
O incremento e decremento ser˜ao definidos como func¸ ˜oes
primitivas.
1 (int, float, string)
24/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESCOPO E TEMPO DE VIDA
Comportamento de func¸ ˜oes matem´aticas.
Escopo das vari´aveis ´e est´atico.
Seu resultado n˜ao deve ser afetado pelo contexto em que a
func¸˜ao foi chamada.
25/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ARRAYS
Arrays foram substituidos por Listas.
Avaliac¸˜ao preguic¸osa, evita c´alculos desnecess´arios e
permite construir estruturas infinitas.
26/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESTRUTURAS DE CONTROLE
As estruturas condicionais se resumem em uma mescla do
comportamento do switch-case com a avaliac¸˜ao de
condic¸ ˜oes de guarda do if.
Estruturas de repetic¸˜ao interativas deixaram de existir.
Alteradores de fluxo (jumps e escapes) tamb´em ser˜ao
eliminados.
27/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESTRUTURAS DE CONTROLE
1 //Exemplo Imperativo
2 function ehPrimo(int n) : bool {
3 int i=2;
4 while(i*i){
5 if(i%n==0) return false;
6 i++;
7 }
8 return true;
9 }
10
11 //Exemplo Funcional
12 function ehPrimo n : int -> bool
13 ehPrimoAux(2,n)
14
15 function ehPrimoAux i, n : int, int
16 {i*i>n, true}
17 {i%n == 0, false}
18 ehPrimoAux i+1, n
28/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
LINGUAGEM L ´OGICA
DIFERENC¸ AS MARCANTES DO PARADIGMA IMPERATIVO
Trabalha com regras e fatos
Vari´aveis n˜ao s˜ao blocos de mem´oria
O programador se preocupa em descrever o problema, e
n˜ao sua soluc¸˜ao
Utiliza backtracking para tentar unificar as vari´aveis
29/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
TIPOS PRIMITIVOS
N˜ao haver´a ponteiros
N˜ao existir˜ao blocos de mem´oria vis´ıveis ao programador
unsigned e string ser˜ao substitu´ıdos por symbol
30/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
TIPOS COMPOSTOS
Usu´arios poder˜ao definir predicados compostos
Exemplo:
#predicado simples
gosta(gabriel, lpcp).
#predicado composto
gosta(gabriel, disciplina(lpcp)).
31/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESCOPO
Fatos s˜ao vis´ıveis globalmente
Vari´aveis s˜ao vis´ıveis apenas dentro da regra onde est˜ao
instanciadas
32/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
OPERADORES E EXPRESS ˜OES
Operadores aritm´eticos e l´ogicos permanecem inalterados
Excec¸˜ao: operador ‘=’ ´e utilizado para unificac¸˜ao, apenas
Utiliza-se ‘is’ para atribuic¸˜ao
Exemplo:
tenta_unificar(X,Y) :- X = Y.
atribuir(X, Y) :- X is Y + 3.
33/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ARMAZENAMENTO DE VALORES
Fatos s˜ao armazenados em modelo est´atico
Vari´aveis s˜ao armazenadas em modelo dinˆamico em pilha
Devido ao seu uso no backtracking, cujo comportamento ´e
recursivo
34/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ARRAYS
Definidos como listas ligadas
Representadas como [H|T]
H ´e o primeiro elemento da lista e T seu restante (e.g.:
[1, 2, 3] seria [1|[2, 3]])
Exemplos:
somatorio([], 0).
somatorio([H|T], X) :- somatorio(T, Y), X is H + Y.
35/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
ESTRUTURAS DE CONTROLE
N˜ao existir˜ao estruturas de controle e fluxo como if-else e
while
Para utilizar estes recursos, deve-se utilizar m´etodos
l´ogicos e recurs˜ao
Comando “!” (cut) utilizado para interromper o processo
de resoluc¸˜ao e impedir lac¸os infinitos
36/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
EXEMPLO DE PROGRAMA
#numero de elementos de uma lista
num_elements([], 0).
num_elements([_|T], X) :- num_elements(T, Y), X is 1 + Y.
37/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
EXEMPLO DE PROGRAMA
# alguns fatos
progenitor(joao, mario).
progenitor(helena, carlos).
progenitor(mario, carlos).
sexo(jose, ’masculino’).
sexo(joao, ’masculino’).
sexo(maria, ’feminino’).
sexo(ana, ’feminino’).
38/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
EXEMPLO DE PROGRAMA
# diversas relacoes de parentesco
irma(X, Y) :- sexo(X, ’feminino’), progenitor(Z, X), progenitor(Z, Y).
irmao(X, Y) :- sexo(X, ’masculino’), progenitor(Z, X),progenitor(Z, Y)
mae(X, Y) :- sexo(X, ’feminino’), progenitor(X, Y).
pai(X, Y) :- sexo(X, ’masculino’), progenitor(X, Y).
avo(X, Y) :- sexo(X, ’masculino’), progenitor(X, Z), progenitor(Z, Y).
tio(X, Y) :- irmao(X, Z), progenitor(Z, Y).
descendente(X, Y) :- progenitor(Y, X).
descendente(X, Y) :- progenitor(Y, Z), descendente(X, Z).
39/40
INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA
FIM
D´uvidas?
40/40

Mais conteúdo relacionado

PDF
Java 05
PDF
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
PPTX
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
PPTX
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
PPT
Introdução a Linguagem C
PDF
Introdução a Linguagem de Programação C
PPTX
Linguagem C - Estruturas
PDF
Aula09 traducaosin110
Java 05
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
Introdução a Linguagem C
Introdução a Linguagem de Programação C
Linguagem C - Estruturas
Aula09 traducaosin110

Mais procurados (20)

PPSX
Programação em C
PPTX
Linguagem C - Funções
PDF
Compiladores 5
PDF
Semântica Formal
PDF
Funções e procedimentos
PPTX
Introdução à Linguagem C
PDF
Compiladores 3
PDF
Aula6 - Linguagem C
PPT
Curso de Linguagem C
PPTX
Linguagem C - Ponteiros
PDF
Linguagem c parte 2
PPTX
Linguagem C - Controle de Programa
PPTX
Tradutor de Pig Latin
ODP
PPT
A linguagem de programação c
PDF
Compiladores 6
PDF
Apostila c++
PDF
Revisão sobre ponteiros em C
PDF
Apresentação Linguagem C
Programação em C
Linguagem C - Funções
Compiladores 5
Semântica Formal
Funções e procedimentos
Introdução à Linguagem C
Compiladores 3
Aula6 - Linguagem C
Curso de Linguagem C
Linguagem C - Ponteiros
Linguagem c parte 2
Linguagem C - Controle de Programa
Tradutor de Pig Latin
A linguagem de programação c
Compiladores 6
Apostila c++
Revisão sobre ponteiros em C
Apresentação Linguagem C
Anúncio

Destaque (20)

PDF
ความต้องการของ ร.ร.ตชด.ในพื้นที่จังหวัดน่าน และพะเยา
PPTX
PDF
Satya w ex
PPTX
Creiamo il nostro paesaggio 5 B 5 C-Volta
PDF
Laporan kerja praktek Lukman Arief
PDF
Política industrial i econòmica
PPT
Special Starbucks Stores!
PDF
Geetanjali sharma brochure portfolio
PPTX
Nuevo 20 junio prezi jessica.
PDF
ความต้องการ ของ ร.ร.ตชด.ในพื้นที่ จ.เชียงราย
PPSX
Forest fire facts
PPTX
Nuestras Raíces. EBM-Grundtvig
PPTX
Family Based Learning and Community Based Education
PPSX
Presentación de fiestas infantiles diapos
PPT
La primera pandereta
PPTX
Un dia estrany
PDF
The Watertight Marketing Framework
PPTX
Content for every step of a sale
PDF
H2O Space. HTML Coding Rule.
ความต้องการของ ร.ร.ตชด.ในพื้นที่จังหวัดน่าน และพะเยา
Satya w ex
Creiamo il nostro paesaggio 5 B 5 C-Volta
Laporan kerja praktek Lukman Arief
Política industrial i econòmica
Special Starbucks Stores!
Geetanjali sharma brochure portfolio
Nuevo 20 junio prezi jessica.
ความต้องการ ของ ร.ร.ตชด.ในพื้นที่ จ.เชียงราย
Forest fire facts
Nuestras Raíces. EBM-Grundtvig
Family Based Learning and Community Based Education
Presentación de fiestas infantiles diapos
La primera pandereta
Un dia estrany
The Watertight Marketing Framework
Content for every step of a sale
H2O Space. HTML Coding Rule.
Anúncio

Semelhante a Final presentation of proposal language (20)

PPTX
Estrutura de linguagem de programação - Aula 2.pptx
PPTX
Tcc ritzmann,m.r. robotec
ODP
Linguagem C 01 Primeiros Passos
PDF
Aula 1 | Introdução a C++
ODP
Linguagem C 06 Funcoes
PPTX
Programação - linguagem C - uso de funções
ODP
Python Emsl2009
PPTX
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
PPT
Introdução à programação
DOCX
Java para iniciantes
PDF
Introducao Google GO
PPTX
Introdução a Linguagem C.pptx [Reparado].pptx
PDF
AULA-02.pdf
PDF
PDF
Conceito de funçao e modularizaçao
PDF
PL/SQL - Conceitos Básicos
PPTX
Plsql - Conceitos Básicos
PDF
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
PDF
Apresentação curso pic básico fbs eletrônica
PDF
095 A 134 Material Auxiliar Para Curso AvançAdo I Msp430
Estrutura de linguagem de programação - Aula 2.pptx
Tcc ritzmann,m.r. robotec
Linguagem C 01 Primeiros Passos
Aula 1 | Introdução a C++
Linguagem C 06 Funcoes
Programação - linguagem C - uso de funções
Python Emsl2009
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Introdução à programação
Java para iniciantes
Introducao Google GO
Introdução a Linguagem C.pptx [Reparado].pptx
AULA-02.pdf
Conceito de funçao e modularizaçao
PL/SQL - Conceitos Básicos
Plsql - Conceitos Básicos
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Apresentação curso pic básico fbs eletrônica
095 A 134 Material Auxiliar Para Curso AvançAdo I Msp430

Final presentation of proposal language

  • 1. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA Projeto de especificac¸˜ao da linguagem C+- Caio Santos, Gabriel Valsiljevic, Jean Silva, Victor Henrique Universidade Federal do Rio Grande do Norte Centro de Ciˆencias Exatas e da Terra Departamento de Inform´atica e Matem´atica Aplicada 4 de junho de 2013 1/40
  • 2. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA CONTE ´UDO INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA Dom´ınio de Aplicac¸˜ao Principais caracter´ısticas Sistema de Tipos Tipos Primitivos Designadores dos tipos primitivos Tipos compostos Express˜oes da Linguagem Entrada e Sa´ıda Estruturas de Controle LINGUAGEM FUNCIONAL Diferenc¸as marcantes do paradigma imperativo Sistema de Tipos Express˜oes da Linguagem Escopo e Tempo de Vida Arrays Estruturas de controle LINGUAGEM L ´OGICA Diferenc¸as marcantes do paradigma imperativo Tipos Escopo Operadores e express˜oes Armazenamento de valores Arrays Estruturas de controle 2/40
  • 3. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA DOM´INIO DE APLICAC¸ ˜AO Linguagem baseada em C e FORTRAN Dom´ınio de aplicac¸˜ao cient´ıfico Estruturas de dados simples Manipulac¸˜ao de grandes quantidades de dados Alta precis˜ao Publico alvo Matem´aticos e cientistas 3/40
  • 4. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA PRINCIPAIS CARACTER´ISTICAS Legibilidade Pequeno n´umero de componentes b´asicos (simplicidade global) Nomes (designadores) dos tipos primitivos refletem bem suas finalidades. Ex.: int ≡ inteiro ´E case sensitve Confiabilidade ´E fortemente tipada Oferece mecanismos de tratamento de excec¸ ˜oes Capacidade de escrita ´E pouca ortogonal Sistema de implementac¸˜ao: compilada Usa compilac¸˜ao separada 4/40
  • 5. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA SISTEMA DE TIPOS A linguagem ´e fortemente tipada Compatibilidade entre tipos Compatibilidade de nomes e estruturas ser˜ao usados 5/40
  • 6. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA TIPOS PRIMITIVOS Tabela: Designadores dos tipos primitivos da linguagem Nome Descri¸c˜ao Tamanho Faixa char Caractere 1byte −128 a 127 e unsigned: 0 a 255 short Inteiro curto 2bytes −32768 a 32767 e unsigned: 0 `a 65535 int Inteiro 4bytes −2147483648 a 2147483647 e unsigned: 0 `a 4294967295 long Inteiro longo 8bytes −263 `a 263 − 1 e unsigned: 0 `a 264 − 1 bigInt Inteiro muito longo 16bytes −2127 `a 2127 − 1 e unsigned: 0 `a 2128 − 1 bool Valor booleano. 1byte true ou false float Pronto flutuante 4bytes ±3.4e ± 38 double Precis˜ao dupla do ponto flutuante 8bytes ±1.7e ± 308 complex N´umeros comple- xos 8bytes −264 `a 264 − 1 6/40
  • 7. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA TIPOS COMPOSTOS Conjunto (Set) 1 import utility.set; 2 ... 3 set <int> A; 4 set < set <int> > B; 5 B.add(A); 6 /** 7 * $B supset A$ 8 */ 7/40
  • 8. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA TIPOS COMPOSTOS Conjunto (Set) 1 import utility.set; 2 ... 3 set <int> A; 4 set < set <int> > B; 5 B.add(A); 6 /** 7 * $B supset A$ 8 */ Lista (List) 1 import utility.list; 2 ... 3 list <int> a; 4 list < list <int> > b; 7/40
  • 9. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA TIPOS COMPOSTOS Pilha (Stack) 1 import utility.stack 2 ... 3 stack <int> mystack; 4 mystack.push(5); 5 mystack.push(4); 6 mystack.push(3); 7 mystack.pop(); 8 write("%dn", mystack.top()); 8/40
  • 10. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA TIPOS COMPOSTOS Pilha (Stack) 1 import utility.stack 2 ... 3 stack <int> mystack; 4 mystack.push(5); 5 mystack.push(4); 6 mystack.push(3); 7 mystack.pop(); 8 write("%dn", mystack.top()); Fila (Queue) 1 import utility.queque; 2 ... 3 queue f<int> myqueue; 4 myqueue.push_back(8); 5 myqueue.push_back(7); 6 write("front: %d; back: %dn", myqueue.front(), myqueue.back()); 7 myqueue.pop_front(); 8/40
  • 11. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA TIPOS COMPOSTOS Vetor 1 int v[10]; 2 int vet[3] = {1, 2, 3}; 3 int mat[2][2] = {1, 0; 4 0, 1}; 9/40
  • 12. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA TIPOS COMPOSTOS Vetor 1 int v[10]; 2 int vet[3] = {1, 2, 3}; 3 int mat[2][2] = {1, 0; 4 0, 1}; O usu´ario pode desejar definir seus pr´oprios tipos 1 struct ListaT { 2 int info; 3 ListaT * prox; 4 }; 5 ... 9/40
  • 13. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA EXPRESS ˜OES DA LINGUAGEM Operador Descric¸˜ao Operadores Aritim´eticos + adic¸˜ao - subtrac¸˜ao * multiplicac¸˜ao / divis˜ao % mod ou resto de divis˜ao Incremento e Decremento ++ incremento – decremento Operadores Relacionais == Igualdade != Diferenc¸a >, < maior que, e menor que >=, <= maior igual, e menor igual 10/40
  • 14. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA EXPRESS ˜OES DA LINGUAGEM Operador Descric¸˜ao Operadores L´ogicos ! NOT && AND || OR Operadores bit-a-bit & AND | OR ˆ XOR ˜ NOT 11/40
  • 15. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA TIPOS DEFINIDOS PELO USU ´ARIO Definic¸˜ao 1 template <typedef struct T> 2 typedef struct Par { 3 T a, b; 4 }; 5 6 template <typedef struct T> 7 function getMax (Par <T> p ) : T { 8 return p.a > p.b ? p.a : p.b; 9 } Uso 1 Par <double> p; 2 p.a = 5.5, p.b = 5.4; 3 write("%lf", getMax(p)); 12/40
  • 16. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ENTRADA E SA´IDA 1 import io; 2 3 function main(): int { 4 int a, b; 5 read("%i %i", &a, &b); 6 int soma = a + b; 7 write("%in", soma); 8 return 0; 9 } 13/40
  • 17. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESTRUTURAS DE CONTROLE CONDICIONAL: COMANDO IF 1 import io; 2 3 function main(): int { 4 int n; 5 read("%d", &n); 6 if (n > 0) { 7 write("%d eh um numero positivon", n); 8 } else if(n < 0){ 9 write("%d eh um numero negativon", n); 10 } else { 11 write("%d eh zeron", n); 12 } 13 return 0; 14 } 14/40
  • 18. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESTRUTURAS DE CONTROLE CONDICIONAL: COMANDO SWITCH-CASE 1 import io; 2 3 function main(): int { 4 string op; 5 read("%s", &op); 6 switch(op) { 7 case "um": 8 write("1n"); 9 break; 10 case "dois": 11 write("2n"); 12 break; 13 case "tres": 14 write("3n"); 15 break; 16 default: 17 write("qwertyn"); 18 break; 19 } 20 return 0; 21 } 15/40
  • 19. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESTRUTURAS DE CONTROLE REPETIC¸ ˜AO: COMANDO FOR 1 import io; 2 3 function main(): int { 4 int n; 5 read("%d", &n); 6 for (int i = 0; i < n; i++) { 7 write("%d ", 2 * (i + 1)); 8 } 9 write("n"); 10 return 0; 11 } 16/40
  • 20. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESTRUTURAS DE CONTROLE REPETIC¸ ˜AO: COMANDO FOR-EACH 1 import io; 2 import utility.list; 3 4 function main(): int { 5 list <int> lst; 6 lst.add(0); 7 lst.add(2); 8 lst.add(3); 9 lst.add(4); 10 11 foreach (int a : lst) { 12 write("%d ", a); 13 } 14 write("n"); 15 return 0; 16 } 17/40
  • 21. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESTRUTURAS DE CONTROLE REPETIC¸ ˜AO: COMANDO WHILE 1 import io; 2 3 function main(): int { 4 int n; 5 read("%d", &n); 6 int i = 0; 7 while(i < n) { 8 ++i; 9 write("%d ", 2 * i); 10 } 11 write("n"); 12 return 0; 13 } 18/40
  • 22. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESTRUTURAS DE CONTROLE REPETIC¸ ˜AO: COMANDO DO-WHILE 1 import io; 2 3 function main(): int { 4 int i = 5; 5 do { 6 write("%d ", i); 7 i--; 8 } while (i != 0); 9 write("n"); 10 return 0; 11 } 19/40
  • 23. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESTRUTURAS DE CONTROLE TRATAMENTO DE EXCEC¸ ˜OES 1 procedure g() { 2 int x; 3 write("Digite um numero positivo: n"); 4 try { 5 read(x); 6 if(x < 0){ 7 throw x; 8 } 9 } catch(int erro) { 10 write("Erro! numero negativo: %i n", erro); 11 } 12 } 20/40
  • 24. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA SUBPROGRAMAS 1 function fib(int n): int { 2 if (n == 0 || n == 1) return n; 3 else 4 return fib(n - 1) + fib(n - 2); 5 } 1 procedure printTest() { 2 write("Opa...aprendi C+-!"); 3 } 21/40
  • 25. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA LINGUAGEM FUNCIONAL DIFERENC¸ AS MARCANTES DO PARADIGMA IMPERATIVO Linguagems de programac¸˜ao funcional tratam computac¸oes como avaliac¸ ˜oes matem´aticas. N˜ao usa vari´aveis ou instruc¸ ˜oes de atribuic¸˜ao. Programas s˜ao definic¸ ˜oes e aplicac¸ ˜oes de func¸ ˜oes. Simplificac¸˜ao da semˆantica. 22/40
  • 26. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA SISTEMA DE TIPOS Praticamente todos os tipos primitivos permanecer˜ao. Os tipos compotos ser˜ao representados pela tupla. 23/40
  • 27. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA EXPRESS ˜OES DA LINGUAGEM Os operadores aritm´eticos permanecem da mesma forma. O incremento e decremento ser˜ao definidos como func¸ ˜oes primitivas. 1 (int, float, string) 24/40
  • 28. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESCOPO E TEMPO DE VIDA Comportamento de func¸ ˜oes matem´aticas. Escopo das vari´aveis ´e est´atico. Seu resultado n˜ao deve ser afetado pelo contexto em que a func¸˜ao foi chamada. 25/40
  • 29. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ARRAYS Arrays foram substituidos por Listas. Avaliac¸˜ao preguic¸osa, evita c´alculos desnecess´arios e permite construir estruturas infinitas. 26/40
  • 30. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESTRUTURAS DE CONTROLE As estruturas condicionais se resumem em uma mescla do comportamento do switch-case com a avaliac¸˜ao de condic¸ ˜oes de guarda do if. Estruturas de repetic¸˜ao interativas deixaram de existir. Alteradores de fluxo (jumps e escapes) tamb´em ser˜ao eliminados. 27/40
  • 31. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESTRUTURAS DE CONTROLE 1 //Exemplo Imperativo 2 function ehPrimo(int n) : bool { 3 int i=2; 4 while(i*i){ 5 if(i%n==0) return false; 6 i++; 7 } 8 return true; 9 } 10 11 //Exemplo Funcional 12 function ehPrimo n : int -> bool 13 ehPrimoAux(2,n) 14 15 function ehPrimoAux i, n : int, int 16 {i*i>n, true} 17 {i%n == 0, false} 18 ehPrimoAux i+1, n 28/40
  • 32. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA LINGUAGEM L ´OGICA DIFERENC¸ AS MARCANTES DO PARADIGMA IMPERATIVO Trabalha com regras e fatos Vari´aveis n˜ao s˜ao blocos de mem´oria O programador se preocupa em descrever o problema, e n˜ao sua soluc¸˜ao Utiliza backtracking para tentar unificar as vari´aveis 29/40
  • 33. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA TIPOS PRIMITIVOS N˜ao haver´a ponteiros N˜ao existir˜ao blocos de mem´oria vis´ıveis ao programador unsigned e string ser˜ao substitu´ıdos por symbol 30/40
  • 34. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA TIPOS COMPOSTOS Usu´arios poder˜ao definir predicados compostos Exemplo: #predicado simples gosta(gabriel, lpcp). #predicado composto gosta(gabriel, disciplina(lpcp)). 31/40
  • 35. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESCOPO Fatos s˜ao vis´ıveis globalmente Vari´aveis s˜ao vis´ıveis apenas dentro da regra onde est˜ao instanciadas 32/40
  • 36. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA OPERADORES E EXPRESS ˜OES Operadores aritm´eticos e l´ogicos permanecem inalterados Excec¸˜ao: operador ‘=’ ´e utilizado para unificac¸˜ao, apenas Utiliza-se ‘is’ para atribuic¸˜ao Exemplo: tenta_unificar(X,Y) :- X = Y. atribuir(X, Y) :- X is Y + 3. 33/40
  • 37. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ARMAZENAMENTO DE VALORES Fatos s˜ao armazenados em modelo est´atico Vari´aveis s˜ao armazenadas em modelo dinˆamico em pilha Devido ao seu uso no backtracking, cujo comportamento ´e recursivo 34/40
  • 38. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ARRAYS Definidos como listas ligadas Representadas como [H|T] H ´e o primeiro elemento da lista e T seu restante (e.g.: [1, 2, 3] seria [1|[2, 3]]) Exemplos: somatorio([], 0). somatorio([H|T], X) :- somatorio(T, Y), X is H + Y. 35/40
  • 39. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA ESTRUTURAS DE CONTROLE N˜ao existir˜ao estruturas de controle e fluxo como if-else e while Para utilizar estes recursos, deve-se utilizar m´etodos l´ogicos e recurs˜ao Comando “!” (cut) utilizado para interromper o processo de resoluc¸˜ao e impedir lac¸os infinitos 36/40
  • 40. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA EXEMPLO DE PROGRAMA #numero de elementos de uma lista num_elements([], 0). num_elements([_|T], X) :- num_elements(T, Y), X is 1 + Y. 37/40
  • 41. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA EXEMPLO DE PROGRAMA # alguns fatos progenitor(joao, mario). progenitor(helena, carlos). progenitor(mario, carlos). sexo(jose, ’masculino’). sexo(joao, ’masculino’). sexo(maria, ’feminino’). sexo(ana, ’feminino’). 38/40
  • 42. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA EXEMPLO DE PROGRAMA # diversas relacoes de parentesco irma(X, Y) :- sexo(X, ’feminino’), progenitor(Z, X), progenitor(Z, Y). irmao(X, Y) :- sexo(X, ’masculino’), progenitor(Z, X),progenitor(Z, Y) mae(X, Y) :- sexo(X, ’feminino’), progenitor(X, Y). pai(X, Y) :- sexo(X, ’masculino’), progenitor(X, Y). avo(X, Y) :- sexo(X, ’masculino’), progenitor(X, Z), progenitor(Z, Y). tio(X, Y) :- irmao(X, Z), progenitor(Z, Y). descendente(X, Y) :- progenitor(Y, X). descendente(X, Y) :- progenitor(Y, Z), descendente(X, Z). 39/40
  • 43. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICA FIM D´uvidas? 40/40