Você está na página 1de 157

Instituto Politécnico de Tomar

Escola Superior Tecnologia de Abrantes

Apontamentos de apoio
à
disciplina de Programa

Docente: Toni Alves

ESTA 2009/2010

1
INTRODUÇÃO À ESTRUTURA DE UM COMPUTADOR

COMPUTADOR

- é um conjunto de circuitos eléctricos e electrónicos capaz de realizar


de modo autónomo uma determinada tarefa, por obediência a um programa
armazenado internamente.

- Assim, um computador pode ser visto como um sistema de


computação que compreende hardware e software.

2
Hardware – Conjunto de componentes que constituem um computador
(componente material/física do computador), tais como, monitor, a unidade
central, o teclado, o rato, etc. que fornece a capacidade de:
– Executar um determinado tipo de instruções a uma determinada
velocidade;
– Armazenar um conjunto de bytes;
– Comunicar com um conjunto de periféricos.
Software – conjunto de instruções transmitidas a um computador para que
ele desempenhe determinadas acções (tarefas).

Para uma melhor sistematização do software e as respectivas funções, este


pode ser organizado nas seguintes categorias:
– Software de Sistema Operativo - conjunto de programas que comunica
directamente com o hardware e é responsável pela gestão de recursos e
periféricos. Neste conjunto incluem-se o sistema operativo e os programas de
controlo do funcionamento do hardware, tais como programas de
parametrização, drivers e afins.
– Ferramentas de desenvolvimento - conjunto de aplicações utilizadas no
desenvolvimento de aplicações. Neste conjunto incluem-se as linguagens de
programação (compiladores e interpretadores) e os sistemas de gestão de bases
de dados.
– Aplicações - conjunto de aplicações que se destinam à utilização pelo
utilizador final do sistema de computação. Regra geral o nível de abstracção é
mais elevado do que nas categorias anteriores. Neste conjunto incluem-se as
aplicações por medida, ferramentas de gestão, folhas de cálculo, editores de
texto, etc.

3
Caracterização de um computador

LEGENDA:

01- Monitor
02- Placa-Mãe (Motherboard)
03- Processador
04- Memória RAM
05- Placas de Rede, Som, Vídeo, Fax...
06- Fonte de Energia
07- Leitor de CDs e/ou DVDs
08- Disco Rígido (HD)
09- Mouse (ou Rato)
10- Teclado

4
"Motherboard", placa principal ou placa mãe

O "chipset" está integrado na


"Motherboard" que é onde todas as
outras placas serão ligadas. Os "bancos
de memória" nela existentes determinam
o tipo e a quantidade máxima de
memória RAM que se pode utilizar,
enquanto os "slots" de expansão
determinam o número de placas que se
podem ligar e de que tipo. Algumas já trazem incluída placas de vídeo, placas
de som, placas de rede, etc.

Processador

O processador é onde é processada a informação dentro do computador


e consiste num pequeno "chip" colocado na placa-mãe. Normalmente está
escondido debaixo de uma ventoinha de arrefecimento.

5
Barramentos e tipos de ligações

A comunicação de dados dentro do computador é feita através dos


barramentos existentes na placa principal. Os barramentos estão colocados
entre o processador, a memória e os "slots" de comunicação com os
periféricos.

Tipos de memória em circuitos integrados:

• ROM - Contém programas que não podem ser alterados e que se


destinam, por exemplo, a testar os vários componentes do computador.
• CMOS - Contém informação acerca da configuração do computador. A
informação pode ser alterada mas não desaparece quando se desliga o
computador.
• RAM cache - Um tipo de memória RAM mais rápida que é usada como
uma espécie de "reservatório" para que o processador
não fique muito tempo à espera de dados. Os próprios
processadores também já têm "caches" internas.

6
Capacidade da memória

A capacidade da memória corresponde à quantidade de informação


equivalente. A mais pequena unidade de memória é o bit (BInary digiT -
dígito binário) que corresponde a um 0 ou um 1. As medidas mais utilizadas e
a sua equivalência física são:

• bit = dígito binário. Equivale a um interruptor ou botão.


• byte = conjunto de 8 bits. Equivale a um caracter.
• kilobyte (kb) = 1024 bytes. Equivale a uma página A4.
• megabyte (Mb) = 1024 kilobytes. Equivale a um livro grande.
• gigabyte (Gb) = 1024 megabytes. Equivale a uma biblioteca.
• terabyte (Tb) = 1024 gigabytes. Equivale a 200 filmes em DVD

7
Discos e disquetes

Para guardar os programas e os trabalhos realizados, utilizam-se vários


tipos de suporte de armazenamento sendo todos eles constituídos por um
elemento de leitura / escrita e por um controlador:
• Discos magnéticos;
• CDs e DVDs
• Disquetes

Discos magnéticos

O disco magnético, também conhecido por "disco


duro" ou "disco rígido", é onde se instala a maior
parte dos programas e onde se armazena todo o tipo
de informação e trabalhos elaborados.

CD - ROM, CD - RW, DVD, DVD-RAM, DVD-RW

Os leitores de CD-ROM estão a ficar


obsoletos sendo o leitor de DVD o seu substituto
natural. Estes equipamentos são baratos mas não
permitem gravar informação.

8
Caixa

A caixa é um dos elementos que


determina o aspecto exterior do
computador. O seu tamanho não tem
nada a ver com as capacidades e
performances do computador e a na
grande maioria dos casos, o seu espaço
interior encontra-se vazio.

Periféricos

Os periféricos são todos os componentes que permitem que o computador


comunique com o exterior. Podem-se classificar como sendo:

• Periféricos de entrada - Para fornecer dados ao computador.


• Periféricos de saída - Para obter dados do computador.
• Outros periféricos - Para fornecer e obter dados.

Periféricos de saída

Os periféricos de saída são aqueles que


recebem os dados do computador e os
apresenta para o utilizador.

9
Periféricos de entrada

Teclado

O teclado serve para escrever e introduzir comandos e dados


no computador.

Ratos

O rato é a forma mais habitual de controlar um cursor que


existe no ecrã.

Outros periféricos

Comunicação sem fios

Tecnologias para comunicar sem fios.

Infravermelhos - As portas IRDA permitem ligações até 4 mbps mas os


equipamentos necessitam de estar em linha de vista.

Comunicações Bluetooth - são capazes de atravessar paredes e de se fazerem


até 10 a 30 metros de distância mas a ligação é a 730 kbps.

Comunicação Wifi - serve para ligar em rede PC's ou dar acesso à internet
permitem trabalhar com velocidades nominais até 54/108 mbps mas na
realidade o acesso é a cerca de metade da velocidade anunciada.

10
HUB – Concentrador

No caso de ter mais que 2 PC's que pretende ligar é


conveniente usar um HUB. Estes permitem ligar 8 ou 16
computadores e dependendo do modelo podem fazer com que as avarias na
ligação a um PC não afecte os outros.

Modem-Fax

Modem-Fax é um periférico que permite receber e enviar


informação através de uma linha telefónica ligada ao computador.

Colunas de som

As colunas de som são o que permite ouvir o som que sai do


computador.

11
Porta Paralela

Endereços da porta paralela

O LPT1, LPT2, LPT3 etc, é o nome dado à Porta Paralela, mas a Porta
padrão do computador é a LPT1, com os endereços: 378h (para enviar um
byte de dados pela Porta), 378+1h (para receber um valor através da Porta) e,
378+2h (para enviar dados). Às vezes está disponível a LPT2, e com os
endereços: 278h, 278+1h e 278+2h, com as mesmas funções dos endereços da
porta LPT1 respectivamente.

Nome da Endereço de
Endereço da Porta Descrição
Porta memória
378
LPT1 0000:0408 888 Decimal Endereço base
Hexadecimal
278
LPT2 0000:040A 632 Decimal Endereço base
Hexadecimal

Registos

Endereços Endereços
Nome Descrição
LPT1 LPT2
Registo de Dados 378h 278h Envia um byte para a impressora
Registo de Status 379h 279h Ler o Status da impressora
Registo de Controlo 37Ah 27Ah Envia dados de controlo para a impressora

12
Construção do cabo para comunicar com a porta paralela

Conector fêmea do cabo da porta paralela

Conector macho do cabo da porta paralela

Esquema de funcionamento da transmissão de dados

13
Exemplo:
Ligar e desligar oito LEDs, conectados através de um cabo à Porta Paralela

Programa em linguagem C

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define LPT1 0x378
int main(void)
{
unsigned char Valor=128; //Em binário: 10000000
while( Valor > 0 )
{
outportb(LPT1, Valor); // Envia para a Porta LPT1
printf("\nPressione uma tecla para ascender o próximo LED...");
getch( );
Valor = Valor >> 1; //A cada passagem, o bit 1 é movido para a
direita
}
}

14
Introdução as sistemas binários

Níveis Lógicos

Nos circuitos integrados digitais, os estados lógicos são geralmente


representados através de tensões eléctricas (corrente continua DC).
A lógica binária está baseada em dois únicos estados (1 – verdadeiro e 0 -
falso). Lógico 1
V(t) Lógico 0

0 = não existe tensão (0 volts) +V


1 = existe tensão (+5 volts)
0
Lógica t
Frequentemente utiliza-se o L
(Low – Baixo = 0) e H (High – Lógico 1 = Lógico 0
positiva Lógico 1 = Lógico 0
Alto = 1) para indicar claramente
o nível eléctrico.
Complemento ou inversão
lógica
Tabela de Verdade

É uma maneira de representar


todas as combinações possíveis de
uma dada função.

A contagem é feita sempre da


esquerda para a direita.

Exemplo:
21 20 F Nota: o primeiro dígito é sempre zero, variando de
b a coluna para coluna de 2n.
0 0 x
0 1 x X – é valor que toma cada linha na função, podendo ser
1 0 x
1 1 x
0 ou 1.

15
Exemplo – Acender/Apagar de uma Lâmpada
a

(Entrada)
B
(Saída)

Um circuito lógico recebe comandos de entrada e produz resultados na


saída.
No que respeita a nossa acção sobre o interruptor e o efeito sobre a
lâmpada. O circuito recebe à entrada (input) a acção sobre o interruptor e
produz à saída (output) o acender da lâmpada.

Tabela verdade

Podemos recolher numa tabela o comportamento lógico de um circuito


digital.
A figura mostra-nos a tabela, ou tabela de verdade, da lanterna.
Denominamos (a) ao interruptor (entrada) e (B) à lâmpada (saída).

Entrada (a) “Interruptor” Saída (B) “Lâmpada”

0 0

1 1

Identificação lógica

Na prática, para a lâmpada a saída repete a entrada. Podemos escrevê-la de


uma forma formal com uma expressão lógica:

B=a

16
Sistema Binário

O código binário utilizado normalmente é completamente equivalente ao


código decimal, excepto pelo facto de se utilizarem apenas dois valores (0 e 1)
em vez de dez.
Com os nossos números decimais, a primeira coluna da direita é a das
unidades, depois então as dezenas, as centenas, os milhares, etc…
Pode-se fazer a mesma coisa com os números binários, apenas que os pesos
(multiplicadores) das colunas não são potências de 10 (1, 10, 100, 1000,
etc…) mas potências de dois (1, 2, 4, 8, 16, 32, etc…) 2n.

Para calcular o valor de um número binário, somam-se os pesos das colunas


onde existe um 1.

Exemplo: Número binário 101001

32 16 8 4 2 1

1 0 1 0 0 1

1x1= 1
0x2= 0
0x4= 0
1x8= 8
0 x 16 = 0
1 x 32 = 32
41 Valor
Decimal

17
Exemplos:

Conversão Binário – Decimal

Para obter o equivalente de um número decimal de uma determinada grandeza


binária basta multiplicar cada bit pelo seu peso e adicionar os respectivos
produtos.

Exemplo: converter o número binário 110101 em decimal

Peso Binário 25 24 23 22 21 20
Valor do Peso 3 1 8 4 2 1
2 6
Número Binário 1 1 0 1 0 1

1x32+1x16+0x8+1x4+0x2+1x1 =32+16+0+4+0+1 =5310

Conversão Decimal – Binário

O método consiste em efectuar divisões sucessivas por 2 e o valor binário é


obtido pelo valor do resto obtido da direita para esquerda.

47 2
07 23 2
1 03 11
2
1
1 5
2
Sentido 1 2 2
de formação 4710 =1011112
0 1

18
Conversão de Hexadecimal – Binário

Para converter um número hexadecimal em binário substitui-se cada símbolo


hexadecimal pelo seu equivalente formado por 4 bits.

Tabela auxiliar a utilizar nas conversões de números hexadecimal

Decimal Binári Hexadecimal


o
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

O número 1A516 em hexadecimal para binário

1 A 5
1A516 = 0001101001012
0001 1010 0 1 0 12

19
Conversão Decimal – Hexadecimal

Divisões sucessivas da parte inteira do número decimal por 16, produzirão o


equivalente em hexadecimal.
Por multiplicações sucessivas por 16 da parte fraccionário obtém-se o
equivalente em hexadecimal, pelo agrupamento das partes inteiras obtidas.

Exemplo: o número 65210 em decimal para hexadecimal

12 = C
652 16
012 40 16
65210 = 28C16
8 2

Conversão Binário – Hexadecimal

Divide-se o número em grupos de 4 bits e substitui-se cada grupo pelo seu


equivalente em hexadecimal.

O número 101001102 em binário para hexadecimal

1010 0 1 1 02
A 6 101001102 = A616

Exemplo de aplicação usado na programação em Labview

20
Introdução às Tecnologias de Informação e Comunicação

Utilização dos computadores no ensino

Duas grandes perspectivas:

- Aprender a partir da tecnologia

- Aprender com a tecnologia

Aprender a partir da tecnologia

O aluno usa a tecnologia como repositório de informação ou de instruções


sobre procedimentos. A tecnologia desempenha um papel de suporte da
aprendizagem (utilização de chats, correio electrónico, blogs, portfolios,
etc…).

Aprender com a tecnologia

A tecnologia desempenha um papel de ferramenta intelectual, ou ainda de


tecnologia intelectual, para o aluno; não é, em si, uma tecnologia instrucional,
criada com propósitos de ensino, mas sobretudo um modo de usar a tecnologia
quer com propósitos de representação, quer como ferramenta para estruturação
e construção de conhecimento.
A sua utilização requer que o aluno seja obrigado a (re)construir o seu
conhecimento, a aprofundá-lo e a alargá-lo (construção de base dados,
programação).

21
TÉCNICAS DE PROGRAMAÇÃO

Metodologia Genérica:

 Análise do Problema
 Projecto do Programa: Algoritmo e estrutura de dados
 Implementação e teste do programa
 Verificação/Execução do programa

ALGORITMOS

Sequência finita de instruções bem definidas e não ambíguas (único


significado), cada uma das quais pode ser executada mecanicamente num
período de tempo finito com uma quantidade de esforço finito.

Por outras palavras:

A descrição de um conjunto de acções que, quando obedecidas, provocarão


uma sucessão finita de acontecimentos que resultarão na resolução do
problema proposto.

Ou seja,

Programa de computador é um conjunto de instruções que se


transmitem a um computador para que se desempenhe determinadas acções
(tarefas).

- Este conjunto de instruções é caracterizado matematicamente como um


algoritmo.

22
Linguagem de programação é um algoritmo escrito numa linguagem
que é entendida pelo computador.

- Um algoritmo está sempre associado a um dado objecto, ou seja, a resolução


de um dado problema. Assim, a execução das instruções de um algoritmo
garante que o seu objecto é atingido.

CARACTERÍSTICAS DE UM ALGORITMO
- Os algoritmos são usados constantemente na vida corrente (para abrir uma
porta, fazer um telefonema, usar um elevador, procurar palavras num
dicionário, etc.).

- Daqui se conclui que os algoritmos correspondem a sequências finitas que


devem ser seguidas de modo a atingir um determinado objectivo.

- A sequência de passos de um algoritmo deve ser executado por um agente, o


qual pode ser humano, mecânico, electrónico, ou qualquer outra coisa.

- Cada algoritmo deve ser associado a um agente (ou classe de agentes) que
deve executar as suas instruções.

- Aquilo que representa um algoritmo para um agente pode não ser para outro
agente.

- Um algoritmo deve prever antecipadamente todas as situações que podem


ocorrer quando for posto em execução.

23
- Nem todas as sequências de passos para atingir um dado objectivo podem ser
consideradas num algoritmo, pois todo algoritmo deve possuir três
características:
1. Ser rigoroso;

2. Ser eficaz;

3. Ter a garantia de terminar.

ALGORITMO RIGOROSO

- Cada instrução do algoritmo deve especificar exacta e rigorosamente o que


deve ser feito, não havendo lugar para ambiguidade.

EXEMPLO:

Decisões a serem tomadas na sequência de uma instrução:

“ir ao supermercado comprar detergente”

- Qual o supermercado?
- Qual a morada desse supermercado?
- Como se chega a essa morada?
- Qual é a marca preferida?
- Qual a quantidade de detergente necessária?
-Até que preço se pode comprar o detergente?
- Etc.

O facto de um algoritmo poder ser executado mecanicamente obriga a que


cada uma das instruções tenha uma e uma só interpretação.

ALGORITMO EFICAZ

24
- Cada instrução do algoritmo deve ser suficientemente básica e bem
compreendida de modo a poder ser executada num intervalo de tempo finito,
com uma quantidade de esforço finita.

EXEMPLO:

a) Ver se a seguinte instrução, inscrita numa embalagem de adubo, pode


fazer parte de um algoritmo:
“ Se a temperatura máxima no mês de Abril for superior a 23º C, misture o
conteúdo de duas embalagens em 5 litros de água, caso contrário, misture
apenas o conteúdo de uma embalagem.”

Uma vez que não é difícil determinar a temperatura máxima do mês de


Abril, pode-se facilmente decidir se deve utilizar o conteúdo de uma ou
duas embalagens no trabalho em causa.

b) Instrução alternativa à anterior:


“Se a temperatura máxima no mês de Abril do ano de 2009 for superior a
23ºC, misture o conteúdo de duas embalagens em 5 litros de água, caso
contrário, misture apenas o conteúdo de uma embalagem.”

- Como não é possível determinar a temperatura máxima do mês de


Abril do referido ano, não é possível executar a instrução.
- Esta instrução não pode fazer parte do algoritmo, pois não pode ser
executada com uma quantidade de esforço finita, num intervalo de
tempo finito.

ALGORITMO DEVE TERMINAR

25
- O algoritmo deve levar a uma situação em que o objectivo tenha sido
atingido e não existam mais instruções que possam ser executadas.

EXEMPLOS:

a) Verificar a seguinte instrução: para aumentar a pressão de um pneu

acima de 2 bar, pode fazer parte de um algoritmo.


“Enquanto a pressão for inferior ou igual a 2 bar, continuar a introduzir ar.”

Se o pneu estiver furado, o algoritmo pode não terminar (dependendo do


tamanho do furo). Assim, não se podem classificar estas instruções
como algoritmo.

b) “Procedimento para contar até 100”

Passo1: fazer M igual a 0


Passo 2: somar 1 a M
Passo 3: se M for menor que100, voltar ao passo 2, caso contrário parar.

- O algoritmo está correcto, pois satisfaz todas as condições acima


enunciadas.

Exercício:

Construa o algoritmo que represente a seguinte frase:

“Fazer uma chamada de um telefone público.”

26
SOLUÇÃO:

Passo 1: Procurar uma cabine de telefone.


Passo 2: Aproximar da cabine.
Passo 3: Se estiver ocupada esperar no máximo 3 minutos, senão ir para o
passo 5.
Passo 4: Voltar ao passo 1.
Passo 5: Entrar na cabine.
Passo 6: Levantar o auscultador.
Passo 7: Se o telefone é de moedas, inserir a moeda, senão inserir cartão.
Passo 8: Se não ouvir sinal, voltar ao passo 3.
Passo 9: Marcar o número desejado.
Passo 10: Se os sinais ouvidos são curtos e repetidos, carregar no botão para
se reiniciar chamada, esperar sinal de linha e voltar ao passo 9 no máximo 5
vezes, senão ir para o passo 12.
Passo 11: Ir para o passo 13.
Passo 12: Se alguém atender o telefone, falar, senão esperar no máximo 1
minuto.
Passo 13: Se o telefone é de moedas recolher o troco, no caso de as haver,
senão recolher o cartão.
Passo 14: Sair da cabine.

27
FLUXOGRAMAS

Um fluxograma é uma representação gráfica do algoritmo, que


recorrendo a um conjunto de primitivas simples, que permitem a definição de
algoritmos complexos.

As primitivas utilizadas:

Início de fluxograma Inicio

Esta primitiva possibilita a identificação do primeiro estado do


algoritmo, i.e. do seu ponto inicial de execução.

NOTA: em cada fluxograma só poderá existir uma destas primitivas.

Processamento Processamento

No processamento aparece as instruções do tipo sequencial são as mais


simples de todas apresentando uma estrutura atómica. São responsáveis por
permitirem fazer a entrada/saída de dados, execução de cálculos e atribuição
de valores a variáveis.

28
Saída de
Estado em espera dados

Bloco de instrução de escrita que permite fazer a saída de dados


(tipicamente para o écran) sejam variáveis e/ou textos e/ou resultado de
cálculos.

Estado sem Espera


Entrada de
dados

Estado que representa um estado do algoritmo, onde é efectuada uma


determinada acção, onde não existe qualquer compasso de espera.
Blocos de instruções de leitura que permitem fazer a entrada de dados,
tipicamente a partir de um teclado, colocando-os em variáveis.

29
Instruções de Decisão
As instruções de decisão, ou selecção, permitem a selecção em
alternância de um ou outro conjunto de acções após a avaliação lógica de uma
condição.

DECISÃO BINÁRIA
N S
Condição

Esta primitiva permite a representação de uma decisão controlada pela


condição inserida dentro do losangolo e que pelo resultado da condição –
verdadeiro ou falso – encaminha o fluxo para um dos ramos da decisão.
Se-Senão

Se-
Então-Senão

30
Decisão múltipla

A instrução de decisão múltipla é um caso particular de instruções encadeadas


do tipo se-então-senão.

31
Instruções de Repetição (Ciclos)
itereção
Ciclo
As instruções de repetição, ou ciclos, permitem a execução de forma
repetitiva de um conjunto de instruções.

Ciclo condicional: repetir-até

O ciclo repetir-até executa um bloco de instruções até que uma


determinada condição lógica seja verdadeira.

32
Ciclo condicional: enquanto-fazer

O ciclo enquanto executa um bloco de instruções enquanto uma


determinada condição lógica for verdadeira.

33
Ciclo determinístico: para-fazer

O ciclo para-fazer executa um bloco de instruções com um número pré-


determinado de vezes.
• O bloco-início - é um conjunto de instruções que são executadas à priori;
• A condição é uma expressão lógica é testada em cada iteração do ciclo,
sendo necessário que o seu valor lógico seja verdade para que o ciclo continue
em execução;
• O bloco-iter é composto por um conjunto de instruções que são executadas
em cada iteração.

34
SUB-ROTINAS

Na programação estruturada são normalmente referidos dois tipos de


sub-rotinas: as funções e os procedimentos. A diferença entre funções e
procedimentos consiste no facto de as primeiras retornarem um valor, e os
segundos não.

FUNÇÕES

A função é identificada por um nome (nomeFuncao), sendo a


listaParâmetros constituída por zero ou mais variáveis passadas à função. A
expressão representa o valor a retornar pela função.

35
Exemplo:

#include <stdio.h>

int soma(int a, int b); //protótipo

void main()
{
int a, b, resultado;
printf("Entre com o valor de a: ");
scanf("%d", &a);
printf("Entre com o valor de b: ");
scanf("%d", &b);
resultado = soma(a, b); //passando os parâmetros
printf("O resultado é: %d", resultado);
getch();
}

int soma (int a, int b)


{

int r;
r = a + b;
return r;

36
PROCEDIMENTOS

Procedimento é uma rotina criada separadamente no programa principal


(main) que não nos retorna um valor.

Exemplo:

#include <bibliotecas>

int procedimento()
{
instrucao1;
}

void main()
{
procedimento();
}

37
FLUXO

Esta primitiva representa direcção de fluxo de algoritmo, ligando por


consequência os diversos estados do diagrama.

FIM DE FLUXO Fim

Esta primitiva possibilita a identificação do último estado do algoritmo,


i.e. do seu ponto final de execução.

38
EXERCÍCIO 1:

“ Dado o ano nascimento determinar a idade.”


Represente o algoritmo e depois o fluxograma.

Algoritmo:

Inicio
Escrever:’ Qual o ano de nascimento’ Inicio
Ler: ano nascimento
Escrever:’ Qual o ano actual’
Ler: ano actual Qual o ano de
Calcular: idade = ano actual - ano nascimento nascimento
Escrever: (‘Tem ‘, idade, ‘anos’)
Fim
Fluxograma:
Ano
nascimento

Qual o ano
actual

Ano actual

Idade=ano_act – ano_nasc

Tem …
anos

Fim

39
EXERCÍCIO 2:

“ Peça ao utilizador dois números e apresente a soma deles.”


Represente o algoritmo e depois o fluxograma.

Algoritmo:

Inicio
Escrever:’ Introduza um número inteiro’
Ler: número1 Inicio
Escrever:’ Introduza outro número inteiro’
Ler: número2
Calcular: soma = número1+número2 Introduza um
número
Escrever: (‘A soma é: ‘, soma) inteiro
Fim

Fluxograma:
Número1

Introduza outro
númerpo
inteiro

Número2

Soma=numero1+numero2

A soma é

Fim

40
EXERCÍCIO 3:

“ Dado um número, calcule o quadrado deste.”


Represente o algoritmo e depois o fluxograma.

Algoritmo:

Inicio
Escrever:’ Digite um número’
Ler: número
Calcular: quadrado = número*número
Escrever: (‘o quadrado do número é ‘, quadrado)
Fim

Fluxograma:
Inicio

Digite um
número

Lê número

Quadrado=número*número

Escreve
o resultado

Fim

41
EXERCÍCIO 4:

“Dada uma nota de um aluno dizer se ele teve aprovação à disciplina –


aprovado se tem nota maior ou igual a 9,5 – Condição Se-senão”

Represente o algoritmo e depois o fluxograma.

Algoritmo:

Inicio
Escreve: ‘Introduza a nota:’
Ler: nota
Se nota >= 9.5 então
escreve: ‘O aluno foi aprovado’
Fim

Fluxograma:
Inicio

Introduza a
nota

nota

S
nota>=9.5

N
O aluno foi
aprovado

Fim 42
EXERCÍCIO 5:

“Dá um número, verificar se ele é negativo– Condição Se-então-senão.”

Represente o algoritmo e depois o fluxograma.

Algoritmo:

Inicio
Escreve: ‘Digite um número’
Ler: número
Se o número é <O, então
escreve: ‘Número negativo’
senão escreve:’Número é positivo’
Fim
Fluxograma:
Inicio

Digite um
número

Lê número

N S
Número>0

Número Número
positivo negativo

Fim
43
EXERCÍCIO 6:

“Dado três números, informar qual o maior número”.


Inicio
Represente o algoritmo e depois o fluxograma.

Algoritmo:
Introduza
primeiro numero:
Inicio
Escreva: " Introduza primeiro numero: ";
Ler: num1; num1
Escrever:" Introduza o segundo numero: ";
Ler: num2;
Escrever:" Introduza o terceiro numero: "; Introduza
segundo numero:
Ler: num3;
Se ((num1>=num2) e (num1>=num3)) então
maximo=num1;
Senão num2
Se (num2>=num3) então
maximo=num2 ; Introduza terceiro
Senão numero:
maximo=num3 ;
Escreve: “o maior e : %d", maximo;
Fim num3

Fluxograma:
N Se ((num1>=num2) e S
(num1>=num3))

N Se ((num2>=num3) S máximo=num1

máximo=num3 máximo=num2

O maior e: …

Fim

44
EXERCÍCIO 7:

“Escolha opção de dois números de alunos, e devolver o nome do aluno”,


(utilize a condição Se-Então-Senão).

Represente o algoritmo e depois o fluxograma.

Algoritmo:

Inicio
Escrever:"Escolha opcao: 2000 ou 2001 : ";
Ler: num;
Se (num=2000) então
Escrever:"Carlos Lopes";
Senão se (num=2001)
Escrever:"Miguel Mendes";
senão
Inicio
Escrever:"Operacao invalida";
Fim
Fluxograma:
Escolha opcao:
2000 ou 2001:

num

N S
Se (num=2000)

N S
Se (num=2001) Carlos Lopes

Operacao invalida Miguel Mendes

Fim

45
EXERCÍCIO 8:

“Considere uma máquina que permite apenas três operações, ligar, desligar e
furar”, (utilize a condição seleccionar … caso …).

Represente o algoritmo e depois o fluxograma.

Algoritmo:

Inicio
Escreve: ‘Introduza a letra que pretende utilizar: L-ligar D-desligar F-furar’
Ler: letra
Seleccionar
Caso ‘L’ escrever:’Ligar’
Caso ‘D’ escrever ‘Desligar’
Caso ‘F’ escrever ‘Furar’
senão Inicio
escreve: ‘Operação inválida’
Fim
Introduza a letra que pretende utilizar:
Fluxograma: L-ligar D-desligar F-furar

Letra

Senão
Seleccionar

Caso L Caso D Caso F Número


L-ligar D-desligar F-furar negativo

Fim

46
EXERCÍCIO 9:

“Considere uma máquina que permite apenas três operações, ligar, desligar e
furar”, (utilize a condição Se-Então-Senão).

Represente o algoritmo e depois o fluxograma.

Algoritmo:

Inicio
Escrever:"Introduza a letra que pretende utilizar:L-ligar D-desligar F-furar
";
Ler: letra;

Se (letra=='l') então
Escrever:"Ligar ";
Senão se(letra=='d') então
Escrever:"Desligar"; Inicio
Senão se (letra=='f') então
Escrever:"Furar";
Senão Introduza a letra que pretende utilizar:L-
Escrever"Operacao invalida"; ligar D-desligar F-furar
Fim
letra
Fluxograma:

N S
Se (letra=’l’)

N S
Se (letra=’d’) Ligar

Desligar
N Se (letra=’f’) S

Operacao invalida Furar

Fim

47
EXERCÍCIO 10:

“Utilização da estrutura repetir-até permite garantir que o valor da nota


introduzida está situado entre 0 e 20”

Represente o algoritmo e depois o fluxograma.

Algoritmo:

início
repetir Inicio
escrever "Introduzir nota entre 0-20:";
ler nota;
até nota>= 0 e nota<=20;
fim
Repetir

Introduza a nota
entre 0-20

nota

nota>=0 e N
nota<=20

Fim

48
EXERCÍCIO 11:

“Utilização da estrutura enquanto-fazer permite calcular a tabuada de um


número.”

Represente o algoritmo e depois o fluxograma. Inicio

Algoritmo: Introduza
número
Início
i=1;
escrever "Introduza número:"; numero
ler numero;
enquanto i<=10 fazer
resultado=numero*i;
escrever resultado;
i=i+1; Enquanto N
i<=10
fim-enquanto
fim
S

Resultado=numero*i

Resultado

i=i+1

Fim
enquanto

Fim

49
EXERCÍCIO 12:

“Utilização da estrutura para-fazer permite calcular a soma os 100 primeiros


números inteiros.”

Represente o algoritmo e depois o fluxograma.

Algoritmo:

início
soma=0;
para i=1; i<100; i= i+1 fazer
soma=soma + i; Inicio
fim-para
escrever soma;
fim Para i=1;
Nº vezes ciclo i<100; i=i+1
fazer

fazer

soma=soma+i

Fim-para

Resultado da
soma

Fim

50
EXERCÍCIO 13:

“Receber dois números e dar o resultado da soma dos dois números –


utilizando uma função”

Represente o algoritmo e depois o fluxograma.


Inicio
Algoritmo: Entre com
valor de a:

Inicio
Escrever:"Entre com o valor de a: "; a
Ler a;
Escrever: "Entre com o valor de b: ";
Ler b;
Entre com
Calculo da função: resultado = soma(a, b); valor de b:
escrever: "O resultado é:", resultado;

Fim
b
Função: soma (int a, int b)
Inicio
Calculo: r = a + b;
Retornar: valorde r; Função:
Fim da função Soma(a,b)
S
Inicio da
função
Retorna valor: r

r=a+b Recebe valor função:


Resultado=soma(a,b)

Retorna valor de: r

Resultado
Fim
Função

Fim

51
EXERCÍCIO 14:

“Fazer aparecer no ecrã a seguinte frase: Carta de Setembro – utilizando um


procedimento”

Represente o algoritmo e depois o fluxograma.

Algoritmo:

Procedimento: carta ()
Inicio
Escrever: “ Carta de Setembro”;
Fim do procedimento

Inicio
Nome do procedimento: carta ();
Fim

S
Inicio do Inicio
procedimento

Carta de Procedimento:
Setembro Carta()

Fim Fim
procedimento

52
PROGRAMA
Programa

É um algoritmo escrito de forma a ser executado por um computador.

PARTES DE UM PROGRAMA

- Começa-se por descrever os objectos manipulados pelo programa.

- Em seguida, descreve-se, numa linguagem apropriada, um algoritmo


que efectua a manipulação desses objectos.

- No que respeita aos objectos manipulados, programa manipula valores


de variáveis.

- Tipicamente, o computador começa por receber certos valores para


algumas das variáveis do programa.

- Seguidamente, efectua operações sobre essas variáveis, possivelmente


atribuindo valores a novas variáveis, chegando finalmente a um conjunto de
valores, que constituem o resultado do programa.

- As operações a efectuar sobre os objectos devem ser compreendidas


pelo agente que executa o algoritmo.

- Estas acções devem ser suficientemente elementares para poderem ser


executadas facilmente pelo agente que executa o algoritmo.

53
TIPOS DE ERROS NUM PROGRAMA

Um programa de computador pode apresentar dois tipos de erros


distintos:

- Erros de natureza sintáctica;


- Erros de natureza semântica.

ERROS SINTÁCTICOS

- Resultam do facto de o programador não ter escrito as instruções do


seu programa de acordo com as regras de gramática de linguagem de
programação utilizada.
- A detecção destes erros é feita pelo processador da linguagem, o qual
fornece normalmente um diagnóstico sobre o que provavelmente está errado.
- Todos os erros de natureza sintáctica têm de ser corrigidos antes da
execução das instruções, ou seja, o computador não executará nenhuma
instrução sintacticamente incorrecta.

ERROS SEMÂNTICOS

- Resultam do facto de o programador não ter expressado


correctamente, através da linguagem de programação, a sequência de acções a
ser executada (o programador queria dizer uma coisa, mas disse outra).

- São também conhecidos por erros de lógica e são muito mais difíceis
de detectar do que os erros de carácter sintáctico.

54
Programação em Linguagem C

Esta linguagem é uma ferramenta na programação de qualquer tipo de


sistema (sistemas operativos, electrónicos, processadores, transmissão,
engenharia, física, etc.), foi criada e implementada para o sistema operativo
(S.O.) Unix por Dennis Ritchie.

A forma como os programas são traduzidos para a linguagem de


máquina classifica-os em duas categorias:
- Interpretados;
- Compilados.

INTERPRETADORES

Lê a primeira instrução do programa, faz uma consistência da sua


sintaxe e se não houver erro converte-a para linguagem de máquina para
finalmente executá-la. Segue, então, para a próxima instrução, repetindo todo
processo até que a última instrução seja executada sem erros.

COMPILADORES

Lê a primeira instrução do programa, faz uma consistência da sua


sintaxe e se não houver erro converte-a para linguagem de máquina e, em vez
do executá-lo, segue para a próxima instrução, repetindo todo processo até que
a ultima instrução seja atingida sem erros.

55
Estrutura de um programa

Forma geral das funções:

main ( )  primeira função a ser executada


{  inicia o corpo da função
}  termina a função

Função main ( )

- Deve existir em algum lugar do programa e marca o ponto de início da


execução do programa.

Função printf ( )

- É uma das funções de E/S (entrada ou saída), utilizada para fazer a


representação escrita no ecrã (dialogo Homem-máquina) ou para pedir o valor
de uma dada variável.

Função scanf ( )

- É outra das funções de E/S, utilizada para fazer a leitura de uma


variável.

56
Exemplo:

Programa para ler um número e fazer a sua escrita.

#include<stdio.h>
void main ( )
{
int num;
printf (“Introduza um número”);
scanf (“%d”, &num);
printf (“O número introduzido foi:%d”, num);
}

#include<stdio.h>
- Informa o compilador que deve incluir a informação na biblioteca
stdio (standard input/output).

void main ( )
- Marca o início da execução do programa.

{
}
- Limitem as instruções.

int num

- Define o tipo de variável “num”, como número inteiro.

printf (“…” )
- Podemos dizer que é o menu do operador, o que é representado entre
plicas “…” aparece no ecrã.

Scanf ( )

- Faz a leitura de um dado valor ou variável.

57
Tipos de variáveis e constantes
As variáveis e constantes são os tipos de dados básicos manipulados
num programa.
A declaração das variáveis permite definir o seu tipo e, eventualmente,
o seu valor inicial.
Estão definidos cinco tipos básicos de dados na linguagem C:

As variáveis são declaradas usando a sintaxe


tipo nome_variavel;

String’s e array’s são declaradas colocando-se a dimensão entre


parêntesis rectos.

Exemplo de declaração de variáveis:

int x; /* variável inteira */


#include <stdio.h>
void main()
{
int x;
printf("introduza um numero inteiro: ");
scanf("%d", &x);
printf("O numero x= %d", x);
getch();
}

58
char frase[80]; /* string ou array de caracteres */

#include <stdio.h>
void main()
{
char frase[80];
printf("introduza um nome: ");
scanf("%s", frase);
printf("O nome = %s", frase);
getch();
}

float y; /* variáveis reais */

#include <stdio.h>
void main()
{
float y;
printf("introduza um numero real: ");
scanf("%f", &y);
printf("O numero real= %f", y);
getch();
}

As variáveis podem também ser inicializadas logo na declaração, por


exemplo:

int i = 0;
float eps = 1.0e-5

59
Caracteres

Exemplo:
#include <stdio.h>
void main()
{
int num;
printf("Introduza\b um\n numero\r inteiro\t:\\");
scanf("%d", &num);
printf("O numero = %d", num);
getch();
}

Declarar constantes
- Usa-se a palavra reservada define segundo a sintaxe:

#define nome_constante valor


Exemplos:
#define min 0
#define max 200

#include <stdio.h>
#define min 0
#define max 20
void main()
{
printf("O numero minimo=%d e o maximo=%d", min, max);
getch();
}

60
Caracteres de conversão

- Utilizados em instruções de E/S

Operadores aritméticos

Existem os seguintes operadores aritméticos:

Exemplo:
#include <stdio.h>
void main()
{
int x,y;
float a,b;
x=10;
y=5;
printf("%d\n",x/y); /* Mostra 2 */
printf("%d\n",x%y); /* Mostra 0 */
a=1;
b=2;
printf("%f", a/b); /* Mostra 0.5 */
getch();
}

61
Operadores Relacionais
Os operadores relacionais, tal como o nome indica, têm como objectivo
obter a relação que os operandos podem ter entre si. Na linguagem C estão
definidos os seguintes operadores relacionais:

Subjacente aos operadores relacionais está a ideia de verdadeiro e falso.


Em C, verdadeiro é qualquer valor diferente de zero e falso é zero. As
expressões que usam operadores relacionais devolvem 0 para falso e 1 para
verdadeiro. O programa seguinte ilustra a utilização dos operadores
relacionais e mostra o resultado como 0 ou 1.

#include <stdio.h>
void main()
{
int i,j;
printf("Intruduza dois números: ");
scanf("%d %d",&i,&j);
printf(" %d = = %d é %d.\n",i,j, i= =j);
printf(" %d != %d é %d.\n",i,j, i!=j);
printf(" %d <= %d é %d.\n",i,j, i<=j);
printf(" %d >= %d é %d.\n",i,j, i>=j);
printf(" %d > %d é %d.\n",i,j, i>j);
printf(" %d < %d é %d.\n",i,j, i<j);
getch();
}

62
Operadores lógicos
Os operadores lógicos são usados para efectuar as operações lógicas
elementares: E lógico, OU lógico e Negação. Os operadores lógicos usados na
linguagem C são:

O programa seguinte mostra a utilização dos operadores lógicos:


#include <stdio.h>
void main()
{
int i,j;
printf("Introduza dois numeros: ");
scanf("%d %d",&i,&j);
if (i>10&&j>10)
{
printf("Numeros > 10");
}
else if(i==0||j==0)
{
printf("Aparece um numero valor zero");
}
else
printf("valores < 10");
getch();
}

63
Estruturas de controlo

As estruturas de controlo são a essência de qualquer linguagem de


programação uma vez que determinam a sequência pela qual as instruções de
um programa são executadas.

Estruturas de Decisão

Instrução if..else
Uma das estruturas de decisão é a instrução if que admite diversas
variantes. A forma genérica desta instrução é:

if condição
instrução1;
else
instrução2;
sendo o else opcional. A condição é uma expressão que é avaliada. Se for
verdadeira (tiver um valor não nulo) é executada a instrução1, se for falsa
e existir o else então é executada a instrução2

Podemos assim ter os seguintes casos:

64
As instruções if podem ser encadeadas, podendo ser usada uma
combinação entre as duas sintaxes (com e sem else).

if (condição1)
if (condição2)
instrução1
else
instrução2

Exemplo: Introduza dois números e faça a comparação destes.


#include <stdio.h>
void main()
{
int num1,num2;
printf("Introduza dois numeros: ");
scanf("%d %d",&num1,&num2);
if (num1= =num2)
printf("**Os numeros sao iguais**");
if(num1>num2)
printf("**O numero 1 e maior**");
else
printf("**O numero 2 e maior**");
getch();
}

Nota: Um else pertence ao if mais interior que ainda não tem associado
um else.

65
Instrução else..if

Uma construção comum em C são os else..if’s encadeados. A sua


sintaxe é:

Esta sequência de else..if´s é uma maneira de implementar uma


decisão múltipla. O computador avalia as condições de cima para baixo e logo
que encontre uma verdadeira executa a instrução que lhe está associada,
ignorando o resto da cadeia. Se nenhuma das condições for verdadeira então é
executada a instrução correspondente ao último else. Este último else
pode não existir, caso em que, se as condições forem todas falsas, nenhuma
instrução é executada.
Exemplo:

66
Instrução switch

Permitir construir uma estrutura de escolha múltipla. Nesta instrução é


testada sucessivamente uma variável para verificar se coincide com uma lista
de valores inteiros (ou caracteres).

A sintaxe desta instrução é:

switch (variável)
{
case exp_1 : instr_1; break;
case exp_2 : instr_2; break;
...
default : instr_n; break;
}
Cada um dos casos é rotulado por uma ou mais constantes inteiras ou
expressões com constantes, i. e., exp_i pode ser um inteiro, um carácter ou
uma expressão de constantes. Se a variável coincidir com um dos casos a
execução começa a partir desse ponto. Todos os casos exp_i têm de ser
diferentes. O caso com rótulo default é executado se não houver mais
nenhuma coincidência.

67
A instrução switch é bastante usada para processar comandos a partir
do teclado, tais como a selecção de opções num menu. Por exemplo podemos
ter uma função que devolva um valor consoante a opção seleccionada.
#include <stdio.h>

void main()
{
int ch;
int escolha;

do{

printf(" Ler nome - 1\n ");


printf(" Ano_nascimento - 2\n ");
printf("Escolha opção: ");
scanf("%d",&ch);
switch (ch)
{
case 1 : ler_nome(); break;
case 2 : ano_nascimento(); break;
default :
printf("Opção inválida!");break;
}
printf("\nQuer sair: Escolha numero>2! ");
scanf("%d", &escolha);
system("cls");
}while((escolha>=1)&&(escolha<=2));
getch();
}
ler_nome()
{
char frase[80];
printf("introduza um nome: ");
scanf("%s", frase);
printf("O nome = %s", frase);
}
ano_nascimento(int ano_nasc)
{
printf("Introduza ano nascimento: ");
scanf("%d", &ano_nasc);
printf("Nasceu em %d", ano_nasc);
}

68
Ou,
#include <stdio.h>

void main()
{
char escolha, ch;

do{
printf(" Ler nome - a\n ");
printf(" Ano_nascimento - b\n ");
printf("Escolha opção: ");
scanf("%s",&ch);
switch (ch)
{
case 'a' : ler_nome(); break;
case 'b' : ano_nascimento(); break;
default :
printf("Opção inválida!");break;
}
printf("\nQuer sair: S-sim ou N-nao");
scanf("%s", &escolha);
}while (escolha!='s');
getch();
}
ler_nome()
{
char frase[80];
printf("introduza um nome: ");
scanf("%s", frase);
printf("O nome = %s", frase);
}
ano_nascimento(int ano_nasc)
{
printf("Introduza ano nascimento: ");
scanf("%d", &ano_nasc);
printf("Nasceu em %d", ano_nasc);
}

69
Estruturas de Repetição ou Ciclos

Os ciclos permitem ao computador executar uma sequência de


instruções repetidamente até que deixe de ser satisfeita uma determinada
condição. Em C estão definidos três tipos de ciclos: ciclos for, ciclos while
e ciclos do..while.

Ciclo while

O ciclo while tem a sintaxe:

while (expressão)
instrução;

Este ciclo continua até que a expressão tenha um valor nulo (falso), passando
então o controlo do programa para a instrução na linha seguinte ao ciclo.

Exemplo:
A seguinte função espera até que se introduza o carácter ‘a’:

#include <stdio.h>

void main()
{
char c;
while(c!='a')
scanf("%c", &c);
}

70
Ciclo for

O ciclo for tem a sintaxe:

for (expr_1 ; expr_2 ; expr_3)


instrução;

O ciclo for será executado enquanto a condição for verdadeira.


Quando a condição se tornar falsa o programa prossegue na instrução a seguir
ao ciclo.

O programa seguinte permite escrever todos os inteiros entre 1 e 100.

Ciclo do..while

O ciclo do..while testa a condição no fim do ciclo pelo que as


instruções que fazem parte do corpo do ciclo são executadas pelo menos uma
vez.

71
A forma genérica do ciclo do..while é:

do
{
instrução;
}
while (expressão);
A instrução é executada e depois é avaliada a expressão. Se for
verdadeira a instrução é executada novamente e assim sucessivamente até que
a expressão seja falsa (valor nulo).

O programa seguinte lê inteiros do teclado até que seja introduzido um


número igual ou superior a 100.
#include <stdio.h>
void main()
{
int n;
do{
scanf("%d", &n);
}while (n<100);
getch();

Instruções break e continue

Instruções break
A instrução break, que já foi usada para sair da instrução switch,
força a saída do ciclo for, while ou do mais interior sem testar a
condição de fim de ciclo.

72
No programa seguinte o ciclo for mostra no monitor os números de 0
a 10 e depois o break termina o ciclo, ultrapassando o teste condicional
t<100 incluído no ciclo.

Instruções continue

A instrução continue obriga a que o ciclo for, while ou


do..while inicie um novo ciclo saltando qualquer código intermédio, i. e..

De cada vez que x é um número ímpar, a instrução condicional if é


executada porque x%2 é 1, correspondendo ao valor lógico verdadeiro. Um
número ímpar leva assim à execução do continue que provoca uma nova
iteração do ciclo, passando por cima do printf.
Instrução return

73
É possível implementar funções que devolva valores. O retorno de
valores de funções é feito usando a instrução return, que tem a seguinte
sintaxe:
return expressão;

A instrução return faz com que o controlo do programa passe para a


função chamadora.

Consideremos como exemplo o seguinte programa que efectua a cálculo da


área de um quadrado.

Array ´s

74
Um array é um conjunto de variáveis do mesmo tipo que podem ser
referenciadas por um identificador comum. Em C um array consiste num
conjunto de posições de memória contíguas, o menor endereço corresponde ao
primeiro elemento e o maior endereço corresponde ao último elemento. Um
array pode ter apenas uma dimensão (array unidimensional ou vector) ou
várias (array multidimensional ou matriz). Como já foi referido, em C os
array’s são declarados da mesma forma que uma variável elementar só que se
coloca a dimensão entre parêntesis rectos a seguir à identificação da variável:

tipo nome_variável[dimensão];

75
Declaração de um vector

<tipo> identificador [<número de posições>];

O seguinte excerto de programa declara um array de inteiros com 10


elementos (x[0] a x[9]) e preenche os elementos com os valores de 0 a 9,
usando um ciclo for.

#include <stdio.h>

void main()
{
int x[10];
int t;
for(t=0;t<10;++t)
{
x[t]=t;
printf("%d\n", x[t]);

}
getch();
}

76
Declaração de matrizes
Dimensões:

<tipo> nome da matriz [<dim1>] [<dim2>] : : : [<dimN>]

Essa matriz possui dim1 x dim2 x … x dimN variáveis do tipo <tipo>

nome da matriz [<linha] [<coluna>]

Exemplo: Exemplo:
Escreva a matriz A = (ai j)2 x 3
- Declarando a matriz: A matriz A é de ordem 2 x 3, então
podemos escrevê-la assim:
int matriz [2][3];

- Leitura de uma matriz:

for (i = 0; i < 2; i++)


for (j = 0; j < 3; j++)
{
printf ("Matriz[%d][%d]: ", i, j);
scanf ("%d", &matriz[i][j]);
}
- Escrita de uma matriz:

for (i = 0; i < 2; i++)


{
for (j = 0; j < 3; j++)
printf ("%3d ", matriz[i][j]);
printf ("\n");
}

77
Exercícios programação em C – Compilador Dev-C++

1. Dado o ano de nascimento determinar a idade.

Resolução:

Algoritmo

Inicio
Escrever no ecrã: “Qual o ano de nascimento”;
Ler ano nascimento;
Escreve no ecrã: “Qual o ano actual”;
Ler ano actual;
Idade = ano actual – ano nascimento;
Escrever no ecrã:”Tem”, idade, “anos”;
Fim

Programação

#include <stdio.h>

void main()
{
int anonasc, anoactual, idade;
printf ("Qual o ano de nascimento: ");
scanf ("%d", &anonasc);
printf (" \n");
printf ("Qual o ano actual: ");
scanf ("%d", &anoactual);
idade=anoactual-anonasc;
printf (" \n");
printf ("Tem %d anos \n", idade);
printf (" \n");
getch();
}

78
2. Peça ao utilizador dois números e apresente a soma deles.

Algoritmo

Inicio
Escrever:’ Introduza um número inteiro’
Ler: número1
Escrever:’ Introduza outro número inteiro’
Ler: número2
Calcular: soma = número1+número2
Escrever: (‘A soma é: ‘, soma)
Fim

Programação

#include <stdio.h>

void main()
{
int num1, num2, soma;
printf ("Introduza um numero inteiro: ");
scanf ("%d", &num1);
printf (" \n");
printf ("Introduza outro numero inteiro: ");
scanf ("%d", &num2);
soma=num1+num2;
printf (" \n");
printf ("A soma e: %d \n", soma);
printf (" \n");
getch();
}

79
3. Dado um número, calcule o quadrado deste.

Algoritmo
Inicio
Escrever:’ Digite um número’
Ler: número
Calcular: quadrado = número*número
Escrever: (‘o quadrado do número é ‘, quadrado)
Fim
Programação

#include <stdio.h>
void main()
{
int num, quadrado;
printf ("Introduza um numero inteiro: ");
scanf ("%d", &num);
printf (" \n");
quadrado=num*num;
printf (" \n");
printf ("O quadrado do numero e: %d \n", quadrado);
printf (" \n");
getch();
}

Exemplo: Dado um número, calcular a raiz quadrada deste (deve utilizar a função
matemática)

#include <stdio.h>
#include <math.h>
void main()
{
float num, raiz_quad;
printf ("Introduza um numero inteiro: ");
scanf ("%f", &num);
printf (" \n");
raiz_quad=sqrt(num);
printf (" \n");
printf ("O quadrado do numero e: %f \n", raiz_quad);
printf (" \n");
getch();
}

80
4. Dada uma nota de um aluno dizer se ele teve aprovação à disciplina –

aprovado se tem nota maior ou igual a 9.5

Algoritmo

Inicio
Escreve: ‘Introduza a nota:’
Ler: nota
Se nota >= 9.5 então
escreve: ‘O aluno foi aprovado’
Fim

Programação

#include <stdio.h>

void main()
{
float nota;
printf ("Introduza a nota: ");
scanf ("%f", &nota);
printf (" \n");
if (nota>=9.5)
printf ("O aluno foi aprovado. \n");
getch();
}

81
Exemplo:
Dados dois números decimais, mostra o resultado da divisão dos dois números.

#include <stdio.h>

void main()
{
float num1, num2;
printf("Escreva o primeiro numero: ");
scanf("%f",&num1);
printf(" \nEscreva o segundo numero: ");
scanf("%f",&num2);
if (num2 = =0)
printf("\n\nO segundo numero tem de ser diferente de zero!!!\n\n");
else
printf("\n\nO valor da divisao dos dois numero: %f\n\n",num1/num2);
getch();
}

82
5. Dá um número e verifique se ele é negativo ou positivo.

Algoritmo

Inicio
Escreve: ‘Digite um número’
Ler: número
Se o número é <O, então
escreve: ‘Número negativo’
senão escreve:’Número é positivo’
Fim

Programação

#include <stdio.h>

void main()
{
float num;
printf ("Introduza um numero: ");
scanf ("%f", &num);
printf (" \n");
if (num<0)
printf ("Numero negativo. \n");
else
printf ("Numero positivo. \n");
getch();
}

83
6. Dado três números, informar qual o maior número.

Algoritmo
Inicio
Escreva: " Introduza primeiro numero: ";
Ler: num1;
Escrever:" Introduza o segundo numero: ";
Ler: num2;
Escrever:" Introduza o terceiro numero: ";
Ler: num3;
Se ((num1>=num2) e (num1>=num3)) então
maximo=num1;
Senão
Se (num2>=num3) então
maximo=num2 ;
Senão
maximo=num3 ;
Escreve: “o maior e : %d", maximo;
Fim
Programação
#include <stdio.h>

void main()
{
int num1,num2,num3,maximo;
printf(" Introduza primeiro numero: ");
scanf("%d", &num1);
printf(" Introduza o segundo numero: ");
scanf("%d", &num2);
printf(" Introduza o terceiro numero: ");
scanf("%d", &num3);
if ((num1>=num2)&&(num1>=num3))
maximo=num1;
else if(num2>=num3)
maximo=num2 ;
else
maximo=num3 ;
printf("o maior e : %d", maximo);
getch();
}

84
7. Escolha opção de dois números de alunos, e devolver o nome do aluno.

Algoritmo
Inicio
Escrever:"Escolha opcao: 2000 ou 2001 : ";
Ler: num;
Se (num=2000) então
Escrever:"Carlos Lopes";
Senão se (num=2001)
Escrever:"Miguel Mendes";
senão
Escrever:"Operacao invalida";
Fim

Programação

#include <stdio.h>

void main()
{
int num;
printf("Escolha opcao: 2000 ou 2001 : ");
scanf("%d", &num);
if (num= =2000)
{
printf("Carlos Lopes");
}
else if (num= =2001)
printf("Miguel Mendes");
else
printf("Operacao invalida \n");
getch();
}

85
8. Considere uma máquina que permite apenas três operações: ligar,
desligar e furar. Utilize a instrução switch.

Algoritmo
Inicio
Escreve: ‘Introduza a letra que pretende utilizar: L-ligar D-desligar F-furar’
Ler: letra
Seleccionar
Caso ‘L’ escrever:’Ligar’
Caso ‘D’ escrever ‘Desligar’
Caso ‘F’ escrever ‘Furar’
senão
escreve: ‘Operação inválida’
Fim

Programação

#include <stdio.h>

void main()
{
char letra;
printf("Introduza a letra que pretende utilizar:L-ligar D-
desligar F-furar ");
scanf("%c",&letra);

switch (letra)
{
case 'l':
printf("Ligar \n");
break;
case 'd':
printf("Desligar \n");
break;
case 'f':
printf("Furar \n");
break;
default:
printf("Operacao invalida \n");
}
getch();
}

86
9. Utilização da estrutura cíclica Do-While que permita garantir que o
valor da nota introduzida esteja situado entre 0 e 20.

Algoritmo

início
repetir
escrever "Introduzir nota entre 0-20:";
ler nota;
até nota>= 0 e nota<=20;
fim

Programação

#include <stdio.h>

void main()
{
float nota;
do
{
printf("Introduzir nota entre 0-20: ");
scanf("%f",&nota);
}
while (nota>=0 && nota<=20);
getch();
}

87
10. Escreva no ecrã os números naturais até 10 – utilize o ciclo while.

Resolução:

Algoritmo
Inicio
Conta=0;
Enquanto Conta<10;
Inicio
Conta = Conta +1;
Escrever no ecrã:”O resultado da conta”, Conta;
Fim
Fim

Programação

#include <stdio.h>

void main()
{
int conta;
conta=0;
while (conta < 10)
{
conta=conta+1;
printf("%d \n", conta);
printf(" \n");
}
getch();
}

88
10.1 Calcular a tabuada de um número – utilize o ciclo while.

Resolução:

Algoritmo
Inicio
Escrever:”Introduza o numero:”;
Ler: numero;
i=1;
Enquanto i<=10;
Inicio ciclo
resultado = numero *i;
Escrever: “ ”, numero;
Escrever:” * “, i;
Escrever:”= “, resultado;
i=i+1;
Fim ciclo
Fim

Programação

#include <stdio.h>

void main ()
{
int numero , resultado , i;
printf(" Int roduza o numero : ") ;
scanf ("%d", &numero);
i =1;
while (i<=10)
{
resultado=numero*i;
printf("%d", numero);
printf("*%d", i);
printf("=%d \n", resultado);
i++;
}
getch();

89
}

90
11. Utilização do ciclo for, que permita calcular a soma dos 10 primeiros
números inteiros.”

Algoritmo

início
soma=0;
para i=1; i<10; i= i+1 fazer
soma=soma + i;
fim-para
escrever:” ”, soma;
fim
Programação
#include <stdio.h>

void main ()
{
int soma,i;
soma=0;
for (i=1; i<10; i++)
{
soma=soma+i;
printf("valor da soma = %d \n", soma);
}
getch();
}
Exemplo:

Escreva no ecrã os números naturais até 10 (ciclo for).

#include <stdio.h>

void main()
{
int i;
for ( i = 1 ; i <= 10 ; i = i + 1)
printf("%d \n", i);
getch();
}
Exercício:

Apresente no ecrã todos os pares inteiros de 2 até 100 (ciclo for).

91
12.Escreva no ecrã Hello até 10 (ciclo Do … While).

#include <stdio.h>

void main()
{
int count;
count=0;
do
{
++count;
printf("%d Hello \n", count);
}while (count < 10);
getch();
}

92
13.Escreva no ecrã os números pares até 100 (função continue).

#include <stdio.h>

void main()
{
int x ;

for ( x=0 ; x<=100 ; x++) {


if (x%2) continue;
printf("%d\n" , x);

}
getch();
}

93
14. “Receber dois números e dar o resultado da soma dos dois números –
utilizando uma função”

Algoritmo
Inicio
Escrever:"Entre com o valor de a: ";
Ler a;
Escrever: "Entre com o valor de b: ";
Ler b;
Calculo da função: resultado = soma(a, b);
escrever: "O resultado é:", resultado;

Fim

Função: soma (int a, int b)


Inicio
Calculo: r = a + b;
Retornar: valorde r;
Fim da função

Programação
#include <stdio.h>
void main()
{
int a, b, resultado;
printf("Entre com o valor de a: ");
scanf("%d", &a);
printf("Entre com o valor de b: ");
scanf("%d", &b);
resultado = soma(a, b);
printf("O resultado:%d", resultado);
getch();
}

soma (int a, int b)


{
int r;
r = a + b;
return (r);
}

94
15. “Fazer aparecer no ecrã a seguinte frase: Carta de Setembro – utilizando
um procedimento”

Algoritmo

Procedimento: carta ()
Inicio
Escrever: “ Carta de Setembro”;
Fim do procedimento

Inicio
Nome do procedimento: carta ();
Fim

Programação

#include <stdio.h>

carta ()
{
printf(" Carta de Setembro");
getch();
}

void main()
{
carta ();
}

95
16. Como armazenar as notas de 100 alunos? Utilizar a estrutura de um
vector.

Algoritmo
Inicio
nota[100];
Escrever:("Numero de alunos: ");
Ler: numero alunos;
para i=0; i<numero alunos; i= i+1 fazer
Inicio ciclo
Escrever:("Nota do aluno : ", i+1);
Ler: nota[i];
Fim ciclo
Fim

Programação
#include <stdio.h>
void main()
{
float nota[100];
int n, i;
printf("Numero de alunos: ");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("Nota do aluno %d: ", i+1);
scanf("%f", &nota[i]);
}
}

96
Exemplo:

Agora quero saber a nota de um aluno.

#include <stdio.h>
void main()
{
float nota[100];
int n, i;
printf("Numero de alunos: ");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("Nota do aluno %d: ", i);
scanf("%f", &nota[i]);
}
printf("Qual é o aluno?");
scanf("%d", &i);
printf("Nota do aluno %f ", nota[i]);
getch();
}

97
17. Leitura e escrita de uma matriz 4x4. Utilizar a estrutura de matrizes.

Algoritmo
Inicio
matriz [4][4];
Para i = 0; i < 4; i++ fazer
Para j = 0; j < 4; j++ fazer
Inico ciclo
Escrever: ("Matriz[] []: ", i, j);
Ler: matriz[i][j];
Fim ciclo
Para i = 0; i < 4; i++ fazer
Inicio ciclo
Para j = 0; j < 4; j++ fazer
Escrever: matriz[i][j];
Fim ciclo
Fim

Programação

#include <stdio.h>
void main()
{
int matriz [4][4];
int i, j;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
{
printf ("Matriz[%d][%d]: ", i, j);
scanf ("%d", &matriz[i][j]);
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
printf ("%3d ", matriz[i][j]);
printf ("\n");
}
getch();
}

98
Ou

#include <stdio.h>
void main()
{
int matriz [2][2];
int i, j, linhas, colunas;
printf("Introduza o numero de linhas:");
scanf("%d", &linhas);
printf("Introduza o numero de colunas:");
scanf("%d", &colunas);
for (i = 0; i < linhas; i++)
for (j = 0; j < colunas; j++)
{
printf ("Matriz[%d][%d]: ", i, j);
scanf ("%d", &matriz[i][j]);
}
for (i = 0; i < linhas; i++)
{
for (j = 0; j < colunas; j++)
printf ("%3d ", matriz[i][j]);
printf ("\n");
}
getch();
}

99
Programação em MatLab

MatLab (deriva de MATrix LABoratory) é um sistema interactivo,


baseado na representação matricial para a resolução de problemas, no âmbito
científico e de engenharia, e na sua visualização gráfica. Possui um conjunto
de “Toolboxes” (Sistemas de Controlo, Optimização, Redes Neuronais
Artificiais) que permitem resolver classes particulares de problemas.

Acesso ao MatLab

O acesso ao MatLab pode ser feito através do menu ou clicando no


ícone respectivo.

O ambiente do MatLab tem o seguinte aspecto:

100
É a seguir ao “prompt”, », que cada instrução deve ser introduzida. As
instruções devem ser inseridas em letras minúsculas. As variáveis introduzidas
em minúsculas e em maiúsculas correspondem a variáveis diferentes.

Exemplo:
» x =1

Lista dos comandos do MatLab mais vulgares

who lista o nome das variáveis em memória;


dir lista os ficheiros do corrente directório;
clear apaga todas as variáveis que estão na memória;
clc limpa toda a janela

Ficheiros do MatLab

Os ficheiros com extensão mat, armazenam as variáveis de sessões em


MatLab;

» save sessão

Como após a saída do MatLab, todas as variáveis são perdidas, o


comando save pode ser utilizado para gravar os valores de todas essas
variáveis num ficheiro (de preferência numa disquete) com o nome
sessao.mat. Para aceder mais tarde, às variáveis dessa sessão, fazer;

» load sessao

101
Os ficheiros com extensão m, são ficheiros que podem conter
instruções em MatLab e funções. São interpretados pelo MatLab.

Elementos Básicos

As expressões que se escreve na linha de comando do MatLab são


interpretadas e calculadas. Os comandos no MatLab são da forma:
variável = expressão, ou simplesmente
expressão

As expressões são usualmente compostas por operadores, funções ou/e


nome de variáveis. O cálculo de uma expressão produz uma matriz, que é
escrita no ecran e atribuída a uma variável para uso futuro. Se o nome da
variável e o sinal = são omitidos, a resposta é guardada numa variável com o
nome ans que é automaticamente criada. O sinal de igualdade, =, é usado
para atribuir valores a variáveis.

102
Exemplos:
» 2+3
» 3*4,4^2
» 2+3*4^2
» x=3,y=x^2
» y/x
» z=2*ans,ans
» a=sqrt(2)
» format long,b=sqrt(2)
» a-b
» format short

Por defeito, a apresentação dos resultados é com 4 casas decimais.


Outros possíveis comandos,

format short e notação científica com 4 casas decimais;

format long e notação científica com 15 casas decimais;

format hex formato hexadecimal;

format bank dollars e cents.

103
Matrizes

MatLab trabalha essencialmente com matrizes rectangulares com a


possibilidade de entrada de valores complexos. Todas as variáveis
representam matrizes sem que estas tenham que ser dimensionadas. Em
particular, matrizes 1 por 1 são interpretadas como escalares e matrizes com
uma só linha ou coluna interpretadas como vectores.

Matrizes podem ser introduzidas de várias maneiras:

- Entrada por uma lista explicita de elementos;


- Gerada por construção de funções ou comandos;
- Criada a partir de um editor (m – files);
- Editada a partir de ficheiros ou aplicações externas.
Modo mais simples:

Nome da matriz = [ a11 a12 a13 …a1n ; a21 a22 a23 … a2n ; … ; am1 am2 am3 … amn ];
Exemplo:

» A = [1 2 3; 4 5 6; 7 8 9]

ou

» A=[
123
456
7 8 9]

criam uma matriz 3 por 3 que é guardada na variável A.


Resultado:

A=

1 2 3
4 5 6
7 8 9

104
Uma matriz ou um vector só aceita números inteiros positivos para índice.

Exemplo:

Caso se pretenda criar um vector com elementos entre 0 e 20 com


espaçamento constante e igual a 2, fazer
t=0:2:20
» t=0:2:20 0 – é o inicio
2 – números pares
t= 20 – máximo número
0 2 4 6 8 10 12 14 16 18 20

Operações Matriciais

• Transposição → B=A’;
• Adição → C=A+B;
• Subtracção → D=A-B;
• Multiplicação → C=A*B;
• Divisão matricial → x=A\b; (solução de A*x=b)
→ x=A/b; (solução de x*A=b)
• Cálculo da inversa → B=inv(A);
• Cálculo do determinante → D=det(A);

O ponto antes do sinal da operação a efectuar, é utilizado quando a


operação é para ser efectuada elemento a elemento.

Exemplo:
a =[1,2,3,4] e b =[1,2,3,4] em que c =a.*b

dá o mesmo resultado que c =[1,2,3,4].^2.

105
Considere:

Calcule:

• matriz B, a transposta de A.
• soma de A+B.
• o vector y=x-1.
• x’*y

106
Funções Elementares

Trignométricas

sin seno
cos cosseno
tan tangente
asin arcosseno
acos arcocosseno
atan arcotangente
sinh seno hiperbólico
cosh cosseno hiperbólico
tanh tangente hiperbólica
asinh arcosseno hiperbólico
acosh arcocosseno hiperbólico
atanh arcotangente hiperbólica

Matemáticas elementares

abs valor absoluto ou amplitude do complexo


angle ângulo de fase
sqrt raiz quadrada
real parte real de um complexo
imag parte imaginária de um complexo
sign função sinal
exp exponencial base e
log logaritmo natural
log10 logaritmo base 10

107
Matrizes especiais
As funções mais comuns para a construção de matrizes especiais são:

eye matriz identidade


zeros matriz nula
ones matriz de uns
diag cria ou extrai diagonais
triu parte triangular superior de uma matriz
tril parte triangular inferior de uma matriz
rand matriz gerada aleatóriamente
hilb matriz de Hilbert
magic matriz quadrada mágica
toeplitz ver help toeplitz
bessel função de bessel
gama função gama completa e incompleta
rat aproximação racional
erf função erro
erfinv função erro inversa
ellipk integral elíptico do 1º tipo
ellipj função elíptica jacobiana
compan função geradora de uma matriz cujo polinómio
característico apresenta como coeficientes o vector p.

Outras funções

eig valores próprios de uma matriz


chol factorização Cholesky
inv inversa de uma matriz
lu decomposição LU
qr decomposição QR
det determinante
norm norma de uma matriz
lu decomposição LU
polyfit ajuste de um polinómio de grau n a partir de dados
(x,y)
polyval valor calculado pelo polinómio de ajuste
interp1 interpolação a uma dimensão
interp2 interpolação a 2 dimensões
spline interpolação por splines cúbicas

108
Análise de dados em coluna

Esta secção apresenta uma introdução à análise de dados usando o


MatLab e descreve algumas ferramentas elementares de estatística.

max valor máximo


min valor mínimo
mean valor médio
median valor mediano
std desvio padrão
sort ordenação
sum somatório
prod produto
cumsum somatório dos elementos cumulativos
cumprod produto dos elementos cumulativos
diff derivadas aproximadas
hist histograma
corrcoef coeficiente de correlação
cov matriz covariância

Exemplo:

Supondo a matriz A,

» A = [9 8 4;1 6 5;3 2 7]

» m = max(A)

» mv = mean(A)

» s = sort(A)

109
OPERADORES

Operadores aritméticos

• Adição ( + );
Exemplo:
• Subtracção ( - ); >> a = 4

• Transposta ( ' ); >> b =8

>> a+b
• Potência ( ^ ); ans
=12
• Multiplicação ( * );

• Divisão à esquerda( \ );

• Divisão à direita ( / ).

Operadores relacionais

• < menor que


Exemplo:
• < = menor ou igual a >> a = 4

>> b =8
• > maior que
>> a<b
• > = maior ou igual a
ans =
• = = igual a 1

• ~ = diferente de

110
PROGRAMAÇÃO

Comentário

% no início de uma linha faz com que essa linha seja ignorada na execução do
programa.

% <comentário>

Exemplo:

% Programa para calcular


% médias aritméticas. Para
% finalizar a entrada dos
% têrmos, digite "0".

Atribuição do valor de uma variável

<variável> = <valor>;

Exemplos:

soma = 0;
valor_lido = 1;
soma = soma + valor_lido;
media = soma / 4;

111
Saída de dados

fprintf

A função fprintf mostra um ou mais valores em conjunto com texto e


permite ao programador controlar a forma como os valores são mostrados.

A forma mais genérica da função é:

fprintf(format, data)

• O parâmetro format é uma string que indica o formato em que


vão ser mostrados os dados;
• O parâmetro data, é um ou mais escalares ou arrays a serem
mostrados.
Exemplo:

fprintf(‘O valor de pi é de %f \n’, pi)


Resultado:

O valor de pi é de 3,141593

disp

Mostrar <variável>
A saída de dados é mostrada no monitor e o valor da <variável> pode
ser uma constante ou pode ser introduzida pelo teclado.
disp(<variável>);

Exemplo:
soma=1;
disp(soma);

112
Mostrar "<mensagem>"

Mostra a saída de dados no ecrã.

disp('<mensagem>');

Exemplo:

disp('Total calculado: ');

Entrada de dados

Ler <variável> (Só para variáveis numéricas!)

<variável> = input('<mensagem>');

Exemplo:

n1 = input('Digite um numero: ');

Ler <variável> (Variável do tipo texto.)

<variável> = input('<mensagem>', 's');

Exemplo:

n1 = input('Digite seu nome: ','s');

113
ESTRUTURAS DE CONTROLO DE FLUXO

Existem quatro tipos de estruturas dependendo do tipo de instruções a


efectuar;

1. if com else e elseif – executa um grupo de instruções baseado em


alguma condição lógica;
2. switch com case e otherwise – executa diferentes grupos de
instruções dependendo do valor de alguma condição lógica;
3. while – executa um grupo de instruções num número infinito de
vezes, baseado numa condição lógica;
4. for – executa um conjunto de instruções num número finito de vezes.

Estruturas decisão

Estrutura: Se <teste> então <instruções opcionais>


if <teste>
<instruções opcionais>
end

Exemplo:

n1 = input('Digite um numero: ');


if (n1 >= 1) && (n1 <= 10)
disp('Numero entre 1 e 10.');
end

114
Estrutura: Se <teste> então <alternativa 1 de instruções>
senão <alternativa 2 de instruções>
if <teste>
<alternativa 1 de instruções>
Else
<alternativa 2 de instruções>
End

Exemplo:
n1 = input('Digite um numero: ');
if (n1 < 0)
disp('Numero negativo.');
else
disp('Positivo ou zero.');
end

Estrutura: Se <teste> então <alternativa 1 de instruções>


Senão Se<teste> então <alternativa 2 de instruções>
senão <alternativa 3 de instruções>
if <teste>
<alternativa 1 de instruções>
Elseif
<alternativa 2 de instruções>
Else
<alternativa 2 de instruções>
End
Exemplo:
num1=input('Introduza primeiro numero:');
num2=input(' Introduza o segundo numero:');
num3=input('Introduza o terceiro numero:');
if ((num1>=num2)&&(num1>=num3))
maximo=num1;
elseif(num2>=num3)
maximo=num2 ;
else
maximo=num3 ;
end
fprintf('o maior e : %d', maximo);

115
Estrutura de repetição
Estrutura:
Para <variável> = <valor inicial> até <valor final> repetir <instruções>
for <variável> = <valor inicial>:<valor final> <instruções> end

Exemplo (média de 2 números):

soma = 0;
for contagem = 1:2
n = input('Proximo num.: ');
soma = soma + n;
end
media = soma / 2;
disp(media);

116
Estrutura: Enquanto <teste> repetir <instruções>

while <teste>
<instruções>
end

Exemplo:

Calcular a tabuada de um número.


numero=input('Introduza o numero : ');
i=1;
while (i<=10)
resultado=numero*i;
fprintf('%d', numero);
fprintf('*%d', i);
fprintf('=%d \n', resultado);
i=i+1;
end

Estrutura switch

switch <expressão (escalar ou string)>


case <valor1>
<instruções>
case <valor2>
<instruções>
...
otherwise
<instruções>
end

Exemplo: com inteiros


letra=input('Introduza a letra que pretende utilizar:1-ligar 2-desligar
3-furar ');
switch (letra)
case 1
disp('Ligar');
case 2
disp('Desligar');
case 3
disp('Furar');
otherwise
disp('Operacao invalida');
end

117
Exemplo: Perguntar ao utilizador se quer sair.
x=0;
while (x==0)
letra=input('Introduza a letra que pretende utilizar:1-ligar 2-
desligar 3-furar: ');
switch (letra)
case 1
disp('Ligar');
case 2
disp('Desligar');
case 3
disp('Furar');
otherwise
disp('Operacao invalida');
end
x=input('Quer sair?1-sim ou 0-não:');
end

Exemplo: com strings


letra=input('Introduza a letra que pretende utilizar:L-ligar D-desligar
F-furar ', 's');
switch (letra)
case 'l'
disp('Ligar');
case 'd'
disp('Desligar');
case 'f'
disp('Furar');
otherwise
disp('Operacao invalida');
end

118
Tratamento Gráfico

O MatLab pode produzir gráficos a 2 dimensões, gráficos de curvas a 3


dimensões, gráficos de superfície a 3 dimensões, etc.

Exemplo:

Passos para a criação de gráfico a 2D:

• preparar os dados;

• seleccionar a janela e a posição do gráfico dentro da janela;

• chamar a função que faz o gráfico;

• seleccionar as características das linhas e dos símbolos;

• seleccionar os limites dos eixos, tamanho dos símbolos, e grelhas;

• introduzir o título, legendas dos eixos e texto no gráfico;

• imprimir o gráfico.

119
Representação gráfica
x=[1 6 15 20 25]
y=[0 3 8 11 17]  entrada dos valores das coordenadas em x e em y.
Podemos ter outras variáveis (curvas) em y.
figure(1)  abre a janela gráfica.
plot(x,y)  representa o gráfico com as coordenadas x e y.
h=plot(x,y)  definição da variável h com os valores do gráfico.

Aos gráficos pode ser dado um título, legendado, e colocado um texto


num determinado ponto no gráfico com uma string como argumento, com os
seguintes comandos,

title(‘Título’) adiciona um título ao gráfico,


xlabel(‘xx’’) adiciona uma legenda ao eixo do xx’,
ylabel(‘yy’’) adiciona uma legenda ao eixo do yy’,
zlabel(‘zz’’) adiciona uma legenda ao eixo zz’,
legend(h,’Primeira’,’Segunda’,’Terceira’) adiciona uma legenda ao gráfico
existente,
text(xvalor,yvalor,’texto’) apresenta texto numa posição especificada,
gtext(‘texto 1’) coloca texto no gráfico usando o rato

Por defeito, a escala dos eixos é feita automaticamente. No entanto, esta pode
ser alterada através de,

axis([xmin,xmax,ymin,ymax]) eixos nos limites especificados


axis auto volta ao escalonamento automatico

120
v=axis escala no vector v
axis square mesma escala para ambos os eixos
axis equal mesma escala e marcas pequenas para ambos os eixos
axis off sem escala
axis on com escala

Outros:

set(h,'linewidth',2)  a letra “h” é o nome da variável plot(x,y) e o “2” é o


tamanho do traço da curva do gráfico.

set(h,{'linestyle'},{'- -'})  a letra “h” é o nome da variável plot(x,y) e o “- -”


é colocar a curva do gráfico a tracejado.

set(h,{'color'},{'r'})  a letra “h” é o nome da variável plot(x,y) e o “r” é


colocar a curva do gráfico com a cor vermelha.

121
Exemplo:
>> x=[1 6 15 20 25];%valores de x
>> y1=[0 3 8 11 17];%valores de y1
>> y2=[0 7 8 19 21];%valores de y2
>> y3=[0 5 8 18 19];%valores de y3
>> figure(1) %abre a janela gráfica
>> h=plot(x,y1,x,y2,x,y3);% Representa gráfico
>> set(h,'LineWidth',2,{'LineStyle'},{'--';':';'-.'})% Definição das linhas dos gráficos
>> set(h,{'Color'},{'r';'g';'b'})%Definição das cores das linhas
>> axis([0 25 0 21])%Definição dos eixos
>> grid on%Mostrar as linhas e colunas dos eixos
>> xlabel('Tempo')% adiciona uma legenda ao eixo do x
>> ylabel('Amplitude')% adiciona uma legenda ao eixo do y
>> legend(h,'Primeira','Segunda','Terceira')% adiciona uma legenda ao gráfico
>> title('exemplo')%adiciona um título ao gráfico
>> [y,ix]=min(y1);%minimo de y1
>> text(x(ix),y,'miny1')%escreve o minimo ‘miny1’

No final deverá obter um gráfico semelhante ao apresentado a seguir:

122
Duas maneiras de representar várias funções num só gráfico,

» x=0:.01:2*pi;y1=sin(x);y2=sin(2*x);y3=sin(4*x); plot(x,y1,x,y2,x,y3)

e, formando uma matriz Y cujas colunas são as funções a representar


graficamente,

» x=0:.01:2*pi;y=[sin(x)',sin(2*x)',sin(4*x)']; plot(x,y)

123
Vários gráficos numa única janela

Exemplo:

» t=0:pi/20:2*pi;
» [x,y]=meshgrid(t); % ordena em colunas o valores de x e de y
» subplot(2,2,1),plot(sin(t),cos(t)) % cria um sub gráfico
» axis equal
» z=sin(x)+cos(y);
» subplot(2,2,2),plot(t,z)
» axis([0 2*pi,-2 2])
» z=sin(x).*cos(y);
» subplot(2,2,3),plot(t,z)
» axis([0 2*pi -1 1])
» z=sin(x).^2-cos(y).^2;
» subplot(2,2,4),plot(t,z)
» axis([0 2*pi -1 1])

Seguindo estas instruções obtêm-se o seguinte gráfico:

124
Adição de gráficos a gráficos já criados

O comando hold, fixa o gráfico inicialmente apresentado de modo a que


gráficos subsequentes possam ficar sobrepostos.

Exemplo:

» semilogx(1:100,'+')
» hold on
» plot(1:3:300,1:100,'-')
» hold off

Resultado final:

125
Funções Gráficas Elementares

plot gráfico com escalas lineares em ambos os eixos

loglog gráfico com escalas logarítmicas em ambos os eixos

semilogx gráfico com escala logarítmica no eixo dos xx' e escala linear no
eixo do yy'

semilogy gráfico com escala logarítmica no eixo yy' e escala linear no eixo
xx'

plotyy gráfico com escalas lineares e com dois eixos yy', um do lado
esquerdo e outro do lado direito.

126
Gráficos de matrizes

plot(y) desenha um gráfico com o eixo yy' correspondente ao vector y e o eixo


xx' com os pontos 1:m, sendo m o número de elementos do vector y;

plot(z) (matriz z) desenha um gráfico com as várias colunas da matriz z. O


eixo xx' corresponde aos pontos 1:m, sendo m o número de linhas da matriz z.

Exemplo:

» z=peaks;

» plot(z)

127
Gráficos de números complexos

plot(z) (z complexo) é equivalente a fazer


plot(real(z),imag(z))

Exemplo:

» z=[1+i 2-2i 3+i 4-8i];


» plot(z,'*')

128
Controlo dos Gráficos

plot(x,y,’cor_estilodelinha_marca’)

Cor
c cyan, m magenta, y amarelo, r vermelho, g verde, b azul, w branco, k preto

Estilo de linhas
- sólida, -- tracejada, : pontos, -. traço-ponto, none nenhuma

Marcas
+ sinal +, o círculo, * asterisco, . ponto, x cruz, square quadrado, diamond
diamante, v triângulo invertido

Gráficos a 3-D – Funções Elementares

plot3(x,y,z)

Exemplo:

» [x,y]=meshgrid([-2:.1:2]);
» z=x.*exp(-x.^2-y.^2);
» plot3(x,y,z)

129
Gráficos especiais – gráfico de barras

bar(y) gráfico de barras normal

bar3(y) gráfico de barras a 3 dimensões

bar3(y,’group’) gráfico de barras a 3 dimensões agrupado

bar(y,’stack’) gráfico de barras sobreposto

Exemplo:

Especificação dos dados do eixo do xx’


» dias=0:5:35;
» temp=[29 23 27 25 20 23 23 27];
» bar(dias,temp) %gráfico barras
» xlabel(‘Dia’)
» ylabel(‘Temperatura’)
» bar(temp, ‘r’) %cor das barras

Por defeito, os limites do yy’ são 0 e 30 – especificar outros limites

» set(gca,’Ylim’,[15 30],’Layer’,’top’)

130
Sobrepor um gráfico a um gráfico de barras

» dias=0:5:35;
» temp=[29 23 27 25 20 23 23 27];
» bar(dias,temp)
» xlabel(‘Dia’)
» ylabel(‘Temperatura (ºC)’)
» tce=[515 420 370 250 135 120 60 20];
» h1=gca;
» h2=axes(‘Position’,get(h1,’Position’));
» plot(dias,tce,’LineWidth’,3)
» set(h2,’YaxisLocation’,’right’,’Color’,’none’,
’XTickLabel’,[])
» set(h2,’Xlim’,get(h1,’Xlim’),’Layer’,’top’)

131
» text(11,380,’Concentração’,’Rotation’,-55’,
‘FontSize’,14)
» title(‘Bioremediação’,’FontSize’,14)

Gráficos especiais

Gráfico de áreas

>> y=[5 2 1;8 7 3;9 8 6;5 5 5;4 3 2];


>> area(y)

Apresentação das grelhas

>> grid on
>> set(gca,'Layer','top')
>> set(gca,'Xtick',1:5)

132
Histogramas

Exemplos:

Histogramas de um vector

» yn=randn(10000,1);
» hist(yn)

133
134
Histogramas de matrizes

» y=randn(10000,3);
» hist(y)

Histogramas em coordenadas polares

» wdir=[45 90 90 45 360 335 360 270 335 270 335 335]; %direcção do vento
num período de 12 horas
» wdir=wdir*pi/180; %transformaçãoem radianos
» rose(wdir)

135
Gráficos de valores discretos

2D

» t=0:0.1:2*pi;
» y=sin(t);
» stem(t,y)

Outras funções

» stem(t,y,’fill’)

136
3D

» t=0:0.1:10;
» s=0.1+i;
» y=exp(-s*t);
» stem3(real(y),imag(y),t);
» hold on
» plot3(real(y),imag(y),t,’k’)
» hold off
» rotate3d on

Gráficos em degraus

» t=0:0.2:10;
» y=sin(t);
» stairs(t,y);
» hold on
» plot(t,y)

137
Gráficos interactivos

Programação
clf %aparece ficheiro gráfico
axis([0 10 0 10]) % escalas em x e y
hold on
x=[];y=[];n=0;
disp('O botão esquerdo do rato introduz os pontos')
disp('O botão direito do rato introduz o último ponto')
but=1;
while but==1
[xi,yi,but]=ginput(1);plot(xi,yi,'g')
n=n+1;x(n,1)=xi;y(n,1)=yi;
end
t=1:n;ts=1:0.1:n;
xs=spline(t,x,ts);ys=spline(t,y,ts);
plot(xs,ys,'c-')
hold off

138
Programação em LabView, versão 8.0

AMBIENTE DE TRABALHO DO LABVIEW

Ao iniciarmos o programa "Labview" surge-nos a seguinte janela:

Devemos depois esperar uns segundos até surgir a janela que nos irá permitir
criar um novo documento, abrir um documento já existente, configurarmos
detalhes do Labview ou ainda acedermos á ajuda interactiva.

Para criarmos um novo documento em branco devemos clicar em "New …


Blank VI", tal como a seta indica:

139
Se pretendermos trabalhar noutro ficheiro já criado, deveríamos ir ao menu
“Open” e clicar no ficheiro pretendido.

VI - Virtual Instrument

VI - Significa literalmente Virtual Instrument e permite criar instrumentos de


medida e análise de sinais e outro tipo de informação no nosso PC de trabalho,
trabalhando com eles tal como se existissem fisicamente.

Trata-se de um ficheiro de trabalho em Labview e abre imediatamente 2


janelas:

-- O Painel Frontal (Front Panel)

-- O Diagrama de Blocos (Block Diagram)

Painel frontal "Front Panel" é onde estão localizados os botões e comandos


que devemos manipular para operar com o aparelho e onde devemos localizar
os vários comandos e botões que queremos colocar no aparelho.

Diagrama de blocos "Block Diagram" , é onde aparecem os objectos


correspondentes aos colocados no "Front Panel", e onde depois poderão ser
realizadas as correspondentes ligações.

140
141
Para colocar um botão; em qualquer ponto do Front Panel devemos clicar com
o botão direito e aceder á palette de funções, onde devemos escolher: Controls
- Boolean ; e depois devemos escolher o botão que pretendemos.

Depois devemos realizar as ligações entre os componentes utilizando a


ferramenta "rolo de fio" na "Tools Palette" (ir aos menus da janela de
Diagrama de blocos ecolher “View” e depois “Tools Palette”):

Após as "ligações" realizadas, o nosso circuito do Block Diagram fica como:

142
Para pormos a simulação a correr há que clicar no botão 2 “Run
continuoulys”, para fazer uma pausa há que clicar no botão 4 “Pause” e para
terminar a simulação clique no botão 3 “Abort execution”.

Nota: O botão 1 “Run” serve para pormos a simulação a correr, mas há que
ter uma estrutura cíclica.

OPERADORES

Operadores aritméticos

Constantes Math

143
Complexos

Manipulação de dados

Conversões

Exemplo: Soma de dois números (x+y)

144
Exercícios:

Construa um programa que represente as seguintes equações:

H=X+Y*X;

Z=(Y/2)-X;

R=(Y/X)-1/(Y/X);

J=2*PI+√X;

X>=1 resultado=1;
 X=0 resultado=0;
X<=-1resultado=-1;

145
Operadores relacionais

Exemplo: x=y ?

Exercícios:

Construa um programa que represente as seguintes comparações:

led1=X<=5;
led2=X=0;
led2=X>0.

Utilize a estrutura de selecção (select):


--- verdadeiro=x; falso=y; selecção botão on/off

146
Exemplo de simulação de circuitos de Electrónica Digital

Circuitos lógicos

- Portas lógicas NOT, AND e OR.

Exemplo:

As letras a,b, e c são as variáveis de entrada que aqui são simuladas por
interruptores e as letras La, Lb e Lc são sinalizadores do estado lógico.

Terá o seguinte aspecto:

147
Para aceder aos blocos de portas lógicas clique com o rato do lado direito
sobre a janela de Diagramas de Blocos e seleccione a função “Boolean”,
parecendo de seguida uma janela com várias portas lógicas. Deve seleccionar
as portas lógicas que precise.

Faça a simulação das seguintes equações lógicas:


La=a.b.c; Lb=b.c+a; Lc=c+a+b

148
Ciclos
Existem dois tipos básicos de ciclos no LabVIEW: While e For

• Ciclo While o diagrama localizado dentro do ciclo é executado até que uma
condição se verifique (ou se deixe de verificar);

• Ciclo For o diagrama é executado um número definido de vezes.

Nota:
Em ambos os casos existe um terminal i que corresponde ao número da
iteração (começa em 0)

149
Exemplo: Ciclo for
Número de iterações

Regulação do tempo de
cada ciclo
Informação da contagem

Exemplo: Ciclo while

Informação da contagem

Regulação do tempo de
cada ciclo

Número de iterações

Terminal condição

Nota: Com o botão direito do rato sobre o terminal de condição é possível


mudar entre Stop if True e Continue if True

Adicionar um shift register

São usados para passar valores entre iterações

Terminal de Shift Register

150
Nota: Para adicionar um shift register, clicar com botão direito do rato sobre a
frame do For ou While e seleccionar Add Shift Register

Estrutura Case

• A variável que controla o Case é ligada ao Selector Terminal. Só um dos


diagramas do Case será executado, dependendo do valor da variável;

• A variável pode ser Boolean, numérica ou string;

• Existe sempre um diagrama que é executado para as situações não previstas;

• As variáveis de saída têm de ser ligadas em todos os diagramas.

Exemplo: Estrutura Case - Conversão de temperaturas


Verdadeiro ou Falso

Selecção Verdadeiro
ou Falso T[ºF]=32+1.8*T[ºC] T[ºC]=(T[ºF]-32)/1.8

151
Estrutura Sequência (Sequence)

• Usada para garantir a execução sequencial de diversos diagramas;


• Cada diagrama é colocado numa frame numerada (0..x);
• As frames podem ser duplicadas, apagadas ou reordenadas (botão direito
sobre o número da frame):
• Valores das frames anteriores podem ser passados para frames seguintes
usando Sequence Locals.

Exemplo: Estrutura Sequência

Primeiro faz a sequência do “0” e só depois faz a sequência do “1”.

152
Estrutura MathScript Node (ramo de escrita matemática)

Estrutura Formula Node


(ramo de formulas)

153
Funções temporizadas

Função Wait [ms]

Controla o tempo de iteração de cada ciclo em [ms].

Função Time Delay [s]

Controla o tempo de iteração de cada ciclo em [s].

154
Função Elapsed Time

Temporiza um valor pré-determinado e no final envia um sinal de


finalização de temporização.

155
Porta Paralela

156
Entradas – Input’s

Saídas – Output’s

157

Você também pode gostar