Aula 7 - Mais problemas com inteiros

Documentos relacionados
Vejamos agora mais alguns exemplos de problemas envolvendo seqüência de números.

ESTRUTURAS DE REPETIÇÃO - PARTE 2

Aula 5 - Mais C e repetição

Algoritmos e Lógica de Programação. 6ª Lista de Exercícios Comandos de Repetição

MC102 Algoritmos e Programação de Computadores

Aula 10 Comandos de Repetição For e Do While

Aula 11 - Repetições Encaixadas

D 7 C 4 U 5. MATEMÁTICA Revisão Geral Aula 1 - Parte 1. Professor Me. Álvaro Emílio Leite. Valor posicional dos números. milésimos décimos.

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Aula 14: Repetição (Parte 2)

Definição. Diremos que um número inteiro d é um divisor de outro inteiro a, se a é múltiplo de d; ou seja, se a = d c, para algum inteiro c.

Roteiro da segunda aula presencial - ME

MC-102 Aula 08 Comandos Repetitivos

Exemplos: Os números 12, 18 e 30 têm conjuntos de divisores respectivamente iguais a:

Aula 15 Variáveis Indexadas (vetores)

MATEMÁTICA 1 MÓDULO 2. Divisibilidade. Professor Matheus Secco

Prova 1 QUESTÃO 1. (1) nusp % 3 == 1. MAC2166 Introdução à Computação para a Engenharia. # include <stdio.h>

Aula 4 Introdução ao C

Estruturas de Repetição

Números Primos, Fatores Primos, MDC e MMC

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Portal da OBMEP. Material Teórico - Módulo de Divisibilidade. MDC e MMC - Parte 1. Sexto Ano

Expressões lógicas, expressões condicionais, prioridades e operadores, base binária, operadores de bits

MC-102 Aula 07 Comandos Repetitivos

a) Defina uma função para obter o máximo entre dois números

MATEMÁTICA ELEMENTAR MMC E MDC. Proª Joanny Fernandes

Estruturas Condicionais

Colégio Militar do Rio de Janeiro Concurso de Admissão à 5 série (6 ano) 2005/2006 Prova de Matemática 22 de Outubro de 2005.

Fundamentos de Programação Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte 15 de maio de 2018.

Programação de Computadores I BCC701 Aula Teórica 08 Exercícios

Programação Estruturada

PCI- Estrutura de Repetição II. Profa. Mercedes Gonzales Márquez

Algoritmos. Estrutura de decisão simples. if end. Grupos de Slides No 2. Prof. SIMÃO

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano.

Primos... Determinar se um inteiro é primo. 1. Um número é primo se apenas é divisível por ele próprio e por 1.

Exercícios de Linguagem C

BAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores

ALGORITMOS E LÓGICA DE PROGRAMAÇÃO PRÉ AULA PRÉ AULA 31/08/2015

Exercícios Repetição

ESTRUTURAS DE REPETIÇÃO - PARTE 1

Introdução a Linguagem C (Parte I) UFPA Sistemas de Informação. Roberto Araujo 2013

Critérios de divisibilidade Para alguns números como o dois, o três, o cinco e outros, existem regras que permitem verificar a divisibilidade sem se

Comandos de Repetição

Universidade Federal de Sergipe - Campus Alberto Carvalho. Lista 4 - WHILE / REPEAT UNTIL

Elementos de Matemática Finita

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

MATEMÁTICA. Aula 4. Professor : Dêner Rocha. Monster Concursos 1

MATEMÁTICA MÓDULO 1 TEORIA DOS NÚMEROS 1. DIVISIBILIDADE 1.1. DEFINIÇÃO 1.2. CRITÉRIOS DE DIVISIBILIDADE

Programação de Computadores I

1ª Lista de Exercícios

1) Operadores de auto incremento ++ e auto decremento --

Lógica de Programação I

Puca Huachi Vaz Penna / José Américo T. Messias

Lista de Exercícios - Multiplicação

Recursividade. Estrutura de Dados. Prof. Kleber Rezende

Sistemas Numéricos - Aritmética. Conversão de Bases. Prof. Celso Candido ADS / REDES / ENGENHARIA

Algoritmos. Estrutura de Repetição. enquanto. while. Grupos de Slides No 5. Prof. SIMÃO

Módulo Divisibilidade. Conjunto e Quantidade de Divisores. 6 ano E.F. Professores Cleber Assis e Tiago Miranda

INF 1005 Programação I

Apontamentos de matemática 6.º ano Decomposição de um número em fatores primos

Roteiro da aula. MA091 Matemática básica. Simplificação por divisões sucessivas. Divisores. Aula 4 Divisores e múltiplos. MDC. Operações com frações

Algoritmos: Conceitos Fundamentais. Slides de autoria de Rosely Sanches e Simone Senger de Souza

CCO 016 / COM 110 Fundamentos de Programação

Programação de Computadores

SISTEMA DECIMAL. No sistema decimal o símbolo 0 (zero) posicionado à direita implica em multiplicar a grandeza pela base, ou seja, por 10 (dez).

Conversão de Bases. Introdução à Organização de Computadores 5ª Edição/2007 Página 54. Sistemas Numéricos - Aritmética. Prof.

a) Falsa. Por exemplo, para n = 2, temos 3n = 3 2 = 6, ou seja, um número par.

NÚMEROS RACIONAIS. operações

INFORMÁTICA PARA ENGENHARIA INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO PARTE II

Matéria: Matemática Assunto: Teoria dos Conjuntos Prof. Dudan

Agente + Escrivão de Polícia

Exercício 5. Encontre o valor de

Algoritmos e Programação

imprimir seus quadrados.

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano.

i a[i]

UNIVERSIDADE ESTADUAL DO CEARÁ UECE UNIVERSIDADE ABERTA DO BRASIL UAB LICENCIATURA EM COMPUTAÇÃO PCC- Ambiente Virtuais de Aprendizagem

Simulado da Prova Parcial 2 (01/08/2013)

Complexidade de Algoritmos

Vetores são estruturas indexadas utilizadas para armazenar dados de um mesmo tipo: int, char, float ou double. Oexemploaseguirédeumvetordeinteiros:

EXERCÍCIOS DE ESTRUTURA DE REPETIÇÃO - LABORATÓRIO

Resoluções das atividades

Técnico em Eletrônica Módulo I Eletrônica Digital (ED) - Prof. Samuel M. B. Cavalcante

Este texto contém algumas dicas de programação para resolução de exercícios do curso de Introdução à Programação.

Matemática para Ciência de Computadores

Programação II. Victor Amorim dos Santos

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Exercícios: Comandos de Repetição

4.1- Aritméticos + soma - subtração * multiplicação / divisão % módulo (resto da divisão de inteiros ).

Apontamentos de Matemática 6.º ano

Oficina de Introdução de Programação usando Linguagem Python Prof. Ms. Perini

NÚMEROS RACIONAIS OPERAÇÕES

INFORMÁTICA PARA ENGENHARIA INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO PARTE II

Mat.Semana 4. PC Sampaio Alex Amaral Gabriel Ritter (Rodrigo Molinari)

Oficina de Python Prof. Me. José Carlos Perini

Repetição com contador. DO varcontrole = valorinicial, valorfinal, [passo] instruções END DO

Transcrição:

Aula 7 - Mais problemas com inteiros Já vimos nas aulas anteriores alguns detalhes de operações com inteiros. a) A divisão é inteira e o resultado é truncado b) Existe o operador % (resto da divisão) c) Cuidado com o resto quando o dividendo e/ou o divisor são negativos Vamos agora a alguns problemas usando valores inteiros. P21) Dado N (0 N 9999 N tem até quatro dígitos), imprimir cada um dos dígitos de N na ordem unidade, dezena, centena e milhar. int N, unidade, dezena, centena, milhar; if (N < 0) { printf( valor de N invalido ); if (N > 9999) { printf( valor de N invalido ); /* calcular os dígitos da unidade, dezena, centena e milhar */ unidade = N % 10; N = N / 10; dezena = N % 10; N = N / 10; centena = N % 10; milhar = N / 10; printf( unidade:%10d\ndezena:%10d\ncentena:%10d\nmilhar:%10d\n, unidade, dezena, centena, milhar); Agora, vamos resolver o mesmo problema com N 0 qualquer, imprimindo cada um dos dígitos na mesma ordem. Podemos fazer isso, da mesma forma anterior, dividindo N por 10 e pegando o resto da divisão por 10. P22) Dado N 0, imprimir os dígitos de N na ordem unidade, dezena, centena, etc. int N, digito;

while (N < 0) { /* separar os dígitos */ while (N > 0) { digito = N%10; printf("\n%d", digito); N = N/10; P23) O problema da máquina de sacar dinheiro. Dado N 0 (N é um valor em R$) determinar quantas notas de 100, 50, 20, 10, 5 2 e 1 são necessárias para compor N. P23a) Dados N >0 e d (0<d<9), verificar quantas vezes o dígito d ocorre em N. Basta usar a solução acima para separar cada dígito de N e compará-lo com d. P24) (Esse só dá para resolver quando falarmos do tipo float ou double). Dado um valor em reais V (com duas casas decimais, os centavos), além das notas de 100, 50, 20, 10, 5 2 e 1, determinar quantas moedas de 0,50 0,25 0,10 0,05 e 0,01 serão necessárias para compor N. Sugestão: basta multiplicar V por 100 e colocar numa variável inteira. Cálculo do dígito de redundância Em casos como, número de contas bancárias, número da identidade, número do CPF, etc., existe o conceito do dígito de redundância para garantir que sempre que este número for digitado, não haja nenhum erro de digitação. Esse dígito de redundância ou de conferência é uma função dos demais de tal forma que se houver algum erro na digitação o programa que recebe esses dados pode acusar e solicitar nova digitação. Esses códigos não são perfeitos, mas resolvem a maior parte dos casos. Exemplo: O seu NUSP é constituído por 7 dígitos: d1 d2 d3 d4 d5 d6 d7. Suponha que d7 é o dígito de redundância e que d7 deve ser igual a (d1*9 + d2*7 +d3*5 + d4*3 + d5*2 + d6*1) módulo 10. P24a) Dado NUSP verifique se segue a regra acima, isto é, tem 7 dígitos e o d7 segue a regra acima. O CPF possui 9 dígitos mais 2 de redundância. Supondo que os dois últimos dígitos sejam o resultado da seguinte fórmula: (d1*1 + d2*2 +... + d9*9) módulo 100. P24b) Dado um CPF verifique se segue a regra acima. P25) Dados N, M > 0 calcular o Mínimo Múltiplo Comum entre N e M. Sugestão: usando a definição, o MMC deve ser múltiplo de N e M. Portanto basta verificar qual o menor múltiplo de N (1.N, 2.N, 3.N, etc.) que também seja múltiplo de M.

int N, M, mmc; while (N <= 0) { /* leitura de M */ printf( entre com o valor de M: ); /* consistência de M */ /* esperar até que o usuário digite M correto */ while (M <= 0) { /* nova leitura de M */ printf( \nvalor de M invalido\nentre com o valor de M: ); /* testar os múltiplos de N */ mmc = N; while (mmc % M!= 0) mmc = mmc + N; /* mostra o resultado */ printf( \nmmc entre %d e %d:%d,n, M, mmc); Nesta solução, se N for menor que M faremos algumas comparações desnecessárias. Para evitar isso podemos escolher o maior e o menor entre N e M e testar somente os múltiplos do maior. P25a) Dados N, M > 0 calcular o Mínimo Múltiplo Comum entre N e M, com a adaptação acima, ou seja, testar apenas com os múltiplos do maior. Outra solução mais clássica para este problema é usar a decomposição de N e M em seus fatores primos. Ocorre que para isso seria necessário saber quais são os primos menores que N e M. P27) Dados N e M > 0 calcular o Máximo Divisor Comum entre N e M. Vamos usar o algoritmo de Euclides. Exemplo mdc (30,18): 1 1 2 30 18 12 6 12 6 0

Divide-se continuamente o primeiro pelo segundo, em seguida este pelo resto da divisão, até que o resto fique zero. O mdc é o último divisor. int N, M, dividendo, divisor, resto; while (N <= 0) { /* leitura de M */ printf( entre com o valor de M: ); /* consistência de M */ /* esperar até que o usuário digite M correto */ while (M <= 0) { /* nova leitura de M */ printf( \nvalor de M invalido\nentre com o valor de M: ); /* inicia o processo de divisão sucessiva */ dividendo = N; divisor = M; resto = dividendo % divisor; /* divisões sucessivas */ while (resto!= 0) { dividendo = divisor; divisor = resto; resto = dividendo % divisor; /* mostra o resultado */ printf( \nmdc entre %d e %d:%d\n, N, M, divisor); Neste caso, será que N tem que ser menor que M? O que acontece se N for maior que M? MDC outra solução Outra solução para este problema é usar a definição de MDC. Seja N o maior e M o menor. Se não for, basta trocá-los.

O primeiro candidato a MDC é M, pois M pode ser divisor de N. Os demais candidatos são M-1, M-2, M-3, etc. Portanto basta ir testando até encontrar um divisor de N. No pior caso que ocorre quando N e M são primos entre si, vamos chegar a 1como MDC. Este algoritmo é claramente pior que o algoritmo de Euclides. P27a) Dados N e M > 0 calcular o Máximo Divisor Comum entre N e M, usando o algoritmo acima. Este problema é melhor resolvido com condições compostas mas dá para resolvê-lo com o que sabemos até agora. P27b) Dados N >0 verificar se N é palíndrome. Um número é palíndrome quando é o mesmo lido da direita para a esquerda ou da esquerda para a direita. Ou seja, o primeiro algarismo é igual ao último, o segundo igual ao penúltimo e assim por diante. Exemplos: 55, 1331, 2002, 14741, 4658564.