Apresentação da UC e Introdução

Propaganda
Avaliação
• A classificação final traduz-se numa escala de 0 (zero) a 20 (vinte) valores,
resultante da média ponderada das Componentes de Avaliação, com base
nas seguintes percentagens:
• Prática
(40%)
– Três trabalhos práticos + Discussão;
– Grupos de 2/3 alunos;
– Classificação mínima de 10 valores.
•
Téorica
(60%)
– 3/4 mini testes individuais, sem consulta (20%)
• Cada um deles a efectuar na semana de entrega de cada trabalho ou na
semana seguinte à entrega.
• Classificação mínima de 8 na média dos 3 melhores.
– Teste final, realizado nas datas de exame (40%)
• Permitida 1 folha A4 para consulta
• Classificação mínima de 10 valores.
01-10-2015
Programação I
1
Bibliografia
The C Programming Language
Brian W. Kernighan, Dennis M. Ritchie
C Programming: A Modern Approach, 2nd Edition
K. N King
01-10-2015
Fundamental da Programação em C
Isabel Sampaio, Alberto Sampaio
2
Algoritmos
•
Informalmente, podemos dizer que algoritmo é uma sequência de instruções
(acções) que especifica a forma de executar determinada tarefa. Muitas vezes a
tarefa consiste na processamento de um conjunto de valores de entrada (o input),
resultando na geração de um conjunto de valores de saída (o output).
Input
•
Algoritmo
Output
Um exemplo simples é o da receita de um bolo: nesta caso o cozinheiro (o
executor) executa a receita (algoritmo) transformando os ingredientes (input) ,
através de uma sequência bem definida de passos, no resultado final, o bolo
(output).
01-10-2015
Programação I
3
Linguagens naturais versus Linguagens de Programação
•
A linguagem em que o algoritmo é expresso tem naturalmente que ser entendida
pelo executor. No exemplo anterior a receita pode ser expressa em português ou
noutra lingua que o cozinheiro (o executor) entenda.
•
O problema da descrição do algoritmo em linguagem natural é que, sendo uma
linguagem sujeita a ambiguidades, não se presta à especificação de algoritmos que
sejam executados por máquinas (computadores).
•
Nesse caso é preciso especificar o algoritmo nas chamadas linguagens de
programação, que são linguagens formais onde, por desenho, quer a gramática
quer a semântica (significado) das frases têm sempre uma única possibilidade de
interpretação, ou seja, não contêm ambiguidades.
•
Um algoritmo expresso numa linguagem de programação designa-se por
programa. Ao longo do semestre iremos desenvolver a escrita de programas em
linguagem C.
01-10-2015
Programação I
4
Linguagens intermédias de descrição de algoritmos
• Por vezes é util descrever um algoritmo numa linguagem mais
precisa que a linguagem natural, mas menos exigente e mais
sucinta que as linguagens de programação. Dessa forma
contrói-se uma especificação rápida do algoritmo, legível por
humanos e que facilmente pode ser convertida num
programa. São exemplos de linguagens adequadas a este
propósito os fluxogramas e o pseudo-código, apresentados a
seguir.
01-10-2015
5
Especificação de algoritmos ( fluxogramas)
•
•
Um fluxograma é uma representação gráfica de um algoritmo através de figuras
que representam passos do algoritmo ligadas por setas que definem a ordem de
execução.
Exemplo de fluxograma (sensor de temperatura com alarme):
Legenda
representa o início do processo
Início
representa uma acção individual
definir máximo
ler
temperatura
temperatura >
maximo
representa uma decisão
accionar
alarme
final do processo
Fim
01-10-2015
Programação I
6
Especificação de algoritmos (pseudo-código)
•
Pseudo-código é uma representação textual de um algoritmo com uma estrutura
baseada na indentação do texto.
São usados os seguintes blocos de decisão:
Instruções a executar se a
condição for verdadeira
se <condição>
<instruções>
senão
<instruções>
enquanto <condição>
<instruções>
repetir
<instruções>
até <condição>
Exemplo para o sensor de
temperatura com alarme
Instruções a executar se
a condição for falsa
enquanto a condição for
verdadeira executar
Instruções
inicio
ler máximo de temperatura
admissível
repetir
ler temperatura actual
até temperatura actual > máximo
accionar alarme
fim
Instruções a executar até a
condição ser verdadeira
Onde se refere instruções quer-se dizer acções simples ou outras decisões
01-10-2015
Programação I
7
Especificação de algoritmos – fluxogramas e pseudo-código
Considere 3 lápis de dimensões distintas. Escreva um algoritmo para determinar o maior dos lápis, considerando
a restrição de que apenas se sabe comparar dois lápis de cada vez. Sejam os lápis la (lápis azul), lv (lápis
vermelho) e ll (lápis laranja). A seguir apresentam-se uma solução na forma de fluxograma e em pseudocódigo.
fluxograma
pseudo código
Início
V
V
la > ll
mostrar lápis
azul
la > lv
F F
F
lv > ll
mostrar
lápis laranja
V
mostrar lápis
vermelho
Fim
01-10-2015
Programação I
se la > lv
se la > ll
mostrar lápis azul
senão
mostrar lápis laranja
senão
se lv > ll
mostrar lápis verde.
senão
mostrar lápis laranja
8
Especificação de algoritmos – fluxogramas e pseudo-código
•
E se forem muitos lápis? ...
...
1
2
3
4
5
6
7
8
N
Considerem-se os lápis arrumados de tal forma que é possivel identificar cada um pela sua posição i, de 1 a N,
sendo N o número de lápis. Podemos escrever lapis(i) para indicar o lápis na posição i. No fluxograma e no
pseudo-código i indica a posição corrente e pmaior a posição do lápis maior. Considera-se à partida o lápis
maior como sendo o primeiro (na posição 1)
Início
i=2; pmaior  1
ii+1
i >N
V
mostrar
lapis(pmaior)
F
lapis(i) >
lapis(pmaior)
F
Início
i2
pmaior  1
enquanto i <= N
se lapis(i) > lapis(pmaior)
pmaior  i
ii+1
mostrar lapis(pmaior)
Fim
V
pmaior  i
Fim
01-10-2015
Programação I
9
Algoritmos funcionalmente equivalentes
Alternativa 1
Início
se la > lv
se la > ll
mostrar lápis azul
senão
mostrar lápis laranja
senão
se lv > ll
mostrar lápis verde.
senão
mostrar lápis laranja
fim
Alternativa 2
Início
se la > lv e la > ll
mostrar lápis azul
senão
se lv > ll
mostrar lápis verde
senão
mostrar lápis laranja
fim
Alternativa 3
Início
maior  la
se lv > maior
maior  lv
se ll > maior
maior  ll
mostrar maior
fim
Qual o mais eficiente?
01-10-2015
Programação I
10
Arquitetura (muito) simplificada de um computador
RAM
CPU
Programas em
execução + dados
GPU
Registos
Unidade
Aritmética e
lógica
Unidade de
Controlo
BUS de Sistema
Controlador
IDE
Controlador
USB
BUS USB
BUS IDE
Disco
Magnético
01-10-2015
Pen
USB
Rato
Disco
externo
CD
Programação I
11
Código máquina
•
•
•
Na RAM o código dos programas (bem como os dados) está presente em binário (uns e
zeros), no chamado código máquina
O código máquina tem uma representação em texto, útil para humanos passando a designarse por código assembly ou simplesmente assembly.
Exemplo de um hipotético código assembly para determinar o maior de dois números:
Mov
Mov
Cmp
JG
Mov
End:
Mov
•
num1, R1
num2, R2
R1, R1
End
R2, R1
R1, maior
É necessário traduzir os programas escritos em linguagens de alto nível, como a linguagem C,
para código máquina. Os programas que cumprem essa tarefa denominam-se compiladores.
Programa em
linguagem C
01-10-2015
Compilador
de C
Programação I
Programa em
código máquina
(executável)
12
Download