Primeiros Passos em Pascal

izasminizasmin
8 min read

Uma solução computacionalmente válida é aquela que pode ser executada em um computador. Para tanto, precisa ser descrita em forma de comandos e seguir os conceitos básicos da lógica de programação.

São conceitos fundamentais da lógica de programação:

  1. Todo programa precisa ter um início e um fim

  2. As entradas de dados precisam ser compatíveis com a solução apresentada

  3. As interações entre os comandos precisam ser coerente e levar ao resultado esperado

Práticas de boa programação

  1. Toda entrada de dados deve ser "validada" a partir de testes de compatibilidade de tipos e de limites de valores previamente descritos

  2. Os nomes determinados às variáveis, constantes,, funções e procedimentos devem fazer referência conceitual / semântica ao problema que está sendo resolvido

  3. Procedimentos e Funções precisam ser simples, e preferencialmente atender a um objetivo "único".

  4. Variáveis globais devem ser evitadas

  5. Comentários devem ser inseridos em partes do código onde exige-se melhor detalhamento do que a sequência de comandos está buscando realizar

  6. Códigos que aparecem mais de uma vez no programa, de maneira igual ou semelhante, devem ser encapsulados em funções e procedimentos

  7. o uso de constantes para representar valores limítrofes é fortemente recomendado

Leia 3 números e apresente em ordem crescente

program ex8;
uses crt;

var a, b, c, aux: integer;

begin
clrscr;
write('Informe o primeiro numero: ');
readln(a);
write('Informe o segundo numero: ');
readln(b);
write('Informe o terceiro numero: ');
readln(c);
if a>b then
   begin
   aux:=a;
   a:=b;
   b:=aux;
   end;
if a>c then
   begin
   aux:=a;
   a:=c;
   c:=aux;
   end;
if b>c then
   begin
   aux:=b;
   b:=c;
   c:=aux;
   end;
writeln('Valores em ordem crescente: ', a:6, b:6, c:6);
readkey;
end.

Escrever um algoritmo/programa em Pascal que escreve os números pares entre 100 e 200.

program ex18;
uses crt;

var i: integer;

begin
clrscr;
writeln('Os numeros pares de 100 a 200 sao: ');
for i:= 100 to 200 do
    begin
    if i mod 2 = 0 then
       begin
       write(i:8);
       end;
    end;
readkey;
end.

Escrever um algoritmo/programa em Pascal que escreve a soma dos números entre 0 e 100.

program ex19;
uses crt;

var i, soma: integer;

begin
clrscr;
soma:=0;
for i:= 0 to 100 do
    begin
    soma:= soma + i;
    end;
writeln('A soma dos numeros de 0 a 100 e: ', soma);
readkey;
end.

Escrever um algoritmo/programa em Pascal que escreve a soma dos números pares entre 0 e 100.

program ex20;
uses crt;

var i, soma: integer;

begin
clrscr;
soma:=0;
for i:= 0 to 100 do
    begin
    if i mod 2 = 0 then
       begin
       soma:= soma + i;
       end;
    end;
writeln('A soma dos numeros pares de 0 a 100 e: ', soma);
readkey;
end.

Escrever um algoritmo/programa em Pascal que lê um valor N e calcula e escreve os 20 primeiros termos da série: 1 + 1/x2 + 1/x3 + 1/x4 + ...

program ex43;
uses crt;

var
x, i: integer;
t, soma: real;
begin
clrscr;
soma:=0;
write('Informe um valor: ');
readln(x);
writeln('Termos:');
t:=1;
writeln(t:0:8);
soma:=soma+t;
for i:= 2 to 20 do
    begin
    t:= 1/ (exp(ln(x)*i));
    writeln(t:0:8);
    soma:=soma+t;
    end;
writeln('A soma e: ', soma:0:8);
readkey;
end.

Escrever um algoritmo/programa em Pascal que lê N, inteiro e positivo e calcula e escreve o termo de ordem N da sucessão abaixo: ordem: 1 2 3 4 5 6 7 8 ... sucessão: -1 0 5 6 11 12 17 18 ...

program ex45;
uses crt;

var x, i, nro: integer;
begin
clrscr;
write('Informe um numero: ');
readln(x);
nro:=-1;
for i:= 1 to x do
    begin
    write(nro:4);
    if i mod 2 <> 0 then
       begin
       nro:=nro+1;
       end
    else
        begin
        nro:=nro+5;
        end;
    end;
readkey;
end.

https://educar321.blogspot.com/2019/04/exercicios-pascal.html

Escreva um procedimento que exiba as componentes de um vetor na ordem inversa daquela em que foram armazenadas.

Escreva um procedimento que insira um valor dado num vetor ordenado de modo que o vetor continue ordenado. Por exemplo, se o vetor dado for v = {2, 5, 7, 10, 12, 13} e o valor dado for 6, o procedimento deve fornecer o vetor v = {2, 5, 6, 7, 10, 12, 13}.

O exercício 16 da seção 6.9 solicitava um programa que convertesse um número dado no sistema decimal para o sistema binário. Pela limitação do sistema em tratar números inteiros, uma solução que tratasse a conversão como sendo do tipo longint seria limitada. Escreva uma função para a conversão citada, tratando o valor em binário como uma cadeia de caracteres.

Escreva um programa que converta um número do sistema binário, dado como uma cadeia de zeros e uns, para o sistema decimal de numeração.

É comum que AVISOS, DECLARAÇÕES, CERTIDÕES, etc., tenham seus títulos escritos com as letras separadas por um espaço em branco. Escreva um procedimento que receba uma palavra e a retorne com suas letras separadas por um espaço em branco.

Na seção 1.7 discutimos um algoritmo que determinava o quociente e o resto da divisão entre dois inteiros positivos dados. Embora os compiladores da linguagem Pascal possuam os operadores mod e div que calculam o resto e o quociente de uma divisão inteira entre dois inteiros positivos, vamos apresentar a implementação do algoritmo referido. Esta apresentação se justifica pelo fato de que este é um excelente exemplo de lógica de programação e também pelo fato de que o leitor pode um dia utilizar um sistema que não possua tais operadores. (pg.60)

{Programa que determina o quociente e o resto da divisao entre dois inteiros positivos}
var Divid, Divis, Quoc, Rest : integer;
begin
    writeln('Digite o dividendo e o divisor (diferente de zero!) ');
    readln(Divid, Divis);
    Quoc := 1;
    while Quoc * Divis <= Divid do
        Quoc := Quoc + 1;
    Quoc := Quoc - 1;
    Rest := Divid - Quoc * Divis;
    writeln('Quociente e resto da divisao ', Divid, ' por ', Divis, ': ', Quoc, Rest);
end.

que se saiba anteriormente a quantidade de números. Naturalmente, isto não ocorre na maioria dos casos. Vejamos então um programa para determinar a média de uma relação de números dados, sem que se conheça previamente a quantidade deles. Neste caso, não devemos utilizar o comando for, pois não sabemos o número de repetições! Assim, o comando while deve ser utilizado. Porém, uma pergunta deve ser formulada: qual a expressão lógica que controlará a estrutura? A solução é "acrescentar" à relação um valor sabidamente diferente dos valores da relação e utilizar este valor para controlar a repetição. Este valor aqui referido é chamado flag. Como dito logo acima, deve-se ter certeza que o flag não consta da relação. Isto não é complicado, pois, ao se escrever um programa, se tem conhecimento de que valores o programa vai manipular e a escolha do flag fica facilitada. Por exemplo, se o programa vai manipular números positivos, pode-se usar -1 para o flag. Além do flag, o programa necessita de uma variável (no caso, Cont de contador) que determine a quantidade de números da relação, pois este valor será utilizado no cálculo da média. (pg.62)

{Programa para calcular a media de uma relacao de números}
program MediaX;
var Cont : integer;
    Num, Soma, Media : real;
begin
    Soma := 0;
    writeln(' Digite os elementos(-1 para encerrar):');
    readln(Num);
    Cont := 0;
    while Num <> -1 do
        begin
         Soma := Soma + Num;
         Cont := Cont + 1;
        readln(Num);
        end;
    Media := Soma/Cont;
    writeln('Media = ', Media);
end.

Os procedimentos devem ser definidos antes do programa principal, como foi apresentado na seção 2.5, utilizando-se a seguinte sintaxe:

procedure Identificador(var lista de parâmetros : tipo de dado);
    declarações e definições
begin
 seqüência de comandos
end;

Do mesmo modo que num programa, num procedimento podem ser declaradas variáveis, definidos tipos de dados, relacionadas units e definidos outros subprogramas. Em qualquer caso, todo elemento declarado ou definido num procedimento só pode ser acessado pelos comandos deste procedimento. Usa-se comumente o termo local para se classificar um elemento que foi declarado ou definido num procedimento, utilizando-se o termo global para um elemento declarado ou definido no programa propriamente dito. Um elemento global (variável, tipo de dado, subprograma) pode ser acessado em qualquer parte do programa. No caso específico de variáveis, uma variável global existe durante toda a execução do programa enquanto que uma variável local só tem existência durante a ativação do procedimento.

1. O programa Ordena3, já discutido anteriormente, escrito com a utilização de um procedimento, teria a
seguinte forma:
program Ordena3;
var x, y, z : real;
{procedimento que permuta os conteudos de duas variaveis}
procedure Troca(var v1, v2 : real);
var Aux : real;
begin
    Aux := v1;
    v1 := v2;
    v2 := Aux;
end;
{programa principal}
begin
     write('Digite os três números');
    readln(x, y, z);
    writeln('Valores dados: x = ', x:0:2, ', y = ', y:0:2, ' e z = ', z:0:2);
         if (x > y) or (x > z)
         then
            if y > z
             then
             Troca(x, z)
                 else   
                    Troca(x, y);
    if y > z
         then
             Troca(y, z);
     writeln('Valores dados, agora ordenados: x = ', x:0:2, ', y = ', y:0:2, 'e z = ', z:0:2);
end.

Os compiladores da linguagem Pascal ignoram espaços em branco digitados num programa. Uma maneira de se tornar isto possível é, antes da compilação, eliminar todos os espaços em branco "supérfluos", ou seja, deixar duas palavras sempre separadas por um único espaço em branco. A função abaixo realiza tal ação. (pg.102)

{Função que exclui espaços em branco desnecessarios}

function ExcluiBrancosSuperfluos(var s : string) : string;
var i, c, NumBrancos : integer;
begin
    i := 1;
    c := Length(s);
    while i < c do
        begin
         NumBrancos := 0;
         while s[i] = ' ' do
            begin
             NumBrancos := NumBrancos + 1;
             i := i + 1;
            end;
        if NumBrancos > 1
            then
                 begin
                    i = i - NumBrancos;
                    Delete(s, i, NumBrancos - 1);
                 end;
             i := i + 1;
        end;
end;

https://ic.ufal.br/professor/jaime/livros/Programando%20com%20Pascal.pdf

https://www.ime.usp.br/~macmulti/exercicios/inteiros/

https://wiki.portugal-a-programar.pt/dev_geral/pascal/tutorial/resolucao_exdes/

Ler texto em ordem inversa

program des1; // 21 linhas
uses crt;
var texto : string;

procedure ler(var s : string);
begin
     readln(s);
end;

procedure escrever(s : string);
var i : integer;
begin
     for i:=length(s) downto 1 do write(s[i]);
end;

begin
     write('Escreva linha de texto: ');
     ler(texto);
     writeln;
     write('Texto por ordem inversa: ');
     escrever(texto);
     writeln;
     readln;
end.

Remover excesso espaços em uma string

program ex4; // 24 linhas
uses crt;
var s : string;
    i, j : integer;

begin
     writeln('Este programa tira os espacos a mais de uma STRING');
     writeln;
     write('Escreva uma STRING: ');
     readln(s);
     j := 0;
     for i:=1 to length(s) do
     begin
          j := j+1;
          if (s[i] = ' ') then begin
             s[j] := ' ';
             while (s[i] = ' ') do
                   i := i+1;
                   j := j+1
             end;
          s[j] := s[i];
     end;
     writeln('Nova STRING: ',s);
     readln;
end.

https://silo.tips/download/manipulaao-de-strings

https://www.ic.unicamp.br/~eduardo/material_mc102/lista4.pdf

https://fit.faccat.br/~fpereira/apostilas/exerc_resp_prog1_ago2006.pdf

https://programacaodescomplicada.files.wordpress.com/2012/10/lista-recursc3a3o.pdf

0
Subscribe to my newsletter

Read articles from izasmin directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

izasmin
izasmin

A paixão por moda e tecnologia me levaram ao mundo de ciência de dados, e venho aqui compartilhar o melhor dos 2 mundos.