Sebenta_P..

221
Instituto Politécnico de Tomar Escola Superior Tecnologia de Abrantes Apontamentos de apoio à disciplina de Programa 0

Transcript of Sebenta_P..

Page 1: Sebenta_P..

Instituto Politécnico de TomarEscola Superior Tecnologia de Abrantes

Apontamentos de apoio à

disciplina de Programa

Docente: Toni Alves

ESTA 2009/2010

0

Page 2: Sebenta_P..

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.

1

Page 3: Sebenta_P..

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.

2

Page 4: Sebenta_P..

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

3

Page 5: Sebenta_P..

"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

4

Page 6: Sebenta_P..

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

Page 7: Sebenta_P..

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

Page 8: Sebenta_P..

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

Page 9: Sebenta_P..

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

Page 10: Sebenta_P..

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

Page 11: Sebenta_P..

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

Page 12: Sebenta_P..

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

Page 13: Sebenta_P..

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 Porta

Endereço de memória

Endereço da Porta Descrição

LPT1 0000:0408378

Hexadecimal888 Decimal Endereço base

LPT2 0000:040A278

Hexadecimal632 Decimal Endereço base

Registos

       

NomeEndereços

LPT1Endereços

LPT2Descrição

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

Page 14: Sebenta_P..

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

Page 15: Sebenta_P..

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 0x378int 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

Page 16: Sebenta_P..

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).

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

1 = existe tensão (+5 volts)

Frequentemente utiliza-se o L (Low – Baixo = 0) e H (High – Alto = 1) para indicar claramente o nível eléctrico.

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

b aF

0 00 11 01 1

xxxx

15

0t

V(t)

+V

Lógico 1

Lógico 0

Lógica

positivaLógico 1 = Lógico 0 Lógico 1 = Lógico 0

Complemento ou inversão lógica

Nota: o primeiro dígito é sempre zero, variando de coluna para coluna de 2n.

X – é valor que toma cada linha na função, podendo ser 0 ou 1.

Page 17: Sebenta_P..

Exemplo – Acender/Apagar de uma Lâmpada

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).

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

Sistema Binário

16

B(Saída)

a

(Entrada)

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

0

1

0

1

Page 18: Sebenta_P..

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

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.

17

3216 8 4 2 1

1 0 1 0 0 1

1 x 1 = 10 x 2 = 00 x 4 = 0

1 x 8 = 80 x 16 = 0

1 x 32 = 32

41 ValorDecimal

Page 19: Sebenta_P..

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

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.

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.

Peso Binário 25 24 23 22 21 20

Valor do Peso 32 16 8 4 2 1Número Binário 1 1 0 1 0 1

18

47 2

07 23 21 03 11

211 5

2

1 2 2

0 1

Sentido de formação 4710=10111

12

Page 20: Sebenta_P..

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

Decimal

Binário

Hexadecimal

0123456789101112131415

0000000100100011010001010110011110001001101010111100110111101111

0123456789ABCDEF

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

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

19

1 A 5 0 0 0 1 1 0 1 0 0 1 0 12

1A516 = 0001101001012

Page 21: Sebenta_P..

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

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

20

652 16012 40 16

8 2

12 = C

65210 = 28C16

1 0 1 0 0 1 1 02

A 6101001102 = A616

Page 22: Sebenta_P..

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

Page 23: Sebenta_P..

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

Page 24: Sebenta_P..

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

Page 25: Sebenta_P..

- 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.

24

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

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

Page 26: Sebenta_P..

ALGORITMO EFICAZ

- 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.”

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.”

25

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.

- 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.

Page 27: Sebenta_P..

ALGORITMO DEVE TERMINAR

- 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.”

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.

Exercício:

Construa o algoritmo que represente a seguinte frase:

26

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.

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

enunciadas.

Page 28: Sebenta_P..

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

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

Page 29: Sebenta_P..

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

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

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

Inicio

Processamento

Page 30: Sebenta_P..

Estado em espera

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

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

Entrada de dados

Saída de dados

Page 31: Sebenta_P..

Instruções de DecisãoAs 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

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

CondiçãoN S

Page 32: Sebenta_P..

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

Page 33: Sebenta_P..

Instruções de Repetição (Ciclos)

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

itereçãoCiclo

Page 34: Sebenta_P..

Ciclo condicional: enquanto-fazer

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

determinada condição lógica for verdadeira.

33

Page 35: Sebenta_P..

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

Page 36: Sebenta_P..

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

Page 37: Sebenta_P..

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

Page 38: Sebenta_P..

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

Page 39: Sebenta_P..

FLUXO

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

consequência os diversos estados do diagrama.

FIM DE FLUXO

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

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

38

Fim

Page 40: Sebenta_P..

EXERCÍCIO 1:

“ Dado o ano nascimento determinar a idade.”

Represente o algoritmo e depois o fluxograma.

Algoritmo:

InicioEscrever:’ Qual o ano de nascimento’Ler: ano nascimentoEscrever:’ Qual o ano actual’Ler: ano actualCalcular: idade = ano actual - ano nascimentoEscrever: (‘Tem ‘, idade, ‘anos’)FimFluxograma:

39

Inicio

Qual o ano de nascimento

Ano nascimento

Idade=ano_act – ano_nasc

Tem … anos

Fim

Qual o ano actual

Ano actual

Page 41: Sebenta_P..

EXERCÍCIO 2:

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

Represente o algoritmo e depois o fluxograma.

Algoritmo:

InicioEscrever:’ Introduza um número inteiro’Ler: número1Escrever:’ Introduza outro número inteiro’Ler: número2Calcular: soma = número1+número2Escrever: (‘A soma é: ‘, soma)Fim

Fluxograma:

40

Inicio

Introduza um número inteiro

Número1

Soma=numero1+numero2

A soma é …

Fim

Introduza outro númerpo inteiro

Número2

Page 42: Sebenta_P..

EXERCÍCIO 3:

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

Represente o algoritmo e depois o fluxograma.

Algoritmo:

InicioEscrever:’ Digite um número’Ler: númeroCalcular: quadrado = número*númeroEscrever: (‘o quadrado do número é ‘, quadrado)Fim

Fluxograma:

41

Inicio

Digite um número

Lê número

Quadrado=número*número

Escreveo resultado

Fim

Page 43: Sebenta_P..

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:

InicioEscreve: ‘Introduza a nota:’Ler: notaSe nota >= 9.5 então escreve: ‘O aluno foi aprovado’Fim

Fluxograma:

42

nota>=9.5S

Inicio

Introduza a nota

nota

Fim

O aluno foi aprovado

N

Page 44: Sebenta_P..

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:

InicioEscreve: ‘Digite um número’Ler: númeroSe o número é <O, então escreve: ‘Número negativo’

senão escreve:’Número é positivo’FimFluxograma:

43

Número>0SN

Inicio

Digite um número

Lê número

Número positivo

Fim

Número negativo

Page 45: Sebenta_P..

EXERCÍCIO 6:

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

Represente o algoritmo e depois o fluxograma.

Algoritmo:

InicioEscreva: " 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

Fluxograma:

44

Se ((num1>=num2) e (num1>=num3))

SN

Inicio

Introduza primeiro numero:

num1

Fim

O maior e: …

Introduza segundo numero:

num2

Introduza terceiro numero:

num3

máximo=num1Se ((num2>=num3)

máximo=num2

SN

máximo=num3

Page 46: Sebenta_P..

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 Escrever:"Operacao invalida";FimFluxograma:

45

Se (num=2000) SN

Inicio

Escolha opcao: 2000 ou 2001:

num

Fim

Operacao invalida

Se (num=2001) SN Carlos Lopes

Miguel Mendes

Page 47: Sebenta_P..

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:

InicioEscreve: ‘Introduza a letra que pretende utilizar: L-ligar D-desligar F-furar’Ler: letraSeleccionar

Caso ‘L’ escrever:’Ligar’ Caso ‘D’ escrever ‘Desligar’ Caso ‘F’ escrever ‘Furar’senão

escreve: ‘Operação inválida’Fim

Fluxograma:

46

Seleccionar

Inicio

Introduza a letra que pretende utilizar: L-ligar D-desligar F-furar

Letra

Fim

Número negativoL-ligar D-desligar F-furar

Caso L Caso D Caso F

Senão

Page 48: Sebenta_P..

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"; Senão se (letra=='f') então Escrever:"Furar"; Senão Escrever"Operacao invalida";Fim

Fluxograma:

47

Se (letra=’l’) SN

Inicio

Introduza a letra que pretende utilizar:L-ligar D-desligar F-furar

letra

Fim

Operacao invalida

Se (letra=’d’)SN Ligar

DesligarSe (letra=’f’)

Furar

SN

Page 49: Sebenta_P..

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íciorepetirescrever "Introduzir nota entre 0-20:";ler nota;até nota>= 0 e nota<=20;fim

48

nota>=0 e nota<=20

N

Inicio

Introduza a nota entre 0-20

nota

Fim

S

Repetir

Page 50: Sebenta_P..

EXERCÍCIO 11:

“Utilização da estrutura enquanto-fazer permite calcular a tabuada de um número.”

Represente o algoritmo e depois o fluxograma.

Algoritmo:

Inícioi=1;escrever "Introduza número:";ler numero; enquanto i<=10 fazer resultado=numero*i; escrever resultado; i=i+1; fim-enquantofim

49

Enquanto i<=10

N

Inicio

Resultado

numero

Fim

S

Fim enquanto

Resultado=numero*i

i=i+1

Introduza número

Page 51: Sebenta_P..

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 fazersoma=soma + i;fim-para

escrever soma;fim

50

Para i=1; i<100; i=i+1

fazer

Nº vezes ciclo

Inicio

Fim

fazer

Fim-para

soma=soma+i

Resultado da soma

Page 52: Sebenta_P..

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.

Algoritmo:

InicioEscrever:"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

51

S

r=a+b

Fim Função

Inicio da função

Retorna valor de: r

Inicio

Fim

Recebe valor função:Resultado=soma(a,b)

Entre com valor de a:

Entre com valor de b:

Função:Soma(a,b)

Retorna valor: r

a

b

Resultado

Page 53: Sebenta_P..

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 ()InicioEscrever: “ Carta de Setembro”; Fim do procedimento

InicioNome do procedimento: carta (); Fim

52

Inicio

Fim

Procedimento:Carta()

S

Fim procedimento

Inicio do procedimento

Carta de Setembro

Page 54: Sebenta_P..

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

Page 55: Sebenta_P..

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

Page 56: Sebenta_P..

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

Page 57: Sebenta_P..

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

Page 58: Sebenta_P..

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 ( )

57

Page 59: Sebenta_P..

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

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);

58

Page 60: Sebenta_P..

printf("O numero x= %d", x);

getch();

}

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

Page 61: Sebenta_P..

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 20void main(){ printf("O numero minimo=%d e o maximo=%d", min, max); getch();}

60

Page 62: Sebenta_P..

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

Page 63: Sebenta_P..

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

Page 64: Sebenta_P..

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

Page 65: Sebenta_P..

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

Page 66: Sebenta_P..

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ção1else

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

Page 67: Sebenta_P..

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

Page 68: Sebenta_P..

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

Page 69: Sebenta_P..

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

Page 70: Sebenta_P..

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

Page 71: Sebenta_P..

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

Page 72: Sebenta_P..

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

Page 73: Sebenta_P..

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

Page 74: Sebenta_P..

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

Page 75: Sebenta_P..

É 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

Page 76: Sebenta_P..

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

Page 77: Sebenta_P..

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

Page 78: Sebenta_P..

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:

- Declarando a matriz:

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

Exemplo: Escreva a matriz A = (ai j)2 x 3 

A matriz A é de ordem 2 x 3, então podemos escrevê-la assim:

Page 79: Sebenta_P..

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

1. Dado o ano de nascimento determinar a idade.

Resolução:

Algoritmo

InicioEscrever 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

Page 80: Sebenta_P..

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

Algoritmo

InicioEscrever:’ Introduza um número inteiro’Ler: número1Escrever:’ Introduza outro número inteiro’Ler: número2Calcular: soma = número1+número2Escrever: (‘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

Page 81: Sebenta_P..

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

AlgoritmoInicioEscrever:’ Digite um número’Ler: númeroCalcular: quadrado = número*númeroEscrever: (‘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

Page 82: Sebenta_P..

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

InicioEscreve: ‘Introduza a nota:’Ler: notaSe 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

Page 83: Sebenta_P..

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

Page 84: Sebenta_P..

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

Algoritmo

InicioEscreve: ‘Digite um número’Ler: númeroSe 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

Page 85: Sebenta_P..

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

AlgoritmoInicioEscreva: " 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

Page 86: Sebenta_P..

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

AlgoritmoInicio 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

Page 87: Sebenta_P..

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

AlgoritmoInicioEscreve: ‘Introduza a letra que pretende utilizar: L-ligar D-desligar F-furar’Ler: letraSeleccionar

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

Page 88: Sebenta_P..

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íciorepetirescrever "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

Page 89: Sebenta_P..

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

Resolução:

Algoritmo

InicioConta=0;Enquanto Conta<10;Inicio

Conta = Conta +1;Escrever no ecrã:”O resultado da conta”, Conta;

FimFim

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

Page 90: Sebenta_P..

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

Resolução:

Algoritmo

InicioEscrever:”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

Page 91: Sebenta_P..

}

90

Page 92: Sebenta_P..

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 fazersoma=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

Page 93: Sebenta_P..

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

Page 94: Sebenta_P..

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

Page 95: Sebenta_P..

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

Page 96: Sebenta_P..

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

Algoritmo

Procedimento: carta ()

InicioEscrever: “ Carta de Setembro”; Fim do procedimento

InicioNome do procedimento: carta (); Fim

Programação

#include <stdio.h> carta (){printf(" Carta de Setembro"); getch();}

void main(){carta (); }

95

Page 97: Sebenta_P..

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

Algoritmo

Inicionota[100];Escrever:("Numero de alunos: ");Ler: numero alunos;

para i=0; i<numero alunos; i= i+1 fazer Inicio cicloEscrever:("Nota do aluno : ", i+1);Ler: nota[i]; Fim cicloFim

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

Page 98: Sebenta_P..

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

Page 99: Sebenta_P..

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

Algoritmo

Iniciomatriz [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 cicloFim

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

Page 100: Sebenta_P..

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

Page 101: Sebenta_P..

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

Page 102: Sebenta_P..

É 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

Page 103: Sebenta_P..

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

Page 104: Sebenta_P..

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

Page 105: Sebenta_P..

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=[ 1 2 3 4 5 67 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

Page 106: Sebenta_P..

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 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

t=0:2:200 – é o inicio2 – números pares20 – máximo número

Page 107: Sebenta_P..

Considere:

Calcule:

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

106

Page 108: Sebenta_P..

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 complexoangle ângulo de fase sqrt raiz quadradareal parte real de um complexoimag parte imaginária de um complexo sign função sinal exp exponencial base elog logaritmo natural log10 logaritmo base 10

107

Page 109: Sebenta_P..

Matrizes especiaisAs 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 Hilbertmagic 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õesspline interpolação por splines cúbicas

108

Page 110: Sebenta_P..

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ínimomean valor médio median valor medianostd 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

Page 111: Sebenta_P..

OPERADORES

Operadores aritméticos

Adição ( + );

Subtracção ( - );

Transposta ( ' );

Potência ( ^ );

Multiplicação ( * );

Divisão à esquerda( \ );

Divisão à direita ( / ).

Operadores relacionais

< menor que

< = menor ou igual a

> maior que

> = maior ou igual a

= = igual a

~ = diferente de

110

Exemplo:>> a = 4

>> b =8

>> a+b ans =12

Exemplo:>> a = 4

>> b =8 >> a<b

ans = 1

Page 112: Sebenta_P..

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

Page 113: Sebenta_P..

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

Page 114: Sebenta_P..

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

Page 115: Sebenta_P..

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

Page 116: Sebenta_P..

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.');elsedisp('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

Page 117: Sebenta_P..

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:2n = input('Proximo num.: ');soma = soma + n;endmedia = soma / 2;disp(media);

116

Page 118: Sebenta_P..

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

Page 119: Sebenta_P..

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

Page 120: Sebenta_P..

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

Page 121: Sebenta_P..

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

Page 122: Sebenta_P..

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

Page 123: Sebenta_P..

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

Page 124: Sebenta_P..

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

Page 125: Sebenta_P..

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

Page 126: Sebenta_P..

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.

E xemplo:

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

Resultado final:

125

Page 127: Sebenta_P..

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

Page 128: Sebenta_P..

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

Page 129: Sebenta_P..

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

Page 130: Sebenta_P..

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

Page 131: Sebenta_P..

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

Page 132: Sebenta_P..

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

Page 133: Sebenta_P..

» 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

Page 134: Sebenta_P..

Histogramas

E xemplos:

Histogramas de um vector

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

133

Page 135: Sebenta_P..

134

Page 136: Sebenta_P..

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

Page 137: Sebenta_P..

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

Page 138: Sebenta_P..

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

Page 139: Sebenta_P..

Gráficos interactivos

Programação

clf %aparece ficheiro gráficoaxis([0 10 0 10]) % escalas em x e yhold 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

Page 140: Sebenta_P..

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:

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

139

Page 141: Sebenta_P..

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

Page 142: Sebenta_P..

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:

141

Page 143: Sebenta_P..

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

142

Page 144: Sebenta_P..

Complexos

Manipulação de dados

Conversões

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

143

Page 145: Sebenta_P..

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<=-1resultado=-1;

144

Page 146: Sebenta_P..

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

145

Page 147: Sebenta_P..

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:

146

Page 148: Sebenta_P..

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

147

Page 149: Sebenta_P..

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)

148

Page 150: Sebenta_P..

Exemplo: Ciclo for

Exemplo: Ciclo while

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

149

Informação da contagem

Número de iterações

Regulação do tempo de cada ciclo

Número de iterações

Terminal condição

Regulação do tempo de cada ciclo

Informação da contagem

Terminal de Shift Register

Page 151: Sebenta_P..

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

150

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

Verdadeiro ou Falso

Page 152: Sebenta_P..

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”.

151

Page 153: Sebenta_P..

Estrutura MathScript Node (ramo de escrita matemática)

Estrutura Formula Node (ramo de formulas)

152

Page 154: Sebenta_P..

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].

153

Page 155: Sebenta_P..

Função Elapsed Time

Temporiza um valor pré-determinado e no final envia um sinal de finalização de temporização.

154

Page 156: Sebenta_P..

Porta Paralela

155

Page 157: Sebenta_P..

Entradas – Input’s

Saídas – Output’s

156