{ (* 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 |
||||