Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Algoritmos Aplicados a Engenharia Material de apoio Professores de Algoritmos da Universidade Nove de Julho - UNINOVE 2 3 Sumário Aula 1: Conceitos de Algoritmos ................................................................................................... 7 1. Algoritmos ................................................................................................................................ 7 1.1. Descrição Narrativa ....................................................................................................... 8 1.2. Diagrama em Blocos ..................................................................................................... 9 1.3. Pseudocódigo ............................................................................................................... 10 1.4. Linguagem de Programação ..................................................................................... 11 Aula 2: Exercícios sobre o conceito básico de algoritmos .................................................. 12 1. Exercícios ............................................................................................................................... 12 Aula 3: Conceitos de Variáveis ..................................................................................................... 14 1. Tipos de Informações (Variáveis) .................................................................................... 14 1.1. Regras para nomear Variáveis .................................................................................. 15 2. Exercícios de fixação .......................................................................................................... 15 Aula 4: Operadores Aritméticos, Lógicos e Relacionais ....................................................... 17 1. Operadores Aritméticos ..................................................................................................... 17 1.1. Operadores Relacionais ............................................................................................. 18 1.2. Operadores Lógicos .................................................................................................... 18 2. Exercícios ............................................................................................................................... 19 Aula 5: Estrutura Sequencial ........................................................................................................ 21 1. Estrutura Sequencial ........................................................................................................... 21 2. Exercícios ............................................................................................................................... 23 Aula 6: Estrutura condicional ....................................................................................................... 25 1. Estrutura condicional simples .......................................................................................... 25 2. Estrutura condicional composta ou encadeada .......................................................... 26 Aula 7: Exercícios sobre estrutura condicional ....................................................................... 29 1. Exercícios ............................................................................................................................... 29 Aula 8: Estrutura de repetição ...................................................................................................... 33 1. Estrutura de repetição ........................................................................................................ 33 1.1. Estrutura de repetição com quantidade de repetições definidas (Para) ....... 34 1.3. Uso de estrutura de repetição com teste lógico no início (Enquanto) .......... 35 1.4. Estrutura de repetição com teste lógico no fim (Faça-Enquanto) .................. 36 Aula 9: Exercícios sobre estrutura de repetição ..................................................................... 37 1. Exercícios ............................................................................................................................... 37 Aula 10: Breve visão da linguagem C ......................................................................................... 39 4 1. Introdução .............................................................................................................................. 39 1.1. O compilador Dev-C++ ................................................................................................ 41 Aula 11: Introdução a linguagem C ............................................................................................. 43 1. Introdução .............................................................................................................................. 43 2. Variáveis e Tipos de Dados ............................................................................................... 43 2.1. Palavras reservadas em C ......................................................................................... 44 2.2. Identificadores .............................................................................................................. 44 2.3. Tipos de dados .............................................................................................................. 44 2.4. Variáveis de ponto flutuante ..................................................................................... 45 2.5. Declaração de variáveis .............................................................................................. 45 2.6. Inicialização de variáveis ........................................................................................... 45 3. Operadores ............................................................................................................................ 46 3.1. Operador de Atribuição .............................................................................................. 46 3.2. Operadores Aritméticos ............................................................................................. 47 Aula 12: Introdução a linguagem C (Continuação) ................................................................. 48 3.3. Operadores de Atribuição Aritmética ..................................................................... 48 3.4. Operadores Incrementais ........................................................................................... 48 3.5. Operadores Relacionais e Lógicos ......................................................................... 49 3.6. Operador Condicional ................................................................................................. 50 4. A estrutura básica de um programa em C/ C++ ........................................................... 51 5. Montando o primeiro programa ........................................................................................ 51 5.1. Análises sobre o 1º programa ................................................................................... 51 Aula 13: Comandos de entrada e saída de dados ................................................................... 53 1. Função printf() ....................................................................................................................... 53 2. Função scanf() ...................................................................................................................... 55 3. Função sprintf() .................................................................................................................... 55 4. Exemplo de uso das funções scanf e printf ..................................................................56 4.1. Análises sobre o programa ....................................................................................... 56 5. Exercícios ............................................................................................................................... 57 Aula 14: Comandos de decisão (Linguagem C) ....................................................................... 58 1. O comando if ......................................................................................................................... 58 1.1. Sintaxe do comando if ................................................................................................ 59 1.2. Comandos if encadeado ............................................................................................. 59 1.3. O comando if-else ........................................................................................................ 59 5 2. O comando switch ............................................................................................................... 60 3. Exercícios ............................................................................................................................... 62 Aula 15: Laços de Repetição (Linguagem C) ............................................................................ 63 1. O laço for ................................................................................................................................ 63 1.1. Sintaxe do laço for ....................................................................................................... 64 1.2. Múltiplas instruções dentro do corpo de um laço for ........................................ 65 1.3. Laço for encadeado ..................................................................................................... 65 2. Exercícios ............................................................................................................................... 66 Aula 16: Laços de Repetição ......................................................................................................... 67 1. O Laço while .......................................................................................................................... 67 1.1. Sintaxe do laço while .................................................................................................. 67 1.2. O laço while encadeado .............................................................................................. 68 2. O Laço do-while .................................................................................................................... 69 3. Exercícios ............................................................................................................................... 70 Aula 17: Funções .............................................................................................................................. 71 1. Chamando uma função ....................................................................................................... 71 1.1. Funções simples .......................................................................................................... 72 1.2. O protótipo da função ................................................................................................. 73 1.3. A definição de uma função ........................................................................................ 73 1.4. Passando vários argumentos para uma função .................................................. 73 1.5. Chamadas a funções usadas como argumentos de outras funções ............. 74 2. Macros ..................................................................................................................................... 75 2.1. A diretiva #define .......................................................................................................... 75 2.2. Criação de macros ....................................................................................................... 76 Aula 18: O uso de Caracteres gráficos ....................................................................................... 78 1. O uso de Caracteres gráficos ........................................................................................... 78 1.1. Imprimindo caracteres gráficos ............................................................................... 78 1.2. Como obter os caracteres do código ASCII .......................................................... 79 Aula 19: Vetores ............................................................................................................................... 82 1. O uso dos vetores ................................................................................................................ 82 1.1. Declaração de um vetor .............................................................................................. 83 1.2. Acessando os elementos de um vetor ................................................................... 83 1.3. Inicializando um vetor ................................................................................................. 84 2. Exercícios ............................................................................................................................... 85 6 Aula 20: Matrizes .............................................................................................................................. 86 1. Definindo uma matriz .......................................................................................................... 86 1.1. Inicialização de matrizes de duas dimensões ...................................................... 87 1.2. Matrizes como argumentos de funções ................................................................. 87 7 Aula 1: Conceitos de Algoritmos Objetivo: Dominar os conceitos de um algoritmo, sabendo representá-lo das três formas básicas: descritiva (ou narrativa), fluxograma (ou diagrama de blocos) e pseudocódigo (ou português estruturado ou portugol). 1. Algoritmos Um algoritmo é uma sequência finita de instruções bem definidas que levam a solução de uma tarefa, ou um conjunto de regras para a solução de um problema (MANZANO, 2009; DASGUPTA; PAPADIMITRIOU; VAZIRANI, 2009; MANZANO; MANZANO, 2008). Todo algoritmo é feito utilizando-se da lógica. A importância da disciplina de computação básica na formação de engenheiros está relacionada à necessidade de capacitação dos alunos de engenharia na resolução de problemas diversos com o auxílio computacional, combinando o melhor da informática aos avanços tecnológicos. Para resolver um problema de forma automática (com o auxílio do computador), primeiramente é necessário encontrar uma maneira de descrevê-lo com clareza e precisão. Em outras palavras, é preciso encontrar uma sequência finita de passos não ambíguos que levam à sua solução, ou seja, o seu algoritmo. Um exemplo simples de algoritmo é uma receita para preparar um bolo. De acordo com o dicionário Aurélio, um algoritmo é definido como: "Processo de cálculo, ou de resolução de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restrições, regras formais para a obtenção de resultado ou de solução de problema. Conjunto de regras e operações bem definidas e ordenadas, destinadas à solução de um problema, ou de uma classe de problemas, em um número finito de etapas.". É importante lembrar que a descrição do problema deve ser feita sob a perspectiva da máquina. Uma vez que os computadores não entendem descrições de problemas em linguagem natural, é preciso codificá-las em linguagens que lhes são compreensíveis. Tais linguagens são chamadas de linguagens de programação. Nesta etapa aplica-se a conversão de uma forma de representação do algoritmo, o pseudocódigo para uma linguagemespecifica. A solução de um problema de forma automática pode ser descrita pelos passos ilustrados na Figura 1. 8 Figura 1. Solução de um problema de forma automática. Todos nós sabemos construir algoritmos. Haja vista o fato de que saímos de casa pela manhã, definimos alternativas de transporte para ir ao trabalho, decidimos qual o melhor caminho para chegar a um lugar ou voltar para casa, etc. Cabe ressaltar que pode haver mais de um algoritmo para resolver um mesmo problema. Por exemplo, a decisão da escolha do transporte para ir ao trabalho poderia ser feita com base nas necessidades individuais. 1.1. Descrição Narrativa É a forma de representação do Algoritmo através de frases, representando as ações a serem tomadas; as frases são os passos relacionados visando atender o objetivo. Vejamos alguns exemplos: a) Trocar uma lâmpada 1º passo: Pegar a escada 2º passo: Posicionar a escada embaixo da lâmpada 3º passo: Buscar uma lâmpada nova 4º passo: Subir na escada 5º passo: Retirar a lâmpada velha 6º passo: Colocar a lâmpada nova 7º passo: Descer da escada 8º passo: Guardar a escada b) Levar o cachorro para passear 1º passo: Ir até o quintal 2º passo: Pegar a coleira 3º passo: Chamar o cachorro 4º passo: Colocar a coleira no cachorro 5º passo: Abrir o portão 6º passo: Dar uma volta no quarteirão 7º passo: Entrar em casa 8º passo: Soltar a coleira do cachorro 9º passo: Guardar a coleira 9 c) Torres de Hanói (Figura 2) Considere o enunciado: inicialmente têm-se três hastes, A, B, C, e na haste A possuem três anéis de diâmetros diferentes, em ordem decrescente por diâmetro. O objetivo é transferir os três anéis da haste A para a haste C, usando o B se necessário. As regras de movimentação são: 1. Deve mover um único anel por vez. 2. Um anel de diâmetro maior nunca pode ficar sobre algum anel de diâmetro menor. Figura 2. Exemplo da Torre de Hanói com 3 discos. Para saber o número de movimentos você pode utilizar a seguinte lei matemática: ( ) 2 1nM n . Onde M é o número de movimento e n o número de anéis. 1.2. Diagrama em Blocos Conhecido como fluxograma, esta forma geométricas descrevem graficamente um algoritmo. Vejamos na Tabela 1, as principais formas geométricas empregadas na construção de um fluxograma: Tabela 1 – Formas geométricas de fluxogramas Terminador - Início/fim Processamento Entrada de dados (teclado) Tomada de decisão e usado para estrutura de repetição (Enquanto e Faça-Enquanto) Estrutura de Repetição (Para) 10 Saída de dados (tela) Saída de dados (impressora) Conector Direção do fluxo Por exemplo, o fluxograma abaixo representa o algoritmo de cálculo das raízes de uma equação de 2º grau. 1.3. Pseudocódigo Também conhecido como Português Estruturado Ou Portugol, é a representação do Algoritmo através de comandos, nele, já existem normas e regras a serem rigorosamente seguidas. Vejamos o exemplo a seguir: Programa Raizes_Eq_2g Var a, b, c, Delta, x1, x2 : Real Início Leia a, b, c Delta b^2-4*a*c x1 (-b + Sqrt(Delta))/(2*a) x2 (-b - Sqrt(Delta))/(2*a) Escreva x1, x2 Fim a, b, c delta←b 2 -4 a c) x’← x’’← x', x’’ FIM ini INICIO ini 11 1.4. Linguagem de Programação A codificação de algoritmos é um assunto que será tratado mais adiante no curso. No entanto, para se ter uma ideia, a codificação do algoritmo dado no exemplo 3 “cálculo das raízes de uma equação de 2º grau”, em linguagem C, pode ser feita como segue: #include <stdio.h> /* biblioteca de entrada e saída de dados */ #include <math.h> /* biblioteca matematica */ int main() { float a, b, c; /* coeficientes da equacao */ float delta; /* delta da equacao */ float x1, x2; /* raizes da equacao */ printf ("Entre com os coeficientes da equacao.\n"); scanf ("%f %f %f", &a, &b, &c); delta = pow(b,2) - 4 * a * c; delta = sqrt(delta); x1 = (-b + delta)/(2*a); x2 = (-b - delta)/(2*a); printf("A raiz x1 vale %f.\n", x1); printf("A raiz x2 vale %f.\n", x2); return 0; } 12 Aula 2: Exercícios sobre o conceito básico de algoritmos Objetivo: Treinar o algoritmo em sua forma básica. 1. Exercícios 1) Crie um algoritmo simplificado para executar a tarefas de fazer um bolo. 2) Escreva um algoritmo para resolver o problema das jarras de água, o qual pode ser descrito assim: Você tem 2 jarras, uma de 4 litros e uma de 3 litros. Nenhuma delas tem qualquer marcação de medidas. Há uma torneira que pode ser usada para encher as duas jarras com água. Como você consegue colocar exatamente 2 litros de água na jarra de 4 litros? 3) Escreva um algoritmo para resolver o problema “O fazendeiro e os animais”. A descrição do problema é: Um fazendeiro necessita atravessar um rio levando uma cabra, um saco de milho e um lobo. Para isso, dispõe de um barco que só é capaz de levar dois passageiros por vez. Ele enfrenta ainda, o seguinte dilema: se ele deixar de um lado da margem o lobo e a cabra sozinhos, o lobo come a cabra e se ele deixar a cabra e o milho, a cabra come o milho. Como o fazendeiro deve fazer para atravessar o rio com o milho e os animais (cabra e o lobo)? 4) Escreva um algoritmo para resolver o problema “Os Missionários e os Canibais”, o qual é descrito assim: Três missionários e três canibais se encontram à margem direita de um rio. Todos precisam cruzar esse rio (ir para margem esquerda), e para isso dispõem de um barco onde cabem somente duas pessoas de cada vez. Os missionários precisam tomar cuidado ao fazer a travessia porque, se em qualquer instante houver mais canibais do que missionários em qualquer uma das margens (havendo missionários naquela margem), os canibais "devorarão" os missionários. Considerando estas restrições, escreva um algoritmo mostrando como fazer para que todas as pessoas cruzem o rio e cheguem ao lado esquerdo com segurança. 13 5) Uma família de 5 pessoas precisa atravessar uma ponte. No máximo dois integrantes por vez podem atravessar a ponte. Cada pessoa anda em uma velocidade diferente, demorando 1, 3, 6, 8 e 12 segundos na travessia sobre a ponte. A dupla anda na velocidade do mais lento, isto é, se na travessia for a pessoa que demora 1 segundo com a pessoa que demora 12 segundos, eles levarão 12 segundos para atravessar a ponte. Porém está escuro e eles precisam utilizar um lampião, que dura apenas 30 segundos. Levando em conta somente a soma do tempo gasto nas travessias, como você levaria esta família até o outro lado da ponte em até 30 segundos? 14 Aula 3: Conceitos de Variáveis Objetivo: Compreender os conceitos sobre o que são variáveis, para que servem e como criá-las, respeitando as regras necessárias. É importante informar que quando estamos trabalhando com programação de computadores, estamos dando instruções para o computador receber os dados de entrada fornecidos pelo usuário, fazer algum processamento sobre estes dados e fornecer alguma informação ao usuário. Os dados manipulados durante a execução de um programa são armazenados na memória RAM (Random Access Memory ou Memória de Acesso Aleatório), que é a memória principal do computador. Para referenciar ou recuperar os dados armazenados utilizamos variáveis. Uma variável é uma entidade que serve para o armazenamento temporário de dados durante a execução de um programa. Para se definir uma variável deve-se definir um nome (identificador) e o tipo de dado a ser armazenado. O tipo de dado pode ser simples (numérico, caractere ou lógico) ou composto. Cabe salientar que uma variável armazena apenas um valor, o qual pode ser alterado ao longo da execução do programa. 1. Tipos de Informações (Variáveis) As informaçõesa serem processadas no computador devem ser classificadas de acordo com o tipo que ela representa no cotidiano. São estes: Numérico (inteiro e real), caractere ou lógico. a. Inteiro: São dados numéricos, sendo eles negativos ou positivos, que se exclui a parte fracionária do mesmo. Usamos este tipo quando precisamos representar uma informação que só pode absorver um valor inteiro, por exemplo: Idade 45; quantidade de filhos 2 entre outros; b. Real: Qualquer tipo de dado numérico que pode ser representado na forma fracionária, como –87,85; 25 e 0,0. É utilizado para representar informações, como: salário, comissão, inflação, entre outras. Numa linguagem de programação real, não usemos a vírgula como separador decimal e sim o ponto (ex: 1458.75); c. Caractere: Utilizado para armazenar um único caractere. Ex: „1‟, „a‟, „A‟, „*‟, „?‟, „:‟, etc; d. Booleano: Representado por apenas dois valores: verdadeiro e falso. 15 1.1. Regras para nomear Variáveis Como vimos acima, toda variável necessita de um nome próprio e estes nomes estão sujeitos a regras, são elas: a. Começar com letra; b. Não conter nenhum caractere especial, com exceção do sublinhado; c. Dependendo da linguagem de programação, as regras divergem. Concluímos que sempre quando houver a necessidade de armazenarmos informações, pedidas ou processadas pelo programa, usaremos uma variável ou uma constante. 2. Exercícios de fixação 1. Identifique quais os tipos que as seguintes variáveis teriam em um algoritmo qualquer: Variável Tipo de dados nomeDeRua numeroDeCasa idadeDeUmaPessoa pesoDeUmaPessoa valorDoSalario quantidadeDePessoasEmFila senhaCorreta 2. Identifique quais os tipos dos valores listados a seguir: Variável Tipo de dados ”F” V ”FALSO” 5.84 ”A*R*&” ”Amarelo” 2008 ”abril” 16 3. Verifique entre os itens abaixo quais não poderiam ser utilizados como nomes de variáveis. Justifique o motivo. Nome Variável É possível? Justifique 1x fone# $salario x a-6 2/3 livro tipo_de_talher tipo de talher automóvel talher e-mail e_mail email nome_# time de futebol time_de_futebol 17 Aula 4: Operadores Aritméticos, Lógicos e Relacionais Objetivo: Apreender como utilizar os operadores aritméticos, lógicos e relacionais, entendendo o grau de prioridade e formas de utilização. 1. Operadores Aritméticos Os operadores aritméticos básicos presentes nas linguagens de programação estão descritos na Tabela 1: Tabela 1 – Operadores aritméticos básicos Adição + Subtração - Multiplicação * Divisão / Para o presente estudo de algoritmo iremos adotar três operadores adicionais, descritos na Tabela 2: Tabela 2 – Operadores aritméticos básicos Potenciação pow() ou ^ pow(4,2) = 16 ou 4^2 = 16 Raiz quadrada sqrt() sqrt(16) = 4 Resto da divisão por inteiro % 5 % 2 = 1 A ordem de prioridade dos operadores aritméticos é o mesmo expresso pela matemática, sendo eles: 1º. Potenciação e radiciação 2º. Multiplicação, divisão ou resto de divisão (a operação que vier primeiro na expressão) 3º. Adição ou subtração (a operação que vier primeiro) Para atribuir prioridade a uma operação, utilizamos apenas parênteses. Exemplo: 4 + 3 * 3 = 13 (4 + 3) * 3 = 21 Uma expressão em notação matemática, para que o computador possa compreende lá, é necessário que seja feita uma conversão, passando de notação matemática ou cientifica para notação computacional. Vejamos alguns exemplos na Tabela 3 de como essa conversão é realizada: 18 Tabela 3 – Exemplos de conversão de equação (cientifica/ computacional) Expressão Matemática Expressão em algoritmo 2 ba media 2/)( bamedia 2)3(2 bax )2,3()2( bpowasqrtx 1.1. Operadores Relacionais Os operadores relacionais são (Tabela 4): Tabela 4 – Operadores relacionais Igualdade == A == B Maior > A > B Maior ou igual >= A >= B Menor < A < B Menor ou igual <= A <= B Diferente != A != B Quando utilizamos os operadores aritméticos em uma expressão o resultado será um valor numérico, mas quando utilizamos os operadores relacionais o resultado será um valor booleano (verdadeiro ou falso). Exemplo: Seja A= 3 e B = 10. a) A == B Falso b) A != B Verdadeiro c) A >= B Falso d) A <= B Verdadeiro 1.2. Operadores Lógicos Os operadores lógicos trabalham com a combinação de várias expressões aritméticas e relacionais, gerando um único resultado booleano. Em algoritmos iremos utilizar três operadores lógicos: E, OU e NÃO. 19 Tabela 4 – Tabela Verdade A B .NÃO.A .NÃO.B A.OU.B A.E.B V V F F V V V F F V V F F V V F V F F F V V F F 2. Exercícios 1) Resolva as expressões lógicas, determinando se a expressão é verdadeira ou falsa: a) 2>3 = b) (6<8) ou (3>7) = c) não(2<3) = d) (5>=6 ou 6<7) ou não(a+5-6 == 8) {onde a = 5} = e) (34>9 e 5+u == 34) ou (5 == 15/3 e 8>12) {onde u = 29} = 2) Quais os valores de v1, v2 e v3 no final da execução do código abaixo? var v1, v2, v3:booleano v1 8 > 9 v2 8 < 9 v3 v1 OU v2 v1 v3 E v2 3) Dado os problemas a seguir defina: a) Calculo da área de um triângulo dada a fórmula T = (b * h) / 2. b) Calculo da média do peso de uma família de 5 pessoas. c) Calculo da área de uma circunferência dada a fórmula C = PI* raio^2. Qual(is) será(ão) a(s) variável(eis) de entrada e saída do problema a e c? Qual será o processamento do algoritmo b? 4) Dada as equações matemáticas, reescreva usando a forma de expressão computacional: a) b) 20 c) d) e) 2 10 16 a c a f) )30( yzx yx g) a acbb 2 42 h) 2 52 22 xx x yx 5) Dada as expressões computacionais, reescreva usando a forma de equações matemáticas convencional: a) b) c) d) = 21 Aula 5: Estrutura Sequencial Objetivo: Nesta aula iniciaremos o trabalho com pseudocódigo e fluxograma, tendo em vista o aprendizado inicialmente com uma estrutura sequencial, sem a tomada de decisão ou repetição no processo. 1. Estrutura Sequencial Um algoritmo normalmente opera sobre um conjunto finito de entradas para gerar um conjunto finito de saídas. Por exemplo, considere um algoritmo para fazer a somatória de dois números inteiros quaisquer. Neste caso, claramente temos como entrada dois números inteiros (n1 e n2) e como saída, um número inteiro (soma) que recebe o resultado de n1+n2. Vejamos o fluxograma e seu pseudocódigo a seguir. Fluxograma Pseudocódigo Analisando o fluxograma pode-se observar a existência de dois terminadores (Inicio e Fim), esta é uma característica dos fluxogramas, sempre ele terá estes dois terminadores, nunca poderá ter mais ou menos terminadores, sempre exatamente dois, um iniciando o processo e um finalizando. Após o inicio do fluxograma, temos uma entrada de dados, para leitura via teclado dos dois valores, que são armazenados nas variáveis n1 e n2. O próximo passo é a realização da soma dos valores, em uma etapa de processamento, neste passo, o resultado da soma destes Programa soma_2_numeros Var n1, n2, soma: Real Início Leia n1, n2 soma n1+n2 Escreva soma Fim 22 dois valores é armazenado em uma terceira variável, chamada de soma. Findo os processos de entrada de dados e processamento, tem-se então a saída de tela, para exibir a resposta ao usuário. Finalizada a explicação do fluxograma, pode-se partir para a interpretação do pseudocódigo. O pseudocódigo é uma forma onde os comandos são bem estruturados e definidos, e seguem algumas regras para sua criação. A primeira coisa a observar são os comandos destacados em vermelho, estes comandos fazem parte da estrutura para o algoritmo estudado. O primeiro passo para a construçãodo pseudocódigo é definir um nome para o programa, para isso utiliza-se a palavra Programa, como destacado e em seguida o nome para o programa. Devem ser seguidas as mesmas regras para criação de uma variável na definição de um nome de programa. A próxima etapa é a criação das variáveis, para tal coloca-se a palavra Var (de variável), e nas próximas linhas antes do inicio do programa são declaradas as variáveis, sendo elas separadas por linhas entre os tipos diferentes. Para se declarar mais de uma variável na mesma linha se separada por vírgula. Pode-se observar que foram criadas três variáveis do tipo Real neste programa, e por se tratarem de variáveis do mesmo tipo, estão todas na mesma linha. O próximo passo do pseudocódigo é o inicio do programa, para tal empregamos a palavra Inicio, e nas próximas linhas temos o desenvolver do programa. A primeira linha contém o comando de entrada de dados (Leia), nele está sendo adquiridos os valores para as variáveis n1 e n2. A linha a seguir é referente ao processo de soma das duas variáveis e esta soma esta sendo atribuída para a variável soma, neste caso lê-se “soma recebe n1+n2”. O passo seguinte é apresentar ao usuário por meio do comando Escreva a resposta, que está armazenado na variável soma. Finalizado todos os passos do programa tem-se que finalizar o programa, para isso utiliza-se o comando Fim. 23 2. Exercícios 1) Crie um pseudocódigo para efetuar o cálculo do salário líquido de um profissional que trabalhe por hora. Para isso, é necessário ler alguns dados como: valor da hora trabalhada (VH), número de horas trabalhadas no mês (NH) e o percentual de desconto do INSS (PDI). O algoritmo deverá apresentar na tela o valor do salário bruto (SB), o valor descontado (VD) e o valor do salário líquido (SL). Considere: SB=VH*NH, VD=SB/100*PDI e SL=SB-VD. Exemplo: Se VH=10, NH=20, PDI=10%, então SB=200, VD=20 e SL=180. 2) Calcular quantos azulejos são necessários para revestir uma piscina. O algoritmo deverá solicitar ao usuário: comprimento (CP), largura (LP) e profundidade (PP) da piscina para calcular sua área total e ainda largura (LA) e altura (AA) do azulejo para conhecer sua área. Deve-se considerar a mesma unidade de medida tanto para calcular a área da piscina quanto à área do azulejo. Por exemplo, centímetros. Obs.: A área total (AT) da piscina é composta de 5 faces, e a área do azulejo é apenas um valor. Estas áreas devem ser calculadas da seguinte forma: Paredes laterais (PL) = 2*CP*PP; Paredes das cabeceiras (PC) = 2*LP*PP; Fundo da piscina (FP) = CP*LP; AT = PL+PC+FP; Área de um azulejo (AAZ) = LA*AA. Para calcular a quantidade de azulejos (QA) para revestir a piscina deve-se adotar o cálculo a seguir: QA = (AT / AAZ)*1.05 3) Dado o fluxograma escreva o algoritmo respectivo para fazer leitura de dois números e apresentar na tela o resultado das quatro operações básicas efetuadas sobre estes números (soma (A), subtração (B), divisão (C) e multiplicação (D)). 24 4) Construa um fluxograma para ler uma temperatura em graus Fahrenheit e apresentá-la convertida em graus Centígrados. A fórmula de conversão é C(F- 32)*(5/9), onde C é a temperatura em Centígrados e F a temperatura em Fahrenheit. 5) Construa o fluxograma que represente uma solução para o cálculo da área de um trapézio qualquer. Lembrando que: Área do trapézio = (Base Maior + Base Menor) x Atura / 2. N1, N2 A←num1+num2 B←num1-num2 C←num1/num2 D←num1*num2 “O resultada da Soma de N1+N2 é: ”, A “O resultada da Subtração de N1-N2 é: ”, B “O resultada da Divisão de N1/N2 é: ”, C O resultada da Multiplicação de N1*N2 é: ”, D FIM ini INICIO ini 25 Aula 6: Estrutura condicional Objetivo: Esta aula tem como foco o entendimento de utilização de estruturas condicionais (decisão) simples e encadeada dentro de um algoritmo. Este tipo de estrutura permite que o algoritmo decida automaticamente entre dois caminhos possíveis, qual irá executar. Para tanto, um teste lógico é efetuado. Caso o teste seja verdadeiro, o algoritmo segue por um caminho. Caso o teste seja falso o algoritmo segue pelo outro. Dois exemplos de algoritmos envolvendo estruturas de decisão são mostrados a seguir. 1. Estrutura condicional simples Na estrutura condicional simples, é empregado um teste lógico para verificar se uma condição é válida, tendo a resposta como verdadeiro ele executa um bloco de comandos, caso contrário, é possível adicionar outro bloco de comandos ou não a ser executado. Veja a seguir o emprego de um algoritmo para ler um número e exibir uma mensagem indicando se ele é negativo ou não. Neste caso temos como entrada um número e como saída apenas uma mensagem. Pseudocódigo Fluxograma Ao analisar o pseudocódigo do programa, as primeiras etapas são idênticas às estudadas anteriormente. Inicialmente existe a definição do nome do programa, em seguida a criação das variáveis, neste caso apenas uma variável de um tipo Programa Pos_Neg_Nulos Var num: Real Início Leia num Se num < 0 então Escreva “É negativo” Senão Escreva “Não é negativo” Fim Se Fim 26 (Real). Ao iniciar o programa, a primeira linha de comando tem o comando para ser adquirido um valor numérico a ser atribuído na variável “num”. A linha seguinte tem o processo de decisão, como se pode observar, a linha inicia-se com a palavra “Se”, logo após é realizado um teste lógico (que verifica se o número é menor que zero) e em seguida a palavra “então”, finalizando o teste lógico. Caso a resposta deste teste lógico seja positivo, o programa então realizará o comando para exibir a mensagem avisando que o número é negativo, caso este teste retorne falso, o programa exibirá a mensagem que o número não é negativo, e para que o sistema entenda que deverá exibir esta mensagem caso o teste retorne falso, temos o emprego da palavra “senão”. Após finalizado os passos com os blocos de comando para resposta positiva e negativa, temos que finalizar a estrutura de decisão (SE) aberta, para isso aplica-se a frase “Fim Se” no final do ultimo bloco. Agora só resta a finalização do programa com a palavra “Fim”. Ao analisar o fluxograma deste algoritmo, tem-se o símbolo da decisão adicionado, dentro dele é incorporado o teste lógico, com duas possíveis respostas, uma indicada na seta com a letra “S”, que significa a resposta se positivo o teste lógico, e na segunda seta temos a letra “N”, que representa a resposta negativa do teste. Exibida as mensagens de resposta, então os dois processos, que agora estão separados, devem seguir para o terminador, finalizando o fluxograma. 2. Estrutura condicional composta ou encadeada Um algoritmo com estrutura condicional composta tem como objetivo analisar casos que pode possuir mais de duas respostas, ou seja, um problema pode ter n respostas, sendo sempre necessários n-1 testes lógicos para tratar todas as possibilidades. Por exemplo, um problema que tenha 4 respostas, teremos que ter 3 testes lógicos, ou seja, 3 decisões. Vejamos agora um algoritmo para ler um número qualquer a partir do teclado e exibir uma mensagem indicando se ele é positivo, negativo ou nulo. Como se pode notar, existem 3 respostas possíveis, então nesse caso n=3, serão necessários 2 testes lógicos. Nesse tipo de estrutura é possível escrever o pseudocódigo de duas formas distintas, porém, com o mesmo teor no seu conteúdo. Uma desta utiliza apenas uma estrutura de decisão, e na outra empregam duas estruturas de decisão. 27 Fluxograma Pseudocódigo (1ª forma) Pseudocódigo (2ª forma) Iniciaremos a análise desta estrutura de decisão pelo fluxograma, neste caso, como pode ser observada a resposta da primeira decisão, se negativa, estaligada diretamente a outra decisão, formando assim uma cadeia de decisões, por isso é chamado de estrutura de decisão composta ou encadeada. Para a solução deste caso, verificou-se primeiramente se o número digitado é positivo, se a resposta for Programa Pos_Neg_Nulos2 Var num: Real Início Leia num Se num > 0 então Escreva “É positivo” Senão Se num < 0 então Escreva “É negativo” Senão Escreva “É nulo” Fim Se Fim Programa Pos_Neg_Nulos Var num: Real Início Leia num Se num > 0 então Escreva “É positivo” Senão Se num < 0 então Escreva “É negativo” Senão Escreva “É nulo” Fim Se Fim Se Fim 28 sim, o sistema exibe ao usuário a mensagem que o número é positivo, caso contrário, é realizado outro teste, se o número é negativo, caso a resposta for positiva, obtém-se a mensagem informando que é negativo, caso contrário, informa que o número é nulo, sendo a única opção que restou. Neste caso temos o processo dividido em três partes, as quais devem ir para um único terminador. Temos agora que diferenciar as duas formas de representação do pseudocódigo uma sendo duas estruturas de decisão simples e a segunda sendo a estrutura encadeada, como pode ser observado na primeira após a primeira decisão temos o bloco de comandos, em seguida vem o senão, e na próxima linha contém a próxima decisão, sendo assim, é aberta uma nova estrutura de decisão, que irá possuir o seu próprio “Senão” e também seu “Fim Se”, como pode ser observado. Neste caso então abrimos duas estruturas de decisão e fechamos duas vezes, uma para cada estrutura de decisão. No segundo caso, a diferença é que possuí apenas uma estrutura de decisão, e se observamos, o “Senão Se” esta na mesma linha, indicando que este segundo “Se” faz parte da primeira estrutura, sendo assim, não é necessário fechar duas vezes o “Se”, e sim apenas uma vez como mostrado no exemplo acima, o que caracteriza uma estrutura encadeada. 29 Aula 7: Exercícios sobre estrutura condicional Objetivo: Treinar o uso de estrutura de decisão. 1. Exercícios 1) Ler 2 notas do aluno (N1 e N2), calcular a média aritmética das duas notas e exibir uma mensagem informando se o aluno foi “aprovado” ou “reprovado”. O aluno é aprovado se a média >= 6 e reprovado em caso contrário. 2) Faça um algoritmo que receba o valor do salário (VS) de uma pessoa e o valor de um financiamento (VF) pretendido. Caso o financiamento seja menor ou igual a 5 vezes o salário da pessoa, o algoritmo deverá escrever "Financiamento Concedido"; senão, ele deverá escrever "Financiamento Negado". Independente de conceder ou não o financiamento, o algoritmo escreverá depois a frase "Obrigado por nos consultar." 3) Elabore um fluxograma e codifique Português Estruturado que leia dois números inteiros distintos e escreva como resultado o maior deles. 4) Faça um algoritmo que calcule a média aritmética de duas notas de um aluno e entre com o número de faltas alcançada no semestre e coloque a mensagem de acordo com as seguintes condições: Se a média >=6,0 e a falta <= 10, então o aluno está aprovado, caso esteja fora dessas condições o aluno está reprovado. 5) Dado o algoritmo abaixo, montar um fluxograma equivalente. Início do algoritmo “Cálculo do zero da equação ax+b=0”. 1. ler os coeficientes a, b 2. se a é diferente de 0 então 3. calcular o valor de x (ax+b=0) 4. escrever “O valor de x é ”, x 5. senão escrever ¨Não há zero” Fim do algoritmo “Cálculo do zero da equação ax+b=0”. 30 6) Escreva um programa que leia um número inteiro. Se o número lido for positivo, escreva uma mensagem indicando se ele é par ou ímpar. Se o número for negativo, escreva a seguinte mensagem “Este número não é positivo”. 7) Faça um algoritmo que escreva o conceito de um aluno, dada a sua nota. Supor notas inteiras somente. O critério para conceitos é o seguinte: Nota Conceito 0 a 2 E 3 a 4 D 5 a 6 C 7 a 8 B 9 a 10 A 8) A empresa XYZ decidiu conceder um aumento de salários a seus funcionários de acordo com a tabela abaixo: SALÁRIO ATUAL ÍNDICE DE AUMENTO 0 – 400 15% 401 – 700 12% 701 – 1000 10% 1001 – 1800 7% 1801 – 2500 4% ACIMA DE 2500 SEM AUMENTO Escrever um algoritmo que lê, para cada funcionário, o seu nome e o seu salário atual. Após receber estes dados, o algoritmo calcula o novo salário e escreve na tela as seguintes informações: <nome do funcionário> <% de aumento> <salário atual> <novo salário> 31 9) Dado o pseudocódigo abaixo, montar um fluxograma equivalente. Pretende-se elaborar um programa que permita ler um número a partir do teclado, e apresentar a indicação de que é positivo, negativo ou nulo. Entradas: Num Saídas: mensagens Descrição do problema: Se N = 0 então N é nulo Se N > 0 então N é positivo; senão N é negativo Este problema faz então uso de estruturas condicionais (estruturas de seleção). Então podemos escrever a seguinte sequência de passos para a resolução do problema: 10) Represente-o por meio de um fluxograma e pseudocódigo o cálculo de uma equação de segundo grau seguindo respeitando as regras a seguir: a) Se o coeficiente a for igual a zero informar que esta não é uma equação do 2º grau e terminar o algoritmo. b) Se o valor de delta for negativo informar que a equação não tem raízes reais e terminar o algoritmo. 11) Dados três valores A , B e C, verifique se eles podem ser os comprimentos dos lados de um triângulo e, se forem, verifique se é um triângulo equilátero, isósceles ou escaleno. Se não formarem um triângulo, escreva uma mensagem. Programa SeparaNum Var num:real Inicio Escreva "Introduza um número" Leia num Se num = 0 então Escreva "O número é nulo" Senão Se num > 0 então Escreva num, " é um número positivo" Senão Escreva num, " é um número negativo” Fim Se Fim. http://www.prof2000.pt/users/famaral/ig/tlp/estruturas.htm 32 Represente por pseudocódigo e por forma de fluxograma o problema. Considere que: Não formam um triângulo: o Se um dos lados do triângulo é zero. o Se o comprimento de cada lado não deve ser maior que a soma dos outros dois lados. Formam um triângulo: o Equilátero: quando possui os três lados iguais. o Isósceles: quando possui dois lados iguais. o Escaleno: quando possui os três lados diferentes. 33 Aula 8: Estrutura de repetição Objetivo: Esta aula tem como foco o entendimento de utilização de estruturas de repetição, tornando possível a repetição de um trecho do algoritmo por várias vezes. 1. Estrutura de repetição Uma estrutura de repetição é empregada quando se deseja executar um conjunto de instruções varias vezes. Essa repetição esta vinculada a quantidade de vezes que se deseja repetir o trecho de instruções (PARA) ou de um teste lógico para parada, este pode ser efetuado no início (ENQUANTO) ou no fim (FAÇA- ENQUANTO) do bloco de instruções. Quando o teste é feito no início, as instruções do bloco são executadas enquanto a condição testada seja verdadeira, sendo assim, pode acontecer das instruções contidas dentro do bloco não serem executas nenhuma vez. Por outro lado, quando o teste é realizado no final do bloco, as instruções são executadas no mínimo uma vez, visto que o teste a ser realizado fica logo após as instruções contidas no laço de repetição. Nesta estrutura, da mesma forma que na anterior, a repetição é finalizada quando o teste for verdadeiro, ou seja, o algoritmo fica executando as instruções que estiverem dentro deste laço enquanto o teste seja verdadeiro. Vale ressaltar a possibilidade de um laço de repetição mal definido, cujo código nunca modifique o estado da variável vinculado a condiçãode parada, a rotina será executada para sempre, essa situação é chamada de loop infinito. Outro ponto é quando esta mudança da variável nunca alcançara um estado de falso, esse caso também deixará o laço travado de forma infinita. Contudo, existem casos, por exemplo, trabalhando com microcontroladores, onde o laço infinito é bem vindo, ele é necessário para que o dispositivo não seja desativado. Outra condição que todos podemos verificar com clareza o uso do laço infinito, é o sistema operacional que aguarda uma ação do usuário, seja via teclado, mouse ou outro dispositivo qualquer, o sistema esta sempre verificando uma interação do usuário. Vejamos o emprego de um algoritmo único com o emprego das três técnicas de laço de repetição a seguir. O algoritmo deverá apresentar na tela todos os números positivos no intervalo de 1 a 100. 34 1.1. Estrutura de repetição com quantidade de repetições definidas (Para) Pseudocódigo Fluxograma Neste algoritmo, a variável cont é usada para realizar a contagem de 1 até 100 e também é verificado seu valor em cada passagem do laço de repetição para apresentar os números positivos, ou seja, se o resto da divisão (%) do contador por dois for igual a zero, significa que ele é positivo. Uma variável desta natureza (controle de passagens por um laço de repetição) é chamada de "contador". Os motivos para contar algo em algoritmos são os mais diversos: contar quantas vezes um determinado ciclo é executado, realizar uma somatória para o cálculo de média, etc. Podemos verificar nesse caso o emprego do laço de repetição com o comando Para, esse tipo de laço o valor inicial do contador e o valor qual deve ser utilizado para parada do mesmo é especifico. Após entrar no laço de repetição, ele executa o teste para verificar se o valor do contador é positivo. Sendo verdade, o algoritmo apresenta o valor do contador na tela, e segue para o incremento do contador. Caso a resposta do teste seja falsa, ele vai diretamente para o incremento, desta forma, independente da resposta do teste, irá ser realizado o incremento do contador e o processo não entrará em loop infinito. Feito o incremento então o N INICIO ini cont FIM ini F V cont1; 100; 1 S cont % 2 == 0 cont cont+1 Programa Positivos Var cont: Inteiro Início Para cont1 até 100 Faça Se cont % 2 == 0 então Escreva cont Fim Se cont cont + 1 Fim Para Fim 35 algoritmo retorna para o comando Para e verificará se chegou em 100. Esse processo será repetido até essa condição ser verdade. 1.3. Uso de estrutura de repetição com teste lógico no início (Enquanto) Pseudocódigo Fluxograma Neste caso, é possível notar algumas pequenas diferenças no pseudocódigo e no fluxograma, uma destas alterações importantes a se destacar, é a necessidade de iniciar a variável do contador com um valor. No exemplo, cont foi inicializado com o valor 1. Outra alteração é na estrutura de repetição utilizada, neste caso teve o emprego do laço condicional Enquanto. Este tipo de repetição, a parada esta vinculada ao teste lógico, neste caso, um teste lógico simples, com base em um contador. A diferença no fluxograma dos dois casos iniciais, é somente a inclusão da inicialização do contador com 1, e dentro do diagrama de repetição, não temos mais a inicialização do contador, mas sim apenas o teste com o critério de parada. O N INICIO ini cont FIM ini F V S cont % 2 == 0 cont cont+1 cont 1 cont <=100 Programa Positivos Var cont: Inteiro Início cont 1 Enquanto cont <= 100 Faça Se cont % 2 == 0 então Escreva cont Fim Se cont cont + 1 Fim Enquanto Fim 36 F V cont <= 100 N INICIO ini cont FIM ini S cont % 2 == 0 cont cont+1 cont 1 resto do fluxograma segue exatamente igual o primeiro, pois não existem outros pontos a serem alterados na troca do laço de repetição para e o laço enquanto. 1.4. Estrutura de repetição com teste lógico no fim (Faça-Enquanto) Pseudocódigo Fluxograma Ao analisar este ultimo caso de repetição, podemos notar a sua diferença no pseudocódigo na localização do enquanto, no trecho onde estava o comando enquanto, ficou apenas o faça, ou seja, o algoritmo irá executar ao menos uma vez até chegar o comando enquanto, para verificar o critério de parada. No fluxograma, temos também o deslocamento para baixo do laço de repetição, esta é a única alteração se comparado com o fluxograma anterior. Programa Positivos Var cont: Inteiro Início cont 1 Faça Se cont % 2 == 0 então Escreva cont Fim Se cont cont + 1 Enquanto cont <= 100 Fim 37 Aula 9: Exercícios sobre estrutura de repetição Objetivo: Treinar o uso de estrutura de repetição. 1. Exercícios 1) Desenvolva um fluxograma e pseudocódigo para calcular e exibir a somatória de todos os números inteiros no intervalo de 1 até 10 (1+2+,...,+10). 2) Desenvolva um pseudocódigo e seu respectivo fluxograma para fazer a leitura de dez números quaisquer, calcular e exibir a soma apenas dos números positivos. 3) Desenvolva um pseudocódigo para fazer a leitura de dez números quaisquer e exibir na tela a quantidade de valores positivos e a quantidade de valores negativos que foram lidos. 4) Crie um fluxograma para ler um número inteiro no intervalo de 1 a 10 e exibir na tela a sua tabuada. 5) Faça um fluxograma e pseudocódigo que receba três notas de um número qualquer de alunos (que deve ser especificado pelo usuário), calcule e mostre sua média final e sua situação conforme tabela abaixo: (AV1+Maior(AV2, AV3))/2 Média Mensagem 0,0 a 5,9 Reprovado 6,0 a 10,0 Aprovado 6) Faça um fluxograma que receba o salário de dez funcionários, calcule e mostre o valor do imposto a ser pago, usando a tabela a seguir: Salário Menor que R$ 500 De R$ 500,00 a R$ 850,00 Acima de R$ 850,00 Percentual do imposto 5% 10% 15% 38 7) Faça um pseudocódigo que mostre os vinte primeiros termos da sequencia de Fibonacci. 0-1-1-2-3-5-8-13-21-34-55... 8) Faça um pseudocódigo que receba a idade e o sexo de 12 pessoas, calcule e mostre: • A idade média do grupo; • A idade média das mulheres; • A idade média dos homens. 9) Faça um pseudocódigo e seu fluxograma que calcule e escreva na tela o valor da série geométrica S, dada pela equação: 10 1 2 i iS , ou seja, S=12 + 22 + 32 + ... +102. 10) Crie um fluxograma e pseudocódigo para exibir na tela a soma de todos os múltiplos do número 3 no intervalo de 0 a 100, ou seja, o algoritmo deve calcular e exibir o resultado da seguinte soma: 0 + 3 + 6 + 9 + 12 + 15 + ... + 99. 11) Desenvolva um fluxograma para fazer a leitura de um número inteiro, calcular e exibir o seu fatorial. Exemplo de um fatorial: 5! = 5 . 4 . 3 . 2 . 1 = 120 12) Desenvolva um fluxograma e seu pseudocódigo para fazer a leitura de 5 números quaisquer e exibir o maior valor lido. 13) Escrever um pseudocódigo que leia informações sobre um grupo de 250 pessoas e calcule alguns dados estatísticos. Para cada pessoas do grupo deve ler o nome da pessoa, a altura, o peso e o sexo (“F” para feminino e “M” para o masculino). Calcular e escrever: A quantidade total de homens e mulheres e o percentual de cada. A média de peso das pessoas (somatório dos pesos de todas as pessoas pela quantidade de pessoas) O nome da pessoa mais alta. 39 Aula 10: Breve visão da linguagem C Objetivo: Ao final desta aula o aluno estará apto a utilizar o compilador Dev-C++. 1. Introdução Um programa de computador é um conjunto instruções que representam um algoritmo para a resolução de algum problema. Estas instruções são escritas atravésde um conjunto de códigos (símbolos e palavras). Este conjunto de códigos possui regras de estruturação lógica e sintática própria. A linguagem C é uma linguagem de alto nível genérica que nasceu juntamente com o advento da teoria de linguagem estruturada e do computador pessoal e tornou-se rapidamente uma linguagem “popular” entre os programadores. Foi originalmente projetada para ser implementada no sistema operacional UNIX no PDP-11 da DEC (Digital Equipment Corporation), por Dennis Ritchie. O sistema operacional, o compilador C e, essencialmente, todos os programas de aplicação do UNIX são escritos em C. Compiladores de produção também existem para várias outras máquinas, incluindo o IBM System/370, Honeywell 6000, e o Interdata 8/32. C, entretanto, não é ligada a nenhum hardware ou sistema particular, e é fácil escrever programas que rodarão sem mudanças em quaisquer máquinas que aceitem a linguagem C. Atualmente, além de todas as aplicações já existentes, é utilizada para desenvolver novas linguagens, entre elas a linguagem C++ e Java. Embora C seja uma linguagem onde é possível trabalhar em baixo nível, fazendo acesso a memória, por exemplo, tem a finalidade geral que permite economia de expressão, modernos fluxos de controle e estruturas de dados e um rico conjunto de operadores. Compiladores na internet e é possível encontrar diversos tipos de compiladores da linguagem C. Cabe ao programador decidir qual será mais adequado. Alguns fatores que podem influenciar na decisão são: Custo do compilador. Interface com o usuário. Sistema operacional que será executado. Manuais disponíveis etc. Dentre os diversos compiladores disponíveis para programação em C/ C++, existem alguns que são mais conhecidos, sendo eles: 40 Compilador GCC – Este é o compilador da GNU, padrão do sistema operacional GNU/Linux, que também foi adotado por outros sistemas operacionais, tal como o próprio Windows. É um dos líderes do mercado e é gratuito. Compilador C++ Builder – Borland – O compilador da Borland e ele é pago. Uma versão para testes pode ser baixada e avaliada por 60 dias sem custos no site da Borland. http://www.borland.com Compilador Dev-C++ - É um compilador gratuito de plataforma Windows que será utilizado e apresentado nesta aula. Segue o link para download do site do desenvolvedor: http://www.bloodshed.net/dev/devcpp.html Compilador Visual C/C++ da Microsoft – Possui a versão gratuita, chamada de Express Edition e a versão paga, chamada de Professional. A versão gratuita pode ser localizada facilmente no próprio site da Microsoft, na seção de downloads. Outro ponto interessante de ser citado é o histórico da linguagem C, que inicialmente em 1970 Denis Ritchie desenhou uma linguagem a partir do BCPL nos laboratórios da Bell Telephones, Inc. Chama a linguagem de B. Em 1978 Brian Kerningham junta-se a Ritchie para aprimorar a linguagem. A nova versão chama-se C. Pelas suas características de portabilidade e estruturação já se torna popular entre os programadores. Já em 1980 a linguagem é padronizada pelo American National Standard Institute: surge o ANSI C. Uma década a frente, 1990, a Borland International Co, fabricante de compiladores profissionais escolhe o C e o Pascal como linguagens de trabalho para o seu Integrated Development Enviroment (Ambiente Integrado de Desenvolvimento), e com isso surge o Turbo C. Alguns anos depois, em 1992, o C se torna ponto de concordância entre teóricos do desenvolvimento da teoria de Object Oriented Programming (programação orientada a objetos), surgindo então o C++, que é a evolução do C e os compiladores atuais trabalham com as duas estruturas. Podemos citar como exemplo da capacidade e potência da linguagem C, citando alguns programas escritos nesta linguagem, sendo eles: Unix; Dbase; Clipper; Windows; Excel; C++; Visual Basic; Java. 41 1.1. O compilador Dev-C++ Após efetuar a o download e instalação do Dev-C++, inicialize o programa. A interface com o usuário está apresentada na Figura 1, sendo que os principais ícones estão evidenciados e descritos. Figura 1 - Interface do Dev-C++ Ícone 1 – Responsável pela abertura de arquivos salvos no computador. Ícone 2 – Este ícone insere um novo arquivo fonte. Será usado constantemente para criar os arquivos de códigos. Ícone 3 – Quando um código estiver pronto, deverá ser compilado. Compilar um código significa passar a linguagem que entendemos para a linguagem que o computador entende. O atalho CTRL + F9 também pode ser utilizado. Ícone 4 – Após o código ter sido compilado sem erros, poderá ser executado. A tecla de atalho que executa o código é a CTRL + F10. Ícone 5 – Este ícone faz o papel dos ícones 3 e 4. Também é possível compilar e executar o código pressionando F9. Ícone 6 – Salva o arquivo criado no Dev-C++. 1 3 4 5 6 2 42 Como exemplo, vamos fazer os seguintes passos: a. Clique no ícone 2; b. Escreva o código a seguir no documento; c. Clique no ícone 6 para salvar o arquivo, nesta etapa, atente-se para não colocar caracteres especiais no nome do arquivo, caso deseje usar algum caractere que não seja letra ou número utilize apenas o sublinhado, a mesma regra descrita para criação de variáveis; d. Use a extensão .cpp para salvar o seu arquivo; e. Aperte o ícone 3 para compilar o seu programa; f. Se tudo estiver correto ele deverá apresenta a mensagem: g. Agora clicar no ícone 4 para executar o seu programa, com a seguinte resposta: #include <stdio.h> #include <stdlib.h> int main() { printf("Ola Mundo!!!\n\n\n"); system("PAUSE"); return 0; } 43 Aula 11: Introdução a linguagem C Objetivo: Ao final desta aula o aluno entenderá a estrutura básica de um programa feito na linguagem C/ C++ e poderá montar programas básicos com entrada e saída de dados. 1. Introdução Um programa de computador manipula objetos de dados básicos, tais como variáveis e constantes. No início de um programa, as declarações listam as variáveis que serão utilizadas, além de definir os tipos, o tamanho dos arranjos e até os seus valores iniciais. Os operadores especificam o que deve ser feito com as variáveis. As expressões combinam variáveis e constantes para produzir novos valores. É importante também, conhecer as principais características do C, dentre elas podem ser citados: O C é uma linguagem de alto nível com uma sintaxe bastante estruturada e flexível; Programas em C são compilados, gerando programas executáveis; O C compartilha recursos tanto de alto quanto de baixo nível, pois permite acesso e programação direta do microprocessador; O C é uma linguagem estruturalmente simples e de grande portabilidade; Embora estruturalmente simples (poucas funções intrínsecas) o C não perde funcionalidade, pois permite a inclusão de uma farta quantidade de rotinas do usuário. 2. Variáveis e Tipos de Dados Os nomes das variáveis são construídos a partir de letras e números, sendo que o primeiro caractere deve sempre ser uma letra. Letras em maiúsculo e minúsculo diferem-se entre si, ou seja, C é Case Sensitive, portanto, os nomes Meu_programa e meu_Programa são diferentes. Algumas palavras são reservadas, isto é, não podem ser utilizadas para nomear variáveis. Essas palavras são de uso interno, tais como: float, int, if, switch etc . 44 Aconselha-se a utilizar nomes de variáveis que tenham algum significado dentro do programa. Também é prática comum utilizar letras minúsculas para variáveis e maiúsculas para constantes simbólicas. 2.1. Palavras reservadas em C Alguns nomes são reservados na linguagem C. Esses nomes são referentes às funções internas e não podem ser utilizados para outras finalidades. A Tabela 1 apresenta as palavras reservadas. Tabela 1 - Palavras chavereservadas. auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 2.2. Identificadores São nomes que identificam: variáveis, funções, etc... Regras: Qualquer tamanho Primeiro caractere: letra ou sublinhado. Demais caracteres: letras, números ou sublinhados. Ex.: Corretos: soma, teste123, media_geral. Incorretos: 1nota, valor-max, tot!fem Lembre-se: Não pode ser uma das palavras reservadas nem o nome de uma função C já existente. (Como printf, por exemplo). 2.3. Tipos de dados O tipo de uma variável informa a quantidade de memória que deve ser reservada, em bytes. Em C, há cinco tipos de variáveis básicas. Nos computadores da linha IBM- PC a Tabela 2 é válida: 45 Tabela 2 - Especificação da quantidade de memória utilizada para cada tipo de dado. TIPO BIT BYTES ESCALA char 8 1 -128 a 127 int 16 2 -32768 a 32767 float 32 4 3.4E-38 a 3.4E+38 double 64 8 1.7E-308 a 1.7E+308 void 0 0 Sem valor Com exceção do void, os tipos de dados básicos podem estar acompanhados por modificadores na declaração de variáveis. Os modificadores existentes estão apresentados a seguir: long ou long int (4 bytes) unsigned char (de 0 a 255) unsigned int (de 0 a 65535) short (2 bytes no IBM-PC) 2.4. Variáveis de ponto flutuante Números de ponto flutuante correspondem mais ou menos aos que os matemáticos chamam de “números reais”. Existem várias maneiras de escrever números de ponto flutuante. A notação “3.16e7” é um e meio de indicar que 3.16 será multiplicado por 10 elevado à potência 7, isto é, 31600000. Essa indicação chama-se notação científica e é usada para armazenar números de ponto flutuante na memória do computador. 2.5. Declaração de variáveis A declaração de uma variável é uma instrução que armazena uma determinada quantia de memória apropriada para o uso de uma variável. Toda declaração deve ser feita por um tipo seguido do nome da variável. Se você tiver mais de uma variável do mesmo tipo, poderá declará-las de uma única vez, separando-as por vírgulas: int navio, carro, moto; 2.6. Inicialização de variáveis Atribuir um valor a uma variável. 46 Sempre inicialize as variáveis antes de usá-las. Tabela 3 – Exemplo de uso de variáveis Uso correto Exemplo que geraria erro. int soma=3; char letra = ‘A’; int x,y,z; z=y=z=0; int x,y; x = y + 5; /* erro, y não foi inicializado */ 3. Operadores Um programa tem como característica fundamental a capacidade de processar dados. Processar dados significa realizar operações com estes dados. As operações a serem realizadas com os dados podem ser determinadas por operadores ou funções. Os operadores podem ser de atribuição, aritméticos, de atribuição aritmética, incrementais, relacionais, lógicos e condicionais. 3.1. Operador de Atribuição A operação de atribuição é a operação mais simples do C. Consiste de atribuir valor de uma expressão a uma variável. Sintaxe: A sintaxe da operação de atribuição é a seguinte: identificador = expressão; onde identificador é o nome de uma variável e expressão é uma expressão válida (ou outro identificador). Exemplos de atribuições válidas: a = 1; delta = b * b - 4 * a * c; i = j; Exemplos de atribuições inválidas: 1 = a; // constante! b + 1 = a; // expressão! O operando esquerdo deve ser um identificador de variável, isto é, não pode ser uma constante ou expressão. Obs.: Não se pode confundir o operador de atribuição (=) com o operador relacional de igualdade (==). 47 3.2. Operadores Aritméticos Existem cinco operadores aritméticos em C. Cada operador aritmético está relacionado ao uma operação aritmética elementar: adição, subtração, multiplicação e divisão. Existe ainda um operador (%) chamado operador de módulo cujo significado é o resto da divisão inteira. Os símbolos dos operadores aritméticos são: Operador Operação + adição. - subtração. * multiplicação / divisão % módulo (resto da divisão inteira) Sintaxe: A sintaxe de uma expressão aritmética é: operando operador operando onde operador é um dos caracteres mostrados acima e operando é uma constante ou um identificador de variável. Exemplo: Algumas expressões aritméticas: 1+2 a -4.0 b*c valor_1/taxa num%2 48 Aula 12: Introdução a linguagem C (Continuação) 3.3. Operadores de Atribuição Aritmética Muitas vezes queremos alterar o valor de uma variável realizando alguma operação aritmética com ela. Como por exemplo: i = i + 1 ou val = val * 2. Embora seja perfeitamente possível escrever estas instruções, foram desenvolvidas na linguagem C, instruções otimizadas com o uso de operadores ditos operadores de atribuição aritmética. Os símbolos usados são (+=, -=, *=, /= , %=). Deste modo as instruções acima podem ser rescritas como: i += 1 e val *= 2, respectivamente. Sintaxe: A sintaxe da atribuição aritmética é a seguinte: var <operador atribuição aritmética> exp; onde var é o identificador da variável e exp é uma expressão válida. Exemplo: Observe as atribuições aritméticas abaixo e suas instruções equivalentes: Atribuição aritmética Instrução equivalente i += 1; i = i + 1; j -= val; j = j - val; num *= 1 + k; num = num * (1 + k); troco /= 10; troco = troco / 10; resto %= 2; resto = resto % 2; 3.4. Operadores Incrementais Em programação existem instruções muito comuns chamadas de incremento e decremento. Uma instrução de incremento adiciona uma unidade ao conteúdo de uma variável. Uma instrução de decremento subtrai uma unidade do conteúdo de uma variável. Existem, em C, operadores específicos para realizar as operações de incremento (++) e decremento (--). Eles são genericamente chamados de operadores incrementais (Tabela 1). Tabela 1 –A sintaxe dos operadores incrementais é a seguinte: Instrução Equivalente ++ var var = var + 1 var ++ var = var + 1 -- var var = var - 1 var -- var = var - 1 49 onde var é o nome da variável da qual se quer incrementar ou decrementar um unidade. Observe que existem duas sintaxes possíveis para os operadores: pode-se colocar o operador à esquerda ou á direita da variável. Nos dois casos o valor da variável será incrementado (ou decrementado) de uma unidade. Porém se o operador for colocado á esquerda da variável, o valor da variável será incrementado (ou decrementado) antes que a variável seja usada em alguma outra operação. Caso o operador seja colocado à direita da variável, o valor da variável será incrementado (ou decrementado) depois que a variável for usada em alguma outra operação. Exemplo: Observe o fragmento de código abaixo e note o valor que as variáveis recebem após a execução da instrução: Valor das variáveis int a, b, c, i = 3; // a: ? b: ? c: ? i: 3 a = i++; // a: 3 b: ? c: ? i: 4 b = ++i; // a: 3 b: 5 c: ? i: 5 c = --i; // a: 3 b: 5 c: 4 i: 4 3.5. Operadores Relacionais e Lógicos A chave para a flexibilidade de um algoritmo é a tomada de decisões através da avaliação de condições de controle. Uma condição de controle é uma expressão lógica que é avaliada como verdadeira ou falsa. Uma expressão lógica é construída com operadores relacionais e lógicos. 3.5.1. Operadores relacionais Operadores relacionais verificam a relação de magnitude e igualdade entre dois valores. Os operados relacionais em C são os mesmos estudos anteriormente. Sintaxe: A sintaxe das expressões lógicas é: expressão_1 operador expressão_2 onde expressão_1 e expressão_2 são duas expressões numéricas quaisquer, e operador é um dos operadoresrelacionais. 50 Ao contrário de outras linguagens, em C não existem tipos lógicos, portanto o resultado de uma expressão lógica é um valor numérico: uma expressão avaliada verdadeira recebe o valor 1, uma expressão lógica avaliada falsa recebe o valor 0. Se os operandos forem de tipos diferentes haverá uma conversão de tipo antes da avaliação da expressão. 3.5.2. Operadores lógicos São três os operadores lógicos de C: &&, || e !. Estes operadores possuem o mesmo significado dos operadores lógicos Booleanos AND, OR e NOT. Sintaxe: A sintaxe de uso dos operadores lógicos: expr_1 && expr_2 expr_1 || expr_2 !expr onde expr_1 , expr_2 e expr são expressões quaisquer. Exemplo if(a>10 && a<20) 3.6. Operador Condicional O operador condicional (?:) é usado em expressões condicionais. Uma expressão condicional pode ter dois valores diferentes dependendo de uma condição de controle. Sintaxe: A sintaxe de uma expressão condicional é: condição ? expressão_1 : expressão_2 onde expressão_1 e expressão_2 são duas expressões quaisquer, e condição é uma expressão lógica que será avaliada primeiro. Se o valor de condição for 1, isto é, verdadeiro, então a expressão condicional assumirá o valor de expressão_1. Caso contrario assumirá o valor de expressão_2. Uma expressão condicional é equivalente a uma estrutura de decisão simples. Exemplo: Observe as expressões condicionais abaixo e verifique o resultado de sua avaliação. Admita que i, j e k são variáveis tipo int com valores 1, 2 e 3, respectivamente. Expressão Valor i ? j : k 2 j > i ? ++k : --k 4 k == i && k != j ? i + j : i - j -1 i > k ? i : k 3 51 4. A estrutura básica de um programa em C/ C++ Um programa em C/ C++ consiste de uma ou mais funções. Abaixo segue um programa do que se pode chamar de o menor programa possível: void main() { } A função que compõe este programa é chamada main. Os parênteses após o nome indicam que esta é uma função. A função main deve estar presente em qualquer programa na linguagem C e é a primeira função a ser executada. Se um programa tiver apenas uma função, ela deverá receber o nome main. As chaves de abertura “{“ e fechamento “}” devem compor o início e o fim do programa, respectivamente. 5. Montando o primeiro programa Em vez de montar um programa vazio, como o apresentado acima, vamos adicionar uma instrução para que o programa faça algo. Após compilar e rodar o programa acima, a seguinte mensagem será exibida na tela: Ola Mundo! 5.1. Análises sobre o 1º programa Sempre que uma função for utilizada, deve-se incluir a biblioteca que a contém. No exemplo acima, a função printf() é uma função do tipo saída de dados e, para ser executada, a linha #include <stdio.h> foi adicionada ao início do programa. O arquivo stdio.h possui declarações de funções úteis para entrada e saída de dados (std vem do inglês standard, e io vem de Input/Output, portanto significa entrada e saída padronizadas). Já a biblioteca stdlib.h inclui a função system(), que é responsável por executar comandos internos do sistema operacional ou um #include <stdio.h> #include <stdlib.h> int main() { printf("Ola Mundo!!!\n\n\n"); system("PAUSE"); return 0; } 52 programa (.EXE, .COM ou .BAT). Em nosso programa estamos executando o comando PAUSE. Sempre que um programa for escrito, é importante escrever comentários a respeito do que esperamos que aconteça em cada parte do programa. Comentários iniciam-se por /* e terminam em */. Sempre que o compilador encontrar esse comando, ele desconsiderará tudo que estiver depois dele. Um comentário pode, inclusive, ter várias linhas. A linha void main() define uma função de nome main. A palavra void indica que esta função não retorna nenhum valor. O conteúdo das chaves { } será executado de forma sequencial. O primeiro comando inserido nesse código é a função printf(), que possui o argumento “Ola Mundo!” A função do printf() é para imprimir um argumento na tela. Neste caso, o \n inserido na função printf() é a constante especial chamada de constante barra invertida. Essa constante é interpretada como uma mudança de linha e não é impressa na tela. O comando system(“PAUSE”) congela a tela com a impressão realizada. É extremamente importante notar que todos os comandos em C terminam em ponto e vírgula (;). 53 Aula 13: Comandos de entrada e saída de dados Objetivo: Compreender todo o uso da função scanf(), printf() e sprintf(), e ser capaz de ler informações do teclado e imprimir na tela, utilizando formatos pré-existentes. Na aula anterior foi explorado um pouco das funções printf(). Agora serão passados argumentos indispensáveis no uso destas funções. 1. Função printf() A Tabela 1 apresenta como algumas funções ou caracteres especiais são passadas para a função printf(), por exemplo, se uma nova linha deve ser impressa na tela, então o argumento de printf() deve ser “\n”. Tabela 1 - Lista de códigos para se inserir os caracteres informados. Código printf() Significado \n Nova linha \r Retorno do cursor \t Tabulação \b Retrocesso \” Aspas \\ Barra \f Salta página de formulário \0 Nulo A Tabela 2 apresenta os códigos para impressão de dados formatada. Tabela 2 - Códigos de impressão formatada. Código printf() Formato %c Caractere simples. %d Decimal. %e Notação científica. %f Ponto flutuante. %g Opta pelo mais curto entre %e ou %f. %o Octal. %s Cadeia de caracteres. %u Decimal sem sinal. %x Hexadecimal. %ld Decimal longo. %lf Ponto flutuante longo (double). O programa a seguir exemplifica o uso das formatações acima. 54 Como já foi apresentado, a função prinft() utiliza o percentual (%) para identificar o formato da impressão. Para que o percentual seja realmente impresso na tela, deve-se digitar %%. Dessa forma, o compilador entenderá que o que se quer imprimir realmente é o caractere, e não um formato. O uso do printf() também permite estabelecer o tamanho mínimo para a impressão de um campo. Por exemplo, a saída do código: é: Pode-se também utilizar o tamanho do campo para obter precisão e arredondamento em ponto flutuante: é: #include <stdio.h> #include <stdlib.h> int main () { printf ("%4.2f\n",345.57); printf ("%3.1f\n",345.57); printf ("%7.1f",345.57); system ("PAUSE"); } O numero correto e 100. O numero correto e 100. O numero correto e 100. #include <stdio.h> #include <stdlib.h> int main () { printf ("O numero correto e %2d.",100); printf ("O numero correto e %4d.",100); printf ("O numero correto e %5d.",100); system ("PAUSE"); } #include <stdio.h> #include <stdlib.h> int main () { printf ("A letra %c ",’j’); printf ("pronuncia-se %s.", "jota"); printf ("\nPara se imprimir uma barra invertida (\\) é necessário digitar duas barras."); system ("PAUSE"); } 55 2. Função scanf() A função scanf() é utilizada para fazer a leitura de dados através do teclado e utiliza o percentual (%) para identificar o formato da entrada de dados para a variável. Uma outro ponto que mão deve passar desapercebido, é o emprego do (&) antes da variável que esta sendo atribuído o valor na leitura. Veja o exemplo a seguir: Como pode ser observado no exemplo, no comando scanf temos dentro das aspas a atribuição do tipo de dados que esta sendo lindo e em seguida, antes da variável existe o operador &. Este uso é obrigatório e serve para alocar um endereço na memória RAM do computador, pois uma variável em C deve sempre estar alocada em um endereço da memória do computador. Outro detalhe importante a respeito deste programa é o emprego do comando fflush(stdin) após a leitura da variável do tipo texto. Isso
Compartilhar