Primeiros Passos em Pascal
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:
Todo programa precisa ter um início e um fim
As entradas de dados precisam ser compatíveis com a solução apresentada
As interações entre os comandos precisam ser coerente e levar ao resultado esperado
Práticas de boa programação
Toda entrada de dados deve ser "validada" a partir de testes de compatibilidade de tipos e de limites de valores previamente descritos
Os nomes determinados às variáveis, constantes,, funções e procedimentos devem fazer referência conceitual / semântica ao problema que está sendo resolvido
Procedimentos e Funções precisam ser simples, e preferencialmente atender a um objetivo "único".
Variáveis globais devem ser evitadas
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
Códigos que aparecem mais de uma vez no programa, de maneira igual ou semelhante, devem ser encapsulados em funções e procedimentos
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
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.