Escolar Documentos
Profissional Documentos
Cultura Documentos
Apontamentos de apoio
à
disciplina de Programa
ESTA 2009/2010
1
INTRODUÇÃO À ESTRUTURA DE UM COMPUTADOR
COMPUTADOR
2
Hardware – Conjunto de componentes que constituem um computador
(componente material/física do computador), tais como, monitor, a unidade
central, o teclado, o rato, etc. que fornece a capacidade de:
– Executar um determinado tipo de instruções a uma determinada
velocidade;
– Armazenar um conjunto de bytes;
– Comunicar com um conjunto de periféricos.
Software – conjunto de instruções transmitidas a um computador para que
ele desempenhe determinadas acções (tarefas).
3
Caracterização de um computador
LEGENDA:
01- Monitor
02- Placa-Mãe (Motherboard)
03- Processador
04- Memória RAM
05- Placas de Rede, Som, Vídeo, Fax...
06- Fonte de Energia
07- Leitor de CDs e/ou DVDs
08- Disco Rígido (HD)
09- Mouse (ou Rato)
10- Teclado
4
"Motherboard", placa principal ou placa mãe
Processador
5
Barramentos e tipos de ligações
6
Capacidade da memória
7
Discos e disquetes
Discos magnéticos
8
Caixa
Periféricos
Periféricos de saída
9
Periféricos de entrada
Teclado
Ratos
Outros periféricos
Comunicação Wifi - serve para ligar em rede PC's ou dar acesso à internet
permitem trabalhar com velocidades nominais até 54/108 mbps mas na
realidade o acesso é a cerca de metade da velocidade anunciada.
10
HUB – Concentrador
Modem-Fax
Colunas de som
11
Porta Paralela
O LPT1, LPT2, LPT3 etc, é o nome dado à Porta Paralela, mas a Porta
padrão do computador é a LPT1, com os endereços: 378h (para enviar um
byte de dados pela Porta), 378+1h (para receber um valor através da Porta) e,
378+2h (para enviar dados). Às vezes está disponível a LPT2, e com os
endereços: 278h, 278+1h e 278+2h, com as mesmas funções dos endereços da
porta LPT1 respectivamente.
Nome da Endereço de
Endereço da Porta Descrição
Porta memória
378
LPT1 0000:0408 888 Decimal Endereço base
Hexadecimal
278
LPT2 0000:040A 632 Decimal Endereço base
Hexadecimal
Registos
Endereços Endereços
Nome Descrição
LPT1 LPT2
Registo de Dados 378h 278h Envia um byte para a impressora
Registo de Status 379h 279h Ler o Status da impressora
Registo de Controlo 37Ah 27Ah Envia dados de controlo para a impressora
12
Construção do cabo para comunicar com a porta paralela
13
Exemplo:
Ligar e desligar oito LEDs, conectados através de um cabo à Porta Paralela
Programa em linguagem C
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define LPT1 0x378
int main(void)
{
unsigned char Valor=128; //Em binário: 10000000
while( Valor > 0 )
{
outportb(LPT1, Valor); // Envia para a Porta LPT1
printf("\nPressione uma tecla para ascender o próximo LED...");
getch( );
Valor = Valor >> 1; //A cada passagem, o bit 1 é movido para a
direita
}
}
14
Introdução as sistemas binários
Níveis Lógicos
Exemplo:
21 20 F Nota: o primeiro dígito é sempre zero, variando de
b a coluna para coluna de 2n.
0 0 x
0 1 x X – é valor que toma cada linha na função, podendo ser
1 0 x
1 1 x
0 ou 1.
15
Exemplo – Acender/Apagar de uma Lâmpada
a
(Entrada)
B
(Saída)
Tabela verdade
0 0
1 1
Identificação lógica
B=a
16
Sistema Binário
32 16 8 4 2 1
1 0 1 0 0 1
1x1= 1
0x2= 0
0x4= 0
1x8= 8
0 x 16 = 0
1 x 32 = 32
41 Valor
Decimal
17
Exemplos:
Peso Binário 25 24 23 22 21 20
Valor do Peso 3 1 8 4 2 1
2 6
Número Binário 1 1 0 1 0 1
47 2
07 23 2
1 03 11
2
1
1 5
2
Sentido 1 2 2
de formação 4710 =1011112
0 1
18
Conversão de Hexadecimal – Binário
1 A 5
1A516 = 0001101001012
0001 1010 0 1 0 12
19
Conversão Decimal – Hexadecimal
12 = C
652 16
012 40 16
65210 = 28C16
8 2
1010 0 1 1 02
A 6 101001102 = A616
20
Introdução às Tecnologias de Informação e Comunicação
21
TÉCNICAS DE PROGRAMAÇÃO
Metodologia Genérica:
Análise do Problema
Projecto do Programa: Algoritmo e estrutura de dados
Implementação e teste do programa
Verificação/Execução do programa
ALGORITMOS
Ou seja,
22
Linguagem de programação é um algoritmo escrito numa linguagem
que é entendida pelo computador.
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.).
- 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.
23
- Nem todas as sequências de passos para atingir um dado objectivo podem ser
consideradas num algoritmo, pois todo algoritmo deve possuir três
características:
1. Ser rigoroso;
2. Ser eficaz;
ALGORITMO RIGOROSO
EXEMPLO:
- 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.
ALGORITMO EFICAZ
24
- Cada instrução do algoritmo deve ser suficientemente básica e bem
compreendida de modo a poder ser executada num intervalo de tempo finito,
com uma quantidade de esforço finita.
EXEMPLO:
25
- O algoritmo deve levar a uma situação em que o objectivo tenha sido
atingido e não existam mais instruções que possam ser executadas.
EXEMPLOS:
Exercício:
26
SOLUÇÃO:
27
FLUXOGRAMAS
As primitivas utilizadas:
Processamento Processamento
28
Saída de
Estado em espera dados
29
Instruções de Decisão
As instruções de decisão, ou selecção, permitem a selecção em
alternância de um ou outro conjunto de acções após a avaliação lógica de uma
condição.
DECISÃO BINÁRIA
N S
Condição
Se-
Então-Senão
30
Decisão múltipla
31
Instruções de Repetição (Ciclos)
itereção
Ciclo
As instruções de repetição, ou ciclos, permitem a execução de forma
repetitiva de um conjunto de instruções.
32
Ciclo condicional: enquanto-fazer
33
Ciclo determinístico: para-fazer
34
SUB-ROTINAS
FUNÇÕES
35
Exemplo:
#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); //passando os parâmetros
printf("O resultado é: %d", resultado);
getch();
}
int r;
r = a + b;
return r;
36
PROCEDIMENTOS
Exemplo:
#include <bibliotecas>
int procedimento()
{
instrucao1;
}
void main()
{
procedimento();
}
37
FLUXO
38
EXERCÍCIO 1:
Algoritmo:
Inicio
Escrever:’ Qual o ano de nascimento’ Inicio
Ler: ano nascimento
Escrever:’ Qual o ano actual’
Ler: ano actual Qual o ano de
Calcular: idade = ano actual - ano nascimento nascimento
Escrever: (‘Tem ‘, idade, ‘anos’)
Fim
Fluxograma:
Ano
nascimento
Qual o ano
actual
Ano actual
Idade=ano_act – ano_nasc
Tem …
anos
Fim
39
EXERCÍCIO 2:
Algoritmo:
Inicio
Escrever:’ Introduza um número inteiro’
Ler: número1 Inicio
Escrever:’ Introduza outro número inteiro’
Ler: número2
Calcular: soma = número1+número2 Introduza um
número
Escrever: (‘A soma é: ‘, soma) inteiro
Fim
Fluxograma:
Número1
Introduza outro
númerpo
inteiro
Número2
Soma=numero1+numero2
A soma é
…
Fim
40
EXERCÍCIO 3:
Algoritmo:
Inicio
Escrever:’ Digite um número’
Ler: número
Calcular: quadrado = número*número
Escrever: (‘o quadrado do número é ‘, quadrado)
Fim
Fluxograma:
Inicio
Digite um
número
Lê número
Quadrado=número*número
Escreve
o resultado
Fim
41
EXERCÍCIO 4:
Algoritmo:
Inicio
Escreve: ‘Introduza a nota:’
Ler: nota
Se nota >= 9.5 então
escreve: ‘O aluno foi aprovado’
Fim
Fluxograma:
Inicio
Introduza a
nota
nota
S
nota>=9.5
N
O aluno foi
aprovado
Fim 42
EXERCÍCIO 5:
Algoritmo:
Inicio
Escreve: ‘Digite um número’
Ler: número
Se o número é <O, então
escreve: ‘Número negativo’
senão escreve:’Número é positivo’
Fim
Fluxograma:
Inicio
Digite um
número
Lê número
N S
Número>0
Número Número
positivo negativo
Fim
43
EXERCÍCIO 6:
Algoritmo:
Introduza
primeiro numero:
Inicio
Escreva: " Introduza primeiro numero: ";
Ler: num1; num1
Escrever:" Introduza o segundo numero: ";
Ler: num2;
Escrever:" Introduza o terceiro numero: "; Introduza
segundo numero:
Ler: num3;
Se ((num1>=num2) e (num1>=num3)) então
maximo=num1;
Senão num2
Se (num2>=num3) então
maximo=num2 ; Introduza terceiro
Senão numero:
maximo=num3 ;
Escreve: “o maior e : %d", maximo;
Fim num3
Fluxograma:
N Se ((num1>=num2) e S
(num1>=num3))
N Se ((num2>=num3) S máximo=num1
máximo=num3 máximo=num2
O maior e: …
Fim
44
EXERCÍCIO 7:
Algoritmo:
Inicio
Escrever:"Escolha opcao: 2000 ou 2001 : ";
Ler: num;
Se (num=2000) então
Escrever:"Carlos Lopes";
Senão se (num=2001)
Escrever:"Miguel Mendes";
senão
Inicio
Escrever:"Operacao invalida";
Fim
Fluxograma:
Escolha opcao:
2000 ou 2001:
num
N S
Se (num=2000)
N S
Se (num=2001) Carlos Lopes
Fim
45
EXERCÍCIO 8:
“Considere uma máquina que permite apenas três operações, ligar, desligar e
furar”, (utilize a condição seleccionar … caso …).
Algoritmo:
Inicio
Escreve: ‘Introduza a letra que pretende utilizar: L-ligar D-desligar F-furar’
Ler: letra
Seleccionar
Caso ‘L’ escrever:’Ligar’
Caso ‘D’ escrever ‘Desligar’
Caso ‘F’ escrever ‘Furar’
senão Inicio
escreve: ‘Operação inválida’
Fim
Introduza a letra que pretende utilizar:
Fluxograma: L-ligar D-desligar F-furar
Letra
Senão
Seleccionar
Fim
46
EXERCÍCIO 9:
“Considere uma máquina que permite apenas três operações, ligar, desligar e
furar”, (utilize a condição Se-Então-Senão).
Algoritmo:
Inicio
Escrever:"Introduza a letra que pretende utilizar:L-ligar D-desligar F-furar
";
Ler: letra;
Se (letra=='l') então
Escrever:"Ligar ";
Senão se(letra=='d') então
Escrever:"Desligar"; Inicio
Senão se (letra=='f') então
Escrever:"Furar";
Senão Introduza a letra que pretende utilizar:L-
Escrever"Operacao invalida"; ligar D-desligar F-furar
Fim
letra
Fluxograma:
N S
Se (letra=’l’)
N S
Se (letra=’d’) Ligar
Desligar
N Se (letra=’f’) S
Fim
47
EXERCÍCIO 10:
Algoritmo:
início
repetir Inicio
escrever "Introduzir nota entre 0-20:";
ler nota;
até nota>= 0 e nota<=20;
fim
Repetir
Introduza a nota
entre 0-20
nota
nota>=0 e N
nota<=20
Fim
48
EXERCÍCIO 11:
Algoritmo: Introduza
número
Início
i=1;
escrever "Introduza número:"; numero
ler numero;
enquanto i<=10 fazer
resultado=numero*i;
escrever resultado;
i=i+1; Enquanto N
i<=10
fim-enquanto
fim
S
Resultado=numero*i
Resultado
i=i+1
Fim
enquanto
Fim
49
EXERCÍCIO 12:
Algoritmo:
início
soma=0;
para i=1; i<100; i= i+1 fazer
soma=soma + i; Inicio
fim-para
escrever soma;
fim Para i=1;
Nº vezes ciclo i<100; i=i+1
fazer
fazer
soma=soma+i
Fim-para
Resultado da
soma
Fim
50
EXERCÍCIO 13:
Inicio
Escrever:"Entre com o valor de a: "; a
Ler a;
Escrever: "Entre com o valor de b: ";
Ler b;
Entre com
Calculo da função: resultado = soma(a, b); valor de b:
escrever: "O resultado é:", resultado;
Fim
b
Função: soma (int a, int b)
Inicio
Calculo: r = a + b;
Retornar: valorde r; Função:
Fim da função Soma(a,b)
S
Inicio da
função
Retorna valor: r
Resultado
Fim
Função
Fim
51
EXERCÍCIO 14:
Algoritmo:
Procedimento: carta ()
Inicio
Escrever: “ Carta de Setembro”;
Fim do procedimento
Inicio
Nome do procedimento: carta ();
Fim
S
Inicio do Inicio
procedimento
Carta de Procedimento:
Setembro Carta()
Fim Fim
procedimento
52
PROGRAMA
Programa
PARTES DE UM PROGRAMA
53
TIPOS DE ERROS NUM PROGRAMA
ERROS SINTÁCTICOS
ERROS SEMÂNTICOS
- São também conhecidos por erros de lógica e são muito mais difíceis
de detectar do que os erros de carácter sintáctico.
54
Programação em Linguagem C
INTERPRETADORES
COMPILADORES
55
Estrutura de um programa
Função main ( )
Função printf ( )
Função scanf ( )
56
Exemplo:
#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
printf (“…” )
- Podemos dizer que é o menu do operador, o que é representado entre
plicas “…” aparece no ecrã.
Scanf ( )
57
Tipos de variáveis e constantes
As variáveis e constantes são os tipos de dados básicos manipulados
num programa.
A declaração das variáveis permite definir o seu tipo e, eventualmente,
o seu valor inicial.
Estão definidos cinco tipos básicos de dados na linguagem C:
58
char frase[80]; /* string ou array de caracteres */
#include <stdio.h>
void main()
{
char frase[80];
printf("introduza um nome: ");
scanf("%s", frase);
printf("O nome = %s", frase);
getch();
}
#include <stdio.h>
void main()
{
float y;
printf("introduza um numero real: ");
scanf("%f", &y);
printf("O numero real= %f", y);
getch();
}
int i = 0;
float eps = 1.0e-5
59
Caracteres
Exemplo:
#include <stdio.h>
void main()
{
int num;
printf("Introduza\b um\n numero\r inteiro\t:\\");
scanf("%d", &num);
printf("O numero = %d", num);
getch();
}
Declarar constantes
- Usa-se a palavra reservada define segundo a sintaxe:
#include <stdio.h>
#define min 0
#define max 20
void main()
{
printf("O numero minimo=%d e o maximo=%d", min, max);
getch();
}
60
Caracteres de conversão
Operadores aritméticos
Exemplo:
#include <stdio.h>
void main()
{
int x,y;
float a,b;
x=10;
y=5;
printf("%d\n",x/y); /* Mostra 2 */
printf("%d\n",x%y); /* Mostra 0 */
a=1;
b=2;
printf("%f", a/b); /* Mostra 0.5 */
getch();
}
61
Operadores Relacionais
Os operadores relacionais, tal como o nome indica, têm como objectivo
obter a relação que os operandos podem ter entre si. Na linguagem C estão
definidos os seguintes operadores relacionais:
#include <stdio.h>
void main()
{
int i,j;
printf("Intruduza dois números: ");
scanf("%d %d",&i,&j);
printf(" %d = = %d é %d.\n",i,j, i= =j);
printf(" %d != %d é %d.\n",i,j, i!=j);
printf(" %d <= %d é %d.\n",i,j, i<=j);
printf(" %d >= %d é %d.\n",i,j, i>=j);
printf(" %d > %d é %d.\n",i,j, i>j);
printf(" %d < %d é %d.\n",i,j, i<j);
getch();
}
62
Operadores lógicos
Os operadores lógicos são usados para efectuar as operações lógicas
elementares: E lógico, OU lógico e Negação. Os operadores lógicos usados na
linguagem C são:
63
Estruturas de controlo
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
64
As instruções if podem ser encadeadas, podendo ser usada uma
combinação entre as duas sintaxes (com e sem else).
if (condição1)
if (condição2)
instrução1
else
instrução2
Nota: Um else pertence ao if mais interior que ainda não tem associado
um else.
65
Instrução else..if
66
Instrução switch
switch (variável)
{
case exp_1 : instr_1; break;
case exp_2 : instr_2; break;
...
default : instr_n; break;
}
Cada um dos casos é rotulado por uma ou mais constantes inteiras ou
expressões com constantes, i. e., exp_i pode ser um inteiro, um carácter ou
uma expressão de constantes. Se a variável coincidir com um dos casos a
execução começa a partir desse ponto. Todos os casos exp_i têm de ser
diferentes. O caso com rótulo default é executado se não houver mais
nenhuma coincidência.
67
A instrução switch é bastante usada para processar comandos a partir
do teclado, tais como a selecção de opções num menu. Por exemplo podemos
ter uma função que devolva um valor consoante a opção seleccionada.
#include <stdio.h>
void main()
{
int ch;
int escolha;
do{
68
Ou,
#include <stdio.h>
void main()
{
char escolha, ch;
do{
printf(" Ler nome - a\n ");
printf(" Ano_nascimento - b\n ");
printf("Escolha opção: ");
scanf("%s",&ch);
switch (ch)
{
case 'a' : ler_nome(); break;
case 'b' : ano_nascimento(); break;
default :
printf("Opção inválida!");break;
}
printf("\nQuer sair: S-sim ou N-nao");
scanf("%s", &escolha);
}while (escolha!='s');
getch();
}
ler_nome()
{
char frase[80];
printf("introduza um nome: ");
scanf("%s", frase);
printf("O nome = %s", frase);
}
ano_nascimento(int ano_nasc)
{
printf("Introduza ano nascimento: ");
scanf("%d", &ano_nasc);
printf("Nasceu em %d", ano_nasc);
}
69
Estruturas de Repetição ou Ciclos
Ciclo while
while (expressão)
instrução;
Este ciclo continua até que a expressão tenha um valor nulo (falso), passando
então o controlo do programa para a instrução na linha seguinte ao ciclo.
Exemplo:
A seguinte função espera até que se introduza o carácter ‘a’:
#include <stdio.h>
void main()
{
char c;
while(c!='a')
scanf("%c", &c);
}
70
Ciclo for
Ciclo do..while
71
A forma genérica do ciclo do..while é:
do
{
instrução;
}
while (expressão);
A instrução é executada e depois é avaliada a expressão. Se for
verdadeira a instrução é executada novamente e assim sucessivamente até que
a expressão seja falsa (valor nulo).
Instruções break
A instrução break, que já foi usada para sair da instrução switch,
força a saída do ciclo for, while ou do mais interior sem testar a
condição de fim de ciclo.
72
No programa seguinte o ciclo for mostra no monitor os números de 0
a 10 e depois o break termina o ciclo, ultrapassando o teste condicional
t<100 incluído no ciclo.
Instruções continue
73
É possível implementar funções que devolva valores. O retorno de
valores de funções é feito usando a instrução return, que tem a seguinte
sintaxe:
return expressão;
Array ´s
74
Um array é um conjunto de variáveis do mesmo tipo que podem ser
referenciadas por um identificador comum. Em C um array consiste num
conjunto de posições de memória contíguas, o menor endereço corresponde ao
primeiro elemento e o maior endereço corresponde ao último elemento. Um
array pode ter apenas uma dimensão (array unidimensional ou vector) ou
várias (array multidimensional ou matriz). Como já foi referido, em C os
array’s são declarados da mesma forma que uma variável elementar só que se
coloca a dimensão entre parêntesis rectos a seguir à identificação da variável:
tipo nome_variável[dimensão];
75
Declaração de um vector
#include <stdio.h>
void main()
{
int x[10];
int t;
for(t=0;t<10;++t)
{
x[t]=t;
printf("%d\n", x[t]);
}
getch();
}
76
Declaração de matrizes
Dimensões:
Exemplo: Exemplo:
Escreva a matriz A = (ai j)2 x 3
- Declarando a matriz: A matriz A é de ordem 2 x 3, então
podemos escrevê-la assim:
int matriz [2][3];
77
Exercícios programação em C – Compilador Dev-C++
Resolução:
Algoritmo
Inicio
Escrever no ecrã: “Qual o ano de nascimento”;
Ler ano nascimento;
Escreve no ecrã: “Qual o ano actual”;
Ler ano actual;
Idade = ano actual – ano nascimento;
Escrever no ecrã:”Tem”, idade, “anos”;
Fim
Programação
#include <stdio.h>
void main()
{
int anonasc, anoactual, idade;
printf ("Qual o ano de nascimento: ");
scanf ("%d", &anonasc);
printf (" \n");
printf ("Qual o ano actual: ");
scanf ("%d", &anoactual);
idade=anoactual-anonasc;
printf (" \n");
printf ("Tem %d anos \n", idade);
printf (" \n");
getch();
}
78
2. Peça ao utilizador dois números e apresente a soma deles.
Algoritmo
Inicio
Escrever:’ Introduza um número inteiro’
Ler: número1
Escrever:’ Introduza outro número inteiro’
Ler: número2
Calcular: soma = número1+número2
Escrever: (‘A soma é: ‘, soma)
Fim
Programação
#include <stdio.h>
void main()
{
int num1, num2, soma;
printf ("Introduza um numero inteiro: ");
scanf ("%d", &num1);
printf (" \n");
printf ("Introduza outro numero inteiro: ");
scanf ("%d", &num2);
soma=num1+num2;
printf (" \n");
printf ("A soma e: %d \n", soma);
printf (" \n");
getch();
}
79
3. Dado um número, calcule o quadrado deste.
Algoritmo
Inicio
Escrever:’ Digite um número’
Ler: número
Calcular: quadrado = número*número
Escrever: (‘o quadrado do número é ‘, quadrado)
Fim
Programação
#include <stdio.h>
void main()
{
int num, quadrado;
printf ("Introduza um numero inteiro: ");
scanf ("%d", &num);
printf (" \n");
quadrado=num*num;
printf (" \n");
printf ("O quadrado do numero e: %d \n", quadrado);
printf (" \n");
getch();
}
Exemplo: Dado um número, calcular a raiz quadrada deste (deve utilizar a função
matemática)
#include <stdio.h>
#include <math.h>
void main()
{
float num, raiz_quad;
printf ("Introduza um numero inteiro: ");
scanf ("%f", &num);
printf (" \n");
raiz_quad=sqrt(num);
printf (" \n");
printf ("O quadrado do numero e: %f \n", raiz_quad);
printf (" \n");
getch();
}
80
4. Dada uma nota de um aluno dizer se ele teve aprovação à disciplina –
Algoritmo
Inicio
Escreve: ‘Introduza a nota:’
Ler: nota
Se nota >= 9.5 então
escreve: ‘O aluno foi aprovado’
Fim
Programação
#include <stdio.h>
void main()
{
float nota;
printf ("Introduza a nota: ");
scanf ("%f", ¬a);
printf (" \n");
if (nota>=9.5)
printf ("O aluno foi aprovado. \n");
getch();
}
81
Exemplo:
Dados dois números decimais, mostra o resultado da divisão dos dois números.
#include <stdio.h>
void main()
{
float num1, num2;
printf("Escreva o primeiro numero: ");
scanf("%f",&num1);
printf(" \nEscreva o segundo numero: ");
scanf("%f",&num2);
if (num2 = =0)
printf("\n\nO segundo numero tem de ser diferente de zero!!!\n\n");
else
printf("\n\nO valor da divisao dos dois numero: %f\n\n",num1/num2);
getch();
}
82
5. Dá um número e verifique se ele é negativo ou positivo.
Algoritmo
Inicio
Escreve: ‘Digite um número’
Ler: número
Se o número é <O, então
escreve: ‘Número negativo’
senão escreve:’Número é positivo’
Fim
Programação
#include <stdio.h>
void main()
{
float num;
printf ("Introduza um numero: ");
scanf ("%f", &num);
printf (" \n");
if (num<0)
printf ("Numero negativo. \n");
else
printf ("Numero positivo. \n");
getch();
}
83
6. Dado três números, informar qual o maior número.
Algoritmo
Inicio
Escreva: " Introduza primeiro numero: ";
Ler: num1;
Escrever:" Introduza o segundo numero: ";
Ler: num2;
Escrever:" Introduza o terceiro numero: ";
Ler: num3;
Se ((num1>=num2) e (num1>=num3)) então
maximo=num1;
Senão
Se (num2>=num3) então
maximo=num2 ;
Senão
maximo=num3 ;
Escreve: “o maior e : %d", maximo;
Fim
Programação
#include <stdio.h>
void main()
{
int num1,num2,num3,maximo;
printf(" Introduza primeiro numero: ");
scanf("%d", &num1);
printf(" Introduza o segundo numero: ");
scanf("%d", &num2);
printf(" Introduza o terceiro numero: ");
scanf("%d", &num3);
if ((num1>=num2)&&(num1>=num3))
maximo=num1;
else if(num2>=num3)
maximo=num2 ;
else
maximo=num3 ;
printf("o maior e : %d", maximo);
getch();
}
84
7. Escolha opção de dois números de alunos, e devolver o nome do aluno.
Algoritmo
Inicio
Escrever:"Escolha opcao: 2000 ou 2001 : ";
Ler: num;
Se (num=2000) então
Escrever:"Carlos Lopes";
Senão se (num=2001)
Escrever:"Miguel Mendes";
senão
Escrever:"Operacao invalida";
Fim
Programação
#include <stdio.h>
void main()
{
int num;
printf("Escolha opcao: 2000 ou 2001 : ");
scanf("%d", &num);
if (num= =2000)
{
printf("Carlos Lopes");
}
else if (num= =2001)
printf("Miguel Mendes");
else
printf("Operacao invalida \n");
getch();
}
85
8. Considere uma máquina que permite apenas três operações: ligar,
desligar e furar. Utilize a instrução switch.
Algoritmo
Inicio
Escreve: ‘Introduza a letra que pretende utilizar: L-ligar D-desligar F-furar’
Ler: letra
Seleccionar
Caso ‘L’ escrever:’Ligar’
Caso ‘D’ escrever ‘Desligar’
Caso ‘F’ escrever ‘Furar’
senão
escreve: ‘Operação inválida’
Fim
Programação
#include <stdio.h>
void main()
{
char letra;
printf("Introduza a letra que pretende utilizar:L-ligar D-
desligar F-furar ");
scanf("%c",&letra);
switch (letra)
{
case 'l':
printf("Ligar \n");
break;
case 'd':
printf("Desligar \n");
break;
case 'f':
printf("Furar \n");
break;
default:
printf("Operacao invalida \n");
}
getch();
}
86
9. Utilização da estrutura cíclica Do-While que permita garantir que o
valor da nota introduzida esteja situado entre 0 e 20.
Algoritmo
início
repetir
escrever "Introduzir nota entre 0-20:";
ler nota;
até nota>= 0 e nota<=20;
fim
Programação
#include <stdio.h>
void main()
{
float nota;
do
{
printf("Introduzir nota entre 0-20: ");
scanf("%f",¬a);
}
while (nota>=0 && nota<=20);
getch();
}
87
10. Escreva no ecrã os números naturais até 10 – utilize o ciclo while.
Resolução:
Algoritmo
Inicio
Conta=0;
Enquanto Conta<10;
Inicio
Conta = Conta +1;
Escrever no ecrã:”O resultado da conta”, Conta;
Fim
Fim
Programação
#include <stdio.h>
void main()
{
int conta;
conta=0;
while (conta < 10)
{
conta=conta+1;
printf("%d \n", conta);
printf(" \n");
}
getch();
}
88
10.1 Calcular a tabuada de um número – utilize o ciclo while.
Resolução:
Algoritmo
Inicio
Escrever:”Introduza o numero:”;
Ler: numero;
i=1;
Enquanto i<=10;
Inicio ciclo
resultado = numero *i;
Escrever: “ ”, numero;
Escrever:” * “, i;
Escrever:”= “, resultado;
i=i+1;
Fim ciclo
Fim
Programação
#include <stdio.h>
void main ()
{
int numero , resultado , i;
printf(" Int roduza o numero : ") ;
scanf ("%d", &numero);
i =1;
while (i<=10)
{
resultado=numero*i;
printf("%d", numero);
printf("*%d", i);
printf("=%d \n", resultado);
i++;
}
getch();
89
}
90
11. Utilização do ciclo for, que permita calcular a soma dos 10 primeiros
números inteiros.”
Algoritmo
início
soma=0;
para i=1; i<10; i= i+1 fazer
soma=soma + i;
fim-para
escrever:” ”, soma;
fim
Programação
#include <stdio.h>
void main ()
{
int soma,i;
soma=0;
for (i=1; i<10; i++)
{
soma=soma+i;
printf("valor da soma = %d \n", soma);
}
getch();
}
Exemplo:
#include <stdio.h>
void main()
{
int i;
for ( i = 1 ; i <= 10 ; i = i + 1)
printf("%d \n", i);
getch();
}
Exercício:
91
12.Escreva no ecrã Hello até 10 (ciclo Do … While).
#include <stdio.h>
void main()
{
int count;
count=0;
do
{
++count;
printf("%d Hello \n", count);
}while (count < 10);
getch();
}
92
13.Escreva no ecrã os números pares até 100 (função continue).
#include <stdio.h>
void main()
{
int x ;
}
getch();
}
93
14. “Receber dois números e dar o resultado da soma dos dois números –
utilizando uma função”
Algoritmo
Inicio
Escrever:"Entre com o valor de a: ";
Ler a;
Escrever: "Entre com o valor de b: ";
Ler b;
Calculo da função: resultado = soma(a, b);
escrever: "O resultado é:", resultado;
Fim
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();
}
94
15. “Fazer aparecer no ecrã a seguinte frase: Carta de Setembro – utilizando
um procedimento”
Algoritmo
Procedimento: carta ()
Inicio
Escrever: “ Carta de Setembro”;
Fim do procedimento
Inicio
Nome do procedimento: carta ();
Fim
Programação
#include <stdio.h>
carta ()
{
printf(" Carta de Setembro");
getch();
}
void main()
{
carta ();
}
95
16. Como armazenar as notas de 100 alunos? Utilizar a estrutura de um
vector.
Algoritmo
Inicio
nota[100];
Escrever:("Numero de alunos: ");
Ler: numero alunos;
para i=0; i<numero alunos; i= i+1 fazer
Inicio ciclo
Escrever:("Nota do aluno : ", i+1);
Ler: nota[i];
Fim ciclo
Fim
Programação
#include <stdio.h>
void main()
{
float nota[100];
int n, i;
printf("Numero de alunos: ");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("Nota do aluno %d: ", i+1);
scanf("%f", ¬a[i]);
}
}
96
Exemplo:
#include <stdio.h>
void main()
{
float nota[100];
int n, i;
printf("Numero de alunos: ");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("Nota do aluno %d: ", i);
scanf("%f", ¬a[i]);
}
printf("Qual é o aluno?");
scanf("%d", &i);
printf("Nota do aluno %f ", nota[i]);
getch();
}
97
17. Leitura e escrita de uma matriz 4x4. Utilizar a estrutura de matrizes.
Algoritmo
Inicio
matriz [4][4];
Para i = 0; i < 4; i++ fazer
Para j = 0; j < 4; j++ fazer
Inico ciclo
Escrever: ("Matriz[] []: ", i, j);
Ler: matriz[i][j];
Fim ciclo
Para i = 0; i < 4; i++ fazer
Inicio ciclo
Para j = 0; j < 4; j++ fazer
Escrever: matriz[i][j];
Fim ciclo
Fim
Programação
#include <stdio.h>
void main()
{
int matriz [4][4];
int i, j;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
{
printf ("Matriz[%d][%d]: ", i, j);
scanf ("%d", &matriz[i][j]);
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
printf ("%3d ", matriz[i][j]);
printf ("\n");
}
getch();
}
98
Ou
#include <stdio.h>
void main()
{
int matriz [2][2];
int i, j, linhas, colunas;
printf("Introduza o numero de linhas:");
scanf("%d", &linhas);
printf("Introduza o numero de colunas:");
scanf("%d", &colunas);
for (i = 0; i < linhas; i++)
for (j = 0; j < colunas; j++)
{
printf ("Matriz[%d][%d]: ", i, j);
scanf ("%d", &matriz[i][j]);
}
for (i = 0; i < linhas; i++)
{
for (j = 0; j < colunas; j++)
printf ("%3d ", matriz[i][j]);
printf ("\n");
}
getch();
}
99
Programação em MatLab
Acesso ao MatLab
100
É a seguir ao “prompt”, », que cada instrução deve ser introduzida. As
instruções devem ser inseridas em letras minúsculas. As variáveis introduzidas
em minúsculas e em maiúsculas correspondem a variáveis diferentes.
Exemplo:
» x =1
Ficheiros do MatLab
» save sessão
» load sessao
101
Os ficheiros com extensão m, são ficheiros que podem conter
instruções em MatLab e funções. São interpretados pelo MatLab.
Elementos Básicos
102
Exemplos:
» 2+3
» 3*4,4^2
» 2+3*4^2
» x=3,y=x^2
» y/x
» z=2*ans,ans
» a=sqrt(2)
» format long,b=sqrt(2)
» a-b
» format short
103
Matrizes
Nome da matriz = [ a11 a12 a13 …a1n ; a21 a22 a23 … a2n ; … ; am1 am2 am3 … amn ];
Exemplo:
» A = [1 2 3; 4 5 6; 7 8 9]
ou
» A=[
123
456
7 8 9]
A=
1 2 3
4 5 6
7 8 9
104
Uma matriz ou um vector só aceita números inteiros positivos para índice.
Exemplo:
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);
Exemplo:
a =[1,2,3,4] e b =[1,2,3,4] em que c =a.*b
105
Considere:
Calcule:
• matriz B, a transposta de A.
• soma de A+B.
• o vector y=x-1.
• x’*y
106
Funções Elementares
Trignométricas
sin seno
cos cosseno
tan tangente
asin arcosseno
acos arcocosseno
atan arcotangente
sinh seno hiperbólico
cosh cosseno hiperbólico
tanh tangente hiperbólica
asinh arcosseno hiperbólico
acosh arcocosseno hiperbólico
atanh arcotangente hiperbólica
Matemáticas elementares
107
Matrizes especiais
As funções mais comuns para a construção de matrizes especiais são:
Outras funções
108
Análise de dados em coluna
Exemplo:
Supondo a matriz A,
» A = [9 8 4;1 6 5;3 2 7]
» m = max(A)
» mv = mean(A)
» s = sort(A)
109
OPERADORES
Operadores aritméticos
• Adição ( + );
Exemplo:
• Subtracção ( - ); >> a = 4
>> a+b
• Potência ( ^ ); ans
=12
• Multiplicação ( * );
• Divisão à esquerda( \ );
• Divisão à direita ( / ).
Operadores relacionais
>> b =8
• > maior que
>> a<b
• > = maior ou igual a
ans =
• = = igual a 1
• ~ = diferente de
110
PROGRAMAÇÃO
Comentário
% no início de uma linha faz com que essa linha seja ignorada na execução do
programa.
% <comentário>
Exemplo:
<variável> = <valor>;
Exemplos:
soma = 0;
valor_lido = 1;
soma = soma + valor_lido;
media = soma / 4;
111
Saída de dados
fprintf
fprintf(format, data)
O valor de pi é de 3,141593
disp
Mostrar <variável>
A saída de dados é mostrada no monitor e o valor da <variável> pode
ser uma constante ou pode ser introduzida pelo teclado.
disp(<variável>);
Exemplo:
soma=1;
disp(soma);
112
Mostrar "<mensagem>"
disp('<mensagem>');
Exemplo:
Entrada de dados
<variável> = input('<mensagem>');
Exemplo:
Exemplo:
113
ESTRUTURAS DE CONTROLO DE FLUXO
Estruturas decisão
Exemplo:
114
Estrutura: Se <teste> então <alternativa 1 de instruções>
senão <alternativa 2 de instruções>
if <teste>
<alternativa 1 de instruções>
Else
<alternativa 2 de instruções>
End
Exemplo:
n1 = input('Digite um numero: ');
if (n1 < 0)
disp('Numero negativo.');
else
disp('Positivo ou zero.');
end
115
Estrutura de repetição
Estrutura:
Para <variável> = <valor inicial> até <valor final> repetir <instruções>
for <variável> = <valor inicial>:<valor final> <instruções> end
soma = 0;
for contagem = 1:2
n = input('Proximo num.: ');
soma = soma + n;
end
media = soma / 2;
disp(media);
116
Estrutura: Enquanto <teste> repetir <instruções>
while <teste>
<instruções>
end
Exemplo:
Estrutura switch
117
Exemplo: Perguntar ao utilizador se quer sair.
x=0;
while (x==0)
letra=input('Introduza a letra que pretende utilizar:1-ligar 2-
desligar 3-furar: ');
switch (letra)
case 1
disp('Ligar');
case 2
disp('Desligar');
case 3
disp('Furar');
otherwise
disp('Operacao invalida');
end
x=input('Quer sair?1-sim ou 0-não:');
end
118
Tratamento Gráfico
Exemplo:
• preparar os dados;
• imprimir o gráfico.
119
Representação gráfica
x=[1 6 15 20 25]
y=[0 3 8 11 17] entrada dos valores das coordenadas em x e em y.
Podemos ter outras variáveis (curvas) em y.
figure(1) abre a janela gráfica.
plot(x,y) representa o gráfico com as coordenadas x e y.
h=plot(x,y) definição da variável h com os valores do gráfico.
Por defeito, a escala dos eixos é feita automaticamente. No entanto, esta pode
ser alterada através de,
120
v=axis escala no vector v
axis square mesma escala para ambos os eixos
axis equal mesma escala e marcas pequenas para ambos os eixos
axis off sem escala
axis on com escala
Outros:
121
Exemplo:
>> x=[1 6 15 20 25];%valores de x
>> y1=[0 3 8 11 17];%valores de y1
>> y2=[0 7 8 19 21];%valores de y2
>> y3=[0 5 8 18 19];%valores de y3
>> figure(1) %abre a janela gráfica
>> h=plot(x,y1,x,y2,x,y3);% Representa gráfico
>> set(h,'LineWidth',2,{'LineStyle'},{'--';':';'-.'})% Definição das linhas dos gráficos
>> set(h,{'Color'},{'r';'g';'b'})%Definição das cores das linhas
>> axis([0 25 0 21])%Definição dos eixos
>> grid on%Mostrar as linhas e colunas dos eixos
>> xlabel('Tempo')% adiciona uma legenda ao eixo do x
>> ylabel('Amplitude')% adiciona uma legenda ao eixo do y
>> legend(h,'Primeira','Segunda','Terceira')% adiciona uma legenda ao gráfico
>> title('exemplo')%adiciona um título ao gráfico
>> [y,ix]=min(y1);%minimo de y1
>> text(x(ix),y,'miny1')%escreve o minimo ‘miny1’
122
Duas maneiras de representar várias funções num só gráfico,
» x=0:.01:2*pi;y1=sin(x);y2=sin(2*x);y3=sin(4*x); plot(x,y1,x,y2,x,y3)
» x=0:.01:2*pi;y=[sin(x)',sin(2*x)',sin(4*x)']; plot(x,y)
123
Vários gráficos numa única janela
Exemplo:
» t=0:pi/20:2*pi;
» [x,y]=meshgrid(t); % ordena em colunas o valores de x e de y
» subplot(2,2,1),plot(sin(t),cos(t)) % cria um sub gráfico
» axis equal
» z=sin(x)+cos(y);
» subplot(2,2,2),plot(t,z)
» axis([0 2*pi,-2 2])
» z=sin(x).*cos(y);
» subplot(2,2,3),plot(t,z)
» axis([0 2*pi -1 1])
» z=sin(x).^2-cos(y).^2;
» subplot(2,2,4),plot(t,z)
» axis([0 2*pi -1 1])
124
Adição de gráficos a gráficos já criados
Exemplo:
» semilogx(1:100,'+')
» hold on
» plot(1:3:300,1:100,'-')
» hold off
Resultado final:
125
Funções Gráficas Elementares
semilogx gráfico com escala logarítmica no eixo dos xx' e escala linear no
eixo do yy'
semilogy gráfico com escala logarítmica no eixo yy' e escala linear no eixo
xx'
plotyy gráfico com escalas lineares e com dois eixos yy', um do lado
esquerdo e outro do lado direito.
126
Gráficos de matrizes
Exemplo:
» z=peaks;
» plot(z)
127
Gráficos de números complexos
Exemplo:
128
Controlo dos Gráficos
plot(x,y,’cor_estilodelinha_marca’)
Cor
c cyan, m magenta, y amarelo, r vermelho, g verde, b azul, w branco, k preto
Estilo de linhas
- sólida, -- tracejada, : pontos, -. traço-ponto, none nenhuma
Marcas
+ sinal +, o círculo, * asterisco, . ponto, x cruz, square quadrado, diamond
diamante, v triângulo invertido
plot3(x,y,z)
Exemplo:
» [x,y]=meshgrid([-2:.1:2]);
» z=x.*exp(-x.^2-y.^2);
» plot3(x,y,z)
129
Gráficos especiais – gráfico de barras
Exemplo:
» set(gca,’Ylim’,[15 30],’Layer’,’top’)
130
Sobrepor um gráfico a um gráfico de barras
» dias=0:5:35;
» temp=[29 23 27 25 20 23 23 27];
» bar(dias,temp)
» xlabel(‘Dia’)
» ylabel(‘Temperatura (ºC)’)
» tce=[515 420 370 250 135 120 60 20];
» h1=gca;
» h2=axes(‘Position’,get(h1,’Position’));
» plot(dias,tce,’LineWidth’,3)
» set(h2,’YaxisLocation’,’right’,’Color’,’none’,
’XTickLabel’,[])
» set(h2,’Xlim’,get(h1,’Xlim’),’Layer’,’top’)
131
» text(11,380,’Concentração’,’Rotation’,-55’,
‘FontSize’,14)
» title(‘Bioremediação’,’FontSize’,14)
Gráficos especiais
Gráfico de áreas
>> grid on
>> set(gca,'Layer','top')
>> set(gca,'Xtick',1:5)
132
Histogramas
Exemplos:
Histogramas de um vector
» yn=randn(10000,1);
» hist(yn)
133
134
Histogramas de matrizes
» y=randn(10000,3);
» hist(y)
» wdir=[45 90 90 45 360 335 360 270 335 270 335 335]; %direcção do vento
num período de 12 horas
» wdir=wdir*pi/180; %transformaçãoem radianos
» rose(wdir)
135
Gráficos de valores discretos
2D
» t=0:0.1:2*pi;
» y=sin(t);
» stem(t,y)
Outras funções
» stem(t,y,’fill’)
136
3D
» t=0:0.1:10;
» s=0.1+i;
» y=exp(-s*t);
» stem3(real(y),imag(y),t);
» hold on
» plot3(real(y),imag(y),t,’k’)
» hold off
» rotate3d on
Gráficos em degraus
» t=0:0.2:10;
» y=sin(t);
» stairs(t,y);
» hold on
» plot(t,y)
137
Gráficos interactivos
Programação
clf %aparece ficheiro gráfico
axis([0 10 0 10]) % escalas em x e y
hold on
x=[];y=[];n=0;
disp('O botão esquerdo do rato introduz os pontos')
disp('O botão direito do rato introduz o último ponto')
but=1;
while but==1
[xi,yi,but]=ginput(1);plot(xi,yi,'g')
n=n+1;x(n,1)=xi;y(n,1)=yi;
end
t=1:n;ts=1:0.1:n;
xs=spline(t,x,ts);ys=spline(t,y,ts);
plot(xs,ys,'c-')
hold off
138
Programação em LabView, versão 8.0
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.
139
Se pretendermos trabalhar noutro ficheiro já criado, deveríamos ir ao menu
“Open” e clicar no ficheiro pretendido.
VI - Virtual Instrument
140
141
Para colocar um botão; em qualquer ponto do Front Panel devemos clicar com
o botão direito e aceder á palette de funções, onde devemos escolher: Controls
- Boolean ; e depois devemos escolher o botão que pretendemos.
142
Para pormos a simulação a correr há que clicar no botão 2 “Run
continuoulys”, para fazer uma pausa há que clicar no botão 4 “Pause” e para
terminar a simulação clique no botão 3 “Abort execution”.
Nota: O botão 1 “Run” serve para pormos a simulação a correr, mas há que
ter uma estrutura cíclica.
OPERADORES
Operadores aritméticos
Constantes Math
143
Complexos
Manipulação de dados
Conversões
144
Exercícios:
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;
145
Operadores relacionais
Exemplo: x=y ?
Exercícios:
led1=X<=5;
led2=X=0;
led2=X>0.
146
Exemplo de simulação de circuitos de Electrónica Digital
Circuitos lógicos
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.
147
Para aceder aos blocos de portas lógicas clique com o rato do lado direito
sobre a janela de Diagramas de Blocos e seleccione a função “Boolean”,
parecendo de seguida uma janela com várias portas lógicas. Deve seleccionar
as portas lógicas que precise.
148
Ciclos
Existem dois tipos básicos de ciclos no LabVIEW: While e For
• Ciclo While o diagrama localizado dentro do ciclo é executado até que uma
condição se verifique (ou se deixe de verificar);
Nota:
Em ambos os casos existe um terminal i que corresponde ao número da
iteração (começa em 0)
149
Exemplo: Ciclo for
Número de iterações
Regulação do tempo de
cada ciclo
Informação da contagem
Informação da contagem
Regulação do tempo de
cada ciclo
Número de iterações
Terminal condição
150
Nota: Para adicionar um shift register, clicar com botão direito do rato sobre a
frame do For ou While e seleccionar Add Shift Register
Estrutura Case
Selecção Verdadeiro
ou Falso T[ºF]=32+1.8*T[ºC] T[ºC]=(T[ºF]-32)/1.8
151
Estrutura Sequência (Sequence)
152
Estrutura MathScript Node (ramo de escrita matemática)
153
Funções temporizadas
154
Função Elapsed Time
155
Porta Paralela
156
Entradas – Input’s
Saídas – Output’s
157