Antes de mais, faço votos de que continuem bem.
segunda-feira, 22 de junho de 2020
sexta-feira, 24 de abril de 2020
segunda-feira, 23 de março de 2020
Antes de mais, faço votos de que se encontrem bem.
Não sugiro algum trabalho extra pois alguns alunos iriam aproveitar-se disso para copiar trabalhos e não seria uma avaliação justa. No entanto, estou disponível para conferência online agendada, para os alunos que desejem uma avaliação extra, individual.
Todos os alunos serão avaliados segundo os critérios de avaliação aprovados em Conselho Pedagógico, que se encontram disponíveis, desde o início do ano letivo, no blogue da disciplina, na pasta Avaliação, os Critérios de avaliação.
Tendo em conta que a autoavaliação escrita serve para aferir
conteúdos, ficam aqui algumas diretrizes:
Sê sincero(a). Essa é, sem dúvida, a regra mais importante
da autoavaliação. Mentir para ti mesmo anula o propósito do exercício e não leva
a qualquer lugar. O objetivo deve ser: ter um panorama realista do teu
desempenho atual.
Verifica fatos. Para não te perderes no imaginativo ou criar
qualidades e defeitos, é preciso ter em conta dados concretos. Então, justifica
todas as tuas conclusões, esclarece os conceitos que justificam a tua nota
consultando os critérios de avaliação. Revê o teu trabalho realizado ao longo
das aulas, consulta a tua pasta partilhada e outros tipos de provas como testes
de avaliação.
- Para proceder à autoavaliação, descarregar o ficheiro para o computador Aqui
- Preencher o ficheiro, gravar como ficheiro PDF, com o seguinte nome de ficheiro:
12ºturma e o seu nome, exemplo: 12ºA Ana Ferreira
- Enviar o ficheiro para correio.aluno@gmail.com com o assunto Autoavaliação
Não sugiro algum trabalho extra pois alguns alunos iriam aproveitar-se disso para copiar trabalhos e não seria uma avaliação justa. No entanto, estou disponível para conferência online agendada, para os alunos que desejem uma avaliação extra, individual.
Desejo o melhor nestes tempos difíceis e bom trabalho.
quinta-feira, 27 de fevereiro de 2020
Testes
Para o enunciado Instrução For vA,
ver solução aqui
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Para o enunciado Instrução For vB,
ver solução aqui
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Para o enunciado Instrução ForCase vA,
$ Criar um programa em
Pascal para ler um número (uma quantidade de números) e a seguir ler essa
quantidade de números.
Depois de ler todos os números o programa deve
apresentar como resultado:
·
o maior dos números inseridos;
·
o
menor dos números inseridos;
·
a
média dos números inseridos.
$ Utilizar o comando For.
ver solução aqui
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Para o enunciado Instrução For vB,
$ Criar um programa em
Pascal para ler um número (uma quantidade de números) e a seguir ler essa
quantidade de números.
Depois de ler todos os números o programa deve
apresentar como resultado:
·
calcule
e mostre a quantidade de números inseridos entre 30 e 90;
·
a
média dos números lidos.
$ Utilizar o comando For.
ver solução aqui
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Para o enunciado Instrução ForCase vA,
$ Criar um programa em
Pascal em que, para um dado número de alunos introduzido pelo utilizador, dê o
resultado de um exame através de um conceito de acordo com a seguinte tabela:
Intervalo da pontuação obtida
|
Conceito
|
0 a 49
|
D
|
50 a 69
|
C
|
70 a 89
|
B
|
90 a 100
|
A
|
$ Utilizar o comando Case, com as listas de valores como
listas de intervalos, para obter a pontuação obtida.
$ Utilizar o comando For
ver solução aqui
segunda-feira, 17 de fevereiro de 2020
Instruções de Repetição: REPEAT, WHILE e FOR
8.3 Instruções de Repetição -
Repeat, While e For
As instruções de repetição
permitem, tal como o nome indica, repetir a execução das instruções que lhe
estejam associadas. O número de repetições pode ser controlado por uma
expressão booleana ou por um valor que define o número de repetições
pretendidas. As instruções de repetição condicional utilizam o primeiro método
enquanto que as instruções de repetição com contador utilizam o último. Em Pascal,
existem duas instruções do primeiro tipo, as instruções repeat e while,
e uma do segundo, a instrução for.
8.3.1 A Instrução de Repetição
Condicional REPEAT
Se pretendermos efetuar mais do
que uma vez o cálculo da raiz quadrada ou do quadrado de um número, usando o
programa exemplificado anteriormente, sem necessitarmos de iniciar uma nova
execução do programa, podemos utilizar a instrução repeat...until
(repetir…até).
A estrutura duma instrução REPEAT... UNTIL.é a seguinte:
Nesta nova versão do programa, o utilizador terá à sua
disposição uma terceira opção: Terminar (letra T). O programa é o seguinte:
program calcvarios;
var opcao: char;
numero,
resultado : real;
begin
repeat
writeln;
writeln ('Este programa
calcula a raiz quadrada ou o quadrado de um número pedido ao utilizador');
writeln;
writeln ('R - raiz
quadrada');
writeln ('Q - quadrado');
writeln
('T - terminar');
writeln;
write ('Opção -> ');
readln (opcao);
writeln ('Introduza
um valor');
readln (numero);
case opcao of
'r' ,'R' :begin
resultado := sqrt (numero);
write ('Raiz
quadrada de ', numero :10:3);
writeln (' é igual a', resultado :10:3)
end;
'q' , 'Q'
:begin
resultado :=sqr
(numero);
write ('Quadrado de'
, numero :10:3);
writeln ('é igual a',
resultado :10:3)
end;
't' , 'T' :begin
writeln;
writeln ('Programa Terminado')
end;
else begin
writeln;
write ('Opção errada');
writeln ('deve premir R,
Q ou T')
end;
end;
until (opcao = 't') or (opcao = ' T');
readln
end.
Note que as instruções que
constituem a parte de instruções deste programa estão delimitadas pelas
palavras chave repeat e until (opcao = 't' or opcao = 'T'), ou
seja. todas essas instruções são repetidas até que opção escolhida pelo
utilizador seja a letra 't' ou
Como facilmente se pode verificar,
a repetição termina quando a expressão booleana que sucede a palavra reservada until
tiver como resultado o valor true.
Esta expressão booleana só é
calculada após a execução das instruções incluídas no ciclo repeat … until, o
que significa que essas instruções são executadas pelo menos uma vez.
8.3.1.1 Exemplos Exemplo 1:
Escrever um programa que conte
caracteres lidos do teclado e pare quando aparecer um 'S' (Sair).
Programa:
Program contar (Input,
Output)
Var Contador; integer;
Car: char;
Begin
Contador: = 0;
Writeln (Introduza
caracteres ("S" para sair).);
Repeat
Readln
(car);
Contador:=
contador + 1:
Until (car = 'S' or car = 's'):
Writeln (Total ->', Contador, 'caracteres');
End.
Exemplo 2:
Construir um programa que imprima uma tabela de
senos e cosenos dos
ângulos compreendidos entre O e 360 graus, com um intervalo de 20 graus.
Programa:
Program Tabela;
Const
PI= 3.141592;
Var
Angulo : Integer; (Angulo em Graus}
Radiano : Real; {Angulo em Radianos}
Radiano : Real; {Angulo em Radianos}
Begin
Writeln (Tabela de valores
trignométricos'); Writeln;
Writeln ('Angulo (graus) Seno Coseno');
Writeln;
Angulo:= 0;
Repeat
Radiano:= Angulo * 2 * PI
/360;
Write (' ', Angulo: 4,' ');
Write (sin. (radiano)
: 7 : 3, ' ');
Writeln
(cos (radiano)
: 7 :3);
Angulo:=Angulo + 20;
Until Angulo>360;
End.
Execução:
Tabela de valores trigonométricos
Ângulo (graus)
|
Seno
|
Coseno
|
0
|
0.000
|
1.000
|
20
|
0.342
|
0.940
|
40
|
0.643
|
0.766
|
60
|
0.866
|
0.500
|
80
|
0.985
|
0.174
|
100
|
0.985
|
- 0.174
|
120
|
0.866
|
- 0.500
|
140
|
0.643
|
- 0.766
|
160
|
0.342
|
- 0.940
|
180
|
0.000
|
- 1.000
|
200
|
- 0.342
|
- 0.940
|
220
|
- 0.643
|
- 0.766
|
240
|
- 0.866
|
- 0.500
|
260
|
- 0.985
|
- 0.174
|
280
|
- 0.985
|
0.174
|
300
|
- 0.866
|
0.500
|
320
|
- 0.643
|
0.766
|
340
|
- 0.342
|
0.940
|
360
|
- 0.000
|
1.000
|
Note que o seno e o cosseno utilizam ângulos em radianos.
Em Pascal não seria necessário
definir a constante PI pois está pré-definida.
8.3.2 A Instrução de Repetição
Condicional while
Considere-se um programa que
calcule a soma e a média aritmética
de uma série de valores
introduzidos pelo teclado.
Este programa deve, repetidamente,
ler um valor do teclado, atualizar a soma e o contador. Este último não é mais
do que uma variável que conta quantos valores já foram introduzidos. O ciclo de
repetições deve terminar quando é introduzido um valor negativo, por outras
palavras, o ciclo deve continuar enquanto os valores introduzidos são positivos
ou zero.
A estrutura duma instrução While...Do (Enquanto...Faça)
é a seguinte:
O seguinte programa efectua os
cálculos pretendidos e utiliza uma instrução while para controlar o
ciclo de repetições:
program somedia;
{calcula a soma e a média duma
série de números}
var numero, soma, media :real; contador
:integer;
begin
soma :=0;
contador :=0;
readIn (numero); {lê
o primeiro número}
while (numero>=0)
do
begin
soma := soma + numero;
contador :=contador + 1;
readln (numero)
end;
if
(contador > 0) then
begin
media :=
soma / contador ;
writeln;
writeln ('Soma =' ,
soma : 10:3, ' Media =' , media: 10:3)
end
else
begin
writeln;
writeln (Valores insuficientes p/ calcular média')
end;
writeln;
writeln ('Programa Terminado')
end.
A instrução while incluí
uma expressão booleana que, neste exemplo, é:
(numero >= 0)
Enquanto esta expressão tiver como
resultado o valor troe a instrução dependente do while é
repetida. Neste caso, essa instrução é a instrução composta que atualiza as
variáveis soma e contador e que lê um valor do teclado para a
variável numero.
8.3.2.1 Exemplo
Construir um programa
que imprima uma tabela de senos dos ângulos. Num círculo trigonométrico com
estes a variarem de 10 em 10 graus (com início em 0 e fim em 360-graus).
Programa:
Program Senos;
Const PI=
3.141592;
Var I: Integer;
Begin
Writeln ('Tabela de
cálculo de senos');
Writeln;
Writeln ('Ângulos
entre O e 360 graus de 10 em 10 graus');
Writeln;
I := 0;
While I< 360 do
Begin
Write ('Sin (', I:4,') =', sin (I * 2* PI/360) :7:3) ;
Write (' ')
I :=I + 10;
Writeln ('Sin (', I:4,') = sin * 2* PI/360) :7:3) ;
I :=I + 10:
End;
Readln
End.
Execução:
Tabela de Cálculo de Senos
Ãngulos entre O e 360 graus de 10 em 10 graus
Sin
|
(
|
0)
|
=
|
0.000
|
Sin (
|
10)
|
=
|
0.174
|
Sin
|
(
|
20)
|
=
|
0.342
|
Sin (
|
30)
|
=
|
0.500
|
Sin
|
(
|
40)
|
=
|
0.643
|
Sin (
|
50)
|
=
|
0.766
|
Sin
|
(
|
60)
|
=
|
0.866
|
Sin (
|
70)
|
=
|
0.940
|
Sin
|
(
|
80)
|
=
|
0.985
|
Sin (
|
90)
|
=
|
1.000
|
Sin
|
(
|
100)
|
=
|
0.985
|
Sin (
|
110)
|
=
|
0.940
|
Sin
|
(
|
120)
|
=
|
0.866
|
Sin (
|
130)
|
=
|
0.766
|
Sin
|
(
|
140)
|
=
|
0.643
|
Sin (
|
150)
|
=
|
0.500
|
Sin
|
(
|
160)
|
=
|
0.342
|
Sin (
|
170)
|
=
|
0.174
|
Sin
|
(
|
180)
|
=
|
0.000
|
Sin (
|
190)
|
=
|
0.174
|
Sin
|
(
|
200)
|
=
|
- 0.342
|
Sin (
|
210)
|
=
|
- 0.500
|
Sin
|
(
|
220)
|
=
|
- 0.643
|
Sin (
|
230)
|
=
|
- 0.766
|
Sin
|
(
|
240)
|
=
|
- 0.866
|
Sin (
|
250)
|
=
|
- 0.940
|
Sin
|
(
|
260)
|
=
|
- 0.985
|
Sin (
|
270)
|
=
|
- 1.000
|
Sin
|
(
|
280)
|
=
|
- 0.985
|
Sin (
|
290)
|
=
|
- 0.940
|
Sin
|
(
|
300)
|
=
|
- 0.866
|
Sin (
|
310)
|
=
|
- 0.766
|
Sin
|
(
|
320)
|
=
|
- 0.643
|
Sin (
|
330)
|
=
|
- 0.500
|
Sin
|
(
|
340)
|
=
|
- 0.342
|
Sin (
|
350)
|
=
|
- 0.174
|
8.3.3 A Instrução de Repetição
For
As instruções de repetição while
e repeat, já descritas, utilizam uma expressão booleana que
determina o momento em que o ciclo de repetições deve ser terminado. São
instruções que devem, portanto, ser aplicadas nos casos em que o número de
repetições não é fixo.
A instrução de repetição for permite
a repetição das suas instruções subordinadas um número fixo de vezes.
A estrutura dum ciclo FOR é a
seguinte:
FOR variável := expressão
TO/DOWNTO expressão. DO instrução;
|
Para, por exemplo, construir um
programa que calcule a potência de um valor (por exemplo 22 ou 55)
é necessário que a base da potência seja multiplicada um número de vezes
equivalente ao valor do expoente. Assim, para calcular, por exemplo, 25
é necessário multiplicar a base 2 cinco vezes.
O seguinte programa utiliza a instrução for para
calcular o valor de uma potência em que a base e o expoente são dados
fornecidos por teclado.
program potencia (input,
output);
var
i, expoente : integer;
resultado, base : real;
begin
writeln ('Introduza a base') ;
readln (base) ;
writeln ('Introduza o
expoente') ;
readln (expoente) ;
resultado := 1 ;
for i := 1 to expoente
do
resultado := resultado * base;
writeln (Valor da
potência', resultado 15: 3);
readln
end.
No programa exemplificado é
utilizada a instrução for com o seguinte especto:
for i := 1 to expoente do
Note que entre as palavras
reservadas for e to existe uma atribuição do valor 1 à variável 1.
Esta variável, vulgarmente conhecida como contador, tem o seu valor
incrementado em uma unidade em cada repetição.
Assim, na primeira execução da
instrução dependente resultado := resultado * base
o valor de i
é 1, na segunda é 2 e assim sucessivamente, até atingir o valor da variável expoente que
é o valor indicado como valor final de i, na instrução for. entre as
palavras reservadas to e do. A variável 1 e as expressões que
indicam o seu valor inicial, neste caso 1, e o seu valor final, neste caso
expoente, têm ser do tipo integer.
Se o
utilizador introduzir um valor, para a variável expoente, que seja menor que 1
(valor inicial), não será executada a instrução for visto que o valor
inicial é superior ao valor final indicado nesta instrução.
Considere-se agora um programa que
calcule o fatorial de um número inteiro positivo. A definição do fatorial de um número n (escrito n!) inteiro e positivo é a
seguinte:
n!=nx(n-1)x(n-2)x...x3x2x1
Por exemplo:
4 ! = 4 x 3 x 2 x 1 = 24
2 ! = 2 x 1 = 2
Um caso particular é: O ! = 1
O seguinte programa utiliza uma
instrução for para efetuar o cálculo do fatorial de um inteiro positivo
introduzido pelo teclado.
program factorial;
VAR
numero, i : integer;
fatorial : real;
begin
writeln ('Introduza um número inteiro positivo’);
readln (numero);
fatorial := 1;
for i := numero downto 1 do fatorial := fatorial * i ;
write ('Fatorial de', numero: 15); writeln ('e igual
a', fatorial :15:3); writeln ('Programa Terminado');
readln
end.
Note que neste caso a instrução for
tem a seguinte forma: for i := numero downto 1 do
A palavra_
reservada to existente no exemplo anterior foi substituída pela palavra downto ir a indicar que o valor do
contador (variável i) sofre um incremento negativo de uma unidade (-1) em cada
repetição. Por exemplo, se o valor fornecido para a variável numero for
5 a variável 1 toma esse valor durante a primeira execução da instrução
subordinada
fatorial := fatorial x i
sendo decrementada para 4 na segunda execução e assim
sucessivamente até atingir o valor final de 1 na última repetição. Neste caso
se o valor inicial for inferior ao valor final. por exemplo 0, a instrução for
não é executada.
8.3.3.1 Exemplos Exemplo(1-:)
Elaborar uma tabuada de
multiplicação de um número que é fornecido pelo utilizador.
Programa:
Program Tabuada;
Var
I, J : Integer;
Begin
Writeln (Tabuada de multiplicação'); Writeln;
Write ('Qual o valor
da tabuada?');
Readln (J);
For I :=1 To 10 Do
Begin
Writeln;
Writeln
(' ', I,' * J,' = ', I * J);
End;
Readln
End.
Execução:
Tabuada de multiplicação Qual o valor da tabuada? 38
1 * 38 = 38
2 * 38 = 76
3 * 38 = 114
4* 38 = 152
5 * 38 = 190
6 * 38 = 228
7 * 38 = 266
8* 38 = 304
9* 38 = 342
10 * 38 = 380
Exemplo 2:
Elaborar um programa que imprima
no écran uma tabela dos fatoriais dos números compreendidos entre 0 e 7.
Programa:
Program Fatoriais;
Var
I , J , K :Integer;
Begin
Writeln ('Tabela de
fatoriais de 0 ate 7');
Writeln;
For I:=0 To 7 Do
Begin
Write (' ', I, '! = 1');
k:=1;
For J:=2 To I Do
Begin
k:=k*J;
Write (' *
' , J);
End;
If k> 1 Then Write (' =', k);
writeln;
writeln;
end;
readln
end.
Note que são
usados dois ciclos FOR, um dentro do outro.
Execução:
Tabela de factoriais de 0 ate 7
0! =1
1 ! = 1
2!
= 1 * 2 = 2
3!
= 1 * 2 * 3 = 6
4!
= 1 * 2 * 3 * 4 = 24
5!
= 1 * 2 * 3 * 4 * 5 = 120
6!
= 1 * 2 * 3 * 4 * 5 * 6 = 720
7!
=1 * 2 * 3 * 4 * 5 * 6 * 7 = 5040
8.3.4 Exercícios com Instruções
de Repetição
1 - Reescreva o programa da secção
8.3.2.1 utilizando um ciclo REPEAT em vez de WHILE.
2 - Faça o mesmo
que no exercício 1 mas com um ciclo FOR.
3 - Elabore um
programa que apresente no écran as tabelas de
verdade dos operadores lógicos
AND, OR e NOT.
4 - Escreva uma sequência de
instruções, usando um ciclo REPEAT, que peça um valor do teclado e imprima uma
mensagem de erro até que o valor esteja entre 0 e 10.
5 - Faça o mesmo
que no exercício 4 mas com um ciclo WHILE.
Subscrever:
Mensagens (Atom)