Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos e Lógica de Programação Profª.: Ivre Marjorie R. Machado (ivre.machado@prof.una.br) Fevereiro - 2013 O que vamos estudar • Lógica de Programação • Construção de Algoritmos e Estruturas de dados • Programação na linguagem C/C++ – Conceitos iniciais – Estrutura sequencial – Estrutura condicional – Estrutura de repetição – Arranjos (vetor e matriz) Conceitos Iniciais Profª.: Ivre Marjorie R. Machado (ivre.machado@prof.una.br) Desenvolvimento de um programa • Etapas para o desenvolvimento de um programa: • Nesta etapa estuda-se o enunciado do problema para definir a entrada de dados, o processamento e a saída de dados 1- Análise • Ferramentas do tipo descrição narrativa, fluxograma ou pseudocódigo são utilizadas para descrever o problema com suas soluções 2- Algoritmo • O algoritmo é então transformado em códigos da linguagem de programação escolhida para se trabalhar 3- Codificação Conceito de Algoritmo • Algoritmo é: – “uma sequência de passos que visa atingir um objetivo bem definido” – “a descrição de uma sequência de passos que deve ser seguida para a realização de uma tarefa” – “uma sequência finita de instruções ou operações cuja execução, em tempo finito, resolve um problema computacional, qualquer que seja sua instância” Exemplos de Algoritmo • Algoritmo 1 - Somar três números: Passo 1 – Receber três números Passo 2 – Somar os três números Passo 3 – Mostrar o resultado obtido Exemplos de Algoritmo • Algoritmo 2 - Fazer um sanduíche: Passo 1 – Pegar o pão Passo 2 – Cortar o pão no meio Passo 3 – Pegar a maionese Passo 4 – Passar a maionese no pão Passo 5 – Pegar e cortar alface e tomate Passo 6 – Colocar alface e tomate no pão Passo 7 – Pegar o hambúrguer Passo 8 – Fritar o hambúrguer Passo 9 – Colocar o hambúrguer no pão Exemplos de Algoritmo • Algoritmo 3 – Ir para a Escola: Passo 1 – Acordar cedo Passo 2 – Ir ao banheiro Passo 3 – Abrir o armário e escolher uma roupa Passo 4 – Se o tempo estiver quente, pegar uma camiseta e uma calça jeans; caso contrário, pegar um agasalho e uma calça jeans Passo 5 – Vestir a roupa escolhida Passo 6 – Tomar café Passo 7 – Pegar uma condução Passo 8 – Descer próximo à escola Exemplos de Algoritmo • Algoritmo 4 - Sacar dinheiro no Banco 24 horas: Passo 1 – Ir até um Banco 24 horas Passo 2 – Colocar o cartão Passo 3 – Digitar a senha Passo 4 – Retirar o cartão Passo 5 - Escolher a opção de saque Passo 6 – Solicitar a quantia desejada Passo 7 – Se o saldo for maior ou igual a quantia desejada, sacar; caso contrário, mostrar mensagem de impossibilidade de saque Passo 8 – Sair do Banco 24 horas Construção de Algoritmos • Passos: a) Compreender completamente o problema a ser resolvido, destacando os pontos mais importantes e os objetos que o compõem b) Definir os dados de entrada, ou seja, quais dados serão fornecidos e quais objetos fazem parte desse cenário-problema c) Definir o processamento, ou seja, quais cálculos serão efetuados e quais restrições para esses cálculos. O processamento é responsável pela transformação dos dados de entrada em dados de saída. Construção de Algoritmos • Passos: d) Definir os dados de saída, ou seja, quais dados serão gerados depois do processamento e) Construir o algoritmo utilizando um dos tipos descritos na próxima seção f) Testar o algoritmo realizando simulações (chinesinho) Construção de Algoritmos Processamento de dados Saída de dados Entrada de dados Construção de Algoritmos Result = X + Y ResultX , Y Tipos de Algoritmos • Os tipos mais utilizados são: 1. Descrição Narrativa 2. Fluxograma 3. Pseudocódigo (ou Portugol) Descrição Narrativa • Consiste em analisar o enunciado do problema e escrever, utilizando uma linguagem natural (por exemplo, português), os passos a serem seguidos para sua resolução – Vantagem: não é necessário aprender nenhum conceito novo, pois uma linguagem natural, neste ponto, já é bem conhecida – Desvantagem: a língua natural abre espaço para várias interpretações, o que posteriormente dificultará a transcrição desse algoritmo para programa Fluxograma • Consiste em analisar o enunciado do problema e escrever, utilizando símbolos gráficos predefinidos, os passos a serem seguidos para sua resolução – Vantagem: o entendimento de elementos gráficos é mais simples que o entendimento de textos – Desvantagem: é necessários aprender a simbologia dos fluxogramas e , além disso, o algoritmo resultante não apresenta muitos detalhes, dificultando sua transcrição para um programa Fluxograma • Fluxograma mínimo: não executa absolutamente nada, mas possui um início e um fim. início fim Fluxograma - Símbolos Símbolo utilizado para indicar o início e o fim do algoritmo Permite indicar o sentido do fluxo de dados. Serve exclusivamente para conectar os símbolos ou blocos existentes. Símbolo utilizado para indicar cálculos e atribuições de valores Símbolo utilizado para representar a entrada de dados Símbolo utilizado para indicar que deve ser tomada uma decisão, apontando a possibilidade de desvios Símbolo utilizado para representar a saída de dados Pseudocódigo ou Portugol • Consiste em analisar o enunciado do problema e escrever por meio de regras predefinidas, os passos a serem seguidos para sua resolução – Vantagem: a passagem do algoritmo para qualquer linguagem de programação é quase imediata, bastando conhecer as palavras reservadas dessa linguagem que serão utilizadas – Desvantagem: é necessário aprender as regras do pseudocódigo, que serão apresentadas nas próximas seções Exemplo 1 Faça um algoritmo para mostrar o resultado da multiplicação de dois números Exemplo 1 Descrição narrativa: Passo 1 - Receber os dois números que serão multiplicados Passo 2 - Multiplicar os números Passo 3 - Mostrar o resultado obtido na multiplicação Exemplo 1 Fluxograma: Início n1, n2 result = n1 * n2 result Fim Exemplo 1 Pseudocódigo: ALGORITMO DECLARE n1, n2, result NUMÉRICO ESCREVA “Digite um número” LEIA n1 ESCREVA “Digite outro número” LEIA n2 result ← n1 * n2 ESCREVA “Multiplicação = ”, result FIM_ALGORITMO Exemplo 2 Faça um algoritmo para mostrar o resultado da divisão de dois números Exemplo 2 Descrição narrativa: Passo 1 - Receber os dois números que serão divididos Passo 2 – Se o segundo número for igual a zero, não poderá ser feita a divisão, pois não existe divisão por zero; caso contrário, dividir os números e mostrar o resultado da divisão Exemplo 2 Fluxograma: Início N1, N2 D = N1/N2 “Impossível dividir” Fim N2 == 0 D NÃO SIM Exemplo 2 Pseudocódigo: ALGORITMO DECLARE N1, N2, D NUMÉRICO ESCREVA “Digite dois números” LEIA N1, N2 SE (N2 == 0) ENTÃO ESCREVA “Impossível dividir” SENÃO INÍCIO D ← N1 /N2 ESCREVA “Divisão = ”, D FIM_ALGORITMO Variável • Duas pessoas estão conversando e desejam realizar uma conta Vamos somar dois números? Vamos sim! Variável • Duas pessoas estão conversando e desejam realizar uma conta O primeiro número é 5 Ok! Já guardei na cabeça Variável • Duas pessoas estão conversando e desejam realizar uma conta O segundo número é 3 Guardei também em outra posição Variável • Duas pessoas estão conversando e desejam realizar uma conta Qual é o resultado da soma? O resultado é 8 Variável • A segunda pessoa resgata os valores armazenados na memória, realiza a conta e responde dizendo que o resultado é 8 Variável • Um programarecebe dados, que precisam ser armazenados no computador para serem utilizados no processamento • Todos os computadores trabalham com sistema numérico binário (0 e 1) • Cada dígito binário (0 e 1) ocupa porções de memória chamadas bytes (8 bits), e cada byte é identificado e acessado Variável • Desta maneira, uma variável representa uma posição de memória • Possui nome e tipo e seu conteúdo pode variar ao longo do tempo, durante a execução do programa • Embora, uma variável possa assumir diferentes valores, ela só pode armazenar um valor a cada instante Variável 4 Memória num1 Uma variável representa uma área na memória onde se pode armazenar um valor qualquer Tipos de dados • Os tipos mais utilizados são: 1. Numéricos 2. Lógicos 3. Literais ou caracteres Tipos de dados - Numéricos • Dividem-se em: inteiros e reais • Os números inteiros podem ser positivos ou negativos e não possuem parte fracionária Ex.: -23 98 0 -357 237 -2 Tipos de dados - Numéricos • Os números reais podem ser positivos ou negativos e possuem parte fracionária Ex.: 23,45 346,89 0,0 -357,0 237,88 -2,7 Obs.: os números reais seguem a notação da língua inglesa, ou seja, a parte decimal é separada da parte inteira por um . (ponto) e não por uma , (vírgula). Tipos de dados - Lógicos • São também chamados dados booleanos (por causa da álgebra de Boole) • Podem assumir os valores verdadeiro ou falso Tipos de dados – Caracteres • Ou Literais, são dados formados por um único caractere ou por uma cadeia de caracteres • Podem ser letras maiúsculas, minúsculas, números (não podem ser usados para cálculos) e os caracteres especiais (&, #, @, ?, +) • Ex ‘aluno’ ‘1234’ ‘@ internet’ Formação de identificadores • Identificadores são os nomes das variáveis, dos programas, das constantes, das rotinas, das unidades etc • Os identificadores possuem regras básicas para sua formação Formação de identificadores 1. Os caracteres que podem ser utilizados são: os números, as letras (maiúsculas e minúsculas) e o caractere sublinhado (underline) 2. O primeiro caractere deve ser sempre uma letra ou caractere sublinhado (underline) 3. Não são permitidos espaços em branco e caracteres especiais (@, $, %, &, !, ?) 4. Não podem ser usadas palavras reservadas nos identificadores, ou seja palavras que pertençam a uma linguagem de programação Exemplos de identificadores • Identificadores válidos: A A2 Nota NOTA nota XYZ NOTA1 Nota_1 _Dia Idade Linguagem de programação C/C++ • Antecedentes: UNIX, BCPL e B (Bell Labs – AT&T) • Inventada e implementada por Dennis Ritchie • Padrão ANSI C (American Standard for Information System - 1990) - criado para guiar implementações da linguagem C • Todo programa em C é composto de uma ou mais funções. A Biblioteca C padrão contém funções mais comuns • A linguagem C++ é uma extensão da linguagem C (C++ = (C + orientação a objetos: POO)) Exercícios 1- Faça um algoritmo para calcular a média aritmética entre três notas de um aluno e mostrar a situação, que pode ser aprovado ou reprovado. Faça o algoritmo usando descrição narrativa, fluxograma e pseudocódigo. Referência Bibliográfica • ASCENCIO, Ana Fernanda Gomes e CAMPOS, Edilene A. Veneruchi. Fundamentos da Programação de Computadores – Algoritmos, Pascal e C/C++. São Paulo: Pearson Prentice Hall, 2007. 2ª Edição. Capítulo 1. • SOUZA, A. Furlan; GOMES, Marcelo Marques; SOARES, Marcio Vieira e CONCILIO, Ricardo. Algoritmos e Lógica de Programação. 2ª ed. Ver. e ampl. São Paulo: Cengage Learning, 2011. Lógica Profª.: Ivre Marjorie R. Machado (ivre.machado@prof.una.br) Introdução 1.1- Noções de Lógica O que lógica? • Uso corriqueiro da palavra lógica normalmente relacionado à coerência e à racionalidade • Pode-se relacionar a lógica com a ‘correção do pensamento’, pois uma de suas preocupações é determinar quais operações são válidas e quais não são, fazendo análises das formas e leis do pensamento Introdução O que lógica? • Arte de bem pensar • Ciência das formas do pensamento • Correção do raciocínio • Ordem da razão • A nossa razão pode funcionar desordenadamente, por isso, a lógica estuda e ensina a colocar ‘ordem no pensamento’ Introdução Exemplos a) Todo mamífero é um animal. Todo cavalo é um mamífero. Portanto, todo cavalo é um animal. b) A gaveta está fechada. A caneta está dentro da gaveta. Precisamos primeiro abrir a gaveta para depois pegar a caneta. Introdução Exemplos c) Anacleto é mais velho que Felisberto. Felisberto é mais velho que Marivaldo. Portanto, Anacleto é mais velho que Marivaldo. Na medida em que precisamos especificar uma sequência de passos, é necessário utilizar ordem, ou seja ‘pensar com ordem’, portanto precisamos utilizar lógica. Introdução E a lógica de programação? • O principal objetivo do estudo da Lógica de Programação é a construção de algoritmos coerentes e válidos • Um algoritmo é uma sequência de passos que visam atingir um objetivo bem definido Exemplo Troca de lâmpada Passo 1- Pegar uma escada Passo 2- Buscar uma lâmpada nova Passo 3- Posicionar a escada embaixo da lâmpada Passo 4- Subir na escada Passo 5- Retirar a lâmpada queimada Passo 6- Colocar a lâmpada nova Exercícios 1- Três senhoras – dona Branca, dona Rosa e dona violeta – passeavam pelo parque quando dona Rosa disse: - Não é curioso que estejamos vestidas de cores branca, rosa e violeta, embora nenhuma de nós esteja usando um vestido de cor igual ao próprio nome? - Uma simples coincidência – respondeu a senhora com o vestido violeta. Qual é a cor do vestido de cada senhora? Exercícios 2- Elabore um algoritmo que mova 3 discos de uma torre de Hanói, que consiste em três hastes (a - b - c), uma das quais serve de suporte para 3 discos de tamanhos diferentes (1 - 2 - 3), os menores sobre os maiores. Pode-se mover um disco de cada vez para qualquer haste, contanto que nunca seja colocado um disco maior sobre um menor. O objetivo é transferir os três discos para outra haste. Exercícios “Torre de Hanói” a b c 1 2 3 Exercícios Exemplo de movimentação a b c 1 2 3 Exercícios Exemplo de movimentação a b c 1 23 Exercícios 3- Crie uma sequência lógica para tomar banho. 4- Faça um algoritmo para somar 2 números quaisquer e multiplicar o resultado pelo primeiro número 5- Faça o teste de QI do Einsten no site (http://rachacuca.com.br/teste-de-einstein/) Referência Bibliográfica • FORBELLONE, Andre Luiz Villar e EBERSPACHER, Henri Frederico. Lógica de Programação. 3 ed. São Paulo: Pearson Prentice Hall, 2005. Estrutura Sequencial Profª.: Ivre Marjorie R. Machado (ivre.machado@prof.una.br) Estrutura Sequencial 1.1- Estrutura Sequencial em Algoritmos ALGORITMO DECLARE Bloco de Comandos FIM_ALGORITMO Estrutura Sequencial 1.2- Declaração de Variáveis em Algoritmos ALGORITMO DECLARE X NUMERICO Y, Z LITERAL Teste LOGICO Bloco de Comandos FIM_ALGORITMO Estrutura Sequencial 1.3- Comando de atribuição em Algoritmos Utilizado para atribuir valores ou operações a variáveis, sendo representado por ←. Exemplos: X ← 4 X ← X + 2 Teste ← falso Estrutura Sequencial 1.4- Comando de entrada em Algoritmos Utilizado para receber dados digitados pelo usuário. Os dados recebidos são armazenados em variáveis. Esse comando é representado pela palavra LEIA. Exemplo: LEIAX Estrutura Sequencial 1.4- Comando de entrada em Algoritmos Utilizado para receber dados digitados pelo usuário. Os dados recebidos são armazenados em variáveis. Esse comando é representado pela palavra LEIA. Exemplo: LEIA X Um valor digitado pelo usuário será armazenado na variável X Estrutura Sequencial 1.5- Comando de saída em Algoritmos Utilizado para mostrar dados na tela ou na impressora. Esse comando é representado pela palavra ESCREVA e os dados podem ser conteúdos de variáveis ou mensagens. Exemplo: ESCREVA X Estrutura Sequencial 1.5- Comando de saída em Algoritmos Utilizado para mostrar dados na tela ou na impressora. Esse comando é representado pela palavra ESCREVA e os dados podem ser conteúdos de variáveis ou mensagens. Exemplo: ESCREVA X Mostra na tela o valor armazenado na variável X Estrutura Sequencial 1.5- Comando de saída em Algoritmos Utilizado para mostrar dados na tela ou na impressora. Esse comando é representado pela palavra ESCREVA e os dados podem ser conteúdos de variáveis ou mensagens. Exemplo: ESCREVA “Oi para vocês!!!” Exemplo • Pseudocódigo para calcular a área de um triângulo ALGORITMO DECLARE base, altura, area NUMÉRICO ESCREVA "Digite o valor da base do triângulo: " LEIA base ESCREVA "Digite o valor da altura do triângulo: " LEIA altura area <- (base * altura)/2 ESCREVA "A area do triângulo e: ", area FIM_ALGORITMO Exemplo • Fluxograma para calcular a área de um triângulo Início base, altura area = (base * altura) / 2 area Fim Exercícios 1- Faça um algoritmo (pseudocódigo e fluxograma) para somar dois números e multiplicar o resultado pelo primeiro número (agora usando os comandos apresentados). 2- Faça um algoritmo (pseudocódigo e fluxograma) receber valor de duas notas de provas, somar os dois valores e mostrar na tela. Estrutura Sequencial 2.1- Estrutura sequencial em C/C++ # include <nome da biblioteca> int main() { bloco de comandos; } Estrutura Sequencial 2.1- Estrutura sequencial em C/C++ Bibliotecas são arquivos contendo várias funções que podem ser incorporadas aos programas escritos em C/C++. A diretiva # include faz com que o texto contido dentro da biblioteca especificada seja inserido no programa. Estrutura Sequencial • As bibliotecas iostream.h e conio.h permitem a utilização de diversos comandos de entrada e saída • A linguagem C/C++ é sensível a letras maiúsculas e minúsculas, ou seja, considera que letras maiúsculas são diferentes de minúsculas (por exemplo, a é diferente de A) • Todos os comandos devem, obrigatoriamente, ser escritos com letras minúsculas. Estrutura Sequencial 2.2- Declaração de variáveis em C/C++ int main() { int Y; float X; char sexo, nome[40]; } Estrutura Sequencial 2.2- Declaração de variáveis em C/C++ • As variáveis são declaradas após a especificação de seus tipos • C/C++ não possui dados do tipo booleano, pois considera qualquer valor diferente de zero como sendo verdadeiro • C/C++ não possui tipo especial para armazenar cadeias de caracteres (strings) Estrutura Sequencial 2.3- Comando de atribuição em C/C++ Utilizado para atribuir valores ou operações a variáveis, sendo representado por = (sinal de igualdade) Exemplos: X = 4; X = X + 2; Sexo = ‘F’; Estrutura Sequencial 2.4- Comando de entrada em C/C++ Os comandos de entrada mais utilizados na linguagem C/C++ são: cin e gets. Exemplos: cin>> x; cin>> resultado; gets(nomes) Estrutura Sequencial 2.4- Comando de entrada em C/C++ cin>> x; (um valor digitado pelo usuário será armazenado na variável X) gets(Nome); (um ou vários caracteres digitados pelo usuário serão armazenados na variável Nome) Estrutura Sequencial 2.5- Comando de saída em C/C++ O comando de saída mais utilizado na linguagem C/C++ é: cout. Exemplos: cout<< “Digite um numero”; cout<< “Diga oi para vocês!”; Estrutura Sequencial 2.5- Comentários em C/C++ Comentários são textos que podem ser inseridos em programa com o objetivo de documentá-lo. Os comentários não são analisados pelo compilador. Os comentários podem ocupar uma ou várias linhas, devendo ser inseridos nos programas utilizando /* */ ou // Estrutura Sequencial 2.5- Comentários em C/C++ Exemplo: /* Linhas de comentários... Linhas de comentários... */ Ou // Linha de comentário Estrutura Sequencial 2.5- Comentários em C/C++ A região de comentários é aberta com os símbolos /* e é encerrada com os símbolos */ A região de comentários é aberta com os símbolos // e é encerrada automaticamente ao final da linha Exemplo • Programa em C++ para calcular a área de um triângulo int main() { int base, altura, area; cout<<"Digite a base do triangulo: "; cin>>base; cout<<"Digite a altura do triangulo: "; cin>>altura; area = (base * altura)/2; cout<<"A area do triangulo e: "<<area; } Exercícios 1- Faça um programa em C/C++ para somar dois números e multiplicar o resultado pelo primeiro número. Deverá ser impresso na tela o resultado final das operações. 2- Faça um programa em C/C++ que receba três notas, calcule a soma das notas e mostre na tela o resultado. • ASCENCIO, Ana Fernanda Gomes e CAMPOS, Edilene A. Veneruchi. Fundamentos da Programação de Computadores – Algoritmos, Pascal e C/C++. 2ª Edição - São Paulo: Pearson Prentice Hall, 2007. • SOUZA, A. Furlan; GOMES, Marcelo Marques; SOARES, Marcio Vieira e CONCILIO, Ricardo. Algoritmos e Lógica de Programação. 2ª ed. Ver. e ampl. São Paulo: Cengage Learning 2011. Referência Bibliográfica Operadores Pré-definidos em C/C++ Profª.: Ivre Marjorie R. Machado (ivre.machado@prof.una.br) Operadores e funções predefinidas em C/C++ • A linguagem C/C++ possui operadores e funções predefinidas destinadas a cálculos matemáticos e à manipulação de caracteres. Operador de Atribuição Operador Exemplo Comentário = X = Y O conteúdo da variável Y é atribuído a variável X. Operadores Matemáticos Operador Exemplo Comentário + X + Y Soma o conteúdo de X e de Y. - X – Y Subtrai o conteúdo de Y do conteúdo de X * X * Y Multiplica o conteúdo de X pelo conteúdo de Y / X / Y Obtém o quociente da divisão de X por Y % X % Y Obtém o resto da divisão de X por Y ++ X ++ Aumenta o conteúdo de X em uma unidade - - X - - Diminui o conteúdo de X em uma unidade O operador % só pode ser utilizado com operandos do tipo inteiro Operadores Relacionais Operador Exemplo Comentário = = X == Y O conteúdo de X é igual ao conteúdo de Y ! = X != Y O conteúdo de X é diferente do conteúdo de Y < = X <= Y O conteúdo de X é menor ou igual ao conteúdo de Y > = X >= Y O conteúdo de X é maior ou igual ao conteúdo de Y < X < Y O conteúdo de X é menor que o conteúdo de Y > X > Y O conteúdo de X é maior que o conteúdo de Y Operadores Matemáticos de Atribuição Operador Exemplo Comentário + = X + = Y Equivale a X = X + Y. - = X – = Y Equivale a X = X - Y. * = X * = Y Equivale a X = X * Y. / = X / = Y Equivale a X = X / Y. % = X % = Y Equivale a X = X % Y. Funções Matemáticas Função Exemplo Comentário cos cos(X) Calcula o cosseno de X (X deve estar representado em radianos. sin sin(X) Calcula o seno de X (X deve estar representado em radianos. pow pow (X, Y) Calcula a potência de X elevado a Y sqrt sqrt (X) Calcula a raiz quadrada de X. tan tan(X) Calcula a tangente de X (X deve estar representado em radianos. A linguagem C++ possui muitas outras funções matemáticas. Todas elas podemser observadas detalhadamente na documentação da biblioteca math.h. • ASCENCIO, Ana Fernanda Gomes e CAMPOS, Edilene A. Veneruchi. Fundamentos da Programação de Computadores – Algoritmos, Pascal e C/C++. 2ª Edição - São Paulo: Pearson Prentice Hall, 2007. Capítulo 3. Referência Bibliográfica Estrutura Condicional Profª.: Ivre Marjorie R. Machado (ivre.machado@prof.una.br) Estrutura Condicional em Algoritmos Estrutura Condicional 1.1- Estrutura Condicional Simples em Algoritmos Se condição Então comando O comando só será executado se a condição for verdadeira, Uma condição é uma comparação que possui dois valores possíveis, verdadeiro ou falso. Estrutura Condicional 1.1- Estrutura Condicional Simples em Algoritmos Se condição Então INÍCIO comando1 comando2 comando3 FIM Estrutura Condicional 1.1- Estrutura Condicional Simples em Algoritmos • Os comandos 1, 2 e 3 só serão executados se a condição for verdadeira. • As palavras INÍCIO e FIM serão necessárias apenas quando dois ou mais comandos forem executados. Estrutura Condicional 1.2- Estrutura Condicional Composta em Algoritmos Se condição Então comando1 Senão comando2 Se a condição for verdadeira, será executado o comando1, caso contrário, se a condição for falsa, será executado o comando2. Estrutura Condicional 1.2- Estrutura Condicional Composta em Algoritmos Se condição Então INÍCIO comando1 comando2 FIM Senão INÍCIO comando3 comando4 FIM Estrutura Condicional 1.2- Estrutura Condicional Composta em Algoritmos • Se a condição for verdadeira, o comando1 e o comando2 serão executados; caso contrário, se a condição for falsa, o comando3 e o comando4 serão executados. Exemplos 1- Faça um algoritmo (pseudocódigo e fluxograma) que receba um número como entrada. Verifique se o número é maior ou igual a 2 e mostre na tela uma mensagem. 2- Faça um algoritmo (pseudocódigo e fluxograma) que receba dois números como entrada e mostre na tela o maior. ALGORITMO DECLARE num NUMERICO ESCREVA "Digite um numero: " LEIA num SE (num >= 2) ENTÃO ESCREVA "O numero digitado é maior ou igual a 2" SENÃO ENTÃO ESCREVA "O numero digitado é menor que 2" FIM_ALGORITMO Exemplo 1 Exemplo 1 Início num “O numero digitado é maior ou igual a 2” Fim num >= 2 “O numero digitado é maior ou igual a 2” Sim Não Exemplo 1 Início num “O numero digitado é maior ou igual a 2” Fim num >= 2 “O numero digitado é maior ou igual a 2” Sim Não Tomada de decisão ALGORITMO DECLARE num1, num2 NUMERICO ESCREVA "Digite o primeiro numero" LEIA num1 ESCREVA "Digite o segundo numero" LEIA num2 SE (num1 > num2) ENTÃO ESCREVA "O maior numero é " , num1 SENÃO SE (num2 > num1) ENTÃO ESCREVA "O maior numero é " , num2 SENÃO ENTÃO ESCREVA "Os números são iguais !" FIM_ALGORITMO Exemplo 2 Exemplo 2 Início num1, num2 “Os números são iguais” Fim num2 > num1 “O maior numero é” num2 Sim Não num1 > num2 “O maior numero é” num1 Sim Não Exemplo 2 Início num1, num2 “Os números são iguais” Fim num2 > num1 “O maior numero é” num2 Sim Não num1 > num2 “O maior numero é” num1 Sim NãoTomada de decisão Tomada de decisão Estrutura Condicional em C/C++ Estrutura Condicional 2.1- Estrutura Condicional Simples em C/C++ if (condição) { comando; } O comando só será executado se a condição for verdadeira, Uma condição é uma comparação que possui dois valores possíveis, verdadeiro ou falso. Obs.: Todas as condições devem estar entre parênteses ( ). Estrutura Condicional 2.1- Estrutura Condicional Simples em C/C++ if (condição) { comando1 ; comando2 ; comando3 ; } Estrutura Condicional 2.1- Estrutura Condicional Simples em C/C++ • Em c++, torna-se obrigatória a utilização de chaves quando houver mais de um comando a ser executados. • Os comandos entre as chaves { } só serão executados se a condição for verdadeira. Estrutura Condicional 2.2- Estrutura Condicional Composta em C/C++ if (condição) { comando1 ; } else { comando2 ; } Se a condição for verdadeira, será executado o comando1, caso contrário, se a condição for falsa, será executado o comando2. Estrutura Condicional 2.2- Estrutura Condicional Composta em C/C++ if (condição) { comando1 ; comando2 ; } else { comando3 ; comando4 ; } Estrutura Condicional 2.2- Estrutura Condicional Composta em C/C++ • Se a condição for verdadeira, o comando1 e o comando2 serão executados; caso contrário, se a condição for falsa, o comando3 e o comando4 serão executados. Obs.: Todas as condições devem estar entre parênteses ( ). Exemplos 1- Escreva um programa em C/C++ que receba um número como entrada. Verifique se o número é maior ou igual a 2 e mostre na tela uma mensagem. 2- Escreva um programa em C/C++ que receba dois números como entrada e mostre na tela o maior. //Bibliotecas... int main() { float num1; cout<<"Digite um numero: "; cin>> num1; if (num1 >=2) { cout<<"o numero "<<num1<<" e maior ou igual a dois"; } else { cout<<"o numero "<<num1<<" e menor que dois"; } getch(); } Exemplo 1 int main() { float num1, num2; cout<<"Digite um numero: "; cin>> num1; cout<<"Digite outro numero: "; cin>> num2; if (num1 > num2) { cout<<"o numero "<<num1<<" e maior que o numero "<<num2; } else if (num1 < num2) { cout<<"o numero "<<num2<<" e maior que o numero "<<num1; } else { cout<<"os numeros sao iguais"; } getch(); } Exemplo 2 Estrutura Condicional 3.1- Estrutura CASE switch(variável) { case valor1: lista de comandos; break; case valor2: lista de comandos; break; ... default: lista de comandos; } Estrutura Condicional 3.1- Estrutura CASE Em situações mutuamente exclusivas, isto é, se uma situação for executada, as demais não serão, um comando seletivo é o mais indicado (estrutura CASE) O comando switch(variável) avalia o valor da variável para decidir qual case será executado Cada case está associado a UM possível valor da variável, que deve ser obrigatoriamente, do tipo char ou int Estrutura Condicional 3.1- Estrutura CASE switch(variável) { ... break; default: lista de comandos; } O comando break; deve ser utilizado para impedir a execução dos comando definidos nos cases subsequentes Estrutura Condicional 3.1- Estrutura CASE switch(variável) { ... break; default: lista de comandos; } O comando default: é executado quando o valor da variável não coincidir com nenhum dos especificados nos cases //Bibliotecas... int main() { int num1; cout<<"Digite um numero: "; cin>> num1; switch (num1) { case 1: cout<<“\n Numero 1"; break; case 2: cout<<“\n Numero 2"; break; default: cout<<“\n Numero diferente de 1 e 2"; } getch(); } Exemplo Estrutura Condicional 3.2- Estrutura CASE (Fluxograma) valor1 Expressão inteira Comandos padrão Comandos1 Comandos1 ComandosN... Outras opções ... false valor2 valorN Estrutura Condicional Exemplo - Estrutura CASE (Fluxograma) Como um exemplo para a Estrutura CASE, considere o seguinte problema: Elaborar um fluxograma que simule uma calculadora simples que some, subtraia, multiplique e divida dois números Exemplo - Estrutura CASE (Fluxograma) ‘ + ’ Expressão inteira Result = num1 + num2 Result = num1 - num2 Result =num1 / num2 false início num1, num2, operador ‘ - ’ Result = num1 * num2 ‘ * ’ ‘ / ’ fim ‘Não é um operador válido’ Result Operadores Lógicos em C/C++ • Os principais operadores lógicos são: Operador Lógico Operador Exemplo Comentário && if (x >= 3 && X <= 7 ) Significa que a condição verificada será X >= 3 E X <= 7 , ou seja, a condição será verdadeira se X estiver entre 3 e 7 || if (x >= 3 || X >= 7 ) Significa que a condição verificada será X >= 3 OU X <= 7 , ou seja, tanto se X for maior que 3 como se X for maior que 7 a condição será verdadeira ! if (x!=0) A ! significa negação, ou seja, nesse exemplo verifica se X é diferente de 0 Tabela verdade Tabela E (&&) Tabela OU (||) Tabela NÃO (!) V e V = V V ou V = V Não V = F V e F = F V ou F = V Não F = V F e V = F F ou V = V F e F = F F ou F = F Operadores Lógicos em C/C++ Exemplos if(num1 == 2) { cout<<"numero igual a 2 "; } if(num1 > 5 && num1 < 10) { cout<<"numero entre 5 e 10"; } Operadores Lógicos em C++ Exemplos if(num1 == 5 || num1 == 10) { cout<<"numero igual 5 ou igual a 10"; } if(num1 != 0) { cout<<"numero diferente de 0"; } • ASCENCIO, Ana Fernanda Gomes e CAMPOS, Edilene A. Veneruchi. Fundamentos da Programação de Computadores – Algoritmos, Pascal e C/C++. 2ª Edição - São Paulo: Pearson Prentice Hall, 2007. Capítulo 4. • SOUZA, A. Furlan; GOMES, Marcelo Marques; SOARES, Marcio Vieira e CONCILIO, Ricardo. Algoritmos e Lógica de Programação. 2ª ed. Ver. e ampl. São Paulo: Cengage Learning 2011. Capítulo 4. Referência Bibliográfica Estrutura de Repetição Profª.: Ivre Marjorie R. Machado (ivre.machado@prof.una.br) Introdução • Como imprimir os 1000 primeiros números a partir do número 1? void main() { cout << “1” ; cout << “2” ; ... cout << “1000”; } A solução não é prática! Estrutura de Repetição em Algoritmo 1.1- Estrutura de repetição para um número definido de repetições (Estrutura PARA) PARA i ← valor inicial até valor final FAÇA INÍCIO comando1 comando2 .... FIM Estrutura de Repetição em Algoritmo 1.1- Estrutura de repetição para um número definido de repetições (Estrutura PARA) O comando1 e comando2 serão executados utilizando a variável i como controle, e seu conteúdo vai variar do valor inicial até o valor final. ALGORITMO PARA a ← 1 até 10 FAÇA INÍCIO ESCREVA “o valor de a é ”, a FIM FIM_ALGORITMO Exemplo em Pseudocódigo A estrutura de repetição PARA, no exemplo acima, vai repetir o comando ESCREVA dez vezes (de 1 a 10). Estrutura de Repetição em Fluxograma 2.1- Estrutura PARA i = valor inicial i <= valor final Comandos i = i + 1 false Essa estrutura utiliza um contador que possui um certo valor inicial e que, por meio de incrementos unitários e inteiros (de 1 em 1) vai alcançar um valor final predefinido ALGORITMO PARA a ← 1 até 10 FAÇA INÍCIO ESCREVA a FIM FIM_ALGORITMO Exemplo - Algoritmo a = 1 a <= 10 a = a + 1 início a false fim true Estrutura de Repetição em C++ 3.1- Estrutura de repetição FOR for (i = valor inicial; condição; incremento ou decremento de i) { comando1; } Essa estrutura é utilizada quando se sabe o número de vezes em que um trecho do programa deve ser repetido. Estrutura de Repetição 3.1- Estrutura de repetição FOR A primeira parte atribui um valor inicial à variável i, que tem como função controlar o número necessário de repetições; i = valor inicial Estrutura de Repetição 3.1- Estrutura de repetição FOR A segunda parte corresponde a uma expressão relacional que, quando assumir valor falso, determinará o fim da repetição; Condição Estrutura de Repetição 3.1- Estrutura de repetição FOR A terceira parte é responsável por alterar o valor da variável i (incremento ou decremento) com o objetivo de, em algum momento, fazer com que a condição assuma valor falso. incremento ou decremento de i i++ mesmo que ( i = i + 1) ou i -- mesmo que (i = i – 1) //Bibliotecas .. int main() { int val; val=0; for ( int a=1; a <= 20; a++ ) { cout<< "\n O valor de a e: " <<a; val = a + 1; cout <<"\n O valor de val e: "<<val; } getch(); } Exemplo //Bibliotecas .. int main() { int val; val=0; for ( int a=1; a <= 20; a++ ) { cout<< "\n O valor de a e: " <<a; val = a + 1; cout <<"\n O valor de val e: "<<val; } getch(); } Exemplo Faça o chinesinho para esse programa... Resultado - tela ... continuação Exercícios 1. Faça um programa em C++ para somar 10 notas e apresentar a média aritmética das notas na tela. Use estrutura de repetição. 2. Faça um programa em C++ para receber 15 números digitados por um usuário, identificar o maior e o menor número digitado. Mostre na tela o maior e o menor número. 3. Faça um programa em C++ que leia um número N e mostre na tela o valor lido e o fatorial desse valor. //Bibliotecas .. int main () { int num, fatorial; cout <<"Digite um numero para calcular o fatorial: "; cin >> num; fatorial = 1; for (int i=2; i<=num; i++) { fatorial = fatorial * i; } cout << "Fatorial => "<<fatorial; getch(); } Uma possível solução ... Estrutura de Repetição em Algoritmo 1.2- Estrutura de repetição para um número indefinido de repetições e teste no início (Estrutura ENQUANTO) ENQUANTO condição FAÇA INÍCIO comando1 FIM Estrutura de Repetição em Algoritmo 1.2- Estrutura de repetição para um número indefinido de repetições e teste no início (Estrutura ENQUANTO) Enquanto a condição for verdadeira o comando1 será executado ALGORITMO X ← 1 Y ← 5 ENQUANTO X < Y FAÇA INÍCIO X ← X + 2 Y ← Y + 1 FIM FIM_ALGORITMO Exemplo Algoritmo Estrutura de Repetição em Fluxograma 2.2- Estrutura ENQUANTO Expressão lógica Comandos false true Na figura ao lado, a expressão lógica representa alguma expressão que, enquanto resultar em true, vai permitir a execução repetitiva dos comandos e quando for false segue para um outro comando fora da estrutura de repetição. ALGORITMO X ← 1 Y ← 5 ENQUANTO X < Y FAÇA INÍCIO X ← X + 2 Y ← Y + 1 FIM FIM_ALGORITMO Exemplo Algoritmo X < Y X = X + 2 início false fim true X = 1 Y = 5 Y = Y +1 Estrutura de Repetição em C++ 3.2- Estrutura de repetição WHILE while (condição) { comando1; comando2; } Estrutura de Repetição em C++ 3.2- Estrutura de repetição WHILE Essa estrutura pode ser utilizada quando o número de repetições necessárias não é fixo. Os comandos (comando1, comando2) serão repetidos enquanto a condição mostrar-se verdadeira. Estrutura de Repetição em C++ 3.2- Estrutura de repetição WHILE while (condição) { comando1; comando2; } Teste condicional no início Estrutura de Repetição em C++ 3.2- Estrutura de repetição WHILE Existem situações em que o teste condicional da estrutura de repetição, que fica no início, resulta em um valor falso logo na primeira comparação. Nesses casos, os comandos de dentro da estrutura de repetição não serão executados. //Bibliotecas .. int main() { int x, y; x = 1; y = 5; while (x < y ) { x = x + 2; y = y + 1; cout << "\n valor de x " << x; cout << "\n valor de y " << y; } getch(); } Exemplo Resultado - tela Estrutura de Repetição em Algoritmo 1.3- Estrutura de repetição para um número indefinido de repetições e teste no final (Estrutura REPITA) REPITA comandosATÉ condição Repita os comandos até a condição se tornar verdadeira. ALGORITMO X ← 1 Y ← 5 REPITA X ← X + 2 Y ← Y + 1 ATÉ X > = Y FIM_ALGORITMO Exemplo Algoritmo Exemplo Algoritmo - Simulação X Y 1 5 Valores iniciais 3 6 Valores obtidos dentro da estrutura de repetição 5 7 7 8 9 9 Estrutura de Repetição em Fluxograma 2.3- Estrutura REPITA Expressão lógica false true Comandos Na figura ao lado, a expressão lógica representa alguma expressão que, se resultar em false, vai permitir a repetição de comandos quaisquer até que a expressão lógica seja true. ALGORITMO X ← 1 Y ← 5 REPITA X ← X + 2 Y ← Y + 1 ATÉ X > = Y FIM_ALGORITMO Exemplo Algoritmo X = X + 2 início false fim X = 1 Y = 5 Y = Y +1 X >= Y true Estrutura de Repetição em C++ 3.3- Estrutura de repetição DO-WHILE do { comando1; comando2; } while ( condição); Estrutura de Repetição em C++ 3.3- Estrutura de repetição DO-WHILE Essa estrutura pode ser utilizada quando o número de repetições necessárias não é fixo. Os comandos (comando1, comando2) serão repetidos até a condição assumir o valor falso. Estrutura de Repetição em C++ 3.3- Estrutura de repetição DO-WHILE do { comando1; comando2; } while ( condição); Teste condicional no fim Estrutura de Repetição em C++ 3.2- Estrutura de repetição DO-WHILE Nesse tipo de estrutura, o teste condicional ocorre no fim. Isso significa que a repetição será executada no mínimo uma vez, quando todo o bloco for executado uma vez e, ao final, a condição assumir valor falso. //Bibliotecas .. int main() { int x=0; do { cout << "\n valor de x = " << x; x = x + 1; } while (x != 5); getch(); } Exemplo Exemplo Algoritmo - Simulação Tela x 0 Valor inicial Valor de x = 0 1 Valores obtidos dentro da estrutura da repetição Valor de x = 1 2 Valor de x = 2 3 Valor de x = 3 4 Valor de x = 4 5 Valor obtido dentro da estrutura de repetição, que torna a condição falsa e interrompe a repetição Valor de x depois que sair da estrutura = 5 Exercício Faça um programa em C++ que receba duas notas de seis alunos, calcule e mostre: a) A média aritmética das duas notas de cada aluno; b) A mensagem que está na tabela a seguir: Média Aritmética Mensagem Até 3 Reprovado De 3 a 7 Exame Acima de 7 Aprovado Continuação - Exercício c) O total de alunos aprovados; d) O total de alunos de exame; e) O total de alunos reprovados; f) A média da classe. Tente resolver, em seguida veja a solução da professora... //Bibliotecas… int main() { int cont, ta, te, tr; float n1, n2, media, media_classe, total_classe; system ("cls"); total_classe = 0; tr = 0; te = 0; ta = 0; for (cont=1;cont<=6;cont++) { cout << "\n\nDigite as duas notas do " << cont << " aluno "; cin >>n1>>n2; media = (n1 + n2) /2; cout << "\nMedia do " << cont << " aluno = " << media; if (media <= 3) { tr = tr + 1; cout << " Reprovado"; } if (media > 3 && media < 7) { te = te + 1; cout << " Exame"; } if (media >= 7) { ta = ta + 1; cout << " Aprovado"; } total_classe = total_classe + media; } cout << "\n\nTotal de reprovados = " << tr; cout << "\nTotal de alunos em exame = " << te; cout << "\nTotal de aprovados = " << ta; media_classe = total_classe/6; cout << "\nMedia da classe = " << media_classe; getch(); } Referência Bibliográfica • ASCENCIO, Ana Fernanda Gomes e CAMPOS, Edilene A. Veneruchi. Fundamentos da Programação de Computadores – Algoritmos, Pascal e C/C++. 2ª Edição - São Paulo: Pearson Prentice Hall, 2007. Capítulo 5. Arranjo - Vetor Profª.: Ivre Marjorie R. Machado (ivre.machado@prof.una.br) Introdução • As variáveis compostas homogêneas unidimensionais (vetores) são variáveis capazes de armazenar vários valores • Cada um desses valores é identificado pelo mesmo nome sendo diferenciado apenas por um índice • Os índices utilizados para identificar as posições de um vetor começam sempre em 0 (zero) e vão até o tamanho do vetor menos uma unidade Vetor em Algoritmo Declaração de um vetor em Algoritmo • Declarando uma variável do tipo vetor DECLARE nome [tamanho_do_vetor] Tipo • tipo: indica do tipo de cada elemento do vetor • nome: indica o nome da coleção de variáveis • tamanho_do_vetor: indica o tamanho do vetor de elementos, onde o menor valor é 1. Declaração de um vetor em Algoritmo DECLARE nome [tamanho_do_vetor] Tipo • Exemplo: DECLARE nota[4] NUMÉRICO 1 2 3 4índice valor nota[1] nota[2] nota[3] nota[4] Atribuição de valores a um vetor • As atribuições em vetor exigem que seja informada em qual de suas posições o valor ficará armazenado: – Atribui o valor 0 (zero) na posição de indice 4 do vetor nota: nota*1+ ← 3 – Atribui o valor 0 (zero) na posição de indice 4 do vetor vet: vet*4+ ← 0 Preenchendo um vetor • Preencher um vetor significa atribuir valores a todas as suas posições. Assim deve-se implementar um mecanismo que controle o valor do índice: PARA i ←1 ATÉ 4 FAÇA INÍCIO ESCREVA "Digite uma nota: " LEIA nota[i] FIM Preenchendo um vetor PARA i ←1 ATÉ 4 FAÇA INÍCIO ESCREVA "Digite uma nota: " LEIA nota[i] FIM No exemplo, a estrutura de repetição PARA foi utilizada para garantir que a variável i assuma todos os valores possíveis para o índice do vetor. Assim, para cada execução da repetição, será utilizada uma posição diferente do vetor Simulação Memória Tela i = 1 nota Digite uma nota: 95 i = 2 nota Digite uma nota: 13 i = 3 nota Digite uma nota: 47 i = 4 nota Digite uma nota: -25 95 1 2 3 4 95 13 1 2 3 4 95 13 47 1 2 3 4 95 13 47 -25 1 2 3 4 Mostrando um vetor • Mostrar os valores contidos em um vetor também implica a utilização do índice: PARA i ←1 ATÉ 4 FAÇA INÍCIO ESCREVA "A nota ", i , " é: " ESCREVA nota[i] FIM Mostrando um vetor No exemplo, a estrutura de repetição PARA foi utilizada para garantir que a variável i assuma todos os valores possíveis para o índice do vetor. Assim, para cada execução da repetição, será utilizada uma posição diferente, e dessa forma, todos os valores do vetor serão mostrados. PARA i ←1 ATÉ 4 FAÇA INÍCIO ESCREVA "A nota ", i , " é: " ESCREVA nota[i] FIM Simulação Memória Tela i = 1 nota A nota 1 é: 95 i = 2 nota A nota 2 é: 13 i = 3 nota A nota 3 é: 47 i = 4 nota A nota 4 é: -25 95 13 47 -25 1 2 3 4 95 13 47 -25 1 2 3 4 95 13 47 -25 1 2 3 4 95 13 47 -25 1 2 3 4 Vetor em C++ Exemplo int nota[4]; Vetor de inteiros nota[0], nota[1], nota[2], nota[3] Obs.: tamanho m -> índice 0 a (m-1) 20 12 3 13 0 1 2 3índice valor Declaração de um vetor em C++ • Declarando uma variável do tipo vetor Tipo nome [tamanho_do_vetor]; • tipo: indica do tipo de cada elemento do vetor • nome: indica o nome da coleção de variáveis • tamanho_do_vetor: indica o tamanho do vetor de elementos, onde o menor valor é 1. Declaração de um vetor em C++ Tipo nome [tamanho_do_vetor]; • Exemplos: int peso[10]; float nota[41]; char nome[80]; Acesso a valores em um vetor • Para acessar os elementos do vetor, deve utilizar o valor do índice desejado, juntamente com o nome da variável, por exemplo, peso[2] está associado ao terceiro elemento do vetor pois o primeiro elemento está relacionado ao índice 0 Atribuição de valores a um vetor • Atribui o valor 3 ao primeiro elemento do vetor => vet[0]= 3; • Atribui o nome Maria ao vetor nome (um vetor de seis posições é declarado assim: char nome[6] => strcpy (nome, “Maria”); • Inicializando um vetor na declaração int valores[5] = {100, 200, 300, 400, 500}; Carregando e Imprimindo • Carregando um vetor • Imprimindo um vetor for (int i = 0; i < 10; i++) { cin >> num[i]; } for (int i = 0; i < 10; i++) { cout << num[i]; } Exemplo Faça um algoritmo (fluxograma e pseudocódigo) para calcular a média aritmética das notas das provas de 5 alunos. Em seguida, escreva o programa em C++. Fluxograma i = 1 i <= 5 soma = soma + notas[i] false fim true notas[ i ] início media = soma/5 media ALGORITMO DECLARE notas[5], soma, media NUMÉRICO PARA i ← 1 ATÉ 5 FAÇA INÍCIO ESCREVA "Digite a nota do aluno ",(i+1) LEIA notas[i] soma ← soma + notas*i+ FIM media ← soma/5 ESCREVA "A media das notas e: ", media FIM_ALGORITMO Pseudocódigo int main() { float notas[5], soma, media; soma = 0; media =0; for(int i = 0; i<5; i++) { cout<<"\n Digite a nota do aluno "<<(i+1)<<" : "; cin >> notas[i]; soma = soma + notas[i]; } media = soma/5; system("cls"); //usado para apagar o que está na tela cout<<"\n A media das notas e: "<<media; getch(); } Código – C++ Exemplo (Resultado – Tela) Exercício 1 • Faça um programa que leia um vetor de 100 posições de números inteiros e, em seguida, mostre somente os números positivos. Exercício 2 • Em uma cidade, sabe-se que, de janeiro ao final de fevereiro de 2012, não ocorreu temperatura inferior a 15°C, nem superior a 40°C. Faça um programa em C++ que armazene as temperaturas de cada dia em um vetor (de 30 posições), calcule e imprima: – A menor e a maior temperatura ocorrida – A temperatura média – O número de dias nos quais a temperatura foi inferior a temperatura média Referência Bibliográfica • ASCENCIO, Ana Fernanda Gomes e CAMPOS, Edilene A. Veneruchi. Fundamentos da Programação de Computadores – Algoritmos, Pascal e C/C++. São Paulo: Pearson Prentice Hall, 2007. Capítulo 6. Manipulando Cadeia de Caracteres Profª.: Ivre Marjorie R. Machado (ivre.machado@prof.una.br) Introdução • A linguagem C++ utiliza vetores para armazenar uma cadeia de caracteres, • onde cada posição representa um caractere • É importante ressaltar que os compiladores identificam o fim de uma cadeia por meio do caractere nulo, ou seja, por meio de ‘\0’ Introdução • Deve-se declarar sempre o vetor com uma posição a mais para armazenar o caractere nulo (‘\0’) – que não precisa ser armazenado manualmente, isso é feito automaticamente pelo compilador • Ex.: Para armazenar a palavra CADEIA deve-se declarar um vetor do tipo char com 7 posições (que ocuparão posições contíguas na memória) Introdução char palavra[7] • A variável palavra, quando é declarada pode ocupar qualquer posição na memória • Entretanto, todas as posições do vetor ocupam espaços de memória adjacentes, sendo que cada caractere ocupa 1 byte 0 1 2 3 4 5 6 ... C A D E I A \0 ... 863 864 865 866 867 868 869 ... índice valor Posição Memória Exemplo 1 /* Guardar uma letra de cada vez do alfabeto em uma variável , observe que não é usada nenhuma função da Biblioteca string.h*/ int main () { char alfabeto[27]; // 26 letras mais o NULL char letra; int i; for (letra='A', i=0; letra<='Z'; letra++, i++) { alfabeto[i] = letra; } alfabeto[i] = NULL; cout << "As letras do alfabeto sao: " << alfabeto; getch(); } Manipulando cadeias de caracteres • Como todas as cadeias de caracteres são variáveis compostas homogêneas (vetor ou matriz) deve-se utilizar funções específicas – Essas funções fazem parte da biblioteca string.h –Algumas delas descritas a seguir Inicializando cadeias de caracteres 1. Inicialização no momento da declaração • A variável nome1 recebeu as letras separadamente (inclusive o caractere nulo). Por isso, cada uma das letras está envolvida por apóstrofos (' ') – essa é a maneira de identificar um caractere isoladamente char nome1[ ]= {'P', 'r', 'o', 'g', 'r', 'a', 'm', 'a', '\0'}; Inicializando cadeias de caracteres 1. Inicialização no momento da declaração • A variável nome2 recebeu uma palavra, recebendo automaticamente o caractere nulo. Por isso, a palavra Programa está entre aspas (" ") – esta é a maneira de identificar uma cadeia de caracteres. char nome2[ ]= "Programa"; Inicializando cadeias de caracteres 2. Inicialização por meio da atribuição (depois da declaração) • A variável vet1 recebeu um valor constante (a palavra Programa). char vet1[10], vet2[5]; strcpy(vet1, “Programa”); Inicializando cadeias de caracteres 2. Inicialização por meio da atribuição (depois da declaração) • Nesse caso, o conteúdo da variável vet2 foi copiado na variável vet1. char vet1[10], vet2[5]; strcpy(vet1, vet2); Inicializando cadeias de caracteres 3. Inicialização por meio do teclado • O comando cin consegue armazenar valores vindos do teclado na variável frase. No caso de uma cadeia de caracteres , esse comando consegue armazenar todos os símbolos digitados até a primeira ocorrência do espaço em branco. char frase[100]; cout<<“Digite um texto: ”; cin>> frase; Inicializando cadeias de caracteres 3. Inicialização por meio do teclado • A função gets armazena na variável frase todos os símbolos digitados até a ocorrência do ENTER. • Esta função exige a utilização da biblioteca stdio.h. char frase[100]; cout<<“Digite um texto: ”; gets(frase); Imprimindo cadeias de caracteres • A função puts() é usada para imprimir uma cadeia de caracteres inicializada com o uso da função gets(). char frase[100]; cout<<"\n Digite um texto: "; gets(frase); cout<<"\n A frase digitada foi: "; puts(frase); Imprimindo cadeias de caracteres • Também é possível imprimir a cadeia de caracteres com o comando cout<< char frase[100]; cout<<"\n Digite um texto: "; gets(frase); cout<<"\n A frase digitada foi: "<<frase; Funções da Biblioteca string.h Copiando cadeias de caracteres Função: strcpy( ) strcpy (str1, str2); • A função strcpy copia a cadeia str2 na cadeia str1 • Sendo assim, a cadeia str1 será substituída pela cadeia str2 Copiando cadeias de caracteres Função: strncpy( ) strncpy (str1, str2, n); • A função strncpy copia os n primeiros caracteres da cadeia str2 para a cadeia str1 Concatenando cadeias de caracteres Função: strcat( ) strcat(cadeia1, cadeia2); • A função strcat concatena a cadeia cadeia2 na cadeia cadeia1, ou seja, acrescenta a cadeia cadeia1 a cadeia cadeia2 Comparando cadeias de caracteres Função: strcmp( ) Resultado = strcmp (cadeia1, cadeia2); • Compara duas cadeias de caracteres e retorna um número inteiro para a variável Resultado, que pode ser: Zero: se as duas cadeias forem iguais Um número menor que 0: se a cadeia cadeia1 for alfabeticamente menor que cadeia2 Um número maior que 0: se a cadeia cadeia1 for alfabeticamente maior que cadeia2 * Essa função considera letras maiúsculas como sendo símbolos diferentes de letras minúsculas Comparando cadeias de caracteres Função: stricmp( ) Resultado = stricmp (cadeia1, cadeia2); • Compara duas cadeias de caracteres e retorna um número inteiro para a variável Resultado, que pode ser: Zero: se as duas cadeias forem iguais Um número menor que 0: se a cadeia cadeia1 for alfabeticamente menor que cadeia2 Um número maior que 0: se a cadeia cadeia1 for alfabeticamente maior que cadeia2 * Essa função consideraletras maiúsculas e minúsculas como sendo símbolos iguais. Descobrindo o número de caracteres de uma cadeia Função: strlen( ) int Tamanho; char str1[20]; Tamanho = strlen(str1); • A função strlen retorna para a variável Tamanho o número de caracteres da cadeia str1. Descobrindo o valor ASCII de um caractere Função: toascii( ) Valor = toascii(caractere); • A função toascii retorna para a variável Valor o valor numérico que representa o caractere na tabela ASCII. Essa função exige a utilização da biblioteca ctype.h. Descobrindo um caractere a partir do seu valor ASCII caractere = int(número); • A função int retorna para a variável caractere o caractere ASCII que é representado pelo número. Exemplo 2 //Bibliotecas int main() { char nome[40] = "Jose", sobrenome[30] = "Maria"; strcat(nome, sobrenome); cout << " Sobrenome "<<sobrenome; cout << "\n Nome "<< nome; getch(); } Cuidado: cadeia1 + cadeia2 tem que caber na cadeia1. Exemplo 2 - Tela Resultado - Tela Exemplo 3 //Bibliotecas ... int main () { char nome[40] = "Jose", sobrenome[30] = "Jose"; int teste; teste = strcmp (nome, sobrenome); if (teste != 0) { cout << "Os strings sao diferentes"; } else cout << "os strings sao identicos"; getch(); } Exemplo 4 int main() { char texto1[]="PROGRAMA COMPUTADOR"; char texto2[]="PARA "; char texto3[35]; texto3[0]='\0'; int achou,i,j,tam, k; tam= strlen(texto1); i = 0; achou = 0; while (i < tam && achou == 0) { if (texto1[i] == ' ') { achou = 1; } else { i++; } } Continuação - Exemplo 4 // ....continuação do slide anterior strncpy(texto3,texto1,i+1); texto3[i+1]='\0'; strcat(texto3,texto2); strcat(texto3,"\0"); j = strlen(texto3); for (k=i+1;k<tam;k++) { texto3[j] = texto1[k]; j = j + 1; } texto3[j]='\0'; cout<<"\nNova cadeia de caracteres = "<<texto3; getch(); } Comentários - Exemplo 4 • A variável texto1 ‚ inicializada com a cadeia de caracteres PROGRAMA COMPUTADOR • A variável texto2 ‚ inicializada com a cadeia de caracteres PARA • Em seguida a variável texto3 é inicializada com vazio, ou seja, uma cadeia com tamanho zero • A função strlen retorna o tamanho da cadeia armazenada na variável texto1 Comentários - Exemplo 4 • A estrutura de repetição (while) encontra a posição do espaço, para colocar a cadeia armazenada na variável texto2, dentro da cadeia da variável texto1, gerando a cadeia texto3 • A posição do primeiro espaço ser armazenada na variável i • A função strncpy copia da cadeia texto1, para a cadeia texto3 a quantidade de caracteres existentes antes do primeiro espaço em branco Comentários - Exemplo 4 • Em seguida, inclui \0 na cadeia TEXTO3 para finalizar a cadeia que está sendo gerada • Na cadeia de caracteres texto3 será acrescentada,ou seja, concatenada, a cadeia "PARA " que está na variável texto2 • Em seguida, concatena o \0 para finalizar a cadeia que está sendo gerada • A variável j receberá a próxima posição a ser ocupada no vetor que representa a cadeia de caracteres que está sendo gerada Comentários - Exemplo 4 • Até aqui, a variável texto3 contém os seguintes caracteres: "PROGRAMA PARA “ • A estrutura de repetição (for) copia os caracteres após o espaço em branco da cadeia armazenada na variável texto1 para a cadeia armazenada na variável texto3 • Em seguida acrescenta o \0 para finalizar a cadeia que está sendo gerada • Por fim, mostra a nova cadeia gerada Exercícios 1. Faça um programa que receba uma frase, calcule e mostre a quantidade de palavras da frase digitada. 2. Faça um programa que inverta os caracteres de uma string. Seu programa deve fazer isso através de um procedimento que recebe uma string como parâmetro e coloca a string invertida na mesma variável recebida como parâmetro. Exercício 3 • Faça um programa que receba uma frase e uma palavra. Caso a frase contenha a palavra ESCOLA, substitua pela palavra digitada. Ex.: Frase: EU MORO PERTO DE UMA ESCOLA. MAS ESSA ESCOLA NÃO É A MELHOR. Palavra: PADARIA Resposta: EU MORO PERTO DE UMA PADARIA. MAS ESSA PADARIA NÃO É A MELHOR. Referência Bibliográfica • ASCENCIO, Ana Fernanda Gomes e CAMPOS, Edilene A. Veneruchi. Fundamentos da Programação de Computadores – Algoritmos, Pascal e C/C++. 2ª Edição - São Paulo: Pearson Prentice Hall, 2007. Capítulo 9. Arranjo - Matriz Profª.: Ivre Marjorie R. Machado (ivre.machado@prof.una.br) Introdução • Uma matriz pode ser definida como um conjunto de variáveis de mesmo tipo e identificadas pelo mesmo nome (variável composta homogênea multidimensional). • Essas variáveis são diferenciadas por meio da especificação de suas posições dentro dessa estrutura. Introdução • C++ permite a declaração de: – Matrizes unidimensionais (mais conhecidas como vetores, visto no slide anterior) – Matrizes bidimensionais e multidimensionais • Obs.: o limite de dimensões fica por conta da quantidade de recurso disponível pelo compilador. Entretanto, as matrizes mais utilizadas possuem duas dimensões. Matriz em Algoritmo Declaração de Matriz DECLARE nome_variável [dimensão 1, dimensão2, ... , dimensão n] Tipo_dos_dados • Onde: – nome_variável: é o nome da variável do tipo matriz – [dimensão1, ..., dimensão2]: representam as possíveis dimensões da matriz – Tipo_dos_dados: é o tipo de dados que poderá ser armazenado Declaração de Matriz Exemplo: DECLARE matrizX[ 3, 5] NUMÉRICO 1 2 3 4 5 1 2 3 índice Linha Coluna Atribuindo valores a Matriz • MAT [1][4+ ← 5 Atribui o valor 5 à posição referente à linha 1 (2ª linha) coluna 4 (5ª coluna) da matriz MAT 1 2 3 4 5 6 1 5 2 índice PARA i ← 1 ATÉ 2 FAÇA INÍCIO PARA j ← 1 ATÉ 3 FAÇA INICIO ESCREVA "Digite uma valor: " LEIA matX[i,j] FIM FIM Preenchendo uma Matriz • Para preencher uma matriz, é necessário identificar todas as suas posições. Isto exige a utilização de um índice para cada dimensão da matriz: Preenchendo uma Matriz No exemplo, a matriz matX com 2 linhas e 3 colunas é mostrada. Observe que a variável i varia dentro do intervalo de 1 a 2, ou seja, exatamente nas linhas. Para cada valor de i, a variável j varia de 1 a 3, ou seja, as três colunas que cada linha possui. PARA i ← 1 ATÉ 2 FAÇA INÍCIO PARA j ← 1 ATÉ 3 FAÇA INICIO ESCREVA "Digite uma valor: " LEIA matX[i,j] FIM FIM Simulação Memória Tela Digitado i j 1 1 Digite uma valor: 12 2 Digite uma valor: 9 3 Digite uma valor: 3 2 1 Digite uma valor: -23 2 Digite uma valor: 4 3 Digite uma valor: 2 Simulação 1 2 3 1 12 9 3 2 -23 4 2 índice Como a matriz matX vai ficar.... PARA i ← 1 ATÉ 2 FAÇA INÍCIO PARA j ← 1 ATÉ 3 FAÇA INICIO ESCREVA matX[i,j] FIM FIM Mostrando uma Matriz • Para mostrar os elementos de uma matriz, é necessário identificar as suas posições. Isto exige a utilização de um índice para cada dimensão da matriz: Preenchendo uma Matriz No exemplo, a matriz matX com 2 linhas e 3 colunas é mostrada. Observe que a variável i varia dentro do intervalo de 1 a 2, ou seja, exatamente nas linhas. Para cada valor de i, a variável j varia de 1 a 3, ou seja, as três colunas que cada linha possui. PARA i ← 1 ATÉ 2 FAÇA INÍCIO PARA j ← 1 ATÉ 3 FAÇA INICIO ESCREVA matX[i,j] FIM FIM Matriz em C++ Declaração de Matriz em C++ Tipo_dos_dados nome_variável [dimensão 1] [dimensão 2] ... [dimensão n] • Onde: – Tipo_dos_dados: é o tipo de dados que poderá ser armazenado – nome_variável: é o nome da variável do tipo matriz – [dimensão1] [dimensão2]:representam as possíveis dimensões da matriz Declaração de Matriz em C++ • Exemplo: int materia [4][10]; • Interpretação: Temos 4 matérias, cada uma com 10 alunos. Linha Coluna Matriz em C++ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 int materia [4][10]; índice Linha Coluna Matriz em C++ • Da mesma maneira como ocorre com os vetores, os índices começam sempre em 0 (zero) em C++. • Sendo assim, com a declaração anterior criou- se uma variável chamada materia contendo 4 linhas (0 a 3) com 10 colunas (0 a 9), capazes de armazenar números inteiros. Atribuindo valores a Matriz em C++ • MAT [1][4] = 5 ; Atribui o valor 5 à posição referente à linha 1 (2ª linha) coluna 4 (5ª coluna) da matriz MAT 0 1 2 3 4 5 0 1 5 índice Atribuindo valores a Matriz em C++ • MAT1 [3][2] = 'D' ; Atribui a letra D à posição referente à linha 3 (4ª linha) coluna 2 (3ª coluna) da matriz MAT1 0 1 2 0 1 2 3 D índice Atribuindo valores a Matriz em C++ • MAT1 [3][2] = 'D' ; Atribui a letra D à posição referente à linha 3 (4ª linha) coluna 2 (3ª coluna) da matriz MAT1 0 1 2 0 1 2 3 D índice Preenchendo uma Matriz em C++ • Para ler dados do teclado e atribuir a uma matriz, supondo que a mesma tenha sido declarada como int MAT [7][3] pode-se executar os comandos a seguir: for (i=0; i<7; i++) { for (j=0; j<3; j++) { cin>> MAT[i][j] ; } } Preenchendo uma Matriz em C++ • Para ler dados do teclado e atribuir a uma matriz, supondo que a mesma tenha sido declarada como int MAT [7][3] pode-se executar os comandos a seguir: for (i=0; i<7; i++) { for (j=0; j<3; j++) { cin>> MAT[i][j] ; } } Preenchendo uma Matriz em C++ • Para ler dados do teclado e atribuir a uma matriz, supondo que a mesma tenha sido declarada como int MAT [7][3] pode-se executar os comandos a seguir: for (i=0; i<7; i++) { for (j=0; j<3; j++) { cin>> MAT[i][j] ; } } Linha Coluna Preenchendo uma Matriz em C++ • Como a matriz possui sete linhas: o for externo deve variar de 0 a 6 (percorrendo, assim, as sete linhas da matriz) e o for interno deve variar de 0 a 2 (percorrendo, assim, as três colunas da matriz) Mostrando os elementos da Matriz em C++ • Para mostrar os valores armazenados dentro de uma matriz, supondo que tenha sido declarada como float X[10][6], pode-se executar os comandos a seguir: for (i=0; i<10; i++) { for (j=0; j<6; j++) { cout<< X[i][j] ; } } Mostrando os elementos da Matriz em C++ • Como a matriz possui dez linhas: o for externo deve variar de 0 a 9 (percorrendo, assim, as dez linhas da matriz) e o for interno deve variar de 0 a 5 (percorrendo, assim, as seis colunas da matriz) Resumindo • Sempre vamos precisar de dois for (estrutura de repetição) para percorrer uma matriz: for ( i = 0; i < linhas; i++ ) { for ( j = 0; j < colunas; j++ ) { .... } } Exemplo • Observe o exemplo a seguir. • Nele a matriz mtrX é preenchida, sequencialmente por linhas, com os números de 1 a 200. int main () { int mtrX [20][10],i,j,cont=1; //Carregando a Matriz for (i=0;i<20;i++) { for (j=0;j<10;j++) { mtrX[i][j]=cont; cont++; } } //Impressão da Matriz for (i=0;i<20;i++) { cout<<"\n"; for (j=0;j<10;j++) { cout<<mtrX[i][j]<<" - "; } } getch(); } Exemplo – Tela Exercício 1 • Observe o programa a seguir. • O que o programa imprime na tela? • Quais são os valores que serão impressos para a matriz? int main () { int t, i, M[3][4]; for (t=0;t<3;t++) { for (i=0;i<4;i++) { M[t][i] = (t*4)+i+1; } } for (t=0;t<3;t++) { cout<<"\n"; for (i=0;i<4;i++) { cout<<M[t][i]<<" - "; } } getch(); } Referência Bibliográfica • ASCENCIO, Ana Fernanda Gomes e CAMPOS, Edilene A. Veneruchi. Fundamentos da Programação de Computadores – Algoritmos, Pascal e C/C++. São Paulo: Pearson Prentice Hall, 2007. Capítulo 7.
Compartilhar