Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos Mairum Ceoldo Andrade Aula 1 Conteúdo • Definição de algoritmos – O que é? – Para que serve? • Solução de problemas – Como me organizar? – Que etapas seguir? • Etapas para construção de um algoritmo – Como fazer? – Como descrever? 2 Definição de Algoritmos 3 Origem É uma palavra derivada do nome do matemático Abu Ja´far Muhammad – Al - Kharazmi, que introduziu a escrita dos cálculos através de uma sequência de passos em substituição ao ábaco. Matemática É uma sequência de procedimento utilizada para realizar e desenvolver cálculo, de forma automatizada sem muito esforço lógico. Programação Sequência de passos finitos, e bem estruturados que podem ser automatizados e implementados utilizando linguagens de programação. Definição de Algoritmo Sequência finita de instruções, definida de forma clara e sem ambiguidade, de forma que possa ser executada e reproduzida pelo interpretador ou leitor. 4 Algoritmo MDC • Divida A por B e obtenha o resto R1 • Se R1=0, MDC é B • Se R1≠0, divida B/R1 e obtenha R2 • Se R2=0, MDC é R1 • Se R2≠0, divida R2/R2 e obtenha R3 • Se R3=0, MDC é R2 • Se R3≠0, repita os dois passos anteriores que o resto seja 0. 5 Lógica É um ramo da filosofia que estuda e cuida das regras de estruturação do pensamento, do uso do raciocínio no estudo e solução de problemas. Apresentas formas e técnicas para estruturação e argumentação utilizadas na solução de problemas. 6 • Problema dos 9 pontos • Torre de Hanói 7 h tt p :/ /e n .w ik ip e d ia .o rg h tt p :/ /p t. w ik ib o o k s .o rg Lógica http://en.wikipedia.org/ http://pt.wikibooks.org/wiki/Lógica/Desafios_de_lógica#mediaviewer/Ficheiro:Nt-9point-1-1.svg Desafios de raciocínio e lógica matemática Racha Cuca 8 SITES SUGERIDOS Lógica http://www.profcardy.com/desafios/ http://rachacuca.com.br Resolução de problemas Geroge Pólya 1. Entender 2. Planejar 3. Executar 4. Verificar 9 Resolução de problemas 1 – ENTENDER ✓ Identifique os dados. ✓ Identifique a incógnita. ✓ Identifique condição. ✓ Verifique se é possível satisfazer a condição com os dados fornecidos. 10 Resolução de problemas 1 – PLANEJAR ✓ Procure achar alguma semelhança entre esse problema e outro que já resolveu. ✓ Releia o problema se não tiver conseguido encontrar as etapas necessárias para resolvê-lo. ✓ Quando tiver conseguido, escreva as etapas sem ser prolixo e impreciso. 11 Resolução de problemas 1 – EXECUTAR ✓ Acompanhe todas as etapas. ✓ Verifique se conseguiu atingir o objetivo. 12 Resolução de problemas 1 – VERIFICAR ✓ Consegue justificar todas as etapas? ✓ Consegue visualizar outra solução? ✓ Consegue ver uma outra aplicação para a solução encontrada? 13 14 Entender Planejar Executar Verificar Interpretação do enunciado do problema e das questões envolvidas. Escolha da linguagem e estruturação da solução. Construção do algoritmo. Execução em um interpretador ou compilador. Etapas para construção de um algoritmo Logica de programação É a aplicação dos conceitos e práticas da lógica na utilização das linguagens de programação para o desenvolvimento de algoritmos na solução de problemas, respeitando regras da lógica matemática, aplicadas pelos programadores durante o processo de construção do software. 15 Conceito de programa É um algoritmo escrito ou codificado, utilizando uma linguagem de programação. É composto com um conjunto de entradas, que são processadas e suas saídas resultantes. 16 Algoritmos Mairum Ceoldo Andrade Atividade 1 18 Problema Um fabricante produz bolas maciças em dois tamanhos, mas dispõe de um único modelo de caixa para transportá-las. Felizmente, essa caixa acondiciona perfeitamente uma bola grande, ou 216 pequenas. Sabendo que, independente do tamanho, as bolas são feitas do mesmo material, qual a caixa de bolas que pesará mais? 1 – Compreensão do problema • Que o problema pede e qual a incógnita? – Qual das caixas pesará mais, com a bola grande ou com as 216 pequenas? • Quais os dados? – Bola grande acondicionada perfeitamente na caixa. – 216 bolas pequenas acondicionadas perfeitamente na caixa. – Bolas maciças e do mesmo material. 19 1 – Compreensão do problema • Podemos representar através de uma figura? 20 2 – Elaboração do Plano • Se – A = aresta da caixa – R = raio bola grande – r = raio da bola pequena • Então: A = 2R = 2(6r) • 3 formas diferentes de resolver: – Utilizando-se proporções – Calculando-se o volume – Por semelhança 21 3 - Execução • Calculando-se o volume 22 vol.esf .grand = 4 3 p R3 = 4 3 p (6r )3 = = 4 3 p 216r 3 = 216 4 3 p r 3 = = 216.vol.esf .pequena 4 - Revisando • Revisar todos os argumentos e as manipulações algébricas feitas e verificar que tudo está correto. • Poderíamos verificar a solução utilizando as outras formas de resolver. • Poderíamos verificar o resultado construindo-se bolas maciças dos dois tamanhos, constatando- se com isso que a conclusão que se obteve é verdadeira. 23 Algoritmos Mairum Ceoldo Andrade Aula 2 Conteúdo • Representação de algoritmos – Linguagem Natural – Linguagem Gráfica – Pseudolinguagem • Construção de um algoritmo 2 3 Entender Planejar Executar Verificar Interpretação do enunciado do problema e das questões envolvidas Escolha da linguagem; e Estruturação da solução Construção do algoritmo Execução em um interpretador ou compilador Etapas para construção de um algoritmo Representação de Algoritmos Linguagem Natural 4 Escrever: Olá, como vai, tudo bem? Ler: “resposta” Escrever: Seja bem-vindo, é um prazer conhecê-lo. Linguagem Natural • Depende diretamente de quem está escrevendo e de quem está lendo; • Necessário clareza; • Ambiguidade léxica. 5 Representação de Algoritmos Linguagem Natural 6 Ingredientes: 2 xícaras (chá) de açúcar 3 xícaras (chá) de farinha de trigo 4 colheres (sopa) de margarina bem cheias 3 ovos 1 1/2 xícara (chá) de leite aproximadamente 1 colher (sopa) de fermento em pó bem cheia Modo de preparo: 1. Bata as claras em neve. 2. Reserve. 3. Bata bem as gemas com a margarina e o açúcar. 4. Acrescente o leite e farinha aos poucos sem parar de bater. 5. Por último, agregue as claras em neve e o fermento. 6. Coloque em forma grande de furo central untada e enfarinhada. 7. Pré-aqueça o forno a 180 C por 10 minutos. 8. Asse por 40 minutos. Representação de Algoritmos Linguagem Natural 7 1 – Utilize frases curtas; 2 – Use somente um verbo em cada frase, sempre no infinitivo ou imperativo; 3 – Evite palavras com ambíguas; 4 – Detalhe todas as etapas. Representação de Algoritmos • Linguagem gráfica – Imagens – Esquemas – Manuais de instrução 8 Representação de Algoritmos © C h ri s ti a n B ri d g w a te r | D re a m s ti m e .c o m Fluxograma ISO 5807 9 INÍCIO Acordar Escovar os dentes Preparar e tomar café Preparar roupas e lanches para o clube Há tarefas a fazer? Verificar programação do cinema Ir ao shopping Fazer Refeição Ir ao Cinema Ir ao clube Ir à piscina Fazer refeição Praticar esportes Voltar pra casa Fazer tarefas Tomar banho Fazer Refeição Assistir TV Dormir Dia de sol? FIM Não Não Sim Sim Linguagem gráfica Representação de Algoritmos • Pseudolinguagem – Abstrai os problemas da linguagem natural; – Facilita o aprendizado da lógica de algoritmos; – Focada no aprendizado e não na estrutura. 10 Semântica → definição do comando. Sintaxe → como se escreve um comando. Representação de Algoritmos Linguagens Algorítmicas Portugol Departamento de Engenharia Informática do Instituto Politécnico de Tomar em Portugalhttp://www.dei.estt.ipt.pt/portugol/ 11 http://www.dei.estt.ipt.pt/portugol/ WEBPortugol Universidade do Vale do Itajaí (UNIVALI) http://siaiacad17.univali.br/webportugol/ 12 Linguagens Algorítmicas UAL Unesa Algorithmic Language Universidade Estácio de Sá (Campos Friburgo/RJ) http://geocities.ws/ual_language/ual.html 13 Linguagens Algorítmicas http://geocities.ws/ual_language/ual.html C++ Dev C++ • http://www.bloodshed.net/devcpp.html 14 Linguagens Algorítmicas Construção de um algoritmo Problema: calcular juros de conta • Primeiro momento – Compreender. – As informações serão digitadas no teclado (origem), sendo compostas por dois dados numéricos, o valor da prestação e o valor do juros. – O algoritmo deverá calcular o novo valor da conta, já com os juros, que também será um valor numérico. – O algoritmo deverá mostrar o novo valor em tela (saída). 15 • Segundo Momento – Identificar. – Duas operações de entrada de dados, uma para ler o valor da conta e uma para ler o valor do juros; – Processamento para calcular o juros e acrescer este valor na conta; – Saída para apresentar o novo valor da conta. 16 • Entradas e saídas de dados • Variáveis e constantes necessárias • Cálculos • Decisões através de comparações • Ciclos ou repetições Construção de um algoritmo Problema: calcular juros de conta • Quarto momento – Refletir. 17 A solução foi satisfatória? Existe uma forma mais simples para resolver o problema? A solução, ou parte dela, poderá ser utilizada para resolver outros problemas? Construção de um algoritmo Problema: calcular juros de conta – A solução apresentada foi satisfatória; – O problema é simples, não há solução melhor, porém poderíamos realizar soluções mais genéricas para atender formas mais complexas de cálculo dos juros; – O processamento realizado neste algoritmo é muito usual e pode ser utilizado para muitos outros algoritmos. Algoritmos Mairum Ceoldo Andrade Atividade 2 Atividade 19 R: Verdadeiro. 1) Por definição, uma pseudolinguagem não tem um ambiente para ser testada. Verdadeiro ou falso? 2) Qual a diferença entre sintaxe e semântica de um comando? R: Sintaxe é como se escreve o comando e semântica, a definição do comando. R: UAL, PORTUGOL, WEBportugol, ILA, Portugol++, VisulaG. 3) Cite algumas linguagens algorítmicas. R: Fluxograma. 4) Cite uma linguagem gráfica usada para construir algoritmos. Algoritmos Mairum Ceoldo Andrade Aula 3 Conteúdo • Características da estrutura sequencias. • Comandos de início e fim. • Variáveis – Tipos de variáveis – Declaração e atribuição de variáveis 2 Algoritmos Praticar é a única forma de aprender 3 Agora começa sua vida como desenvolvedor Características da estrutura sequencias 4 ENTRADA PROCESSAMENTO SAÍDA Necessário obter os dados de algum lugar As informações geradas são armazenada ou apresentadas em tela Lógica implementada pelo desenvolvedor (você) para transformar os dados em informação Comandos de início e fim É necessário delimitar o início e o fim de seu programa Cada linguagem possui seu delimitador, veremos. 5 Comandos de início e fim UAL prog <nomeDoPrograma> ... fimprog 6 Durante nossa disciplina, sempre que usarmos um conteúdo entre < > significa que este conteúdo deve ser definido por você Comandos de início e fim C++ #include <iostream> using namespace std; int main() { ... } 7 Entretanto no C++ este é um caso especial, trata-se da importação de uma biblioteca Comandos de início e fim Fluxograma Conceito Exemplo 8 Início fim . : 123 fim Início Variáveis Uma variável é um elemento sintático do algoritmo que tem como funcionalidade armazenar um determinado valor. O valor associado a variável depende do tipo de informação que se deseja manipular, assim, diversos tipos de valores podem ser atribuídos às variáveis. 9 10 Memory Control Unit Arithmetic Logic Unit Input Output Accumulator Arquitetura de Von Neumann h tt p :/ /e n .w ik ip e d ia .o rg http://en.wikipedia.org/wiki/Von_Neumann_architecture#mediaviewer/File:Von_Neumann_architecture.svg Variáveis 11 MEMÓRIA PRINCIPAL 12 MEMÓRIA PRINCIPAL Variável Variáveis Tipos de dados • Na escola – Português • Palavras – Matemática • Natural (N) • Inteiros (Z) • Reais (R) • Complexos (C) 13 • Nos algoritmos e programação 14 Tipos de dados Declarando uma variável tipo <nomeDaVariável> 15 UAL C++ Algumas regras: linguagens não aceitam que o nome comece com números, geralmente aceitam alguns caracteres especiais como underline. Declarando uma variável Vamos treinar • Nome de uma pessoa: string nome • Salário de uma pessoa: real salario • Idade de uma pessoa: int idade • Indicar se o cadastro esta ativo: logico ativo 16 Atribuindo valor UAL <variável> <- <valor> varInteiro <- 213; varReal <- 2.5; varCaractere <- “Ola“; varLogico <- falso; C++ <variável> = <valor> varInteiro = 213; varReal = 2.5; varCaractere = “E“; varLogico = false; 17 Algoritmos Mairum Ceoldo Andrade Atividade 3 19 Caixa eletrônico Um caixa eletrônico possui notas de – R$ 50,00 – R$ 20,00 – R$ 10,00 Faça um programa que calcule quantas notas de cada deve ser fornecida para o cliente, ao realizar um saque de um determinado valor. Caixa eletrônico • Variáveis: – Saque – Nota50 – Nota20 – Nota10 • Quantidade de notas de 50: divisão inteira por 50. • Quantidade de notas de 20: divisão do resto da divisão por 50. • Quantidade de notas de 10: divisão do resto da divisão por 20. 20 • UAL 21 Caixa eletrônico Algoritmos Mairum Ceoldo Andrade Aula 4 Conteúdo • Comandos de entradas e dados – LEIA • Comandos de saída de dados – Imprima • Operadores Aritméticos e lógicos – Expressões aritméticas – Expressões relacionais – Expressões lógicas 2 Comandos de entradas e dados – LEIA UAL • Sintaxe: leia <nomeDaVariável>; • Descrição: palavra reservada leia seguida do nome da variável. É possível ler apenas uma variável de cada vez, seguido de ponto e vírgula. • Exemplos: – leia v1; – leia v2; – leia v3. 3 Comandos de entradas e dados – LEIA C++ • Sintaxe: cin >> <nomeDaVariável>; • Descrição: palavra reservada cin seguida do símbolo obrigatório >> seguido do nome da variável, seguido de ponto e vírgula. • Exemplos: – cin >> v1; – cin >> v2; – cin >> v3. 4 Comandos de entradas e dados – LEIA Fluxograma • Símbolo: • Exemplos: 5 variável v1, v2, v3 Comandos de saída de dados ESCREVA UAL • Sintaxe: imprima <conteúdo>; • Descrição: palavra reservada imprima seguida de uma variável, de um conjunto de caracteres ou de várias variáveis ou conjuntos de caracteres separados por vírgula, seguido de ponto e vírgula. • Exemplos: – imprima v1; – imprima “Variável: “, v1; – imprima v1, “ - ”, v2. 6 Comandos de saída de dados ESCREVA C++ • Sintaxe: cout << <conteúdo>; • Descrição: palavra reservada cout seguida do símbolo <<, seguido de uma variável, de um conjunto de caracteres ou de um várias variáveis ou conjuntos de caracteres separados pelo símbolo <<, seguido de ponto e vírgula. • Exemplos: – cout << v1; – cout << “Variável: “ << v1; – cout << v1 << “ - ” << v2. 7 Comandos de saída de dados ESCREVA Fluxograma • Símbolo: • Exemplos: 8 v1, v2 “Variável” , v1 Comandos de saída de dados ESCREVA • Alguns caracteres de controle: \n – equivalente a tecla enter em um editor de texto \t – equivalente a tecla tab em um editor de texto • Exemplo: 9 USO • Formulário: Nome: ____________________ Idade: _______ Experiência: Sim ( ) Não ( ) 10 USO 11 “Nome:” “Idade:” “Exper…:” nome indade experiência 12 “Nome:” “Idade:” “Exper…:” nome indade experiência Início fim Fluxograma prog Entrevista stringnome, idade, experiência imprima ”Nome: ” leia nome; imprima “Idade: ” leia idade imprima “Experiência: ” leia expediência fimprog UAL Expressões aritméticas Operador Linguagem UAL Linguagem C++ Soma + + Subtração - - Multiplicação / / Divisão * * Resto da Divisão % % 13 Utiliza a mesma precedência da matemática, para alterar utilize ( ), delimitando as operações que devem ser realizadas primeiro Expressões aritméticas UAL C++ 14 Expressões relacionais Operador Linguagem UAL Linguagem C++ maior > > menor < < menor ou igual <= <= maior ou igual >= >= igual == == diferente <> != 15 Em uma expressão relacional o resultado produzido pela avaliação da expressão é sempre um valor lógico. Assim, uma expressão relacional resulta em um valor do tipo verdadeiro ou falso. Expressões aritméticas C++ 16 Expressões Lógicas Operador Linguagem UAL Linguagem C++ negação (NOT) ! ! conjunção (E) && && disjunção (OU) || || disjunção-exclusiva (XOR) <não existe> ^ 17 NOT AND OR XOR Expressões lógicas C++ 18 Algoritmos Mairum Ceoldo Andrade Atividade 4 Calculadora • O usuário fornecerá dois valores numéricos e serão realizados os cálculos de soma, subtração, multiplicação e divisão. • Para leitura dos valores será utilizado o comando leia e para a apresentação dos resultados será necessário o comando escreva. 20 Calculadora Dados de Entrada quantidade: 2 tipos: real, real nomes: valor1, valor2 Dados intermediários quantidade: 4 tipos: real, real, real, real nomes: soma, sub., mult., div. PROCEDIMENTO 1 – obter valor1, valor2 2 – soma <- valor1 + valor2 3 – sub <- valor1 - valor2 4 – mult <- valor1 * valor2 5 – div <- valor1 / valor2 6 – exibir soma, sub., mult., div. 21 Calculadora UAL C++ 22 Calculadora 23 Algoritmos Mairum Ceoldo Andrade Aula 5 Conteúdo • Características de estrutura de decisão. • Comando condicional simples. • Comando condicional composto. 2 • Divida A por B e obtenha o resto R1 • Se R1=0, MDC é B • Se R1≠0, divida B/R1 e obtenha R2 • Se R2=0, MDC é R1 • Se R2≠0, divida R2/R2 e obtenha R3 • Se R3=0, MDC é R2 • Se R3≠0, repita os dois passos anteriores que o resto seja 0 Algoritmo MDC 3 Usamos condições para tomar decisão e seguir o fluxo desejado do algoritmo. Tipos de estruturas condicionais • Condicional simples: forma mais simples, possui apenas o fluxo caso a condição seja verdadeira. • Condicional composta: dois fluxos, um para o caso da condição verdadeira e outro se for falsa. • Condicional aninhada: utiliza-se outras condições encadeadas caso no fluxo em que a condição é falsa. • Condicional múltipla: permite múltiplos fluxos para diferentes valores de uma mesma variável. 4 A condição Operações ou Testes Significado Matemática Exemplo - UAL Maior > 2 * 8 > 4 Menor < 2 < 9 Igual = 3 == 7 - 4 Maior ou igual ≥ 9 >= 5 Menor ou igual ≤ 4 <= 10 diferente ≠ 8 <> 5 Conjunção (e) ∧ n>=100 && n<=200 Disjunção (ou) ∨ n<100 || n>200 Negação (não) !p 5 Condicional Simples se Um determinado bloco de instruções do algoritmo será executado se (e apenas se) uma condição de teste for satisfeita. As linguagens de programação utilizam a instrução equivalente denominada if. 6 UAL se (<teste>) { <bloco de comandos> } Exemplo se (nota >= 6) { imprima “Aprovado“; } C++ if (<teste>) { <bloco de comandos> } Exemplo if (nota >= 6) { cout << “Aprovado“; } 7 Condicional Simples Fluxograma Exemplo 8 V F TESTE . : V F Nota >= 6 “Aprovado” Condicional Simples Verificar se um número é par ou ímpar 9 • UAL • C++ Condicional Composto se então senão Trecho da estrutura condicional que especifica o que será realizada quando a expressão resultar em um valor falso é conhecido como senão. Nas linguagens de programação o bloco senão é chamado de else. 10 UAL se (<teste>) { <bloco de comandos> } senão { <bloco de comandos> } C++ if (<teste>) { <bloco de comandos> } else { <bloco de comandos> } 11 Condicional Simples Fluxograma Exemplo 12 V F TESTE . : . : V F Nota >= 6 “Aprovado” “Reprovado” Condicional Simples 13 • UAL • C++ Verificar se um número é par ou ímpar Verificar uma entrada 14 UAL C++ O Teste 15 operando 1 operador relacional operando 2 Uma expressão relacional Operadores Relacionais Significado Matemática Exemplo - UAL Maior > 2 * 8 > 4 Menor < 2 < 9 Igual = 3 == 7 - 4 Maior ou igual ≥ 9 >= 5 Menor ou igual ≤ 4 <= 10 diferente ≠ 8 <> 5 16 exp. rel. 1 operador lógico exp. rel. 2 Duas ou mais expressões relacionais Operadores Lógicos Significado Matemática Exemplo - UAL Conjunção (e) ∧ n>=100 && n<=200 Disjunção (ou) ∨ n<100 || n>200 Negação (não) !p Obs.: !(nao) tem maior hierarquia, seguido do &&(and) e, depois, ||(ou) O Teste Algoritmos Mairum Ceoldo Andrade Atividade 5 18 R: se composto. 1) Se só tivermos duas possibilidades de respostas, qual a estrutura indicada? 2) Em relação aos operadores Relacionais, qual tem maior hierarquia? R: Todos têm a mesma hierarquia. R: !( não). 3) Em relação aos operadores Lógicos, qual tem maior hierarquia? 19 4) Construa um algoritmo linguagem Algorítmica UAL que receba nome e nota e exiba o nome e uma das mensagens: Concorrendo a bolsa de 100% ou Melhore sua nota. Concorrerá a bolsa caso a nota seja maior que 9. Algoritmos Mairum Ceoldo Andrade Aula 6 Conteúdo • Comando condicional aninhado. • Comando condicional múltiplo. 2 Condicional Aninhado Uma condicional é definida no interior do bloco de instruções da outra. 3 Condicional Aninhado UAL se (<teste>) { <bloco de comandos> } senão { se (<teste>) { <bloco de comandos> } senão { <bloco de comandos> } } C++ if (<teste>) { <bloco de comandos> } else { if (<teste>) { <bloco de comandos> } else { <bloco de comandos> } } 4 Condicional Aninhado UAL se (nota >= 6) { imprima “Aprovado“; } senão { se (nota >= 4) { imprima “Recuperação“; } senão { imprima “Reprovado”; } } C++ if (nota >= 6) { cout << “Aprovado“; } else { if (nota >= 4) { cout << “Recuperação“; } else { cout << “Reprovado”; } } 5 Condicional Aninhado Fluxograma Exemplo 6 V F TESTE . : V F TESTE . : . : V F Nota >= 6 V F Nota >= 4 “Aprovado” “Recuperação” “Reprovado” Colocar 3 números em ordem crescente 7 • UAL 8 Fluxograma Colocar 3 números em ordem crescente Autenticação de usuário 9 UAL Condicional múltiplo 10 Condicional múltiplo • Estruturar de forma melhor e mais eficiente problemas como o apresentado anteriormente. • Permite a elaboração de condicionais mutuamente exclusivas. –A variável tem que ser a mesma em todos os testes. –A variável tem que ser do tipo enumerável: inteira ou de um caractere. –O operador relacional tem que ser o de igualdade. 11 Condicional múltiplo UAL (não disponível na versão) escolha (<variavel>) { caso <valor1>: <comandos> pare; caso <valor2>: <comandos> pare; caso <valor3>: <comandos> pare; caso <valor_n>: <comandos> pare; senao : <comandos> } C++ switch (<variavel>) { case <valor1>: <comandos> break; case <valor2>: <comandos> break; case <valor3>: <comandos> break; case <valor_n>: <comandos> break; default : <comandos> } 12 Condicional múltiplo Fluxograma 13 V F valor==v1 Comandos 1 V F valor==v2 Comandos 2 V F valor==v3 Comandos 3 V F valor==vn Comandos n Comandos 1 Mês do ano 14 C++ Calculadora 15 C++ Algoritmos Mairum Ceoldo Andrade Atividade 6 17 Data do Licenciamento informe o tipo de automóvel e o número final de sua placa para que você possa informá-lo da data final de seu licenciamento. No Brasil o licenciamento de carros e caminhões é feito durante o ano de acordo com o final da placa de seu carro, dependendo do valor o licenciamentodeve ser feito até um determinado dia. De acordo com a tabela abaixo solicite ao usuário que Mês do licenciamento Automóveis Caminhões abril 1 - maio 2 - junho 3 - julho 4 - agosto 5 e 6 - setembro 7 1 e 2 outubro 8 3, 4 e 5 novembro 9 6, 7 e 8 dezembro 0 9 e 0 Resolução C++ #include <iostream> using namespace std; int main() { int tipoAutomovel, fimPlaca; cout << “Informe o tipo de seu automóvel –\n 1 para carros;\n 2 para Caminhões”; cin >> tipoAutomovel; cout << “Informe o número final de sua placa: ”; cin >> fimPlaca; 18 if(tipoAutomovel == 1) { switch(fimPlaca){ case ‘1’: cout << “Abril”; break; case ‘2’: cout << “Maio”; break; case ‘3’: cout << “Junho”; break; case ‘4’: cout << “Julho”; break; case ‘5’: case ‘6’: cout << “Agosto”; break; case ‘7’: cout << “Setembro”; break; case ‘8’: cout << “Outubro”; break; case ‘9’: cout << “Novembro”; break; case ‘0’: cout << “Dezembro”; break; } } 19 else { switch(fimPlaca){ case ‘1’: case ‘2’: cout << “Setembro”; break; case ‘3’: case ‘4’: case ‘5’: cout << “Outubro”; break; case ‘6’: case ‘7’: case ‘8’: cout << “Novembro”; break; case ‘9’: case ‘0’: cout << “Dezembro”; break; } } } 20 Testando 21 Algoritmos Mairum Ceoldo Andrade Aula 7 Conteúdo • Característica de estruturas de repetição • Comando de repetição com variável de controle – PARA 2 Como executar diversas vezes a mesma ação? • Como a nota de 5 alunos? • E se quisermos ler 100 notas? – CTRL C e CTRL V .... 3 ler nota1; ler nota2; ler nota3; ler nota4; ler nota5. ler nota1; ler nota2; ler nota3; ....... ler nota99; ler nota100. Como executar diversas vezes a mesma ação? • Como fazer um programa despertador? – Basta fazer um programa emita um alarme em um determinado horário. • Quantos dias? – Tantos quantos o usuário quiser! 4 se (horario = x) { tocarAlarme(); } se (horario = x) { tocarAlarme(); } se (horario = x) { tocarAlarme(); } se (horario = x) { tocarAlarme(); } se (horario = x) { tocarAlarme(); } ... Estruturas de repetição • “Enquanto estiver ativo faça isso.” • “Faça isso enquanto for diferente daquilo.” • “Para x de 10 até 100 realize tal tarefa.” 5 Estruturas de repetição Estruturas de repetição são também conhecidas como estruturas de iteração ou laços, elas permitem que uma sequência de comandos seja executada repetidamente, até que determinada condição ou situação seja atendida. 6 Comando PARA - UAL 7 para(<valor inicial>; <expressão de teste>;<incremento>) { bloco de comandos } <valor inicial> nomeDaVariável <- valorInicial; • deve ser uma variável enumerável, um inteiro (int) • é atribuído um valor inicial, pode ser uma constante, uma variável ou uma expressão. • Exemplos: i<-0; i<- strtam(nome); i <- x+1; <expressão de teste> nomeDaVariável <, >, <=, >=, == valor; • Estrutura relacional ou condição que será utilizada como termo final do laço • O valor poder ser constante, variável ou expressão • Exemplos: i >= 10; i>strtam(nome); i <= x+10; <incremento> nomeDaVariável <- nomeDaVariável operador valor • é um comando de atribuição que incrementa a variável no laço • o operador pode ser qualquer operador aritmético ou expressão • Exemplos: i <- i+1; i<-i+2; i++; i--; Comando PARA – C++ 8 for(<valor inicial>; <expressão de teste>;<incremento>) { bloco de comandos } <valor inicial> nomeDaVariável = valorInicial; • deve ser uma variável enumerável, um inteiro (int) • é atribuído um valor inicial, pode ser uma constante, uma variável ou uma expressão. • Exemplos: i=0; i = strtam(nome); i = x+1; <expressão de teste> nomeDaVariável <, >, <=, >=, == valor; • Estrutura relacional ou condição que será utilizada como termo final do laço • O valor poder ser constante, variável ou expressão • Exemplos: i >= 10; i>strtam(nome); i <= x+10; <incremento> nomeDaVariável = nomeDaVariável operador valor • é um comando de atribuição que incrementa a variável no laço • o operador pode ser qualquer operador aritmético ou expressão • Exemplos: i = i+1; i<-i+2; i++; i--; Repetição com contador BLOCO DE COMANDOS V F Comando PARA - Fluxograma 9 Count<- 1, 3, 1 Digite numero>0 NUM Num * 2 fim Inicio F V Ler código e nota de 5 alunos 10 prog leituraAlunos int codigo; real nota; imprima “Código: ”; leia codigo; imprima “Nota: ”; leia nota; imprima “Código: ”; leia codigo; imprima “Nota: ”; leia nota; imprima “Código: ”; leia codigo; imprima “Nota: ”; leia nota; imprima “Código: ”; leia codigo; imprima “Nota: ”; leia nota; imprima “Código: ”; leia codigo; imprima “Nota: ”; leia nota; fimprog CTRL C e CTRL V Ler código e nota de 5 alunos 11 prog leituraAlunos int codigo; real nota; int c; fimprog Estrutura de repetição para(c=1; c<=4;c=c+1) { } imprima “Código: ”; leia codigo; imprima “Nota: ”; leia nota; Comando PARA Possibilidades de iteração for(c= 1; c <= 5; c=c + 1) for(c= 1; c <= 5; c++) for(c= 1; c <= 5; c += 1) PA - crescente ➢ Valor inicial menor do que valor final ➢ Operador Relacional < ou <= 12 Comando PARA Possibilidades de iteração for(c= 5; c >= 1; c -= 1 ) for(c= 5; c >= 1; c-- ) for(c= 5; c >=1; c=c - 1 ) PA - decrescente ➢ Valor inicial maior do que valor final ➢ Operador Relacional > ou >= 13 Comando PARA Possibilidades de interação for(c= 3; c <= 243; c*=3) PG - crescente ➢ Valor inicial menor do que valor final ➢ Operador Relacional < ou <= 14 Comando PARA Possibilidades de iteração for(c=64; c >= 2; c=c /2) PG - decrescente ➢ Valor inicial maior do que valor final ➢ Operador Relacional > ou >= 15 Comando PARA Possibilidades de iteração 16 for(c= 1; c <= 5; c=c + 1) for(c= 3; c <= 243; c*=3) for(c= 1; c <= 5; c++) for(c= 1; c <= 5; c += 1) PA - crescente PG - crescente for(c=64; c >= 2; c=c /2) for(c= 5; c >= 1; c -= 1 ) for(c= 5; c >= 1; c-- ) for(c= 5; c >=1; c=c - 1 ) PG - decrescente PA - decrescente Ler 10 valores e apresentar a soma 17 Linguagem UAL Linguagem C++ prog exemplo int cont; real valor, acumulador; acumulador <- 0.0; para(cont<-1; cont<=10; cont++) { imprima “\nValor ”, cont, “: “; leia valor; acumulador <- acumulador + valor; } imprima “\nSoma dos valores: “, acumulador; fimprog #include <iostream> using namespace std; int main() { int cont; float valor, acumulador; acumulador = 0; for(cont=1; cont<=10; cont++) { cout << “\nNumero: “ << cont; cin >> valor; acumulador = acumulador + valor; } cout <<”\nSoma dos valores: ” << acumulador; } ACUMULADOR Ler 10 valores e apresentar a soma 18 Linguagem UAL Linguagem C++ prog exemplo int cont; real valor, acumulador; acumulador <- 0.0; para(cont<-1; cont<=10; cont++) { imprima “\nValor ”, cont, “: “; leia valor; acumulador <- acumulador + valor; } imprima “\nSoma dos valores: “, acumulador; fimprog #include <iostream> using namespace std; int main() { int cont; float valor, acumulador; acumulador = 0; for(cont=1; cont<=10; cont++) { cout << “\nNumero: “ << cont; cin >> valor; acumulador = acumulador + valor; } cout <<”\nSoma dos valores: ” << acumulador; } ACUMULADOR 19 Acumulador 1) O que é? 2) Como se cria? Declarando a variável Uma variável 20 Acumulador ✓ Declare a variável, cujo tipo tem que ser compatível com o valor que irá receber. ✓ Inicialize com o elemento neutro da operação, na maioria das vezes (0 + - ou 1 * /). ✓ Dentro da estrutura de repetição, coloque a expressão do acumulador: var op= valor; var++; var--. ✓ Depois da estrutura de repetição, exiba, teste, etc. 3) Quais as regras para que tudo funcione perfeitamente? Algoritmos Mairum Ceoldo Andrade Atividade 7 22 Problema Elabore um algoritmo que calcule o total de números primos entre 1 e 1000 Números primos: divisíveis apenas por 1 e por ele mesmo. Solução 23 Algoritmos Mairum Ceoldo Andrade Aula 8 Conteúdo • Comandode repetição com teste lógico no início – ENQUANTO • Comando de repetição com teste lógico no fim – FAÇA ... ENQUANTO • Quando utilizar cada estrutura de repetição. 2 Comando - ENQUANTO • Estrutura usada quando o número de repetições for desconhecido. • Controla a repetição com um teste(condição) no início. • Ideal para trechos de proteção na entrada de dados. • O usuário decide quando interrompe a repetição. 3 Comando ENQUANTO UAL 4 enquanto( <condição> ) { bloco de comandos } <condição> variável operador valor • Estrutura relacional ou condição que será utilizada como validação para execução do bloco de comandos. • Pode ser uma única expressão simples ou um conjunto de expressões relacionais e lógicas, como as utilizadas nos comandos condicionais, vistas anteriormente. • Exemplos: i >= 10; i>strtam(nome); i <= x+10 Comando ENQUANTO C++ 5 while ( <condição> ) { bloco de comandos } <condição> variável operador valor • Estrutura relacional ou condição que será utilizada como validação para execução do bloco de comandos. • Pode ser uma única expressão simples ou um conjunto de expressões relacionais e lógicas, como as utilizadas nos comandos condicionais, vistas anteriormente. • Exemplos: i >= 10; i>strlen(nome); i <= x+10 Comando ENQUANTO Fluxograma 6 BLOCO DE COMANDOS V F TESTE Digite numero>0 NUM Num * 2 fim Início F V Digite numero>0 NUM Num > 0 ? Contagem de números positivos e negativos 7 UAL C++ prog exemplo int numero, pos, neg; numero <- 1; pos <- 0; neg <- 0; enquanto(numero <> 0) { imprima “\n Escreva o número: “; leia numero; se (numero > 0) { pos<- pos +1; } senão { se (numero < 0) { neg<- neg +1; } } } imprima “\nTotal de números positivo: “, pos; imprima ”\nTotal de números negativos”, neg; fimprog #include <iostream> using namespace std; int main() { int numero = 1; int pos, neg; pos = neg = 0; while(cont != 0) { cout<<”\nEscreva o número”; cin>>numero; if( (numero > 0) pos++; else { if( (numero < 0) neg++; } } cout<<”\nTotal de números positos: ”<<pos; cout<<”\nTotal de números negativos: ”<<neg; } Comando – FAÇA...ENQUANTO • Estrutura usada quando o número de repetições for desconhecido. • Controla a repetição com um teste(condição) ao final. • Ideal para programas que funcionam através de um menu. • O usuário decide quando interrompe a repetição. 8 Comando FAÇA...ENQUANTO UAL 9 faça { bloco de comandos } enquanto( <condição> ) <condição> variável operador valor • Estrutura relacional ou condição que será utilizada como validação para execução do bloco de comandos novamente. • Pode ser uma única expressão simples ou um conjunto de expressões relacionais e lógicas, como as utilizadas nos comandos condicionais, vistas anteriormente. • Exemplos: i >= 10; i>strtam(nome); i <= x+10 Comando FAÇA...ENQUANTO C++ 10 do { bloco de comandos } while( <condição> ) <condição> variável operador valor • Estrutura relacional ou condição que será utilizada como validação para execução do bloco de comandos. • Pode ser uma única expressão simples ou um conjunto de expressões relacionais e lógicas, como as utilizadas nos comandos condicionais, vistas anteriormente. • Exemplos: i >= 10; i>strlen(nome); i <= x+10 Comando FAÇA...ENQUANTO Fluxograma 11 BLOCO DE COMANDOS V F TESTE Digite numero>0 NUM Num * 2 fim Início F V Num > 0 ? Contagem de números positivos e negativos 12 UAL C++ prog exemplo int total; real nota, soma, maior, menor, media; string resposta; soma <- 0.0; total <- 0; faca { total <- total +1; imprima “\nNota “, total, “: “; leia nota; soma <- soma + nota; se (total == 1) { maior <- nota; menor <- nota; } senao { se (nota > maior) { maior <- nota; } se (nota < menor) { menor <- nota; } } imprima “Deseja continuar [s] ou [n]? ”; leia resposta; } enquanto(resposta==“s“ || resposta==”S”) media <- soma / total; escreva “\nMédia das notas: “, media; escreva ”\nMaior nota..........: ”, maior; escreva ”\nMenor nota.........: ”, menor; fimprog #include <iostream> using namespace std; int main() { int total; float nota, soma, maior, menor, media; char resposta; soma = 0; total = 0; do{ total++; cout<<”\nNota ”<<total<<”: ”; cin>>nota; if( (total == 1) { maior = nota; menor = nota; } else { if (nota > maior) maior = nota; if (nota < menor) menor = nota; } cout“\nDeseja continuar [s] ou [n]? ”; cin>>resposta; } while(resposta==‘n’ || resposta==’N’); media = soma / total; cout << “\nMédia das notas: “ << media; cout << ”\nMaior nota..........: ” << maior; cout << ”\nMenor nota.........: << menor; } prog exemplo int total; real nota, soma, maior, menor, media; string resposta; soma <- 0.0; total <- 0; faca { total <- total +1; imprima “\nNota “, total, “: “; leia nota; soma <- soma + nota; se (total == 1) { maior <- nota; menor <- nota; } senao { se (nota > maior) { maior <- nota; } se (nota < menor) { menor <- nota; } } imprima “Deseja continuar [s] ou [n]? ”; leia resposta; } enquanto(resposta==“s“ || resposta==”S”) media <- soma / total; escreva “\nMédia das notas: “, media; escreva ”\nMaior nota..........: ”, maior; escreva ”\nMenor nota.........: ”, menor; fimprog #include <iostream> using namespace std; int main() { int total; float nota, soma, maior, menor, media; char resposta; soma = 0; total = 0; do{ total++; cout<<”\nNota ”<<total<<”: ”; cin>>nota; if( (total == 1) { maior = nota; menor = nota; } else { if (nota > maior) maior = nota; if (nota < menor) menor = nota; } cout“\nDeseja continuar [s] ou [n]? ”; cin>>resposta; } while(resposta==‘n’ || resposta==’N’); media = soma / total; cout << “\nMédia das notas: “ << media; cout << ”\nMaior nota..........: ” << maior; cout << ”\nMenor nota.........: << menor; } Comando simulando comando 13 #include <iostream> using namespace std; int main() { int valor; for(;;) { cout <<“\nValor: “; cin >> valor; if(valor <= 0) break; cout << valor*valor <<“\n”; } system(“pause”); } Comando simulando comando 14 #include <iostream> using namespace std; int main() { int valor; for(;;) { cout <<“\nValor: “; cin >> valor; cout << valor*valor <<“\n”; if(valor <= 0) break; } system(“pause”); } Comando simulando comando 15 #include <iostream> using namespace std; int main() { int valor, i; i = 0; while(i <= 3) { cout <<“\nValor: “; cin >> valor; cout << valor*valor <<“\n”; i++; } system(“pause”); } Comando simulando comando 16 #include <iostream> using namespace std; int main() { int valor = 1; while(valor > 0) { cout <<“\nValor: “; cin >> valor; cout << valor*valor <<“\n”; if(valor <= 0) break; } system(“pause”); } Comando simulando comando 17 #include <iostream> using namespace std; int main() { int valor, i; i = 1; do { cout <<“\nValor: “; cin >> valor; cout << valor*valor <<“\n”; i++; } while(i <= 3); system(“pause”); } Comando simulando comando 18 #include <iostream> using namespace std; int main() { int valor; do { cout <<“\nValor: “; cin >> valor; if(valor <= 0) break; cout << valor*valor <<“\n”; } while(valor > 0); system(“pause”); } Quando usar cada um? PARA Número de repetições conhecido ENQUANTO Número de repetições desconhecido FAÇA...ENQUANTO Número de repetições desconhecido Executo primeiro e testo depois 19 Algoritmos Mairum Ceoldo Andrade Atividade 8 21 1) Qual(is) a(s) desvantagem(ens) em se usar a estrutura while para simular a estrutura do…while? R: Forçar a entrada e fazer dois testes. R: while – Início do...while - Final 2) Identifique, nas estruturas abaixo, qual testa no início e qual testa ao final. a) while b) do...while 22 R: O programa entrou em loop. 3) Foi feito um programa, cuja finalidade erasó permitir entrar com números de três algarismos. A seguinte linha enquanto(x>=100 && x<=999) foi colocada logo depois da entrada de dados. Sabe- se que foi digitado o número 53.O que aconteceu? ... leia x; equanto(x>=1 && x<=100) { ... } ... Algoritmos Mairum Ceoldo Andrade Aula 9 Conteúdo • Estruturas homogêneas e heterogêneas de programação • Tipo String • Matriz unidimensional –Conceitos de vetor –Declaração de um vetor – Inclusão de dados de um vetor –Leitura de dados de um vetor 2 Estruturas de programação real px; real py; 3 Como representar o ponto p? x y p E se eu precisar representar vários pontos? real px1, py1; real px2, py2; real px3, py3; Não seria melhor se eu pudesse agrupar ou relacionar estes valores? estrutura { inteiro X; inteiro Y; } ponto; ponto p1, p2, p3; Estruturas de programação • Como representar uma pessoa? literal nome inteiro idade literal sexo literal endereço inteiro telefone inteiro cpf inteiro rg 4 estrutura { literal nome inteiro idade literal sexo literal endereço inteiro telefone inteiro cpf inteiro rg } Pessoa Estruturas Homogêneas e Heterogêneas 5 estrutura { inteiro X inteiro Y } ponto estrutura { literal nome inteiro idade literal sexo literal endereço inteiro telefone inteiro cpf inteiro rg } Pessoa Homogênea Heterogênea Tipo String • Utilizado par a manipular literais. • Estrutura homogênea de char. 6 “Este é um exemplo de uma String” nome M a r i a \0 0 1 2 3 4 5 Vetor de tamanho 6 Matriz 7 Matriz Unidimensional - VETOR • Arranjo homogêneo de dados. • Tamanho finito definido em sua criação. • Posições numeradas de 0 a n-1. • A variável corresponde ao primeiro endereço da memória ou endereço base. 8 0 1 2 3 .. .. n-2 n-1 Endereço Base + Posição * Tamanho do Tipo Matriz Unidimensional - VETOR 9 0 1 2 3 .. .. n-2 n-1 Endereço Base + Posição * Tamanho do Tipo 1200Endereço Base 1200 + 2 * 4 1208 Vetor Declaração Linguagem UAL Linguagem C++ tipo nomeDoVetor[tamanhoDoVetor]; tipo nomeDoVetor[tamanhoDoVetor]; 10 Linguagem UAL Linguagem C++ /* Vetor para guardar 10 notas */ Int notas[10]; Int notas[10]; /* Vetor para guardar o sexo de 50 pessoas */ string sexo[50]; char sexo[50]; /* Vetor para armazenar o valor do salario de 100 funcionários */ real salario [100]; float salario[100]; /* Vetor para armazenar 1 nome com 30 caracteres */ string nome; char nome[30]; Vetor Inclusão de Dados Linguagem UAL tipo nomeDoVetor[tamanhoDoVetor] = { dado1, dado2, ..., dadotamanhoDoVetor} Linguagem C++ tipo nomeDoVetor[tamanhoDoVetor] = { dado1, dado2, ..., dadotamanhoDoVetor } 11 Linguagem UAL Linguagem C++ /* Inicializar um vetor notas de tamanho 3 com os valores 5, 8 e 10 */ Int notas[] = {5, 8, 10}; Int notas[] = {5, 8, 10}; /* Inicializar um vetor com sexo de 5 pessoas com os valores M,M,F,M,F */ string sexo[] = {‘M’, ‘M’, ‘F’, ‘M’, ‘F’ }; string sexo[] = {‘M’, ‘M’, ‘F’, ‘M’, ‘F’ }; /* Inicializar um vetor nota de tamanho 3 com os valores reais 5.3, 8.5 e 10.1 */ real vreais [3] = {5.3, 8.5, 10.1}; float vreais[3] = {5.3, 8.5, 10.1}; /* Inicializar uma variável para armazenar 1 nome o valor “Joao“ */ string nome = “Joao“; char nome[5] = “Joao”; Vetor Inclusão de dados Linguagem UAL Linguagem C++ nomeDoVetor[posição] = valor; nomeDoVetor[posição] = valor; 12 Linguagem UAL Linguagem C++ /* Atribuir o valor 20 para a posição 2 do vetor notas */ notas[1] = 20; notas[2] = 20; /* Atribuir o valor F na primeira posição do vetor */ sexo[0] = ‘F’; sexo[0] = ‘F’; /* Atribuir o valor 12,23 na posição 3 do vetor vreais */ vreais [2] = 12.12; vreais [2] = 12.12; /* Trocar o a por ã do vetor nome nome que possui o valor “Joao” */ nome = “João“; nome[2] = ‘ã’; Vetor Inclusão de dados Linguagem UAL Linguagem C++ int vetor[8]; imprima "\nDigite 1o elemento: "; leia vetor[0]; imprima "\nDigite 2o elemento: "; leia vetor[1]; imprima "\nDigite 3o elemento: "; leia vetor[2]; imprima "\nDigite 4o elemento: "; leia vetor[3]; imprima "\nDigite 5o elemento: "; leia vetor[4]; imprima "\nDigite 6o elemento: "; leia vetor[5]; imprima "\nDigite 7o elemento: "; leia vetor[6]; imprima "\nDigite 8o elemento: "; leia vetor[7]; Int vetor[8] cout<<"\nDigite 1o elemento: "; cin>>vetor[0]; cout<<"\nDigite 2o elemento: "; cin>>vetor[1]; cout<<"\nDigite 3o elemento: "; cin>>vetor[2]; cout<<"\nDigite 4o elemento: "; cin>>vetor[3]; cout<<"\nDigite 5o elemento: "; cin>>vetor[4]; cout<<"\nDigite 6o elemento: "; cin>>vetor[5]; cout<<"\nDigite 7o elemento: "; cin>>vetor[6]; cout<<"\nDigite 8o elemento: "; cin>>vetor[7]; 13 Linguagem UAL Linguagem C++ para (n<-0; n<7;n++) { imprima "\nDigite “, n+1, “o elemento: "; leia vetor[n]; } for(int n = 0; n<7; n++) { cout<<"\nDigite “ <<n+1 <<”o elemento: "; cin>>vetor[n]; } Vetor Leitura de dados Linguagem UAL Linguagem C++ /* IMPRESSÃO COMO COLUNA */ imprima “\nTítulo\n”; para (n<-0; n<tamanho;n++) { imprima “\n”, nomeDoVetor[n]; } cout << “\nTítulo\n”; for(int n = 0; n<tamanho; n++) { cout<<”\n...”<<nomeDoVetor[n]; } /* IMPRESSÃO COMO LINHA */ imprima “\nTítulo\n”; para (n<-0; n<tamanho;n++) { imprima nomeDoVetor[n], “\t: “; } cout << “\nTítulo\n”; for(int n = 0; n<tamanho; n++) { cout<<nomeDoVetor[n] << “\t: “; } 14 Endereços e valores de um vetor 15 #include <iostream> using namespace std; int main() { int idades[10]; idades[0] = 22; cout << “\nEndereço do vetor - ” << idades; cout << “\nEndereço do primeiro elemento - ” << &idades[0]; cout << “\nConteúdo do primeiro elemento - ” << idades[0]; } C++ → & retorna endereço Algoritmos Mairum Ceoldo Andrade Atividade 9 17 Problema Construa um programa que leia e armazene 5 produtos e seus valores de compra e venda. Imprimir todos os dados em tela. Resolução 18 Algoritmos Mairum Ceoldo Andrade Aula 10 Conteúdo • Matriz bidimensional – Conceito de matriz – Declaração de uma matriz – Inclusão de dados em uma matriz – Leitura de dados de uma matriz 2 Matriz Quero fazer um programa para controlar a notas dos alunos, preciso registrar quatro notas diferentes mais a frequência, tenho ao todo 60 alunos! 3 Vetor Notas 1 A1 A2 A3 A4 ..... A59 A60 Vetor Notas 2 A1 A2 A3 A4 ..... A59 A60 Vetor Notas 3 A1 A2 A3 A4 ..... A59 A60 Vetor Notas 4 A1 A2 A3 A4 ..... A59 A60 Vetor Faltas A1 A2 A3 A4 ..... A59 A60 • 5 vetores? • Será que é a melhor opção? • Como faríamos em papel? 4 Aluno1 Aluno2 Aulno3 Aluno4 Aluno60 Nota 1 V1 V2 V3 V4 ..... V60 Nota 2 V1 V2 V3 V4 ..... V60 Nota 3 V1 V2 V3 V4 ..... V60 Nota 4 V1 V2 V3 V4 ..... V60 Faltas V1 V2 V3 V4 ..... V60 Matriz Matriz Declaração 5 Exemplos de uso /* declara uma matriz para guardar 3 informações diferente de 300 paciente */ float pacientes[300] [3]; /* declara uma matriz de 4 notas para 100 alunos */ float notas[100] [4]; /* Declara uma matriz para guardar 1000 nomes de até 30 caracteres */ char nome[1000] [31]; Linguagem C++ tipo nomeDaMatriz[tamanahoD1] [tamanahoD2] ; A lu n o 1 A lu n o 2 A lu n o 3 A lu n o 4 A lu n o 5 A lu n o 6 A lu n o 7 A lu n o 8 Nota 1 Nota 2 Nota 3 Nota 4 6 Aluno1 Aluno2 Aulno3 Aluno4 Aluno60 Nota 1 V1 V2 V3 V4 ..... V60 Nota 2 V1 V2 V3 V4 ..... V60 Nota 3 V1 V2 V3 V4 ..... V60 Nota 4 V1 V2 V3 V4 ..... V60 Faltas V1 V2 V3 V4 ..... V60 float notas[4] [8]; float notas[8] [4]; Qual correto? Matriz Matriz Representação em Memória 7 Endereço-base + num_colunas_matriz * deslocamento_linha * tamanho_tipo + deslocamento_coluna * tamanho_tipo Endereço Base: 1200 Posição mat[1][1] 1200 + 2*1*4 + 1*4 = 1212 Matriz Inicialização 8 Linguagem C++ /* Inicializa um matriz de 3 linhas e 4 colunas */ int matrx [3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; /* Inicializa uma matriz com 3 nomes de até 10 caracteres */ charstr_vect [3][11] = {"Joao", "Maria", "Jose"}; /* Inicializa uma matriz de 5 linhas e 2 colunas */ int matrx [][2] = {1,2,2,4,3,6,4,8,5,10}; Linguagem C++ tipo nomeDaMatriz[tamanahoD1] [tamanahoD2] = { dado1, dado2, ..., dadotamanhoD1xD2}; Matriz Inclusão de dados 9 Linguagem C++ /* atribuir o valor 13 à primeira posição da primeira linha */ matrx [0][0] = 13; /* Atribuir o caracter ‘P’ a primeira posição da linha terceira linha */ char str_vect [2][0] = ‘P’; /* Atribuir o valor 11 a segunda coluna da segunda linha */ int matrx [1][1] = 11; Linguagem C++ tipo nomeDaMatriz[posiçãoLinha] [posiçãoColuna] = ValorDesejado; Matriz Inclusão de dados 10 Linguagem C++ for(int L = 0; L<tamanhoLinha; L++) { cout<<"\nLinha número “ <<L+1 <<”: "; cin.getline(nomeMatriz[L], tamanhoDeclardoNaColuna); } Linguagem C++ for(int L = 0; L<tamanhoLinha; L++) { for(int C = 0; C<tamanhoColuna; C++) { cout<<"\nLinha “ <<L+1 <<” coluna "<<C+1<<”:; cin>>nomeMatriz[L] [C]; } } Matriz genérica Matriz char Matriz Leitura de dados 11 Linguagem C++ /* IMPRESSÃO COMO COLUNA */ cout << “\nTítulo\n”; for(int L = 0; L<tamanhoLinha; L++) { for(int C = 0; C<tamanhoColuna; C++) { cout<< nomeMatriz[L] [C]; } cout<<”\n”; } /* IMPRESSÃO COMO LINHA */ cout << “\nTítulo\n”; for(int L = 0; L<tamanhoLinha; L++) { cout<< nomeMatrizChar[L] <<”\n”; } Cinco produtos e seus valores de compra e venda 12 C++ Algoritmos Mairum Ceoldo Andrade Atividade 10 14 2) Se for uma matriz tridimensional, terá três pares de colchetes? 1) Só existem matrizes Unidimensionais e Bidimensionais? R: Não R: Sim 15 3) Na entrada e na saída, a matriz Bidimensional de char é tratada como Unidimensional já que usamos uma par de colchetes. Quando faremos uso dos dois pares de colchetes? 16 R: Quando precisarmos buscar um único carácter. Exemplos: 1) Converter para maiúscula uma letra minúscula ou vice-versa; 2) Contar vogais de uma frase; 3) Criptografar uma mensagem; 4) Inverter a frase para saber se é palíndromo. Aula_01 Aula_02 Aula_03 Aula_04 Aula_05 Aula_06 Aula_07 Aula_08 Aula_09 Aula_10
Compartilhar