Fundamentos da Programação · •Linguagem assembly: semelhante à linguagem máquina mas usa...
Transcript of Fundamentos da Programação · •Linguagem assembly: semelhante à linguagem máquina mas usa...
Fundamentos da Programação
João Pavão Martins
Objetivos• Primeiro contacto dos alunos com a atividade de programação
• Apresentar conceitos fundamentais relativos à atividade de programação• Utilização de uma linguagem de programação de alto nível, o Python
• Linguagem simples• A 3ª linguagem mais popular do mundo (2020)• Usada por inúmeras organizações
• Google, Yahoo!, YouTube, Facebook, Walt Disney Feature Animation, NASA
Aulas• Teóricas: Transmitidas por videoconferência• Práticas: Presenciais e por videoconferência
• Semanalmente um dos turnos (A ou B) tem aula presencial e o outro assiste à aula por videoconferência
• Primeira hora: clarificação de dúvidas e alguns exemplos• Última meia hora: exercício realizado individualmente para avaliação• Apenas o turno presencial tem avaliação que conta para a nota final
• A avaliação incide sobre a matéria dada nas aulas teóricas da semana anterior
Todos os alunos devem realizar os exercícios na página do Fénix correspondentes à matéria para a aula prática
BibliografiaMartins J.P., Programação em Python: Introdução à Programação Utilizando Múltiplos Paradigmas, Lisboa: IST Press, 2019
AvaliaçãoDois componentes de avaliação• Contínua
• Avaliação nas aulas práticas: exercícios realizados nas aulas práticas presenciais
• Avaliação por projeto: dois projetos individuais de programação (média ≥ 9,5)
• Um exame final sobre toda a matéria (nota ≥ 9,5)
Todas as componentes da avaliação têm de ser realizadas no mesmo semestre, não se guardando notas de um semestre para o outro
Dúvidas: Por videoconferência com marcação por e-mail
Nota final• T - média aritmética dos n-1 melhores trabalhos das aulas práticas presenciais
(sendo n o número de avaliações nas aulas práticas)
• P - média aritmética das duas notas do projeto
• E - nota do exame
A nota final é o maior dos seguintes valores
0,2 x T + 0,3 x P + 0,5 x E
0,3 x P + 0,7 x E
Computadores, algoritmos e programasLicenciatura em Engenharia Informática
• Engenharia• Informática
Computadores, algoritmos e programasLicenciatura em Engenharia Informática
• Engenharia: resolução problemas técnicos• Ciência: conhecimento de princípios matemáticos, físicos e de aspetos técnicos que têm
de ser bem compreendidos, para que sejam aplicados corretamente• Arte: avaliação correta, experiência, bom senso e conhecimento que permitem representar
um problema do mundo real por um modelo ao qual o conhecimento técnico pode ser aplicado para produzir uma solução
• Informática
Computadores, algoritmos e programasLicenciatura em Engenharia Informática
• Engenharia: resolução problemas técnicos
• Informática: ramo da ciência que se dedica ao estudo dos computadores e dos processos com eles relacionados
• Como se desenvolve um computador• Como se especifica o trabalho a ser realizado por um computador• De que forma se pode tornar mais fácil de utilizar• Como se definem as suas limitações e, principalmente, como aumentar as suas
capacidades e o seu domínio de aplicação
Engenharia e Informática• Engenharia tradicional: lida com forças físicas, diretamente mensuráveis
(a gravidade, os campos elétricos e magnéticos, os componentes químicos) e com objetos físicos que interagem com essas forças (rodas dentadas, vigas, circuitos)
• Engenharia Informática: lida com entidades intangíveis que apenas podem ser observadas indiretamente através dos efeitos que produzem
Programas e Processos Computacionais
• Um computador segue uma sequência de instruções a que se chama um programa
Programas e Processos Computacionais
• Um computador segue uma sequência de instruções a que se chama um programa
• A execução de um programa gera um processo computacional, um ente imaterial que evolui ao longo do tempo, executando ações que levam à solução de um problema
• pode afetar objetos existentes no mundo real, responder a perguntas, entre muitos outros aspetos
Programas e Processos Computacionais• Programação: atividade de desenvolver programas
• atividade intelectual fascinante• não é difícil• requer muita disciplina
• A programação utiliza muitas atividades e técnicas comuns a projetos nos vários ramos da engenharia
• compreensão de um problema• criação de especificações pormenorizadas para o resolver• realização das especificações• verificação e testes
Programas e Algoritmos• Durante o funcionamento de um computador este segue um programa, um
conjunto de instruções que especificam exatamente o que tem que ser feito
• Caracterizado matematicamente como um algoritmo• Algoritmos foram estudados e utilizados muito antes do aparecimento dos
computadores modernos• Um programa é um algoritmo escrito numa linguagem que é entendida pelo
computador, uma linguagem de programação
AlgoritmoSequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito com uma quantidade de esforço finita
AlgoritmoSequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito com uma quantidade de esforço finita
• sequência finita: existe uma ordem pela qual as instruções aparecem no algoritmo, e que estas instruções são em número finito
AlgoritmoSequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito com uma quantidade de esforço finita
• sequência finita: existe uma ordem pela qual as instruções aparecem no algoritmo, e que estas instruções são em número finito
• bem definidas e não ambíguas: o significado de cada instrução é claro, não havendo lugar para ambiguidade
AlgoritmoSequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito com uma quantidade de esforço finita
• sequência finita: existe uma ordem pela qual as instruções aparecem no algoritmo, e que estas instruções são em número finito
• bem definidas e não ambíguas: o significado de cada instrução é claro, não havendo lugar para ambiguidade
• podem ser executadas mecanicamente: a execução das instruções não requer imaginação por parte do executante
AlgoritmoSequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito com uma quantidade de esforço finita
• sequência finita: existe uma ordem pela qual as instruções aparecem no algoritmo, e que estas instruções são em número finito
• bem definidas e não ambíguas: o significado de cada instrução é claro, não havendo lugar para ambiguidade
• podem ser executadas mecanicamente: a execução das instruções não requer imaginação por parte do executante
• num período de tempo finito e com uma quantidade de esforço finita: a execução de cada uma das instruções termina
Exemplo de algoritmoAlgoritmo para somar dois números
Exemplo de algoritmoAlgoritmo para calcular √2
Exemplo de algoritmoInstruções do Google Maps
Características de um algoritmo • Rigoroso: cada instrução especifica exata e rigorosamente o que deve ser feito,
não há ambiguidade • Criação de linguagens artificiais: notação matemática, ∀ 𝑥 ∃ 𝑦 ∶ 𝑥 > 𝑦, a notação química, MgO +
H2 → Mg + H2O, linguagens de programação
• Eficaz: cada instrução é suficientemente básica e bem compreendida de modo a ser executada num intervalo de tempo finito, com uma quantidade de esforço finita
• Termina: leva a uma situação em que o objetivo foi atingido não existindo mais instruções para serem executadas
Linguagem de Programação• Linguagem artificial utilizada para escrever programas de computador
• Classes de linguagens de programação• Linguagem máquina: linguagem nativa do computador. Instruções são constituídas por
uma sequência de zeros e uns• Linguagem assembly: semelhante à linguagem máquina mas usa nomes simbólicos com
significado para humanos em lugar de sequências de zeros e de uns• Linguagens de alto nível: aproximam-se das linguagens que os humanos usam para
resolver problemas e são muito mais fáceis de utilizar do que as linguagens máquina ou assembly, para além de poderem ser utilizadas em computadores diferentes. O Python é uma linguagem de alto nível
Programas e Algoritmos• Programa um algoritmo, escrito de modo a poder ser executado por um
computador (usa uma linguagem de programação)
• Grande parte desta disciplina aborda o desenvolvimento de algoritmos, e a sua codificação utilizando a linguagem de programação Python
• Os programas manipulam valores de variáveis• O computador começa por receber certos valores para algumas das variáveis• Efetua operações sobre essas variáveis, possivelmente dando valores a novas
variáveis• Chega a um conjunto de valores que constituem o resultado do programa
Algoritmo, programa, processo
Algoritmo Programa Processocomputacional
Exemplo• Objetivo: Calcular a soma dos 100 primeiros inteiros positivos
• Utilização de uma calculadora• Explicar a alguém como o fazer
ExemploLimpar o visor da calculadoraCarregar na tecla 1Carregar na tecla +Carregar na tecla 2Carregar na tecla +Carregar na tecla 3Carregar na tecla +...Carregar na tecla 1Carregar na tecla 0Carregar na tecla 0Carregar na tecla =
ExemploLimpar o visor da calculadoraCarregar na tecla 1Carregar na tecla +Carregar na tecla 2Carregar na tecla +Carregar na tecla 3Carregar na tecla +...Carregar na tecla 1Carregar na tecla 0Carregar na tecla 0Carregar na tecla =
É um algoritmo?
Exemplo• Grandezas envolvidas no processo de cálculo
• a soma corrente (aparece, em cada instante, no visor da calculadora)• o número a ser adicionado à soma (mantido na nossa cabeça)
• Cada vez que um número é adicionado à soma corrente, aumentamos mentalmente em uma unidade o próximo número a ser adicionado
Exemplo• Para exprimir o processo de um modo rigoroso, necessitamos de recorrer
a duas variáveis• uma para representar a soma corrente (à qual chamamos soma)• a outra para representar o número que mantemos na nossa cabeça (a que
chamamos numero)
• Passos que executamos sempre que adicionamos um número à soma corrente:
A soma toma o valor de soma + numeroO numero toma o valor de numero + 1
Exemplo• Os passos
A soma toma o valor de soma + numeroO numero toma o valor de numero + 1
são executados repetitivamente para todos os números a somar
Exemplo• Os passos
A soma toma o valor de soma + numeroO numero toma o valor de numero + 1
são executados repetitivamente para todos os números a somar
• Repetimos estes passos enquanto o número a somar não exceder 100Enquanto numero ≤ 100
A soma toma o valor de soma + numeroO numero toma o valor de numero + 1
Exemplo• Operações que efetuámos antes de começar a executar a sequência
repetitiva de operações:• Limpámos o visor da calculadora: o valor inicial da variável soma é
zero• Estabelecemos, mentalmente, que o primeiro numero a ser adicionado
à soma é um
ExemploA soma toma o valor 0O numero toma o valor 1
Enquanto numero ≤ 100
A soma toma o valor de soma + numeroO numero toma o valor de numero + 1
• Descrição muito aproximada de um programa em Python
Exemplodef prog_soma_100():
soma = 0
numero = 1
while numero <= 100:
soma = soma + numero
numero = numero + 1
print('O valor da soma é: ', soma)
Exemplo• Fórmula para calcular a soma dos primeiros 100 inteiros positivos
100 .1 + 100
2
Exemplo• Fórmula para calcular a soma dos primeiros 100 inteiros positivos
100 .1 + 100
2• Podemos utilizar esta fórmula para obter o valor desejado com um novo programa
def prog_soma_100():
soma = (100 * (1 + 100)) // 2
print('O valor da soma é: ', soma)
• Normalmente não existe apenas um algoritmo para resolver um dado problema
Sintaxe e semântica• O Python, como qualquer linguagem, apresenta dois aspetos distintos: a forma das
frases da linguagem e o significado associado às frases
Sintaxe e semântica• O Python, como qualquer linguagem, apresenta dois aspetos distintos: a forma das
frases da linguagem e o significado associado às frases
• A sintaxe e a semântica da linguagem
• A sintaxe determina qual a constituição das frases que podem ser fornecidas ao computador
• A semântica determina o que o computador vai fazer ao seguir as indicações apresentadas em cada uma dessas frases, ou seja, corresponde ao seu significado
Sintaxe• A sintaxe é o conjunto de regras que definem as relações válidas entre os
componentes da linguagem, tais como as palavras e as frases
• Em língua natural, a sintaxe é conhecida como a gramática
• Como a sintaxe apenas se preocupa com o processo de combinação dos símbolos da linguagem, ela pode ser, na maior parte dos casos, facilmente formalizada
Gramática formal• Gramática formal é composta por:
• Um conjunto de símbolos, os símbolos não terminais, que não aparecem explicitamente nas frases da linguagem mas que são utilizados para descrever os vários componentes das frases
• Um símbolo não terminal especial, o símbolo inicial, que representa o elemento principal da linguagem
• Um conjunto de símbolos, os símbolos terminais, que aparecem nas frases da linguagem
• Um conjunto de regras, as regras de produção, que descrevem a estrutura dos vários componentes da linguagem
Gramática BNF• Os símbolos não terminais escrevem-se entre parênteses angulares, < e
>• Usando um exemplo do Python, <instrução> é um símbolo não terminal que corresponde
ao conjunto de todas as instruções em Python
• Os símbolos terminais escrevem-se sem qualquer símbolo à sua volta• Em Python, + corresponde a um símbolo terminal que representa a operação de adição
Gramática BNF• As regras de produção escrevem-se, usando as seguintes convenções
• O símbolo ::= (lido é definido como) serve para definir componentes da linguagem
• O símbolo | (lido ``ou'') representa possíveis alternativas• O símbolo + após um símbolo não terminal significa que ele pode ser repetido
uma ou mais vezes• O símbolo * após um símbolo não terminal significa que ele pode ser repetido
zero ou mais vezes• A utilização de chavetas, { e }, englobando símbolos terminais ou não
terminais, significa que esses símbolos são opcionais
Números binários• Gramática para definir números binários
• Um número binário é apenas constituído pelos dígitos binários 0 e 1, podendo apresentar qualquer quantidade destes dígitos ou qualquer combinação entre eles
Números binários• Gramática para definir números binários
• Um número binário é apenas constituído pelos dígitos binários 0 e 1, podendo apresentar qualquer quantidade destes dígitos ou qualquer combinação entre eles
• A seguinte gramática define números binários:
<número binário> ::= <dígito binário> | <dígito binário> <número binário>
<dígito binário> ::= 0 | 1
1001
Números binários• Gramática para definir números binários
• Um número binário é apenas constituído pelos dígitos binários 0 e 1, podendo apresentar qualquer quantidade destes dígitos ou qualquer combinação entre eles
• A seguinte gramática define números binários:
<número binário> ::= <dígito binário> | <dígito binário> <número binário>
<dígito binário> ::= 0 | 1
• Símbolos terminais 0 e 1
• Símbolos não terminais <número binário> (o símbolo inicial) e <dígito binário>
Números binários (alternativa)
<número binário> ::= <dígito binário>+
<dígito binário> ::= 0 | 1
Exemplo<S> ::= <A> <B>
<A> ::= <x> | <x> <A>
<B> ::= <y> | <y> <B>
<x> ::= A | B | C | D
<y> ::= 1 | 2 | 3 | 4
Exemplo<S> ::= <A> <B>
<A> ::= <x> | <x> <A>
<B> ::= <y> | <y> <B>
<x> ::= A | B | C | D
<y> ::= 1 | 2 | 3 | 4
DAABBBB4444114 23ABC
A1
Exemplo<Princ> ::= a <Meio> a | a <Princ> a
<Meio> ::= b <Fim> b | b <Meio> b
<Fim> ::= c | c <Fim>
Exemplo<Princ> ::= a <Meio> a | a <Princ> a
<Meio> ::= b <Fim> b | <Meio>
<Fim> ::= c | c <Fim>
aaaaabbcbbaaaaa
abccccccccccccba
Semântica• A semântica define qual o significado de cada frase da linguagem
• A semântica nada diz quanto ao processo de geração das frases da linguagem
• A descrição da semântica de uma linguagem de programação é muito mais difícil do que a descrição da sua sintaxe
• Um dos processos de descrever a semântica de uma linguagem consiste em fornecer uma descrição em língua natural do significado, ou seja, das ações que são realizadas pelo computador, de cada um dos possíveis componentes da linguagem
Tipos de erros num programa• Erros sintáticos: o programador não escreveu as frases do seu programa de
acordo com as regras da linguagem de programação
• Erros semânticos (ou erros de lógica): o programador não definiu corretamente as ações a serem executadas (o programador queria dizer uma coisa mas disse outra)
• Podem manifestar-se pela • Geração de uma mensagem de erro durante a execução de um programa• Produção de resultados errados• Geração de ciclos que nunca terminam
Depuração• Processo de deteção e correção, tanto dos erros sintáticos como dos erros
semânticos, chama-se depuração• Em inglês, este processo é chamado debugging e aos erros que existem num
programa, tanto sintáticos como semânticos, chamam-se bugs
• Programação requere• Competências para desenvolver programas
• Capacidade de resolução de problemas• Capacidade de depuração