{ (* Pressupostos: *) } { (* Resultado a atingir: *) Deve aparecer escrito um triangulo rectangulo de base m com hipotenusa a direita. Por exemplo, se m = 5 deve aparecer: * ** *** **** ***** } triangulo_m_com_para inicio inteiro m, k; escrever linha; (* Leitura do valor de m: *) escrever "Tamanho do triangulo: "; ler para m; k <- 1; para k <- 1, m: (* Escrever linha com k asteriscos: */ (* Escrever k asteriscos: *) repetir k vezes: escrever "*"; fim repetir; (* Escrever fim-de-linha: *) escrever linha; fim para; fim.
{ (* Pressupostos: *) b > 0 e m e n >= 2b. } { (* Resultado a atingir: *) Deve aparecer escrito um rectangulo de m x n com borda de b asteriscos. Por exemplo, se m = 6 e n = 5 deve aparecer: ***** ***** ** ** ** ** ***** ***** } rectangulo_oco_mxn_b inicio inteiro m, n, b; escrever linha; (* Leitura dos valores de m, n e b: *) escrever "Tamanho do rectangulo (altura, largura e espessura): "; ler para m, n, b; (* Topo do rectangulo (b linhas de n asteriscos): *) repetir b vezes: repetir n vezes: escrever "*"; fim repetir; escrever linha; (* Meio do rectangulo (m-2b linhas): *) repetir m - 2*b vezes: (* b asteriscos iniciais: *) repetir b vezes: escrever "*"; (* n-2b espacos: *) repetir n-2*b vezes: escrever " "; fim repetir; (* b asteriscos finais: *) repetir b vezes: escrever "*"; escrever linha; fim repetir; (* Base do rectangulo (b linhas de n asteriscos): *) repetir b vezes: repetir n vezes: escrever "*"; fim repetir; escrever linha; fim.
acções | n |
expressões | ecrã |
---|---|---|---|
n <- 0; |
0 | ||
repetir 1 de 20 |
0 | ||
escrever n, linha; |
0 | 0 <fim-de-linha> | |
n <- (n + 7) mod 11; |
7 | 7 | |
repetir 2 de 20 |
7 | ||
escrever n, linha; |
7 | 7 <fim-de-linha> | |
n <- (n + 7) mod 11; |
3 | 3 | |
repetir 3 de 20 |
3 | ||
escrever n, linha; |
3 | 3 <fim-de-linha> | |
n <- (n + 7) mod 11; |
10 | 10 | |
repetir 4 de 20 |
10 | ||
escrever n, linha; |
10 | 10 <fim-de-linha> | |
n <- (n + 7) mod 11; |
6 | 6 | |
repetir 5 de 20 |
6 | ||
escrever n, linha; |
6 | 6 <fim-de-linha> | |
n <- (n + 7) mod 11; |
2 | 2 | |
repetir 6 de 20 |
2 | ||
escrever n, linha; |
2 | 2 <fim-de-linha> | |
n <- (n + 7) mod 11; |
9 | 9 | |
repetir 7 de 20 |
9 | ||
escrever n, linha; |
9 | 9 <fim-de-linha> | |
n <- (n + 7) mod 11; |
5 | 5 | |
repetir 8 de 20 |
5 | ||
escrever n, linha; |
5 | 5 <fim-de-linha> | |
n <- (n + 7) mod 11; |
1 | 1 | |
repetir 9 de 20 |
1 | ||
escrever n, linha; |
1 | 1 <fim-de-linha> | |
n <- (n + 7) mod 11; |
8 | 8 | |
repetir 10 de 20 |
8 | ||
escrever n, linha; |
8 | 8 <fim-de-linha> | |
n <- (n + 7) mod 11; |
4 | 4 | |
repetir 11 de 20 |
4 | ||
escrever n, linha; |
4 | 4 <fim-de-linha> | |
n <- (n + 7) mod 11; |
0 | 0 | |
repetir 12 de 20 |
0 | ||
escrever n, linha; |
0 | 0 <fim-de-linha> | |
n <- (n + 7) mod 11; |
7 | 7 | |
repetir 13 de 20 |
7 | ||
escrever n, linha; |
7 | 7 <fim-de-linha> | |
n <- (n + 7) mod 11; |
3 | 3 | |
repetir 14 de 20 |
3 | ||
escrever n, linha; |
3 | 3 <fim-de-linha> | |
n <- (n + 7) mod 11; |
10 | 10 | |
repetir 15 de 20 |
10 | ||
escrever n, linha; |
10 | 10 <fim-de-linha> | |
n <- (n + 7) mod 11; |
6 | 6 | |
repetir 16 de 20 |
6 | ||
escrever n, linha; |
6 | 6 <fim-de-linha> | |
n <- (n + 7) mod 11; |
2 | 2 | |
repetir 17 de 20 |
2 | ||
escrever n, linha; |
2 | 2 <fim-de-linha> | |
n <- (n + 7) mod 11; |
9 | 9 | |
repetir 18 de 20 |
9 | ||
escrever n, linha; |
9 | 9 <fim-de-linha> | |
n <- (n + 7) mod 11; |
5 | 5 | |
repetir 19 de 20 |
5 | ||
escrever n, linha; |
5 | 5 <fim-de-linha> | |
n <- (n + 7) mod 11; |
1 | 1 | |
repetir 20 de 20 |
1 | ||
escrever n, linha; |
1 | 1 <fim-de-linha> | |
n <- (n + 7) mod 11; |
8 | 8 | |
fim repetir; |
8 |
Note-se que:
mod
calcula o resto da divisão
inteira do primeiro operando pelo segundo. Por exemplo, 7
mod
11 = 7 porque 7 laranjas a dividir por
11 meninos são 0 laranjas a cada um e sobram 7... { (* Pressupostos: *) q >= p } { (* Resultado a atingir: *) Deve aparecer escrita a tabuada dos n de p a q. Por exemplo, se n = 5, p = 6 e q = 12 deve aparecer: 5 x 6 = 30 5 x 7 = 35 5 x 8 = 40 5 x 9 = 45 5 x 10 = 50 5 x 11 = 55 5 x 12 = 60 } tabuada_n_p_q inicio inteiro n, p, q, i; escrever linha; escrever "Tabuada dos: "; ler para n; escrever "De: "; ler para p; escrever "A: "; ler para q; para i <- p, q: escreve n, " x ", i, " = ", n * i, linha; fim para; fim.
{ (* Pressupostos: *) n >= 1 } { (* Resultado a atingir: *) Deve aparecer escrita uma tabela com os valores de i, i div 2, i div 2 * 2, i mod 2 e i div 2 * 2 + i mod 2 quando i varia de 1 a n. Por exemplo, se n = 5 deve aparecer: 1 0 0 1 1 2 1 2 0 2 3 1 2 1 3 4 2 4 0 4 5 2 4 1 5 } tabela_div_mod inicio inteiro n, i; escrever linha; escrever "Tabela ate': "; ler para n; para i <- 1, n: escreve i, " ", i div 2, " ", i div 2 * 2, " ", i mod 2, " ", i div 2 * 2 + i mod 2, linha; fim para; fim.
A realização do traçado fica a cargo do leitor.
Note-se que se n mod
2 for 0, n
é par, e se for 1, n é ímpar.
Como somar um número variável de valores? Como não se sabe a
priori quantos valores se vai somar, torna-se necessário
usar uma acção de repetição. Dentro da acção de repetição
lê-se cada um dos valores a somar, que se vão acumulando numa
variável soma
que foi inicializada com 0 (zero,
elemento neutro da adição).
{ (* Pressupostos: *) n > 0 } { (* Resultado a atingir: *) Deve aparecer escrita a soma dos n valores lidos da entrada. } soma_n inicio inteiro n, soma, valor; escrever linha; escrever "Quantos somar? "; ler para n; escrever "Valores a somar: "; soma <- 0; repetir n vezes: ler para valor; soma <- soma + valor; fim repetir; escrever "A soma e' ", soma, linha; fim.
A solução é em tudo idêntica à da alínea anterior, devendo-se apenas substituir a linha:
escrever "A soma e' ", soma, linha;
por
escrever "A media e' ", soma div n, linha;
Como restringir a soma de duas horas ao intervalo 0 a 23? Se a
soma resultar em 25h, o resultado deverá ser 1h, se a soma for
50h o resultado deverá ser 2h, tendo-se retirado respectivamente
24h (1 dia) e 48h (2 dias). Assim, a solução corresponde ao que
resta quando se retira o máximo número de dias à soma das
horas tal que o número de horas restante seja positivo. Isto é,
a restrição faz-se calculando o resto da divisão inteira por
24, o que se pode fazer recorrendo ao operador mod
.
{ (* Pressupostos: *) h1, h2 >= 0 } { (* Resultado a atingir: *) Deve aparecer escrita a soma das duas horas restrita ao intervalo 0 a 23. } soma_horas1 inicio inteiro h1, h2; escrever linha; escrever "Introduza duas horas "; ler para h1, h2; escrever "O resultado e': ", (h1 + h2) mod 24; fim.
O número de dias é dado pela divisão inteira da soma das horas por 24.
{ (* Pressupostos: *) h1, h2 >= 0 } { (* Resultado a atingir: *) Deve aparecer escrito o numero de dias e horas correspondente `a soma das duas horas. } soma_horas2 inicio inteiro h1, h2; escrever linha; escrever "Introduza duas horas "; ler para h1, h2; escrever "Sao ", (h1 + h2) div 24, " dias e ", (h1 + h2) mod 24, "horas."; escrever linha; fim.
Neste caso é importante não esquecer que a soma dos minutos pode resultar num valor não nulo de horas (e.g. 40min + 50min são 1h e 30min).
{ (* Pressupostos: *) h1, h2, m1, m2 >= 0 } { (* Resultado a atingir: *) Deve aparecer escrito o numero de dias, horas e minutos correspondente `a soma das duas horas (com minutos). } soma_horas_minutos inicio inteiro h1, m1, h2, m2, hadicionais; escrever linha; escrever "Introduza duas horas (com minutos)"; ler para h1, m1, h2, m2; (* Calculo do numero de horas adicional devido `a soma dos minutos: *) hadicionais = (m1 + m2) div 60; escrever "Sao ", (h1 + h2 + hadicionais) div 24, " dias, "; escrever (h1 + h2 + hadicionais) mod 24, "horas e"; escrever (m1 + m2) mod 60, "minutos.", linha; fim.
Página
concebida e mantida por Eng. Manuel Menezes de Sequeira (última actualização 2006/07/07) Copyright © 1996-2001 ISCTE |