INF1031 – Introdu¸
c˜
ao a Computa¸
c˜
ao
Noemi Rodriguez
noemi@inf.puc-rio.br
Departamento de Inform´atica, PUC-Rio
IDE para Lua
Zero Brane Studio: Configura¸
c˜
oes b´
asicas
I
Escolha do diret´
orio de trabalho
I Project → Project Directory → Choose
I Escolha a pasta onde ser˜ao salvos os programas desenvolvidos
I
Escolha da l´ıngua da interface
I Edit → Preferences → Settings: System ou Settings: User
I Escolha da l´ıngua:
language="en"(inglˆes)
IDE para Lua
Zero Brane Studio: Exemplo simples
I
Na ´
arvore `
a esquerda, clique com bot˜
ao da direita e escolha
Novo Arquivo (ou New File)
I Crie arquivo “teste.lua”: programa para imprimir mensagem
I Edite o c´odigo: print("Oi, mundo!")
I Execute (F6) e verifique sa´ıda na ´area de console
Executar Criar arquivo
Modelo de Computador
Canal de comunicação (BUS)
CPU Unidade central de processamento Memória principal Memória secundária (disco) Dispositivos de entrada e saída
I Canal de comunica¸c˜ao: meio de transferˆencia de dados
I CPU: “c´erebro” do computador, respons´avel por controlar as opera¸c˜oes
I Mem´oria principal: mem´oria efˆemera de acesso randˆomico e r´apido
Programa de computador
Programa
I
Sequˆ
encia de instru¸
c˜
oes executadas pelo computador
I Computador executa as instru¸c˜oes codificadas em sua
linguagem de m´aquina
Linguagens de Programa¸
c˜
ao
I
Escrita de c´
odigo em uma linguagem mais amig´
avel
I C´odigo da linguagem convertido para poder ser executado pelo
computador
I
Exemplos de linguagens de programa¸
c˜
ao
Programa de computador
Programa
I
Sequˆ
encia de instru¸
c˜
oes executadas pelo computador
I Computador executa as instru¸c˜oes codificadas em sua
linguagem de m´aquina
Linguagens de Programa¸
c˜
ao
I
Escrita de c´
odigo em uma linguagem mais amig´
avel
I C´odigo da linguagem convertido para poder ser executado pelo
computador
I
Exemplos de linguagens de programa¸
c˜
ao
Aplica¸c˜
ao
Exemplo: convers˜
ao de graus Celsius para Fahrenheit
f = 1.8c + 32
I
Objetivo: capturar um valor fornecido via teclado que
representa uma temperatura em graus Celsius e exibir a
temperatura correspondente em graus Fahrenheit.
Convers˜
ao de temperatura: Solu¸c˜
ao em Lua
- - l ^e v a l o r n u m ´e r i c o ; a r m a z e n a e m " c e l " c e l = i o.r e a d(" * n ") - - c o n v e r t e e a r m a z e n a e m " f a h r " f a h r = 1 . 8 * c e l + 3 2 - - i m p r i m e o v a l o r a r m a z e n a d o e m " f a h r " p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )I
escreve programa em arquivo
I
executa
1 0 5 0
I
Valida resultado e reedita, se necess´
ario
I
programa dispon´ıvel em
http://www.inf.puc-rio.br/~noemi/inf1031/code/aula01/ celsiusfahr.lua
Convers˜
ao de temperatura: Solu¸c˜
ao em Lua
- - l ^e v a l o r n u m ´e r i c o ; a r m a z e n a e m " c e l " c e l = i o.r e a d(" * n ") - - c o n v e r t e e a r m a z e n a e m " f a h r " f a h r = 1 . 8 * c e l + 3 2 - - i m p r i m e o v a l o r a r m a z e n a d o e m " f a h r " p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )I
escreve programa em arquivo
I
executa
1 0 5 0
I
Valida resultado e reedita, se necess´
ario
I
programa dispon´ıvel em
http://www.inf.puc-rio.br/~noemi/inf1031/code/aula01/ celsiusfahr.lua
Convers˜
ao de temperatura: Solu¸c˜
ao em Lua
- - l ^e v a l o r n u m ´e r i c o ; a r m a z e n a e m " c e l " c e l = i o.r e a d(" * n ") - - c o n v e r t e e a r m a z e n a e m " f a h r " f a h r = 1 . 8 * c e l + 3 2 - - i m p r i m e o v a l o r a r m a z e n a d o e m " f a h r " p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )I
escreve programa em arquivo
I
executa
1 0
5 0
I
Valida resultado e reedita, se necess´
ario
I
programa dispon´ıvel em
http://www.inf.puc-rio.br/~noemi/inf1031/code/aula01/ celsiusfahr.lua
Convers˜
ao de temperatura: Solu¸c˜
ao em Lua
- - l ^e v a l o r n u m ´e r i c o ; a r m a z e n a e m " c e l " c e l = i o.r e a d(" * n ") - - c o n v e r t e e a r m a z e n a e m " f a h r " f a h r = 1 . 8 * c e l + 3 2 - - i m p r i m e o v a l o r a r m a z e n a d o e m " f a h r " p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )I
escreve programa em arquivo
I
executa
1 0 5 0
I
Valida resultado e reedita, se necess´
ario
I
programa dispon´ıvel em
http://www.inf.puc-rio.br/~noemi/inf1031/code/aula01/ celsiusfahr.lua
Linguagem Lua
Melhorando a interface do programa com o usu´
ario
Exemplo: convers˜
ao de temperatura (f = 1.8c + 32)
I
C´
odigo reescrito com mensagens de instru¸
c˜
ao
p r i n t(" E n t r e c o m o v a l o r d a t e m p e r a t u r a e m C e l s i u s : ") c e l = i o.r e a d(" * n ") f a h r = 1 . 8 * c e l + 3 2 p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )
I
Executa
E n t r e c o m o v a l o r d a t e m p e r a t u r a e m C e l s i u s : 1 0 V a l o r e m F a h r e n h e i t : 5 0Linguagem Lua
Melhorando a interface do programa com o usu´
ario
Exemplo: convers˜
ao de temperatura (f = 1.8c + 32)
I
C´
odigo reescrito com mensagens de instru¸
c˜
ao
p r i n t(" E n t r e c o m o v a l o r d a t e m p e r a t u r a e m C e l s i u s : ") c e l = i o.r e a d(" * n ") f a h r = 1 . 8 * c e l + 3 2 p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )
I
Executa
E n t r e c o m o v a l o r d a t e m p e r a t u r a e m C e l s i u s : 1 0 V a l o r e m F a h r e n h e i t : 5 0Linguagem Lua
Melhorando a interface do programa com o usu´
ario
Exemplo: convers˜
ao de temperatura (f = 1.8c + 32)
I
C´
odigo reescrito com mensagens de instru¸
c˜
ao
p r i n t(" E n t r e c o m o v a l o r d a t e m p e r a t u r a e m C e l s i u s : ") c e l = i o.r e a d(" * n ") f a h r = 1 . 8 * c e l + 3 2 p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )
I
Executa
E n t r e c o m o v a l o r d a t e m p e r a t u r a e m C e l s i u s : 1 0 V a l o r e m F a h r e n h e i t : 5 0Linguagem Lua
Melhorando a interface do programa com o usu´
ario
Exemplo: convers˜
ao de temperatura (f = 1.8c + 32)
I
C´
odigo reescrito com mensagens de instru¸
c˜
ao
p r i n t(" E n t r e c o m o v a l o r d a t e m p e r a t u r a e m C e l s i u s : ") c e l = i o.r e a d(" * n ") f a h r = 1 . 8 * c e l + 3 2 p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )
I
Executa
E n t r e c o m o v a l o r d a t e m p e r a t u r a e m C e l s i u s : 1 0 V a l o r e m F a h r e n h e i t : 5 0Linguagem Lua
www.lua.org
I
C´
odigo fonte
I
Documenta¸
c˜
ao (manual)
Bibliografia
Ciclo de desenvolvimento
Codifica¸
c˜
ao, execu¸
c˜
ao, verifica¸
c˜
ao
Programa Resultado
Executa Codifica
Verifica
Re-codifica
I
Ciclo varia conforme tipo de linguagem
I Linguagens compiladas (ex. C, C++)
Ciclo de desenvolvimento
Codifica¸
c˜
ao, execu¸
c˜
ao, verifica¸
c˜
ao
Programa Resultado
Executa Codifica
Verifica
Re-codifica
I
Ciclo varia conforme tipo de linguagem
I Linguagens compiladas (ex. C, C++)
Ciclo de desenvolvimento
Linguagens Compiladas (ex: C, C++)
I
Edi¸c˜
ao de c´
odigo: uso de editor de texto para criar c´
odigo
I
Compila¸c˜
ao: uso de compilador para gerar execut´
avel
I
Execu¸c˜
ao: uso do execut´
avel gerado
Código fonte
(.c) Compilador Código de máquina (Executável) Editor de texto
Ciclo de desenvolvimento
Linguagens Interpretadas ou H´ıbridas
I
Edi¸c˜
ao de c´
odigo: uso de editor de texto para criar c´
odigo
I
Execu¸c˜
ao: uso do interpretador da linguagem para executar
I Linguagens h´ıbridas compilam para m´aquina virtual e
executam (ex. Python, Lua)
Código fonte Interpretador Editor de texto Resultado Código fonte Editor de texto Resultado Código Máquina Virtual Compilador Interpretador
Ciclo de desenvolvimento
Linguagens Interpretadas ou H´ıbridas
I
Edi¸c˜
ao de c´
odigo: uso de editor de texto para criar c´
odigo
I
Execu¸c˜
ao: uso do interpretador da linguagem para executar
I Linguagens h´ıbridas compilam para m´aquina virtual e
executam (ex. Python, Lua)
Código fonte Interpretador Editor de texto
Resultado
Desenvolvimento e execu¸c˜
ao de programas
Erros na execu¸
c˜
ao de programas
I
Erros de compila¸
c˜
ao
I Erro de sintaxe: c´odigo n˜ao respeita linguagem
I
Erros de execu¸
c˜
ao
I Erro de semˆantica: valor inapropriado
Erros no desenvolvimento de programas
Exemplos de erros
I
Erro de sintaxe
p r i n t(" E n t r e c o m v a l o r C e l s i u s : ") c e l = i o.r e a d(" * n ") f a h r = 1 . 8 c e l + 3 2 p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )[~/Documents/IntroProg/codes] lua converte.lua lua: converte.lua:3: ’=’ expected near ’+’
Erros no desenvolvimento de programas
Exemplos de erros
I
Erro de sintaxe
p r i n t(" E n t r e c o m v a l o r C e l s i u s : ") c e l = i o.r e a d(" * n ") f a h r = 1 . 8 c e l + 3 2 p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )[~/Documents/IntroProg/codes] lua converte.lua lua: converte.lua:3: ’=’ expected near ’+’
Erros no desenvolvimento de programas
Exemplos de erros
I
Erro de semˆ
antica
p r i n t(" E n t r e c o m v a l o r C e l s i u s : ") c e l = r e a d(" * n ")
f a h r = 1 . 8 * c e l + 3 2
p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )
[~/Documents/IntroProg/codes] lua converte.lua Entre com valor Celsius:
lua: converte.lua:2: attempt to call global ’read’ (a nil value) stack traceback:
converte.lua:2: in main chunk [C]: in ?
Erros no desenvolvimento de programas
Exemplos de erros
I
Erro de semˆ
antica
p r i n t(" E n t r e c o m v a l o r C e l s i u s : ") c e l = r e a d(" * n ")
f a h r = 1 . 8 * c e l + 3 2
p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )
[~/Documents/IntroProg/codes] lua converte.lua Entre com valor Celsius:
lua: converte.lua:2: attempt to call global ’read’ (a nil value) stack traceback:
converte.lua:2: in main chunk [C]: in ?
Erros no desenvolvimento de programas
Exemplos de erros
I
Outro erro de semˆ
antica
p r i n t(" E n t r e c o m v a l o r C e l s i u s : ") c e l = i o.r e a d(" * n ")
f a h r = 1 . 8 * c + 3 2
p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )
Entre com o valor celsius: 13
/Applications/ZeroBraneStudio.app/Contents/ .../aula1-zb/celsiosfahr:3: attempt to perform arithmetic on global ’c’ (a nil value)stack traceback:
.../aula1-zb/celsiosfahr:3: in main chunk [C]: at 0x00001c80
Erros no desenvolvimento de programas
Exemplos de erros
I
Outro erro de semˆ
antica
p r i n t(" E n t r e c o m v a l o r C e l s i u s : ") c e l = i o.r e a d(" * n ")
f a h r = 1 . 8 * c + 3 2
p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )
Entre com o valor celsius: 13
/Applications/ZeroBraneStudio.app/Contents/ .../aula1-zb/celsiosfahr:3: attempt to perform arithmetic on global ’c’ (a nil value)stack traceback:
.../aula1-zb/celsiosfahr:3: in main chunk [C]: at 0x00001c80
Erros no desenvolvimento de programas
Exemplos de erros
I
Erro de l´
ogica
p r i n t(" E n t r e c o m v a l o r C e l s i u s : ") c e l = i o.r e a d(" * n ") f a h r = 1 . 8 * c e l - 3 2 p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )[~/Documents/IntroProg/codes] lua converte.lua Entre com valor Celsius:
10
Erros no desenvolvimento de programas
Exemplos de erros
I
Erro de l´
ogica
p r i n t(" E n t r e c o m v a l o r C e l s i u s : ") c e l = i o.r e a d(" * n ") f a h r = 1 . 8 * c e l - 3 2 p r i n t(" V a l o r e m F a h r e n h e i t : ", f a h r )[~/Documents/IntroProg/codes] lua converte.lua Entre com valor Celsius:
10
Linguagem Lua: conceitos b´
asicos
Programa para convers˜
ao de temperatura
c e l = i o.r e a d(" * n ")
f a h r = 1 . 8 * c + 3 2
p r i n t( f a h r )
Vari´
avel
I
Representa um espa¸
co na mem´
oria do computador
I No programa de convers˜ao,celefahr s˜ao vari´aveis
I
Identificada por um nome
I Come¸ca com letra (min´uscula ou mai´uscula) ou underscore,
seguido de 0 ou mais letras/d´ıgitos ou underscores
I N˜ao podemos usar palavras reservadas da linguagem
a n d b r e a k d o e l s e e l s e i f e n d
f a l s e f o r f u n c t i o n g o t o i f i n
l o c a l n i l n o t o r r e p e a t r e t u r n
t h e n t r u e u n t i l w h i l e
Linguagem Lua: conceitos b´
asicos
Programa para convers˜
ao de temperatura
c e l = i o.r e a d(" * n ")
f a h r = 1 . 8 * c + 3 2
p r i n t( f a h r )
Vari´
avel
I
Representa um espa¸
co na mem´
oria do computador
I No programa de convers˜ao,celefahr s˜ao vari´aveis
I
Identificada por um nome
I Come¸ca com letra (min´uscula ou mai´uscula) ou underscore,
seguido de 0 ou mais letras/d´ıgitos ou underscores
I N˜ao podemos usar palavras reservadas da linguagem
a n d b r e a k d o e l s e e l s e i f e n d
f a l s e f o r f u n c t i o n g o t o i f i n
l o c a l n i l n o t o r r e p e a t r e t u r n
t h e n t r u e u n t i l w h i l e
Linguagem Lua: conceitos b´
asicos
Programa para convers˜
ao de temperatura
c e l = i o.r e a d(" * n ")
f a h r = 1 . 8 * c + 3 2
p r i n t( f a h r )
Vari´
avel
I
Representa um espa¸
co na mem´
oria do computador
I No programa de convers˜ao,celefahr s˜ao vari´aveis
I
Identificada por um nome
I Come¸ca com letra (min´uscula ou mai´uscula) ou underscore,
seguido de 0 ou mais letras/d´ıgitos ou underscores
I N˜ao podemos usar palavras reservadas da linguagem
a n d b r e a k d o e l s e e l s e i f e n d
f a l s e f o r f u n c t i o n g o t o i f i n
l o c a l n i l n o t o r r e p e a t r e t u r n
t h e n t r u e u n t i l w h i l e
Linguagem Lua: conceitos b´
asicos
Programa para convers˜
ao de temperatura
c e l = i o.r e a d(" * n ")
f a h r = 1 . 8 * c + 3 2
p r i n t( f a h r )
Vari´
avel
I
Representa um espa¸
co na mem´
oria do computador
I No programa de convers˜ao,celefahr s˜ao vari´aveis
I
Identificada por um nome
I Come¸ca com letra (min´uscula ou mai´uscula) ou underscore,
seguido de 0 ou mais letras/d´ıgitos ou underscores
I N˜ao podemos usar palavras reservadas da linguagem
a n d b r e a k d o e l s e e l s e i f e n d
f a l s e f o r f u n c t i o n g o t o i f i n
l o c a l n i l n o t o r r e p e a t r e t u r n
t h e n t r u e u n t i l w h i l e
Linguagem Lua: conceitos b´
asicos
Valores
I
Vari´
aveis armazenam valores
I
Valores podem ser de diferentes tipos
I
Os tipos b´
asicos s˜
ao:
I number: valor num´erico
I string: valor cadeia de caracteres (texto)
I function: valor de uma fun¸c˜ao
I nil: representa ausˆencia de valor
I boolean: valor falso (false) ou verdadeiro (true)
Linguagem Lua: conceitos b´
asicos
Valores
I
Vari´
aveis armazenam valores
I
Valores podem ser de diferentes tipos
I
Os tipos b´
asicos s˜
ao:
I number: valor num´erico
I string: valor cadeia de caracteres (texto)
I function: valor de uma fun¸c˜ao
I nil: representa ausˆencia de valor
I boolean: valor falso (false) ou verdadeiro (true)
Linguagem Lua: conceitos b´
asicos
Vari´
aveis e valores
I
Sinal de igualdade significa atribui¸
c˜
ao
a = 2 3 - - o v a l o r 2 3 ´e a t r i b u ´ı d o `a v a r i ´a v e l a
I
Vari´
aveis podem armazenar valores de qualquer tipo
p r i n t(t y p e( a ) ) - - > n i l a = 2 3 p r i n t(t y p e( a ) ) - - > n u m b e r a = " a l o " p r i n t(t y p e( a ) ) - - > s t r i n g a = p r i n t p r i n t(t y p e( a ) ) - - > f u n c t i o n
Linguagem Lua: conceitos b´
asicos
Vari´
aveis e valores
I
Sinal de igualdade significa atribui¸
c˜
ao
a = 2 3 - - o v a l o r 2 3 ´e a t r i b u ´ı d o `a v a r i ´a v e l a
I
Vari´
aveis podem armazenar valores de qualquer tipo
p r i n t(t y p e( a ) ) - - > n i l a = 2 3 p r i n t(t y p e( a ) ) - - > n u m b e r a = " a l o " p r i n t(t y p e( a ) ) - - > s t r i n g a = p r i n t p r i n t(t y p e( a ) ) - - > f u n c t i o n
Linguagem Lua: conceitos b´
asicos
Express˜
ao
I
Combina¸
c˜
ao de vari´
aveis, constantes e operadores
que pode ser avaliada em termos computacionais
I
Exemplo:
f a h r = 1 . 8 * c e l + 3 2
I O resultado da avalia¸c˜ao da express˜ao ´e armazenado em fahr
I Naturalmente, o valor deceldeve estar definido
I E deve ser num´erico, pois o operador de multiplica¸c˜ao s´o se aplica a valores num´ericos
Linguagem Lua: conceitos b´
asicos
Express˜
ao
I
Combina¸
c˜
ao de vari´
aveis, constantes e operadores
que pode ser avaliada em termos computacionais
I
Exemplo:
f a h r = 1 . 8 * c e l + 3 2
I O resultado da avalia¸c˜ao da express˜ao ´e armazenado emfahr
I Naturalmente, o valor deceldeve estar definido
I E deve ser num´erico, pois o operador de multiplica¸c˜ao s´o se aplica a valores num´ericos
Linguagem Lua: conceitos b´
asicos
operadores l´
ogicos
I
mas existem tamb´
em outros tipos de express˜
ao
I
Exemplo:
f a h r = 1 . 8 * c e l + 3 2
c o m f e b r e = f a h r >= 9 8 . 6
I O resultado da avalia¸c˜ao da express˜ao ´e armazenado em comfebre
Linguagem Lua: conceitos b´
asicos
operadores l´
ogicos
I
mas existem tamb´
em outros tipos de express˜
ao
I
Exemplo:
f a h r = 1 . 8 * c e l + 3 2
c o m f e b r e = f a h r >= 9 8 . 6
I O resultado da avalia¸c˜ao da express˜ao ´e armazenado em comfebre
Exerc´ıcios
1. Escreva um programa que fa¸ca a convers˜ao inversa: converta graus
expressos em Fahrenheit para graus Celsius.
2. Escreva um programa que lˆe um nome (use io.read("*l")) e
escreve “Boa tarde, fulano”. (para concatenar dois textos utilize o operador “..”)
3. (fazer para quarta) Escreva um programa que calcule o pre¸co da
gasolina por litro no Brasil se aqui fosse adotado o mesmo pre¸co
cobrado nos Estados Unidos. O programa deve capturar dois valores fornecidos via teclado: o pre¸co do gal˜ao de gasolina praticado nos Estados Unidos (em d´olares) e a taxa de convers˜ao do d´olar para o real. O programa ent˜ao deve exibir o pre¸co do litro de gasolina
Exerc´ıcios
1. Escreva um programa que fa¸ca a convers˜ao inversa: converta graus
expressos em Fahrenheit para graus Celsius.
2. Escreva um programa que lˆe um nome (use io.read("*l")) e
escreve “Boa tarde, fulano”. (para concatenar dois textos utilize o operador “..”)
3. (fazer para quarta) Escreva um programa que calcule o pre¸co da
gasolina por litro no Brasil se aqui fosse adotado o mesmo pre¸co
cobrado nos Estados Unidos. O programa deve capturar dois valores fornecidos via teclado: o pre¸co do gal˜ao de gasolina praticado nos Estados Unidos (em d´olares) e a taxa de convers˜ao do d´olar para o real. O programa ent˜ao deve exibir o pre¸co do litro de gasolina
Exerc´ıcios
1. Escreva um programa que fa¸ca a convers˜ao inversa: converta graus
expressos em Fahrenheit para graus Celsius.
2. Escreva um programa que lˆe um nome (use io.read("*l")) e
escreve “Boa tarde, fulano”. (para concatenar dois textos utilize o operador “..”)
3. (fazer para quarta) Escreva um programa que calcule o pre¸co da
gasolina por litro no Brasil se aqui fosse adotado o mesmo pre¸co
cobrado nos Estados Unidos. O programa deve capturar dois valores fornecidos via teclado: o pre¸co do gal˜ao de gasolina praticado nos Estados Unidos (em d´olares) e a taxa de convers˜ao do d´olar para o real. O programa ent˜ao deve exibir o pre¸co do litro de gasolina