(Parte 1 de 6)

Apostila de Algorítimos

Algoritmo não é a solução de um problema, pois, se assim fosse, cada problema teria um único algoritmo. Algoritmo é um caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução são muitas.O aprendizado de algoritmos não se consegue a não ser através de muitos exercícios.

Algoritmos não se aprende:- Copiando Algoritmos- Estudando Algoritmos

Algoritmos só se aprendem:- Construindo Algoritmos- Testando Algoritmos

1. Fases de um Algoritmo

Quando temos um problema e vamos utilizar um computador para resolve-lo inevitavelmente temos que passar pelas seguintes etapas:

a) Definir o problema.b) Realizar um estudo da situação atual e verificar quais a(s) forma(s) de resolver o problema.c) Terminada a fase de estudo, utilizar uma linguagem de programação para escrever o programa que deverá a princípio, resolver o problema.d) Analisar junto aos usuários se o problema foi resolvido. Se a solução não foi encontrada, deverá ser retornado para a fase de estudo para descobrir onde está a falha.

Estas são de forma bem geral, as etapas que um analista passa, desde a apresentação do problema até a sua efetiva solução. Iremos, neste curso, nos ater as etapas de estudo, também chamada de análise, e a etapa de programação. Mas antes vamos definir o seguinte conceito: Programar um computador consiste em elaborar um conjunto finito de instruções, reconhecidas pela máquina, de forma que o computador execute estas instruções. Estas instruções possuem regras e uma Sintaxe própria, como uma linguagem tipo português ou inglês, sendo isto chamadas de linguagem de computador.No mundo computacional existe uma grande variedade de linguagens Pascal, C, C++, Cobol, Fortran, etc… . Nós iremos enfocar uma delas, o Pascal.

2. Estrutura de Algoritmos

Antes de utilizarmos uma linguagem de computador, é necessário organizar as ações a serem tomadas pela máquina de forma organizada e lógica, sem nos atermos as regras rígidas da Sintaxe de uma linguagem. Para isto utilizaremos uma forma de escrever tais ações, conhecida como algoritmo, ou pseudo-código.Conceituando: Algoritmo consiste em um conjunto lógico e finito de ações ( instruções ) que resolvem um determinado problema.

Os algoritmos terão a seguinte estrutura:

ALGORITMO <Nome do algoritmo><definições>INÍCIO<Comandos>FIM

Em Pascal ficaria da seguinte forma:

PROGRAM <Nome do programa>;<definições>BEGIN<Comandos>;END.

3. Variáveis

O computador possui uma área de armazenamento conhecida como memória. Todas as informações existentes no computador estão ou na memória primária ( memória RAM ), ou na memória secundária ( discos, fitas, CD-ROM etc ). Nós iremos trabalhar, neste curso, somente com a memória primária, especificamente com as informações armazenadas na RAM ( memória de acesso aleatório ).

A memória do computador pode ser entendida como uma seqüência finita de caixas, que num dado momento, guardam algum tipo de informação, como número, uma letra, uma palavra, uma frase etc, não importa, basta saber que lá sempre existe alguma informação.O computador, para poder trabalhar como alguma destas informações, precisa saber onde, na memória, o dado está localizado. Fisicamente, cada caixa, ou cada posição de memória, possui um endereço, ou seja, um número, que indica onde cada informação está localizada. este número é representado através da notação hexadecimal, tendo o tamanho de quatro, ou mais bytes. Abaixo segue alguns exemplos:

Endereço Físico Informação3000: B712 'João'2000: 12EC 123453000: 0004 'H'

Como pode ser observado, o endereçamento das posições de memória através de números hexadecimais é perfeitamente compreendido pela máquina, mas para nós humanos torna-se uma tarefa complicada. Pensando nisto, as linguagens de computador facilitaram o manuseio, por parte dos usuários, das posições de memória da máquina, permitindo que, ao invés de trabalhar diretamente com os números hexadecimais, fosse possível dar nomes diferentes a cada posição de memória. Tais nomes seriam de livre escolha do usuário. Com este recurso, os usuários ficaram livres dos endereços físicos ( números hexadecimais ) e passaram a trabalhar com endereços lógicos ( nomes dados pelos próprios usuários ). Desta forma, o Exemplo acima, poderia ser alterado para ter o seguinte aspecto:

Endereço Físico InformaçãoNome 'João'número 12345letra 'H'

Como tínhamos falado, os endereços lógicos são como caixas, que num dado instante guardam algum tipo de informação. Mas é importante saber que o conteúdo desta caixa não é algo fixo, permanente, na verdade, uma caixa pode conter diversas informações, ou seja, como no Exemplo acima, a caixa ( Endereço Lógico ) rotulada de "Nome" num dado momento contém a informação "João", mas em um outro momento, poderá conter uma outra informação, por Exemplo "Pedro". Com isto queremos dizer que o conteúdo de uma destas caixas ( endereço lógico ) podem variar, isto é podem sofrer alterações em seu conteúdo. Tendo este conceito em mente, a partir de agora iremos chamar de forma genérica, as caixas ou endereços lógicos, de variáveis.Desta forma podemos dizer que uma variável é uma posição de memória, representada por um Nome simbólico ( atribuído pelo usuário ), a qual contém, num dado instante, uma informação. 3.1 Formação de VariáveisUma variável é formado por uma letra ou então por uma letra seguida de letras ou dígitos, em qualquer número. Não é permitido o uso de espaços em branco ou de qualquer outro caractere, que não seja letra ou dígito, na formação de um identificador.Na formação do nome da variável de um nome significativo, para que se possa ter idéia do seu conteúdo sem abri-lá. Se utilizar palavras para compor o nome da variável utilize o "_ " underline para separar as palavras.3.2 Conteúdo de uma VariávelDados - Elementos conhecidos de um problemaInformação - Um conjunto estruturado de dados, transmitido conhecimento3.3 Tipos de VariáveisConsidere a fórmula matemática simples do calculo do volume de uma esfera:

onde se encontram:

1- valores que podem ser classificados como:a) valores constantes, invariantes em todas as aplicações da fórmula, no caso dos valores 4, 3 e p aos denomina-se constantes;b) valores a serem substituídos na fórmula, em cada aplicação; a representação destes valores, usualmente é feita através de letras, que recebem o nome de variáveis e tornam a fórmula genérica, possível de ser aplicada para resolver uma certa classe de problemas e não apenas um problema específico.

2 - Operações a serem feitas sobre determinados operandos (Valores), para a obtenção da solução do problema.

4. Tipos de Dados

O Pascal exige que no momento que formos trabalhar com variáveis, indiquemos o tipo de informação que uma variável pode conter, isto é, se uma dada posição de memória armazenará um número ou uma letra etc. Para isto, a linguagem Pascal possui definido alguns tipos que deverão ser usados quando formos trabalhar com variáveis. Alguns tipos são:

Algoritmo Pascal Descriçãoa) Inteiro a) INTEGER: Representa números entre -32768 até +32767. ocupa 2 bytes na memória.b) Real b) REAL: Representa os números entre 2.9 x 10 -39 até 1.7 x 1038 . Ocupa 6 bytes na memória.e) Caracter e) CHAR: Representa um dos caracteres, da tabela ASCII. Ocupa 1 byte na memória.d) Cadeia f) STRING: Conjunto de caracteres ( CHAR ). Ocupa de 1 a 255 bytes na memória.g) Lógica g) BOOLEAN: Valor lógico. Assuma somente dois valores: TRUE(Verdade) ou FALSE(Falso). ocupa 1 byte na memória.c) WORD: Números de 0 até 65535. Ocupa 2 bytes na memória.d) BYTE: Números de 0 até 255. Ocupa 1 byte na memória.h) Shor Int Representa os números entre -128 até 128 . Ocupa 1 bytes na memória.i) LongInt Representa os números entre - 2.147.483.648 até 2.147.483.648 . Ocupa 4 bytes na memória.j) Single Representa os números entre 1.5 x 10 -45 até 3.4 x 1038 . Ocupa 4 bytes na memória.l) Double Representa os números entre 5 x 10 -324 até 1.7 x 10308 . Ocupa 8 bytes na memória.

Iremos gradativamente trabalhar com cada um destes tipos e mostrar as suas características.

5. Definição de Variáveis

Para definir uma ou mais variáveis, devemos utilizar, em Pascal, a palavra VAR. Para manter uma compatibilidade, utilizaremos a mesma nomenclatura em nossos algoritmos. Abaixo segue Exemplo de algumas definições de variáveis:

a) ALGORITMO Teste PROGRAM Teste;VARIÁVEIS VARPalavra : CADEIA Palavra: String;INICIO BEGIN<comandos> <comandos>;FIM END.b) ALGORITMO Teste PROGRAM Teste;VARIÁVEIS VARLetra, Caracter: CARACTER Letra, Caracter: CHAR;INICIO BEGIN<comandos> <comandos>;FIM END.c) ALGORITMO Teste PROGRAM Teste;VARIÁVEIS VARLetra, Caracter: CARACTER Letra, Caracter: CHAR;Número: INTEIRO Número: INTEGER;INICIO BEGIN<comandos> <comandos>;FIM END.

Obs.: Os nomes dados as variáveis não podem ser os mesmos nomes de palavras reservadas do Pascal, tais como PROGRAM, BEGIN, END, VER, etc…

5.1 Comando de atribuição

Quando definimos uma variável é natural atribuirmos a ela uma informação. Uma das formas de colocar um valor dentro de uma variável, consequentemente colocado este dado na memória do computador, é através da atribuição direta, do valor desejado que a variável armazena. Para isto utilizaremos o símbolo ( : = (Pascal) , (Algoritmo) ), que significa: recebe, ou seja, a posição, de memória que uma variável representa, receberá uma informação, a qual será armazenada no interior desta variável.Exemplo:ALGORITMO Teste PROGRAM Teste;VARIÁVEIS VARNúmero: INTEIRO Número: INTEGER;INICIO BEGINNúmero 10 Número: =10;FIM END.

O Exemplo acima nos informa que:

a) Foi definido uma variável, a qual demos o Nome de "Número", e informamos que esta variável, ou posição de memória, só poderá aceitar dados, que sejam numéricos e que estejam entre -32768 a +32767 ( tipo INTEGER ).

b) Atribuímos à variável "Número" o valor 10

A memória se comportaria da seguinte forma, de acordo com os itens acima:

a) Variável ConteúdoNúmero indefinidob) Variável ConteúdoNúmero 10

5.2 Variáveis do tipo CHAR(Caracter) e STRING(Cadeia)

As definições de variáveis como sendo do tipo CHAR e STRING, possuem algumas curiosidades que merecem um cuidado especial por parte do usuário.5.2.1 Uso das aspas ( ' )Quando estivermos fazendo a atribuição de um valor para uma variável do tipo CHAR (Caracter) ou STRING (Cadeia), temos que ter o cuidado de colocar o valor ( dado ) entre aspas ( ' ), pois esta é a forma de informar que a informação é caracter.

Exemplo:ALGORITMO TesteVARIÁVEISLetra : CARACTERNome : CADEIAINICIOLetra 'A'Nome 'João'FIM

5.2.2 Manipulação de caracteres individuais em STRING's (Cadeias)

Muitas vezes é necessário manipular caracteres individuais em uma STRING (Cadeia) . O Pascal possui uma forma toda especial de permitir tal operação, através do uso de colchetes( [ ] ) logo após o Nome da variável do tipo STRING (Cadeia) , e o número do caracter que se deseja manipular entre os colchetes.

Exemplo: Atribuir o primeiro caracter de uma STRING a uma variável do tipo CHAR.

ALGORITMO AtribuiString;VARIÁVEISletra : CARACTERNome : CADEIAINICIONome 'Joao'letra Nome[1]FIM

Quando definimos uma variável como sendo do tipo STRING não estamos alocando 1 posição de memória apenas ( uma caixa, pela analogia inicial ), mas na verdade, estamos alocando até 255 caixas, uma para cada caracter da STRING ( lembre-se que uma STRING pode ter no máximo 255 caracteres ). Ao utilizarmos o símbolo de colchete, estamos na verdade indicando qual o caracter ( qual a caixa ) desejamos manipular.

De acordo com o Exemplo acima, teríamos na memória a seguinte situação:

a) Alocamos 255 bytes ( caracteres ) na memória. A estas posições de memória é dado o Nome de "Nome". Inicialmente estas posições de memória ( Caixas ) possuem o conteúdo indefinido.

b) Alocamos 1 byte ( caracter ) na memória. A este caracter é dado o Nome de "Letra". Inicialmente esta posição de memória possuí o conteúdo indefinido.

c) Na memória temos a seguinte situação:

Nome1 2 3 … 255

Letra

d) Atribuímos a variável "Nome" o valor "João", obtendo na memória a seguinte configuraçãoNome1 2 3 4 … 255'J' 'o' 'a' 'o'

e) Atribuímos a variável "Letra" o primeiro caracter da variável "Nome", ou seja, o conteúdo da primeira posição de memória ( caixa ). Na memória teremos a seguinte configuração:

Nome1 2 3 4 … 255'J' 'o' 'a' 'o'

Letra'J'

Obs.: É possível definir variáveis do tipo STRING(Cadeia) com menos de 255 caracteres. Para isto, basta colocar, após a palavra STRING(Cadeia), o número de caracteres desejados entre colchetes ( [ ] ).

Exemplo: ALGORITMO DefineVARIÁVEISNome: CADEIA[80]INICIOFIM

Desta forma, o espaço ocupado por uma variável STRING(Cadeia) passa de 255 bytes para apenas 80 bytes, na memória.

5.2.3 Exercícios 0:

1) Dar o tipo de cada uma das constantesa) 613 b) 613,0c) -613d) "613"e) -3,012 * 1015f) 17*1012g) -28,3 * 10 -23h) "Fim de Questão"

2) Faça um PROGRAMA para atribuir a variáveis as seguintes informações:

a) 12345b) 123456c) -1122d) 10e) VERDADEf) 12345605

3) No seguinte PROGRAMA existe algum erro? Onde?

ALGORITMO TesteVARIÁVEISMaria : CADEIAidade : INTEIROletra : CARACTERMaria : REALINICIOidade 23idade 678idade letraletra ABCletra Aletra 2FIM

4) Qual a diferença existente nas seguintes atribuições?

a) Letra 'A'Nome 'João'

b) Letra ANome João

5) É correto definir uma variável como sendo Caracter e atribuirmos a ela o valor: 'PEDRO'? E se a variável fosse definida como CADEIA, a mesma poderia receber um valor do tipo CARACTER?

(Parte 1 de 6)

Comentários