FELIPE DENIS M. DE OLIVEIRA - novastecnologias.net · 13.1 Variáveis Indexadas...
Embed Size (px)
Transcript of FELIPE DENIS M. DE OLIVEIRA - novastecnologias.net · 13.1 Variáveis Indexadas...
ALGORITMO E PROGRAMAO
FELIPE DENIS M. DE OLIVEIRA
Natal / RN / BRASIL E-Mail : [email protected]
ndice
1. Algoritmos _____________________________________________________________________ 1
2. Fases de um Algoritmo ___________________________________________________________ 1
3. Formas de Representao de Algoritmos: ___________________________________________ 2
4. COMENTRIOS _______________________________________________________________ 3
5. Estrutura de Algoritmos __________________________________________________________ 4
6. Tipos de Dados __________________________________________________________________ 4
6.1 Constantes valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa. _________________________________________________________________________ 4
7. Variveis _______________________________________________________________________ 5
7.1 Formao de Variveis ou Indentificadores ________________________________________ 5
7.2 Tipos de Variveis ____________________________________________________________ 5
8. Declarao de Variveis __________________________________________________________ 5
8.1 Atribuio de valores s variveis _______________________________________________ 6
9. Operadores _____________________________________________________________________ 8
9.1 Operadores matemticos _______________________________________________________ 8
9.2 Operadores Lgicos __________________________________________________________ 8
10. Comandos de Entrada e Sada __________________________________________________ 10
11. Processos de Repetio e Seleo (Laos) _________________________________________ 11
11.1 Estrutura de Repetio ENQUANTO-FAA _______________________________________ 11
11.2 Estrutura de repetio REPITA-AT ( Repeat Until) ________________________________ 12
11.3 Estrutura de repetio PARA-FAA _____________________________________________ 13
12. Estrutura de seleo (condicionais) ______________________________________________ 14
12.1 Estrutura SEENTOSENO _______________________________________________ 14
12.2 Estrutura CASO _____________________________________________________________ 15
13. Variveis Compostas Homogneas ______________________________________________ 17
13.1 Variveis Indexadas Unidimensionais(Vetores) ____________________________________ 18
13.2 Variveis Indexadas Bidimensionais(Matrizes) ____________________________________ 19
14. Programao Modular ________________________________________________________ 23
1144..22.. EEssqquueemmaass ddee MMoodduullaarriizzaaoo ____________________________________________________ 23
16. ARQUIVOS ____________________________________________________________________ 29
Algoritmos e Programao
Prof. Felipe Denis M. de Oliveira Pgina 1
1. Algoritmos
O que : Seqncia ordenada, finita de operaes bem definidas e eficazes que, quando
executadas sobre dados convenientes, produz a soluo de um dado problema. Programa: Algoritmo escrito numa linguagem que o computador possa executar direta
ou indiretamente. Linguagem de Programao: Conjunto de instrues e regras utilizadas para se
escrever programas, a partir dos algoritmos. As linguagens de Programao so classificadas da seguinte forma:
- Linguagem de Mquina: instrues representadas por zeros e uns (0, 1 => BIT) - Linguagem Assembly: instrues representadas por mnemnicos - Linguagem de Alto Nvel: instrues representadas por palavras de uma linguagem
comum. Algoritmo no a soluo de um problema, pois, se assim fosse, cada problema teria um nico algoritmo. Algoritmo um caminho para a soluo de um problema, e em geral, os caminhos que levam a uma soluo so muitas. O aprendizado de algoritmos no se consegue a no ser atravs de muitos exerccios. Algoritmos no se aprende: - Copiando Algoritmos - Estudando Algoritmos Algoritmos s se aprendem: - Construindo Algoritmos - Testando Algoritmos
2. Fases de um Algoritmo
Quando temos um problema e vamos utilizar um computador para resolv-lo inevitavelmente temos que passar pelas seguintes etapas: a) Definir o problema. b) Realizar um estudo da situao atual e verificar quais a(s) forma(s) de resolver o problema.
c) Terminada a fase de estudo, utilizar uma linguagem de programao para escrever o programa que dever a princpio, resolver o problema. d) Analisar junto aos usurios se o problema foi resolvido. Se a soluo no foi encontrada, dever ser retornado para a fase de estudo para descobrir onde est a falha.
Estas so de forma bem geral, as etapas que um programador passa, desde a apresentao do problema at a sua efetiva soluo. Iremos, neste curso, nos ater as etapas de estudo, tambm chamada de anlise, e a etapa de programao. Mas antes vamos definir o seguinte conceito: Programar um computador consiste em elaborar um conjunto finito de instrues, reconhecidas pela mquina, de forma que o computador execute estas instrues.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 2
Estas instrues possuem regras e uma Sintaxe prpria, como uma linguagem tipo portugus ou ingls, sendo isto chamadas de linguagem de computador. No mundo computacional existe uma grande variedade de linguagens: Pascal, C, C++, Cobol, Fortran, etc.
3. Formas de Representao de Algoritmos:
- Descrio Narrativa linguagem natural - Fluxograma representao grfica onde formas geomtricas diferentes implicam
em aes distintas. - Pseudocdigo usa linguagem natural normalmente dirigida para uma dada
linguagem de programao. Ex: Fortran, Cobol, Pascal, C... Ns utilizaremos o estilo de pseudocdigo baseado em Pascal e C ANSI.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 3
4. COMENTRIOS
Servem para realizar uma descrio de algum item do algoritmo ao qual no venha a ser utilizado como linha ativa no cdigo, ou seja, serve como auxlio ao programador para enfatizar algum trecho do cdigo do algoritmo que seja relevante para o mesmo. Pode ser expresso de duas formas:
Comentrio de uma linha: Inicia a linha com //, seguido do comentrio. Pode tambm ser utilizado no final de uma instruo ou estrutura, mas nunca no meio ou no incio dela, sob risco de provocar falhas ou anular a linha de cdigo;
Comentrio de mltiplas linhas: Inicia-se com /*, seguido do comentrio, em uma ou mais linhas, finalizando com */.
OBS: Os caracteres utilizados para criao dos comentrios podem variar dependendo da linguagem de programao. No item 5, um exemplo da insero de comentrios em um algoritmo.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 4
5. Estrutura de Algoritmos
Antes de utilizarmos uma linguagem de computador, necessrio organizar as aes a serem tomadas pela mquina de forma organizada e lgica, sem nos atermos as regras rgidas da Sintaxe de uma linguagem. Para isto utilizaremos uma forma de escrever tais aes, conhecida como algoritmo, ou pseudo-cdigo. Para facilitar o entendimento da disciplina, vamos utilizar a linguagem de programao Pascal para traduzir o algoritmo. Os algoritmos tero a seguinte estrutura:
ALGORITMO....: Nome_do_arquivo.alg /*AUTOR........: nome do autor DATA.........: data automtica do sistema DESCRIO....: dizer, aqui, o que o algoritmo ir fazer */ Algoritmo Novo //Declarao das variveis incio //Inicializao das variveis //Cdigo do Algoritmo fim
6. Tipos de Dados
Os algoritmos destinados a resolver um problema no computador manipulam, basicamente, dois tipos de informao:
- Instrues (comandos): leitura, gravao, operaes, etc. - Dados (Constantes, variveis): valores a serem processados.
6.1 Constantes valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa.
6.1.1 Numrica (Inteira, Real,...) um nmero representado no sistema decimal podendo conter ou no uma parte decimal (aps o ponto).
Ex. 96; 0; -99 -> inteiros 0.0; 85.6; -9.55 -> reais Lgica usada para representar dois nicos valores possveis: Verdadeiro ou Falso
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 5
Ex: .V.; 1; Sim -> Verdadeiro .F.; 0; No -> Falso Caractere representa, apenas, um caractere. Ex: J; 1; 3;
Literal ou String seqncia de caracteres (letras, nmeros ou sinais que o computador consegue processar), tambm chamada de String de Caracteres ou String. Ex: UFRN; 133; 2001.
7. Variveis
O computador possui uma rea de armazenamento conhecida como memria. Todas as informaes existentes no computador esto ou na memria primria ( memria RAM ), ou na memria secundria ( discos, fitas, CD-ROM etc ). Ns iremos trabalhar, neste curso, somente com a memria primria, especificamente com as informaes armazenadas na RAM ( memria de acesso aleatrio ). Podemos dizer que uma varivel uma posio de memria, representada por um Nome simblico ( atribudo pelo usurio ), a qual contm, num dado instante, uma informao.
7.1 Formao de Variveis ou Indentificadores
Uma varivel formada por uma letra ou ento por uma letra seguida de letras ou dgitos. No permitido o uso de espaos em branco ou de qualquer outro caractere, que no seja letra ou dgito, na formao de um identificador. Na formao do nome da varivel de um nome significativo, para que se possa ter idia do seu contedo sem abri-la. Se utilizar palavras para compor o nome da varivel utilize o _ underline para separar as palavras. Resumindo, uma varivel possui Nome, Tipo e Contedo.
7.2 Tipos de Variveis
- Inteiro - Real - Caractere - String - Lgico
8. Declarao de Variveis
Para declarar uma ou mais variveis, basta colocarmos o nome da varivel, seguido do seu tipo, separando as duas partes pelo sinal de dois pontos (:). Abaixo segue exemplo de algumas definies de variveis:
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 6
a) ALGORITMO Teste VARIVEIS Palavra : String; INICIO FIM. b) ALGORITMO Teste; VARIVEIS Letra, Caracter: Caractere; INICIO FIM. c) ALGORITMO Teste; VARIVEIS Letra, Caracter: Caractere; Nmero: Inteiro; INICIO FIM. Obs.: Os nomes dados as variveis no podem ser os mesmos nomes de palavras reservadas das linguagens de programao ou da prpria estrutura do algoritmo, tais do Pascal, tais como Incio, Fim, PROGRAM, BEGIN, END, VER, etc
8.1 Atribuio de valores s variveis
Quando definimos uma varivel natural atribuirmos a ela uma informao. Uma das formas de colocar um valor dentro de uma varivel, conseqentemente colocado este dado na memria do computador, atravs da atribuio direta, do valor desejado que a varivel armazena. Para isto utilizaremos o smbolo = , que significa: recebe, ou seja, a posio, de memria que uma varivel representa, receber uma informao, a qual ser armazenada no interior desta varivel. Exemplo: ALGORITMO Teste VARIVEIS Numero: INTEIRO; INICIO Nmero = 10; FIM O Exemplo acima nos informa que: a) Foi definido uma varivel, a qual demos o Nome de Numero, e informamos que esta varivel, ou posio de memria, s poder aceitar dados, que sejam numricos tipo inteiro . b) Atribumos varivel Numero o valor 10
8.1.1 Exerccios 0: 1) Dar o tipo de cada uma das constantes
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 7
a) 613 b) 613.0 c) -613 d) 613 e) 3.012 * 1015 f) 17*1012 g) 28.3 * 10 -23 h) Fim de Questo i) 1
2) Faa um PROGRAMA para atribuir a variveis as seguintes informaes:
a) 12345 b) 123456 c) -1122 d) 10 e) VERDADE f) 12345605
3) No seguinte Algoritmo existe algum erro? Onde? ALGORITMO Teste VARIVEIS Maria : String; idade : INTEIRO; letra : CARACTER; Maria : REAL; INICIO idade = 23; idade = 678; idade = letra; letra = ABC; letra = A; letra = 2; FIM. 4) Qual a diferena existente nas seguintes atribuies?
a) Letra = A Nome = Joo b) Letra = A Nome = Joo
5) correto definir uma varivel como sendo Caracter e atribuirmos a ela o valor: PEDRO? E se a varivel fosse definida como STRING, a mesma poderia receber um valor do tipo CARACTER? 6) Identifique os nomes de variveis vlidos com V e os invlidos com I. ( ) abc ( ) 3abc ( ) 123a ( ) a123 ( ) soma_1 ( ) ab-cd ( ) a_ ( ) sim ( ) Incio ( ) Windows ( ) %@!$_
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 8
9. Operadores
9.1 Operadores matemticos
Os operadores matemticos so os seguintes:
a) Adio : + b) Subtrao : - c) Multiplicao : * d) Diviso : / e) Diviso inteira : DIV (QUOCIENTE) f) Resto da diviso : MOD (RESTO) OBS: Varia de acordo com a linguagem!!!! g) Exponenciao : ** ou ^ OBS: Varia de acordo com a linguagem!!!! h) Igualdade : == OBS: Varia de acordo com a linguagem!!!! i) Diferena : != OBS: Varia de acordo com a linguagem!!!! j) Menor Igual : =
OBS: PRECENDNCIA DOS OPERADORES
OS PARNTESIS ( ) SEMPRE TERO PRECNCIA MXIMA EM RELAO A QUALQUER OUTRO OPERADOR
9.2 Operadores Lgicos
Os operadores lgicos, realizam as operaes da lgebra booleana. Os operadores so os seguintes:
a) AND (.E.) b) OR (.OU.) c) NOT (.NO.)
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 9
Exemplo: a) Operador .E. : V e V => Verdadeiro F e F => Falso F e V => Falso F e F => Falso b) Operador .OU. : V ou V => Verdadeiro V ou F => Verdadeiro F ou V => Verdadeiro F ou F => Falso c) Operador NO: No V => Falso No F => Verdadeiro
9.2.1 Exerccios 1 : 1) indique qual o resultado ser obtido das seguintes expresses:
a) 1 / 2 b) 1 DIV 2 c) 1 MOD 2 d) ( 200 DIV 10 ) MOD 4 e) 6 +19-23 f) 3.0* 5.0 +1 g) 1/4+2 h) 29.0/7+4 i) 3/6.0-7
2) Indique o resultado das seguintes expresses:
a) 2 > 3 b) ( 6 < 8 ) OR ( 3 > 7 ) c) NOT ( 2 < 3 )
3) Construa o algoritmo que calcule as seguintes expresses:
a) 2 + 3 * { 23 - 12 + [ { ( 123 / 34 ) + 10 } / 2 - 1 * ( 45 - 12 ) ] / 3 } b) ( 2 + [ 2 * 3 - ( 4 / 20 ) ] )/ (10 * { [ ( 7 * 3 ) - 2 ] * 3 })
Obs.: O operador + caso seja usado entre variveis do tipo Caractere ou STRING, causar uma ao conhecida por concatenao, ou seja, juntar os caracteres ou STRINGs usados na operao em uma s STRING.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 10
Exemplo: ALGORITMO Concatena VARIVEIS Letra1, Letra2 : CARACTER; Nome1, Nome2, Nome : STRING; INICIO Letra1 = D; Letra2 = a; Nome1 = Joao; Nome2 = Silva; Nome = Nome1 + Letra1 + Letra2 + Nome2; //OBS: varia, de acordo com a linguagem. FIM
As instrues acima resultaro no armazenamento do Nome Joo Da Silva na varivel rotulada de Nome.
10. Comandos de Entrada e Sada
O computador no uma mquina isolada, pois ele precisa se comunicar com o mundo exterior com vdeo, impressora, teclado, discos, fitas etc. Para realizar esta comunicao existem comandos que permitem que informaes sejam exibidas, por Exemplo, no vdeo, como tambm existem comandos que permitem que informaes sejam colocadas na memria do computador atravs do teclado do micro. Os comandos que iremos ver so os comandos LEIA ou LEIAL e ESCREVA ou ESCREVAL, respectivamente, comando de entrada e de Sada. Exemplo 1: Escrever um algoritmo para ler um valor numrico do teclado e atribu-lo a uma varivel do tipo numrica.
ALGORITMO LeNmero VARIVEIS Num : INTEIRO; INICIO LEIA(Num); FIM
O algoritmo acima, executar os seguintes comandos:
a) Define uma varivel rotulada Num, a qual s poder armazenar dados numricos inteiros, sendo que inicialmente o contedo desta varivel est indefinido.
b) interrompe o processamento at que uma informao seja digitada, seguida do pressionamento da tecla ENTER. Caso a informao digitada seja compatvel com o tipo (INTEIRO), este valor ser armazenado dentro da varivel Num.
Exemplo 2: Fazer um algoritmo para escrever no vdeo do PC uma mensagem qualquer.
ALGORITMO EscreveMsg INICIO ESCREVA (Alo Mundo); FIM
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 11
Obs.: A mensagem est entre aspas porque representa uma String de caracteres. perfeitamente possvel mandar escrever o contedo de variveis no vdeo. Desta forma, o Exemplo acima poderia ser escrito do seguinte modo:
ALGORITMO EscreveMsg VARIVEIS Msg: : STRING; INICIO Msg = Alo Mundo; ESCREVA (Msg); FIM
10.1.1 Exerccios 2: 1) Faa um algoritmo para ler as seguintes informaes de uma pessoa: Nome, Idade, Sexo, Peso, Altura, Profisso, Rua, Bairro, Cidade, Estado, CEP, Telefone. 2) Faa um algoritmo para ler a base e a altura de um tringulo. Em seguida, escreva a rea do mesmo. Obs.: rea = ( Base * Altura ) / 2 3) Faa um algoritmo que calcule a mdia aritmtica de 4 valores inteiros. 4) O preo de um automvel calculado pela soma do preo de fbrica com o preo dos impostos (45% do preo de fbrica) e a percentagem do revendedor (28% do preo de fbrica). Faa um algoritmo que leia o nome do automvel e o preo de fbrica e imprima o nome do automvel e o preo final.
11. Processos de Repetio e Seleo (Laos)
11.1 Estrutura de Repetio ENQUANTO-FAA
a) ALGORITMO
ALGORITMO ExEnquanto Incio ENQUANTO FAA Incio ; FIM Fim.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 12
Exemplo : Faa um algoritmo para ler e escrever o Nome de 20 pessoas.
ALGORITMO LeEscreve VARIVEIS Nome : STRING; Total : INTEIRO; INICIO Total = 0; ENQUANTO Total
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 13
Exemplo: Faa um ALGORITMO para ler e escrever o Nome de 20 pessoas.
ALGORITMO LeEscreve VARIVEIS Nome : STRING; Total : INTEIRO; INICIO Total = 0; REPITA LEIA(Nome); ESCREVA(Nome=,Nome); Total = Total + 1; AT Total >=20; FIM.
11.2.1 Exerccios 4: 1) Leia 20 valores reais e escreva o seu somatrio.
11.3 Estrutura de repetio PARA-FAA
ALGORITMO
PARA = At = PASSO FAA Incio
; Fim
Exemplo: Faa um algoritmo para ler e escrever o Nome de 20 pessoas.
ALGORITMO LeEscreve VARIVEIS Nome : STRING; Cont : INTEIRO; INICIO
PARA Cont = 1 ATE Cont = 20 PASSO 1 FACA Incio LEIA(Nome); ESCREVA(Nome); FIM FIM.
Obs.: a) A varivel de controle, no Exemplo acima a varivel Cont, automaticamente incrementada em um unidade, a partir do valor inicial ( 1 pelo Exemplo acima ), at que seja ultrapassado o limite final definido ( 20 no Exemplo acima ). Se quisssemos que o passo aumentasse ou diminusse, bastava acrescentar o valor desejado. Ex: PASSO -2, para decrementar o contador de 2.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 14
B) Quando existe a necessidade de interromper o processamento antes de ser alcanado o limite final definido para a estrutura, no dever ser usado a estrutura PARA-FAA, pela simples razo que a varivel de controle no deve ser alterada propositadamente pelo usurio. A alterao do contedo das variveis de controle do PARA-FAA so de inteira responsabilidade da prpria estrutura.
11.3.1 Exerccios 5: 1) Uma empresa possui 100 vendedores que ganham por comisso sobre cada produto vendido. Cada vendedor em um determinado ms vendeu X produtos, onde cada produto pode ou no ter preos iguais. A empresa deseja obter um relatrio com o Nome, o total de vendas e o valor a ser pago a cada vendedor. A comisso paga pela empresa de 30% sobre o valor de cada produto vendido. 2) Dado uma relao de 1000 nmeros em graus Clcius, faa um PROGRAMA que imprima o seguinte relatrio:
Graus Fahrenheit Graus ClciusXxxxxx xxxxxx
Obs.:
12. Estrutura de seleo (condicionais)
12.1 Estrutura SEENTOSENO
ALGORITMO
SE ENTO [SENO ] Colchete indica que o comando opcional FIMSE
( )3295
= FC
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 15
Exemplo: Dado dois valores A e B quaisquer, faa um algoritmo que imprima se A > B, ou A < B , ou A = B
ALGORITMO Maior VARIVEIS A,B : INTEIRO INICIO ESCREVA(Digite os valores A e B); SE A > B ENTO ESCREVA(A maior que B); SENO SE A < B ENTO ESCREVA(A menor que B); SENO ESCREVA(A igual a B); FIM
12.1.1 Exerccios 6: 1) Faa um algoritmo que leia os valores A, B, C e diga se a soma de A + B menor que C. 2) Faa um algoritmo que leia dois valores inteiros A e B se os valores forem iguais dever se somar os dois, caso contrrio multiplique A por B ao final do calculo atribuir o valor para uma varivel C. 3) Faa um algoritmo que leia o nome e as trs notas de uma disciplina de uma aluno e ao final escreva o nome do aluno, sua mdia e se ele foi aprovado a mdia 8 (a mdia aritmtica). 4) Faa um algoritmo que leia 3 nmeros inteiros e imprima o menor deles. 5) Dado uma relao de 100 carros imprima quantos so da cor azul. Sendo para cada carro tem-se uma ficha contento o nome e a cor. 6) Dados trs valores distintos, fazer um algoritmo que, aps a leitura destes dados coloque-os em ordem crescente.
7) Suponha que para cada aluno de sua sala exista uma ficha contendo o nome e a idade do aluno. Supondo que exista 50 alunos, faa uma algoritmo que determine quantos alunos tem idade maior que 30. 8) Dado Nome e notas ( total de 6 ) de n alunos, faa um algoritmo que:
a) Imprima Nome e mdia dos alunos aprovados. Mdia > = 7.0. b) Imprima Nome e mdia dos alunos em recuperao. 5.0 >= Mdia
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 16
CASO DE < lista de constantes > : < comandos > ; < lista de constantes > : < comandos > ; ... < lista de constantes > : < comandos > ; seno < comandos > ; fim Onde: - < varivel de escolha > uma expresso do tipo inteira ou caractere ; - < lista de constantes > uma sequncia de constantes do tipo inteira ou caractere, separadas por vrgula (ao invs de uma constante possvel usar um intervalo de constantes, que consiste em duas constantes separadas por um par de pontos) A clusula seno no obrigatria, e os comandos associados a essa clusula sero executados somente se nenhuma outra opo do caso foi selecionada. Exemplo Algoritmo Menu Variveis opcao : inteiro ; Incio escreva (Entre com uma opcao: ); leia ( opcao ); // escolha da opo caso opcao de 1 : escreva( Voc escolheu a opo 1... ); 2 : escreva( Voc escolheu a opo 2... ); 3 : escreva( Voc escolheu a opo 3... ); seno escreva( Voc escolheu uma opo diferente de 1, 2, 3...); fim fim.
A estrutura CASO corresponde ao comando SE-ENTO mas de uma forma mais compacta nas operaes de seleo. Por Exemplo, seja a seguinte estrutura escrita com o comando SE-ENTO: Obs.: Por no aceitar valores do tipo REAL e STRING, a estrutura CASO no substitui totalmente a estrutura SE...SENO...ENTO.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 17
12.2.1 Exerccios 7: 1) Faa um algoritmo que leia um nmero que represente um determinado ms do ano.
Aps a leitura escreva por extenso qual o ms lido. Caso o nmero digitado no esteja na faixa de 1..12 escreva uma mensagem informando o usurio do erro da digitao.
13. Variveis Compostas Homogneas
Vimos, no incio deste curso, ser possvel dar um Nome para uma posio de memria, sendo que a esta ser associado um valor qualquer. Pois bem, acontece que, muitas vezes, esta forma de definio, ou melhor dizendo, de alocao de memria, no suficiente para resolver certos problemas computacionais. Imagine por Exemplo, como faramos para construir um algoritmo, para ler o Nome de N Pessoas e que imprimisse um relatrio destes mesmos nomes, mas ordenados alfabeticamente? No seria uma tarefa simples, haja visto no ser possvel determinar quantos nomes seriam lidos, mesmo que soubssemos o nmero de pessoas, digamos 1.000 pessoas, teramos que definir 1.000 variveis do tipo STRING, como mostrado abaixo:
ALGORITMO Loucura VARIVEIS Nome1, Nome2, Nome3, . . . Nome999, Nome1000: STRING; INICIO FIM
Considere o tamanho do algoritmo, e o trabalho braal necessrio para construi-lo. Isto s com 1.000 Nome, imagine agora 1.000.000 de pessoas. A construo deste algoritmo comearia a ficar invivel na pratica. Para resolver problemas como este, e outros, foi criado um novo conceito para alocao de memria sendo, desta forma, tambm criado uma nova maneira de definir variveis, a qual foi denominada de varivel indexada. Uma varivel indexada corresponde a uma seqncia de posies de memria, a qual daremos nico Nome, sendo que cada uma destas pode ser acessada atravs do que conhecemos por ndice. O ndice corresponde a um valor numrico ( exceto REAL ), ou a um valor caracter ( exceto STRING ). Cada uma das posies de memria de uma varivel indexada pode receber valores no decorrer do algoritmo como se fosse uma varivel comum, a nica diferena reside na Sintaxe de utilizao desta varivel.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 18
13.1 Variveis Indexadas Unidimensionais(Vetores)
Tambm conhecida por Vetor. Uma varivel unidimensional, como o prprio Nome j indica, possui apenas uma dimenso, sendo ser possvel definir variveis com quaisquer tipo de dados validos do Pascal. a) Definio:
ALGORITMO Define; VARIVEIS Nome[Tamanho] : ; INICIO ; FIM.
Exemplo Definir uma varivel indexada como sendo do tipo REAL, sendo que a mesma dever corresponder a 10 posies de memria.
ALGORITMO Exemplo VARIVEIS Vet10]: REAL; INICIO ; FIM.
No Exemplo acima, aps a definio da varivel, a memria estar como mostrado no esquema abaixo:
Vet
1 2 3 4 5 6 7 8 9 10 Os Valores numricos apresentados acima correspondem aos ndices da varivel. B) Atribuio [] = Valor; LEIA ([]);
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 19
Exemplo:
ALGORITMO Atribui VARIVEIS Nomes[20]: STRING; i : INTEIRO; Incio Nomes[1] = Joo da Silva; PARA i = 2 AT i = 20 PASSO 1 FACA LEIA(Nomes[i]); FIM.
13.1.1 Exerccios 8: 1) Faa um algoritmo que leia, via teclado, 200 valores do tipo inteiro e os guarde na memria. 2) Amplie o exerccio anterior emitindo um relatrio com todos os nmeros pares que voc leu. 3) Faa um algoritmo que determine qual o menor valor existente no vetor do exerccio nmero 1. 4) Faa um algoritmo que determine qual o maior valor existente no vetor do exerccio nmero 1. 5) Faa um algoritmo que leia 10 nomes e os guarde na memria. 6) Faa um algoritmo que leia um nome e o imprima ao contrrio 7) Faa um algoritmo que leia, Nome idade e sexo de N pessoas. Aps a leitura faa:
a) Imprima o Nome, idade e sexo das pessoas cuja idade seja maior que a idade da primeira pessoa. b) Imprima o Nome e idade de todas as mulheres. c) Imprima o Nome dos homens menores de 21 anos.
8) Faa uma algoritmo para ler 20 valores e que imprima os que so maiores que a mdia dos valores. 9) Faa um algoritmo para ler 50 valores inteiros. Aps imprima tais valores ordenados crescentemente. 10) Continuando o exerccio anterior, emita um relatrio com os valores ordenados decrescentemente.
13.2 Variveis Indexadas Bidimensionais(Matrizes)
Tambm conhecida por Matriz. Uma varivel Bidimensional, como o prprio Nome j indica, possui duas dimenses, sendo ser possvel definir variveis com quaisquer tipo de dados validos do Pascal. a11 a12 A = a21 a22 a31 a33
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 20
Matriz A 3x2 (Linha x Coluna) a) Definio:
ALGORITMO Define; VARIVEIS Nome[I][J]: ; INICIO ; FIM.
Exemplo Definir uma varivel indexada bidimensional para armazenar os dados de uma matriz 4 por 4 de nmeros do tipo REAL, sendo que a mesma dever corresponder no total a 16 posies de memria.
ALGORITMO Exemplo VARIVEIS MAT[4][4]: REAL; INICIO ; FIM.
No Exemplo acima, aps a definio da varivel, a memria estar como mostrado no esquema abaixo:
MAT
1,1 1,2 1,3 1,4 2,1 2,2 2,3 2,4 3,1 3,2 3,3 3,4 4,1 4,2 4,3 4,4
Os Valores numricos apresentados acima correspondem aos ndices da varivel. B) Atribuio [][] = Valor; LEIA ([][]); Exemplo:
ALGORITMO Atribui; VARIVEIS Nomes[4][4]: STRING I,J : INTEIRO; INCIO PARA I =1 ATE 4 PASSO 1 FACA PARA J = 1 ATE J = 4 PASSO 1 FAA LEIA (Nomes [ I][J] ); FIM.
13.2.1 Exerccios 9: 1) Faa um algoritmo para ler e imprimir uma matriz 2x4 de nmeros inteiros. 2) Dado uma matriz de ordem 3x3 faa um algoritmo que: a) Calcule a soma dos elementos da primeira coluna; b) Calcule o produto dos elementos da primeira linha;
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 21
c) Calcule a soma de todos os elementos da matriz; d) Calcule a soma do diagonal principal;
13.2.2 Algoritmo de Ordenao Bolha Bouble Sort
A ordenao bolha feita atravs de dois laos. O lao mais externo, da varivel j, determina qual elemento do vetor ser usado como base de comparao. O lao mais interno, da varivel i, compara cada item com o elemento base do primeiro lao e, quando encontrar um item menor que o de base, faz a troca.
O processo de troca usa uma varivel temporria para guardar o valor do menor valor, inicialmente; depois, pe na posio que antes era ocupada pelo item do lao mais interno, o valor do item de base; finalmente, atribui o valor armazenado na varivel temporria (o menor valor) ao elemento base. A troca esta concluda.
Veja, abaixo, o algoritmo completo, baseado em um vetor inicializado com 3 elementos sem ordenao definida:
ALGORITMO ORDENA_VETOR;
Variveis
Vet[3]: inteiro;
cont1,cont2,temp: inteiro;
Incio //inicializa o vetor vet[1] = 12; vet[2] =3; vet[3]= 8; cont1=0; cont2=0; temp = 0; para de cont1 = 1 at cont = 2 PASSO 1faa // fixa, incialmente, a bolha para cont2 = cont1+1 at cont2 = 3 PASSO 1faa //compara o 1o. elemento com o 2o. e assim sucessivamente... incio se vet[cont1] > vet [cont2] ento //se o 1o. elem. do vetor for maior que o 2o.... - 1a. passagem incio temp = vet[cont2]; // a varivel temporria recebe o menor elemento vet[cont2] = vet[cont1]; // o 2a. elemento recebe o valor do 1o., ou seja, do maior vet[cont1] = temp; //finalmente, o 1o. elemento recebe o nr. menor da var. temp fim fim // exibindo os valores escreval ("O Vetor ordenado : "); para cont1 = 1 at 3 faa escreva(vet[cont1]); fim.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 22
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 23
14. Programao Modular
A programao estruturada tem sua origem na programao modular. Grande parte da
filosofia estruturada construda sobre a filosofia de modularizao de dividir-para-conquistar. A programao modular utiliza essa filosofia para resolver o problema da complexidade do programa. Quando um programa dividido em partes independentes, fceis de serem entendidas, sua complexidade pode ser grandemente reduzida. A filosofia estruturada utiliza dividir-para-conquistar e amplia a filosofia de modularizao acrescentando os importantes conceitos de organizao hierrquica e nveis de abstrao para controlar as relaes intermodulares. A programao modular pode ser definida como a organizao de um programa em unidades independentes, chamadas mdulos, cujo comportamento controlado por um conjunto de regras. Suas metas so as seguintes:
Decompor um programa em partes independentes Dividir um problema complexo em problemas menores e mais simples Verificar a correo de um mdulo de programa, independentemente de sua
utilizao como uma unidade em um sistema maior
A modularizao pode ser aplicada em diferentes nveis. Pode ser usada para separar um problema em sistemas, um sistema em programas e um programa em mdulos.
14.1 Vantagens da Programao Modular
Os programas modulares so mais fceis de entender, porque a anlise do
programa pode ser feita atravs da anlise dos mdulos, um de cada vez. O teste do programa mais simples. Os erros do programa so mais fceis de serem isolados e corrigidos. As mudanas no programa podem ser limitadas a apenas alguns mdulos, em vez
de percutirem pela maior parte do cdigo do programa. Pode-se aumentar mais facilmente a eficincia do programa. Os mdulos do programa podem ser reutilizados como blocos de construo de
outros programas. O tempo de desenvolvimento do programa pode ser diminudo, porque diferentes
mdulos podem ser designados a diferentes programadores, que podem trabalhar com maior ou menor independncia.
1144..22.. EEssqquueemmaass ddee MMoodduullaarriizzaaoo
Dividir um programa em mdulos pode ser um meio muito eficaz de controlar a
complexidade. O problema que surge quanto melhor forma de dividir o programa. Mesmo para um programa simples, existem inmeras maneiras de dividi-lo em um conjunto de mdulos estruturados. A maneira escolhida pode afetar significativamente a complexidade do programa. Por exemplo, definir mdulos grandes demais ou pequenos demais aumenta a complexidade, os custos e a probabilidade de erros no programa.
A forma de dividir um programa em mdulos chamada de seu esquema de modularizao. Um grande objetivo da programao modular definir um bom esquema de modularizao (aquele que reflita rigorosamente os componentes do problema a ser programado, minimize a complexidade e possa ser fcil e eficazmente implantado). A seguir, veremos duas das principais tcnicas utilizadas para dividir um programa em mdulos, que so os procedimentos e as funes. Como estamos estudando algoritmos, vamos discriminar uma forma genrica utilizada na maioria das linguagens de programao.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 24
15. Procedimentos e Funes Ao falarmos de procedimentos e funes temos que, antes, falar sobre variveis locais e variveis globais; As variveis locais sero declaradas e utilizadas apenas no mdulo ao qual elas pertenam; variveis globais so declaradas sempre no mdulo principal do algoritmo e serviro para todos os mdulos subseqentes. At agora, tnhamos declarado variveis globais e no havamos percebido. As variveis globais no so destrudas nem inicializadas no decorrer do algoritmo, enquanto que as locais s vingam enquanto esto sendo utilizadas por aquele mdulo. Ao final do mesmo, elas so destrudas! 15.1. Implementao dos procedimentos Veja, abaixo, a forma genrica de se implementar um procedimento. Perceba que um procedimento pode ou no conter parmetros e que nunca retornam nada para o mdulo que o chamou. O procedimento deve ser sempre declarado antes do bloco do mdulo principal. Procedimento nome_do_ procedimento; Variveis
Local reservado as variveis locais; Incio
Instrues; . .
. Fim Exemplo supondo que quisssemos fazer a multiplicao de dois nmeros quaisquer atravs do procedimento Multiplica: ALGORITMO....: Multiplica_procedure.alg /*AUTOR........: DATA.........: 16/10/2006 DESCRIO....: */ Algoritmo mult; //criao do procedimento Procedimento Multiplica; Variveis num1, num2: real; //variveis locais incio escreval(Algoritmo Multiplica); escreva(Digite o primeiro e o segundo numeros, respectivamente); Leia(num1, num2); Escreval(O resultado da multiplicacao entre os 2 nmeros eh: , (num1*num2)); Fim //******** Mdulo principal ******* Variveis num1, num2: real; incio Multiplica(); //chama o procedimento Multiplica Leia; Fim.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 25
15.1.1. Criao de procedimentos com passagem de parmetros s vezes, torna-se necessria a passagem de parmetros para dentro de um procedimento. Neste caso, a maneira genrica de se fazer isso : Procedimento nome_do_ procedimento([lista de argumentos]: ); Variveis
Local reservado as variveis locais; Incio
Instrues; . .
. Fim Exemplo supondo que quisssemos fazer a multiplicao de dois nmeros quaisquer atravs do procedimento Multiplica(num1, num2): ALGORITMO....: Multiplica_procedure2.alg /*AUTOR........: DATA.........: 16/10/2006 DESCRIO....: */ Algoritmo mult; Procedimento Multiplica(numero1, numero2:real); incio Escreval(O resultado da multiplicacao entre os 2 nmeros eh: , (numero1*numero2)); Fim //******** MDULO PRINCIPAL ******** Variveis num1, num2: real; incio escreval(Algoritmo Multiplica); escreva(Digite o primeiro e o segundo numeros, respectivamente); Leia(num1, num2); Multiplica(num1, num2); Leia; Fim.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 26
15.2. Implementao das funes A implementao das funes tem uma grande semelhana com a implementao dos procedimentos. A nica diferena que, em uma funo, necessariamente temos de retornar um valor, mesmo que ele seja a instruo nulo do processador (NULL ou NILL) e toda a funo deve ser chamada no bloco principal atravs do comando Escreva ou Escreval (caracterstica exclusiva do Pascal). Funo nome_da_ funo(null:): ; Variveis
Local reservado as variveis locais; Incio
Instrues; . .
. retorne(); Fim Exemplo: ALGORITMO....: Multiplica_funcao.alg AUTOR........: DATA.........: 16/10/2006 DESCRIO....: */ Algoritmo Multiplica_funcao; Variveis //globais null: real; // varivel global criada Para nao receber argumentos em uma funo //criao da funo Multiplica funo Multiplica(null:real) : real ; // Definio da Funo que no possui argumentos Variveis //locais Num1, Num2 : real; incio escreval(Algoritmo Multiplica); escreva(Digite o primeiro e o segundo numeros, respectivamente); Leia(num1, num2); Escreva(O resultado da multiplicacao entre os 2 nmeros eh: ); retorne(Num1 * Num2); // equivale ao retorno da funo. Fim incio // *******Programa Principal******* Escreva (Multiplica()); //Chama a funo multiplica, sem parmetros Leia; Fim.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 27
15.2.1. Criao de funes com passagem de parmetros s vezes, torna-se necessria a passagem de parmetros para dentro de uma funo. Neste caso, a maneira genrica de se fazer isso : Procedimento nome_da_ funo(lista de argumentos:):; Variveis
Local reservado as variveis locais; Incio
Instrues; . .
. Fim Exemplo supondo que quisssemos fazer a multiplicao de dois nmeros quaisquer atravs da funo Multiplica(num1, num2): ALGORITMO....: Multiplica_funcao2.alg /*AUTOR........: DATA.........: 16/10/2006 DESCRIO....: */ Algoritmo mult_funcao2; Funo Multiplica(numero1, numero2: real):real; incio retorne(numero1* numero2); //retorna a multiplicao dos dois nmeros para quem chamou a funo Fim Variveis num1, num2: real; incio escreval(Algoritmo Multiplica); escreva(Digite o primeiro e o segundo numeros, respectivamente); Leia(num1, num2); escreval(O resultado da multiplicacao eh: , Multiplica(num1, num2)); Leia Fim.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 28
15.3. Funes recursivas Agora que sabemos como as funes funcionam, vamos examinar uma aplicao que pode ser dada s funes chamada recurso. Recurso ou recursividade uma situao em que uma funo chama a si mesma. Estas funes so conhecidas como funes recursivas. Vejamos um exemplo de funo recursiva que calcula fatoriais. Um fatorial uma funo matemtica. Por exemplo, o fatorial de 5 (escreve-se 5!) igual a 120 (5 x 4 x 3 x 2 x 1). Algoritmo funcao_fatorial; funo fatorial (n :integer ) : inteiro ; incio Se n > 1 ento retorne( n * fatorial (n-1)); seno retorne(1); Fim //********* mdulo principal ********* Variveis //locais num1: inteiro ; Incio Escreval('Algoritimo fatorial'); Escreva('Digite o numero a ser calculado seu fatorial'); Leia(num1); Escreval('O fatorial de ', num1, ' eh: ',fatorial(num1)); Fim.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 29
16. ARQUIVOS
Entende-se por arquivo uma coleo de dados, onde os mesmos possuem alguma relao entre si. Os arquivos podem ser de vrios tipos, os quais destacam-se:
A) Arquivos texto (oriundos de editores ou processadores de texto); B) Arquivos grficos (advindos de algum editor de imagens) C) Arquivos de dados (originados de um banco de dados) D) Arquivos de programas (executam um programa especfico)
Vamos nos deter, em nosso estudo, nos arquivos tipo A e C (de texto e de dados).
16.1. Operaes com arquivos Qualquer tipo de arquivo deve ser capaz de permitir as seguintes operaes:
A) Incluso de dados B) Alterao dos dados inseridos C) Excluso das informaes existentes D) Consulta de todos os dados nele armazenados
Porm, para realiza-las, necessrio a execuo das seguintes operaes:
Abertura (leitura) do arquivo, que permitir a realizao de alguma ou todas as operaes listadas acima;
Fechamento do arquivo, que evitar que falhas possam corromper o arquivo outrora aberto.
Cada linguagem possui a sua forma peculiar de lidar com arquivos
16.2. Tipo A: Arquivos texto
Apresentam-se, essencialmente, na forma de contedo string (editores de texto) ou binrio (processadores de texto). Para exemplificarmos as operaes de leitura e escrita em um arquivo texto, construmos os algoritmos abaixo. Note que o usurio entrar com o nome do arquivo desejado. Observe com ateno os novos comandos, e a lgica do algoritmo, que de simples entendimento. OBS: Na verdade, qualquer arquivo poder ser lido, porm, o nico a ser legvel na tela sero arquivos gerados por um editor de textos (ex: Bloco de Notas do Windows). 16.3. Tipo C: Arquivos de dados
Todos os aquivos que envolvem cadastro podem ser chamados de arquivos de dados. Eles so subdivididos em:
A) Registro: Conjunto de campos. Por exemplo, na criao de uma agenda de telefones, temos os campos:
Matrcula (inteiro) Nome (string, com 20 posies) Telefone (string, com 9 posies).
B) Campo: Conjunto de informaes pertinentes a ele. Os campos podem ser
comparados a variveis de memria, inclusive possuindo os mesmos tipos de dados.
Algoritmos e programao
Prof. Felipe Denis M. de Oliveira Pgina 30
CONSISTNCIA DE UM ARQUIVO DE DADOS Para que um arquivo de dados exista de maneira confivel, o mnimo de consistncia
deve ser imposta. As principais inconsistncias so as seguintes: Campos-chave duplicados (exemplo um funcionrio com o
mesmo CPF ou mesma matrcula) Excluso inadequada de registros (selecionar um registro para
excluir e o algoritmo excluir outro ou no excluir, simplesmente) Corrupo dos dados do arquivo (ocorre quando no se fecha
adequadamente o arquivo, falta ou interrupo rpida de energia ou quando um sistema ou programa provoca um erro)
As linguagens de programao atuais, por terem a possibilidade de trabalhar com gerenciadores de banco de dados, quase no enfrentam problemas de inconsistncia. No caso do Pascal, devemos tomar o mximo de cuidado para evitarmos as inconsistncias listadas acima, quando da criao e manipulao dos arquivos de dados.
17. BIBLIOGRAFIA CARVALHO, Srgio E. R. Introduo Programao com Pascal. Campus, 1985. COLLINS, William J. Programao Estruturada com Estudos de Casos em Pascal.
McGraw-Hill, 1988. FARRER, Harry et al Algoritmos Estruturados. Guanabara Dois, 1989. GRILLO, Maria Clia. A. Turbo Pascal 5.0 e 5.5. LTC, 1991. GUIMARES & LAJES Algoritmos e Estruturas de Dados. LTC, 1985. MANZANO, Jos Augusto N. G. & YAMATUMI, Wilson Y. Programando em Turbo
Pascal 7.0. rica. RINALDI, Roberto Turbo Pascal 7.0 Comandos e Funes. rica, 1993. SCHIMTZ, Eber A. & TELES, Antonio A. S. Pascal e Tcnicas de Programao.
LTC, 1985. TREMBLAY, Jean-Paul & BUNT, Richard B. Cincia dos computadores - Uma
abordagem Algortmica. Mcgraw-Hill, 1983. WIRTH, Niklaus Programao Sistemtica em Pascal. Campus, 1989. WORTMAN, Leon A. Programando em Turbo Pascal com Aplicaes. Campus,
1988.