Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade de Mogi das Cruzes Computação Profa. MSc. Viviane Guimarães Ribeiro Mogi das Cruzes, SP 2013 2 Sumário APRESENTAÇÃO DA DISCIPLINA ...................................................................................................... 4 EMENTA ................................................................................................................................................... 4 OBJETIVO DA DISCIPLINA ......................................................................................................................... 4 TÓPICOS DO SEMESTRE ............................................................................................................................ 4 METODOLOGIA ......................................................................................................................................... 4 AVALIAÇÃO .............................................................................................................................................. 4 DATAS IMPORTANTES ............................................................................................................................... 5 BIBLIOGRAFIA BÁSICA ............................................................................................................................. 5 BIBLIOGRAFIA COMPLEMENTAR .............................................................................................................. 5 1. INTRODUÇÃO À LÓGICA ................................................................................................................ 6 2. ALGORITMOS ...................................................................................................................................... 9 2.1. FORMAS DE REPRESENTAÇÃO DE UM ALGORITMO ........................................................................... 10 3. FLUXOGRAMA .................................................................................................................................. 11 4. PSEUDOCÓDIGO ............................................................................................................................... 16 5. LINGUAGEM C ................................................................................................................................... 20 5.1. BREVE HISTÓRICO ........................................................................................................................... 20 5.2. AMBIENTE DE DESENVOLVIMENTO.................................................................................................. 20 5.3. TIPOS DE DADOS .............................................................................................................................. 22 5.4. DECLARAÇÃO DE VARIÁVEIS .......................................................................................................... 22 5.5. OPERADORES ................................................................................................................................... 23 5.5.1. Atribuição ............................................................................................................................... 23 5.5.2. Aritméticos .............................................................................................................................. 23 5.5.3. Incremento e Decremento ....................................................................................................... 24 5.5.4. Aritmético de Atribuição ......................................................................................................... 24 5.5.5. Relacionais .............................................................................................................................. 24 5.5.6. Lógicos - && - E..................................................................................................................... 24 5.5.7. Lógicos - || - OU ..................................................................................................................... 25 5.5.8. Lógicos - ! – NÃO ................................................................................................................... 25 5.5.9. Condicional Ternário .............................................................................................................. 25 5.5.10. Tabela de Precedência .......................................................................................................... 25 6. ESTRUTURA SEQUENCIAL ............................................................................................................ 26 6.1. SAÍDA DE DADOS ............................................................................................................................. 26 7.1.1. printf() ..................................................................................................................................... 26 6.1.2. puts() ....................................................................................................................................... 30 6.1.3. putchar() ................................................................................................................................. 32 6.2. ENTRADA DE DADOS ....................................................................................................................... 34 6.2.1. scanf() ..................................................................................................................................... 34 6.2.2. gets() ....................................................................................................................................... 36 6.2.3. getchar() .................................................................................................................................. 37 6.2.4. getche() ................................................................................................................................... 38 6.2.5. getch() ..................................................................................................................................... 40 7. ESTRUTURA DE DECISÃO .............................................................................................................. 45 7.1. IF() ................................................................................................................................................... 45 7.2. IF() ELSE .......................................................................................................................................... 47 7.3. ENCADEAMENTO DE IF() .................................................................................................................. 50 7.4. SWITCH() ......................................................................................................................................... 53 8. ESTRUTURA DE REPETIÇÃO ........................................................................................................ 67 8.1. FOR() ............................................................................................................................................... 67 8.2. WHILE() ........................................................................................................................................... 73 8.3. DO... WHILE() ................................................................................................................................... 76 3 8.4. COMANDO BREAK ........................................................................................................................... 78 8.5. COMANDO CONTINUE ......................................................................................................................79 APÊNDICE A – BIBLIOTECAS ............................................................................................................ 82 APÊNDICE B - FUNÇÕES MATEMÁTICAS ..................................................................................... 83 APÊNDICE C – PALAVRAS RESERVADAS NA LING. C ............................................................... 84 Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 4 Apresentação da Disciplina Nome da Disciplina: Computação Professora MSc. Viviane Guimarães Ribeiro E-mail: viviane_umc@yahoo.com.br Ementa Conceitos de algoritmo, programação estruturada utilizando a Linguagem C e técnicas de programação estruturada. Objetivo da Disciplina Ao final do semestre letivo o aluno deverá ter as habilidades, os conhecimentos e as competências em informática necessárias para que possa utilizar o computador como ferramenta na vida acadêmica e profissional. Além disso, o aluno deverá ter conhecimento em conceitos básicos de programação estruturada. Tópicos do Semestre 1) Algoritmo e Programação Estruturada: Conceitos 2) Representação de Algoritmos: Descrição Narrativa 3) Representação de Algoritmos: Fluxograma 4) Representação de Algoritmos: Pseudocódigo / Português Estruturado / Portugol 5) Estruturas de Controle: Sequencial 6) Estruturas de Controle: Decisão Simples e Composta 7) Estruturas de Controle: Decisão Encadeada e Multipla Escolha 8) Estrutura de Repetição com Variável de Controle 9) Estrutura de Repetição com Teste no Início e no Fim 10) Linguagem C: Conceitos 11) Linguagem C: Comandos de Entrada e Saída 12) Linguagem C: Comando de Decisão Simples e Composta - if 13) Linguagem C: Comando de Decisão de Múltipla Escolha - switch 14) Linguagem C: Comando de Repetição - for 15) Linguagem C: Comando de Repetição - while 16) Linguagem C: Comando de Repetição - do.. while 17) Linguagem C: Uso dos comandos break e continue 18) Linguagem C: Vetores e MatrizesIntrodução à Lógica Metodologia Aulas expositivas e práticas com acompanhamento dos alunos nos computadores. Exercícios de fixação. Avaliação M1 = P1(70%) + AP(20%) + Listas(10%) ND = P1(70%) + AP(20%) + Listas(10%) M2 = 0,7*ND + 0,3*PI Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 5 MS = (M1+M2*2)/3 Onde: P1 e P2 são provas individuais agendadas. AP são as atividades práticas realizadas em sala (sem a necessidade de agendamento prévio) ou em casa. PI nota da Prova Integrada (conforme instrução normativa UMC 002/2010). Listas exercícios individuais realizados em casa entregues em datas pré- estabelecidas. Datas Importantes P1 – 01/10 P2 – 03/12 Recuperação – 17/12 OBS1: Não será aplicada prova substitutiva. OBS2: A disciplina tem caráter acumulativo, portanto em todas as provas será cobrado todo o conteúdo estudado até o momento no semestre. Bibliografia Básica • SALIBA, Walter Luiz Caram, Técnicas de Programação: Uma abordagem estruturada, Makron Books, São Paulo, 1993-2005. • GUIMARÃES, Ângelo de Moura; LAGES, Newton Alberto de Castilho, Algoritmos e Estruturas de Dados, Livros Técnicos e Científicos, Rio de Janeiro, 1994. • BOENTE, Alfredo, Aprendendo a programar em linguagem C – do básico ao avançado, Brasport, Rio de Janeiro, 2003. • PEREIRA, Silvio do Lago, Algoritmo e Lógica de Programação em C: uma abordagem didática, Editora Érica, São Paulo, 2010. Bibliografia Complementar • SCHILDT, Herbert, C completo e total, Pearson Makron Books, São Paulo, 2004. • FARRER, H. et all, Algoritmos Estruturados, Livros Técnicos e Científicos, Rio de Janeiro, 1999. • MANZANO, José Augusto Navarro Garcia; OLIVEIRA, Jayr Figueiredo de, Algoritmos: Lógica para desenvolvimento de programação de computadores, Editora Érica, São Paulo, 2004. • HICKSON, Rosângela, Aprenda a programar em C, C++ e C#, Editora Campus, Rio de Janeiro, 2002. • CHILDT, Herbert, Linguagem C: Guia do usuário, McGraw-Hill, São Paulo, 1986. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 6 1. Introdução à Lógica A palavra lógica é originária do grego logos, que significa linguagem racional. De acordo com o dicionário Michaelis, lógica é a análise das formas e leis do pensamento, mas não se preocupa com a produção do pensamento, quer dizer, não se preocupa com o conteúdo do pensamento, mas sim com a forma deste, isto é, com a maneira pela qual um pensamento ou uma ideia são organizados e apresentados, possibilitando que cheguemos a uma conclusão por meio do encadeamento dos argumentos. Os argumentos podem ser dedutivos ou indutivos. Os argumentos indutivos são aqueles com que, a partir dos dados, se chega a uma resposta por meio da analogia, ou seja, pela comparação com algo conhecido, porém esse tipo de raciocínio não oferece certeza de que a resposta será de fato verdadeira. É necessário conhecer os fatos ou as situações para que se possa fazer a comparação. Por exemplo: ontem não havia nuvens no céu e não choveu. Hoje não há nuvens no céu, portanto não vai chover. Já os argumentos dedutivos são aqueles cuja conclusão é obtida como conseqüência das premissas, isto é, por meio da análise das situações ou fatos, pode-se obter a resposta. Trabalha-se com a forma das sentenças, sem que haja a necessidade do conhecimento prévio das situações ou fatos. Por exemplo: Joana é uma mulher. As mulheres são seres humanos. Logo, Joana é um ser humano. Desde os tempos primitivos o homem utiliza-se do raciocínio lógico para a realização de suas atividades. Isso é comprovado pelo fato de ele ter estabelecido sequências adequadas para a realização de suas tarefas com sucesso. Podemos citar alguns exemplos relacionados às suas atividades do dia – a – dia: • Uma pessoa adulta, para tomar banho, primeiro tira a roupa para não molhá-la e também para estabelecer contato direto entre sua pele e a água. • Uma criança, desde pequena, aprende que, para chupar uma bala, é preciso tirá-la da embalagem. A lógica é aplicada a diversas ciências. Na informática e na computação, aplica-se a todas as suas áreas, para a construção e funcionamento do hardware e do software. Por exemplo, na construção de um circuito integrado para o teclado, trabalha-se com o conceito de portas lógicas para a verificação da passagem ou não de pulsos elétricos, a fim de que seja estabelecida uma comunicação entre os componentes. Já na construção de software, é por meio do raciocínio lógico que o homem constrói algoritmos que podem ser transformados em programas de computador capazes de solucionar problemas cada vez mais complexos. Como foi visto anteriormente, a lógica preocupa-se com a forma da construção de pensamento. Isto permite que se trabalhe com variáveis para que se possa aplicar o mesmo raciocínio a diferentes problemas. Por exemplo: João é cientista. Todo cientista é estudioso. Logo, João é estudioso. Substituindo as palavras “João” e “estudioso” por A e B: A é cientista. Todo cientista é B. Logo, A é B. O raciocínio lógico nos conduz a uma resposta que pode ser “verdadeiro” ou “falso”. Na construção de algoritmos para a solução de problemas computacionais, trabalha-se com esse tipo de raciocínio. As informações a serem analisadas são representadas por variáveis que posteriormente receberão valores. As variáveis, por sua vez, representarão as premissas. Por exemplo: Dados dois valores quaisquer, deseja-se saber qual é o maior. Os dois valores são representados pelas variáveis A e B. Analisa-se o problema a fim de averiguar qual é a melhormaneira de descobrir a solução, então se monta a sequência para Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 7 que seja verificada a questão. Para descobrir a solução, pode-se partir de problemas similares já resolvidos e, por analogia, aplicar o mesmo método ao problema atual, ou podem-se estudar formas de resolvê-lo buscando dados com especialistas no assunto em questão. Neste caso, vamos substituir as variáveis por valores conhecidos, apenas como modelo para facilitar o entendimento do raciocínio aplicado: A será substituída por 7 e B, por 19. Para que seja verificado o maior valor, deve-se fazer uma comparação, por exemplo: 7 é maior que 19? Logo tem-se a resposta falso. Então, pode-se concluir que 19 é o maior número entre os dois. Quando os valores são desconhecidos, na representação para a solução do problema, trabalha-se apenas com as variáveis: A é maior que B? Se a resposta é “verdadeiro”, A é o maior valor. Se a resposta é “falso”, B é o maior valor. Exercícios 1. Dadas as premissas a seguir, verifique quais são as sentenças que representam a conclusão correta: I- Cavalos são animais. Animais possuem patas, Logo: a. Cavalos possuem patas. b. Todos os animais são cavalos. c. Os cavalos possuem quatro patas. II- Retângulos são figuras que têm ângulos. Temos uma figura sem nenhum ângulo. Logo: a. Essa figura pode ser um circulo. b. Não é possível tirar conclusões. c. Essa figura não é um retângulo. III- Se o verde é forte, o vermelho é suave. Se o amarelo é suave, o azul é médio. Mas ou o verde é forte ou o amarelo é suave. Forte, suave e médio são as únicas tonalidades possíveis. Logo: a. O azul é médio. b. Ou o vermelho é suave ou o azul é médio. c. O amarelo e o vermelho são suaves. 2. Sabe-se que existem pessoas desonestas e que existem corruptos. Admitindo-se verdadeira a frase “Todos os corruptos são desonestos”, é correto concluir que: a. quem não é corrupto é honesto. b. existem corruptos honestos. c. alguns honestos podem ser corruptos. d. existem mais corruptos do que honestos. e. existem desonestos que são corruptos. 3. Se é verdade que “Alguns A são R” e que “Nenhum G é R”, então é necessariamente verdadeiro que: a. algum A não é G. b. algum A é G. c. nenhum A é G. d. algum G é A. e. nenhum G é A. 4. Em uma comunidade, todo trabalhador é responsável. Todo artista, se não for filósofo, ou é trabalhador ou é poeta. Ora, não há filósofo e não há poeta que não seja responsável. Portanto, tem-se que, necessariamente: a. todo responsável é artista. b. todo responsável é filósofo ou poeta. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 8 c. todo artista é responsável. d. algum filósofo é poeta. e. algum trabalhador é filósofo. 5. Analise e descreva uma maneira de mover os discos do pino A para o pino C, usando o pino B como espaço auxiliar, de modo que: a. apenas um disco seja movido de cada vez; b. nenhum disco seja posicionado sobre outro disco de diâmetro menor; c. os discos sejam imediatamente transferidos de um pino para o outro. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 9 2. Algoritmos Um algoritmo é uma sequência de ações finitas encadeadas e lógicas que devem ser seguidas para a resolução de um problema ou para a execução de uma tarefa. Os algoritmos são amplamente utilizados nas disciplinas ligadas à área de ciências exatas. No dia a dia, as pessoas utilizam-se de algoritmos de maneira intuitiva, sem que haja a necessidade de planejar previamente a sequência de passos para a resolução das tarefas quotidianas. Dentre os inúmeros exemplos existentes, podemos citar: 1. Quando uma pessoa prepara um bolo, segue uma receita, que nada mais é do que um algoritmo em que casa instrução é um passo a ser seguido para que o prato fique pronto com sucesso: • Bata 4 claras em neve; • Adicione 2 xícaras de açúcar; • Adicione 2 xícaras de farinha de trigo, 4 gemas, 1 colher de fermento e 2 colheres de chocolate; • Bata por 3 minutos; • Unte uma assadeira com margarina e farinha de trigo; • Coloque o bolo para assar durante 20 minutos em temperatura média. 2. Um motorista que necessita efetuar a troca de um pneu furado segue uma rotina para realizar esta tarefa: • Verifica qual pneu está furado; • Posiciona o macaco para levantar o carro; • Pega o estepe; • Solta os parafusos; • Substitui o pneu furado; • Recoloca os parafusos; • Desce o carro; • Guarda o pneu furado e as ferramentas utilizadas. Porém, no contexto da ciência da computação, estamos interessados em definir algoritmos que serão executados por computadores e não por pessoas. Assim, ao definir um algoritmo computacional, precisamos nos restringir a um conjunto bastante limitado de passos (ou operações) que um computador é capaz de executar. Além disso, precisamos de uma notação que permita descrever precisamente estes passos, sem nenhuma ambiguidade. Ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em três fases fundamentais: entrada de dados, processamento e saída de dados. Entrada: são os dados necessários para o inicio do processamento. Processamento: são procedimentos que utilizam os dados de entrada para chegar ao resultado final. Saída: são os dados já processados. A figura a baixo faz uma analogia entre o processamento computacional e o humano. Entrada Processamento Saída Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 10 Imagine o seguinte problema: Calcular a média final de um aluno. Pelas provas os alunos receberão 2 notas: N1, N2. Onde: Média Final = (nota1 + nota2 * 2 )/3 a) Quais são os dados de entrada? R: Os dados de entrada são nota1 e nota2. b) Qual será o processamento a ser utilizado? R: O procedimento será multiplicar a nota2 por dois, somar o resultado com o valor da nota1 e dividir o resultado da soma por 3. c) Quais serão os dados de saída? R: O dado de saída será a média final 2.1. Formas de representação de um algoritmo Um algoritmo pode ser representado das seguintes maneiras: • Descrição Narrativa: utiliza linguagem natural para especificar os passos para a realização das tarefas. Isso dá margens a más interpretações e ambigüidades. Não é muito utilizada. • Fluxograma: é uma forma universal de representação, pois utiliza de formas geométricas para ilustrar os passos a serem seguidos para a resolução dos problemas. Bastante utilizado, é também chamados por alguns autores de diagrama de blocos. • Diagrama de Chapin (Diagrama Nassi-Shneiderman/Diagrama N-S): apresenta a solução do problema por meio de um diagrama de quadros com uma visão hierárquica e estruturada. Esse tipo de diagrama não é muito utilizado, pois é muito difícil representar recursividade, entre outros procedimentos. • Pseudocódigo (Portugol/Português Estruturado): utiliza linguagem estruturada. É bastante utilizado para representação da resolução de problemas computacionais. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 11 3. Fluxograma É uma representação gráfica de algoritmos onde formas geométricas diferentes implicam ações (instruções, comandos) distintas. Tal propriedade facilita o entendimento das ideias contidas nos algoritmos e justifica sua popularidade. A seguir são apresentados os principais símbolos e suas descrições. É importante lembrar que existem pequenas diferenças entreas simbologias utilizadas pelos diferentes autores. Início/Fim Fluxo de Dados Entrada de dados ou ou Saída de dados ou Atribuição Conector Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 12 Decisão Se Escolha Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 13 Repetição Para Enquanto Repita Em um fluxograma, os passos de um algoritmo são representados por símbolos e a ordem de execução desses passos é representada por setas conectando os símbolos. Cada símbolo pode conter uma anotação indicando sua finalidade específica. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 14 Exemplo 1: Note que todo dado manipulado pelo computador deve estar armazenado em alguma posição de sua memória. Uma posição de memória contendo um dado que pode ser alterado pelo algoritmo é denominada variável. Basicamente uma variável possui três atributos: um nome, um tipo de dado associado à mesma e a informação por ela guardada. Toda variável possui um nome que tem a função de diferenciá-la das demais. Cada linguagem de programação estabelece suas próprias regras de formação de nomes de variáveis. Adotaremos as seguintes regras: • Um nome de variável deve necessariamente começar com uma letra; • Um nome de variável não deve conter nenhum símbolo especial, exceto a sublinha ( _ ). Obviamente é interessante adotar nomes de variáveis relacionados às funções que serão exercidas pelas mesmas dentro de um programa. Outro atributo característico de uma variável é o tipo de dado que ela pode armazenar. Este atributo define a natureza das informações contidas na variável. Por último, há o atributo informação, que nada mais é do que a informação útil contida na variável. Uma vez definidos, os atributos nome e tipo de dados de uma variável não podem ser alterados e assim permanecem durante toda a sua existência, desde que o programa que a utiliza não seja modificado. Por outro lado, o atributo informação está constantemente sujeito a mudanças, de acordo com o fluxo de execução do programa. Por exemplo, se definirmos que uma determinada variável é chamada salário e é destinada a guardar números reais, é possível que seu conteúdo seja, num dado instante, igual a 1.500,00 e posteriormente modificado para 3.485,21, de acordo com o programa executado. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 15 Em resumo, o conceito de variável foi criado para facilitar a vida dos programadores, permitindo acessar informações na memória dos computadores por meio de um nome, em vez do endereço de uma célula de memória. Exercícios 1. Explique o que é uma variável e escreva a regra para criação de nome de variáveis em algoritmos. 2. Dados os identificadores (nomes das variáveis) abaixo, sublinhe apenas aqueles nomes que são aceitos em Algoritmos. VALOR SALARIO-LIQUIDO X X2 A1B2C3 1ºnome 1 3 x 4 Maria Km/h preço ‘Nota’ Média XYZ SalarioLiquido preco Nota-do-aluno NoTa Algoritmo profissao 3. Escreva um algoritmo em Fluxograma para cada situação abaixo: a) Carlos precisa calcular a área de uma sala. Sabe-se que a sala é retangular. b) O professor de matemática precisa calcular a média de um aluno. Para tanto ele precisa levar em consideração 4 notas do aluno. c) Ler um número inteiro e imprimir seu sucessor e seu antecessor. d) Ler o saldo de uma aplicação e imprimir o novo saldo, considerando um reajuste de 1%. e) Ler duas variáveis inteiras e trocar o conteúdo entre elas apresentando o nome de cada variável com seu respectivo valor ao usuário. f) O preço de um produto ao consumidor é a soma do preço de custo e da porcentagem do imposto. Faça um algoritmo que leia o nome do produto, o custo de fábrica e a porcentagem do imposto. Exiba o nome do produto e o preço final ao consumidor. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 16 4. Pseudocódigo O pseudocódigo é um tipo de algoritmo que utiliza uma linguagem flexível, intermediária entre a linguagem natural e a linguagem de programação. Aqui, cada símbolo utilizado no fluxograma possui uma palavra chave equivalente, o que torna o fluxograma livre de ambiguidades. Esta forma de representação de algoritmos é mais rica em detalhes, como a definição dos tipos das variáveis usadas. Na verdade, esta representação é suficiente para permitir que a tradução de um algoritmo nela representado para uma linguagem de programação específica seja praticamente direta. Forma geral: Algoritmo <nome do algoritmo>; <declaração de variáveis>; <subalgoritmos> Início <corpo do algoritmo>; Fim Exemplo 1: Algoritmo Media; Identificação do algoritmo Var nota1, nota2, mf: real; Declaração de variáveis Inicio Escreva (“Entre com a primeira nota: ”); Leia (nota1); Escreva (“Entre com a segunda nota: ”); Leia (nota2); Corpo do algoritmo mf ← (nota1 + nota2 * 2) / 3; Escreva (“Média final: ”, mf); Fim Para definir o nome de um algoritmo, deve-se seguir a mesma regra para criação de nomes de variáveis, ou seja, o nome do algoritmo deve iniciar com uma letra e não conter caracteres especiais. Todas as variáveis utilizadas no algoritmo devem ser declaradas. É neste momento que definimos o nome da variável e o tipo de dado que será armazenado na mesma. Na confecção de algoritmos, utilizamos os tipos de dados primitivos (literal, lógico, inteiro e real), uma vez que os algoritmos apenas representam a solução dos problemas. Já na confecção de programas existem desdobramentos para esses tipos de dados a fim de adequá-los melhor ao propósito de cada linguagem e à resolução prática dos problemas. Veja na tabela a seguir os tipos de dados primitivos utilizados em algoritmos. Tipo de Dados Definição Capacidade de armazenamento inteiro Representa números inteiros (sem casas decimais) positivos ou negativos. 2 bytes = 28 x 28 = 65.536 possibilidades (-32.768 à 32.767). real Representa números reais (com casas decimais) positivos ou negativos. 4 bytes = 28 x 28 x 28 x 28 = 4.294.967.296 possibilidades (-3,4E-38 à +3,4E+38). literal Poderá receber letras, números e símbolos. OBS: Os números armazenados 1 byte para cada caracter necessário. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 17 em uma variável cujo tipo de dado é literal não podem ser utilizados para cálculo. lógico Poderá ser verdadeiro (1) ou falso (0) 1 byte O corpo do algoritmo é a área reservada para a resolução do problema. Nesta parte, devem-se escrever todos os passos lógicos necessários para solucionar o problema, tais como: • representar a entrada de valores para as variáveis; • representar as operações de atribuição, lógicas e aritméticas; • representar a abertura e fechamento de arquivos; • representar os laços de repetição; • representar a exibição dos resultados; • representar as estruturas de decisão; entre outros. Início/Fim Início Fim Entrada de dados Leia (<variável>); Saída de dados Escreva (<valor a ser impresso>); Atribuição <variável> ← <valor>; DecisãoSe Se (<condição>) Então <Comando 1>; Senão <Comando 2>; Fim_Se Escolha Escolha (<variável>) Caso <valor_1>: <Comando 1>; Caso <valor_2>: <Comando 2>; ..... Caso <valor_n>: <Comando n>; Senão <Comando n + 1>; Fim_Escolha Para Para <var> de <início> até <fim> incr de <inc> faça <comando>; Fim_Para Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 18 Repetição Enquanto Enquanto (<condição>) faça <comando>; Fim_Enquanto Repita Repita <comando>; até que (<condição>); Exercícios 1. Classifique os dados especificados abaixo de acordo com seu tipo (inteiro, real, literal ou lógico). 0.7845 “-0.0” “+35987” “abc” .V. .F. “.F.” -0.0 32 +36 32.0 -1 2. Preencha a “Declaração de variáveis” com o tipo de dados, levando em consideração os dados armazenados em cada uma das variáveis da tabela abaixo: Identificadores num1 num2 sexo letra Profissao nome media peso Conteúdo (Dados) 100 4 F .V. Médico Fernanda 5.7 67.8 Var num1, num2: ________________________________ sexo: ______________________________________ letra: _______________________________________ Profissao,nome: ______________________________ media, peso: _________________________________ Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 19 3. Escreva um algoritmo em Pseudocódigo para cada situação abaixo: a. O professor de matemática precisa calcular a média de um aluno. Para tanto ele precisa levar em consideração 4 notas do aluno. b. Ler um número inteiro e imprimir seu sucessor e seu antecessor. c. Ler duas variáveis inteiras e trocar o conteúdo entre elas apresentando o nome de cada variável com seu respectivo valor ao usuário. d. O preço de um produto ao consumidor é a soma do preço de custo e da porcentagem do imposto. Faça um algoritmo que leia o nome do produto, o custo de fábrica e a porcentagem do imposto. Exiba o nome do produto e o preço final ao consumidor. e. Dados o tamanho de um arquivo (em bits), bem como a velocidade da conexão (em bits por segundo), informe o tempo necessário para o download do arquivo. f. Dados um capital C, uma taxa de juros mensal fixa J e um período de aplicação em meses M, informe o montante F no final do período (F = C * (1 + J/100)M). Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 20 5. Linguagem C Para que um computador possa desempenhar uma tarefa é necessário que esta seja detalha passo a passo, numa forma compreensível pela máquina, utilizando aquilo que se chama de programa. Neste sentido, um programa nada mais é que um algoritmo escrito numa forma compreensível pelo computador. Um programa pode ser escrito em diversas linguagens de programação, como por exemplo: Pascal, Fortran, COBOL, Clipper, Basic, C, etc. Durante este semestre iremos estudar a linguagem C. 5.1. Breve Histórico O C é uma linguagem de programação genérica que é utilizada para a criação de programas diversos como: processadores de texto, planilhas eletrônicas, sistemas operacionais, programas de comunicação, programas para automação industrial, gerenciadores de banco de dados, programas de projetos assistidos por computador, programas de solução de problemas da Engenharia, Física, Química e outras ciências. As instruções da Linguagem C consistem de termos semelhantes a expressões algébricas, acrescidas de certas palavras chave em inglês. C foi desenvolvida a partir de duas linguagens anteriores, a BCPL e B, criadas no final da década de 60. Ambas as linguagens eram definidas sem tipo, ou seja, qualquer dado ocupava um mesmo espaço na memória. A linguagem C foi criada por Dennis Ritchie e Ken Thompson, em 1972, no centro de pesquisa da Bell Laboratories. Sua primeira utilização importante foi a reescrita do sistema Unix. Em meados da década de 70, o Unix foi liberado para utilização nas universidades, dando o impulso para o sucesso da linguagem. ANSI C (American National Standards Institute) é a versão da linguagem C padronizada em 1989 nos EUA como também no mundo através da International Standards Organization — ISO. C++ é uma linguagem derivada da linguagem C. O conjunto de instruções que fazem parte da linguagem C também é parte de C++. Os elementos principais que foram adicionados à linguagem C para dar origem a C++ consistem na ideia de programação orientada ao objetos. Qualquer programa em C compilado no padrão ANSI também pode ser compilado em C++, ou seja, C e C++ são compatíveis. 5.2. Ambiente de Desenvolvimento Um compilador, também chamado de ambiente de desenvolvimento, é um programa que interpreta os comandos escritos em uma linguagem de programação e os converte em uma forma que o computador seja capas de executar. Em geral, há vários compiladores diferentes para uma mesma linguagem de programação. Como exemplo de compiladores para a linguagem C, podemos citar o Turbo C (proprietário), o DEV C (gratuito) e o Pelles C (gratuito). No decorrer deste semestre, utilizaremos o ambiente de desenvolvimento Pelles C1. 5.2.1 Criação de programas utilizando o Pelles C Para desenvolver um programa usando o compilador Pelles C for Windows, você deve, para cada programa, proceder da seguinte forma: 1º passo: inicie a execução do programa Pelles C; 2º passo: no menu desse programa, selecione a opção File � New � Project. 1 O compilador Pelles C for Windows pode ser obtido gratuitamente em www.smorgasbordet.com/pellesc Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 21 3º passo: na janela New Projects, selecione Win32 Console program (EXE), digite o nome de projeto e clique no botão OK. 4º passo: no menu, selecione a opção File � New � Source code. 5º passo: digite o programa em linguagem C. 6º passo: no menu, selecione a opção File � Save as, digite o nome do programa (que pode ser o mesmo dado ao projeto) e clique no botão Salvar. 7º passo: clique no botão Sim, da caixa que apresenta a pergunta “Do you want to add the file ‘...’ to the current Project? ”. 8º passo: no menu, clique no botão Execute ( ). Figura 1- Tela de digitação do programa Figura 2 - Tela de execução do programa Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 22 5.3. Tipos de dados Tipo de Dado Quantidade de Byte Descrição Faixa de Abrangência Equivalente em Algoritmo char 1 Armazena caracteres alfanuméricos -127 a 127 literal int 2 É utilizado para armazenar números inteiros negativos e positivos -32.767 a 32.767 inteiro float 4 Armazena números com casas decimais (números reais) Seis dígitos de precisão real double 8 Armazena números com casas decimais (números reais) Dez dígitos de precisão real void 1 É utilizado como retorno de funções e tipo de ponteiros - - bool 1 Valor booleano. Pode assumir um dos dois valores: true ou false NOTA: esse é um tipo que foi adicionado recentemente pelo padrão ANSI-C++. Nem todos os compiladores suportam-no. true ou false lógico 5.4. Declaração de Variáveis Um programa em linguagem C não funciona se você não declarar suas variáveis. As variáveis são declaradas em qualquer lugar do programa, desde que antes de serem utilizadas. Uma declaração de variável consiste no nome de um tipo seguido do nome da variável (identificador),seguido de ponto-e-vírgula. Por exemplo: int contador; float acumulador; Inicializar uma variável significa atribuir um valor a ela na mesma instrução de sua declaração. Utiliza-se o operador de atribuição (=) para a definição do valor inicial. Exemplo: int contador = 0; float tempo = 30.00; Você pode usar quantos caracteres quiser para um nome de variável, sendo o primeiro caractere obrigatoriamente uma letra ou o sublinhado. Somente os 32 primeiros caracteres de um nome de variável são significativos e não é permitido o uso de uma palavra-chave da linguagem. Em C, letras maiúsculas e minúsculas são diferentes. Exemplo de um programa com definição de variáveis: Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 23 Figura 3 - Código fonte. Exemplo de declaração de variáveis. Figura 4 - Tela produzida pelo programa da figura 3. 5.5. Operadores Um operador é um símbolo usado para criar expressões, a partir de constantes e variáveis. 5.5.1. Atribuição É o sinal de igual (=). Atribui a expressão da direita à variável à sua esquerda. Em C podem ocorrer atribuições múltiplas. Operação Algoritmo Linguagem C Atribuição � = Ex.: y = 3; y = x = 3; y = ( x = 3 ); 5.5.2. Aritméticos Existem operadores denominados binários (trabalham com dois operandos) e unários (funcionam com um operando). Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 24 Operadores aritméticos binários Operação Algoritmo Linguagem C Soma + + Subtração - - Multiplicação * * Divisão inteira div / Divisão real / / Resto da divisão inteira mod % Operadores aritméticos unários Operação Algoritmo Linguagem C Menos unitário (mult. o valor ou variável por -1) - - 5.5.3. Incremento e Decremento Incrementam (++) ou decrementam (–) a variável operando de 1. Podem ser prefixado ou pós- fixado. Ex.: x = x + 1; ++ x; ou x++; adiciona 1 a x 5.5.4. Aritmético de Atribuição Combinam operações aritméticas com atribuições. Compactam as operações. Segue a regra: variável operação= expressão Ex.: i += 2; equivale a i = i + 2 x *= y + 1; equivale a x = x * (y + 1) t /= 2.5; equivale a t = t/2.5 p %= 5; equivale a p = p % 5 5.5.5. Relacionais Operação Algoritmo Linguagem C Maior > > Maior ou igual >= >= Menor < < Menor ou igual <= <= Igual = == Diferente <> != Os operadores relacionais têm precedência menor que os aritméticos. 5.5.6. Lógicos - && - E Resulta 1 (V) somente se as duas expressões forem verdadeiras. A B Algoritmo Linguagem C A e B A&&B 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 25 5.5.7. Lógicos - || - OU Resulta 0 (F) somente se as duas expressões forem falsas. A B Algoritmo Linguagem C A ou B A||B 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 5.5.8. Lógicos - ! – NÃO Resulta 1 (V) somente se a expressão for falsa. A B Algoritmo Linguagem C não A não B !A !B 0 0 1 1 1 1 0 1 1 0 1 0 1 0 0 1 0 1 1 1 0 0 0 0 5.5.9. Condicional Ternário É o único que opera sobre três expressões. exp1 ? exp2 : exp3; A exp1 é avaliada primeiro. Se for verdadeira, exp2 é avaliada e seu resultado é o valor da expressão como um todo. Se exp1 for zero (falso), exp3 é avaliada e será o valor da expressão condicional. Ex: max = (a > b)?a : b; Neste exemplo a variável que contém o maior valor numérico entre a e b será atribuída a max. 5.5.10. Tabela de Precedência O nível de precedência dos operadores é avaliado da esquerda para a direita. Os parênteses podem ser utilizados para alterar essa ordem, sendo indicado seu uso a fim de tornar o programa (a expressão) mais legível. A tabela abaixo mostra a precedência dos operadores vistos até agora. Maior () !, ++, --, -(unário) *, /, % +, - ==, != && || ?: Menor +=, -=, *=, /= Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 26 6. Estrutura Sequencial As operações de entrada e saída de dados permitem a interação de um programa e/ou algoritmo com o usuário, seja permitindo que o mesmo digite valores (entrada de dados) ou exibindo informações (saída de dados). Estas operações são representadas tanto em algoritmos (fluxograma e pseudocódigo) quanto em linguagem C. 6.1. Saída de Dados Esta operação permite que o programa exiba mensagens ou valores de variáveis, através do monitor. Fluxograma Pseudocódigo Escreva (“Boa noite”); Escreva (x); Escreva (“Soma: ”, s); Em linguagem C, existem 3 funções (comandos) diferentes que permitem a saída de dados: printf(), puts() e putchar(). 7.1.1. printf() O printf() é uma função utilizada para saída de informações. É a função mais genérica de saída de dados, pois pode ser usado em qualquer situação. A função printf() requer a utilização dos códigos de formatação de tipos de variáveis. Código printf() Formato %c Apenas um caracter. %d Decimal inteiro. %e Notação científica. %f Ponto flutuante – float ou double. %g %e ou %f (o mais curto). %o Octal. %s Cadeia de caracteres – String. %u Decimal sem sinal. %x Hexadecimal. %% Coloca na tela um % Além dos códigos de formatação a função printf() permite a utilização de códigos especiais para a exibição de caracteres específicos. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 27 Códigos especiais Significado \n Nova linha. \t Tab. \b Retrocesso. \” Aspas. \’ Apóstrofo. \\ Barra invertida. \f Salta página de formulário. \0 Nulo. \x Mostra caracter hexadecimal. \a Produz o som de um beep. Exemplo 1: Fluxograma Algoritmo Algoritmo Exemplo1; Var x: inteiro; Inicio x ← 2; Escreva (“Tenho ”,x, “irmãos.”); Fim Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 28 Exemplo 2: Fluxograma Algoritmo Algoritmo Exemplo2; Inicio Escreva (“Juan tem 25 anos de idade.”); Fim Linguagem C Tela Exemplo 3: Fluxograma Algoritmo Algoritmo Exemplo3; Inicio Escreva (“A letra j ”); Escreva (“pronuncia-se jota”); Fim Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 29 Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 30 6.1.2. puts() Representa a saída de uma única literal por vez, seguida do caracter de nova linha, ou seja, a função muda de linha automaticamente sem que haja a necessidade do pressionamento da tecla de entrada de dados, ENTER. Exemplo 4: Fluxograma Algoritmo Algoritmo Exemplo4; Inicio Escreva (“Gabriel”); Fim Linguagem C Tela Exemplo 5: Fluxograma Algoritmo Algoritmo Exemplo5; Inicio Escreva (“Digite seu nome”); Fim Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 31 Linguagem C Tela Engenharia Civil - ComputaçãoProfa. MSc. Viviane Guimarães Ribeiro 32 6.1.3. putchar() Representa a saída de apenas um caracter na tela do computador e não acrescenta uma nova linha automaticamente. As duas instruções seguintes são equivalentes. putchar(‘w’); printf(“%c”, ‘w’); Exemplo6: Fluxograma Algoritmo Algoritmo Exemplo6; Inicio Escreva (“A primeira letra ”); Escreva (“do alfabeto é... ”); Escreva (“a”); Fim Linguagem C Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 33 Tela Neste exemplo foi utilizada a biblioteca <conio.h> que permite ao programador usar a função clrscr() para limpar a tela do computador e a função gotoxy(COL,LIN) para posicionar o cursor em um ponto de coluna e linha na tela do computador. Note que, segundo a convenção adotada pelo compilador Pelles C, todas as funções que não são padrão em C têm seus nomes iniciados com um caracter de sublinha ( _ ). Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 34 6.2. Entrada de Dados Esta operação permite que o usuário forneça dados ao programa, através de sua interação com o teclado. Fluxograma Pseudocódigo Leia (x); Leia (n1, n2); Leia (nome); Em linguagem C, existem 5 funções (comandos) diferentes que permitem a entrada de dados: scanf(), gets(), getchar(), getche() e getch(). 6.2.1. scanf() É utilizada para permitir ao usuário realizar uma entrada de dados, geralmente através do teclado. Assim como a função printf() requer a utilização dos códigos de formatação de tipos de variáveis. Código printf() Formato %c Apenas um caracter. %d Decimal inteiro. %e Notação científica. %f Ponto flutuante – float ou double. %g %e ou %f (o mais curto). %o Octal. %s Cadeia de caracteres. %u Decimal sem sinal. %x Hexadecimal. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 35 Exemplo 7: Fluxograma Algoritmo Algoritmo Soma; Var a, b, soma: inteiro; Inicio Escreva (“Entre com dois números: ”); Leia (a,b); soma ← a + b; Escreva (“Soma= ”, soma); Fim Linguagem C Tela Na função scanf() utiliza-se o & antes de cada variável para indicar o endereço de memória no qual o conteúdo da variável estará armazenado. Este é de uso obrigatório quando tratamos variáveis do tipo numérico (inteira ou real). Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 36 6.2.2. gets() Essa função processa tudo que foi digitado até que a tecla ENTER seja pressionada. O caracter ENTER não é acrescentado à literal, mas sim identificada como término da mesa. Exemplo 8: Fluxograma Algoritmo Algoritmo Nome; Var nome: literal[35]; Inicio Escreva (“Digite seu nome: ”); Leia (nome); Escreva (“Como vai ”, nome); Fim Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 37 6.2.3. getchar() Essa função é utilizada quando queremos efetuar a entrada de apenas um caracter, não dispensando a necessidade de se pressionar a tecla ENTER para finalizar. Exemplo 9: Fluxograma Algoritmo Algoritmo Tecla1; Var ch: literal[1]; Inicio Escreva (“Digite uma tecla: ”); Leia (ch); Escreva (“A tecla que você pressionou foi ”, ch); Fim Linguagem C Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 38 Tela 6.2.4. getche() Essa função edita um caracter do teclado e permite que ele seja mostrado na tela do computador. É dispensável o pressionamento da tecla ENTER por parte do usuário. Isso já ocorre de forma automática. Exemplo 10: Fluxograma Algoritmo Algoritmo Tecla1; Var ch: literal[1]; Inicio Escreva (“Digite uma tecla: ”); Leia (ch); Escreva (“A tecla que você pressionou foi ”, ch); Fim Linguagem C Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 39 Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 40 6.2.5. getch() Essa função permite que o usuário forneça um caracter através do teclado. Este caracter não será mostrado na tela do computador. Também é dispensável o pressionamento da tecla ENTER. Esta função também atende à necessidade como recurso de parada temporária da execução do programa. Exemplo 11: Fluxograma Algoritmo Algoritmo Tecla1; Var ch: literal[1]; Inicio Escreva (“Digite uma tecla: ”); Leia (ch); Escreva (“A tecla que você pressionou foi ”, ch); Escreva (“A função getch() causou uma pausa no programa.”); Fim Linguagem C Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 41 Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 42 Exercícios 1. Observe o fluxograma abaixo e escreve o pseudocódigo equivalente. 2. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C para calcular o valor de y como função de x, segundo a função y(x)=3x+2, em um domínio real. 3. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que calcule o consumo médio de um automóvel (medido em km/l), dado que são conhecidos a distância total percorrida e o volume de combustível consumido para percorrê-la (medido em litros). 4. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C para calcular o quadrado de um número inteiro. 5. Considerando o programa abaixo execute a simulação (teste de mesa), preenchendo a tabela conforme os valores de entrada lançados em cada linha. #include <stdio.h> main() { float X, Y, F; printf ("Entre com o valor de x: "); scanf ("%f", &X); printf ("Entre com o valor de y: "); scanf ("%f", &Y); F = (2 * X) + 3 * (Y * Y); printf ("Funcao = %.2f\n", F); } X Y F 2 5 5 8 1 12 10 4 Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 43 6. Observe a figura abaixo e marque um X no programa que cria a tela apresentada. a) ( ) #include<stdio.h> main(){ float c, l, p, t; printf("Medidas? "); scanf("%d %d", &l, &c); printf("Preco m2? "); scanf("%d",&p); t = c*l*p; printf("Custo total R$ %.2d\n",t); } b) ( ) #include<stdio.h> main(){ int c, l, p, t; printf("Medidas? "); scanf("%f %f", &l, &c); printf("Preco m2? "); scanf("%f",&p); t = c*l*p; printf("Custo total R$ %.2f\n",t); } c) ( ) #include<stdio.h> main(){ float c, l, p, t; printf("Medidas? "); scanf("%f %f", &l, &c); printf("Preco m2? "); scanf("%f",&p); t = c*l*p; printf("Custo total R$ %.2f\n",t); } d) ( ) #include<stdio.h> main(){ float c, l, p, t; printf("Medidas? "); scanf("%f %f", l, c); printf("Preco m2? "); scanf("%f",&p); t = c*l*p; printf("Custo total R$ %.2d\n",t); }7. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que leia o saldo de uma aplicação e imprimir o novo saldo, considerando um reajuste de 15%. 8. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C 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. 9. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que calcule e mostre a área de um circulo. Sabe-se que: piR2. 10. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que receba o ano de nascimento de uma pessoa e o ano atual, calcule e mostre: - A idade desta pessoa hoje; - A idade desta pessoa em 2015. 11. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que converta segundos em minutos e segundos. Por exemplo, 252 segundos equivalem a 4 minutos e 12 segundos. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 44 12. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que dados dois lados de um triângulo retângulo calcule e exiba a respectiva hipotenusa 13. Faça um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que receba o número de horas trabalhadas e o valor do salário mínimo. Calcule e mostre o salário a receber seguindo as regras abaixo: a. o valor da hora trabalhada vale a metade do salário mínimo; b. o salário bruto equivale ao número de horas trabalhadas multiplicado pelo valor da hora trabalhada; c. o imposto equivale a 3% do salário bruto; d. o salário a receber equivale ao salário bruto menos o imposto. 14. Dado o Fluxograma abaixo, indique o programa em linguagem C correto. A) ( ) #include<stdio.h> main() { float a,b; printf(“Digite um número: ”); scanf(“%f”, &a); a = a % 100; printf(“%f”,b); } B) ( ) #include<stdio.h> main() { int a,b; printf(“Digite um número: ”); scanf(“%d”, a); a = a % 100; printf(“%d”,b); } C) ( ) #include<stdio.h> main() { int a,b; printf("Digite um numero: "); scanf("%d", &a); b = a % 100; printf("%d",b); } Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 45 7. Estrutura de Decisão Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica. A classificação das estruturas de decisão é feita de acordo com o número de condições que devem ser testadas para que se decida qual o caminho a ser seguido. Têm-se 2 tipos de estrutura de decisão: • Se; • Escolha. Em linguagem C, o equivalente ao Se é a função if() e o equivalente ao Escolha é a função switch(). 7.1. if() Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o resultado desta avaliação for verdadeiro (.V.), então um determinado conjunto de instruções (comandos compostos) é executado. Caso contrário, ou seja, quando o resultado da avaliação for falso (.F.), nada é executado e o fluxo de execução segue para o primeiro comando após o fim da estrutura. Fluxograma Pseudocódigo Se (condição) Então Comando 1; Fim_Se Linguagem C if (condição) { Comando 1; } Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 46 Exemplo 1: Fluxograma Algoritmo Algoritmo Exemplo1; Var a: inteiro; Inicio Escreva (“Entre com o valor de A: ”); Leia (a); Se (a<0) então Escreva (“O valor de A é menor que zero”); Fim_Se Fim Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 47 7.2. if() else Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o resultado desta avaliação for verdadeiro (.V.), então um determinado conjunto de instruções (comandos compostos) é executado. Caso contrário, ou seja, quando o resultado da avaliação for falso (.F.), um comando diferente é executado. Após a execução de uma das partes (verdadeira ou falsa) o fluxo de execução segue para o primeiro comando após o fim da estrutura. Fluxograma Pseudocódigo Se (condição) Então Comando 1; Senão Comando 2; Fim_Se Linguagem C if (condição) { Comando 1; } else { Comando 2; } Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 48 Exemplo 2: Fluxograma Algoritmo Algoritmo Exemplo2; Var salario: real; Inicio Escreva (“Entre com o salario: ”); Leia (salario); Se (salário>50000) então Escreva (“Você ganha bem”); senão Escreva (“Você precisa ganhar mais”); Fim_Se Fim Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 49 Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 50 7.3. Encadeamento de if() Trata-se de um recurso que permite ao usuário utilizar uma estrutura if dentro de outra obtendo, assim, diversas respostas possíveis. Exemplo 3: Fluxograma Pseudocódigo Algoritmo Encadeamento; Var num: inteiro; Inicio Escreva (“Entre com um número: ”); Leia (num); Se (num = 0) Então Escreva (“Número zero.”); Senão Se ( num < 0) Então Escreva (“Número negativo.”); Senão Escreva (“Número positivo.”); Fim_Se Fim_Se Fim Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 51 Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 52 Exercícios 1. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que peça para o usuário informar dois números inteiros. Ao final do processamento, imprimir qual é o maior e o menor desses números. 2. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que peça para o usuário informar três números inteiros. Ordenar estes números de forma crescente e apresentar o resultado na tela. 3. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C para ler um número real, se este número for negativo, transforme-o em positivo e exiba o resultado ao operador. 4. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C para ler um número real equivalente ao comprimento de uma peça. Verificar se o valor lido encontra-se dentro da faixa de tolerância especificada, informando o resultado ao operador (limite especificado: 20 ± 0,000002 cm). 5.Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que efetue o cálculo do reajuste de salário de um funcionário. Considere que o funcionário deverá receber um reajuste de 15% caso seu salário seja menor que 500, se o salário for maior ou igual a 500 e menor ou igual a 1000, seu reajuste será de 10%, caso seja ainda maior que 1000, o reajuste deverá ser de 5%. 6. Observe o fluxograma abaixo e escreve o programa em Linguagem C equivalente. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 53 7. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que leia três números e se o último desses números for menor ou igual a 5 então ele faz a quarta variável receber a subtração das duas primeiras multiplicada pela terceira, se não, receber a soma das duas primeiras multiplicada pela terceira. Apresentar na tela os três números e o resultado. 8. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que leia três valores para os lados de um triângulo e verifique se eles formam um triângulo. Se formarem, dizer que tipo de triângulo ele é: isósceles, escaleno ou equilátero. 9. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que receba um número inteiro e mostre em qual faixa de números inteiros ele aparece: a. Abaixo de 15; b. Entre 15 e 35; c. Acima de 35. 10. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que dada a idade de um nadador classifica-o em uma das seguintes categorias: Categoria Idade Infantil A 5 - 7 anos Infantil B 8 - 10 anos Juvenil A 11-13 anos Juvenil B 14-17 anos Adulto Maiores de 18 anos 7.4. switch() A utilização do switch oferece inúmeras vantagens em relação a utilização da estrutura ninho de if’s. Um exemplo prático é a facilidade de escrita de uma estrutura composta por múltiplas escolhas, que requer diversas alternativas, a partir de um certo programa de computador. Porém, a estrutura switch só pode ser utilizada quando estamos testando uma situação de igualdade para uma mesma variável. Fluxograma Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 54 Pseudocódigo Escolha (variável) Caso <valor_1> Comando 1; Caso <valor_2> Comando 2; ..... Caso <valor_n> Comando n; Senão Comando n + 1; Fim_escolha Linguagem C switch (variável) { case “valor_1”: Comando 1; case “valor_2”: Comando 2; ....... case “valor_n”: Comando n; default: Comando n + 1; } Exemplo 4: Fluxograma Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 55 Pseudocódigo Algoritmo Exemplo4; Var opcao: literal[1]; Inicio Escreva (“Entre com uma letra: ”); Leia (opcao); Escolha (opcao) caso “A”: Escreva (“Letra A”); caso “B”: Escreva (“Letra B”); caso “C”: Escreva (“Letra C”); caso “D”: Escreva (“Letra D”); senão: Escreva (“Não é A, B, C nem D.”); Fim_Escolha Fim Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 56 Nesta estrutura é opcional a utilização da cláusula default para representar uma alternativa que significa “Em nenhum dos casos anteriores”. Também é importante saber que a execução do comando switch segue os seguintes passos: 1. A expressão é avaliada. 2. Se o resultado da expressão for igual a uma constante, então a execução começará a partir do comando associado a essa constante e prossegue com a execução de todos os comandos até o fim do switch, ou até que se encontre uma instrução de parada denominada break. 3. Se o resultado da expressão não for igual a nenhuma das constantes e já estiver sido incluída no comando switch a opção default, o comando associado ao default será executado. Caso contrário, isto é, se a opção default não estiver presente, o processamento continuará a partir do comando seguinte ao switch. Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 57 Os operadores lógicos apresentados no item 6.6.6, 6.6.7 e 6.6.8 são normalmente utilizados em conjuntos com a estrutura de decisão if(). A seguir são apresentados exemplos de programas que fazem uso destes operadores. Exemplo 5: Fluxograma Algoritmo Algoritmo Exemplo5; Var n1,n2: inteiro; Inicio Escreva (“Digite dois números: ”); Leia (n1,n2); Se ((n1=0)e(n2=0)) então Escreva (“Você forneceu apenas o número zeros”); senão Escreva (“Soma= ”, n1+n2); Fim_Se Fim Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 58 Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 59 Exemplo 6: Fluxograma Algoritmo Algoritmo Exemplo6; Var n1,n2: inteiro; Inicio Escreva (“Digite dois números: ”); Leia (n1,n2); Se ((n1<0ou(n2<0)) então Escreva (“Pelo menos um dos números é negativo”); senão Escreva (“Você informou apenas números positivos”); Fim_Se Fim Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 60 Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 61 Exemplo 7: Fluxograma Algoritmo Algoritmo Exemplo7; Var n: inteiro; Inicio Escreva (“Digite um número: ”); Leia (n); Se (nao(n<>0)) então Escreva (n,“ é igual de zero”); senão Escreva (n, “ é diferente a zero”); Fim_Se Fim Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 62 Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 63 Exercícios 11. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que peça para o usuário informar uma letra qualquer. No final do processamento, o programa deverá informar se a letra é vogal ou consoante. 12. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que leia dois números fornecidos pelo usuário e uma operação matemática (soma, subtração, multiplicação e divisão). Efetuar a operação matemática escolhida utilizando os números fornecidos e exibir o resultado. 13. Uma agência bancária possui dois tipos de investimentos, conforme o quadro a seguir. Faça um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que receba o tipo de investimento e o valor do investimento, calcule e mostre o valor corrigido de acordo com o tipo de investimento de todos os clientes do banco. Tipo Descrição Rendimento mensal 1 Poupança 3% 2 Fundosde renda fixa 4% 14. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C que receba o código correspondente ao cargo de um funcionário e mostre o cargo: Código Cargo 1 Escriturário 2 Secretária 3 Caixa 4 Gerente 5 Diretor 15. Faça um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C para calcular a conta final de um hóspede de um hotel fictício, contendo: o nome do hóspede, o tipo do apartamento, o número de diárias utilizadas, o valor unitário da diária, o valor total das diárias, o valor do consumo interno, o subtotal, o valor da taxa de serviço e o total geral. Considere que: a. Serão lidos o nome do hóspede, o tipo do apartamento utilizado (A, B, C ou D), o número de diárias utilizadas pelo hóspede e o valor do consumo interno do hóspede; b. O valor da diária é determinado pela seguinte tabela: TIPO DO APTO. VALOR DA DIÁRIA (R$) A 150,00 B 100,00 C 75,00 D 50,00 c. O valor total das diárias é calculado pela multiplicação do número de diárias utilizadas pelo valor da diária; d. O subtotal é calculado pela soma do valor total das diárias e o valor do consumo interno; e. O valor da taxa de serviço equivale a 10% do subtotal; f. O total geral resulta da soma do subtotal com a taxa de serviço. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 64 16. Analise os trechos de fluxogramas abaixo e informe o valor que será exibido na tela para o usuário. Considere os seguintes valores: A = 2, B = 3, C = 5, D = 9. .não. (D>5) X � (A+B)*D X � (A-B) div C Saída (A>2) .e. (B<7) X � (A+2)*(B-2) X � (A+B) div D * (C+D) Saída Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 65 (A<>2) .ou. .não. (B<7) X � A+B - 7 X � D - C Saída .não. (A>2) .ou. .não.(B<>7) X � D*A div C X � C div (A - B) Saída Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 66 (A = 2) .ou. (B < 7) X � (A+2)*D X � (A+B) div D Saída .não. (C >A) .e. .não.(B <= 7) X � D*A X � (A+B) div 2 Saída Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 67 8. Estrutura de Repetição Essas estruturas são utilizadas para que uma parte de seu programa possa ser repetida n vezes sem a necessidade de reescrevê-lo. Também são conhecidas como LOOP ou laços. Existem 3 estruturas de repetição na linguagem C: • for (laço contado), equivalente ao Para; • while (laço condicional), equivalente ao Enquanto; • do... while (laço condicional), equivalente ao Repita. 8.1. for() A ideia básica do comando for é que você execute um conjunto de comandos, um número fixo de vezes, enquanto uma variável de controle é incrementada ou decrementada a cada passagem pelo loop. Fluxograma Pseudocódigo Para <var> de <início> até <fim> incr de <inc> faça Comando 1; Fim_para Linguagem C for ( <var> = <início>; <condição saída> ; <inc> ) { Comando 1; } Observe que dentro dos parênteses existem 3 expressões separadas por ponto-e- virgula. A primeira expressão é, normalmente, a inicialização da variável de controle do for. A segunda expressão é um teste lógico que, enquanto o resultado for verdadeiro, reflete em continuação do laço. A terceira expressão é, normalmente, o incremento ou decremento da variável de controle do for. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 68 Exemplo 1: Fluxograma Pseudocódigo Algoritmo Exemplo1; Var i: inteiro; Inicio Para i de 1 até 10 com incremento de 1 faça Escreva (i); Fim_Para Fim Linguagem C Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 69 Tela Exemplo 2: Fluxograma Pseudocódigo Algoritmo Exemplo2; Var i,j : inteiro; Inicio Para i de 1 até 10 com incremento de 1 faça Para j de 1 até 10 com incremento de 1 faça Escreva (i, “x”, j, “=”, i*j); Fim_Para Fim_Para Fim Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 70 Linguagem C Tela Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 71 Veja, neste exemplo, que o laço externo(i) executa 10 vezes, enquanto o laço interno(j) executa 10 vezes para cada passagem do laço externo, totalizando assim, 10x10 = 100 vezes. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 72 Exercícios 1. Considerando o fluxograma abaixo execute a simulação (teste de mesa), preenchendo a tabela conforme os valores de entrada lançados em cada linha. ant atual i prox 2. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C, que imprima todos os números inteiro existentes entre 1 e 20 em ordem crescente. Utilize a estrutura Para. 3. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C, que leia um número N através do teclado e, em seguida, calcule e imprima a soma de 1 até N. Utilize a estrutura for. 4. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C, para ler 10 números e imprimir o quadrado de cada número. Utilize a estrutura for. 5. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C, para ler o número de matrícula e 4 notas de sete alunos, calcular a sua média aritmética e imprimir o número de matricula do aluno, as 4 notas, a sua média e imprimir Reprovado se a média for menor que 3, Exame se 3 <= média < 7 e Aprovado se média =>7. Utilize a estrutura for. 6. Criar um algoritmo (Fluxograma e Pseudocódigo) e o programa em linguagem C, para calcular o imposto de renda de 10 contribuintes considerando: a)os dados do contribuinte, nº do CPF, nº de dependentes e renda anual. b)desconto de R$ 100,00 por dependente. c) até R$ 1000,00 contribuinte isento, de R$ 1000,01 a R$ 5000,00 pagar 5% e acima de R$ 5000,00 pagar 10%. Utilize a estrutura for. Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 73 8.2. while() É o mais genérico dos 3 e pode ser usado para substituir os outros 2; em outras palavras, o laço while supre todas as necessidades. Já os outros dois são usados por uma questão de comodidade. Fluxograma Pseudocódigo Enquanto (condição) faça Comando 1; Fim_enquanto Linguagem C while (condição) { Comando 1; } Engenharia Civil - Computação Profa. MSc. Viviane Guimarães Ribeiro 74 Exemplo 3: Fluxograma Pseudocódigo Algoritmo
Compartilhar