Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Apostila de algoritmo, Notas de estudo de Engenharia Mecânica

ESTUDOS - ESTUDOS

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 09/10/2009

ranndys-halice-7
ranndys-halice-7 🇧🇷

4

(4)

22 documentos

1 / 90

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
FIAA-FACULDADES INTEGRADAS ANGLO-AMERICANO
CURSO DE SISTEMAS DE INFORMAÇÃO
Apostila de
Algoritmo Estruturado
4ª edição – Agosto de 2003
Profa Salete Buffoni
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a

Pré-visualização parcial do texto

Baixe Apostila de algoritmo e outras Notas de estudo em PDF para Engenharia Mecânica, somente na Docsity!

FIAA-FACULDADES INTEGRADAS ANGLO-AMERICANO

CURSO DE SISTEMAS DE INFORMAÇÃO

Apostila de

Algoritmo Estruturado

4ª edição – Agosto de 2003

Profa^ Salete Buffoni

Sumário

CAPÍTULO 1 - PROGRAMAÇÃO ESTRUTURADA

1.1. INTRODUÇÃO

Programação de computadores é uma atividade que vem se desenvolvendo há mais de 40 anos desde o surgimento das primeiras linguagens de programação. Inicialmente, aprendia-se a programar utilizando-se a própria linguagem como ferramenta. A linguagem Fortran, criada em 1954, e com seu primeiro compilador em 1957, foi durante muito tempo utilizada com este fim, inclusive no Brasil. Nas décadas de 60 e 70, com o aparecimento de algumas outras linguagens, o Fluxograma, um método gráfico que hoje está em desuso, foi grandemente utilizado em complemento ao anterior. Hoje em dia, depois de centenas de linguagens de programação criadas e de vários métodos para se representar a solução de problemas, aprende-se a programar construindo e desenvolvendo algoritmos. Na disciplina Algoritmos, com o auxílio desta apostila, você vai aprender os passos básicos e as técnicas para construção de algoritmos e programas, utilizando dois métodos para sua representação. Espera-se que com isso ao fim de um período de quatro meses, você tenha adquirido a capacidade de transformar qualquer problema de média complexidade e extensão em um algoritmo de boa qualidade. Antes de entrarmos no assunto propriamente dito, vamos apresentar alguns conceitos básicos sobre construção de algoritmos e tecer breves considerações sobre os dois componentes do sistema de computação ou de processamento eletrônico de dados: O Hardware e o Software. Se você deseja saber algo sobre a história da computação sugerimos os capítulos iniciais das referências [1] e [3]. O objetivo desse curso é a Lógica de Programação dando uma base teórica e prática, suficientemente boa, para que, o aluno domine os algoritmos e esteja habilitado a aprender uma linguagem de programação. Será mostrado também um grupo de algoritmos clássicos para tarefas cotidianas, tais como: ordenação e pesquisa.

1.2. CONCEITOS BÁSICOS

  • Dados: são elementos brutos que podem ser processados por um computador digital para se obter alguma conclusão ou resultado, ou seja, uma informação.
  • Computador Digital: Máquina(hardware) muito rápida que pode processar dados, realizando cálculos e operações repetitivas, se dotadas de programação adequada (software), e que fornece resultados corretos e precisos.
  • Informação: é o resultado do processamento dos dados pelo computador. Uma informação pode ser considerada como dado para outro processamento e, por isso, muitas vezes é referenciada como dado de saída.
  • Hardware: é um termo de origem americana que engloba todo o equipamento principal e periférico de um computador. O termo é utilizado também para equipamentos sem software. O hardware, normalmente, é fixo e difícil de ser modificado.
  • Software: é um outro termo de origem americana que engloba programas, documentação, procedimentos e dados, utilizados em um computador para resolução de um determinado problema. O software , ao contrário do hardware , é maleável e por isso mais facilmente modificável pelo programador, para adaptação a novos dados, novos requisitos do problema a ser resolvido, ou novo hardware onde vai funcionar (ser executado).
  • Programa de Computador: seqüência de instruções não ambígua e finita em uma linguagem de programação específica que, quando executada, resolve um problema determinado.
  • Linguagem de máquina: é a linguagem binária (composta de zeros e uns) utilizada pelos computadores, para representar dados, programas e informações. É tediosa, difícil de se compreender e fácil de gerar erros na programação.
  • Linguagem Assembler: é uma linguagem particular para cada processador (computador), que codifica as instruções em linguagem de máquina e facilita um pouco o trabalho do programador. É também considerada uma linguagem de baixo nível, mas ainda hoje é utilizada.
  • Linguagem de programação de 3ª geração: também chamada de linguagem de alto nível, engloba todas as linguagens de programação que utilizam compiladores ou interpretadores. Possuem instruções mais poderosas que a linguagem Assembler, facilitando ainda mais o trabalho do programador. Exemplos: Fortran, Cobol, Algol, PLI, Pascal, Modula2, Lips, C, ADA, etc.
  • Linguagem de programação de 4ª geração: são linguagens não procedurais, utilizadas para sistemas de gerenciamento de banco de dados, planilhas e outros aplicativos que utilizam comandos mais poderosos ainda que as linguagens de 3ª geração e, por isso, são ainda mais fáceis de programar. Exemplos: SQL, DBASE, CLIPPER, INGRES, etc.

A memória secundária (MS) é responsável pelo armazenamento, em caráter permanente, de programas e dados. É onde se localizam os arquivos de dados, de programas ou de saída (resultados).

Exemplos de MS são: discos flexíveis (disquetes), discos rígidos (winchester), cartuchos (fitas streamer), fitas magnéticas, CD-ROM, etc.

Para os que desejarem, este assunto é apresentado em maior profundidade na referência [3]. A Figura 1.1 abaixo ilustra o inter-relacionamento dos componentes acima citados:

Figura 1.1- O Computador segundo Von Neumann.

1.2.2. SOFTWARE O software de um computador é o que determina o seu uso e os resultados que serão produzidos e apresentados. Em um computador digital existem diversos tipos diferentes de software, em camadas, com finalidades e complexidades diferentes. Normalmente, quanto mais relacionado e próximo ao hardware, mais complexo e difícil de se desenvolver e manter ele é. A Figura 1.2, que se segue, procura ilustrar o que foi dito. Partindo-se do hardware que está no centro, o Sistema Operacional com seus diversos programas é a primeira camada de software do nosso computador. É muito complexo desenvolver-se um sistema operacional como DOS, UNIX, VMS, WINDOWS 2000 e outros que você já deve ter ouvido falar.

Externamente ao sistema operacional vamos encontrar os compiladores e interpretadores das linguagens de programação que, de certa forma, traduzem os programas aplicativos para a linguagem de máquina que o computador entende. Nesta segunda camada encontramos também os processadores ou editores de texto (Wordstar, WordPerfect, Fácil, Carta Certa, Word, etc.), os gerenciadores de bancos de dados (Dbase, Dialog, Paradox, FoxBase, Access, etc.), as planilhas (Lotus123, Quattro, Excel, etc.) e muitos outros programas utilitários (PCTools, Norton, Utilities, Quik Link, etc.). Na camada mais externa encontramos os programas aplicativos que podem ser desenvolvidos utilizando-se os recursos da camada anterior e nas linguagens de programação, utilizando os interpretadores ou os compiladores para poderem ser executados.

Para o desenvolvimento destes programas é que se faz uso das técnicas de construção de algoritmos, de forma a se garantir que os programas serão gerados com um mínimo de erro e poderão ser mantidos, sem dificuldade, por um programador, que não o tenha desenvolvido. Ao contrário do que muitos pensam, um computador não faz nada sozinho. Ele é uma máquina rápida, que resolve problemas bem definidos e repetitivos, mesmo complexos, mas somente se for bem programado. Ou seja: se temos LIXO na entrada (quer na forma de maus programas ou dados ruins), teremos LIXO na saída (nossos resultados).

Figura 1.2- As camadas de software em um computador.

1.3. O DESENVOLVIMENTO DE SISTEMAS DE INFORMAÇÃO E O PROGRAMADOR Um sistema de informação pode ser definido como um sistema baseado em computador que auxilia, automatiza e otimiza o funcionamento de qualquer atividade através da(o):

  • Redução da participação do homem em atividades rotineiras e repetitivas; Aumento da facilidade na coleta e armazenamento de dados e na rapidez de recuperação e manuseio;
  • Redução do número de erros produzidos em operações de coleta, arquivamento e recuperação de dados e de informações;
  • Aumento de facilidade e flexibilidade na geração de relatórios, entre outros.

CAPÍTULO 2 - RESOLUÇÃO DE PROBLEMAS: ALGORITMOS

2.1. PROBLEMAS E SOLUÇÕES

Vamos supor que Temos que pregar um prego em um pedaço de madeira. Para realizar esta tarefa teremos que segurar o prego sobre a madeira e bater com o martelo tantas vezes quantas forem necessárias até que o prego entre por inteiro.

Uma solução para este problema seria:

1º repetir a seguinte seqüência de ações: segurar o prego sobre a madeira com a mão esquerda; bater com o martelo no prego, com a mão direita; verificar se o prego já está todo dentro da madeira. O qual pode se notar nesse exemplo é que haverá uma repetição de ações até que uma determinada condição esteja satisfeita (o prego esteja dentro da madeira).

Suponha que você precise realizar uma seleção de candidatos para um emprego e há dois requisitos a serem preenchidos. Você deverá contratar os que preencherem os dois requisitos, anotar os dados de quem preencher apenas um dos requisitos e dispensar os que não preencherem nenhum dos dois requisitos. Poderíamos escrever uma solução para este problema da seguinte forma: 1º chamar o candidato; 2º se preencher os dois requisitos então contratar; 3º caso contrário, se preenche um ou outro requisito então anotar seus dados; 4º senão dispensá-lo.

O que se pode observar nesta solução é que estamos fazendo uma seleção do candidato que satisfaz as duas condições (requisitos) para o emprego, e também uma segunda seleção (possivelmente para uso futuro) dos candidatos que satisfazem apenas uma das condições. Estas seqüências de passos, que resolvem cada um dos exemplos propostos é o que pode ser chamado de algoritmo para solução do problema. Elas estão a exemplificar as três formas básicas de se definir uma solução para qualquer problema:

SEQUÊNCIA

REPETIÇÃO

SELEÇÃO

Naturalmente que os algoritmos para problemas resolvidos com o auxílio de computadores não serão tão simples e nem apresentados com os exemplos mostrados. Veremos isto nos capítulos que se seguem, mas a figura abaixo dá uma idéia da utilidade dos Algoritmos.

Figura 2.1- A solução de problema com o uso do computador.

2.2. DEFINIÇÃO DE ALGORITMO

  • O conceito central da programação e da Ciência da Computação é o conceito de algoritmos, isto é, programar é basicamente construir algoritmos.
  • É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa.
  • O algoritmo pode ser usado como uma ferramenta genérica para representar a solução de tarefas independente do desejo de automatizá-las, mas em geral está associado ao processamento eletrônico de dados, onde representa o rascunho para programas (Software).
  • Serve como modelo para programas, pois sua linguagem é intermediária à linguagem humana e às linguagens de programação, sendo então, uma boa ferramenta na validação da lógica de tarefas a serem automatizadas.
  • Um algoritmo é uma receita para um processo computacional e consiste de uma série de operações primitivas, interconectadas devidamente, sobre um conjunto de objetos. Os objetos manipulados por essas receitas são as variáveis.
  • Algoritmo pode ter vários níveis de abstrações de acordo com a necessidade de representar ou encapsular detalhes inerentes às linguagens de programação.
  • Como qualquer modelo, um algoritmo é uma abstração da realidade. A abstração é o processo de identificar as propriedades relevantes do fenômeno que esta sendo modelado. Usando o modelo abstrato, podemos nos centrar unicamente nas propriedades relevantes para nós, dependendo da finalidade da abstração, e ignorar as irrelevantes.
  1. Em uma língua (português, inglês): é utilizado nas receitas, instruções , etc. Para solução de problemas em computação apresenta um inconveniente: a ambigüidade de alguns termos.
  2. Uma linguagem de programação (Pascal, Cobol, C, etc.): é utilizada por alguns programadores já experientes, porém apresenta alguns inconvenientes: utiliza apenas as instruções existentes na linguagem específica e é muito detalhada nas preocupações com a sintaxe, desviando a atenção do programador da solução do problema em si.
  3. Representações gráficas: são bastante recomendáveis já que um desenho muitas substitui, com vantagem, mil palavras. Alguns exemplos (ver Figura 2.2 abaixo):

a) fluxograma (hoje em dia estão caindo em desuso) b) diagramas de Nassi-Scheniderman (utilizaremos no nosso curso) c) método de Jackson d) diagramas de Warnier-Or

Figura 2.2 - Métodos gráficos para representação de algoritmos

2.3.1- PSEUDO-CÓDIGO Os algoritmos são descritos em uma linguagem chamada pseudo-código. Este nome é uma alusão à posterior implementação em uma linguagem de programação, ou seja, quando formos programar em uma linguagem, por exemplo Visual Basic, estaremos gerando código em Visual Basic. Por isso os algoritmos são independentes das linguagens de programação. Ao contrário de uma linguagem de programação não existe um formalismo rígido de como deve ser escrito o algoritmo.

O algoritmo deve ser fácil de se interpretar e fácil de codificar. Ou seja, ele deve ser o intermediário entre a linguagem falada e a linguagem de programação. Utilizaremos em nosso curso um pseudo-código que chamaremos de nosso pseudo-código. Existem várias pseudolinguagens de programação como mostra a referência [2] que utiliza o Portugol( Português + Algol +Pascal) , para o estudo dos algoritmos.

2.4. ALGORITMO X PROGRAMA Um algoritmo é uma seqüência lógica de ações a serem executadas para se executar uma determinada tarefa. Um Programa é a formalização de um algoritmo em uma determinada linguagem de programação, segundo suas regras de sintaxe e semântica, de forma a permitir que o computador possa entender a seqüência de ações.

2.5. LINGUAGEM DE PROGRAMAÇÃO Conjunto de símbolos ( comandos, identificadores, caracteres etc ....) e regras de sintaxe que permitem a construção de sentenças que descrevem de forma precisa ações compreensíveis e executáveis para o computador.

2.5.1. LINGUAGEM DE PROGRAMAÇÃO = SÍMBOLOS + REGRAS DE SINTAXE Uma linguagem de programação é uma notação formal para descrição de algoritmos que serão executados por um computador. Como todas as notações formais, uma linguagem de programação tem dois componentes: Sintaxe e Semântica. A sintaxe consiste em um conjunto de regras formais, que especificam a composição de programas a partir de letras, dígitos, e outros símbolos. Por exemplo, regras de sintaxe podem especificar que cada parênteses aberto em uma expressão aritmética deve corresponder a um parênteses fechado, e que dois comandos quaisquer devem ser separados por um ponto e vírgula. As regras de semântica especificam o “significado” de qualquer programa, sintaticamente válido, escrito na linguagem.

2.5.2. TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Existem diversas linguagens de programação, cada uma com suas características específicas e com níveis de complexidade e objetivos diferentes: · Linguagem de Máquina Única compreendida pelo computador. Específica de cada computador. · Linguagens de Baixo Nível Ex.: Assembly · Linguagens de Alto Nível Utiliza instruções próximas da linguagem humana de forma a facilitar o raciocínio.

  1. Traduz para as instruções correspondentes em linguagem de máquina
  2. Executa as instruções em linguagem de máquina
  3. Repete o passo 1 até o fim do programa

COMPILADOR Efetua a tradução de todo o código-fonte em linguagem de alto nível para as instruções correspondentes em linguagem de máquina, gerando o código-objeto do programa. Em seguida é necessário o uso de um outro programa ( Link-Editor ) que é responsável pela junção de diversos códigos-objeto em um único programa executável.

2.6.1. POSSIBILIDADES DE ERROS NUM PROGRAMA Erros de Compilação : Erros de digitação e de uso da sintaxe da linguagem Erros de Link-Edição : Erro no uso de bibliotecas de sub-programas necessárias ao programa principal. Erros de Execução : Erro na lógica do programa (algoritmo).

2.7. ESTRATÉGIAS A SEREM SEGUIDAS NA RESOLUÇÃO DE PROBLEMAS

2.7.1. CRITÉRIOS DE QUALIDADE DE UM PROGRAMA Refere-se à precisão das informações manipuladas pelo programa, ou seja, os resultados gerados pelo processamento do programa devem estar corretos, caso contrário o programa simplesmente não tem sentido.

Clareza : Refere-se à facilidade de leitura do programa. Se um programa for escrito com clareza, deverá ser possível a outro programador seguir a lógica do programa sem muito esforço, assim como o próprio autor do programa entendê-lo após ter estado um longo período afastado dele.

Simplicidade : A clareza e precisão de um programa são normalmente melhoradas tornando as coisas o mais simples possível, consistentes com os objetivos do programa. Muitas vezes torna-se necessário sacrificar alguma eficiência de processamento, de forma a manter a estrutura do programa mais simples.

Eficiência : Refere-se à velocidade de processamento e a correta utilização da memória. Um programa deve ter performance SUFICIENTE para atender às necessidade do problema e do usuário, bem como deve utilizar os recursos de memória de forma moderada, dentro das limitações do problema.

Modularização : Durante a fase de projeto, a solução do problema total vai sendo fatorada em soluções de subproblemas, o que permite geralmente dividir o problema em forma natural em

módulos com subfunções claramente delimitadas, que podem ser implementados separadamente por diversos programadores de uma equipe, ou seja, a modularização consiste no particionamento do programa em módulos menores bem identificáveis e com funções específicas, de forma que o conjunto desses módulos e a interação entre eles permite a resolução do problema de forma mais simples e clara.

Generalidade : É interessante que um programa seja tão genérico quanto possível de forma a permitir a reutilização de seus componentes em outros projetos.

2.7.2. METODOLOGIA DE SOLUÇÃO

1-Entender o problema; 2- Formular um esboço da solução; 3- Fazer uma primeira aproximação das variáveis necessárias; 4- Rever os passos originais, detalhando; 5- Se o algoritmo estiver suficientemente detalhado, testar com um conjunto de dados significativos; 6- Implementar numa linguagem de programação.

  • Utilizaremos em nosso curso uma pseudolinguagem de programação chamada PORTUGOL , cujo objetivo é obter-se uma notação para algoritmos a ser utilizada na definição, na criação, no desenvolvimento e na documentação de um programa, e não criar mais uma linguagem de programação.

INTEIRO (“int, short int ou long int”): : qualquer número inteiro, negativo, nulo ou positivo. Ex: -2, -1, 0... Operações: soma(+), subtração(-), multiplicação(*), divisão inteira(/), resto(%) e comparações.

REAL (“float ou double”): qualquer número real, negativo, nulo ou positivo. Ex: 2.5, 3. Operações: soma(+), subtração(-), multiplicação(*), divisão exata(/) e comparações.

CARACTER (“char”): qualquer conjunto de caracteres alfanuméricos. Ex: A, B, "ABACATE " Operações: comparações

TEXTO OU CADEIA DE CARACTERES (“STRING”): uma variável deste tipo poderá armazenar uma cadeia de caracteres de qualquer tamanho. Caso seja imprescindível para o entendimento pode-se acrescentar, entre parênteses, a quantidade máxima de caracteres. (Exemplo: texto (10)). Obs.: Os textos deverão ser representados sempre entre apóstrofes para que não se confundam com os valores numéricos. Veja que o inteiro 5, é diferente do texto ‘5’.

LÓGICO (“BOOLEAN”): tipo especial de variável que armazena apenas os valores V e F, onde V representa VERDADEIRO e FALSO Ex: e, ou, não Operações: Verdadeiro ou Falso

3.2. DECLARAÇÃO DE VARIÁVEIS Consiste na definição dos nomes e valores das constantes e dos nomes e tipos das variáveis que serão utilizadas pelos algoritmos, previamente à sua utilização, incluindo comentário, quando se fizerem necessários. Na maioria das linguagens de programação, quando o computador está executando um programa e encontra uma referência a uma variável ou a uma constante qualquer, se esta não tiver sido previamente definida, ele não saberá o que fazer com ela. Da mesma forma, um programador que estiver implementando um algoritmo, em alguma linguagem de programação, terá o seu trabalho simplificado se todas as constantes e variáveis referenciadas no algoritmo tiverem sido previamente declaradas. As constantes são declaradas antes das variáveis. Vejamos os formatos da declaração e alguns exemplos.

O significado da declaração de variáveis corresponde à criação de locais na memória rotulada com o nome da variável (identificador) e marcada com o tipo de valores que ela pode conter. Para que os programas manipulem valores, estes devem ser armazenados em variáveis e para isso, devemos declará-las de acordo com a sintaxe:

identificador ;

lógico

caracter

real

inteiro

Ex: Inteiro X1; obs.: X1 é o nome de um local de memória que só pode conter valores do tipo inteiro real SOMA, MÉDIA; caracter frase, nome; inteiro X1; real A,B; lógico TEM;

3.2.1. PALAVRAS RESERVADAS São palavras que terão uso específico no nosso pseudo-código e que não deverão ser usadas como identificadores, para não causar confusão na interpretação.

Exemplo : Algoritmo, Programa, Bloco, Procedimento, Inteiro, Real, Texto, Const, Var, Tipo, Início, Imprima, Se, Então, Senão, Enquanto, Repita, Variando, Faça, Caso, Até, Vetor, Matriz, Registro, Fim, Execute, Procedimento, Função, etc.... O significado de cada um desses termos será visto e entendido nos itens e capítulos que se seguem.

3.3. COMANDO SIMPLES É uma instrução simples. leia(x);

3.4. COMANDO COMPOSTO um grupo de comandos simples que executam alguma tarefa.