Introdução à Programação (Fascículo I) - Capítulo 1 - Conceitos Básicos sobre...
Reitor: Prof. Valmar Corrêa de Andrade Vice-Reitor: Prof. Reginaldo Barros Pró-Reitor de Administração: Prof. Francisco Fernando Ramos Carvalho Pró-Reitor de Extensão: Prof. Paulo Donizeti Siepierski Pró-Reitor de Pesquisa e Pós-Graduação: Prof. Fernando José Freire Pró-Reitor de Planejamento: Prof. Rinaldo Luiz Caraciolo Ferreira Pró-Reitora de Ensino de Graduação: Profª. Maria José de Sena Coordenação de Ensino a Distância: Profª Marizete Silva Santos
Coordenação Acadêmica: Coordenação Conteúdo: Coordenação de Ambiente Virtual: Coordenação Pedagógica: Coordenação de Infra-Estrutura e Pólos:
Produção Gráfica e Editorial Capa e Editoração: Allyson Vila Nova, Rafael Lira e Ana Carolina Lobo Revisão Ortográfica: Ilustrações: Coordenação de Produção: Marizete Silva Santos
Carta aberta aos alunos 5
Objetivos do Capítulo 1 7
Conteúdo Programático do Capítulo 1 7
Unidade 1 – Introdução a Algoritmos e à Lógica de Programação 9
Fases Básicas da Construção de Algoritmos 12
Representação de Algoritmos 14
Para a maior parte dos alunos que ingressa em algum curso de informática, em qualquer nível (ensino técnico ou superior), uma grande curiosidade ou desejo é aprender a programar um computador. Fazer o computador fazer o que se quer. Daí vem uma grande questão: qual o caminho a percorrer para atingir esse objetivo? Até porque essa não é uma tarefa fácil para a maior parte das pessoas. É aí que esta disciplina de Introdução à Programação entra, porque antes de começar a programar, você precisa desenvolver a sua lógica de programação, precisa saber construir um algoritmo.
Mas o que danado é um algoritmo? Um algoritmo é um conjunto de passos bem definidos para chegar à resolução de um problema, algo como uma receita, um passo a passo. Como todo programa de computador objetiva resolver um problema, sempre você vai precisar construir um algoritmo para iniciar a programação.
Algumas pessoas consideram uma perda de tempo aprender algoritmos e querem logo passar para uma linguagem de programação diretamente. Porém, aprender algoritmo não é uma perda de tempo antes da programação, mas a programação é que pode se tornar uma perda de tempo quando não se parou para raciocinar sobre qual algoritmo deve ser aplicado. Pense assim: não se pode construir uma casa, sem os seus alicerces. Ou até você poderia, mas a casa não ficaria de pé muito tempo. E aí, você gostaria de construir uma casa que pode vir a cair?
Além disso, de uma forma ou de outra, o algoritmo sempre vai existir, mesmo que você diga que não o escreveu, ele existe! Mesmo que apenas no seu pensamento! Isso porque, para programar, você sempre vai precisar organizar as idéias, a fim de definir os passos que resolverão o problema e vai precisar estabelecer a ordem que esses passos deverão ser executados. E isso, amigo, construir um algoritmo será uma das primeiras coisas que você vai aprender nesta disciplina!
Depois, já sabendo definir passos, receitas para resolução de problemas, essa receita, esses passos, serão convertidos para uma linguagem de programação que o computador entenda. E aí sim, você vai começar verdadeiramente a programar!
Porém, amigos, não vou iludi-los, não é um caminho fácil e haverá momentos que você sentirá vontade de desistir, momentos que parecerá que nada tem lógica! Mas, não desista! Você verá que a prática, as tentativas e erros vão lhe ajudar a amadurecer e alguns algoritmos que pareciam um GRANDE desafio, em algum tempo, vão se tornando mais fáceis. Basta ter perseverança, exercitar bastante e colocar a cuca pra funcionar!
Lembre-se! Essa disciplina é a base para muita coisa que vem pela frente no curso.
E é o grande diferencial entre quem sempre vai apenas usar o computador e quem vai fazer o computador fazer exatamente o que se quer que ele faça! E aí, vamos programar?
• Apresentar os conceitos básicos sobre algoritmos e lógica de programação.
• Apresentar formas distintas para representação do raciocínio da lógica algorítmica
• Apresentar os tipos de problema algorítmicos
• Apresentar componentes básicos de um programa em linguagem algorítmica (pseudocódigo).
• Desenvolver a lógica de programação fazendo uso, de forma ainda básica, de elementos, variáveis, operadores, expressões, estruturas seqüenciais, estruturas condicionais e estruturas de repetição.
Unidade 1 – Introdução a Algoritmos e Linguagens (10 horas) • Noções de Lógica de Programação e Algoritmos
• Fases Básicas da Construção de Algoritmos.
• Representação de Algoritmos: fluxogramas, português estruturado e linguagem algorítmica (pseudocódigo)
• Conceitos Básicos de Lógica de Programação e Linguagens de Programação
Unidade 2 – Linguagem Algorítmica (20 horas) • Identificadores
• Constantes, Variáveis e Tipos de Dados
• Operadores e Expressões (aritméticos, relacionais e lógicos)
• Instruções Primitivas (entrada e saída)
• Sintaxe e Semântica
• Estrutura seqüencial (início/fim)
• Estruturas de Decisão (simples, composta e múltipla)
• Estruturas de Repetição (condicional e com contador)
• Dicas para escrever bons algoritmos
Cada unidade conterá exercícios para fixação do assunto apresentado, assim como indicações de leituras adicionais. A Unidade 1 exigirá 10 horas de sua dedicação e a Unidade 2, o dobro de dedicação (20 horas).
Para resolver um problema qualquer é necessário que seja, primeiramente, encontrada uma maneira de descrever este problema de uma forma clara e precisa. Depois, é preciso que encontremos uma seqüência de passos que permitam que o problema possa ser resolvido. Justamente a essa seqüência de passos chamamos algoritmo. Logo, como o quadro I descreve os passos para resolver o problema de "trocar um pneu furado", ele é um algoritmo. Outro exemplo clássico de um algoritmo é uma receita de bolo. Se você
Introdução à Programação seguir a receita direitinho, ao final, você vai ter um bolo pronto. Logo, escrever um algoritmo nada mais é do que criar uma receita para resolver um problema qualquer (e no nosso caso, essa receita vai ser executada pelo computador).
Você poderia me perguntar: qualquer um pode aprender a construir um algoritmo? E prontamente eu responderia: Claro que pode! Apesar de alguns acharem que um programador nasce com o dom de programar, não é bem assim. Ser um bom programador, pegar os "macetes" da lógica de programação, conseguir construir o algoritmo que vai dar origem ao programa é algo que pode ser aprendido e desenvolvido por qualquer um que decida abraçar esse estudo com perseverança e interesse. Ah, também é necessário praticar. Sem praticar, nunca vai ser fácil construir um algoritmo. Outro fator é possuir o desejo de programar computadores, é realmente querer programar. Caso contrário, será sempre uma perda de tempo. Fazer o que não se gosta, simplesmente por fazer, é perda de tempo.
Para aprender a construir um algoritmo, uma coisa que atrapalha, é que há poucas publicações especializadas que tratam do assunto de maneira clara e em um nível que os simples "mortais" possam entender e estudar. Além disso, muitas vezes são adotados livros sobre determinada linguagem de programação como livros-texto para aprender a programar. Porém, esses livros, nessa fase inicial, não são muito úteis, virão a ser depois. Porque, uma vez que você aprenda a construir um algoritmo, você vai passar esse algoritmo para alguma linguagem de programação qualquer com facilidade (tal como C ou Pascal) e aí, sim, o algoritmo vai ser executado pelo computador e você estará começando a programar! Logo, sabendo construir um algoritmo, você poderá, futuramente, programar em qualquer linguagem, com poucas adaptações.
Bom, vamos agora dar uma definição forma. Podemos dizer que:
"Algoritmo é um conjunto finito de regras que provê uma seqüência de operações para resolver um tipo de problema específico, em um tempo determinado" (KNUTH, 1997). A partir dessa definição, quais características podemos dizer que um algoritmo tem? Bem, um algoritmo apresenta características próprias que o distinguem de um simples conjunto de ações, são elas:
• Um algoritmo sempre termina, ele deve ter um fim. Na verdade, cada ação do algoritmo, cada passo, deve ser simples o bastante de forma a ser executada em um intervalo
Introdução à Programação de tempo finito.
• As instruções do algoritmo devem estar em uma seqüência lógica, ou seja, deve existir uma ordem de execução dos passos da seqüência.
• Cada ação é descrita precisamente e sem ambigüidades, ou seja, o algoritmo não pode dar margem à dupla interpretação.
• Um algoritmo sempre produz um ou mais resultados (saídas), podendo não exigir dados de entrada.
Parsons (1995) acrescenta a estas características a obrigatoriedade de um algoritmo sempre solucionar um determinado problema, justamente, para que tenha uma utilidade.
Um ponto importante a destacar é que um algoritmo é "uma solução" e não "a solução" de um problema. Isso porque um problema pode ser resolvido de diversas maneiras, logo, pode ser resolvido usando diversos algoritmos diferentes. Por exemplo, um algoritmo para trocar uma lâmpada queimada, pode variar. Para trocar a lâmpada um sujeito A pode dizer que precisa subir em uma cadeira para alcançar a lâmpada; outro sujeito B pode descrever o mesmo algoritmo, mas agora subindo em uma escada e ainda, um sujeito C pode ser alto o suficiente para no algoritmo dele não precisar nem de cadeira, nem de escada para trocar a lâmpada. Porém, o problema a resolver (trocar a lâmpada) é o mesmo e qualquer um dos algoritmos resolverá esse problema.
E tudo pode virar um algoritmo? Podemos construir um algoritmo para qualquer coisa? Qualquer tarefa que siga um padrão poderá ser representada por um algoritmo. Por exemplo, qual o próximo número da seqüência numérica: 2, 4, 6, 8, _? Obviamente, estamos apresentando os números pares. Logo, o valor seguinte é o número anterior acrescentado de duas unidades, sendo próximo valor da seqüência o número 10.
E agora, a seqüência 1 1 2 3 5 8 13 _? Qual o próximo número? Se olhar bem, com exceção dos dois primeiros números que são o início da seqüência, todos os outros são a soma do último número escrito e de seu antecessor. Assim sendo, o próximo número da seqüência é 21 (ou seja, o último número 13 + o seu antecessor 8). Como há um padrão, seria fácil construir um algoritmo para essas tarefas.
Porém, se considerarmos a seqüência 0,1,4,9,17,25,_, qual seria o próximo número? Complicado? Como não conseguimos definir uma lógica para o cálculo do próximo número, nós não conseguiríamos construir um algoritmo para essa tarefa, pois não se teria uma "fórmula" para calcular quem vem a seguir. Dessa forma, para podermos construir um algoritmo para um problema, esse problema tem de ter uma lógica. Senão, não será possível solucionálo de forma a ser executado por um computador. Vale lembrar que, algumas vezes, pode ser complicado achar a lógica do problema a primeira vista, mas quanto mais você praticar, mais fácil será encontrála.
Sim, e agora, como fazemos para começar o algoritmo? Para montar um algoritmo, precisamos primeiro dividir o problema apresentado em três fases fundamentais: Entrada, Processamento E Saída. Essa definição vai ajudar você a encontrar a resolução do problema.
Entrada: São os dados de entrada do algoritmo, os valores que ele vai usar no processamento para chegar à solução do problema. Esses dados de entrada, geralmente, são fornecidos pelo usuário, fazendo uso de algum dispositivo de entrada de dados, tal como, um teclado, um mouse ou um leitor de código de barras (vide Figura a seguir).
Processamento: São os procedimentos utilizados para chegar ao resultado final, para alcançar a resolução do problema. Esses procedimentos são executados no processador do computador e os valores parciais são armazenados na memória (memória RAM).
Saída: São os dados já processados. É o resultado do processamento. Estes dados de saída são apresentados em algum dispositivo de saída. Por exemplo, a tela de um monitor (vide Figura aseguir).
Por isso, antes de construir um algoritmo, pare para pensar e identificar:
• Quais dados são necessários para começar o algoritmo? Que dados ele vai precisar para executar? – ENTRADA
• Quais são os cálculos que precisam ser feitos e quais decisões precisam ser tomadas? – PROCESSAMENTO
• Quais dados devem ser exibidos para o usuário? – SAÍDA
Para ilustrar, suponha um algoritmo para calcular a média aritmética de dois números. Quais seriam as fases desse algoritmo?
Entrada: os dois números (afinal, para calcular a média, você precisa ter os dois valores)
Processamento: o cálculo da média (que seria somar os dois números e dividir por dois)
Saída: a média (que era o objetivo do problema)
Agora que já identificamos as etapas do problema, como representar isso em um algoritmo? Um algoritmo pode ser representado de três formas: Descrição Narrativa, Fluxograma e Linguagem Algorítmica, também chamada de Pseudocódigo. A seguir, vamos descrever
Introdução à Programação melhor cada uma dessas representações.
Faz uso do português normal, sem tirar, nem por, com o objetivo de descrever os passos principais da solução para um problema. Uma receita de bolo, por exemplo, é uma descrição narrativa. Outros exemplos são tomar banho (ver Quadro 2) e calcular a média de um aluno (ver Quadro 3).
Qual a vantagem? Todos falamos e conhecemos o português e sabemos, bem ou mal, fazer uma descrição, uma lista de atividades.
E as desvantagens? Bem, primeiro, não há um padrão. Cada pessoa pode escrever como quiser (em tópicos, sem tópicos, usando verbos no infinitivo ou não, etc). Outra desvantagem é a imprecisão, uma vez que a especificação pode não ficar clara ou ficar ambígua, ou seja, cada um pode interpretar de uma forma. Por exemplo, em algumas receitas de bolo você pode encontrar a frase "leve ao forno até assar". Algumas pessoas poderiam saber exatamente quando o bolo está assado, outras pessoas não. Levando a pergunta "e aí, quando o bolo estará assado?" Por último, há o perigo de se escrever muito para dizer pouca coisa ou da pessoa não saber se expressar bem e ser confusa na escrita.
Capítulo 1 - Conceitos Básicos sobre Lógica de Programação e Algoritmos: - Unidade 1 ? Introdução a Algoritmos e à Lógica de Programação
Guia normalização trabalhos acadêmicos
O presente guia tem o objetivo de orientar o usuário na elaboração do seu trabalho acadêmico. Para...