Escola Profissional Cristóvão Colombo

Rui Silva ([email protected])


Introdução à Programação

lista de exercícios

Programação é o processo de escrita, teste e manutenção de um programa de computador. O programa é escrito numa linguagem de programação.

imagem de apoio

Resumidamente, podemos afirmar que existem quatro operações básicas que qualquer computador pode executar:

  1. Operações de entrada e saída: ler dados do teclado e escrever dados no monitor são exemplos destas operações. Servem para introduzir dados na memória e mostrar dados que lá estejam armazenados;
  2. Operações aritméticas: são utilizadas na realização de operações matemáticas (adição, subtração, multiplicação e divisão);
  3. Operações lógicas e relacionais: comparações, testes de condições lógicas (2>6 ou X=Y);
  4. Movimentação de dados entre os vários componentes: as operações aritméticas são executadas na Unidade Lógica e Aritmética, necessitando da transferência dos dados para essa unidade e da volta do resultado final para ser guardado na memória.

Exemplo:
resolvendo um problema... suponha que queríamos resolver o seguinte problema:
dados dois números, calcular a sua soma. Uma possível solução seria a seguinte:

  1. saber quais são os números;
  2. calcular a soma dos números;
  3. responder à questão com o valor do resultado

Resolução em termos das operações básicas citadas anteriormente:

  1. Operação de entrada de dados dos números;
  2. Unidade Lógica e Aritmética (ULA)
    1. movimento do valor dos números entre a memória e a ULA;
    2. operação aritmética de somar os 2 números;
    3. movimentação do resultado da ULA para guardar na memória;
  3. Operação de saída do resultado, que está guardado na memória.

Em resumo, pode-se dizer que escrever algoritmos consiste em dividir qualquer problema em muitos pequenos passos, usando uma ou mais das quatro operações básicas citadas.

Esses passos que compõem o algoritmo são denominados de comandos. Os comandos de uma linguagem de programação podem estar mais próximos da máquina (linguagens de baixo nível) ou serem mais facilmente entendidos pelo homem (linguagens de alto nível).

Uma linguagem de programação é um método padronizado para expressar instruções para um computador. É um conjunto de regras sintácticas e semânticas usadas para definir um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai actuar, como estes dados serão armazenados ou transmitidos e quais acções devem ser tomadas sob várias circunstâncias. O conjunto de palavras, compostos de acordo com essas regras, constitui o código fonte (Código fonte ou source code em inglês, é o conjunto de palavras escritas de forma ordenada, contendo instruções numa das linguagens de programação existentes no mercado, de maneira lógica) de um software (Software ou programa de computador é uma sequência de instruções a serem seguidas e/ ou executadas, na manipulação, redireccionamento ou modificação de um dado/ informação ou acontecimento). Esse código fonte é depois traduzido para código de máquina (todos os computadores possuem um conjunto de instruções que o seu processador é capaz de executar. Essas instruções, chamadas código máquina, são representadas por sequências de bits), que é executado pelo processador.

Um programa de computador é essencialmente um algoritmo que diz ao computador os passos específicos e em que ordens devem ser executados, como por exemplo, os passos a serem tomados para calcular as notas que serão impressas nos boletins dos alunos de uma escola.

Um algoritmo é uma sequência não ambígua de instruções que é executada até que determinada condição se verifique. Do livro “Linguagens de Programação” para o Ensino Profissional, de Artur Augusto Azul, Porto Editora:

  • Um algoritmo é uma sequência finita e logicamente ordenada de acções para se chegar à solução de um problema.
  • Um algoritmo correctamente formulado permite-nos chegar sempre aos mesmos resultados, desde que os dados ou condições de partida sejam os mesmos.

A esse propósito, encontramos na Internet um exemplo curioso: Um algoritmo pode especificar que você calce primeiro as meias e os sapatos antes de vestir as calças, enquanto outro especifica que você deve primeiro vestir as calças e só depois calçar as meias e os sapatos. Fica claro que o primeiro algoritmo é mais difícil de executar do que o segundo.

O conceito de algoritmo é frequentemente ilustrado pelo exemplo de uma receita. O termo receita é utilizado no sentido de "lista de actividades que leva ao fim desejado". Isto é, um algoritmo é uma lista de actividades que, se executadas coerentemente, conforme estipulado na receita, leva sempre à resposta desejada.
Diferentes algoritmos podem realizar a mesma tarefa de várias maneiras, com performances necessariamente distintas para a completar.

Exemplo
Substituir uma lâmpada fundida

  1. Preparar uma lâmpada nova
  2. Retirar a lâmpada fundida
  3. Colocar a lâmpada nova
  4. Ligar o interruptor

Exemplo
Substituir um pneu furado

  1. Preparar o pneu sobressalente
  2. Colocar o macaco na posição adequada
  3. Levantar o carro
  4. Retirar o pneu furado
  5. Colocar o pneu sobressalente

Exemplo
Preparar bifes à milaneza

  1. Limpar a peça de carne
  2. Cortar a carne em bifes
  3. Colocar farinha num prato
  4. Juntar 2 ovos e mexer
  5. Repetir, para cada bife
    1. Passar o bife na mistura de farinha, nos 2 lados
    2. Levar bife à frigideira
    3. Esperar que fique douradinho
    4. Virar o bife
    5. Esperar que fique douradinho
    6. Retirar bife e colocar sobre uma toalha de papel até secar
  6. Retirar do papel toalha e colocar numa travessa
  7. Decorar a travessa com folhas de alface
  8. Servir

Exemplo
Calcular a área de um rectângulo

  1. Obter os valores do comprimento e da largura
  2. Calcular área = comprimento x largura
  3. Apresentar o valor

Conceito de constante

Uma constante é um determinado valor fixo que não se modifica ao longo do tempo, durante a execução de um algoritmo. Por exemplo pi = 3.1415

A constante é classificada como sendo numérica (números), lógica (verdadeiro ou falso, um ou zero) ou literal (qualquer conjunto de caracteres).

Numérica: a representação de uma constante numérica é feita no sistema decimal, podendo ser um número com ou sem parte fraccionária. Pode ser negativa ou positiva de acordo com o sinal que precede os algarismos que compões o número.
Exemplos:

  • a= 15
  • m= -5
  • f= 3.56

Lógica: Pode assumir os valores Verdadeiro ou Falso, Um ou Zero.

Literal: Qualquer sequência de caracteres. Deverá ser colocada entre aspas para que não seja confundida com outro elemento qualquer.
Exemplos:

  • msg= 'Mensagem'
  • numeros= "1234"
  • nome= "Rui Silva"

Conceito de Variável

Sabe-se da matemática que uma variável é uma representação simbólica dos elementos de um certo conjunto. Nos algoritmos a cada variável corresponde uma zona na memória, cujo conteúdo pode variar ao longo do tempo durante a execução do programa.

Embora uma variável possa assumir diferentes valores, só pode armazenar um único valor em cada instante.
A variável é identificada por um nome, formado por um ou mais caracteres devendo o primeiro ser uma letra. Alguns símbolos não podem ser utilizados para formar o nome de variáveis por se encontrarem reservados. Por exemplo:
/ * + - , ;

Também não é possível utilizar para definir o nome de uma variável as instruções utilizadas na linguagem, por exemplo
LER, ESCREVER, etc.

Exemplo de nomes permitidos:

  • a
  • X5
  • Nota_Final
  • LadoQuadrado

Exemplo de nomes não permitidos:

  • 123a
  • X5*
  • Nota Final
  • LadoQuadrado-

É recomendável que os nomes sejam os mais significativos possíveis, isto é, que designem da melhor maneira a natureza dos valores que nelas estão armazenados.


Declaração de Variáveis

As variáveis só podem armazenar valores de um mesmo tipo. Conforme o seu tipo a variável é classificada como sendo numérica, lógica ou literal.

Para indicar o tipo de uma variável é usada a declaração de variáveis. No momento em que se declara uma variável, é feita a associação do nome escolhido com a respectiva zona de memória que o mesmo passa a simbolizar. Qualquer referência ao nome implica a referência ao conteúdo da zona de memória. A declaração de variáveis obedece à seguinte sintaxe:
DECLARAR lista_de_nomes_das_variáveis nome_do_tipo-de_dados

Exemplo:

  • DECLARAR nota, codigo, soma NUMERICO
  • DECLARAR ok, option LOGICO
  • DECLARAR nome, aluno_morada LITERAL

Comentários

O comentário é um instrumento muitas vezes ignorado mas de grande valia para a compreensão do algoritmo. Consiste num texto que aparece delimitado por um caracter especial (chavetas, pelicas, dupla barra). O comentário é ignorado e serve unicamente para explicar o significado do código onde foi inserido.

Exemplo:

  • DECLARAR codigo NUMERICO ' guarda o valor do código do aluno

Expressões

Uma expressão é um conjunto de caracteres que pode representar variáveis ou constantes separados por operadores. As expressões podem ser aritméticas, literais, relacionais ou lógicas.

exemplo de uma expressão

Expressões aritméticas

Denomina-se expressão aritmética aquela cujos operadores são aritméticos e cujos operandos são constantes e/ ou variáveis do tipo numérico. O conjunto de operações básicas adoptado é o que se conhece da matemática:

Operação Operador
Adição +
Subtracção -
Multiplicação *
Divisão /
Potenciação ^

As operações obedecem às seguintes regras de prioridade:

  1. Potenciação e Radiciação
  2. Multiplicação e Divisão
  3. Adição e Subtracção
  4. A utilização de parêntesis pode alterar a ordem de prioridades.

Expressões literais

Uma expressão literal é formada por operadores literais e operandos que são constantes e/ ou variáveis do tipo literal. Existem várias operações possíveis com literais. O conjunto de operações básico adoptado varia com a linguagem, neste módulo vamos usar é o seguinte:

Operação Operador
Concatenação +

Exemplo:

supondo que a variável PrimeiroNome contém o literal "Rui P. " e a variável UltimoNome contém o literal "Silva", o valor fornecido pela expressão PrimeiroNome + UltimoNome seria o literal "Rui P. Silva".


Expressões Relacionais

Uma expressão relacional, ou simplesmente uma relação, é uma comparação realizada entre dois valores do mesmo tipo básico. Estes valores são representados na relação através de constantes, variáveis e/ ou expressões. Os operadores relacionais que indicam a comparação a ser realizada entre dois termos do mesmo tipo básico são:

Operação Operador
Igual a =
Diferente de != ou ><
Menor que <
Maior que >
Menor ou igual a <=
Maior ou igual a >=

O resultado obtido de uma relação é sempre um valor lógico.


Expressões Lógicas

É comum nos algoritmos surgirem situações em que a execução de uma acção ou uma sequência de acções está sujeita a condições. Esta condição é representada no texto do algoritmo por meio de uma expressão lógica.
Denomina-se expressão lógica à expressão cujos operadores são lógicos e cujos operadores são relações, constantes e/ ou variáveis do tipo lógico. Os operadores lógicos são:

Operação Operador
Conjunção e
Disjunção ou
Negação não

As tabelas de verdade destes operadores são as seguintes:
Tabela da Conjunção (e)

W X W e X
Verdadeiro Verdadeiro Verdadeiro
Verdadeiro Falso Falso
Falso Falso Falso
Falso Verdadeiro Falso

Tabela da Disjunção (ou)

Q B Q ou B
Verdadeiro Verdadeiro Verdadeiro
Verdadeiro Falso Verdadeiro
Falso Falso Falso
Falso Verdadeiro Verdadeiro

Tabela da Negação (não)

F não F
Verdadeiro Falso
Falso Verdadeiro

As operações obedecem à seguinte regra de prioridade.

  1. NÃO
  2. E
  3. OU

Também nas operações lógicas vários níveis de parêntesis podem ser utilizados com a finalidade de estabelecer uma nova ordem de execução entre operadores lógicos.

O resultado obtido da avaliação de uma expressão lógica é sempre um valor lógico, isto é True ou False, Verdadeiro ou Falso, 1 ou 0.


Atribuição de valores

O processo de atribuição de valores permite colocar valores de qualquer tipo básico numa variável previamente definida. A sintaxe utilizada para atribuir um determinado valor a uma variável é a seguinte:

Nome_da_variavel = expressão_do_tipo_da_variavel ou valor
Nome_da_variavel = Nome_da_variavel_a_ser_atribuida

Exemplo

algoritmo
    declarar Largura, Comprimento, Area numerico
    Largura = 75
    Comprimento = 100
    Area = Largura * Comprimento
fim de algoritmo

Comandos de Entrada e Saída

Seja a seguinte situação: início de um programa que se encontra armazenado na memória principal de um computador. Como e quem determina o momento de entrada e/ ou saída de dados para o programa e a saída de resultados para o utilizador?

Isto é tarefa do programador quando descreve as acções a serem executadas. Os comandos de entrada e saída são as ferramentas para esta finalidade.

A sintaxe do comando de entrada é a seguinte:

LER lista_de_identificadores

Em que LER é uma palavra reservada e lista_de_identificadores representa o nome das variáveis e/ ou constantes, separadas por vírgulas, nas quais serão armazenados os valores provenientes de um meio de entrada (por exemplo o teclado).

Exemplo:

algoritmo
    declarar codigo, nota numerico
    ler codigo, nota
    ...
fim de algoritmo

O programa através do comando (ou instrução) LER, espera que sejam introduzidos dois valores numéricos a partir de uma unidade de entrada. Os valores serão armazenados nas zonas de memória identificados pelos nomes codigo e nota.

A sintaxe do comando de saída é a seguinte:

ESCREVER lista_de_identificadores

.

Em que ESCREVER é uma palavra reservada e lista_de_identificadores representa o nome das variáveis e/ ou constantes, separadas por vírgulas, cujos conteúdos serão mostrados ao utilizador através de um meio de saída (normalmente o monitor).

Exemplo:

algoritmo
    declarar idade numerico
    declarar nome literal
    ...
    idade  = 18
    nome  = "Abreu Silva"
    escrever idade
    escrever nome
fim de algoritmo	

no exemplo seria escrito:
18
Abreu Silva

ou de uma forma mais elaborada

    escrever "O ", nome, " tem ", idade, " anos."

seria escrito:
O Abreu Silva tem 18 anos

O conteúdo das variáveis nome e idade será exibido através de uma unidade de saída.

algoritmo
    declarar Largura, Comprimento, Area numerico
    escrever "Insira o valor da largura do terreno: "
    ler Largura
    escrever "Insira o valor do comprimento do terreno: "
    ler Comprimento
    Area = Largura * Comprimento
    escrever "A área do terreno é igual a ", Area
fim de algoritmo

Funções

Além das operações aritméticas, anteriormente citadas, podem usar-se nas expressões aritméticas algumas funções muito comuns na matemática.


Abs(…) devolve o valor absoluto do argumento

Exemplo:

algoritmo
    declarar y, valor numerico					
    y = - 125
    valor =  Abs(Y)
    escrever valor
fim de algoritmo

no exemplo seria escrito:
125


Int(…) devolve a parte inteira do argumento

Exemplo:

algoritmo
    declarar p, q numerico						
    p = 123.75
    q =  Int(p)
    escrever q
fim de algoritmo

no exemplo seria escrito:
123


Sqr(…) devolve o quadrado do argumento

Exemplo:

algoritmo
    declarar h, quadrado numerico						
    h = 12
    quadrado =  Sqr(h)
    escrever h, " elevado ao quadrado é igual a ", quadrado
fim de algoritmo

no exemplo seria escrito:
12 elevado ao quadrado é igual a 144


Sqrt(…) devolve a raíz quadrada do argumento

Exemplo:

algoritmo
    declarar numero, raiz numerico
    numero = 81
    raiz =  Sqrt(Numero)
    escrever "A raiz quadrada de ", numero, " é igual a ", raiz
fim de algoritmo

no exemplo seria escrito:
A raiz quadrada de 81 é igual a 9


Div devolve o resultado da divisão inteira

Exemplo:

algoritmo
    declarar q, resultado numerico
    q = 13
    resultado =  q Div 2
    escrever "O resultado da divisão inteira de ", q, " por 2 é igual a ", resultado
fim de algoritmo

no exemplo seria escrito:
O resultado da divisão inteira de 13 por 2 é igual a 6


Mod devolve o resto da divisão

Exemplo:

algoritmo
	declarar m, resultado numerico
	m = 13
	resultado =  m Mod 3
	escrever  "O resto da divisão de ", m, " por 3 é igual a ", resultado
fim de algoritmo

no exemplo seria escrito:
O resto da divisão de 13 por 3 é igual a 1


Alguns exercícios propostos em aula

Escreva um algoritmo que:

  1. Leia um valor e escreva esse valor ao cubo.
  2. Leia um valor e escreva o simétrico do valor lido
  3. Leia dois valores referentes aos lados de um terreno retângulo e escreva a sua área.
  4. Leia um valor referente ao raio de uma circunferência, escreva a área do círculo e o perímetro da circunferência.
  5. Leia dois valores numéricos e escreva a sua soma.
  6. Leia três valores: a, b e c calcule as raízes da função ax2 + bx + c.
  7. Leia dois valores para duas variáveis de nome PrimeiroValor e SegundoValor, escreva o conteúdo das variáveis que acabou de ler. Troque os valores das variáveis e escreva o resultado.

Estruturas básicas

Estrutura sequencial

Num algoritmo aparecem em primeiro lugar as declarações de variáveis seguidas pelos comandos ou instruções que, se não houver indicação em contrário, deverão ser executados numa sequência linear.

algoritmo
   d1
   d2
   dn
   …
   c1
   c2
   cn
fim de algoritmo

em que:
d1, d2, …, dn são declarações
c1, c2, …, cn são comandos

Exercícios:

  1. Dadas duas variáveis a e b, colocar numa terceira variável c, o resultado de (a + b) x b.
  2. Dadas duas variáveis a e b numéricas, trocar os seus conteúdos e escrever a e b.

Estrutura Condicional

A estrutura condicional permite a escolha do grupo de acções e estruturas a serem executadas quando determinada condição, representada por uma expressão lógica, é ou não satisfeita.

Estrutura condicional Simples:


SE condição ENTÃO 
	sequência de comandos
FIM DE SE

A sequência de comandos só será executada se a condição for verdadeira.
Exemplo:
Ler três valores numéricos escrever uma mensagem se a soma dos dois primeiros números for maior do que o terceiro número.

algoritmo
	declarar a, b, c numérico
	ler a, b, c
	se a + b > c então
		escrever “Uma mensagem”
	fim de se
fim de algoritmo

Estrutura condicional Composta:

					
SE condição ENTÃO
	sequência de comandos A
SENÃO
	sequência de comandos B
FIM DE SE

A sequência de comandos A só será executada se a condição for verdadeira, a sequência de comandos B será executada se a condição for falsa.
Exemplo:
Dadas duas variáveis a e b numéricas, verificar se a é igual a b. Se a condição for verdadeira, colocar o valor 1 na variável x e o valor 2 na variável y. Se for falsa colocar o valor de x igual a -2 e o valor de y igual a -1. No final escrever x e y.

algoritmo
	declarar a, b, x, y numérico
	ler a, b
	se a = b então
		x = 1
		y = 2
	senão
		x = -2
		y = -1
	fim de se
	escrever x, y
fim de algoritmo

Exercícios
Escreva um algoritmo que:

  1. Leia dois valores numéricos e escreva o maior deles.
  2. Leia três valores numéricos e escreva o maior deles – preveja a situação de serem todos iguais.
  3. Leia dois valores numéricos. Se a sua soma for superior a dez escreva a mensagem “soma maior do que 10”, senão escreva a mensagem “soma menor que dez”.

Estrutura de repetição

A estrutura de repetição permite que uma sequência de comandos seja executada repetidamente até que uma determinada condição de interrupção seja satisfeita (a condição de interrupção é representada por uma questão lógica).
Esta estrutura pode apresentar-se das seguintes formas:

Estrutura REPETIR (Interrupção no início)


REPETIR
	SE condição ENTÃO
		INTERROMPER
	FIM DE SE

	sequência de comandos

FIM DE REPETIR	

Nesta estrutura, a sequência de comandos será repetida enquanto a condição não for satisfeita. Quando a condição se verificar, a repetição será interrompida e a sequência de comandos que vier logo após a expressão fim de repetir será executada.

Exercício
Escreva um algoritmo que calcule a soma dos números entre 100 e 200, inclusivé. No final escrever o total.

Estrutura REPETIR (Interrupção no interior)


REPETIR

	sequência de comandos A

	SE condição ENTÃO 
		INTERROMPER
	FIM DE SE


	sequência de comandos B


FIM DE REPETIR	

Nesta estrutura, as sequências de comandos A e B, serão repetidas até que a condição seja satisfeita. Quando isto ocorrer a repetição será interrompida e a sequência de comandos que vier logo após a expressão fim de repetir será executada.

Exercícios
Escreva um algoritmo que calcule a soma dos números entre 100 e 200, inclusivé. No final escrever o total.

Estrutura REPETIR (Interrupção no fim)


REPETIR

	sequência de comandos

	SE condição ENTÃO 
		INTERROMPER
	FIM DE SE
FIM DE REPETIR	

Nesta estrutura, a sequência de comandos será repetida até que a condição seja satisfeita. Quando isto acontecer, a repetição será interrompida e a sequência de comandos que vier logo após a expressão fim de repetir será executada.

Exercícios
Escreva um algoritmo que calcule a soma dos números entre 100 e 200, inclusivé. No final escrever o total.

Estrutura PARA


PARA Variável_Controlo = ValorInicial ATÉ ValorFinal FAZER

	sequência de comandos

FIM DE PARA	

Variável_Controlo é uma variável inteira, que será incrementada ou decrementada a partir do valor inicial até que atinja o valor final previamente estabelecido.
Valor_Inicial é o primeiro valor que a variável de controlo irá assumir. Valor_Final é o valor limite que a variável de controlo poderá assumir.

O PARA é uma estrutura de repetição incondicional, isto é, uma vez iniciada será executada quantas vezes estiver estipulado no intervalo entre ValorInicial e ValorFinal.
Exemplo

algoritmo 
	declarar i, a, b numérico

	escrever(“menor número: “)
	ler a
	escrever(“maior número: “)
	ler b

	para i = a até b fazer
		escrever i
	fim para
      
fim de algoritmo

Variáveis Compostas

Variáveis Compostas Unidimensionais, ou vectores correspondem a posições de memória identificadas pelo mesmo nome e individualizadas por um índice, cujo conteúdo é do mesmo tipo.
A atribuição de valores a cada posição de um vector processa-se da mesma forma como nas outas variáveis, com a excepção de ser necessário indicar especificamente qual a posição onde se irá efectuar essa atribuição.