Capítulo 2 – parte 1

Share

2 – Metodologia de Desenvolvimento de Algoritmos

2.1 – Algoritmos e estruturas de dados

2.1.1 Conceituação de algoritmo

Um algoritmo é a descrição de um padrão de comportamento, expresso em termos de um repertório bem definido e finito de ações primitivas, das quais damos por certo que elas podem ser executadas.

O algoritmo especifica uma seqüência de passos lógicos para que o computador possa executar uma tarefa qualquer. Deve possuir as características básicas:

  • Ter fim
  • Ser efetivo (tempo finito)
  • Não ser ambíguo
  • Poder receber dados de entrada
  • Poder gerar dados de saída

Algoritmos podem ser representados, dentre outras maneiras, por:

  • Descrição Narrativa
  • Descrição Gráfica: Fluxogramas ou Diagramas de Atividades
  • Linguagem Algorítmica

Exemplos

Deseja-se construir um algoritmo que dadas quatro notas, imprima “Aprovado” se a média seja maior ou igual a 7. E, caso contrário, imprima “Reprovado”.

Algoritmo Média de notas na linguagem textual:

Leia as quatro notas.
Some as quatro notas.
Divida o resultado por 4.
Caso este último resultado seja maior ou igual a 7, imprima "Aprovado".
Caso contrário, imprima "Reprovado".

Algoritmo na linguagem gráfica de um Fluxograma:

Algoritmo na linguagem gráfica de um Fluxograma

Algoritmo na linguagem gráfica de Diagrama de Atividades da UML:

Algoritmo na linguagem gráfica de Diagrama de Atividades da UML

Algoritmo na forma de Pseudo-Linguagem (Portugol):

	algoritmo média;
	inicio
		n1,n2,n3,n4,
		média, soma : real;

		leia(n1,n2,n3,n4);
		soma ← n1+n2+n3+n4;
		média ← soma/4;
		se média >= 7 então
			imprima("Aprovado");
		senão
			imprima("Reprovado");
		fim-se;
	fim.

2.1.2 – Programação estruturada e estrutura de dados

Programação estruturada é uma metodologia de projeto de programas visando:

  • Facilitar a escrita;
  • Facilitar a leitura (entendimento);
  • Permitir a verificação a priori;
  • Facilitar a manutenção e modificação.

Isto é alcançado reduzindo a complexidade de em três níveis: Refinamento Sucessivo, Modularização e Estruturas de Controle.

Por refinamento sucessivos entendemos a análise do problema, passando por um algoritmo em linhas gerais até um algoritmo detalhado. Este processo de refinamento continua até tenhamos uma seqüência de passos simples que podem ser diretamente expressos em comandos de uma linguagem de programação.

A modularização é obtida fazendo a decomposição do programa em módulos
funcionais. A solução do problema total vai sendo fatorada em soluções de subproblemas, que permitem reutilização e desenvolvimento separado por diversos programadores de uma equipe.

O uso de um número muito limitado de estruturas de controle permite que uma solução seja facilmente entendida, focando na solução e não nas estruturas. As estruturas básicas são: Seqüência Simples, Comando Condicional, e Repetição.

2.1.3 – Etapas no desenvolvimento de programas

2.2 – Uma pseudo-linguagem estruturada

Uma pseudo-linguagem é um recurso utilizado para relaxar as exigências de uma linguagem de programação real. Em uma linguagem de programação real, quando os comandos não são expostos corretamente, é impossível criar uma programa executável. O uso de uma pseudo-linguagem nos permite criar estruturas que reproduzem um programa real para ser executados em um computador fictício. Desta forma é possível realizar a síntese e analise do algoritmo sem se preocupar com detalhes de implementação.

2.2.1 – Introdução

Como linguagem algorítmica usaremos a pseudo linguagem de programação chamada PORTUGOL (português + Pascal). A usaremos para definir, criar e documentar um programa sem se preocupar com a implementação (hardware e software).

2.2.2 – Tipos básicos

O Portugol trabalha com quatro tipos básicos:

  • inteiro: Um número inteiro positivo, nulo ou negativo. Ex: -7, 2050, etc.
  • real: Um número real positivo, nulo ou negativo. Ex: -7, 20.50, etc.
  • caractere: Uma seqüência de caracteres. Ex: “abc”, “Palavra”, “Av. Rio Branco 1234”, etc.
  • logico: Um valor lógico verdadeiro ou falso.

Os identificadores em Portugol são construídos da seguinte forma: devem começar com uma letra. Depois podem conter qualquer seqüência alfanumérica. Ex: x1, nome, endereço. O identificador também não pode ser igual às estruturas básicas do Portugol! Ex. de identificadores inválidos: 2valores,
nome de Cliente, inteiro, algoritmo, tel#, etc.

2.2.3 – Comandos básicos

A estrutura básica de uma algoritmo é dada por:

	{Comentários}
	algoritmo NomeDoAlgoritmo;
		{Comentários}
	inicio
		Declaração de Variáveis
		{Comentários}
		Comandos;
	fim.

Comentários são inseridos entre “{}” para elucidar o código e são invisíveis para o algoritmo.

Para operarmos sobre nossos dados precisamos guardá-los em algum lugar temporariamente. Para isto utilizamos o conceito de variável. Uma variável possui um identificador e um tipo. As variáveis precisam ser declaradas e inciadas (atribuir um valor inicial) antes de serem usadas no algoritmo.

Declaramos variáveis seguindo o modelo:

<tipo>: identificador1<, identificador2><, ...><, identificadorN>;

Ex:

		(...)
		caracter: nome, sobrenome, endereço;
		real; nota1;
		real: nota2;
		inteiro: codigoDoCurso;
		(...)

O algoritmo começa a executar os comandos listados entre inicio e fim. um a um. Os comandos de nossos algoritmos serão separados por “;” e, apesar de poderem estar na mesma, sugere-se escrever apenas um comando por linha.

Para atribuirmos um valor a uma variável utilizamos o comando “” seguido de uma expressão.

As expressões são expressões comuns da matemática apenas dispostas em uma linha com algumas ressalvas para a prioridade de operadores.

Operadores

  • A+B: soma de A+B
  • A-B: subtração de A-B
  • A*B: produto de A*B
  • A/B: divisão de A/B
  • A**B ou A^B: A elevado a B
  • -A ou +A: sinal
  • sen(A), cos(A), tg(A): funções conhecidas da matemática.
  • A div B: Divisão inteira de A por B. Ex: 5 div 2 = 2
  • A mod B: resto da divisão inteira de A por B. Ex: 5 mod 2 = 1
  • A e B, A ou B, não A: operadores lógicos.
  • =, !=, >, <, >=, <=: operadores relacionais.

Ordem dos Operadores

  1. Parênteses e Funções
  2. Expressões aritméticas
    1. +, – (sinal)
    2. **
    3. *, /
    4. +, – (adição, subtração)
  3. Comparações
  4. não
  5. e
  6. ou

2.2.4 – Estruturas de comandos

A estrutura de controle mais simples é a seqüência de comandos ou bloco de comandos. Consiste de vários comandos (ou outros blocos) separados por “;“. Um comando só é executado se o seu anterior terminou a execução. O bloco principal fica entre inicio e fim., enquanto os blocos intermediários entre inicio e fim;. Um bloco pode ser considerado um único comando (mais complexo).

A estrutura de condicional executa um comando (ou bloco) baseado no resultado de uma expressão lógica.

A estrutura de repetição executa um comando (ou bloco) repetidamente enquanto uma condição de guarda lógica for verdadeiro.

Vamos definir dois comandos que farão o controle de entrada e saída de dados para nosso algoritmo. O comando leia(var1<, var2><…, varn>); obtém o dado do mundo externo(teclado, cartão perfurado, etc) e o atribui à variável. O comando imprima(varouexp1<, varouexp2><…, varouexpn>); escreve os dados do mundo externo(impressora, tela, etc) na ordem que foram definidos.

Exemplos

Construa um algoritmo que apresente a soma valores inteiros positivos lidos pelo teclado. Assuma que o número -1 indique que os números acabaram (FLAG de saída).

algoritmo soma; 
início
	inteiro: valor, soma;
	
	soma ← 0;
	leia(valor);
	enquanto valor<>-1 faça
		soma ← soma + valor;
		leia(valor);
	fim-enquanto;
	imprima("O valor da soma é: ", soma);
fim.

Construa um algoritmo que leia vários números inteiros positivos do teclado(use -1 como flag de saída novamente) e apresente o maior e o menor número do conjunto.

algoritmo maiorMenor;
inicio
	inteiro: maior, menor, valor;
	
	leia(valor);
	maior ← valor;
	menor ← valor;
	enquanto valor <> 0 faça
		se valor > maior então
			maior  ← valor;
		senao
			se valor < menor entao
				menor ← valor;
			fim-se;
		fim-se;
		leia(valor);
	fim-enquanto;
	imprima(maior,menor);
fim.
Share

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*