sebenta_p
TRANSCRIPT
![Page 1: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/5.jpg)
"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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/25.jpg)
- 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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/28.jpg)
“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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/37.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/38.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/40.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/42.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/43.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/44.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/45.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/46.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/47.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/48.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/49.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/50.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/51.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/52.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/53.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/54.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/55.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/56.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/57.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/58.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/59.jpg)
- 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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/60.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/61.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/62.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/63.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/64.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/65.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/66.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/67.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/68.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/69.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/70.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/71.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/72.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/73.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/74.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/75.jpg)
É 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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/76.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/77.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/78.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/79.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/80.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/81.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/82.jpg)
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
![Page 83: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/83.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/84.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/85.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/86.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/87.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/88.jpg)
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
![Page 89: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/89.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/90.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/91.jpg)
}
90
![Page 92: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/92.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/93.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/94.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/95.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/96.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/97.jpg)
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
![Page 98: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/98.jpg)
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
![Page 99: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/99.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/100.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/101.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/102.jpg)
É 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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/103.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/104.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/105.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/106.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/107.jpg)
Considere:
Calcule:
matriz B, a transposta de A. soma de A+B. o vector y=x-1. x’*y
106
![Page 108: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/108.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/109.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/110.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/111.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/112.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/113.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/114.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/115.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/116.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/117.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/118.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/119.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/120.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/121.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/122.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/123.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/124.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/125.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/126.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/127.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/128.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/129.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/130.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/131.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/132.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/133.jpg)
» 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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/134.jpg)
Histogramas
E xemplos:
Histogramas de um vector
» yn=randn(10000,1); » hist(yn)
133
![Page 135: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/135.jpg)
134
![Page 136: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/136.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/137.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/138.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/139.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/140.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/141.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/142.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/143.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/144.jpg)
Complexos
Manipulação de dados
Conversões
Exemplo: Soma de dois números (x+y)
143
![Page 145: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/145.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/146.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/147.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/148.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/149.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/150.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/151.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/152.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/153.jpg)
Estrutura MathScript Node (ramo de escrita matemática)
Estrutura Formula Node (ramo de formulas)
152
![Page 154: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/154.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/155.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/156.jpg)
Porta Paralela
155
![Page 157: Sebenta_P](https://reader035.vdocuments.net/reader035/viewer/2022062705/5571f82b49795991698ccc36/html5/thumbnails/157.jpg)
Entradas – Input’s
Saídas – Output’s
156