SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
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

Mais procurados (20)

Programação em C
Programação em CProgramação em C
Programação em C
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Compiladores 5
Compiladores 5Compiladores 5
Compiladores 5
 
Semântica Formal
Semântica FormalSemântica Formal
Semântica Formal
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Compiladores 3
Compiladores 3Compiladores 3
Compiladores 3
 
Aula6 - Linguagem C
Aula6 - Linguagem CAula6 - Linguagem C
Aula6 - Linguagem C
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Linguagem c parte 2
Linguagem c parte 2Linguagem c parte 2
Linguagem c parte 2
 
Linguagem C - Controle de Programa
Linguagem C - Controle de ProgramaLinguagem C - Controle de Programa
Linguagem C - Controle de Programa
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig Latin
 
Funções
FunçõesFunções
Funções
 
A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação c
 
Compiladores 6
Compiladores 6Compiladores 6
Compiladores 6
 
Apostila c++
Apostila c++Apostila c++
Apostila c++
 
Revisão sobre ponteiros em C
Revisão sobre ponteiros em CRevisão sobre ponteiros em C
Revisão sobre ponteiros em C
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Java
JavaJava
Java
 

Destaque

ความต้องการของ ร.ร.ตชด.ในพื้นที่จังหวัดน่าน และพะเยา
ความต้องการของ ร.ร.ตชด.ในพื้นที่จังหวัดน่าน และพะเยา ความต้องการของ ร.ร.ตชด.ในพื้นที่จังหวัดน่าน และพะเยา
ความต้องการของ ร.ร.ตชด.ในพื้นที่จังหวัดน่าน และพะเยา ลุงเบิ้ม สู้โว้ย
 
Creiamo il nostro paesaggio 5 B 5 C-Volta
Creiamo il nostro paesaggio 5 B 5 C-VoltaCreiamo il nostro paesaggio 5 B 5 C-Volta
Creiamo il nostro paesaggio 5 B 5 C-Voltaelenagarti
 
Laporan kerja praktek Lukman Arief
Laporan kerja praktek Lukman AriefLaporan kerja praktek Lukman Arief
Laporan kerja praktek Lukman AriefLukman Arief
 
Política industrial i econòmica
Política industrial i econòmicaPolítica industrial i econòmica
Política industrial i econòmicabenetferru
 
Special Starbucks Stores!
Special Starbucks Stores!Special Starbucks Stores!
Special Starbucks Stores!Ádám Juhász
 
Geetanjali sharma brochure portfolio
Geetanjali sharma brochure portfolioGeetanjali sharma brochure portfolio
Geetanjali sharma brochure portfoliodiptirathod
 
Nuevo 20 junio prezi jessica.
Nuevo 20 junio prezi jessica.Nuevo 20 junio prezi jessica.
Nuevo 20 junio prezi jessica.UNEMI
 
ความต้องการ ของ ร.ร.ตชด.ในพื้นที่ จ.เชียงราย
ความต้องการ ของ ร.ร.ตชด.ในพื้นที่ จ.เชียงรายความต้องการ ของ ร.ร.ตชด.ในพื้นที่ จ.เชียงราย
ความต้องการ ของ ร.ร.ตชด.ในพื้นที่ จ.เชียงรายลุงเบิ้ม สู้โว้ย
 
Nuestras Raíces. EBM-Grundtvig
Nuestras Raíces. EBM-GrundtvigNuestras Raíces. EBM-Grundtvig
Nuestras Raíces. EBM-GrundtvigFeCEAV
 
Family Based Learning and Community Based Education
Family Based Learning and Community Based EducationFamily Based Learning and Community Based Education
Family Based Learning and Community Based EducationArifah Handayani
 
Presentación de fiestas infantiles diapos
Presentación de fiestas infantiles diaposPresentación de fiestas infantiles diapos
Presentación de fiestas infantiles diaposcarolina.cor
 
Un dia estrany
Un dia estranyUn dia estrany
Un dia estranycinqueb25
 
The Watertight Marketing Framework
The Watertight Marketing FrameworkThe Watertight Marketing Framework
The Watertight Marketing FrameworkBryony Thomas
 
Content for every step of a sale
Content for every step of a saleContent for every step of a sale
Content for every step of a saleBryony Thomas
 

Destaque (20)

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

Semelhante a Linguagens de Programação C

Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxMarceloRosenbrock1
 
Tcc ritzmann,m.r. robotec
Tcc ritzmann,m.r. robotecTcc ritzmann,m.r. robotec
Tcc ritzmann,m.r. robotecMagno Ritzmann
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosRegis Magalhães
 
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxAula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxaronoliveira3
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação12anogolega
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçaossuserc6132d
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosDanilo Braga
 
Plsql - Conceitos Básicos
Plsql - Conceitos BásicosPlsql - Conceitos Básicos
Plsql - Conceitos BásicosDanilo Braga
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Flávio Ribeiro
 
Apresentação curso pic básico fbs eletrônica
Apresentação   curso pic básico fbs eletrônicaApresentação   curso pic básico fbs eletrônica
Apresentação curso pic básico fbs eletrônicaFabio Souza
 
095 A 134 Material Auxiliar Para Curso AvançAdo I Msp430
095 A 134   Material Auxiliar Para Curso AvançAdo I Msp430095 A 134   Material Auxiliar Para Curso AvançAdo I Msp430
095 A 134 Material Auxiliar Para Curso AvançAdo I Msp430Texas Instruments
 
Análise de Pontos de Função
Análise de Pontos de FunçãoAnálise de Pontos de Função
Análise de Pontos de FunçãoCristhiano Garcia
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CJoberthSilva
 

Semelhante a Linguagens de Programação C (20)

Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
 
Tcc ritzmann,m.r. robotec
Tcc ritzmann,m.r. robotecTcc ritzmann,m.r. robotec
Tcc ritzmann,m.r. robotec
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros Passos
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Linguagem C 06 Funcoes
Linguagem C 06 FuncoesLinguagem C 06 Funcoes
Linguagem C 06 Funcoes
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxAula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação
 
Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
AULA-02.pdf
AULA-02.pdfAULA-02.pdf
AULA-02.pdf
 
Aula 3
Aula 3Aula 3
Aula 3
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos Básicos
 
Plsql - Conceitos Básicos
Plsql - Conceitos BásicosPlsql - Conceitos Básicos
Plsql - Conceitos Básicos
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 
Apresentação curso pic básico fbs eletrônica
Apresentação   curso pic básico fbs eletrônicaApresentação   curso pic básico fbs eletrônica
Apresentação curso pic básico fbs eletrônica
 
095 A 134 Material Auxiliar Para Curso AvançAdo I Msp430
095 A 134   Material Auxiliar Para Curso AvançAdo I Msp430095 A 134   Material Auxiliar Para Curso AvançAdo I Msp430
095 A 134 Material Auxiliar Para Curso AvançAdo I Msp430
 
Análise de Pontos de Função
Análise de Pontos de FunçãoAnálise de Pontos de Função
Análise de Pontos de Função
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 

Linguagens de Programação C

  • 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