Algoritmos

19
algoritmos algoritmos Profª. Mariangela Gomes Setti Profª. Mariangela Gomes Setti Prof. Richard Duarte Ribeiro Prof. Richard Duarte Ribeiro CEFET-PR CEFET-PR DAINF DAINF Curitiba-2002 Curitiba-2002 Revisado pelo prof. Robson Ribeiro Linhares Revisado pelo prof. Robson Ribeiro Linhares

description

Apostila de algoritmos e C/C++.

Transcript of Algoritmos

Page 1: Algoritmos

algoritmosalgoritmos

P r o f ª . M a r i a n g e l a G o m e s S e t t iP r o f ª . M a r i a n g e l a G o m e s S e t t iP r o f . R i c h a r d D u a r t e R i b e i r oP r o f . R i c h a r d D u a r t e R i b e i r o

C E F E T - P RC E F E T - P RD A I N FD A I N F

C u r i t i b a - 2 0 0 2C u r i t i b a - 2 0 0 2R e v i s a d o p e l o p r o f . R o b s o n R i b e i r o L i n h a r e sR e v i s a d o p e l o p r o f . R o b s o n R i b e i r o L i n h a r e s

Page 2: Algoritmos

1. Tipos Básicos e Comandos Básicos em Pseudocódigo

1.1. ConstantesUma constante é um determinado valor fixo que não se modifica ao longo do tempo, durante

a execução de um programa. Constantes podem ser do tipo numérica, lógica ou literal.

1.1.1.Constantes Numéricas Exemplos:

a) 25;b) 3,14;c) 7,8 x 103;d) -15;e) 0,342;f) –10-9.

1.1.2.Constantes Lógicas É um valor lógico, isto é, que só pode ser falso ou verdadeiro.

1.1.3.Constante Literal Exemplos:

a) “José da Silva”;b) “1234”; (note que isto não é uma constante numérica)c) “X1Y2W3”;d) “*A!B?-/”.

1.2. VariáveisNo Pseudocódigo, temos quatro tipos básicos de dados que podem ser utilizados:

Inteiro: qualquer número inteiro, negativo, nulo ou positivo.Ex.: -5; 0; 235

Real: qualquer número real, negativo, nulo ou positivo.Ex.: -5; 30,5; 0; 40

Caractere: qualquer conjunto de caracteres alfanuméricos.Ex.: “AB”; “xyz”

Lógico: conjunto de valores falso ou verdadeiro em proposições lógicas.

1.2.1.Declaração de variáveis Toda variável deve ser declarada conforme a sintaxe abaixo:

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 2/19)a r q . : A l g o r i t m o s . d o c

inteiro

real

caractere

identificador

,;

Identificador é o nome da variável que está sendo declarada.

Page 3: Algoritmos

OBS.: Os nomes de variáveis devem começar com letra (maiúscula ou minúscula e podem ser seguidos por números, letras , “-“ ou “_”.

• Exemplos de declaração de variáveis:inteiro x1;real A, B;caractere frase, NOME;lógico TEM;

• Exemplos de nomes de variáveis inválidos:Variável 1;3x;x + y.

REGRA: Dê nomes significativos para variáveis. Para identificar, por exemplo, uma variável que receberá a média aritmética de notas de provas utilize o nome media (sem acento) ao invés de z, x ou k.

1.3. ComentáriosPara melhorar a clareza do algoritmo deve-se fazer uso dos comentários . Eles podem ser

inseridos dentro de chaves.Ex.: {Isto é um comentário em pseudocódigo}

Os mesmos podem ser colocados em qualquer ponto do algoritmo.

1.4. Comando de AtribuiçãoPara a atribuição de um valor a uma variável, usaremos o símbolo de atribuição “ ← “.

Sintaxe :

Exemplos:k ← 1; (a variável k recebe o inteiro 1)COR ← “verde”;TESTE ← falso;A ← B;MÉDIA ← SOMA/N;

1.5. Operadores AritméticosAlém os símbolos das quatro operações básicas (+, – (unário ou binário), *, /) usaremos

símbolos para raiz quadrada e exponenciação, por exemplo:

a ou raiz(a)(a + b)n ou (a + b) ** n

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 3/19)a r q . : A l g o r i t m o s . d o c

lógico

identificador ;expressão←

Page 4: Algoritmos

acb 42 −

Além disso, usaremos os nomes das funções matemáticas comuns. Por exemplo:sen(x); cos(x); tg(x); exp(x) ex, etc...abs(x) ou |x|; sinal (x) fornece –1, +1 ou zero conforme xint(x) inteiro de x

Usaremos também como nomes de operadores:• mod, por exemplo: m mod i é: resto (módulo) da divisão de m por i• resto (m,i): idem

• div ou “/”, por exemplo, n div m: quociente da divisão inteira de n por m• quociente (n,m): idem

1.6. Operadores LógicosDentro das relações lógicas, usaremos os conectivos usuais:

“e” ou “ ∧” para a conjunção“ou” ou “∨” para a disjunção (não exclusiva)“não” ou “~” ou “¬” para a negação

1.7. Operadores RelacionaisAnalogamente, usaremos os conectivos relacionais =, ≠ ( ou !=, ou <>), ≥ (ou >=), <, ≤ (ou <=)

de significado óbvio.

1.8. Hierarquia das OperaçõesAs prioridades para as operações mistas são dada pela tabela a seguir:

1° Parênteses e funções2° Expressões aritméticas:

1) +, – (unários)2) * *3) *, /4) +, – (binários)

3° Comparações:<, ≤, =, ≥, >, ≠

4° não (~)5° e (∧)6° ou (∨)

1.9. Comandos de entrada e saída Entrada

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 4/19)a r q . : A l g o r i t m o s . d o c

leia identificador ;,

Page 5: Algoritmos

Ex.: leia NOTA,NUM;

Saída

Onde:Identificador = variável;Expressão = expressão matemática;Caractere = conjunto de caracteres.

Ex.: escreva “NOME:”, N;escreva A, X, 35;escreva “Valor Lido:”, N, “Resultado =”, N**2+5;

FluxogramaFundamentalmente é uma ferramenta de codificação. Apresenta de forma gráfica a seqüência na

qual os comandos ou blocos de processo são executados e a lógica de controle de execução. Tradicionalmente têm servido para dois propósitos. Primeiro, têm sido usados como uma ferramenta de projeto de programa para planejar a lógica detalhada e complicada do programa. Segundo, têm sido usados como documentação do programa.

Como os fluxogramas fornecem uma representação seqüencial de programa e não uma representação hierárquica, não podem apresentar a estrutura do programa e as inter-relações entre componentes procedurais.

Símbolos de Fluxograma

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 5/19)a r q . : A l g o r i t m o s . d o c

escreva

;identificador ;

,

expressão

caractere

Processo Terminação Decisão Entrada/Saída

Documento

Conector

ExibiçãoMemória de Disco

Page 6: Algoritmos

1.10.BlocosPodem ser definidos como um conjunto de comandos com uma função bem definida. Eles

servem também para definir os limites onde as variáveis declaradas em seu interior são conhecidas. São delimitados pelas palavras início e fim.

1.11.Estrutura SeqüencialÉ um conjunto de comandos, separados por ponto e vírgula (;) que serão executados em uma

seqüência linear de cima para baixo.

1.12.Estrutura Condicional A estrutura condicional permite a escolha do grupo de ações e estruturas a ser executado

quando determinadas condições, representadas por expressões lógicas, são ou não satisfeitas. Estas estrutura é delimitada pelo comando se e pela expressão fim se.

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 6/19)a r q . : A l g o r i t m o s . d o c

início<declaração de

variáveis><inicialização de

variáveis>

<comandos>fim

início

fim

Pseudocódigo Fluxograma

C1;C2;C3;.....Cn;

Pseudocódigo Fluxograma

C1;

C2;

Cn;

.

.

.

Onde Ci são comandos

Page 7: Algoritmos

1.12.1.Estrutura Condicional Simples Neste caso, a seqüência só é executada se a condição for verdadeira.

1.12.2.Estrutura Condicional Composta Neste caso, a seqüência a ser executada (dentre duas seqüências) dependerá do resultado da

condição.

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 7/19)a r q . : A l g o r i t m o s . d o c

se <condição>então

C1;C2;C3;...Cn;

fim se

Pseudocódigo Fluxograma

C1;

C2;

Cn;

.

.

.

Onde Ci são comandos

F

V

se <condição>então

C1;C2;C3;...Cn;

senãoD1;D2;D3;...Dn;

fim se

Pseudocódigo Fluxograma

D1;

D2;

Dn;

.

.

.

Onde Ci e Di

são comandos

F

C1;

C2;

Cn;

.

.

.

V

Page 8: Algoritmos

1.13.Estrutura de Repetição

1.13.1.Enquanto-faça Usado quando um conjunto de ações é executado repetidamente enquanto uma determinada

condição permanece válida. (Expressão cujo resultado é o valor lógico verdadeiro)Enquanto o valor da <condição> for verdadeiro, as ações dos comandos são executadas.

Quando for falso, o comando é abandonado. Se já da primeira vez o resultado é falso, os comandos não são executados nenhuma vez.

1.13.2.Interrupção Caso seja necessária uma interrupção durante a execução da repetição, pode-se fazê-la através

do comando interrompa. O mesmo fará a execução da repetição ser interrompida, sendo executada a seqüência de comandos que vier logo após a expressão fim enquanto.

Tal caso é mostrado no segmento abaixo:

Neste trecho, durante a repetição, as seqüências A, e B de comandos serão executadas até que a condição para interrupção seja alcançada. Quando isso ocorrer (depois da execução da seqüência A), o controle passará para a seqüência C. Note que depois da interrupção a seqüência B de comandos não será executada.

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 8/19)a r q . : A l g o r i t m o s . d o c

enquanto <condição> façaC1;C2;C3;...Cn;

fim enquanto

Pseudocódigo Fluxograma

C1;

C2;

Cn;

.

.

.

Onde Ci são comandos

Fcondição V

enquanto <condição> façaseqüência A de comandos;se <condição> então interrompa;fim seseqüência B de comandos;

fim enquantoseqüência C de comandos;

Page 9: Algoritmos

V

1.13.3.Repita-enquanto A semântica do comando é a seguinte: os comandos C1, C2, ..., Cn são executados pelo menos

uma vez. Quando a condição é encontrada, ela é testada. Se for verdadeira os comandos C1, C2, ..., Cn voltam a ser executados, se for falsa o comando seguinte será executado. Em outras palavras, os comandos C1, C2, ..., Cn são reexecutados enquanto a condição for verdadeira.

1.13.4.Para-faça A semântica do comando é a seguinte: v, i, l e p são variáveis quaisquer e que, de acordo

com as regras da programação estruturada, não devem ser modificadas nos comandos C1, C2, ..., Cn.

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 9/19)a r q . : A l g o r i t m o s . d o c

repitaC1;C2;C3;...Cn;

enquanto <condição> ;

C1;

C2;...

Onde Ci são comandos

para v de i até ℓ passo p façaC1;C2;C3;...Cn;

fim para

Pseudocódigo Fluxograma

C1;

C2;

Cn;

.

.

.

Fcondição V

v ← i

v←v+p

OBS: atente para o uso do “;” ao final do comando de repetição.

C1;

C2;...

F condiçãoV

F

Page 10: Algoritmos

Os dois últimos comandos (repita-enquanto e faça-para) possuem equivalência com o comando enquanto-faça, como pode ser verificado pelos exemplos abaixo:

Exs.: a) Comando repita-enquanto:

I ←1;Repita A ← B + C; Escreva A; I ← I + 1;enquanto I<=18;

I ← 1;enquanto I <= 18 faça A ←B + C; escreva A; I ←I + 1;fim enquanto

b) Comando faça-para:

para I de 1 até 18 passo 2 faça A ← B + A; escreva A;fim para

I ←1;enquanto I <= 18 faça A ←B + A; escreva A; I ← I + 2;fim enquanto

1.14.Alternativa de Múltipla EscolhaA sintaxe de comando será:

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 10/19)a r q . : A l g o r i t m o s . d o c

Pseudocódigo

escolha (<expressão>)caso v11: [caso v12:]...[caso v1n:]

C11; ...; C1n;interrompa;

caso v22:...[caso v2n:]

C21; ...; C2n;interrompa;

...caso vn1:...[caso vnn:]

C1; ...; Cn;interrompa;

senão:C1; ...; Cn;interrompa;

fim escolhaFluxograma

Onde Ci e Di

são comandos

C1; C2;

expressão

Cn; Cm

+1;

senão

Page 11: Algoritmos

Ex.: leia tipo, peso;escolha (peso*2+3)

caso 15:VALOR ← 15,00;interrompa;

caso 17:caso 18:caso 19:

VALOR ← 19,00;interrompa;

caso 20:caso 21:

se TIPO=5então

VALOR ← 25,00;senão

VALOR ← 30,00;fim seinterrompa;

senão:escreva “Peso acima do limite”;VALOR ← 0;interrompa;

fim escolha

Obs.: O comando interrompa vale para todos os três tipos de estruturas de repetição, a para a

alternativa de múltipla escolha, fazendo com que caso ocorra uma chamada ao interrompa o controle de execução passe para a linha seguinte à estrutura.

Regras para confecção de Algoritmos1. Em primeiro lugar declare as variáveis;2. Em seguida essas variáveis devem ser inicializadas;3. Escolha nomes significativos para as variáveis;4. Procure alinhar os comandos de acordo com o nível a que pertençam, isto é, destaque a

estrutura na qual estão contidos.

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 11/19)a r q . : A l g o r i t m o s . d o c

Page 12: Algoritmos

2. Estrutura de Dados

2.1. Variáveis Compostas HomogêneasVariáveis compostas homogêneas correspondem a posições de memória, identificadas por um mesmo nome, individualizadas por índices e cujo conteúdo é de mesmo tipo.

O conjunto de 10 notas dos alunos de uma disciplina pode constituir uma variável composta. A este conjunto associa-se o identificador NOTA que passará a identificar não uma única posição de memória, mas 10.

A referência ao conteúdo do n-ésimo elemento do conjunto será indicada por NOTA[n], onde n é um número inteiro ou uma variável numérica contendo um valor inteiro.

Ex.:

NOTA[3] se referencia ao terceiro elemento do conjunto, cujo conteúdo é 54.

2.1.1.Variáveis Compostas Unidimensionais São os conjuntos de dados referenciados por um mesmo nome e que necessitam de somente

um índice para que seus elementos sejam endereçados. São conhecidos como vetores.Exs.:

Sintaxe:<tipo> <identificador 1> [n 1], <identificador 2> [n 2], ... , <identificador x> [n x];onde,

<tipo> é um dos tipos básicos já definidos (inteiro, real, caractere, lógico);<identificador x> é o nome associado a variável que se deseja declarar;n x é um número inteiro;

Exemplos de declarações:inteiro VETOR[20]; {representa um vetor de 20 posições}real NOTAS[30];lógico TEM[3], NAOTEM[6];inteiro TESTE[4], FLAG[14], ok[4];

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 12/19)a r q . : A l g o r i t m o s . d o c

NOTA

60 70 54 85 63 9646 6776 981 2 3 4 5 108 96 7

NOTA

60 70 54 85 63 9646 6776 981 2 3 4 5 108 96 7

PESO

78,5 91,1 68,6 71,4 62,71 2 3 4 5

Page 13: Algoritmos

2.1.2.Variáveis Compostas Multidimensionais Conjunto de dados referenciados por um mesmo nome e que necessita de mais de um índice

para ter seus elementos individualizados.

Exs.:

Sintaxe:<tipo> <identificador 1> [m 1][n 1]...[z 1], <identificador 2> [m 2][n 2]...[z 2],

<identificador x> [m x][n x]...[z x];

onde,<tipo> é um dos tipos básicos já definidos (inteiro, real, caractere, lógico);<identificador x> é o nome associado a variável que se deseja declarar;m x, n x e z x são números inteiros;

Exemplos de declarações:inteiro CELULAS[20][30], TIPOS[2][4];real MATRIX[10][23][5];lógico RESULTADOS[3][6][23];inteiro TESTE[6][8][2];

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 13/19)a r q . : A l g o r i t m o s . d o c

ESCANINHO

60 65 25

1 2 3

56 68 36

86 32 34

1

2

3

LIVRO

2

60 65

56 68

86 321

1

2

3

1 2

25

3

36

34

989

65 31275 64 87

24 654

32

3

1 2 3

1

2

3

Page 14: Algoritmos

Inicialização de Variáveis Compostas

– Para inicializar um vetor com o mesmo valor

Ex.: Em um vetor NOTA[5], NOTA ← 0equivale a:NOTA[1] ← 0; NOTA[2] ← 0; NOTA[3] ← 0; NOTA[4] ← 0; NOTA[5] ← 0;

– Para inicializar um vetor com valores diferentes

Ex.: Em um vetor NOTA[5], NOTA ← (5.7, 9.5, 10.0, 3.7, 9.8)equivale a:

NOTA[1] ← 5.7; NOTA[2] ← 9.5; NOTA[3] ← 10.0; NOTA[4] ← 3.7; NOTA[5] ← 9.8;

2.2. Variáveis Compostas Heterogêneas

2.2.1.Registros São conjunto de dados logicamente relacionados, mas de tipos diferentes (numérico, literal,

lógico)Ex.:

FUNCNOME

SALARIO

IDADE CASADO

Sintaxe:registro [nome] (<componentes>) <lista-de-identificadores> ;onde,

registro é uma palavra chave; [nome] é o nome da estrutura (opcional). <componentes> são declarações e/ou identificadores de variáveis compostas,

separados por ponto-e-vírgula;<lista-de-identificadores> são os nomes que estão sendo associados aos registros que

se deseja declarar;

Exemplo de declarações:registro REGCAD (

caractere NOME;real SALARIO;inteiro IDADE;lógico CASADO;) FUNC;

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 14/19)a r q . : A l g o r i t m o s . d o c

caractere

real

lógicointeiro

Page 15: Algoritmos

Onde REGCAD é o nome da estrutura de registro e FUNC é uma variável da forma REGCAD.

registro (inteiro CPF, IDENTIDADE;lógico FGTS;) PAG;

Acima é declarada uma variável chamada PAG definida pela estrutura que a procede.

A atribuição de valores às variáveis que compõem o registro pode ser qualificado da seguinte maneira:

FUNC.NOME ← “Fulano de Tal”;FUNC.SALARIO ← 3000,00;FUNC.IDADE ← 32;REGPAG.FGTS ← V;REGPAG.CPF ← 123663430;

2.2.2.Conjunto de Registros Podem-se ter conjuntos de registros referenciáveis por um mesmo nome e individualizáveis

por índices.Ex.:Usando o registro REGCAD definido anteriormente, podemos definir um conjunto de

registros da forma:

registro REGCAD CADASTRO [100];

NOME SALARIO IDADE CASADO1234

100

A atribuição de dados ao funcionário número 3 seria:

CADASTRO[3].NOME ← “Fulano de Tal”;CADASTRO[3].SALARIO ← 12700; {UAH!!}CADASTRO[3].IDADE ← 32;CADASTRO[3].CASADO ← V;

OuCADASTRO[3] ← (“Fulano de Tal”,

12700,32,V);

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 15/19)a r q . : A l g o r i t m o s . d o c

CAD

ASTR

O

REGCAD

Page 16: Algoritmos

3. ModularizaçãoA forma natural de solucionarmos problemas complexos é dividi-los em problemas mais

simples, aos quais chamamos de módulos.A modularização é uma ferramenta da programação estruturada, que tem como objetivo

aumentar a confiabilidade, legibilidade, manutenibilidade e flexibilidade. Um módulo é, então, um grupo de comandos, constituindo um trecho de algoritmo, com uma função bem definida e o mais independente possível em relação ao resto do algoritmo.

Ex.: “Ler o valor unitário de um quilo de feijão e a quantidade de quilos vendida para um

determinado freguês. Calcular o valor total a ser cobrado, sabendo que sobre o valor total vendido temos que aplicar 45% de impostos, mais 10% de lucro. Depois de ter calculado o valor total, exibir o código do produto vendido, o valor unitário do produto, a quantidade vendida e o total que o freguês terá que pagar.”

Apesar deste problema não ser muito complexo, podemos dividi-lo em 3 partes distintas, ou seja, 3 módulos:

1. leitura dos dados (vlr_unitário, qtde_vendida);2. cálculo do valor total a pagar;3. exibição dos dados.Devemos utilizar módulos de tamanho limitado, isso não quer dizer que um módulo deva ter

no máximo 100 linhas, mas que, módulos muito extensos acabam perdendo sua funcionalidade. Cada módulo pode definir as próprias estruturas de dados necessárias para sua execução. Todo módulo é constituído por uma seqüência de comandos que operam sobre um conjunto de variáveis que podem ser globais ou locais.

A comunicação entre módulos deverá ser feita através de variáveis globais ou por transferência de parâmetros.

Vantagens da modularização:

a independência do módulo permite uma manutenção mais simples e evita efeitos colaterais em outros pontos do algoritmo;

pode-se elaborar um módulo independente do restante do algoritmo; testes e correções dos módulos podem ser feitos em separado; reutilização dos módulos por outros algoritmos.

Podemos utilizar dois tipos de ferramentas para fazer a modularização: procedimentos e funções. Ambos são módulos hierarquicamente subordinados a um algoritmo chamado de módulo principal, da mesma forma um procedimento ou função pode conter procedimentos e funções aninhadas, como mostra a figura abaixo:

Onde:P – Procedimento F – Função

A declaração de um procedimento ou função é composta por um cabeçalho e um corpo.l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 16/19)

a r q . : A l g o r i t m o s . d o c

MP

P1 P2 F1 F2

P3 F3 F4 P4

Page 17: Algoritmos

O cabeçalho identifica o procedimento, contém seu nome e a lista de parâmetros formais, o corpo contém declarações locais e os comandos do procedimento. Para ativarmos um módulo, fazemos referência a seu nome e a indicação dos parâmetros atuais.

3.1. Procedimentos

3.1.1. Sintaxe procedimento <nome do procedimento> (<lista-de-parâmetros>)

<especificação dos parâmetros>início

<declaração de variáveis locais>Comandos;

fim. {nome do procedimento}

Ex.:procedimento Leia_dados (Valor, Qtde)

real Valor; inteiro Qtde;início

leia Valor, Qtde;escreva Valor, Qtde;

fim;

Para chamar o procedimento no programa principal, basta o nome do procedimento e a lista de parâmetros:

Leia_dados (vlr_unitário, qtde_vendida);

Os parâmetros Valor e Qtde, são chamados de parâmetros formais e serão substituídos pelos parâmetros efetivos (vlr_unitário, qtde_vendida), no momento da chamada ao procedimento.

Depois que os comandos de um procedimento são executados, o fluxo de controle retorna ao comando seguinte àquele que fez a chamada.

3.2. FunçãoParecida com os procedimentos, têm a característica especial de retornar um valor ao

algoritmo que a chamou.

3.2.1. Sintaxe função <nome da função> (< lista-de-parâmetros>)

<especificação dos parâmetros>início

<declaração de variáveis locais>Comandos;<nome da função> <expressão>; {parâmetro de retorno}

fim. {nome da função}Ex.:

função ABS(x)real x;início

se X >= 0 então ABS x;l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 17/19)

a r q . : A l g o r i t m o s . d o c

Page 18: Algoritmos

senão ABS -x;fim se

fim {ABS}

A chamada da função, no programa principal é feita com uma referência a seu nome e a indicação dos parâmetros efetivos em uma expressão:

resultado ABS(num);

Neste caso o parâmetro formal é x e num é o parâmetro efetivo. Após esta linha de comando a variável resultado conterá o valor absoluto de num, calculado pela função ABS.

3.3. Passagem de parâmetrosExistem várias formas de passarmos parâmetros entre o programa principal e os módulos, a

escolha de uma delas dependerá do nosso objetivo.

por valor: as alterações feitas nos parâmetros formais, dentro do módulo, não se refletem nos parâmetros efetivos. O valor do parâmetro efetivo é copiado no parâmetro formal, no momento da chamada, neste caso ele é chamado de parâmetro de entrada. Ou seja, os parâmetros de entrada têm seus valores estabelecidos fora do módulo e não podem ser modificados dentro do módulo;

por resultado: as alterações feitas nos parâmetros formais, dentro do módulo, se refletem nos parâmetros efetivos. O valor do parâmetro formal é copiado no parâmetro efetivo, ao retornar do módulo, neste caso ele é chamado de parâmetro de saída. Ou seja, os parâmetros de saída têm seus valores estabelecidos dentro do módulo;

por referência: toda alteração feita num parâmetro formal corresponde a mesma alteração feita no seu parâmetro efetivo associado. Neste caso ele é chamado de parâmetro de entrada e saída. Ou seja, eles têm seus valores estabelecidos fora do módulo, mas podem ter seus valores alterados dentro dele.

OBS: Vale lembrar que cada linguagem de programação tem suas regras específicas para realizar a passagem de parâmetros, sendo as vezes necessário realizar adaptações ao algoritmo.

3.4. Independência FuncionalQuando projetamos um algoritmo devemos construir módulos com apenas um propósito

(alta coesão), e diminuir ao máximo a interação entre eles (baixo nível de acoplamento). Ou seja, o ideal é projetar software de forma que cada módulo encaminhe uma subfunção específica de requisitos e tenha uma interface simples quando visto de outras partes da estrutura do programa.

A independência funcional é fundamental para um bom projeto.

3.4.1. Coesão É a medida da força funcional relativa de um módulo. Podemos classificar um software em

relação a coesão, da seguinte maneira:• coincidental: quando o módulo realiza várias tarefas, que não tem nenhuma relação uma

com a outra;• lógica: quando o módulo executa tarefas logicamente relacionadas, p.ex.: um módulo

que realiza todas as entradas de dados de um software;

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 18/19)a r q . : A l g o r i t m o s . d o c

Page 19: Algoritmos

• temporal: quando o módulo contém tarefas que são relacionadas pelo fato de todas terem que ser executadas num mesmo intervalo de tempo.

3.4.2.Acoplamento Depende da complexidade da interface entre os módulos. Podemos classificar um software,

em relação ao acoplamento, da seguinte maneira:• baixo acoplamento: quando a interface entre módulos se faz através da passagem de

dados;• acoplamento moderado: quando a interface entre os módulos é feita por controle, p.ex.,

quando o módulo1 passa o controle para o módulo 2;• acoplamento elevado: quando o módulo está ligado a um ambiente externo ao software,

p.ex., a E/S acopla um módulo a dispositivos, formatos e protocolos de comunicação. Ou ainda, módulos que utilizam variáveis globais.

Obs: Qto. maior o nível de coesão e menor o nível de acoplamento, melhor é o software.

l ó g i c a a p l i c a d a - P r o f . R i c h a r d p á g . ( 19/19)a r q . : A l g o r i t m o s . d o c