fundamentos da programação · •linguagem assembly: semelhante à linguagem máquina mas usa...

Post on 08-Nov-2020

46 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related