programa teste; (*Teste OK*)
var x,a,b,c,z:inteiro;
inicio
 x:=1;
 a:=2;
 b:=3;
 c:=7;
 z:=1;
 se (x+a*b)>=((b+c)div z)
 entao escreva(x)
 senao escreva(a)
fim.

-----------------------------------

programa teste; {ERRO inteiros com e logico}
var x,a,b,c,z:inteiro;
inicio
 x:=1;
 a:=2;
 b:=3;
 c:=7;
 z:=1;
 se (x+a*b)e((b+c)div z)  {ERRO inteiros com e}
 entao escreva(x)
 senao escreva(a)
fim.

------------------------------------------

programa teste; {ERRO - expressão nao booleana}
var x,a,b,c,z:inteiro;
           
inicio
 x:=1;
 a:=2;
 b:=3;
 c:=7;
 z:=1;
 se (x+a*b)          {ERRO - expressão nao booleana}
 entao escreva(x)
 senao escreva(a)
fim.

---------------------------------------------
programa teste; {ERRO - variavel nao booleana}
var x,a,b,c:inteiro;
    z: booleano;
inicio
 x:=1;
 a:=2;
 b:=3;
 c:=7;
 se (x+a*b)<=((b+c)div z) {ERRO - variavel nao booleana} 
 entao escreva(x)
 senao escreva(a)
fim.

---------------------------------------------

programa teste; {ERRO atribuindo inteiros a booleano}
var x,a,b,c,z:booleano;
inicio
 x:=1;           {ERRO atribuindo inteiros a booleano}
 a:=2;
 b:=3;
 c:=7;
 z:=1;
 se (x+a*b)ou((b+c)div z)  {ERRO inteiros e ou}
 entao escreva(x)
 senao escreva(a)
fim.

----------------------------------------------

programa teste; {ERRO expressão nao booleanoa}
var x,a,b,c,z:inteiro;
           
inicio
 x:=1;
 a:=2;
 b:=3;
 c:=7;
 z:=1;
 enquanto (x)          {ERRO expressão nao booleanoa}
 faca inicio
      escreva(x)
    fim
fim.

---------------------------------------------

programa testefinal; {ERRO - variavel duplicada}

var opcao,x,y:inteiro;

procedimento numeros;
var x,y,total: inteiro;

procedimento dobro;
var media: inteiro;
inicio
  media:=(x+y)*2;
  escreva(media)
fim;
inicio
  leia(x);
  leia(y);
  total:= x+y;
  escreva(total);  {soma dos numeros lidos}
  dobro            {Calcula a media aritmetica dos numeros lidos}
fim;

procedimento p;               {calcula fatorial de um numero lido}
var z: inteiro;
    z:booleano;            {ERRO - variavel duplicada}
inicio
  z:= x; x:=x-1;
  se  z>1 entao p  {recursivo} 
  senao  y:=1;
  y:=y*z               
fim { p };

inicio
  leia(opcao);
  se opcao = 1
  entao numeros
  senao inicio
         leia(x);
         p;
         escreva(y)
       fim
fim.         

-----------------------------------------

programa testefinal; {ERRO variavel nao declarada}

var opcao,x,y:inteiro;

procedimento numeros;
var x,y: inteiro;

procedimento dobro;
var media: inteiro;
inicio
  media:=(x+y)*2;
  escreva(media)
fim;

inicio
  leia(x);
  leia(y);
  total:= x+y;         {ERRO variavel nao declarada}
  escreva(total);  {soma dos numeros lidos}  
  dobro            {Calcula a media aritmetica dos numeros lidos}
fim;

procedimento p;               {calcula fatouial de um numero lido}
var total,z: inteiro;
inicio
  z:= x; x:=x-1;
  se  z>1 entao p  {recursivo} 
  senao  y:=1;
  y:=y*z               
fim { p };

inicio
  leia(opcao);
  se opcao = 1
  entao numeros
  senao inicio
         leia(x);
         p;
         escreva(y)
       fim
fim.         

---------------------------------------

programa testefinal; {ERRO incompatibilidade de tipos }

var opcao,x,y:inteiro;

procedimento numeros;
var x,y,total: inteiro;

procedimento media;
var edia: inteiro;       {ERRO incompatibilidade de tipos}
inicio
  edia:= verdadeiro;
  escreva(edia)
fim;

inicio
  leia(x);
  leia(y);
  total:= x+y;
  escreva(total);  {soma dos numeros lidos}
  media            {Calcula a media aritmetica dos numeros lidos}
fim;

procedimento p;               {calcula fatorial de um numero lido}
var z: inteiro;
inicio
  z:= x; x:=x-1;
  se  z>1 entao p  {recursivo} 
  senao  y:=1;
  y:=y*z               
fim { p };

inicio
  leia(opcao);
  se opcao = 1
  entao numeros
  senao inicio
         leia(x);
         p;
         escreva(y)
       fim
fim.         

-------------------------------------------

programa testefinal; {ERRO procedimento duplicado}

var opcao,x,y:inteiro;

procedimento numeros;
var x,y,total: inteiro;

procedimento numeros;         {ERRO procedimento duplicado}
var media: inteiro;
inicio
  media:=(x+y)div 2;
  escreva(media)
fim;

inicio
  leia(x);
  leia(y);
  total:= x+y;
  escreva(total);  {soma dos numeros lidos}
  media            {Calcula a media aritmetica dos numeros lidos}
fim;

procedimento p;               {calcula fatorial de um numero lido}
var z: inteiro;
inicio
  z:= x; x:=x-1;
  se  z>1 entao p  {recursivo} 
  senao  y:=1;
  y:=y*z               
fim { p };

inicio
  leia(opcao);
  se opcao = 1
  entao numeros
  senao inicio
         leia(x);
         p;
         escreva(y)
       fim
fim.         

-----------------------------------------------

programa testefinal; {ERRO procedimento duplicado}

var opcao,x,y:inteiro;

procedimento numeros;
var x,y,total: inteiro;

procedimento numero;        
var media: inteiro;
inicio
  media:=(x+y)div 2;
  escreva(media)
fim;

inicio
  leia(x);
  leia(y);
  total:= x+y;
  escreva(total);  {soma dos numeros lidos}
  numero            {Calcula a media aritmetica dos numeros lidos}
fim;

procedimento numeros;            {ERRO procedimento duplicado}
    {calcula fatouial de um numero lido}
var z: inteiro;
inicio
  z:= x; x:=x-1;
  se  z>1 entao p  {recursivo} 
  senao  y:=1;
  y:=y*z               
fim { p };

inicio
  leia(opcao);
  se opcao = 1
  entao numeros
  senao inicio
         leia(x);
         p;
         escreva(y)
       fim
fim.         

-----------------------------------------------------

programa testefinal;          {ERRO - variavel duplicada}

var opcao,x,y:inteiro;

procedimento numeros;
var x,y,total: inteiro;
    x:inteiro;                          {ERRO - variavel duplicada}

procedimento dobro;
var media: inteiro;
inicio
  media:=(x+y)*2;
  escreva(media)
fim;
inicio
  leia(x);
  leia(y);
  total:= x+y;
  escreva(total);  {soma dos numeros lidos}
  dobro            {Calcula a media aritmetica dos numeros lidos}
fim;

procedimento p;               {calcula fatorial de um numero lido}
var z: inteiro;
    x:booleano;            
inicio
  z:= x; x:=x-1;
  se  z>1 entao p  {recursivo} 
  senao  y:=1;
  y:=y*z               
fim { p };

inicio
  leia(opcao);
  se opcao = 1
  entao numeros
  senao inicio
         leia(x);
         p;
         escreva(y)
       fim
fim.         

----------------------------------------------

programa testefinal; {ERRO  - variavel nao declarada}

var opcao,x,y:inteiro;

procedimento numeros;
var x,y: inteiro;

procedimento dobro;
var media,total: inteiro;
inicio
  media:=(x+y)*2;
  escreva(media)
fim;

inicio
  leia(x);
  leia(y);
  total:= x+y;         
  escreva(total);   {ERRO  - variavel nao declarada} 
  dobro            {Calcula a media aritmetica dos numeros lidos}
fim;

procedimento p;               {calcula fatorial de um numero lido}
var z1: inteiro;
inicio
  z:= x; x:=x-1;        
  se  z>1 entao p  {recursivo} 
  senao  y:=1;
  y:=y*z               
fim { p };

inicio
  leia(opcao);
  se opcao = 1
  entao numeros
  senao inicio
         leia(x);
         p;
         escreva(y)
       fim
fim.         

-----------------------------------------------------
(* testar operadores unários - OK - se (-a-b <=10) escreve 
1o valor senão escreve 2o  
digitar 2 e 3 escrevera 2
digitar -100 e 10 dará 10*)

program teste;

var a,b: inteiro;
    x, y: booleano;

inicio

  leia (a);
  leia(b);
  x:= verdadeiro;
  se ((-a-b) <= 10) e (x)
  então y:= x
  senão y:= falso;
  se y
  entao escreva (a)
  senao escreva(b)

fim.

------------------------------------------------------
(* teste procedimentos e funcoes aninhados recursivos OK 
escreva as sucessivas somas de tras para frente
 1
2
3
 1
4
5
 10 (FIM)
saida
9
5
5
*)

programa test;

var a,b: inteiro;

function soma: inteiro;
var c,a: inteiro;

  procedimento ler;
  inicio
     leia (c);
     leia (a);
     escreva (soma);
fim;

  procedimento loop;
  var x: inteiro;
  inicio
    leia (x);   {para parar digite um valor maior que 9 }
    se x < 10
    então ler;
  fim;

 inicio
  loop;
  soma:= c+a;
 fim;

inicio
  escreva(soma)
fim.
 
-----------------------------------------------------
programa testefinal;  (* Calcula a media ou fatorial - OK *)

var opcao,x,y:inteiro;

procedimento numeros;
var x,y,total: inteiro;

procedimento media;
var edia: inteiro;
inicio
  edia:=(x+y)div 2;
  se x>y entao escreva(x) senao escreva(y);
  escreva(edia)
fim;

inicio
  leia(x);
  leia(y);
  total:= x+y;
  escreva(total);  {soma dos numeros lidos}
  media            {Calcula a media aritmetica dos numeros lidos}
fim;

procedimento p;               {calcula fatouial de um numero lido}
var z: inteiro;
inicio
  z:= x; x:=x-1;
  se  z>1 entao p  {recursivo} 
  senao  y:=1;
  y:=y*z               
fim { p };

inicio
  leia(opcao);
  se opcao = 1
  entao numeros
  senao inicio
         leia(x);
         p;
         escreva(y)
       fim
fim.         

-------------------------------------------

programa testefinal;  {calcula o dobro ou fatorial - OK}

var opcao,x,y:inteiro;

procedimento numeros;
var x,y,total: inteiro;

procedimento dobro;
var media: inteiro;
inicio
  media:=(x+y)*2;
  escreva(media)
fim;

inicio
  leia(x);
  leia(y);
  total:= x+y;
  escreva(total);  {soma dos numeros lidos}
  dobro            {Calcula o dobro dos numeros lidos}
fim;

procedimento p;               {calcula fatorial de um numero lido}
var z: inteiro;
inicio
  z:= x; x:=x-1;
  se  z>1 entao p  {recursivo} 
  senao  y:=1;
  y:=y*z               
fim { p };

inicio
  leia(opcao);
  se opcao = 1
  entao numeros
  senao inicio
         leia(x);
         p;
         escreva(y)
       fim
fim.         

------------------------------------------