Professional Documents
Culture Documents
Resolvendo problemas e
Linguagens de Programação
As Torres de Hanói
1999 REM procedure push(v)
2000 S(b) = v
2010 b = b + 1
2020 RETURN
2999 REM procedure pop()
3000 IF b = 0 THEN GOTO 3030 ELSE GOTO 3010
3010 b = b 1
3020 v = S(b)
3030 RETURN
3999 REM procedure movedisk(from, to)
4000 PRINT USING "move # > #"; f; t;
4010 PRINT ""
4020 RETURN
Linguagens de programação
● Paradigmas de programação
– Programação procedural ou estruturada: Evoluída da
programação linear, mas permite a divisão do código
em procedimentos, que são blocos de instruções.
● Exemplos: C e Pascal.
As Torres de Hanói em Pascal
(* The Towers Of Hanoi *)
(* Pascal *)
(* Copyright (C) 1998 Amit Singh. All Rights Reserved. *)
(* http://hanoi.kernelthread.com *)
(* *)
(* Tested under p2c and the GNU Pascal compiler *)
PROGRAM Hanoi(input, output);
VAR N:integer;
PROCEDURE dohanoi(N, Tfrom, Tto, Tusing : integer);
BEGIN
if N > 0 THEN
BEGIN
dohanoi(N1, Tfrom, Tusing, Tto);
writeln('move ', Tfrom:1, ' > ', Tto:1);
dohanoi(N1, Tusing, Tto, Tfrom);
END
END;
As Torres de Hanói em Pascal
BEGIN
write('N = ? ');
readln(N);
writeln;
dohanoi(N, 1, 3, 2)
END.
Linguagens de programação
● Paradigmas de programação
– Programação funcional: trata a programação como
uma avaliação de funções matemáticas, e que evita
estados ou dados mutáveis. Enfatiza a aplicação de
funções, em contraste com a programação imperativa,
que enfatiza mudanças no estado do programa.
● Exemplo principal: Haskell.
As Torres de Hanói em Haskell
The Towers Of Hanoi
Haskell
Copyright (C) 1998 Amit Singh. All Rights Reserved.
http://hanoi.kernelthread.com
dohanoi(0, _, _, _) = []
dohanoi(n, from, to, using) =
dohanoi(n 1, from, using, to) ++
[(from, to)] ++
dohanoi(n 1, using, to, from)
hanoi(n) = dohanoi(n, 1, 3, 2)
Linguagens de programação
● Paradigmas de programação
– Programação orientada a objetos: usa “objetos” e suas
interações para a construção das aplicações e
programas de computador. Não era muito popular até
a década de 90. Hoje, muitas linguagens modernas
suportam orientação a objetos (OO).
● Exemplos: Smalltalk, C++, Java.
As Torres de Hanói em Java
/*
* The Towers Of Hanoi
* Java
* Copyright (C) 1999 Amit Singh. All Rights Reserved.
* http://hanoi.kernelthread.com
*
* Tested under Linux jdk1.1.?
*/
class hanoi
{
public static void main (String args[])
{
if (args.length != 1) {
System.err.println(
"error: a single integer argument needed");
System.exit(1);
}
Integer N = new Integer(args[0]);
H_dohanoi(N.intValue(), 3, 1, 2);
As Torres de Hanói em Java
System.exit(0);
}
static void H_dohanoi(int n, int t, int f, int u)
{
if (n > 0) {
H_dohanoi(n1, u, f, t);
H_moveit(f, t);
H_dohanoi(n1, t, u, f);
}
}
static void H_moveit(int from, int to)
{
System.out.print("move ");
System.out.print(from);
System.out.print(" > ");
System.out.println(to);
}
}
Linguagens de Programação
● Tradução de código
– Como é possível haver tantas linguagens de
programação? Como podem se criar novas linguagens
sem que se alterem as máquinas (os computadores)?
Linguagens de Programação
● Tradução de código
– Como é possível haver tantas linguagens de
programação? Como podem se criar novas linguagens
sem que se alterem as máquinas (os computadores)?
● O computador entende apenas uma única linguagem, que
depende de seu micro-processador: a chamada linguagem
de máquina, classificada como de “baixo nível”.
– Todo computador possui um conjunto de instruções que seu
processador é capaz de executar – chamadas código de máquina –
que são representadas por um conjunto de bits, normalmente
limitados ao número de bits do registrador principal do
processador, limitação que se denomina palavra do computador.
Linguagens de Programação
● Tradução de código
– Como é possível haver tantas linguagens de
programação? Como podem se criar novas linguagens
sem que se alterem as máquinas (os computadores)?
● As linguagens de programação classificadas como de “alto
nível” - assim ditas por serem escritas com legibilidade
próxima à da linguagem natural e abstraírem características
do hardware – são, portanto, traduzidas para a linguagem
de máquina antes da execução do programa nelas escrito.
Linguagens de Programação
● Tradução de código
– Há duas formas básicas de tradução:
● Compilação: o programa é escrito na linguagem de alto
nível (o chamado código-fonte) e depois de pronto é
traduzido para a linguagem de máquina por um outro
programa chamado compilador, gerando um programa
executável, que pode então ser usado.
– Exemplos: C, C++, Pascal.
Linguagens de Programação
● Tradução de código
– Há duas formas básicas de tradução:
● Interpretação: o programa é escrito na linguagem de alto
nível (o chamado código-fonte) e é usado nesta forma. A
tradução ocorre durante a execução do programa, pelo
chamado interpretador, necessário, portanto, para o uso
do programa.
– Exemplos: BASIC, JavaScript.
Linguagens de Programação
● Tradução de código
– Algumas linguagens fazem uso das duas estratégias,
compilando para uma linguagem intermediária – o
bytecode – que, para ser usado, deverá ser
interpretado. Neste caso, o interpretador é chamado de
máquina virtual.
● Exemplos: Java e linguagens .NET.
Linguagens de Programação
● A pseudolinguagem Portugol
– Devido à grande quantidade e variedade de
linguagens de programação existentes (milhares de
linguagens e dialetos existem hoje e novas são criadas
a cada ano), e à existência de variadas especificidades
em cada linguagem, o ensino de lógica de
programação normalmente faz uso de uma
pseudolinguagem (ou linguagem algorítmica),
baseada na língua portuguesa, chamada Portugol.
Linguagens de Programação
● A pseudolinguagem Portugol
– Entretanto, pela dificuldade de se testarem os
algoritmos feitos em Portugol, surgiu a necessidade
de se implementarem interpretadores da linguagem,
dos quais citam-se dois:
● O PORTUGOL, desenvolvido por pesquisadores do
Instituto Politécnico de Tomar, da Escola Superior de
Tecnologia de Tomar, em Portugal.
– Sítio web: http://orion.ipt.pt/~manso/Portugol/
● O G-Portugol, desenvolvido pelo brasileiro Thiago Silva.
– Sítio web: http://gpt.berlios.de/site/
Resumo
● A solução de um problema passa por duas fases:
a análise e a síntese.
● Através da modelagem, formalizam-se as
representações abstratas do problema e de sua
solução.
● O dado é um valor representado no computador,
enquanto a informação é o significado atribuído a
este dado.
Resumo
● Linguagem de programação é uma linguagem
artificial formalmente definida que permite o
controle de uma máquina, especificamente, um
computador.
● Entre os principais paradigmas de programação,
estão: linear, procedural/estruturada, orientada a
objetos e funcional.
Resumo
● A tradução do código de alto-nível de um
programa para o código de máquina se dá de duas
formas possíveis: por compilação ou por
interpretação; havendo hoje uma tendência para o
uso das duas estratégias, com uso de bytecodes e
máquinas virtuais.
● O Portugol é uma pseudolinguagem, ou
linguagem algorítmica, utilizado para o ensino de
programação que favorece a língua portuguesa.
Bibliografia
(1) Wikipedia. Em: http://en.wikipedia.org
(2) SOUZA, Marco Antônio Furlan de et. al.
Algoritmo e Lógica de Programação.
São Paulo: Thomson Learning, 2005.
(3) PUGA, Sandra. Lógica de programação e
estruturas de dados com aplicações em Java.
São Paulo: Pearson Prentice-Hall, 2003.
(4) Wikipédia. Em: http://pt.wikipedia.org
Bibliografia
(5)GUIMARÃES / LAGES. Algoritmos e
Estruturas de Dados. 13ª Tiragem.
Rio de Janeiro: LTC, 1985.
(6) FORBELLONE, André Luiz /
EBERSPÄCHER, Henri Frederico. Lógica de
Programação. 3ª Edição.
São Paulo: Pearson Prentice-Hall, 2005.