Exercícios de Verificação de Programas

Estes exercícios foram copiados e/ou inspirados nas seguintes obras:

Instruções Extra

Exercício 1 Em que circunstâncias a instrução if G {A} else {B} não termina?

Exercício 2 Uma instrução comum que não está presente na nossa linguagem de programação é o for, que pode ser usado para somar termos de uma sucessão como no exemplo seguinte:

#![allow(unused)]
fn main() {
s = 0;
for i = 0; i <= max; i = i + 1 {
    s = s + 2 * i;
} 
}

Depois de executar a cópia s = 0 inicial, a instrução for executa primeiro i = 0, depois o corpo s = s + 2 * i seguido do incremento i = i + 1 repetidamente até que i <= max fique falso.

Explique como a instrução for pode ser definida na linguagem inicial.

Estado

Exercício 3 Para cada estado tal que e , determine, justificando, quais da seguintes relações são válidas:

  1. .
  2. .
  3. .
  4. .
  5. .
  6. .

Provas

Exercício 4 Use as regras adequadas para provar:

  1. .
  2. .
  3. onde P3 é
#![allow(unused)]
fn main() {
a = 1;
y = x;
y = y - a;
}

Exercício 5 Escreva programas tais que os triplos seguintes sejam válidos e, de seguida, faça as respetivas demonstrações.

  1. .
  2. .

Verificação de Programas

Exercício 6 Prove a validade de onde é o menor de e e P é o programa

#![allow(unused)]
fn main() {
if x > y {
    z = y;
} else {
    z = x;
}
}

Exercício 7 Prove a validade de onde é o menor de e e P é o programa

#![allow(unused)]
fn main() {
if x <= y {
    z = x;
} else {
    z = y;
}
}

Exercício 8 Para cada uma das especificações seguintes escreva um programa adequado e prove que está correto:

  1. .
  2. .

Exercício 9 A função caraterística da relação é

Por exemplo, e .

Prove a validade de onde Xpos é o programa

#![allow(unused)]
fn main() {
if x > 0 {
    y = 1;
} else {
    y = 0;
}
}

e

Exercício 10 Prove a validade de onde Copy1 é o programa

#![allow(unused)]
fn main() {
a = x;
y = 0;
while a != 0 {
    y = y + 1;
    a = a - 1;
}
}

Exercício 11 Prove a validade de onde Multi1 é o programa

#![allow(unused)]
fn main() {
a = 0;
z = 0;
while a != y {
    z = z + x;
    a = a + 1;
}
}

Exercício 12 Prove a validade de onde Multi2 é o programa

#![allow(unused)]
fn main() {
z = 0;
while y != 0 {
    z = z + x;
    y = y - 1;
}
}

Exercício 13 Prove a validade de onde Copy2 é o programa

#![allow(unused)]
fn main() {
y = 0;
while y != x {
    y = y + 1;
}
}

Exercício 14 É suposto o programa Div calcular o dividendo dos inteiros e ; isto é, o único inteiro tal que existe um inteiro (o resto) tal que e .

Por exemplo, se e então porque , com .

Prove que sendo Div o programa

#![allow(unused)]
fn main() {
r = x;
d = 0;
while r >= y {
    r = r - y;
    d = d + 1;
}  
}

Exercício 15 Prove a validade de onde é o menor de e e Minup é o programa

#![allow(unused)]
fn main() {
z = 0;
while z < y and z < x {
    z = z + 1;
} 
}

Exercício 16 Modifique o exercício anterior de forma a calcular o máximo de . Use a seguinte igualdade aritmética:

Exercício 17 Complete o programa seguinte, e demonstre a sua validade, de forma a calcular o máximo de .

#![allow(unused)]
fn main() {
? ? x;
while ? ? y {
    z = z + 1;
} 
}

Exercício 18 Prove a validade de onde Downfac é o programa

#![allow(unused)]
fn main() {
a = x;
y = 1;
while a > 0 {
    y = y * a;
    a = a - 1;
}
}

Exercício 19 Prove a validade de onde Somat1 é o programa

#![allow(unused)]
fn main() {
i = 0;
y = 0;
while i <= x {
    i = i + 1;
    y = y + i;
}
}

sabendo que

Exercício 20 Prove a validade de onde Somat2 é o programa

#![allow(unused)]
fn main() {
y = 0;
while x > 0 {
    y = y + x;
    x = x - 1;
}
}

usando as igualdades aritméticas do exercício anterior.