segunda-feira, 22 de junho de 2020

Antes de mais, faço votos de que continuem bem.  

Relembro que os critérios de avaliação para o 3ºperíodo foram reformulados e aprovados em Conselho Pedagógico, para o ensino à distância. Encontram-se disponíveis para consulta aqui

Descarrega o ficheiro da autoavaliação aqui


    • Preenche o ficheiro, grava-o como ficheiro PDF, com o seguinte nome de ficheiro:

     12ºturma nome_aluno AIb3ºP, como exemplo: 12ºA Ana Ferreira AIb3ºP

    •  Envia o ficheiro para correio.aluno@gmail.com com o assunto Autoavaliação

    segunda-feira, 23 de março de 2020

    Antes de mais, faço votos de que se encontrem bem.  


    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,

    $ 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}
    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.