Programação 1 Linguagem C (UFRPE)
January 14, 2017 | Author: aej400aej | Category: N/A
Short Description
Download Programação 1 Linguagem C (UFRPE)...
Description
Universidade Federal Rural de Pernambuco 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
Sumário Carta aberta aos alunos .................................................................................. 5 Capítulo 1 - Conceitos Básicos sobre Lógica de Programação e Algoritmos 7 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 Conceitos Básicos sobre Linguagens.......................................................... 20
Carta aberta aos alunos 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? Sandra de Albuquerque Siebra
Introdução à Programação
Capítulo 1 - Conceitos Básicos sobre Lógica de Programação e Algoritmos Carga horária do capítulo: 30 horas
Objetivos do Capítulo 1 • 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.
Conteúdo Programático do Capítulo 1 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
7
Introdução à 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).
8
Introdução à Programação
Unidade 1 – Introdução a Algoritmos e à Lógica de Programação A programação é a arte de fazer com que o computador faça exatamente o que desejamos que ele faça. Dessa forma, programar é criar uma rotina para que, seguindo uma lógica passo-a-passo, possamos alcançar a resolução de um problema computacional. A esse passo a passo para resolução do problema, chamamos de algoritmo. A palavra ALGORITMO pode parecer estranha, mas fazemos uso de algoritmos constantemente na nossa vida cotidiana, nas mais diversas situações (ex: para acordar, para dirigir, para fazer a barba, para cozinhar, etc). Vamos exemplificar melhor. Olhando para o quadro I, seria ele um algoritmo?
Quadro 1 - Seria este um algoritmo?
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ê 9
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 10
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.
Figura 1
11
Introdução à Programação
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.
Fases Básicas da Construção de Algoritmos 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). 12
Introdução à Programação
Figura 2 - Dispositivos para Entrada de Dados
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).
Figura 3 - Dispositivo de Saída de Dados
Sendo assim, se formos pensar, veremos que muitas coisas que fazemos são um algoritmo e possuem essas três fases. Por exemplo, quando eu falo com alguém, eu espero o que a pessoa vai me dizer (entrada), então penso (processamento) e dou uma resposta para a pessoa (saída). Sempre ficará mais fácil começar a organizar a seqüência lógica do algoritmo, se você identificar no problema essas três fases:
13
Introdução à Programação
Figura 4
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)
Representação de Algoritmos 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 14
Introdução à Programação
melhor cada uma dessas representações. Descrição Narrativa 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).
Figura 5
Quadro 2 - Algoritmo para tomar banho (Descrição Narrativa)
15
Introdução à Programação
Quadro 3 - Algoritmo para Calcular a Média de um Aluno (Descrição Narrativa)
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. Fluxograma Tentando eliminar a ambigüidade e procurando fazer uso de uma ferramenta já usada na área de administração (o fluxograma), passouse a fazer uso de símbolos gráficos padronizados para representar algoritmos. Nessa representação formas geométricas diferentes implicam em ações, instruções ou comandos distintos. Isso pode ajudar no entendimento do algoritmo e a eliminar a ambigüidade. Esta forma é intermediária à descrição narrativa e ao pseudocódigo (subitem seguinte), pois é mais precisa do que a primeira, porém, não se preocupa com detalhes de implementação do programa, como o tipo das variáveis usadas.
16
Introdução à Programação
Os principais símbolos do fluxograma são apresentados na Figura 6, ao lado de cada símbolo está a sua utilização. Além desses símbolos, as setas que os unem, indicarão a direção do fluxo de execução do algoritmo. E dentro de cada símbolo, deve ser escrito o que ocorrerá naquela fase.
Figura 6 - Simbologia do Fluxograma
Vamos ilustrar o uso para que você possa entender melhor. Suponha um algoritmo para calcular a média de um aluno e apresentar ela para o usuário. Como ele ficaria representado usando fluxograma? Começamos o fluxograma usando o símbolo de início. Depois, dentro do símbolo para entrada de dados, colocamos as duas notas do aluno que foram chamadas de N1 e N2 No símbolo de processamento ficou o cálculo da média do aluno. Dessa forma Média recebe (uso do símbolo para indicar a atribuição de um valor) o valor de N1 somado com N2 e dividido por 2. Depois que a média é calculada, usamos o símbolo de saíd•a de dados para dizer o que queremos que seja apresentado ao usuário Finalmente, o símbolo de Fim é usado para indicar que o fluxograma acabou. Figura 7 - Fluxograma para Calcular a Média de um aluno
E, agora, se fosse o mesmo algoritmo descrito no Quadro 3 (Calcular a Média de um Aluno), onde se precisa checar se o aluno foi aprovado ou não?. Como ficaria?
17
Introdução à Programação
Figura 8 - Fluxograma mais completo para calcular a média de um aluno
Se prestar atenção toda a primeira parte do algoritmo é igual ao fluxograma anterior. Porém, a partir desse ponto, precisamos usar o símbolo de decisão. O texto que é colocado dentro desse símbolo, é o que você quer questionar. No caso “A média é maior ou igual a 6,0?” (expresso como “Média >= 6,0”). A partir daí, se a resposta a pergunta for verdadeira (V), no símbolo de saída de dados vemos a palavra “aprovado”. Senão, se a resposta a pergunta for falso (F), dentro do símbolo de saída de dados colocamos a palavra “reprovado”. Em qualquer um dos casos, depois de mostrar na tela a mensagem apropriada, o fluxograma termina, indicando que o algoritmo termina aí. Para isso, usamos o símbolo de Fim. Qual a vantagem do fluxograma? Ele é uma ferramenta conhecida em outras áreas fora a informática. Além disso, as figuras dizem muito mais que palavras, podem facilitar o entendimento do que deve ser feito no algoritmo. Adicionalmente, o fluxograma tem um padrão mundial de símbolos bem definidos, logo, poderá ser compreendido em qualquer lugar. E as desvantagens? Apesar de mais claro para ler, evitando a ambigüidade, o fluxograma dá pouca atenção aos dados, não oferecendo recursos para descrevêlos ou representá-los. Isso vai fazer diferença na hora de implementar mesmo o algoritmo em uma linguagem de programação. Porque quando estiver programando, você vai precisar definir o tipo (número inteiro, número com ponto flutuante, caracter, etc) de cada variável. 18
Introdução à Programação
Além disso, o fluxograma pode se tornar complicado de ler e entender, à medida que cresce muito (por exemplo, as linhas podem começar a se cruzar). Linguagem Algorítmica ou Pseudocódigo Essa linguagem surgiu para tentar suprir as deficiências das outras representações. Consiste na definição de uma pseudolinguagem de programação, cujos comandos são em português, mas já lembram um pouco a estrutura de uma linguagem de programação estruturada, ou seja, a pseudolinguagem se assemelha muito ao modo como os programas são escritos. Isso vai permitir que os algoritmos nela representados possam ser traduzidos, quase que diretamente, para uma linguagem de programação. Como essa é a forma de representação mais utilizada, nós vamos explicá-la, em detalhes, na Unidade 2 (tenha só um pouquinho de paciência!). Por isso, agora, só para ilustrar, vamos apresentar o mesmo algoritmo de calcular a média de um aluno (do Quadro 3) usando a linguagem algorítmica.
algoritmo “calcularMedia” var N1, N2, Media : real inicio leia(N1, N2) Media =6 entao escreva(“aprovado”) senao escreva(“reprovado”) fimse fimalgoritmo
As palavras em negrito são palavras reservadas da linguagem algorítmica.
19
Introdução à Programação
Quais as vantagens da linguagem algorítmica? Apesar de lembrar uma linguagem de programação, ela usa o português como base, e isso pode facilitar para quem está aprendendo. Ela é a forma de representação mais poderosa de todas porque nela é possível definir, com riqueza de informações, quais os dados que serão utilizados, o tipo dos mesmos e até se eles serão agrupados (estruturados) de alguma forma (para formar conjuntos). Além disso, a passagem do algoritmo em linguagem algorítmica para uma linguagem de programação qualquer é quase imediata. E, já existem ferramentas para executar um programa escrito em linguagem algorítmica (não se preocupe, vamos usar uma!) Quais as desvantagens? Ter de fazer uso de uma linguagem que não é real para trabalho (porque ela é uma pseudo linguagem). Outro ponto é que a linguagem algorítmica não é padronizada (podem existir várias versões da mesma).
Conceitos Básicos sobre Linguagens Essa unidade se chama Introdução a Algoritmos e à Lógica de Programação. Até agora, só falamos de algoritmos, onde entra a lógica de programação? Bem, antes de definir lógica de programação, vamos definir o que é lógica.
Lógica é a ciência que estuda as leis do raciocínio; é a correção/validação do pensamento; é o encadeamento, ordenação de idéias; É a arte de bem pensar.
Por exemplo, usando a lógica, temos que se Rosa é mãe de Ana; Paula é filha de Rosa e Júlia é filha de Ana. Então, a partir do que foi dito, podemos dizer que Júlia é neta de Rosa e sobrinha de Paula. Outro exemplo, se o guarda-roupa está fechado e a camisa que quero está no guarda-roupa, então, preciso primeiro abrir o guarda-roupa para poder pegar a camisa. Entendeu como funciona a lógica? Ao nos depararmos com um problema, usamos o conhecimento que já temos para tentar deduzir, produzir uma nova informação. E agora, a lógica de programação, o que é?
20
Introdução à Programação
Lógica de Programação é o encadeamento lógico de instruções para o desenvolvimento de programas.
Pela definição acima, podemos dizer que lógica de programação é o que você utiliza para analisar um problema, definir passos para resolvê-lo e implementá-lo em uma linguagem de programação. Ou seja, é o raciocínio usado para criar um algoritmo para resolver um determinado problema e depois transformar esse algoritmo em um programa. E o que é um programa?
Programa é a implementação das instruções de um algoritmo em uma linguagem de programação.
Uma instrução representa um passo do algoritmo. É uma ação elementar que deve ser executada. Ou seja, uma ação que não pode ser subdividida. Por exemplo, “trocar a lâmpada” não é uma instrução, pois é uma ação que pode ser subdividida em várias outras (desligar o interruptor da luz, subir na cadeira, girar a lâmpada queimada até solta-la do bocal, colocar a lâmpada nova no bocal, etc). Já “desligar o interruptor da luz” é uma ação elementar, logo, ela é uma instrução do algoritmo para trocar uma lâmpada. E a linguagem de programação, o que é? Ela é o conjunto finito de palavras, comandos e instruções escritos com o objetivo de orientar a realização de uma tarefa pelo computador. Em computação, uma linguagem de programação é a ferramenta de comunicação entre o programador que visa resolver um problema e o computador que irá ajudá-lo a resolver este problema. Alguns exemplos de linguagem de programação são C, Pascal, Java, C#, PHP e Phyton. Cada uma dessas linguagens tem suas características, palavras reservadas, comandos, regras e convenções para “conversar” com o computador. Porém, há um problema aí. Como os computadores vão entender o que é escrito em uma linguagem de programação (que é uma linguagem de alto nível), se eles só entendem linguagem de máquina (que é uma linguagem de baixo nível)? Epa, peraí... para poder responder a essa pergunta, vamos primeiro esclarecer alguns dos termos usados acima. Logicamente, a linguagem que nós utilizamos em nosso cotidiano é diferente da linguagem utilizada pelo computador. O computador 21
Introdução à Programação
trabalha somente com códigos numéricos, baseados nos números 0 e 1 (sistema binário), que representam impulsos elétricos, ausente (zero) e presente (um). Assim, qualquer linguagem de programação deve estar situada entre dois extremos: o da linguagem natural do homem (muito clara, porém lenta e ambígua) e o da linguagem de máquina (muito rápida, porém complexa para ser utilizada por “gente normal”). Este é o conceito de nível de linguagem: linguagem de alto nível são aquelas mais próximas da linguagem humana (dá pra entender o que está escrito); linguagem de baixo nível são aquelas mais semelhantes à linguagem de máquina. Para deixar mais claro, vamos detalhar um pouco mais o que é essa tal de linguagem de máquina.
Figura 9
Todas as instruções que o computador precisa executar ficam codificadas na sua memória (memória RAM), em uma linguagem própria que é a linguagem de máquina (a única que ele entende). A linguagem de máquina só apresenta ZEROS e UNS. Um exemplo de instrução seria 1001000101001100011. O resultado da execução dessa instrução variaria de acordo com o tipo de computador utilizado: um Macintosh fará uma coisa, um computador da linha PC fará outra, etc. Pois cada computador tem seu conjunto único de instruções, definido pelo fabricante do chip. Cada instrução identifica uma alteração e/ou consulta do valor de uma posição da memória do computador. Como a linguagem de máquina é bem complicada e muda de computador para computador, construir um programa diretamente nessa linguagem pode ser muito difícil, tedioso e demorado. Dessa forma, os programas são escritos em linguagens de alto nível (como C ou Java, por exemplo) e são convertidos (traduzidos) para a linguagem de máquina específica, para que possam ser executados pelo computador. Por exemplo, vamos supor uma soma de dois valores, tendo que o val2 vai receber a soma dele mesmo com o val1. Essa instrução seria facilmente escrita em uma linguagem de 22
Introdução à Programação
alto nível (val2 são obrigatórios e os que estão entre colchetes [ ] são opcionais. Agora, 8
Introdução à Programação
vamos explicar, resumidamente, o código do Quadro 1: • Algoritmo é uma palavra que indica o início da definição de um algoritmo em forma de pseudocódigo. • é um nome simbólico dado ao algoritmo com a finalidade de distinguí-los de outros algoritmos que você possa vir a criar. Esse nome deverá vir entre aspas. • - é uma parte opcional do algoritmo e indica a área onde será feita a declaração dos valrores constantes (que não vão mudar durante a execução do algoritmo). Mais detalhes, daqui a pouco. • var – é uma parte opcional do algoritmo e indica a área onde será feita a declaração de variáveis (que vamos saber o que é daqui a pouco) do algoritmo. Uma vez que essa parte exista no algoritmo, devese indicar a área de declaração com a palavra var e, depois dela, obrigatoriamente, especificar que variáveis serão usadas no algoritmo. Paciência que explicaremos isso em detalhes, mais a frente. • consiste de uma área opcional do algoritmo onde são definidos os subalgoritmos, ou seja, algoritmos que podem ser criados dentro de outros. Isso será assunto do módulo 2. Logo, por agora, apenas saiba que esse seria o lugar onde os sub-algoritmos, também chamados de sub-rotinas entrariam. • início e fimalgoritmo são respectivamente as palavras que delimitam o início e o fim do conjunto de instruções do corpo do algoritmo, que é o lugar onde vai ocorrer todo o processamento (realização de cálculos, leituras de dados, saída de dados, operações, etc). No Quadro 1, as palavras indicadas em negrito são palavras reservadas da linguagem algorítmica. Você poderia então perguntar: e o que são palavras reservadas? Palavras Reservadas são palavras que fazem parte da estrutura de uma linguagem (como, por exemplo, a linguagem algorítmica). Ou seja, elas têm significados pré-determinados dentro da linguagem e, por causa disso, não podem ser usadas para outra finalidade diferente daquela que foi especificada na linguagem. Por exemplo, na 9
Introdução à Programação
linguagem algorítmica a palavra Algoritmo é uma palavra reservada que indica o início da definição do algoritmo. Dessa forma, você não pode usar essa palavra em nenhuma outra parte do algoritmo: nem na declaração de variáveis, nem como parte das instruções, comandos, cálculos ou expressões do corpo do algoritmo. A utilização indevida de palavras reservadas causam erros no processo de compilação. Apenas para ilustrar, as palavras reservadas da linguagem algorítmica que vamos utilizar são: aleatorio
enquanto
funcao
para
algoritmo
entao
inicio
passo
arquivo
escolha
int
pausa
asc
escreva
inteiro
pos
ate
escreval
interrompa
real
carac
faca
leia
procedimento
caracpnum
falso
limpatela
repita
caractere
fimalgoritmo
logico
retorne
caso
fimenquanto
maiusc
se
compr
fimescolha
minusc
senao
copia
fimfuncao
mod
timer
cronometro
fimpara
nao
var
debug
fimprocedimento numpcarac
vetor
e
fimrepita
ou
verdadeiro
eco
fimse
outrocaso
xou
Você não precisa se preocupar em decorar essas palavras! Nem nós vamos explicar todas elas agora. Essas palavras irão aparecendo no decorrer das explicações dessa unidade e, também, do próximo módulo. É só ter paciência, ok? Ah, uma coisa que ia esquecendo, a linguagem algorítmica não faz distinção entre letras maiúsculas e minúsculas. Ou seja, a palavra Algoritmo seria reconhecida dentro da linguagem da mesma forma que a palavra algoritmo. Porém, há linguagens (como por exemplo, C e Java) onde essas palavras seriam consideradas diferentes.
10
Introdução à Programação
Agora, também, apenas para ilustrar, ou seja, você não precisa se preocupar em entender esse código agora, vamos dar um exemplo do uso da linguagem algorítmica para aquele caso que já apresentamos em descrição narrativa e fluxograma de “calcular a média de dois alunos a partir de duas notas dadas”. Esse exemplo pode ser visto no Quadro 5.
Algoritmo “calcularMedia” var N1, N2, Media : real inicio leia(N1, N2)
Media =6 entao escreva(“aprovado”) senao escreva(“reprovado”) fimse
fimalgoritmo Quadro 5 - Exemplo de uso da linguagem algorítmica para calcular a média de um aluno
Como afirmei antes: não se assuste! Mais à frente, vamos explicar melhor cada pedacinho desse código. E, logo, logo, ele vai ficar mais claro para você.
E aí? Por onde começo? Antes de destrinchar melhor a linguagem algorítmica, há uma questão que muitos alunos costumam me perguntar: quando eu vou construir um algoritmo, por onde eu começo? Bem, vou dar umas dicas que podem ser úteis para você nesse sentido. 1. Primeiro: antes de começar, tente entender o que o problema está pedindo. Como fazer isso? Leia o enunciado do problema com atenção, para tentar entender, em linhas gerais, o que está sendo pedido. Se você não entender o que o problema quer dizer, fatalmente vai construir o algoritmo errado que, provavelmente, não vai resolver o problema, não vai satisfazer o objetivo. Fazendo um paralelo... Imagine que você está dirigindo com uma pessoa lhe ensinando o caminho para 11
Introdução à Programação
chegar ao lugar desejado (o objetivo). Se a pessoa dissesse para você dobrar na próxima rua à direita e você entendesse errado e dobrasse na próxima rua à esquerda, com certeza você não chegaria ao destino desejado, não é? 2. Segundo: leia novamente o problema para identificar as três fases de resolução do problema que são: ENTRADA – o que você identificou que vai precisar que o usuário ou alguém lhe informe? (via teclado, leitor de código de barras ou mouse). Ou seja, os valores de trabalho do algoritmo, o que precisa ser perguntado ao usuário. Normalmente, na descrição dos problemas elas aparecem, mais ou menos, assim: • “Escreva um programa que recebe 2 notas de aluno e calcula a média aritmética delas.” • “Escreva um algoritmo para ler o preço e a quantidade de um produto e calcula o preço a pagar pelo mesmo.” • “Escreva um algoritmo para calcular o salário líquido de um funcionário, a partir do número de horas trabalhadas e da quantidade de dependentes. Sabe-se que o valor da hora é de 12 reais, que se recebe 40 reais por cada dependente e que é descontado um total de imposto de 12% do valor do salário bruto (salário sem descontos)”. Você consegue identificar nos enunciados (descrições do problema) acima os valores que deverão ser fornecidos na entrada? Leia atentamente. Os valores estão indicados em itálico. Veja que é justamente o que você precisa ter para poder calcular o que o problema está pedindo. Por exemplo, no primeiro exemplo, você precisa das duas notas (entrada) para poder calcular a média solicitada. No segundo exemplo, você precisa do preço e da quantidade para calcular o valor a pagar. E, no último exemplo, você precisa do número de horas trabalhadas e da quantidade de dependentes para poder calcular o salário do funcionário. Qualquer dado que precise ser informado pelo usuário (por exemplo, através de digitação de valores) é considerado um dado de entrada.
PROCESSAMENTO - que tipo de cálculos serão necessários para resolver o problema? Há alguma checagem a ser feita com os dados? Existe alguma decisão a ser tomada dentro do algoritmo? Existem 12
Introdução à Programação
operações de processamento que precisarão ser realizadas mais de uma vez? Ou seja, o que é preciso fazer para que o algoritmo gere as saídas esperadas? Vejamos os mesmos exemplos anteriores. • No primeiro exemplo, para calcular a média aritmética, sabemos que o processamento é somar as duas notas e dividir por dois: (nota1 + nota2)/2 • No segundo exemplo, para calcular o valor a pagar, seria multiplicar o preço do produto, pela quantidade comprada: preço unitário x quantidade comprada • O terceiro exemplo é o mais elaborado, pois precisaríamos fazer em mais de um passo o cálculo. Vamos lá! Se você reler o problema, teríamos que: Para calcular o valor do salário bruto (só os ganhos da pessoa, sem os decontos), teríamos de multiplicar as horas trabalhadas pelo valor da hora fornecido (12 reais) e somar com a quantidade de dependentes, multiplicada pelo valor pago por dependente (fornecido como 40 reais). Dessa forma: Salário bruto = (horas trabalhadas x 12) + (no. Dependentes * 4) Agora, para calcular o salário líquido, teríamos de descontar os impostos do salário bruto. O problema diz que é descontado do salário bruto, 12% de impostos . Dessa forma, ficaríamos com: Salário líquido = salário bruto – ((12 * salário bruto)/100) • Um exemplo adicional de processamento seria “Leia um número qualquer e diga se ele é maior ou menor que zero, imprimindo uma mensagem apropriada”. Nesse caso, o processamento não seria calcular alguma coisa, mas sim fazer uma checagem (no caso se o número é maior ou menos que zero). • SAÍDA – quais os resultados que necessitarão ser apresentados aos usuários? O que deve ser impresso pelo algoritmo na tela/monitor do computador? Geralmente, essa parte vem expressa no enunciado do problema, é o que o problema ta pedindo. Por exemplo, a saída do primeiro exemplo, é a média aritmética das notas. A saída do segundo exemplo, o preço a pagar pelo produto e no terceiro exemplo, o salário líquido do funcionário. Às vezes, na saída, você 13
Introdução à Programação
pode precisar, também, dar alguma mensagem. Por exemplo, naquele caso de checar se o número é maior ou menor que zero, você, provavelmente, precisaria escrever na tela “O número é maior do que zero” ou “o número é menor do que zero”. Isso também é saída
Identificadores Identificadores são nomes únicos definidos pelos programadores para identificar/distinguir os elementos de um algoritmo, tais como: o nome do algoritmo, as constantes e as variáveis (essas duas últimas, veremos daqui a pouco o que são). Para definir esses nomes únicos, algumas regras devem ser seguidas: • O nome do identificador deve sempre começar por uma letra (caractere alfabético). Ou seja, o primeiro caractere do nome deve ser uma letra. • Depois, os outros caracteres depois do primeiro podem ser letras ou números. • Não é permitido o uso de espaço em branco ou de caracteres especiais, tais como: @, #, &, *, -, +, ?, $, etc. O único caractere especial permitido é o _ (subescrito). Por exemplo, nome_completo. • Maiúsculas e minúsculas são consideradas letras iguais, logo a palavra Nome é igual a palavra nome. • O nome dos identificadores não deve ter acentuação, nem fazer uso do cedilha (ç). • O nome do identificador não pode ser igual a nenhuma palavra reservada da linguagem algorítmica. • O nome deve ser significativo. Ou seja, deve expressar o valor que ele pretende representar. Por exemplo, um identificador chamado X, não diz nada. Você não terá a menor idéia do que valor está guardado nele. Porém um identificador chamado nota1, você sabe que, provavelmente, o valor guardado nesse identificador é o da primeira nota. • Você não pode ter dois identificadores de mesmo nome dentro do algoritmo.
14
Introdução à Programação
Baseados nessas regras, alguns exemplos de identificadores válidos, corretos, são: salario_minimo, nome, cpf, numeroChassi. Agora, alguns exemplos de identificadores inválidos, incorretos, com o problema apresentado entre parênteses: • vm (o nome não é significativo) • 13salario (identificador tem de começar por uma letra) • salárioR$, %desconto, km/h, (o nome do identificador não poder ter símbolos especiais) • horário, preço (não se deve usar acentuação ou cedilha) • valor total (o identificador não pode ter espaço em branco) • logico, passo, algoritmo (o nome do identificador não pode ser uma palavra reservada)
Constantes, Variáveis e Tipos de Dados Como dissemos na seção anterior, constantes e variáveis são tipos de identificadores. Na verdade, elas são os elementos básicos que um programa manipula, ou seja, são os dados manipulados pelo programa. Vamos explicar isso melhor agora.
CONSTANTES Constante é um determinado valor fixo que não se modifica ao longo do tempo, durante a execução de um programa. Você deve lembrar da palavra constante da matemática. Uma das constantes mais famosas daquela área é a chamada ∏ (pi). Lembra dela? É aquela que vale 3,1415...? A idéia é ter um identificador que guarda esse valor constante que não vai ser modificado no decorrer do algoritmo. Seu uso poupa tempo quando se quer alterar um valor a cada execução do algoritmo (não durante a mesma execução), porque ao trocar o valor da constante, todas as instruções que manipulam aquele identificador da constante, irão, automaticamente, assumir o novo valor (mostraremos isso a você mais para frente, pode esperar...). A declaração (definição) das constantes do algoritmo deve ser feita na área de declaração de constantes (vide Quadro 1), logo depois da definição do nome do algoritmo. O formato da declaração é o 15
Introdução à Programação
seguinte: =
Por exemplo: PI
View more...
Comments