Desafios Programação Pascal

Desafios Pascal
Lista de programas resolvidos em pascal. Exercícios resolvidos em pascal
List of programs solved in pascal. Exercises solved in pascal

Exercício Enunciado Solução

Desafio 1


1- Fluxograma + código -
Elabora um algoritmo que verifique se um determinado número está dentro
de um determinado intervalo de valores (10 a 15)

1.1- Fluxograma + código -
Restruture o algoritmo para que o intervalo de valores seja introduzido
pelo utilizador.

1.1.1. Fluxograma + código
- Caso o utilizador digite um intervalo ex.(15...10), o programa deve
ordenar os números em ordem crescente e verificar se o numero digitado
está dentro do intervalo.



Program IntervaloNumeros10e15;
Var A, B, C, T: Integer;
Begin
  Writeln ('Digite um intervalo de 2 números:');
  Readln (B);
  Readln (C);
  If (B>C) then  //Verifica se é necessário ordenar
  begin
    T:=B; B:=C; C:=T;  //Ordena
  end;
  Writeln ('Digite mais um número para verificar se este se ecnontra nesse intervalo:');
  Readln (A);
  If (A>=B) and (A<=C) Then
      Writeln (A, ' está entre ', (B), ' e ', (C),'!')
  Else
      Writeln (A, ' não está entre ', (B), ' e ', (C), '!');
End.





Desafio 2

2- Fluxograma + código - Elabora um algoritmo compare 2 números e verifique qual deles é maior.
2.1. Fluxograma + código - Reestrutura o algoritmo para que verifique também se os números são iguais


Program desafio2 ;
    var a, b: real;
Begin
    writeln ('Digite o número A');
    readln(a);
    writeln ('Digite o número B');
    readln(b);
    if (a=b) then
    writeln ('Os números são iguais')
    else
    if (a>b) then 
    writeln ('O número maior é o A = ', a)
    else
    writeln ('O número maior é o B = ', b)  
End.




Desafio 3

3. Fluxograma + código -
Elabora um algoritmo que verifique se um número introduzido pelo
utilizador é positivo ou negativo.

3.1. Fluxograma + código -
Restruture o algoritmo para 2 números.

Program PositivoOuNegativo2 ;
    var A, B: real;
Begin
   writeln('Digite os seus números para conferir se são positivos ou negativos');
       readln(A);
       readln(B);
  if ((A>=0) and (B>=0)) then
          writeln('Os seus números são os dois positivos')
  else
        if ((A<0) and (B>=0))    or ((A>=0) and (B<0)) then
              writeln('Um dos seus números é positivo')
        else
            writeln('São os dois números negativos')       
End.




Desafio 4

4- Fluxograma + código -
Elabora um algoritmo que indique a nota qualitativa de um determinado
aluno, tendo por base a nota quantitativa. O programa deve mostrar uma
mensagem de "parabéns" no caso de o aluno ter sucesso ou "Tenta de
novo" para o caso de insucesso.
//M.insuf <19

//insuf entre 20 e 50

//suf entre 50 e 75

//bom entre 75 e 90

// M.BOM >90
NOTA: o programa pode/deve ter 2
variáveis 1 do tipo real e outra do tipo string (variável string
guardará a mensagem a mostrar ao utilizador).
4.1- Fluxograma + código -
Restruture o algoritmo para que alerte o utilizador no caso de o valor
introduzido ser superior a 100 ou inferior a 0.
4.1.1. Fluxograma + código
- Restruture o algoritmo para que, caso se verifique o 4.1. dê
oportunidade ao utilizador de reintroduzir a nota.

Program lesson4_Program1;
Uses  Crt;
Label 1;  { this is used with a goto statement }
Var Sel: String;
    N : Real;
Begin
        1:Clrscr;
        GotoXy(4,3);
        Writeln('1.Digite a nota para ver a sua avaliação');
        GotoXy(6,6);
        Write('Select: ');
        Readln(N);
           if (N>=0) and (N<20) then  
                   writeln('O aluno teve Muito Insuficiente,  melhore para a próxima')
          else           
          if (N>=20) and (N<50) then
               Writeln('O aluno teve Insuficiente, esteve quase')   
          else
         if (N>=50) and (N<75)then
                writeln('O aluno teve Suficiente, foi por pouco')
          else
          if (N>=75) and (N<90) then
                 writeln('O aluno teve Bom, muito bem') 
          else
          if (N>=90) and (N<=100) then
                  writeln('O aluno teve excelente, PARABÉNS')   
          else     
   Begin       
          if (N<0) or (N>100) then
                 writeln('Este valor é incorreto');
   End;
                 Writeln('Prima qualquer tecla para continuar...');
                  Readkey;
                  Goto 1;
End.



Desafio  5

5- Fluxograma + código -
Com recurso ao CASE elabore uma calculadora que permita efetuar as
operações entre 2 números, operações de + - X e /. Consoante a opção do
utilizador.
5.1-
Fluxograma + código -
Restruture o algoritmo para que, na divisão, alerte o utilizador no
caso de b=0, indicando que não é possível dividir por 0.
5.1.1.
Código - Restruture
o algoritmo para que, permita ao utilizador continuar a fazer cálculos.
O programa apenas termina se o utilizador escolher a opção sair.

Solução 1 Solução 2
Program casex;
Uses Crt;
Label 1;
Var Menu : Integer;
A,B: Real;
Sair : Char;

Begin
1:Clrscr;
Writeln ('Escolha uma opção:');
Writeln ('1 - Adição');
Writeln ('2 - Subtração');
Writeln ('3 - Multiplicação');
Writeln ('4 - Divisão');
Writeln ('5 - Sair');

Readln (Menu);

Case Menu Of

// ADIÇÃO
1 : Begin
Clrscr;
Writeln ('Digita 2 números:');
Write ('Número 1: '); Readln (A);
Write ('Número 2: '); Readln (B);
Writeln (A, ' + ',B,' = ',A+B);
Writeln ('Pressiona qualquer tecla para voltar ao menu...');
Readkey;
Goto 1;
End;

// SUBTRAÇÃO
2 : Begin
Clrscr;
Writeln ('Digita 2 números:');
Write ('Número 1: '); Readln (A);
Write ('Número 2: '); Readln (B);
Writeln (A, ' - ',B,' = ',A-B);
Writeln ('Pressiona qualquer tecla para voltar ao menu...');
Readkey;
Goto 1;
End;

// MULTIPLICAÇÃO
3 : Begin
Clrscr;
Writeln ('Digita 2 números:');
Write ('Número 1: '); Readln (A);
Write ('Número 2: '); Readln (B);
Writeln (A, ' X ',B,' = ',A*B);
Writeln ('Pressiona qualquer tecla para voltar ao menu...');
Readkey;
Goto 1;
End;

// DIVISÃO
4 : Begin
Clrscr;
Writeln ('Digita 2 números:');
Write ('Número 1: '); Readln (A);
Write ('Número 2: '); Readln (B);
If B=0 Then
Writeln ('Man... Digitaste um zero, não dá para fazer a divisão...')
Else
Writeln (A, ' : ',B,' = ',A/B);
Writeln ('Pressiona qualquer tecla para voltar ao menu...');
Readkey;
Goto 1;
End;

// SAIR
5 : Begin
Clrscr;
Writeln ('Tens a certeza que queres sair? S/N');
Readln (Sair);
If (Sair='S') or (Sair='s') Then Halt;
If (Sair='N') or (Sair='n')Then Goto 1;
End;

Else
Writeln ('Esse número não existe no menu!');
Readkey;
Goto 1;

End;
End.
program calculadora;
Uses Crt;
Label 1,2; { this is used with a goto statement }

var
x,y,op: integer;
YN : Char;
begin
1:Clrscr;

writeln(' Escolha uma das opções abaixo: ');
writeln(' 1. Soma ');
writeln(' 2. sub ');
writeln(' 3. mult ');
writeln(' 4. div ');
writeln(' 5. Sair ');
write(' Digite a opção desejada: ');
readln(op);
if op=5 then
goto 2;

write(' Digite o valor do primeiro Numero ');
readln(x);
write(' Digite o valor do segundo Numero ');
readln(y);



CASE op OF

1:
begin
writeln(' Opção Selecionada: 1. Soma ');
writeln(' A soma dos dois números é: ', (x+y));
writeln(' prima uma tecla para voltar ao menu ');
readln();
Goto 1;
end; //fim caso 1

2:
begin
writeln(' Opção Selecionada: 2. Subtração ');
writeln(' A subtração dos dois números é: ', (x-y));
writeln(' prima uma tecla para voltar ao menu ');
readln();
Goto 1;
end; //fim caso 2

3:
begin
writeln(' Opção Selecionada: 3. Multiplicação ');
writeln(' A multiplicação dos dois números é: ', (x*y));
writeln(' prima uma tecla para voltar ao menu ');
readln();
Goto 1;
end; //fim caso 3

4:
begin
writeln(' Opção Selecionada: 4. Divisão ');
if(y=0)then
begin
writeln(' Não existe divisão por zero. ');
writeln(' prima uma tecla para voltar ao menu ');
readln();
Goto 1;
end //fim IF
else
begin
writeln(' A divisão dos dois números é: ', (x/y):3:2);
writeln(' prima uma tecla para voltar ao menu ');
readln();
Goto 1;
end; //fim else
end;//fim caso 4
5:
begin
2:ClrScr;
Write('Are you sure?(Y/N)');
YN := Readkey;
If (YN = 'y') or (YN = 'Y') Then Halt; { 1 instruction, so no need of Begin..End }
If (YN = 'n') or (YN = 'N') Then Goto 1; { the goto statement is not recommended for frequent use }
end; //fim caso 3
else
writeln(' Opção Inválida. ');
end; //fim switch/case

readln();
end. //fim programa principal




Desafio  6


6- Fluxograma + código -
Com recurso aos ciclos de repetição elabore um algoritmo que permita
calcular a tabuada de um número digitado pelo utilizador, o programa
deve também perguntar o número de início e de fim da tabuada. (ex:
Tabuada do 3 entre 5 e 21)


    6.1. Fluxograma
+ código - Com recurso ao ciclo while.
    6.2. Fluxograma
+ código - Com recurso ao ciclo Repeat.
    6.3. Fluxograma
+ código - Com recurso ao ciclo For.


Solução 1 Solução 2 Solução 3
program tabuada; //desafio 6 while
uses CRT;
var
contad, lim, contx, num:integer;
begin
writeln('Qual o num para calcular a tabuada');
readln(num);
writeln('Tabuada entre que numeros ?');
readln(contx, lim);
clrscr;
contad:=contx; {iniciamos o contador a 0}
while contad begin
writeln(num,' x ',contad,' = ',num*contad);
contad:=contad+1; {incrementamos o contador a cada repetiçãoo}
end;
readkey;
end.
program tabuada; //desafio 6 for
uses CRT;
var
contad, lim, contx, num:integer;
begin
writeln('Qual o num para calcular a tabuada');
readln(num);
writeln('Tabuada entre que numeros ?');
readln(contx, lim);
clrscr;
contad:=contx; {iniciamos o contador a 0}
for contad:=contx to lim do
begin
writeln(num,' x ',contad,' = ',num*contad);
end;
readkey;
end.
program tabuada; //desafio 6 repeat
uses CRT;
var
contad, lim, contx, num:integer;
begin
writeln('Qual o num para calcular a tabuada');
readln(num);
writeln('Tabuada entre que numeros ?');
readln(contx, lim);
clrscr;
contad:=contx; {iniciamos o contador a contx}
repeat
contad:=contad+1;
begin
writeln(num,' x ',contad,' = ',num*contad);
end;
until (contad=lim) ;
readkey;
end.



Desafio  7

7- Fluxograma + código -
Construa
um programa que solicite ao utilizador um numero inteiro e identifique
a quantidade de caracteres do número digitado. (Ciclo While, função trunc)


7.1. Fluxograma
+ código - Com recurso ao ciclo while. Construa um algoritmo que
solicite ao utilizador o número de telemóvel. O programa deve verificar
se o número tem 9 dígitos.
7.2. Fluxograma +
código - Com
recurso ao ciclo while. Construa um algoritmo que solicite ao
utilizador o número de telemóvel. O programa deve verificar se o número
tem 9 dígitos. Se o número não tiver 9 dígitos o programa deve
parar por 3 segundos e de seguida volta a pedir o número ao utilizador.


Program Pzim ;//Verifica número de telemóvel desafio 7 (7.2)
uses crt;
label return;
var num, cont:integer;
Begin
return: clrscr;
cont:=0;
writeln('digite um numero de telefone');
readln(num);
while (num<>0) do
begin
cont:=cont+1;
num:=num div 10;
writeln('Numero original sem o ultimo digito = ',num);
num:=trunc(num);
end;
writeln('Total de dígitos do numero = ',cont);
if cont <> 9 then
begin
writeln('O numero de telefone não é valido');
delay (3000);
goto return;
end
else
writeln('O numero de telefone validado com sucesso');
readln;
End.



Desafio facultativo 2


Construa um programa que leia um conjunto de dados
contendo altura e sexo (MASCULINO ou FEMININO) de N pessoas e calcule e
escreva:



    - a maior e a menor altura do grupo e de quem é esta
altura ( Se HOMEM ou MULHER )

    - a média de altura entre as mulheres

    - O número de homens e a diferença percentual entre
estes e as mulheres



program alturamf;
uses CRT;
var
quant,cont,cont_m,cont_f:integer;
sexo,sme_alt,sma_alt:string;
alt,alt_maior,alt_menor,alt_media,soma_alt,dif:real;
begin
cont_m := 0;
cont_f := 0;
alt_menor := 10;
alt_maior := 0;
soma_alt := 0;
writeln('Qual a quantidade de pessoas?');
readln(quant);
while quant<1 do {obriga a quantidade de pessoas ser positiva}
begin
writeln('Quantidade inválida! Digite uma quantidade maior que 1!');
readln(quant);
end;
for cont:=1 to quant do
begin
writeln('Qual o sexo da ',cont,'o pessoa? masculino ou feminino');
readln(sexo);
while (sexo<>'m') and (sexo<>'f') do
begin
writeln('Sexo inválido! Digite para masculino ou para feminino!');
readln(sexo);
end;
writeln('Qual a altura da ',cont,'o pessoa?');
readln(alt);
while (alt<0) or (alt>5) do {obriga uma altura válida}
begin {repete até a altura ser válida}
writeln('Altura inválida! Digite uma altura entre 0 2 e 2 5!');
readln(alt);
end;
if alt begin
alt_menor:=alt; {guarda a menor altura}
sme_alt:=sexo; {guarda o sexo da menor altura}
end;
if alt>alt_maior then {testa a maior altura}
begin
alt_maior:=alt; {guarda a maior altura}
sma_alt:=sexo; {guarda o sexo da maior altura}
end;
if sexo='m' then {testa se o sexo e m}
cont_m:=cont_m+1 {conta a quantidade de homens}
else
begin
cont_f := cont_f+1; {conta a quantidade de mulheres}
soma_alt := soma_alt+alt; {soma a altura feminina}
end;
end ;
clrscr;
writeln('Resultado:');
write('A maior altura é: ',alt_maior:2:2,'m de um');
if sma_alt='m' then writeln(' homem')
else writeln('a mulher');
writeln('A média de alturas entre as mulheres é :',soma_alt/cont_f:2:2);
writeln('o número de homens é: ',cont_m:3);
write('A diferença percentual entre homens e mulheres é: ');
dif:=(cont_m/quant)*100-(cont_f/quant)*100;
if dif>0 then write(dif:2:2,'% há mais homens')
else write(abs(dif):2:2,'% há mais mulheres');
readkey;
end.



Desafio  8

8- Fluxograma -
Construa os fluxogramas para os programas representados abaixo





Desafio  9


9- Fluxograma + código - Construa um programa que solicite ao utilizador um número inteiro. Esse número
inteiro deve estar entre 5 e 50. Se o utilizador digitar um número fora
do intervalo o programa deve permitir ao utilizador voltar a inserir o
número. (Ciclo Repeat)


9.1. Fluxograma + código - Altere o programa anterior tendo em conta o seguinte: Ex. Se no programa
anterior (ponto 9) o utilizador digitou 6, então o programa deve,
agora, dar oportunidade ao utilizador de digitar  6  números inteiros e
verificar qual deles é o maior. (Ciclo For , Ciclo IF)


program des9; // 19 linhas
uses crt;
var numero, maior : real;
n, i : integer;
begin
     repeat
           write('Quantos numeros vai introduzir? (5-50) ');
           readln(n);
      until (n>=5) and (n<=50);
maior := 0;
      for i:=1 to n do 
           begin 
                 write(i,'o numero: ');
                  readln(numero);
                   if (numero > maior) then  
                             maior := numero;
            end;
writeln;
writeln('O maior numero foi: ',maior:0:2);
readln;
end.



Desafio  10


Desafio 10 - Fluxograma + código - Construa um programa que solicite ao utilizador as notas de 30 alunos e que calcule a respetiva média. (Ciclo For)



Desafio 10.1 - Fluxograma + código – Altere o programa anterior para que indique as notas superiores à média. (Ciclo if)


Program MediaNotasSup_2;
var Nota : array [1 .. 5] of real;  { vetor para as notas }
       Media, Soma: real;     
       Aluno: integer; { variável de controlo da repetição }
begin
   Soma := 0;  { inicializa Soma }
   for Aluno := 1 to 5 do { para cada aluno }
        begin
            readln (Nota [Aluno]);   { obtém a nota}
            Soma := Soma + Nota [Aluno]; { acumula a soma }
         end;
   Media := Soma / 5;
   writeln ('Media da turma: ', Media:5:1);
   for Aluno := 1 to 5 do       { mostra as notas maiores que a média }
            if Nota [Aluno] > Media then
                writeln (Nota[Aluno])
end.







Desafio  11




Desafio
11 -
Fluxograma + código
- Construa um programa que:

{11.1.
Preencher
um vetor X de 20 posições por leitura, ou seja, o prog. Deve
solicitar ao user os valores para preencher o vetor.}

{11.2.
Mostrar o vetor obtido }

{11.3.output
do menor elemento do vetor}

{11.4.
output do maior elemento, e sua posição}

{11.5.
output dos valores ímpares existem no vetor 
X }






Program Pzim ;
var
I, posicao, totimpar, maior, menor: integer;
X:array [1..20] of integer;
begin
{1. Preencher um vetor X de 20 posições por leitura.}
for I:=1 to 20
do begin
write('Digite um valor inteiro: ');
readln(X[I]);
end;

{2. Mostrar o vetor obtido }
for I:=1 to 20
do writeln('Posicao ',i,': ',X[I]);

{3.Informar o menor elemento deste vetor}
menor:=X[1];
for I:=1 to 20
do if X[I]< menor then menor:=X[I];
writeln('O menor elemento do vetor eh: ',menor);

{4. Informar o valor do maior elemento, e sua posição}
maior:=X[1];
for I:=1 to 20
do if X[I]>maior then begin
maior:=X[I];
posicao:=I;
end;
writeln('O maior elemento do vetor eh: ',maior);
writeln('e esta na posicao: ', posicao);

{5. Informar quantos valores ímpares existem no vetor X }
totimpar:=0;
for I:=1 to 20
do if X[I] mod 2 <>0 then totimpar:=totimpar+1;

writeln( 'o vetor X contem ',totimpar, ' valores impares');
readln;
end.
Desafio 12

For to do

For downto do
Desafio 12 -
Fluxograma + código
- Construa um programa que solicite ao utilizador n valores. Seguidamente o utilizador
deve digitar os n valores que depois serão mostrados
na ordem inversa.
Pogram Pzim
Var
seq,n:integer;
v:array [1..20] of integer;
begin
write('Digite o comprimento da sequencia (max. 20): ');
readln(n);
writeln('Digite uma sequencia com ',n,' numeros inteiros: ');
{leitura da sequencia}
for seq:= 1 to n do
readln(v[seq]);
 {mostra na ordem inversa}
 for seq:= n downto 1  do
write(v[seq],' ');
readln;
end.

Desafio 13  
Operações com conteúdo dos vetores

Desafio 13 -
Fluxograma + código
- Construa um programa que permita ler 5 valores inteiros e armazenar nas
posições iniciais de um vetor de 10 posições. Nas posições seguintes, armazenar
sucessivamente o dobro da primeira posição, o triplo da segunda posição, etc.  Mostrar os valores armazenados em cada
posição do vetor
Program Pzim ;
var
i:integer;
N:array[1..10] of integer;
begin
for I:= 1 to 5 do begin{leitura dos 5 valores}
        write('digite um valor inteiro: ');
        readln(N[I]);
        end;
for I:=1 to 5 do {preenche posicoes 6 a 10}
N[I+5] := N[I]* (I+1);
for I:=1 to 10 do  {mostra todo o vetor}
writeln('Valor armazenado na posicao ',I, ' = ',N[I]);
readln;
end.


Desafio 14 
Operações com conteúdo dos vetores

Desafio 14 -
Fluxograma + código
- Construa um programa que:
Preencha um vetor X de 10 posições inteiras
por leitura.
Preencha
um vetor Y, também de 10 posições inteiras, por leitura.
Preencha
um vetor V1 com a soma de X e y, em
cada posição.
Preencha um vetor V2 com a
diferença de X e Y, em cada posição
Program Pzim ; //Desafio 14
var
  i:integer;
  x:array[1..10] of integer;
  y:array[1..10] of integer;
  v1:array[1..10] of integer;
  v2:array[1..10] of integer;
begin
  for I:= 1 to 10 do {leitura dos 10 valores vetor x}
      begin
        write('digite o' ,I ,'º');
        readln(x[I]);
      end;
  for I:= 1 to 10 do {leitura dos 10 valores vetor y}
      begin
        write('digite o ',I ,'º');
        readln(y[I]);
      end;
  for I:=1 to 10 do {soma dos vetores x e y}
     begin
   v1[I] := x[I]+ y[I];
   writeln(v1[I])
     end;
  for I:=1 to 10 do {subtracao dos vetores x e y}
     begin
   v2[I] := x[I]- y[I];
   writeln(v2[I])
     end;
  readln;
end.
Desafio 15

Strings em vetores

Desafio 15 -
Fluxograma + código
- Construa um programa que solicite ao utilizador 6 nomes para armazenar num vetor. Depois de inseridos
os nomes o programa deve:
-Colocar o conteúdo da primeira  posição na última, o da segunda na penúltima, e assim sucessivamente.
Program Pzim ;
   Var
  vet:array [1..6] of string;
  aux:string;
  i:integer;
Begin {leitura dos nomes}
  for I:=1 to 6 do
    begin
     write('Digite o nome ',I,': ');
     readln(vet[I]);
    end; {alteração do vetor}
  for I:=1 to 3 do
  begin
     aux:= vet[I];
     vet[I] := vet[7-I];
     vet[7-I]:=aux;
   end; {mostra resultado}
  writeln('Nomes reordenados: ');
  for I:=1 to 6 do
        writeln(vet[I]);
  readln;
End.

Desafio 16

Ordenação em vetores

Desafio 16 -
Fluxograma + código
- Construa um programa que solicite ao utilizador 10
valores inteiros, em seguida o programa deve ordenar por ordem crescente os
valores introduzidos.
program vetorordena;
const TV = 5; {define TV como uma constante com valor 5}
var
  I,J,aux:integer;
  X:array [1..TV] of
integer;
begin
  writeln('digite os valores do vetor X');
  for I:=1 to TV
  do readln(X[I]);  {classifica o vetor}
  for I:=1 to TV do
     for J:=1 to TV - 1 do
        if X[J]>X[J+1] then
          begin
             aux:=X[J];
             X[J]:=X[J+1];
             X[J+1]:=aux;
           end;
{mostra o vetor ordenado}
writeln('vetor classificado:');
for I:=1 to TV do
 write(X[I]:4);
readln;
end.












Cell 3 Cell 4

Special Skills

Web Design

Nullam id dolor id nibh ultricies vehicula ut id elit. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus.

Interface Design

Nullam id dolor id nibh ultricies vehicula ut id elit. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus.

Photography and Print

Nullam id dolor id nibh ultricies vehicula ut id elit. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus.

Website Project

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit ultricies, feugiat est sed, efr nunc, vivamus vel accumsan dui. Quisque ac dolor cursus, volutpat nisl vel, porttitor eros.