Você está na página 1de 41

Algoritmos

Algoritmos
Lgica para Desenvolvimento de Programao
1
Introduo
Este trabalho fruto de minha experincia em desenvolvimento de softwares e cursos
lecionados na rea de programao.
O material aqui apresentado foi recolhido de algumas literaturas de Estrutura de Dados e
Tutoriais da encontrados no sites da nternet.
A programao para mim uma diverso, apesar de complexo, mas vejo como a
capacidade de um ser humano dominar e solucionar com recursos computacionais
problemas do dia-a-dia de uma Empresa, Corporao, etc...
O raciocnio da lgica para a programao traz ao indivduo um novo mundo cheio de outros
mundos. Dominando a lgica voc ser capaz de aprender sem grandes
dificuldades qualquer outra linguagem de programao seja ela estruturada,
orientada a objeto, orientada a eventos.
Alessandro Coelho Porto
2
Sobre o Autor
Atualmente trabalha como Webdesign / Webmaster na Embrapa Cerrados, sua principal tarefa
est no planejamaneto e desenvolvimento de Sites. Utiliza as linguagens HTML,
JavaScript e VbScript e Sistemas de Banco de Dados (ASP) para a nternet.
Em sua experincia profissional tambm encontramos servios autnomos na rea de
desenvolvimento na rea comercial, as ferramentas por ele utilizadas foram
Clipper, Visual Basic e Delphi.
3
Abordagem Contextual
4
Muitas pessoas gostam de falar ou julgar que possuem e sabem usar o
raciocnio lgico, porm, quando questionadas direta ou indiretamente, perdem esta
linha de raciocnio, pois este depende de inmeros fatores para complet-lo, tais
como: calma, conhecimento, vivncia, versatibilidade, experincia, criatividade,
ponderao, responsabilidade, entre outros.
Bem sem mais delongas podemos dizer que lgica a cincia que estudas as
leis e critios de validade que regem o pensamento e a demonstrao, ou seja,
cincia dos princpios formais do raciocnio.
Usar a lgica um fator a ser considerado por todos, principalmente pelos
profissionais de informtica (programadores, analistas de sistemas e suporte), pois
seu dia-a-dia dentro das organizaes solucionar problemas e atingir os objetivos
apresentados por seus usurios com eficincia e eficcia, utilizando recursos
computacionais e/ou automatizados macatronicamente. Saber lidar com problemas de
ordem administrativa, de controle, de planejamento e de estratgica requer ateno e
boa performance de conhecimento de nosso interesse mostrar como desenvolver e
aperfeioar melhor esta tcnica, lembrando que para isto, voc dever ser persistente
e pratic-la constantemente, chegando exausto sempre que julgar necessrio.
Princpios de Resolues de Problemas
Primeiramente, devemos entender e compreender a palavra "problema.
Podemos dizer que problema um proposta duvidosa, que pode Ter inmeras
solues, ou questo no solvida e que o objeto de discusso, segundo a definio
encontrada no Dicionrio Aurlio.
Preferimos dizer que problema uma questo que foge a uma determinada
regra, ou melhor, o desvio de um percurso, o qual impede de atingir com sucesso
um determinado objetivo com eficincia e eficcia.
Uma das solues utilizadas para a resoluo de problemas tem sido a
utilizao dos diagramas, no decorrer do curso ser bastante enfatizado em sala de
aula o uso de tais ferramentas com o intuito de auxiliar os aprendizados tanto na
resoluo de problemas como no conhecimento das tcnicas de programao.
ALGORI!O
Um Algoritmo uma seqncia de instrues ordenadas de forma lgica para a
resoluo de uma determinada tarefa ou problema.
PROGRA!A"#O $SR%%RA&A
Basicamente, a Programao Estruturada consiste numa metodologia de projeto de
programas visando:
facilitar a escrita dos programas;
facilitar a leitura (o entendimento) dos programas;
5
permitir a verificao a priori dos programas;
facilitar a manuteno e modificao dos programas.
O maior problema em grandes sistemas de software reside na enorme complexidade
desses sistemas, cuja a apreenso vai geralmente muito alm da capacidade
intelectual de um ser humano. Entenda-se aqui por complexidade de um sistema
uma medida do nmero de seus componentes e do grau de interao entre eles.
Para Dijkstra, o indiscutvel iniciador da programao estruturada, "a arte de
programar consiste na arte de organizar e dominar a complexidade.
A idia da Programao Estruturada, que vai ao encontro da mencionada tarefa do
programador, reduzir a complexidade, em trs nveis:
1. desenvolvimento do programa em diferentes fases por refinamento sucessivo
(desenvolvimento Top-Down);
2. decomposio do programa total em mdulos funcionais, organizados de
preferncia num sistema hierrquico;
3. usando dentro de cada mdulo s um nmero muito limitado de estruturas bsicas
de fluxo de controle.
O curso tem por objetivo apresentar aos alunos os conceitos e desenvolvimento da
programao estruturada, utilizando duas ferramentas muito utilizadas em cursos
acadmicos, o Portuguol e o Pascal.
PROGRA!A
Um programa um Algoritmo escrito em uma linguagem computacional.
Mais o que um Algoritmo?
Algoritmo um processo de clculo matemtico ou de resoluo de um grupo
de problemas semelhantes, em que se estipulam, com generalidade e sem restries.
Podemos dizer tambm, que so regras formais para obteno de um resultado ou da
soluo de um problema, engoblando frmulas de expresses aritmticas.
LI'G%AG$'S &$ PROGRA!A"#O
So Softwares que permitem o desenvolvimento de programas. Possuem um
poder de criao ilimitado, desde jogos, editores de texto, sistemas empresariais at
sistemas operacionais.
Existem vrias linguagens de programao, cada uma com suas caractersticas
prprias.
Exemplos:
Pascal
Clipper
C
Visual Basic
Delphi e etc.
6
(C'ICAS A%AIS &$ PROGRA!A"#O
7
Programao Seqencial
Programao Estruturada
Programao Orientada a Eventos e Objetos
Programao Orientada a Objetos
ALGORI!OS $! )POR%GOL*
Durante nosso curso iremos aprender a desenvolver nossos Algoritmos em
uma pseudo-linguagem conhecida como "Portugol ou Portugus Estruturado.
"Portugol derivado da aglutinao de Portugus + Algol. Algol o nome de
uma linguagem de programao estruturada usada no final da dcada de 50.
OP$RA&OR$S ARI!(ICOS
+ Adio
- Subtrao
* Multiplicao
/ Diviso
OP$RA&OR$S R$LACIO'AIS
> Maior que
< Menor que
>= Maior ou gual
8
<= Menor ou gual
= gual
<> Diferente
LI'$ARI+A"#O &$ $,PR$SS-$S
Para a construo de Algoritmos todas as expresses aritmticas devem ser
linearizadas, ou seja, colocadas em linhas.
!O&%LARI+A"#O &$ $,PR$SS-$S
A modularizao a diviso da expresso em partes, proporcionando maior
compreenso e definindo prioridades para resoluo da mesma.
Como pode ser observado no exemplo anterior, em expresses
computacionais usamos somente parnteses "( ) para modularizao.
Na informtica podemos ter parnteses dentro de parnteses.
Exemplos de prioridades:
(2+2)/2=2
2+2/2=3
OP$RA&OR$S $SP$CIAIS .!O& e &I/0
!O& Retorna o resto da diviso entre 2 nmeros inteiros.
&I/ Retorna o valor inteiro que resulta da diviso entre 2 nmeros inteiros.
1%'"-$S
Uma funo um instrumento (Subalgoritmo) que tem como objetivo retornar
um valor ou uma informao.
A chamada de uma funo feita atravs da citao do seu nome seguido
opcionalmente de seu argumento inicial entre parnteses.
As funes podem ser predefinidas pela linguagem ou criadas pelo
programador de acordo com o seu interesse.
2I2LIO$CAS &$ 1%'"-$S
Armazenam um conjunto de funes que podem ser usadas pelos programas.
1%'"-$S PR(3&$1I'I&AS
ABS( ) VALOR ABSOLUTO
SQRT( ) RAZ QUADRADA
SQR( ) ELEVA AO QUADRADO
TRUNC( ) VALOR TRUNCADO
ROUND( ) VALOR ARREDONDADO
LOG( ) LOGARTMO
SN( ) SENO
COS( ) COSENO
TAN( ) TANGENTE
9
As funes acima so as mais comuns e importantes para nosso
desenvolvimento lgico, entretanto, cada linguagem possui suas funes prpias. As
funes podem ser aritmticas, temporais, de texto e etc.
/ARI4/$IS
Variveis so endereos de memria destinados a armazenar informaes
temporariamente.
* Todo Algoritmo ou programa deve possuir varivel!
/ARI4/$IS &$ $'RA&A $ SA5&A
Variveis de Entrada armazenam informaes fornecidas por um meio externo,
normalmente usurios ou discos.
Variveis de Sada armazenam dados processados como resultados.
Exemplo:
De acordo com a figura acima A e B so Variveis de Entrada e C uma
Varivel de Sada.
CO'SA'$S
Constantes so endereos de memria destinados a armazenar informaes
fixas, inalterveis durante a execuo do programa.
Exemplo:
P = 3.1416
I&$'I1ICA&OR$S
So os nomes dados a variveis, constantes, Tipo de Dados, Registros e
programas.
Regras Para construo de dentificadores:
No podem ter nomes de palavras reservadas (comandos da linguagem);
Devem possuir como 1 caractere uma letra ou Underscore ( 6 );
Ter como demais caracteres letras, nmeros ou Underscore;
Ter no mximo 127 caracteres;
No possuir espaos em branco;
A escolha de letras maisculas ou minsculas indiferente.
Exemplos:
10
A B C=A+B
7 5 2
NOME TELEFONE DADE_FLHO
NOTA1 SALARO P
UMNOMEMUTOCOMPRDOEDFCLDELER
UM_NOME_MUTO_COMPRDO_E_FACL_DE_LER
IPOS &$ &A&OS
Todas as Variveis devem assumir um determinado tipo de informao.
O tipo de dado pode ser:
Primitivo Pr-definido pela linguagem;
Sub-Faixa uma parte de um tipo j existente;
Escalar Definidos pelo programador.
IPOS PRI!II/OS &$ &A&OS
I'$IRO
ADMTE SOMENTE NMEROS NTEROS. GERALMENTE UTLZADO
PARA REPRESENTAR UMA CONTAGEM (QUANTDADE).
R$AL
ADMTE NMEROS REAS (COM OU SEM CASAS DECMAS).
GERALMENTE UTLZADO PARA REPRESENTAR UMA MEDO.
CARAC$R$
ADMTE CARACTERES ALFANUMRCOS. OS NMEROS QUANDO
DECLARADOS COMO CARACTERES TORNAM SE REPRESENTATVOS
E PERDEM A ATRBUO DE VALOR.
L7GICO ADMTE SOMENTE VALORES LGCOS(VERDADERO/FALSO).
11
CO!A'&OS &$ I8O .I'P%8O%P%0
L$IA Comando de entrada que permite a leitura de Variveis de Entrada.
$SCR$/$RA Comando de sada que exibe uma informao na tela do
monitor.
I!PRI!A Comando de sada que envia uma informao para a impressora.
SI'AL &$ ARI2%I"#O
Uma Varivel nunca eternamente igual a um valor, seu contedo pode ser
alterado a qualquer momento. Portanto para atribuir valores a variveis devemos usar
o sinal de "9:*;
Exemplos:
A 9: 2;
B 9: 3;
C 9: A + B;
SI'AL &$ IG%AL&A&$
As constantes so eternamente iguais a determinados valores, portanto
usamos o sinal de "=.
Exemplos:
P : 3.1416;
Empresa = 'Colgio de nformtica L.T.D.A.'
V = Verdadeiro
CORPO G$RAL &$ %! PROGRA!A
PROGRAMA <<identificador>>;
CONST
<<identificador>> = <<dado>>
VAR
<<identificador>> : <<tipo>>;
NICIO
{
COMANOS ! !NTRAA"PROC!SSAM!NTO ! SAA
<<co#ando$>>;
<<co#andoN>>
%
&IM'
12
$SR%%RAS S$<=>'CIAIS
Como pode ser analisado no tpico anterior, todo programa possui uma
estrutura seqencial determinada por um NCO e FM.
(C'ICAS 24SICAS &$ PROGRA!A"#O
A partir deste ponto de estudo, voc ter um contato direto com a parte mais
prtica deste trabalho. Anteriormente nos preocupamos em proporcionar a voc, leitor,
um conhecimento terico bsico, de algns pontos que so por vezes causadores de
dvidas at a alguns profissionais de informtica considerados experientes. Sendo
assim, daqui para frente voc ter um contato maior com a aplicao prtica dos
Algoritmos.
$'RA&A? PROC$SSA!$'O $ SA5&A
Para se criar um programa que seja executvel dentro de um computador, voc
dever term em mente trs pontos de trabalho: a entrada de dados, o seu
processamamento e a sada dos mesmos. Sendo assim, todo programa estar
trabalhando com estes trs conceitos. Se os dados forem entrados de forma errada,
sero consequentemente e resultaro em respostas erradas. Desta forma, dizer a
algum que foi erro do computador ser um pouco "medocre.
O processo de execuo de um programa ocorre segundo o exposto, aps a
entrada de dados com a instruo leia e sada dos mesmos com a instruo escreva,
o processamento ser uma conseqncia da manipulao das variveis de ao.
Uma entrada e uma sada podero ocorrer dentro de um computador de
diversas formas. Por exemplo, uma entrada poder ser feita via teclado, moddem,
leitores ticos, disco, entre outras. Uma sada poder ser feita em vde, impressora,
disco, entre outras formas. Devido a esta grande variedade, nossos programas escrito
em portugus estruturado faro meno s instrues leia e escreva.
13
$xemplo @A
Segue um Algoritmo que l o nome e as 4 notas bimestrais de um aluno. Em
seguida o Algoritmo calcula e escreve a mdia obtida.
PROGRAMA M!IA(&INA)
VAR
NOTA$" NOTA*" NOTA+" NOTA," M!IA: INT!IRO
NOM! : CARACT!R!
INICIO
)!IA -NOM!.
)!IA -NOTA$" NOTA*" NOTA+" NOTA,.
M!IA <= -NOTA$ / NOTA* / NOTA+ / NOTA,. 0 ,
!SCR!V!R -NOM!" M!IA.
&IM'
$xemplo @B
Segue um Algoritmo que l o raio de uma circunferncia e calcula sua rea.
PROGRAMA AR!A(CIRC1N&!R!NCIA
CONST PI = +'$,$2
VAR RAIO" AR!A : R!A)
INICIO
)!R -RAIO. {PROC!SSAM!NTO%
AR!A <= PI 3 S4R-RAIO. {!NTRAA%
!SCR!V!R -5AR!A =6" AR!A. {SAA%
&IM'
CLI'DAS &$ CO!$'4RIOE
Podemos inserir em um Algoritmo comentrios para aumentar a compreenso
do mesmo, para isso basta que o texto fique entre Chaves "{}.
Exemplo:
LER (RAO); C$'RA&AE

14
$xerccios de AprendiFagem
1) Construir um programa que efetue o clculo de um salrio lquido de um professor.
Para fazer este programa voc dever possuir alguns dados, tais como: valor da
hora aula, nmero de aulas dadas no ms e percentual de desconto do NSS. Em
primeiro lugar, deve-se estabelecer qual ser o seu salrio bruto para efetuar o
desconto e Ter o valor do salrio lquido.
2) Efetuar o clculo da quantidade de litros de combustvel gastos em uma viagem,
utilizando-se um automvel que faz 12 Km por litro. Para obeter o clculo, o
usurio dever fornecer o tempo gasto na viagem e a velocidade mdia durante a
mesma. Desta forma, ser possvel obter a distncia percorrida com a frmula
DSTNCA <= TEMPO * VELOCDADE. Tendo o valor da distncia, basta calcular
a quantidade de litros de combustvel utilizada na viagem com a frmula:
LTROS_USADOS <= DSTNCA / 12. O programa dever apresentar os valores
da velocidade mdia, tempo gasto na viagem, a distncia percorrida e a
quantidade de litros usados na viagem.
3) Ler dois nmeros inteiros e efetuar as operaes de adio, subtrao,
multiplicao e diviso de A por B apresentando ao final os quadro resultados
obtidos.
$strutura de Controloe G A tomada de &ecises
Executa uma seqncia de comandos de acordo com o resultado de um teste.
A estrutura de deciso pode ser Simples ou Composta, baseada em um
resultado lgico.
Si#p7e8:
S! <<CONI9:O>>
!NT:O <<COMANO$>>
Co#po8ta $:
S! <<CONI9:O>>
!NT:O <<COMANO$>>
S!N:O <<COMANO$>>
Co#po8ta *:
S! <<CONI9:O>>
!NT:O INICIO
<<COMANO$>>;
<<COMANON>>
&IM;
S!N:O INICIO
<<COMANO$>>; <<COMANON>>
&IM;
15
OP$RA&OR$S L7GICOS
Atuam sobre expresses retornando sempre valores lgicos como Falso ou
Verdadeiro.
$ RETORNA VERDADERO SE AMBAS AS PARTES FOREM VERDADERAS.
O% BASTA QUE UMA PARTE SEJA VERDADERA PARA RETORNAR
VERDADERO.
'#O NVERTE O ESTADO, DE VERDADERO PASSA PARA FALSO E VCE-
VERSA.
A2$LA /$R&A&$
A 2 A $ 2 A O% 2 '#O .A0
V V V V F
V F F V F
F V F V V
F F F F V
$,PR$SS-$S L7GICAS
As expresses compostas de relaes sempre retornam um valor lgico.
Exemplos:
2+5>4 Verdadeiro 3<>3 Falso
De acordo com a necessidade, as expresses podem ser unidas pelos
operadores lgicos.
Smbolo SigniHicado
= I;<a7 a
<> iferente de
> Maior =<e
< Menor =<e
>= Maior o< i;<a7 a
<= Menor o< i;<a7 a
16
$xemplo @A
Segue um Algoritmo que l 2 nmeros e escreve o maior.
PROGRAMA AC>A(MAIOR;
VAR A" ? : INT!IRO;
INICIO
)!R -A" ?.;
S! A>?
!NT:O !SCR!V!R -A.
S!N:O !SCR!V!R -?.
&IM'
$xemplo @B
Segue um Algoritmo que l o nome e as 4 notas bimestrais de um aluno. Em
seguida o Algoritmo calcula e escreve a mdia obtida pelo aluno escrevendo tambm
se o aluno foi aprovado ou reprovado.
Mdia para aprovao = 6
PROGRAMA M!IA(&INA);
VAR
NOTA$" NOTA*" NOTA+" NOTA," M!IA: R!A);
NOM! : CARACT!R! @+AB
INICIO
)!R -NOM!.;
)!R -NOTA$" NOTA*" NOTA+" NOTA,.;
M!IA := -NOTA$ / NOTA* / NOTA+ / NOTA,. 0 ,;
S! M!IA>=2
!NT:O !SCR!V!R -CAPROVAOD.
S!N:O !SCR!V!R -CR!PROVAOD.
!SCR!V!R -NOM!" M!IA.
&IM'
'I'DOS &$ S$
Usados para tomadas de decises para mais de 2 opes.
Forma Geral:
S! <<CONI9:O>>
!NT:O <<COMANDO1>>
S!N:O S! <<CONI9:O>>
!NT:O <<COMANDO1>>
S!N:O <<COMANDO1>>
17
$xemplo @A
Segue um Algoritmo que l 3 nmeros e escreve o maior.
PROGRAMA AC>A(MAIOR;
VAR A" ?" C : INT!IRO;
INICIO
)!R -A" ?" C.;
S! -A>?. ! -A>C.
!NT:O !SCR!V!R -A.
S!N:O S! -?>A. ! -?>C.
!NT:O !SCR!V!R -?.
S!N:O !SCR!V!R -C.
&IM'
$SR%%RAS &$ CO'&I"#O
A estrutura de condio eqivale a um ninho de SE'S.
Forma Geral:
&ACA CASO
CASO <<CONI9:O$>>
<<COMANO$>>;
CASO <<CONI9:ON>>
<<COMANO$>>;
O1TROS CASOS
<<COMANO$>>;
&IM ! CASO
$xemplo @A
Segue um Algoritmo que l 3 nmeros e escreve o maior.
PROGRAMA AC>A(MAIOR;
VAR A" ?" C : INT!IRO;
INICIO
)!R -A" ?" C.;
&ACA CASO
CASO -A>?. ! -A>C.
!SCR!V!R -A.;
CASO -?>A. ! -?>C.
!SCR!V!R -?.;
O1TROS CASOS
!SCR!V!R -C.;
&IM ! CASO
&IM'
Exerccios de Aprendizagem
1) Ler trs valores para os lados de um tringulo, considerando lados como: A, B e C.
Verificar se os lados fornecidos formam realmente um tringulo, e ser for esta
condio verdadeira, dever ser indicado qual tipo de tringulo for formado:
issceles, escaleno ou equiltero.
2) Fazer a leitura de 3 valores para extrair uma equao do 2 grau. Dever ser
verificado se existem razes reais, uma ou duas razes conforme necessrio.
18
3) Ler quatro valores referentes a quatro notas escolares e um aluno e imprimr uma
mensagem dizendo que o alunos foi aprovado, se o valor da mdia escolar for
maior ou igual a 5. Se o aluno no foi aprovado, indicar uma mensagem
informando esta condio. Apresentar junto das mensagem o valor da mdia do
aluno para qualquer condio.
4) Ler quatro valores referentes a quatro notas escolares de um aluno e imprimir uma
mensagem dizendo que o aluno foi aprovado, se o valor da mdia escolar for
maior ou igual a 7. Se o valor da mdia for menor que 7, solicitar a nota de exame,
somar com o valor da mdia e obter nova mdia. Se a nova mdia for maior a 5,
apresentar uma mensagem dizendo que o aluno foi aprovado em exame, se o
aluno no foi aprovado, indicar uma mensagem informando esta condio.
Apresentar com as mensagens o valor da mdia do aluno, para qualquer condio.
$SR%RA &$ CO'ROL$ G LA"OS O% !ALDAS &$ R$P$I"#O
Existem ocasies onde se necessrio efetuar a repetio de um trecho de
programa um determinado nmero de vezes. Neste caso, poder ser criado um
looping que efetue o processamento de um determinado trecho, tantas vezes quantas
forem necessrias. Os loopings tambm so chamados de: laos de repetio ou
malhas de repetio.
Na programao estrutura ocorre a existnciade comandos apropriados para
efetuar a repetio de determinados trechos de programas o nmero de vezes que for
necessrio. A principal vantagem deste recurso que o programa passa a Ter um
tamanho menor, podendo sua amplitude de processamento ser aumentada em se
alterar o tamanho do cdigo de programao. Desta forma, pode-se determinar
repetioes com nmeros variados de vezes.
19
Repetio do ipo9 este lIgico no Incio do Looping
usada para repetir N vezes uma ou mais instrues. Tendo como vantagem o
fato de no ser necessrio o conhecimento prvio do nmero de repeties.
Forma Geral 1:
!N41ANTO <<CONI9:O>> &ACA
<<COMANO$>>;
&or#a Gera7 *:
!N41ANTO <<CONI9:O>> &ACA
NICIO
<<COMANO$>>;
<<COMANON>>
&IM;
$xemplo
Segue um algoritmo que calcule a soma dos salrios dos funcionrios de uma
empresa. O programa termina quando o usurio digitar um salrio menor que 0.
PROGRAMA SOMA(SA)ARIOS;
VAR SOMA" SA)ARIO : R!A);
INICIO
SOMA:=O;
SALARIO:=1;
!N41ANTO SA)ARIO>=E
INICIO
)!R -SA)ARIO.;
SOMA:=SOMA/SA)ARIO
&IM;
!SCR!V!R -SOMA.
&IM'
A estrutura enJuanto;;;Haa;;;Him6enJuanto tem o seu funcionamento
controlado por deciso. Sendo assim poder executar um determinado conjunto de
instrues enquanto a condio verificada for Verdadeira. No momento em que esta
condio se torna falsa, o processamento da rotina desviado para fora do looping.
Se a condio for Falsa logo de incio, as instrues contidas no looping so
ignoradas.
Repetio do Tipo: Teste lgico o !i" do Loopig
Assim como a estrutura ENQUANTO usada para repetir N vezes uma ou
mais instrues.
Sua validao final fazendo com que a repetio seja executada pelo menos
uma vez.
20
VALDA!"# $CAL
TODAS AS VARIVEIS QUE ACUMULAM VALORES DEVEM
RECEBER UM VALOR INICIAL.
Forma Geral;
R!PITA
<<COMANO$>>;
<<COMANON>>
AT! <<CONI9:O>>
$xemplo @A
Segue um algoritmo que calcule a soma dos salrios dos funcionrios de uma
empresa. O programa termina quando o usurio digitar um salrio menor que 0.
PROGRAMA SOMA(SA)ARIOS;
VAR
SOMA" SA)ARIO : R!A);
INICIO
SOMA:=O;
R!PITA
)!R -SA)ARIO.;
SOMA:=SOMA/SA)ARIO
AT! SA)ARIO<E;
!SCR!V!R -SOMA.
&IM'
$xemplo @B
Segue um algoritmo que escreve os 100 primeiros nmeros pares.
PROGRAMA PAR!S(*;
VAR I" PAR" CONTAOR : INT!IRO;
INICIO
CONTAOR := E;
PAR := E;
R!PITA
!SCR!V!R -PAR.;
PAR := PAR/*;
CONTAOR := CONTAOR/$;
AT! CONTAOR=$EE
&IM'
A estrutura repita;;atK6Jue tem o seu funcionamento controlado por deciso. Porm,
ir efetuar a execuo de um conjunto de instrues pelo menos uma vez antes de
verificar a validade da condio estabelecida. Diferente da estrutura enJuanto que
executa somente um conjunto de instrues, enquanto a condio verdadeira.
Desta forma repita tem seu funcionamento em sentido contrrio a enJuanto, pois
sempre ir processar um conjunto de instrues, no mnimo uma vez at que a
condio se torne Verdadeira. Pra a estrutura repita um conjunto de instrues
executado enquanto a condio se mantm Falsa e at que ela seja Verdadeira.
21
22
R$P$I"#O &O IPO9 /ARI4/$L &$ CO'ROL$
Anteriormente, formas vistas duas formas de se elaborar looping. Uma
usando o conceito enJuanto e a outra usando o conceito repita. Foi visto tambm
como se estabelecer rotinas que efetuarem a execuo de um looping um
determinado nmero de vezes atravs da utilizao de um contador (atravs de uma
varivel de controle).
Porm, existe uma possibilidade de faciliar o uso de contadores finitos, sem
fazer uso das estruturas anteriores, deixando-as para a utilizao de loopings onde
no se conhece de antemo o nmero de vezes que uma determinada sequncia de
instrues dever ser executada. Os looping que possuem um nmero finito de
execues podero ser processados atravs de estrutura de laos contados para,
sendo conseguida com a utilizao do conjunto de instrues
para;;de;;atK;;passo;Haa;;Him6para.
A estrutura para;;de;;atK;;passo;Haa;;Him6para tem seu funcionamento
controlado por uma varivel denominada contador. Sendo assim, poder executar um
determinado conjunto de instrues um determinado nmero de vezes.
Sua sintaxe a seguinte:
#$%$ <FariGFe7> de <inicio> $t& <fi#> p$ssp<incre#ento> !$$
<in8tr<HIe8>
!i"'p$%$
$xemplo
Pedir a leitura de um valor para a varivel X, multiplicar este valor por 3 implicando-o
varivel de resposta R e apresentar o valor obtido, repetindo esta segncia por
cinco vezes.
Pro;ra#a )oopin;(Para
Var
J" R "CONT: Inteiro
Inicio
Para CONT de $ atK A pa88o $ faHa
)eia -L.
R <= J 3 R
!8creFa-R.
&i#(para
&i#'
Ser executado o conjunto de instrues entre a instruo para e a instruo
Him6para, sendo a varivel CONT (varivel de controlo) inicializada com valor 1
e incrementada de mais 1 atravs da instruo passo at o valor 5. Este tipo
de estrutura de repetio poder ser utilizado todas as vezes que se tiver a
necessidade de repetir trechos finitos, onde se conhece o valor inicial e o valor
final.
23
$xerccios de AprendiFagem
(Desenvolver Cada Exerccio utilizando as trs estruturas de repetio apresentadas)
1) Apresentar os quadrados do nmeros inteiros de 15 a 200.
2) Apresentar os resultados de uma tabuada de um nmero qualquer. Esta dever
ser impressa no seguinte formato:
Considerando como exemplo o fornecimento do nmero 2
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10

(...)
2 X 10 = 20
3) Apresentar o total da soma do cem primeiros nmeros inteiros ( 1 + 2+ 3 + 4...+ 99
+ 100 ).
4) Elaborar um programa que apresente no final o somatrio dos valores pares
existentes na faixa de 1 at 500.
5) Apresentar todos os valores numricos inteiros mpares situados nafaixa de 0 a 20.
Para verificar se o nmero mpar, efetuar dentro da malha a verificao lgica
desta condio com a instruo se, perguntando se o nmero mpar, sendo
mostre-o, no sendo, passe para o prximo passo.
6) Apresentar todos os nmeros divisveis por 4 que sejam menores que 200. Para
verificar se o nmero divisvel por 4, efetuar dentro da malha de verificao
lgica desta condio com a instruo se, perguntando se o nmero divisvel,
sendo, mostre-o, no sendo passe para o prximo passo. A varivel que controlar
o contador dever ser iniciada com valor 1.
7) Apresentar as potncias de 3 variando de 0 a 15. Deve ser considerado que
qualquer nmero elevado a zero 1, e elevado a 1 ele prprio.
8) Elaborar um programa que apresente o valor de uma potncia de uma base
qualquer elevada a um expoente qualquer, ou seja, de N
M
.
9) Escreva um programa que apresente a srie de Fibobnacci ato dcimo quinto
termo. A srie de Fibonacci formada pela seqncia: 1,1,2,3,5,8,13,21,34,... etc.
Esta srie se caracteriza pela soma de um termo posterior com o seu anterior
subseqente.
$SR%%RA 24SICA &$ &A&OS G A2$LAS $! !$!7RIAS
$strutura de &ados DomogLneas
Durante os pontos estudados anteriormente, percebemos que o poder de
programao se tornou maior. Porm, tendo domnio das tcnicas anteriores, ainda
correr-se o risco de no conseguir resolver alguns tipos de problemas, pois foram
trabalhadas at aqui apenas variveis simples, variveis que somente armazenam um
valor por vez.
Neste captulo, ser apresentado uma tcnica de programao que permitir
trabalhar com o agrupamento de vrias informaes dentro de uma mesma varivel.
Vale salientar que este agrupamento ocorrer obedecendo sempre ao mesmo tipo de
dado, e por esta razo chamado de estruturas de dados homogneas. Agrupamentos
24
de tipo de dados diferentes seto estudados mais adiante quando forme abordadas as
estruturas de dados heterogneas.
A utilizao deste tipo de estrutura de dados recebe diversos nomes, com:
variveis indexadas, variveis compostas, variveis subscritas, arranjos, vetores,
matrizes, tabelas em memria ou arrays (do ingls). So vrios os nomes
encontrados na literatura voltada para o estudo de tcnicas de programao que
envolvem a utilizao das estruturas homogneas de dados. Por ns, sero definidas
como matrizes.
As matrizes (tabelas em memria) so tipo de dados que podem ser
"constitudos medida que se fazem necessrios , pois no sempre que os tipos
bsicos (real, inteiro, caractere ou lgico) e /ou variveis simples so suficiente para
representar a estrutura de dados utilizado em um programa.
!atriFes de uma &imenso ou /etores
Este tipo de estrutura em particular tambm denominado por alguns
profissionais como matrizes unidimensionais. Sua utilizao mais comum est
vinculada criao de tabelas. Caracteriza-se por ser definida uma nica varivel
dimensionada com um determinado tamanho. A dimenso de uma matriz constituida
por constantes inteiras e positivas. Os nomes dados s matrizes seguem as mesmas
regras de nomes utilizados para indicar as variveis simples.
Operaes 2Msiccas com !atriFes do ipo /etor
Uma matriz de uma dimenso ou vetor ser, neste trabalho, representada por
seu nome e seu tamanho (dimenso) entre colchetes, desta forma seria uma matriz
MD [1..n], onde MD o seu nome e possuindo uum tamanho de 1 a n. sto significa
que podero ser armazenados em MD at um valor definido pelo programador.
Perceba que na utilizao de variveis simples existe uma regra: uma varivel pode
conter apenas um valor por vez. No caso das matrizes, esta podero armazenar mais
um valor por vez. No caso das matrizes, esta podero armazenar mais de um valor por
vez, pos so dimensionadas, exatamente para este fim. Desta forma poder-se
manipular uma quantidade maior de informao com pouco trabalho de
processamento. Deve-se apenas considerar que com relao manipulao dos
elementos de uma matriz, eles ocorrero de forma individualizada, pois no possvel
efetuar a manipulao de todos os elementos do conjunto ao mesmo tempo.
Atribuio de uma !atriF
Anteriormente, foram utilizadas vrias instrues em portugus estruturado
para poder se definir e montar um programa. No caso da utilizao de matrizes, ser
definida a instruo conNunto que indicar em portugus estruturado a utilizao de
uma matriz, tendo como sintaxe: Varivel : conNunto [<dimenso>] de <tipo de
dado>. Onde <dimenso> ser a indicao dos valores inicial e final do tamanho do
vetor e <tipo de dado> se o vetor em questo ir utilizar valores reais, inteiros, lgicos
ou caracteres.
Leitura dos &ados de uma !atriF
A leitura de uma matriz processada passo a passo, um elemento por vez. A
instruo de leitura leia seuida da varivel mais o ndice. Abaixo, apresentado a
codificao em portuguol da leitura de 8 notas de 8 alunos, clculo da mdia e a
apresentao da mesma.
25
Pro;ra#a Media(T<r#a
Var
Md : conM<nto @$''NB de rea7
So#a" #edia : rea7
I : inteiro
Inicio
So#a <= E
Para I de $ ate N faHa
)eia -Md@IB.
So#a <= So#a / M@IB
&i#(Para
MKdia <= So#a 0 N
!8creFa -Media.
&i#'
$scrita dos &ados de uma !atriF
O processo de escrita de uma matriz bastante parecido com o processo de
leitura de seus elementos. Para esta ocorrncia dever ser utilizada a instruo
escreOa seguida da indicao da varivel e seu ndice. Supondo que aps a leitura
das 8 notas, houvesse a necessidade de apresent-las antes da apresentao do
valor da mdia. Abaixo exibido a codificao da escritados 8 alunos antes de ser
apresentado o clculo da mdia.
Pro;ra#a Media(T<r#a
Var
Md : conM<nto @$''NB de rea7
So#a" #edia : rea7
I : inteiro
Inicio
So#a <= E
Para I de $ ate N faHa
)eia -Md@IB.
So#a <= So#a / M@IB
&i#(Para
Para I de $ ate N faHa
!8creFa -Md@IB.
&i#(Para
MKdia <= So#a 0 N
!8creFa -Media.
&i#'
$xerccios de AprendiFagem
1) Desenvolver um programa que efetue a leitura de 10 elementos de uma matriz A
do tipo vetor. Construir uma matriz B de mesmo tipo, observando a seguinte lei de
formao: Se o valor do ndice for par, o valor dever ser multiplicado por 5, sendo
mpar dever ser somado por 5. Ao final mostrar os contedos das duas matrizes.
2) Desenvolver um programa que efetue a leitura de 5 elementos de uma matriz A do
tipo vetor. No final, apresente o total da soma de todos os elementos que sejam
mpares.
26
3) Ler duas matrizes A e B do tipo vetor com 20 elementos. Construir uma matriz C,
onde cada elemento de C a subtrao do elemento correspondente de A com B.
4) Ler 15 elementos de uma matriz A do tipo vetor. Construir uma matriz B de mesmo
tipo. Observando a seguinte lei de formao: "Todo elemento de B dever ser o
quadrado do elemento de A correspondente.
5) Ler uma matriz A do tipo vetor com 15 elementos. Construir uma matriz B de
mesmo tipo, sendo que cada elemento da matriz B seja o fatorial do elemento
correspondente da matriz
6) Ler duas matrizes A e B do tipo vetor com 15 elementos cada. Construir uma matriz
C, sendo esta a juno das duas outras matrizes. Desta forma, C dever Ter a
capacidade de armazenar 50 elementos.
7) Ler 20 elementos de uma matriz A tipo vetor e construir uma matriz B de mesma
dimenso com os mesmos elementos de A, sendo que estes devero estar
invertidos. Ou seja, o primeiro elemento de A passa a ser o ltimo elemento de B.
O segundo elemento de A passa a ser o penltimo de B e assim por diante.
27
28
!ARI+$S CO! !AIS &$ %!A &I!$'S#O
Anteriormente, voc teve contato com o uso de uma nica varivel indexada com
apenas uma dimenso (uma coluna e vrias linhas), quanto foi utilizado o exemplo
para efetuar o clculo da mdia geral das mdias dos oito alunos. A partir deste ponto,
sero apresentadas as tabelas com mais colunas, sendo assim teremos variveis no
sentido horizontal e vertical.
Com o conhecimento adquirido at este ponto, voc teria condies suficientes
para elaborar um programa que efetuasse a leitura das notas dos alunos, o clculo da
mdia de cada aluno e no final apresentar a mdia do grupo, utilizando-se de matrizes
unidemensionais. Porm, h de se condiderar que o trabalho seria grande, uma vez
que se necessitaria manter um controle de cada ndice em cada matriz para um
mesmo aluno.
Para facilitar o trabalho com estruturas deste porte que sero utilizadas matrizes
com mais dimenses. A mais comum a matriz de duas dimenses por se relacionar
diretamente com a utilizao de tabelas. Matrizes com mais de duas dimenses so
utilizadas com menos freqncia, mas podero ocorrer com momentos em que se
necessite trabalhar com um nmero maior de dimenses, estas sero fceis de serem
utilizadas se voc dominar bem a utilizao de uma matrz com duas dimenses.
Um importante aspecto a ser considerado que na manipulao de uma matriz
utilizada uma nica instruo de looping(enJuanto? para ou repita). No caso de
matrizes com mais dimenses, dever ser utilizado o nmero de loopings relativos ao
tamanho de sua dimenso. Desta forma, uma matriz de duas dimenses dever ser
controlada com dois loopings, sendo que de trs dimenses dever ser controlada por
trs loopings e assim por diante.
Em matrizes de mais uma dimenso os seus elementos sero tambm
manipulados de forma individualizada, sendo a referncia feita sempre atravs de dois
ndices: o primeiro para indicar a linha e o segundo para indicar a coluna. Desta forma,
TABELA[2,3], indica que est sendo feita uma referncia ao elemento armazenadona
linha 3 coluna 3. Pode-se considerar que uma matriz com mais de uma dimenso
tambm um vetor, sendo vlido para este tipo de matriz tudo o que j foi utilizado
anteriormente para as matrizes de uma dimenso.
Operaes 2Msicas com !atriFes de &uas &imenses
Uma matriz de das dimenses est sempre fazendo meno a linhas e colunas e
ser representada por seu nome e seu tamanho (dimenso) entre colchetes, desta
forma seria uma matriz de duas dimensesTABELA[1..8, 1..5], onde TABELA o seu
nome, possuindo um tamanho de 8 linhas (de 1 a 8) e 5 colunas (de 1 a 5), ou seja,
uma matriz de 8 por 5 (8X5). sto significa que podero ser armazenados em TABELA
at 40 elementos. A figura 8.1 apresenta a matriz TABELA com a indicao dos
endereos (posies) que podero ser utilizadas para armazenamento de seus
elementos.
Atribuio de uma !atriF
Uma matriz de duas dimenses ser atribuda pelas instruo conNunto j utilizada
para definir o uso de uma matriz de uma dimenso, sendo bastante parecidos em sua
referncia. A sintaze ser: VARAVEL : conNunto [<dimenso1: dimenso2>] de
<tipo de dado>, onde <dimenso1> e <dimenso2> sero indica do tamanho da
tabela e <tipo de dado> o tipo da matriz, que poder ser formada por valores reais,
inteiros, lgicos ou caracteres.
29
Leitura dos &ados de uma !atriF
A leitura de uma matriz de duas dimenses assim como as matrizes de uma
dimenso processada passo a passo, um elemento por vez, sendo utilizada a
instruo leia seguida da vairvel mais os seus ndices. A seguir apresentado a
codificao em portugus estruturado da leitura das 4 notas bimestrais de 8 alunos,
sem considerar o clculo da mdia.
Pro;ra#a )er(!7e#ento8
Var
Nota8 : co()to @$''N" $'',B de rea7
I" O : inteiro
Inicio
Para I de $ atK N faHa
Para O de $ atK , faHa
)eia-nota8@I"OB.
&i#(Para
&i#(Para
&i#'
$scrita dos &ados de uma !atriF
O precesso de escrita ser bastante parecido com o processo de leitura de seus
elementos. Supondo que aps a leitura das notas dos 8 alunos, houvesse a
necessidade de efetuar a apresentao das notas. Abaixo apresentado a
codificao em portugus estruturado da escrita das 4 notas dos 8 alunos.
Pro;ra#a )er(!7e#ento8
Var
Nota8 : co()to @$''N" $'',B de rea7
I" O : inteiro
Inicio
Para I de $ atK N faHa
Para O de $ atK , faHa
!8creFa-nota8@I"OB.
&i#(Para
&i#(Para
&i#'
$xerccios de AprendiFagem
1) Ler duas matrizes A e B, cada uma de duas dimenses com 5 linhas e 3 colunas.
Construir uma matriz C de mesma dimenso, onde C formada pela soma dos
elementos da matriz A com os elementos da matriz B.
30
$SR%%RA &$ &A&OS D$$ROG>'$AS
No tpicos anteriores, voc teve um contato com tcnicas de programao que
envolveram o uso de estruturas de dados homogneas, atravs da utilizao de
matrizes de uma e duas dimenses. Observou que somente foi possvel trabalhar com
um tipo de dado por matriz. No momento em que se precisou trabalhar com dois tipos
de dados diferentes, foi necessria a utilizao tambm de duas matrizes, uma de
cada tipo.
$strutura de um Registro
Agora voc ter contato com a utilizao da principal estrutura de dados, o registro,
a qual consiste em trabalhar vrios dados de tipos diferentes (os campos) em uma
mesma estrutura. Por esta razo, este tipo de dado considerado heterogneo.
Atribuio de Registros
Os tipos registro devem ser declarados ou atribudos antes da variveis, pois
poder ocorrer a necessidade de se declarar uma varivel com o tipo registro
anteriormente atribudo.
Para se declarar um tipo registro em portugus estruturado dever ser utilizada a
instruo tipo em conjunto com a instruo registro;;;Him6registro, conforme a
sintaxe indicada abaixo.
Tipo
<identificador> = %egist%o
<7i8ta do8 ca#po8 e 8e<8 tipo8>
!i"'%egist%o
*$%
<FariGFe7> : <identificador>
Onde indentificador o nome do tipo registro em caracteres maisculos, em itlico
como as variveis, e lista dos campos e seus tipos a relao de variveis que sero
usadas como campos, bem como o seu tipo de estrutura de dados, podendo ser: real,
inteiro, lgico ou caractere.
Aps a instruo Oar, dever ser indicada a varivel tipo registro e a declarao do
seu tipo de acordo com um identificador definido anteriormente. Perceba que a
instruo tipo dever ser utilizada antes da instruo Oar, pois ao definir um tipo de
varivel, pode-se fazer uso deste tipo definido.
Tomando como exemplo a proposta de se criar um registro denominado ALUNO,
cujos campos so NOME, NOTA1, NOTA2, NOTA3 e NOTA4, este seria assim
declarado:
31
tipo
CA(A)1NO = %egist%o
NOM! : caractere
NOTA$ : rea7
NOTA* : rea7
NOTA+ : rea7
NOTA, : rea7
!i"'%egist%o
*$%
A)1NO : CA(A)1NO
Observe que especificado um registro denominado CAD_ALUNO, o qual um
conjunto de dados heterogneos (um campo tipo caractere e quatro do tipo real).
Desta forma possvel guardar em uma mesma estrutura vrios tipos diferentes de
dados.
A ttulo de comparao, pode-se dizer que um tipo registro tambm um vetor
(matriz de uma dimenso). Pois tem-se a varivel ALUNO do tipo cad_aluno como um
vetor com os ndices NOME, NOTA1, NOTA2, NOTA3 e NOTA4.
Leitura de Registros
A leitura de um registro efetuada com a instruo leia seguida do nome da
varivel registro e seu campo correspondente separado por um caractere ". ponto.
Pro;ra#a )eit<ra
tipo
CA(A)1NO = %egist%o
NOM! : caractere
NOTA$ : rea7
NOTA* : rea7
NOTA+ : rea7
NOTA, : rea7
!i"'%egist%o
*$%
A)1NO : CA(A)1NO
I+cio
)eia -A7<no'No#e.
)eia -A7<no'Nota$.
)eia -A7<no'Nota*.
)eia -A7<no'Nota+.
)eia -A7<no'Nota,.
,i"
32
$scrita de Registros
O processo de escrita de um registro feito com a instruo escreOa de forma
semelhante ao processo de leitura.
Programa $scrita
tipo
CA(A)1NO = %egist%o
NOM! : caractere
NOTA$ : rea7
NOTA* : rea7
NOTA+ : rea7
NOTA, : rea7
!i"'%egist%o
*$%
A)1NO : CA(A)1NO
I+cio
!8creFa -A7<no'No#e.
!8creFa -A7<no'Nota$.
!8creFa -A7<no'Nota*.
!8creFa -A7<no'Nota+.
!8creFa -A7<no'Nota,.
,i"
$strutura de um Registro de ConNuntos
No tpico anterior, foi apresentado o conceito de se trabalhar com um registro. No
ponto de aprendizado em que estamos, podemos at jurar que voc esteja
perguntando: Ser que no possvel definir um vetor ou mesmo uma matriz dentro de
um registro, para no ser necessrio utilizar somente os tipos primitivos de dados? sto
realmente possvel. Considere ainda o exemplo do registro ALUNO, onde temos o
campo NOME tipo caractere e mais quatro campos tipo real para o armazenamento de
duas notas sendo, NOTA1, NOTA2, NOTA3 e NOTA4. Veja que se pode definir um
vetor chamado NOTA com quatro
ndices, uma para cada nota.
Atribuio de Registros de ConNuntos
Tomando como exemplo a proposta de se criar um registro denominado ALUNO,
cujas notas sero informadas em um vetor, este seria bastante declarado:
tipo
?IM!STR! = co()o @$'',B de rea7
CA(A)1NO = %egist%o
NOM! : caractere
NOTA : ?IM!STR!
!i"'%egist%o
Observe que ao ser especificado o registro CAD_ALUNO, existe nele um campo
chamado NOTA do tipo bimestre, onde bimestre a especificao de um tipo de
33
conjunto matricial de um nica dimenso com capacidade para quatro elementos. Veja
que o tipo de bimestre foi anteriormente definido, pois se caracteriza por um tipo
criado, assim como o tipo cad_aluno atribudo varivel de registro ALUNO.
Leitura de Registro de ConNuntos
A leitura de um registro de conjunto efetuada com a instruo leia geralmente
dentro de um lao de repitao. Assim sendo, observe o cdigo abaixo:
Programa Leitura
tipo
?IM!STR! = co()to @$'',B de %e$l
CA(A)1NO = %egist%o
NOM! : c$%$cte%e
NOTA : -i"est%e
!i"'%egist%o
*$%
A)1NO : CAD'AL.NO
I : itei%o
Iicio
)eia -A)1NO'NOM!.
Para de I ate , faHa
)eia -A)1NO'NOTA@IB.
,i"'p$%$
,i"/
$strutura de um conNunto de Registros
Com as tcnicas de programao anteriormente apresentadas, passou-se a Ter
uma mobilidade bastante grande , podendo-se trabalhar de uma forma mais adequada
com diversos problemas, principalmente os que envolvem a utilizao de dados
heterogneos, facilitando a construo de programas mais eficientes. Porm, os
programas apresentados at aqui com a utilizao de registros, s fizeram meno
leitura e escrita de um nico registro.
Neste momento, voc ter contato com o conjunto de registros que permite a
construo de programas, onde possvel se fazer a entrada, processamento e sada
de diversos registros.
Atribuio de ConNunto de Registros
Para se declarar un conjunto de registros necessrio em primeiro lugar, possuir a
definio de um registro, ou seja necessrio Ter um formato de um nico registro
para ento definir o nmero de registros que ser utilizado pelo programa. Para
exemplificar o que est sendo exposto, considere que voc dever fazer um programa
que leia o nome e as quatro notas escolares de 8 alunos. sto j e familiar. Veja a
seguir a codificao do conjunto de registros para os oito alunos:
34
Tipo
?IM!STR! = co()to @$'',B de %e$l
CA(A)1NO = %egist%o
NOM! : c$%$cte%e
NOTA: ?IM!STR!
,i"'%egist%o
0$%
A)1NO: co()to 11//23 de CA(A)1NO
Observe que aps a instruo Oar? indicada a varivel de registros ALUNO, sendo
esta um conjunto de 8 registros do tipo Cad_Aluno, que por sua vez Bimestre um
conjunto de quatro valores reais.
Leitura de ConNunto de Registros
A leitura de forma semelhante s anteriores. No entanto,m sero utilizadas dois
laos, pois alm de controlar a entrada das quatro notas de cada aluno, tem-se que
controlar a entrada de 8 alunos. Esta estrutura bastante similar a uma matriz de duas
dimenses. Assim sendo, observe o cdigo em portugus estruturado:
#%og%$"$ )!IT1RA
Tipo
?IM!STR! = co()to @$'',B de %e$l
CA(A)1NO = %egist%o
NOM! : c$%$cte%e
NOTA: ?IM!STR!
,i"'%egist%o
0$%
A)1NO: co()to 11//23 de CA(A)1NO
I" O : inteiro
i+cio
Para O de $ atK N faHa
)eia -A)1NO@OB'NOM!.
Para I de $ atK , faHa
)eia -A)1NO@OB'NOM!@IB.
&i#(para
&i#(para
,i"
Veja que o looping da varivel J controla o nmero de alunos da turma, no caso 8, e o
looping da varivel controla o nmero de notas, at 4 por aluno. Para cada
movimentao de mais uma varivel J existem quatro movimentaes na varivel .
35
$scrita de ConNunto de Registros
O processo de escrita de um conjunto de registros similar aos modos anteriores,
j estudados. Assim sendo, veja o cdigo:
Programa LETURA
ipo
BMESTRE = conNunto [1..4] de real
CAD_ALUNO = registro
NOME : caractere
NOTA: BMESTRE
1im6registro
/ar
ALUNO: conNunto PA;;QR de CAD_ALUNO
, J : inteiro
incio
Para J de 1 at 8 faa
Escreva (ALUNO[J].NOME)
Para de 1 at 4 faa
Escreva (ALUNO[J].NOME[])
Fim_para
Fim_para
1im
PROGRA!A"#O !O&%LAR
Ser estudado a partir deste ponto, a aplicao de subrotinas em algoritmos,
tambm conhecidas pela denominao mdulos ou subalgoritmos. Na realidade, no
importa como so chamadas, o que importa a forma como funcionam e como devem
ser aplicadas em um programa, e isto que voc aprender.
Neste captulo, ser introduzido o conceito da criao estruturada de programas,
pois para escrever um programa de computador necessita-se de estudo
(levamtamento de todas as necessidades e detalhes do que dever ser feito) e
metodologia (regras bsicas que devero ser seguidas). Sem a aplicao de mtodos
no ser possvel resolver grandes problemas, quanto muito, pequenos problemas.
As Sub3Rotinas
No geral, problemas complexos exigem algoritmos complexos. Mas sempre
possvel dividir um problema grande em problemas menores. Desta forma, cada parte
menor tem um algoritmo mais simples, e estre trecho menor que chamado de sub-
rotina. Uma sub-rotina na verdade, um programa, e sendo um programa poder
efetuar diversas operaes computacionais (entrada, processamento e sada) e
dever ser tratada como foram os programas projetados at este momento. As sub-
rotinas so utilizadas na diviso de algoritmos complexos, permitindo assim possuir a
modularizao de um determinado problema, considerado grande e de difcil soluo.
Ao se trabalhar com esta tcnica, pode-se deparar com a necessidade de se dividir
uma sub-rotina em outras tantas quantas forem necessrias, buscando uma soluo
36
mais simples de uma parte do problema maior. O processo de dividir sub-rotinas em
outras denominado Mtodo de Refinamento Sucessivo.
Procedimentos
Um procedimento um bloco de programa, contendo incio e fim e ser identificado
por um nome, atravs do qual ser referenciado em qualquer parte do programa
principal ou do programa chamador da rotina. Quando uma sub-rotina chamada por
um programa, ela executada e ao seu trmino o controle de processamento retorna
automaticamente para a primeira linha de instruo aps a linha que efetuou a
chamada da sub-rotina.
#%ocedi"eto <no#e do procedi#ento>
*$%
<FariGFei8>
i+cio
<in8tr<HIe8>
!i"
A melhor maneira de se entender como trabalhar com sub-rotinas fazer a sua
aplicao em um programa mais complexo. Para tanto, imagne o seguinte problema:
$xerccio de AprendiFagem
Cria um programa calculadora que apresente um menu de selees no programa
principal. Este menu dever dar ao usurio a possibilidade de escolher uma entre
quadra operaes aritmticas. Escolhida a opo desejada, dever ser solicitada a
entrada de dois nmeros, e processada a operao dever ser exibido o resultado.
Note que este programa dever ser um conjunto de 5 rotinas, uma principal e 4
secundrias. A rotina principal efetuar o controle sobre as 4 rotinas secundrias, que
por sua vez pediro a leitura de dois valores, faro a operao e apresentaro o
resultado obtido. Observe agora a codificao:
37
Pro;ra#a ca7c<7adora
Var
Opcao : caractere
{8<PQrotina8 de cG7c<7o8%
procedi#ento ROTSOMA
Far
r" a" P : rea7
inRcio
!8creFa -5Rotina de So#a6.
!8creFa -5!ntre <# Fa7or para A: 5.
)eia-A.
!8creFa -5!ntre <# Fa7or para ?:6.
)eia-?.
R <= A / ?
!8creFa -5A 8o#a de A co# ? K = 5" R.
&i#
procedi#ento ROTSS1?TRACAO
Far
r" a" P : rea7
inRcio
!8creFa -5Rotina de S<PtraHSo6.
!8creFa -5!ntre <# Fa7or para A: 5.
)eia-A.
!8creFa -5!ntre <# Fa7or para ?:6.
)eia-?.
R <= A Q ?
!8creFa -5A 8<PtraHSo de A co# ? K = 5" R.
&i#
procedi#ento ROTM1)TIP)ICACAO
Far
r" a" P : rea7
inRcio
!8creFa -5Rotina de M<7tip7icaHSo6.
!8creFa -5!ntre <# Fa7or para A: 5.
)eia-A.
!8creFa -5!ntre <# Fa7or para ?:6.
)eia-?.
R <= A 3 ?
!8creFa -5A #<7tip7icaHSo de A co# ? K = 5" R.
&i#
procedi#ento ROTIVISAO
Far
r" a" P : rea7
inRcio
!8creFa -5Rotina de iFi8So6.
!8creFa -5!ntre <# Fa7or para A: 5.
)eia-A.
!8creFa -5!ntre <# Fa7or para ?:6.
)eia-?.
R <= A 0 ?
38
!8creFa -5A iFi8So de A co# ? K = 5" R.
&i#
{Pro;ra#a Principa7%
inicio
opcao <= 5E6
en=<anto -opcao <>6A 5. faHa
e8creFa -5$ T AdiHSo6.
e8creFa -5* T S<PtraHSo6.
e8creFa -5+ T M<7tip7icaHSo6.
e8creFa -5, T iFi8So6.
e8creFa -5A T &i# do Pro;ra#a6.
e8creFa -5!8co7Ua <#a opHSo6.
7eia -opcao.
8e opcao = 5$6 entSo
rot8o#a
fi#(8e
8e opcao = 5*6 entSo
rot8<Ptracao
fi#(8e
8e opcao = 5+6 entSo
rot#<7tip7icacao
fi#(8e
8e opcao = 5,6 entSo
rotdiFi8ao
fi#(8e
fi#(en=<anto
fi#'
Obs9 Observe que em cada sub-rotina possuia suas prprias variveis, estas porm
s podem ser acessadas dentro de cada procedimento, neste caso so chamadas de
variveis locais. No caso da varivel opcao uma varivel global, pode ser acessada
em qualquer local do programa, tanto nos procedimentos como no programa principal.
1unes
Uma funo tambm um bloco de programa como so os procedimentos,
contendo incio e fim e sendo identificado por um nome, atravs do qual tambm ser
referenciada em qualquer parte do programa principal. Uma sub-rotina de funo na
verdade muito parecida com uma sub-rotina de procedimento. A sintaxe em portugus
estruturado ser tambm idntica ao estudo anterior. Observe a seguir, o cdigo em
portugus estruturado de uma funo.
Portugus Estruturado
,)o <no#e da f<nHSo> -parV#etro8. : <tipo da f<nHSo>
0$%
<FariGFei8>
i+cio
<in8tr<HIe8>
!i"/
39
A sua principal diferena est no fato de uma funo retornar um determinado valor,
que retornado no prprio nome da funo. Quando se diz valor, devem ser levados
em considerao os valores numricos, lgicos ou literais (caracteres).
Voc deve ter observado a presena de um item na sintaxe da funo, que so os
parmetros, que tanto podem ser referenciados nos procedimentos, mas vejamos sua
utilidade.
s parmetros tm por finalidade servir como um ponto de comunicao
bidirecional entre uma sub-rotina e o programa principal ou com uma outra sub-rotina
hierarquicamente de nvel mais alto. Desta forma, possvel passar valores de uma
sub-rotina ou rotina chamadora outra sub-rotina e vice-versa, atravs do uso de
parmetros que podero ser formais ou reais.
Sero considerados parmetros formais quando forem declarados atravs de
variveis juntamente com a identificao do nome da sub-rotina, os quais sero
tratados exatamente da mesma forma que so tratadas as variveis globais ou locais.
Sero considerados parmetros Reais quando estes substiturem os parmetros
formais, quando a utilizao da sub-rotina por um programa principal ou por uma rotina
chamadora.
40
%tiliFao de 1unes
Criaremos uma funo que calcule a raiz cbica de um determinado nmero
inserido pelo usurio. Observe o Programa:
Pro;ra#a RaiW(C<Pica
Var
I : Inteiro
&<nHSo C<Po-N. : Rea7
Inicio
C<Po <= N 3 N 3 N
&i#
Inicio
)eia -I.
!8creFa-C<Po-I..
&i#'
Observe que neste caso o parmetro formal foi a varivel " N , enquanto o
parmetro real foi a varivel " .
41