Sebenta_P..
-
Upload
pedro-freitas -
Category
Documents
-
view
829 -
download
2
Transcript of Sebenta_P..
Instituto Politécnico de TomarEscola Superior Tecnologia de Abrantes
Apontamentos de apoio à
disciplina de Programa
Docente: Toni Alves
ESTA 2009/2010
0
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
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
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
"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
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 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
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 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
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.
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
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
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
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
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
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.
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.
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.
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.
“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
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
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
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
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)
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
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
Esta primitiva possibilita a identificação do último estado do algoritmo,
i.e. do seu ponto final de execução.
38
Fim
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 ( )
57
- 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
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
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
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çã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
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:
- 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:
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
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
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
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", ¬a);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
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
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
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
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
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",¬a); } while (nota>=0 && nota<=20);getch();}
87
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
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
}
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 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
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 ()
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
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", ¬a[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", ¬a[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
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
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=[ 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
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
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 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
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
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
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
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.');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
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
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.
E xemplo:
» 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
E xemplos:
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á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
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
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
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
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
Complexos
Manipulação de dados
Conversões
Exemplo: Soma de dois números (x+y)
143
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
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
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
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
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
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
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
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
Estrutura MathScript Node (ramo de escrita matemática)
Estrutura Formula Node (ramo de formulas)
152
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
Função Elapsed Time
Temporiza um valor pré-determinado e no final envia um sinal de finalização de temporização.
154
Porta Paralela
155
Entradas – Input’s
Saídas – Output’s
156