Вы находитесь на странице: 1из 16

PROBLEMA

Calcular a área de um terreno com a forma de um trapézio rectângulo, sendo dadas


as respectivas medidas das bases e da altura.

Como é que, a partir do enuncido do problema, partimos para a formulação do


respectivo algoritmo?

Imaginemos que não sabemos a fórmula da área dos tarpézios, mas se soubermos
outras mais comuns, como a área do rectângulo e a do triângulo, podemos recorrer
a estes conhecimentos para chegar à resolução deste problema.

Base menor
Altura

Base maior

Como podemos ver um trapézio pode decompor-se num rectângulo e num


triângulo rectângulo.
Resulta então:

Rectângulo: Triângulo

Área = comprimento x largura Área = Base x altura


altura

Trapézio

Área = Base maior + Base menor x altura


2
Pensando agora em termos de um algoritmo para um programa de computador,
poderemos começar por colocar as seguintes questões:

1) Qual é o objectivo principal ou global do programa?

R: O objetivo do programa é calcular a área de um trapézio.

2) Quais são os dados que necessitamos para operar dentro do programa?

R: Os dados que necessitamos para operar dentro do programa são: -


base maior; - base menor; - altura.
Estes são os dados que têm de ser fornecidos ao programa.

3) Quais são as operações que o programa deve efectuar para que, com base nos
dados disponíveis, alcançe o objectivo visado?

R: As operações que o programa deve efectuar são:


- pedir as medidas das bases e da altura do trapézio;
- efectuar o cálculo da área com base nos dados fornecidos;
- apresentar o resultado da área.

4) Como estrturar, da melhor forma possível, as operações do programa?

R: A sequenciação ou estruturação das operações, no caso deste


problema, no caso deste problema, não levanta qualquer dificuldade,
trata-se de uma sequência simples e linear das operações indicadas no
ponto anterior.
Clarificadas estas questões, vamos então passar à formulação do algoritmo, neste
caso, utilizando uma linguagem tipo pseudocódigo.

Início
Escreve („Quais as medidas das bases ?‟)
Ler (base1, base2)
Escreve („Qual a medida da altura?‟)
Ler (altura)
area (base1+base2)/2 x altura Iníco
Escreve („A área é ‟ , area)
Fim
Escreve
(„Quais as medidas das
bases?‟)

Fluxograma do algoritmo de sequência simples:


Ler (base1, base2)

Escreve
(„Qual a medida da altura?‟)

Escrita em Pascal

Program Terreno Ler (altura)

Var base1, base2, altura, area: real;

Begin Area (base1+base2)/2 x altura

Write (“Quais as medidas das bases?”);


Readln (base1, base2);
Writeln (“Qual a medida da altura?”); Escreve
Readln (altura); („A área é?, area)

area := (base1+base2)/2 x altura


Writeln (“A área é ”, area);
Fim
End.
PROBLEMA

Dadas duas variáveis a e b colocar uma terceira variável c, o resultado de (a+b)*b.


Escreva o respectivo algoritmo em pseudocódigo.

SOLUÇÃO

Início
Declarar a,b,c : Numérico
Ler (a,b)
c (a+b) * b
Escrever (a,b,c)
Fim

PROBLEMA

Escrever um algoritmo (pesudocódigo e fluxograma) pra calcular a soma de dois


números inteiros.

Iníco
SOLUÇÃO

Início Ler a
Ler (a)
Ler (b)
soma a+b Ler b
Escrever (soma)
Fim
soma = a + b

Escrever soma

Fim
PROBLEMA

Dadas duas variáveis a e b numéricas trocar os seus conteúdos e escrever a e b.


Escreva o respectivo algoritmo em pseudocódigo.

SOLUÇÃO A SOLUÇÃO B

Início Início
Declarar a,b,c : Numérico Declarar a,b : Numérico
Ler (a,b) Ler (a,b)
c a b a+b
a b a b-a
b c b b-a
Escrever (a,b) Escrever (a,b)
Fim Fim

PROBLEMA

Dadas as medidas dos dois catetos de um triângulo rectângulo é necessário calular


a sua hipotenusa e o perímetro do triângulo. Escreva o respectivo algoritmo em
pseudocódigo.

SOLUÇÃO
a) Teorema de Pitágoras refere que o quadrado da
hipotenusa é igual à soma do quadrado dos catetos, ou seja,
c 2 a 2 b 2 <=> c a 2 b2
c b) Perimetro = a + b + c
a
90º
c) Área = a x b / 2
b

Início
Declarar cateto1, cateto2, hipot, perim : Reais
Escrever (“Valores dos catetos?”)
Ler (cateto1,cateto2)
hipot sqrt (sqr(cateto1)+sqr(cateto2))
perim cateto1+cateto2+hipot
Escrever (“Hipotenusa=”, hipot)
Escrever (“Perimetro=”, perim)
Fim
PROBLEMA
Um problema de câmbios. Sunponhamos que necessitamos de adquirir uma certa
quantia em dólares (ou de outra moeda qualquer); queremos saber quantos Euros
temos de pagar por essa quantia de moeda estrangeira, sendo-nos dada ataxa de
câmbio corrente.

SOLUÇÃO:

PROBLEMA
Cálculo de uma percentagem. Sendo dado o número de eleitores de uma freguesia e
o número de votos numpartido P, calcular a respectiva percentagem.

SOLUÇÃO:
PROBLEMA
Cálculo do volume de um tanque e do valor do combustivel nele contido.
Sunponhamos que necessitamos de adquirir uma certa quantia em dólares (ou de
outra moeda qualquer); queremos saber quantos Euros temos de pagar por essa
quantia de moeda estrangeira, sendo-nos dada ataxa de câmbio corrente.

SOLUÇÃO:

Área = 2ab+2ac+2bc

c Volume = a .b .c

b
a
PROBLEMA
Dados 2 valores (inteiros) que serão os lados de um polígno de quatro lados,
identifique de que polígno de se trata.

SOLUÇÃO:

b b

a
a
RECTANGULO lada a < > lado b
QUADRADO lada a = lado b

INÍCIO

Início DECLARAR lado1 , lado2 : Inteiro

Declarar lado1, lado2 : Inteiro


Escrever “Qual o valor dos lados”
Escrever “É Rectangulo””
Escrever (“Qual o valor dos lados”) iro
Ler (lado1, lado2) LER lado1,lado2

SE lado1 = lado2 ENTÃO


Escrever (“É Quadrado”) a=b
Falso

SENÃO
Verdadeiro
Escrever (“É Rectangulo”)
FIM DE SE Escrever “É Rectangulo””
Escrever “É Quadrado”

Fim

Programa em linguagem Pascal: FI M

Program Poligno (Input, Output);


Var lado1, lado2 : Integer;
Begin
Write (“Qual o valor dos Lados ?”);
Readln (lado1, lado2);
IF lado1 = lado2 THEN Write (“É Quadrado”)
ELSE Write (“É Rectangulo”)

End.
PROBLEMA
Dados 2 lados (inteiros) de um polígno de 4 lados, com os ângulos internos iguais e
com os lados iguais dois a dois, determine de que polígno se trata ?

SOLUÇÃO:
PROBLEMA
Dado o algoritmo em pseudocódigo abaixo, responda :
a) Se B1= Verdadeiro, B2=Verdadeiro e B3=Falso, quais os comandos que serão executados ?

b) Se B1= Falso, B2=Verdadeiro e B3=Falso, quais os comandos que serão executados ?

c) Quais os valores de B1, B2, B3 para que somente o comando C5 seja executado ?

d) Se B1= Falso, B2=Verdadeiro e B3= Verdadeiro, quais os comandos que serão executados ?

Início
DECLARAR b1, b2, b3 : Lógico

SE b1 ENTÃO c1
SENÃO
SE b2 ENTÃO
SE b3 ENTÂO c2
SENÃO c3
c4
FIM DE SE
FIM DE SE
c5
FIM DE SE
Fim

SOLUÇÃO:

a)

b)

c)

d)
PROBLEMA
Qual o valor de w após a execução deste do algoritmo seguinte :

Início
DECLARAR a, b, c : Lógico
x , y : Real
v , w : Inteiro

a falso
b verdadeiro
c falso
x 1,5
y 3,2
x x+1
SE c ou ((x+y >5) ou (Não a e b)) ENTÃO w 0
SENÃO w 1
FIM DE SE
Fim

SOLUÇÃO:
Exemplo:
Suponhamos que pretendemos fazer um programa que nos pede dois números e, em seguida, no propõe a escolha para a
efectuação de uma das quatro operações tradicionais, com base nos dois números introduzidos.

ALGORITMO PROGRAM diasparafimdomes


DECLARAR num1, num2, result : REAL; VAR num1, num2, result : REAL;
op : CARACTER; op : CHAR;
INÍCIO BEGIN
ESCREVER (“Introduza dois números”); WRITELN (“Introduza dois números”);
LER (num1, num2); READLN (num1, num2);
ESCREVER (“Escolha uma operação, teclando o WRITELN (“Escolha uma operação, teclando o
respectivo carácter”); respectivo carácter”);
ESCREVER (“Adição = + Subtracção = - Multiplicação WRITELN (“Adição = + Subtracção = -
=* Divisão = /”); Multiplicação = * Divisão = /”);
LER (op) READLN op
CASO op CASE op
“+” : result num1 + num2; “+” : result := num1 + num2;

“-“ : result num1 - num2; “-“ : result := num1 - num2;

“*” : result num1 * num2; “*” result := num1 * num2;

“/” : result num 1 / num2; “/” result := num 1 / num2;

FIM (CASO) END


ESCREVER (“O resultado é:”, result); WRITELN (“O resultado é:, result);
FIM DO ALGORITMO.
END.
Exemplo:
Conceber um algoritmo e correspondente programa que calcule os dias que faltam para o fim do mês, sendo dados: o dia
corrente, o mês e o ano.

Analisemos o problema:
A primeira questão a ter em conta é que os diferentes meses do ano têm um número de dias variável, além disso, quando se
trata do mês de Fevereiro, acrescenta-se uma dificuldade adicional: nos anos comuns, este mês tem 28 dias, mas nos anos
bissextos tem 29 dias. Para simplificar um pouco, vamos considerar apenas os anos bissextos a partir de 1900 sbendo que,
neste caso, os anos bissextos são múltiplos de 4.

ALGORITMO PROGRAM diasparafimdomes


DECLARAR ano, mes, dia, diasquefaltam : INTEIRO VAR ano, mes, dia, diasquefaltam : integer
Início BEGIN
ESCREVER (“Introduza o ano”); LER (ano) Write (“Introduza o ano”); Readln (ano);
ESCREVER (“Introduza o mês”); LER (mes) Write (“Introduza o mês”); Readln (mes);
ESCREVER (“Introduza o dia”); LER (dia) Write (“Introduza o dia”); Readln (dia);
CASO mes CASE mes OF
1, 3, 5, 7, 8, 10, 12: diasquefaltam 31 - dia 1, 3, 5, 7, 8, 10, 12 : diasquefaltam := 31 – dia;
4, 6, 9, 11 : diasquefaltam 30 – dia 4, 6, 9, 11 : diasquefaltam := 30 – dia;
2 : SE (resto de ano dividido por 4) = 0 ENTÃO 2 : IF (ano MOD 4) = 0 THEN
Diasquefaltam 29 - dia diasquefaltam := 29 – dia
SENÃO diasquefaltam 28 - dia ELSE diasquefaltam := 28 – dia;
FIM DE SE

FIM (CASO) END


FIM DO ALGORITMO END.
Exemplo:
Vamos supor que nos são atribuídos 100 unidades monetárias para fazer apostas num jogo. O jogo consiste em: de cada vez
que se fizer uma jogada, o programa gera aleatoriamente um valor que pode ser 0 ou 1. Se o valor obtido for 0, o jogador perde
o que apostar, se for 1 ganha um valor igual à sua aposta.
O programa deve perguntar quanto queremos apostar e fazê-lo dentro de um ciclo que dure enquanto o número de jogadas não
ultrapassar 10 e enquanto houver dinheiro. Não podem ser aceites apostas superiores ao dinheiro disponível em cada momento.

ALGORITMO PROGRAM
DECLARAR disponivel, aposta, aleatorio: INTEIRO VAR disponivel, aposta, aleatorio: integer
Início BEGIN
disponivel 100 disponivel := 100;
contador 0 contador := 0;
ENQUANTO (disponivel > 0) e (contador < 10) WHILE (disponivel > 0) AND (contador < 10) DO
FAZ BEGIN
ESCREVER (“Quanto aposta?”); LER (aposta) WRITELN (“Quanto aposta?”); READLN (aposta);
SE aposta disponivel ENTÃO IF aposta <= disponivel THEN
gera aleatorio entre 0 e 1 BEGIN
SE aleatorio = 1 ENTÃO RANDOMIZE; aleatorio := random (2);
ESCREVER (“Ganhou”) IF aleatorio := 1 THEN
disponivel disponivel + aposta BEGIN
SENÃO WRITELN (“Ganhou”);
ESCREVER (“Perdeu”) disponivel := disponivel + aposta;
disponivel disponivel - aposta END ELSE
ESCREVER (“Dinheiro no momento:”, disponivel) BEGIN
FIM (ENQUANTO) WRITELN (“Perdeu”);
FIM DO ALGORITMO disponivel := disponivel – aposta;
END;
WRITELN (“Dinheiro no momento:” disponivel);
END;
READLN;
END.

Вам также может понравиться