


















































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
ESTUDOS - ESTUDOS
Tipologia: Notas de estudo
1 / 90
Esta página não é visível na pré-visualização
Não perca as partes importantes!
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
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):
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:
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
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.
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.
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:
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.