Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 1 1 – INTRODUÇÃO AOS ALGORITMOS Desde o início de sua existência, o homem procurou criar máquinas que o auxiliassem em seu trabalho, diminuindo esforço e economizando tempo. Dentre essas máquinas, o computador vem se mostrando uma das mais versáteis, rápidas e seguras. Como já vimos no início das nossas aulas, a tecnologia atual de computadores está baseada na construção de equipamentos formados por circuitos eletrônicos, cabos e fontes de alimentação que são precisos na identificação distinta entre dois tipos de sinais elétricos, caracterizados pela passagem de corrente elétrica em um sentido, ou no seu sentido inverso. Por isso, os computadores representam dados e operações por meio de dois símbolos, constituindo a linguagem binária, usualmente descrita com 0 e 1 (zero e um). A seqüência descritiva de um conjunto de símbolos (0 e 1) em linguagem de binária, também chamada de linguagem de máquina, pode representar dados e/ou operações a serem executadas pelo computador. Cada um dos símbolos existentes neste conjunto é chamado de bit (a menor unidade de armazenamento de dados), onde a junção de oito bits forma o conhecido byte. Por exemplo: O conjunto de símbolos representado no exemplo acima pode estar descrevendo, em linguagem de máquina, um simples dado a ser armazenado na memória do computador ou ainda uma operação a ser realizada por este (por exemplo, uma adição entre dois valores numéricos), onde seu resultado será armazenado pelo computador. A utilização desta linguagem permite ao computador realizar o armazenamento e a manipulação dos dados entre os diversos dispositivos eletrônicos que o compõe. Suponha a necessidade do armazenamento de dois valores numéricos a serem somados (operação aritmética de adição entre eles), para na seqüência ser apresentado o resultado desta operação (resultado da adição). Primeiramente, o computador necessitará armazenar estes dois valores numéricos, quando estes lhe forem informados. Em seguida, ele efetuará a operação de adição entre os valores, armazenando o seu resultado, que posteriormente poderá ser apresentado ao usuário (pessoa que utiliza o computador). Mas para que isto aconteça, precisamos desenvolver a lógica humana e computacional, ou seja, as instruções passadas ao computador, através dos programas, são passadas da linguagem de programação para a linguagem de máquina. O nossa tarefa aqui é desenvolver o algoritmo e codificá-lo em uma linguagem de programação. Portanto, o computador pode auxiliá-lo em qualquer tarefa. É consciente, trabalhador, possui muita energia, mas não tem iniciativa, nenhuma independência, não é criativo nem inteligente, por isso precisa receber instruções nos mínimos detalhes. A finalidade de um computador é receber, manipular e armazenar dados. Visto somente como um gabinete composto de circuitos eletrônicos, cabos e fontes de alimentação, certamente ele parece não ter nenhuma utilidade. O computador só consegue armazenar dados em discos, imprimir relatórios, gerar gráficos, realizar cálculos, entre outras funções, por meio de programas. Portanto, sua finalidade principal é realizar a tarefa de processamento de dados, isto é, receber dados por um dispositivo de entrada (por exemplo, teclado, mouse, scanner, entre outros), realizar operações com esses dados e gerar uma resposta que será expressa em um dispositivo de saída (por exemplo, impressora, monitor de vídeo, entre outros). Assim, um computador possui duas partes diferentes que trabalham juntas: o hardware, composto pelas partes físicas, e o software, composto pelos programas. Quando queremos criar ou desenvolver um software para realizar determinado tipo de processamento de dados, devemos escrever um programa ou vários programas interligados. No entanto, para que o computador compreenda e execute esse programa, devemos escrevê-lo usando uma linguagem que tanto o computador quanto o criador de software entendam. Essa linguagem é chamada de linguagem de programação. Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 2 As etapas para o desenvolvimento de um programa são: Análise – Nesta etapa estuda-se o enunciado do problema para definir os dados de entrada, o processamento e os dados de saída. Algoritmo – Ferramentas do tipo descrição narrativa, fluxograma ou português estruturado são utilizadas para descrever o problema com suas soluções. Codificação – O algoritmo é transformado em códigos da linguagem de programação escolhida para se trabalhar. Portanto, um programa é a codificação de um algoritmo em uma linguagem de programação. 2 - NOÇÕES DE LÓGICA Características computacionais da Lógica consistem em “um esquema sistemático que define as interações de sinais no equipamento automático do processamento de dados, ou computador científico com critério e princípios formais de raciocínio e pensamento.” (Manzano, 2000, p.3). Uma definição não tão computacional de “lógica” seria: “a ciência que estuda as leis e critérios de validade que regem o pensamento e a demonstração, ou seja, a ciência de princípios formais do raciocínio” (Manzano, 2000, p.3). O uso da “lógica” para alguns profissionais é essencial e inseri um ponto divisor entre estes indivíduos, principalmente naqueles da subárea de Programação. Observe, por exemplo, a simples constatação lógica proposta no exemplo abaixo: • Hoje é sábado. • Todo sábado que não é feriado tem aula. • Hoje não é feriado. • Logo, hoje tem aula. (uma conclusão lógica) No exemplo acima os dados conhecidos (fatos) são que hoje é sábado e que não é feriado, além de que todo sábado tem aula, menos nos feriados. Assim, é possível concluir que hoje tem aula. A palavra lógica relaciona-se com a idéia de racionalidade e coerência. Exemplo: Um homem precisa atravessar um rio com um barco que possui capacidade de carregar apenas ele mesmo e mais uma das três cargas que são: um lobo, um bode e um maço de alfafas. Observe as leis naturais: o lobo é carnívoro e o bode é herbívoro. O que o homem deve fazer para conseguir atravessar o rio sem perder suas cargas. O Homem leva o bode da margem 1 para a margem 2. O Homem navega da margem 2 para a margem 1. O Homem leva o lobo da margem 1 para a margem 2. O Homem leva o bode da margem 2 para a margem 1. O Homem leva a alfafa da margem 1 para a margem 2. O Homem navega da margem 2 para a margem 1. O Homem leva o bode da margem 1 para a margem 2. Algumas definições: o "a lógica é a arte de bem pensar" o "a lógica é a ciência das formas do pensamento" o "a lógica nos ensina a colocar ordem no pensamento" Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 3 Exemplo: o Nova Andradina é uma cidade do estado de Mato Grosso do Sul. o Asdrúbal nasceu em Nova Andradina. o Portanto, Asdrúbal é Sul-matogrossense. A lógica no dia-a-dia o Quando queremos escrever, falar ou agir corretamente, precisamos colocar ordem no pensamento, isto é, utilizar a lógica. o Exemplo 1: O guarda-roupa está fechado. O terno está dentro do guarda-roupa. Preciso primeiro abrir o guarda-roupa, para depois pegar o terno. A lógica de programação o Em que consiste? A lógica de programação consiste no uso correto das leis do pensamento, da "ordem da razão", de processos de raciocínio e de simbolização formal na programação de computadores. o Qual o objetivo? Permitir a resolução de problemas específicos com soluções de boa qualidade. o O raciocínio lógico pode ser expresso através de várias linguagens: no contexto humano - utiliza-se a palavra escrita/falada que, por sua vez, se baseia num determinado idioma, mas, independente do idioma, tem-se o mesmo raciocínio. no contexto computacional - utilizam-se as linguagens de programação o Vamos utilizar uma forma de representação mais genérica (livre de detalhes computacionais) e que traduza mais fielmente o raciocínio da lógica de programação: ALGORITMOS o Então ... O objetivo da lógica de programação é a construção de algoritmos corretos e válidos. O estudo na área de Informática, mas especificamente na subárea de Programação, não tem o objetivo de ensinar ninguém a pensar, pois todas as pessoas normais já desenvolveram esta habilidade durante o seu processo de evolução (criança – jovem – adulto – velho). Porém, seu principal objetivo é apresentar, desenvolver e aperfeiçoar o raciocínio lógico possível de ser implementado em computadores e utilizados por seus usuários. Veja os exemplos... Deseja-se escrever um algoritmo, usando português coloquial, para resolver um problema bastante simples, qual seja: trocar uma lâmpada queimada por uma lâmpada nova não queimada e o outro para fazer um sanduíche de queijo. Exemplo1: Trocar uma lâmpada queimada Algoritmo 1.1 - Trocar uma lâmpada queimada pegar uma escada; posicionar a escada debaixo da lâmpada; buscar uma lâmpada nova; subir na escada; retirar a lâmpada queimada; colocar lâmpada nova; Reexaminando o algoritmo 1.1, notamos que ele tem um objetivo bem definido: trocar uma lâmpada queimada. Porém o algoritmo não atingirá seu objetivo se a lâmpada nova estiver queimada. Para tal, acrescentamos um teste condicional (estrutura seletiva). Algoritmo 1.2 - Trocar uma lâmpada queimada (uso de teste condicional) pegar uma escada; posicionar a escada debaixo da lâmpada; buscar uma lâmpada nova; subir na escada; retirar a lâmpada queimada; colocar lâmpada nova; Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 4 se a lâmpada nova não acender, então: o retirar a lâmpada queimada; o colocar lâmpada nova; o se a lâmpada nova não acender, então: retirar a lâmpada queimada; colocar a lâmpada nova; se a lâmpada nova não acender, então: retirar a lâmpada queimada; colocar a lâmpada nova; ... até quando???? O Algoritmo 1.2 não está terminado. As ações cessarão quando conseguirmos colocar uma lâmpada que acenda (objetivo do algoritmo). Ao invés de reescrevermos várias vezes um conjunto de ações podemos, alterar o fluxo seqüencial de execução para permitir que ações sejam re-executadas quantas vezes forem necessárias. Precisamos expressar essa repetição (estrutura de repetição) garantindo uma condição de parada. Algoritmo 1.3 - Trocar uma lâmpada queimada (uso de estruturas de repetição) pegar uma escada; posicionar a escada debaixo da lâmpada; buscar uma lâmpada nova; subir na escada; retirar a lâmpada queimada; colocar lâmpada nova; enquanto lâmpada nova não acender, faça retirar a lâmpada queimada; colocar lâmpada nova; 3 – CONCEITO DE ALGORITMO E ESTRUTURAS DE DADOS À especificação da seqüência ordenada de passos que deve ser seguida para a realização de uma tarefa, garantindo a sua repetibilidade, dá-se o nome de algoritmo. A seguir alguns conceitos de algoritmos segundo autores da nossa bibliografia: “Algoritmo é uma sequência de passos que visa atingir um objetivo bem definido.” (FORBELLONE, 1999) “Algoritmo é uma sequência finita de instruções ou operações cuja execução, em tempo finito, resolve um problema computacional, qualquer que seja sua instância.” (SALVETTI, 1999) “Algoritmo são regras formais para a obtenção de um resultado ou da solução de um problema, englobando fórmulas de expressões aritméticas.” (MANZANO, 1997) “Ação é um acontecimento que, a partir de um estado inicial, após um período de tempo finito, produz um estado final previsível e bem definido. Portanto, um algoritmo é a descrição de um conjunto de comandos que, obedecidos, resultam numa sucessão finita de ações.” (FARRER, 1999) “Informalmente, um algoritmo é qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída. Portanto, um algoritmo é uma sequência de passos computacionais que transformam a entrada na saída.” (CORMEN, 2002) Também podemos visualizar um algoritmo como uma ferramenta para resolver um problema computacional bem especificado. O enunciado do problema especifica em termos gerais o relacionamento entre a entrada e a saída desejada. O algoritmo descreve um procedimento computacional específico para se alcançar esse relacionamento da entrada com a saída. Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 5 “Uma estruturas de dados é um meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações.” (CORMEN, 2002) “Na Ciência da Computação, uma estrutura de dados é um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente.” (WIKIPÉDIA, 2010). Para que um computador possa desempenhar uma tarefa é necessário que esta seja detalhada passo a passo, numa forma compreensível pela máquina, utilizando aquilo que se chama de programa. Neste sentido, um programa de computador nada mais é que um algoritmo escrito numa forma compreensível pelo computador. 3.1 – Método para a construção de qualquer algoritmo Para a construção de qualquer tipo de algoritmo, é necessário seguir estes passos: Definir o processamento, ou seja, quais cálculos serão efetuados e quais as restrições para esses cálculos. Definir os dados de saída, ou seja, quais dados serão gerados. Definir os dados de entrada, ou seja, quais dados serão fornecidos. Construir o algoritmo utilizando um dos tipos. Compreender completamente o problema a ser resolvido, destacando os objetos que o compõem. Testar o algoritmo realizando simulações. 4 – TIPOS DE ALGORITMOS Os três tipos mais utilizados de algoritmos são: descrição narrativa, fluxograma e pseudocódigo ou portugol. 4.1 – Descrição narrativa A descrição narrativa consiste em analisar o enunciado do problema e escrever, utilizando uma linguagem natural (por exemplo, a língua portuguesa), os passos a serem seguidos para sua resolução. Vantagem: não é necessário aprender nenhum conceito novo, pois uma língua natural, neste ponto, já é bem conhecida. Desvantagem: a língua natural abre espaço para várias interpretações, o que posteriormente dificultará a transcrição desse algoritmo para programa. Exemplo: Algoritmo para somar três números Receber os três números. (passo1) Somar os três números. (passo2) Mostrar o resultado obtido. (passo 3) 4.2 - Fluxograma O fluxograma consiste em analisar o enunciado do problema e escrever, utilizando símbolos gráficos predefinidos, os passos a serem seguidos para sua resolução. Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 6 Vantagem: o entendimento de elementos gráficos é mais simples que o entendimento de textos. Desvantagem: é necessário aprender a simbologia dos fluxogramas e, além disso, o algoritmo resultante não apresenta muitos detalhes, dificultando sua transcrição para um programa. Símbolos utilizados: Exemplo: Algoritmo para multiplicar dois números 4.3 - Pseudocódigo ou Portugol O Pseudocódigo ou Portugol é o tipo que utilizaremos para as soluções dos exercícios das nossas aulas e consiste em analisar o enunciado do problema e escrever, por meio de regras predefinidas, os passos s serem seguidos para sua resolução. Vantagem: a passagem do algoritmo para qualquer linguagem de programação é quase imediata, bastando conhecer as palavras reservadas dessa linguagem que serão utilizadas. Desvantagem: é necessário aprender as regras do pseudocódigo. Exemplo: Algoritmo para dividir dois números algoritmo dividir declaração de variáveis inteiro numero1,numero2; início escreva(“Digite o primeiro número: “); leia(numero1); escreva(“Digite o segundo número: “); leia(numero2); se(numero2 = 0) então escreva(“Impossível dividir”); fim se senão resultadonumero1/numero2; escreva(“A divisão é: “, resultado); fim senão fim_algoritmo Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 7 Exercícios: 1 – Faça um algoritmo em descrição narrativa para: a) Ir para a escola (ou universidade). b) Sacar dinheiro no caixa eletrônico. 2 – Faça um algoritmo em fluxograma para mostrar o resultado da divisão de dois números. 5 – CONCEITO DE VARIÁVEL Um algoritmo, e posteriormente, um programa, recebem dados, que precisam ser armazenados no computador para serem utilizados no processamento. Esse armazenamento é feito na memória. Assim, uma variável representa uma posição de memória. Possui nome e tipo e seu conteúdo pode variar ao longo do tempo, durante a execução de um programa. Embora uma variável possa assumir diferentes valores, ela só pode armazenar um valor a cada instante. 6 – TIPOS DE DADOS Definem os tipos de informações a serem processadas. Os tipos de dados mais utilizados são: numéricos e literais ou caracteres. Numéricos: inteiros e reais Inteiros – podem ser positivos ou negativos e não possuem parte fracionária. Exemplo: 15 irmãos, -2 graus. Real - podem ser positivos ou negativos e possuem parte fracionária. Exemplo: 1.73 de altura, 3.5 litros. Literais ou Caracteres São dados formados por um único caractere ou por uma cadeia de caracteres. Esses caracteres podem ser as letras e os números (não podem ser usados para cálculos). Exemplo: „aluno‟, „12345‟. 7 – FORMAÇÃO DE IDENTIFICADORES Os identificadores são os nomes das variáveis, dos programas, das constantes, das rotinas etc. As regras básicas são: Os caracteres que você pode utilizar são: os números, as letras maiúsculas, as letras minúsculas e o caractere sublinhado. O primeiro caractere deve ser sempre uma letra ou caractere sublinhado. Não são permitidos espaços em branco e caracteres especiais (@,$,+,-,%,!). Não podemos usar palavras reservadas nos identificadores, ou seja, palavras que pertençam a uma linguagem de programação. Exemplos: Válidos A a nota numero_1 x4 Não válidos 5b – por começar com número E 39 – por conter espaço em branco Case – por ser palavra reservada Exercício: defina os identificadores abaixo se são válidos ou não válidos, neste caso justifique: a) dia b) prova 2 c) idade_1 d) 4y Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 8 8 – ESTRUTURA SEQUENCIAL algoritmo Nome_do_algoritmo declaração de variáveis variáveis inicio bloco de comandos; fim_algoritmo 8.1 – Declaração de variáveis As variáveis são declaradas após a palavra declaração de variáveis e os tipos mais utilizados são: numérico (inteiro ou real) e literal (caracteres). Exemplo: inteiro x; real y; literal i; 8.2 – Comando de atribuição O comando de atribuição é utilizado para conceder valores ou operações a variáveis, sendo representado pelo símbolo . Exemplo: x 4; y 2.5; i “A”; 8.3 – Comando de Entrada O comando de entrada é utilizado para receber dados digitados pelo usuário, que serão armazenados em variáveis. Esse comando é representado pela palavra leia. Exemplo: leia(x); Um valor digitado pelo usuário será armazenado na variável x. 8.4 – Comando de saída O comando de saída é utilizado para mostrar dados na tela. Esse comando é representado pela palavra escreva, e os dados podem ser conteúdos de variáveis ou mensagens. Exemplo: escreva(x); Mostra o valor armazenado na variável x. escreva(“Conteúdo de Y: “,y); Mostra a mensagem “Conteúdo de Y: “ e em seguida o valor armazenado na variável y. Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 9 Exercício resolvido: 1 – Faça um algoritmo que receba dois números inteiros, calcule e mostre a soma desses números. algoritmo Somar declaração de variáveis inteiro num1,num2,soma; início escreva(“Digite o número 1: ”); leia(num1); escreva(“Digite o número 2: ”); leia(num2); somanum1+num2; escreva(“Resultado: ”,soma); fim_algoritmo Exercícios: 1 – Faça um algoritmo que receba três notas e seus respectivos pesos, calcule e mostre a média ponderada. 2 – Faça um programa que receba o salário de um funcionário e o percentual de aumento, calcule e mostre o valor do aumento e o novo salário. 3 – O custo ao consumidor de um carro novo é a soma do preço de fábrica com o percentual de lucro do distribuidor e dos impostos aplicados ao preço de fábrica. Faça um programa que receba o preço de fábrica de um veículo, o percentual de lucro do distribuidor e o percentual de impostos, calcule e mostre: a) o valor correspondente ao lucro do distribuidor; b) o valor correspondente aos impostos; c) o preço final do veículo. 4 – Faça um programa que calcule e mostre a área de um triângulo. Sabe-se que: A=(base*altura)/2. 5 – Faça um programa que calcule e mostre a área de um círculo. Sabe-se que: . 6 – Faça um programa que receba um número positivo e maior que zero, calcule e mostre: a) o número digitado ao quadrado; b) o número digitado ao cubo; c) a raiz quadrada do número digitado; 7 – Faça um programa que receba a medida do ângulo formado por uma escada apoiada no chão e encostada na parede e a altura da parede onde está a ponta da escada, calcule e mostre a medida desta escada. 8 – Uma pessoa deseja pregar um quadro em uma parede. Faça um programa para calcular e mostrar a que distância a escada deve estar da parede. A pessoa deve fornecer o tamanho da escada e a altura em que deseja pregar o quadro. Lembre-se de que o tamanho da escada deve ser maior que a altura que se deseja alcançar. X – Altura em que deseja pregar o quadro Y – Distância em que deverá ficar a escada Z – Tamanho da escada 9 - Faça um programa que receba o salário base de um funcionário, calcule e mostre o salário a receber, sabendo-se que o funcionário tem gratificação de 5% sobre o salário base e paga imposto de 7% sobre este salário. Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 10 10 – Sabe-se que o quilowatt de energia custa um quinto do salário mínimo. Faça um programa que receba o valor do salário mínimo e a quantidade de quilowatts consumida por uma residência, calcule e mostre: a) o valor de cada quilowatt; b) o valor a ser pago por essa residência; c) o valor a ser pago com desconto de 15%. 9 – ESTRUTURA CONDICIONAL Este tipo de estrutura é utilizada para representar o desvio no fluxo normal de um programa, ou seja, utilizada para indicar que deve ser tomada uma decisão, apontando a possibilidade de desvios. O teste lógico segue a seguinte estrutura (ou fluxo): 9.1 – Estrutura Condicional Simples se(condição) então comando; O comando só será executado se a condição for verdadeira. Uma condição é uma comparação que possui dois valores possíveis: verdadeiro ou falso. se(condição) então início comando1; comando2; comando3; fim se Os comandos 1, 2 e 3 só serão executados se a condição for verdadeira. As palavras início e fim se serão necessárias apenas quando dois ou mais comandos forem executados. Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 11 9.2 - Estrutura Condicional Composta se(condição) então comando1; senão comando2; Se a condição for verdadeira, será executado o comando1; caso contrário, será executado o comando2. se(condição) então início comando1; comando2; fim se senão início comando3; comando4; fim senão Se a condição for verdadeira, o comando1 e o comando2 serão executados, caso contrário, o comando3 e o comando4 serão executados. 9.3 – Operadores Condicionais ou Relacionais Os operadores condicionais ou relacionais são operadores binários que devolvem os valores lógicos verdadeiro e falso. Sinal Função = Igual != Diferente > Maior que >= Maior que ou igual a < Menor que <= Menor que ou igual a Estes valores são somente usados quando se deseja efetuar comparações. Comparações só podem ser feitas entre objetos de mesma natureza, isto é variáveis do mesmo tipo de dado. O resultado de uma comparação é sempre um valor lógico Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 12 9.4 – Operadores Lógicos Os operadores lógicos ou booleanos são usados para combinar expressões relacionais. Também devolvem como resultado valores lógicos verdadeiro ou falso. Tabela E Tabela OU VeV=V V ou V = V VeF=F V ou F = V FeV=F F ou V = V FeF=F F ou F = F Uma expressão relacional ou lógica retornará falso para o valor lógico falso e verdadeiro para o valor lógico verdade. Fornecendo dois valores ou expressões lógicas, representadas por expressão1 e expressão2, podemos descrever as operações lógicas a seguir: expressão1 E expressão2 é verdadeiro somente se ambas, expressão1 e expressão2, forem verdadeiras. Se uma for falsa, ou se ambas forem falsas, a operação E também será falsa. expressão1 OU expressão2 é verdadeiro se tanto a expressão1 como a expressão2 forem verdadeiras. As operações OU só resultam em valores falsos se ambas, expressão1 e expressão2, forem falsas. Exercício resolvido 1 – Faça um algoritmo que receba duas notas de aluno, calcule e mostre a média aritmética das notas e a mensagem de “Aprovado”, se a média obtida for maior ou igual a 6.0 ou, caso contrário, “Reprovado”. algoritmo media declaração de variáveis real n1,n2,media; início escreva(“Digite a nota 1: ”); leia(n1); escreva(“Digite a nota 2: ”); leia(n2); media(n1+n2)/2; se(media >= 6) escreva(“Aprovado”); senão escreva(“Reprovado”); fim_algoritmo Exercícios: 1 – Uma agência de empregos precisa de um programa para analisar as características dos candidatos e determinar as suas funções, conforme a tabela abaixo: IDADE SEXO FUNÇÃO Até 30 anos M Guia Turístico Mais que 30 anos M Gerente Administrativo Até 40 anos F Recepcionista Mais que 40 anos F Gerente de Compras 2 – A nota final de um estudante é calculada a partir de três notas atribuídas, respectivamente, a um trabalho de laboratório, a uma avaliação semestral e a um exame final. A média das três notas mencionadas obedece aos pesos a seguir: Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 13 Faça um programa que receba as três notas, calcule e mostre a média ponderada e o conceito que segue a tabela: 3 – Faça um programa que receba um número inteiro e verifique se é par ou impar. 4 – Criar um programa para criar um menu de opções na tela, assim: 1 – Quadrado 2 – Retângulo 3 – Triângulo De acordo com a opção desejada, leia os dados necessários para calcular a área da respectiva opção. Mostrar a área calculada. 5 – Uma agência bancária possui dois tipos de investimentos, conforme o quadro a seguir. Faça um programa que receba o tipo de investimento e o valor do investimento e que calcule e mostre o valor corrigido de acordo com o tipo de investimento. 6 - Faça um programa que receba a altura e o sexo de uma pessoa e que calcule e mostre o seu peso ideal, utilizando as seguintes fórmulas: 7 - Um supermercado deseja reajustar os preços de seus produtos usando o seguinte critério: o produto poderá ter seu preço aumentado ou diminuído. Para o preço ser alterado, o produto deve preencher pelo menos um dos requisitos a seguir: VENDA MÉDIA PREÇO ATUAL % DE AUMENTO % DE DIMINUIÇÃO MENSAL < 500 < R$ 30,00 10 >= 500 E < 1200 >= R$ 30,00 e < R$ 80,00 15 >= 1200 >= 80,00 20 8 - Faça um programa que apresente o menu a seguir, permita ao usuário escolher a opção desejada, receba os dados necessários para executar a operação e mostre o resultado. Verifique a possibilidade de opção inválida e não se preocupe com restrições, como salário negativo. Menu de opções 1. Imposto 2. Novo salário 3. Classificação Digite a opção desejada. Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 14 Na opção 1: receber o salário de um funcionário, calcular e mostrar o valor do imposto usando as regras a seguir: SALÁRIO PERCENTUAL DO IMPOSTO Menor que R$ 500,00 5% De R$ 500,00 a R$ 850,00 10% Acima de R$ 850,00 15% Na opção 2: receber o salário de um funcionário, calcular e mostrar o valor do novo salário, usando as regras a seguir: SALARIO AUMENTO Maior que R$ 1500,00 R$ 25,00 De R$ 750,00 (inclusive) a R$ 1500,00 (inclusive) R$ 50,00 De R$ 450,00 (inclusive) a R$ 750,00 R$ 75,00 Menor que R$ 450,00 R$ 100,00 Na opção 3: receber o salário de um funcionário e mostrar sua classificação usando a tabela a seguir: SALARIO CLASSIFICAÇÃO Até R$ 700,00 (inclusive) Mal remunerado Maiores que R$ 700,00 Bem remunerado 9 - Faça um programa para resolver equações do 2º grau. ax2 + bx + c= 0 Δ =b2 – 4 * a * c Δ < 0 não existe raiz real Δ = 0 existe uma raiz real x = (-b) / (2 * a) Δ > 0 existem duas raízes reais x1 = (-b + ) / (2 * a) x2 = (-b - ) / (2 * a) Exercícios complementares (est. Condicional) 10 - Faça um programa que receba a medida de um ângulo em graus. Calcule e mostre o quadrante em que se localiza esse ângulo. Considere os quadrantes da trigonometria e, para ângulos maiores que 360º ou menores que -360º, reduzi-los, mostrando também o número de voltas, o sentido da volta (horário ou anti-horário) e também se está sobre algum dos eixos. 1o. quadrante 2o. quadrante 90º<ângulo<180º 0º<ângulo<90º 3o. quadrante 180º<ângulo<270º 4o. quadrante 270º<ângulo<360º 12 - Faça um programa que receba um único inteiro de 5 dígitos e verifique se o dígito d está presente no número recebido. 13 - Efetuar a leitura de quatro números inteiros e apresentar os que são divisíveis por 5. 14 - Efetuar a leitura de quatro números inteiros e apresentar os que são divisíveis por 2 e 3. 15 - Faça um algoritmo que lê o preço de uma caixa de fósforos e o preço de um isqueiro. Sabendo-se que um isqueiro pode ser acionado 1300 vezes e que uma caixa de fósforos contém 40 palitos, escreva qual dos recursos é mais barato. Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 15 16 - Faça um algoritmo que lê as dimensões A, B e C de uma sala retangular. Imagine que o piso será trocado e as paredes internas e externas pintadas. Leia também o tipo de piso a ser utilizado, bem como os tipo de tinta a ser utilizada dentro e fora da sala. Baseado na tabela de preços abaixo, calcule o custo de material desta reforma. Sabe-se que um litro de tinta cobre 3 m2 de parede. Tabela de Pisos Tipo Preço por m. quadrado 1 24.00 2 31.00 3 55.00 Tabela de Tintas Tipo Preço por litro 1 22.00 2 47.00 FUNDAMENTOS DE LINGUAGEM DE PROGRAMAÇÃO Uma linguagem de programação é um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas e semânticas usadas para definir um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias. Portanto, é um tipo de linguagem usada pelo homem para desempenhar comunicação com a máquina, pois essa não reconhece a linguagem normal do ser humano. Para que a relação homem versus máquina pudesse evoluir, fez-se necessário a criação de uma linguagem que tornasse a máquina operacional. A partir do desenvolvimento da linguagem de programação é que o ser humano passou a obter grandes resultados com a máquina. Atualmente é possível encontrar diversos tipos de linguagem de programação, sendo as principais: Java, C, C++, C#, Php, Delphi, entre outras. LINGUAGEM C/C++ Em nossas aulas utilizaremos a linguagem C++ para implementar nossos algoritmos. Os programas são: Turbo C++, Code::Blocks e freecommandtools. O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional UNIX. O C é derivado de uma outra linguagem: o B, criado por Ken Thompson. O B, por sua vez, veio da linguagem BCPL, inventada por Martin Richards. Durante alguns anos, o padrão da linguagem C foi aquele fornecido com a versão 5 do sistema operacional Unix. Com a popularização dos microcomputadores, várias implementações de C foram criadas, gerando, assim, muitas discrepâncias. Para resolver tal situação, o ANSI (American National Standards Institute) estabeleceu, em 1983, um comitê para definir um padrão que guiasse todas as implementações da linguagem C. A linguagem C++ é uma extensão da linguagem C. As instruções que fazem parte desta última representam um subconjunto da primeira. Os incrementos encontrados na linguagem C++ foram feitos para dar suporte à programação orientada a objetos. A sintaxe é basicamente a mesma da linguagem C. #include <nome_da_biblioteca> void main() { Bloco de comandos; } Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 16 Bibliotecas são arquivos contendo várias funções que podem ser incorporadas aos programas escritos em C/C++. A diretiva #include faz com que o texto contido na biblioteca especificada seja inserido no programa. As bibliotecas iostream.h e conio.h permitem a utilização de diversos comandos de entrada e saída. É importante salientar que a linguagem C/C++ é sensível as letras maiúsculas e minúsculas, ou seja, considera que letras maiúsculas são diferentes de minúsculas (por exemplo, a é diferente de A). Sendo assim, todos os comandos devem, obrigatoriamente, ser escritos em letras minúsculas. Portanto, o C é "Case Sensitive", isto é, maiúsculas e minúsculas fazem diferença. Se declarar uma variável com o nome soma ela será diferente de Soma, SOMA, SoMa ou sOmA. Da mesma maneira, os comandos do C if e for, por exemplo, só podem ser escritos em minúsculas pois senão o compilador não irá interpretá-los como sendo comandos, mas sim como variáveis. Um programa em C++ consiste em um ou mais arquivos. Um arquivo é uma porção de texto contendo código fonte em C++ e comandos do pré-processador. Em outras palavras, ele corresponde a um arquivo fonte em um sistema tradicional. A extensão dos nomes dos arquivos fonte em C++, normalmente, é ".cpp". Quando o programa começa, ele executa o código de inicialização e chama uma função especial main(), onde é colocado o código primário para o programa Um programa C++ mínimo consiste em: main() { } Este programa define a função main, que não possui argumentos e não faz nada. As chaves, { e }, são usadas para expressar agrupamentos em C++; no exemplo anterior, estas indicam o início e o fim do corpo da função (vazia) main. Cada programa em C++ deve ter uma função main. CARACTERÍSTICAS DA LINGUAGEM C/C++ Tipos de dados Definem os tipos de informações a serem processadas. Os tipos de dados mais utilizados são: numéricos e literais ou caracteres. Numéricos: Algoritmo inteiro real Em C++ int float Literais ou Caracteres Algoritmo literal Em C++ char Declaração de variáveis As variáveis são declaradas após a especificação de seus tipos. Os tipos mais utilizados são: int (inteiro) float (real) char (literal) Comandos: O comando de atribuição é utilizado para conceder valores ou operações a variáveis, sendo representado por = (sinal de igualdade). Exemplo: x = 4; y = 2.5; i = “A”; Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 17 O comando de entrada é utilizado para receber dados digitados pelo usuário, que serão armazenados em variáveis. Exemplo: cin>>x; O comando de saída é utilizado para mostrar dados na tela. Exemplos: cout<<x; Alguns operadores e funções predefinidas em C++ OPERADOR = COMENTÁRIO O conteúdo da variável y é atribuído à variável x. (A uma variável pode ser atribuído o conteúdo de outra, um valor constante ou, ainda, o resultado de uma função. + x+y Soma o conteúdo de x e de y. x-y Subtrai o conteúdo de y do conteúdo de x. * x*y Multiplica o conteúdo de x pelo conteúdo de y. / x/y Obtém o quociente da divisão de x por y. % x%y Obtém o resto da divisão de x por y. O operador % só pode ser utilizado com operandos do tipo inteiro. Os operadores matemáticos de atribuição são utilizados para representar de maneira sintética uma operação aritmética e, posteriormente, uma operação de atribuição. Por exemplo, na tabela anterior, o operador += está sendo usado para realizar a operação x + y e, posteriormente, atribuir o resultado obtido à variável x. FUNÇÃO ceil floor abs cos sin tan M_PI modf pow sqrt EXEMPLO x=y FUNÇÕES MATEMÁTICAS (utilizar a biblioteca math.h, ou seja, #include<math.h>) EXEMPLO COMENTÁRIO ceil(x) Arredonda um número real para cima. Ex.: ceil(3.2) é 4. floor(x) Arredonda um número real para baixo. Ex.: floor(3.2) é 3. abs(x) Obtém o valor absoluto de x. cos(x) Calcula o cosseno de x (x deve estar representado em radianos) sin(x) Calcula o seno de x (x deve estar representado em radianos) tan(x) Calcula tangente de x (x deve estar representado em radianos) M_PI Retorna o valor de π. z = modf(x,&y) Decompõe o número real armazenado em x em duas partes: y recebe a parte fracionária e z, a parte inteira do número. pow(x,y) Calcula a potência de x elevado a y. sqrt(x) Calcula a raiz quadrada de x. (para raiz cúbica de x, por exemplo, faríamos x elevado a 1/3, no entanto, 1/3 deve ser indicado com 1.0/3.0 divisão entre números reais, pois em C++, 1/3 indica uma divisão entre números inteiros, o que resulta um valor inteiro, isto é, 0, pois em C++, a divisão entre números inteiros sempre resulta em inteiro. Então: = x1/3 = pow(x,1.0/3.0) Algoritmos e Fundamentos de uma Linguagem de Programação – Prof. Eduardo 18 Exercícios resolvidos: Faça um algoritmo que receba dois números inteiros, calcule e mostre a soma desses números. #include <iostream.h> #include <conio.h> void main () { clrscr(); int n1, n2, resultado; cout<<\n “Digite o número 1: ”: cin>>n1; cout<<\n “Digite o número 2: ”: cin>>n2; resultado = n1 + n2; cout << "\nA soma é:" << resultado; getch(); } Faça um algoritmo que receba duas notas de aluno, calcule e mostre a média aritmética das notas e a mensagem de “Aprovado”, se a média obtida for maior ou igual a 6.0 ou, caso contrário, “Reprovado”. #include <iostream.h> #include <conio.h> void main () { clrscr(); float n1, n2, media; cout<<\n “Digite a nota 1: ”: cin>>n1; cout<<\n “Digite a nota 2: ”: cin>>n2; media = (n1 + n2)/2; cout << "\nMédia das notas:" << media; if(media >= 6) cout<<"\nAPROVADO!" else cout<<"\nREPROVADO!" getch(); }