mc-102 aula 07 comandos repetitivoseduardo/2020_s2_mc102/aula07.pdfmenu de escolhas o programa terá...

31

Upload: others

Post on 27-Feb-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

MC-102 � Aula 07

Comandos Repetitivos

Eduardo C. Xavier

Instituto de Computação � Unicamp

7 de Outubro de 2020

Page 2: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Roteiro

1 Exemplos com laçosMenu de EscolhasRepresentação Binário-DecimalRepresentação Decimal-Binário

2 Laços EncaixadosEquações Lineares Inteiras

3 Exercícios

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 2 / 31

Page 3: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Menu de Escolhas

Em programas de computador, é comum a apresentação de um menude opções para o usuário.

Vamos fazer um menu com algumas opções, incluindo uma últimapara encerrar o programa.

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 3 / 31

Page 4: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Menu de Escolhas

O programa terá as seguintes opções:

1 - Cadastrar um produto.

2 - Buscar informações de produto.

3 - Remover um produto.

4 - Sair do Programa.

Após realizar uma das operações, o programa volta para o menu.

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 4 / 31

Page 5: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Menu de Escolhas

O comportamento do seu programa deveria ser algo como:

opcao = ' 5 'wh i l e opcao != ' 4 ' :

p r i n t ( "1 − Cada s t r a r um produto " )p r i n t ( "2 − Buscar i n f o rmaçõe s de produto " )p r i n t ( "3 − Remover um produto " )p r i n t ( "4 − S a i r do programa" )

opcao = inpu t ( " Ent re com a opção : " )

#Faça o que f o r e spe rado conforme opção d i g i t a d a

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 5 / 31

Page 6: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Menu de Escolhas

opcao = ' 5 'wh i l e opcao != ' 4 ' :

p r i n t ( "1 − Cada s t r a r um produto " )p r i n t ( "2 − Buscar i n f o rmaçõe s de produto " )p r i n t ( "3 − Remover um produto " )p r i n t ( "4 − S a i r do programa" )

opcao = inpu t ( " Ent re com a opção : " )i f ( opcao == ' 1 ' ) :

p r i n t ( " Cadast rando . . . . " )e l i f ( opcao == ' 2 ' ) :

p r i n t ( "Buscando . . . . " )e l i f ( opcao == ' 3 ' ) :

p r i n t ( "Removendo . . . . " )e l i f ( opcao == ' 4 ' ) :

p r i n t ( "Seu programa s e r á enc e r r ado . " )e l s e :

p r i n t ( "Opção i n v á l i d a ! " )

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 6 / 31

Page 7: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Binário-Decimal

Já sabemos que um computador armazena todas as informações narepresentação binária.

É útil saber como converter valores binário em decimal e vice versa.

Dado um número em binário bnbn−1 . . . b2b1b0, este corresponde naforma decimal à:

n∑i=0

bi · 2i

Exemplos:101 = 22 + 20 = 5

1001110100 = 29 + 26 + 25 + 24 + 22 = 512+ 64+ 32+ 16+ 4 = 628

OBS: Em uma palavra no computador um bit é usado para indicar osinal do número: − ou +.

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 7 / 31

Page 8: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Binário-Decimal

Seja o número 10101 em binário.

Qual o seu valor em decimal?

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 8 / 31

Page 9: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Binário-Decimal

Seja o número 10101 em binário.

Qual o seu valor em decimal?

Resposta: 21 = 24 + 22 + 20

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 9 / 31

Page 10: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Binário-Decimal

Vamos supor que lemos do teclado um inteiro em binário.

Ou seja, ao lermos n = 111 assumimos que este é um número binário(e não cento e onze).

Como transformar este número no correspondente valor decimal (7neste caso)??

Basta usarmos a expressão:

n∑i=0

bi · 2i

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 10 / 31

Page 11: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Binário-Decimal

Um passo importante é conseguir recuperar os dígitos individuais donúmero:

Note que n%10 recupera o último dígito de n.

Note que n//10 remove o último dígito de n, pois ocorre a divisãointeira por 10.

Exemplo: Com n = 345, ao fazermos n%10 obtemos 5. E ao fazermosn//10 obtemos 34.

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 11 / 31

Page 12: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Binário-Decimal

Para obter cada um dos dígitos de um número n podemos fazer algocomo:

Le i a nEnquanto n != 0 f a ça

d i g i t o = n%10Imprima o d i g i t on = n//10

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 12 / 31

Page 13: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Binário-Decimal

O programa abaixo imprime cada um dos dígitos de n separadamente:

n = i n t ( i n pu t ( " D i g i t e um número : " ) )wh i l e n != 0 :

d i g i t o = n%10p r i n t ( d i g i t o )n = n//10

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 13 / 31

Page 14: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Binário-Decimal

Usar a fórmula∑

n

i=0 bi · 2i , para transformar um número em bináriopara decimal.Devemos gerar as potências 20, . . . , 2n, e multiplicar cada potência 2i

pelo i-ésimo dígito.I Calcular as potência já sabemos (acumuladora pot ).

Para armazenar a soma∑

n

i=0 bi · 2i usamos uma outra variávelacumuladora soma.

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 14 / 31

Page 15: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Binário-Decimal

Le i a npot = 1soma = 0Enquanto n != 0 f a ça

d i g i t o = n%10n = n//10soma = soma + ( pot ∗ d i g i t o )pot = pot ∗ 2

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 15 / 31

Page 16: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Binário-Decimal

Em Python:

n = i n t ( i n pu t ( " D i g i t e um número : " ) )soma = 0pot = 1wh i l e n != 0 :

d i g i t o = n%10soma = soma + ( pot ∗ d i g i t o )pot = pot ∗2n = n//10

p r i n t ( " Va lo r em dec ima l é : " , soma )

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 16 / 31

Page 17: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Decimal-Binário

Dado um número em decimal, vamos obter o correspondente em binário.

Qualquer decimal pode ser escrito como uma soma de potências de 2:

5 = 22 + 20

13 = 23 + 22 + 20

Nesta soma, para cada potência 2i , sabemos que na representação embinário haverá um 1 no dígito i . Exemplo: 13 = 1101

O que acontece se �zermos sucessivas divisões por 2 de um número decimal?

13//2 = 6 com resto 1

6//2 = 3 com resto 0

3//2 = 1 com resto 1

1//2 = 0 com resto 1

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 17 / 31

Page 18: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Decimal-Binário

Dado n em decimal, fazemos repetidas divisões por 2, obtendo os dígitos dovalor em binário:

13//2 = 6 com resto 1

6//2 = 3 com resto 0

3//2 = 1 com resto 1

1//2 = 0 com resto 1

Le i a nEnquanto n != 0 f a ça

d i g i t o = n%2Imprima d i g i t on = n//2

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 18 / 31

Page 19: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Representação Decimal-Binário

Em Python:

n = i n t ( i n pu t ( " D i g i t e um número : " ) )wh i l e n != 0 :

d i g i t o = n%2n = n//2p r i n t ( d i g i t o )

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 19 / 31

Page 20: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Laços Encaixados

Para resolver alguns problemas, é necessário implementar um laçodentro de outro laço.Estes são conhecidos como laços encaixados.

f o r i i n range ( 1 , 5 ) :f o r j i n range ( 1 , 4 ) :

p r i n t ( i , j )

O que será impresso por este programa?

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 20 / 31

Page 21: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Laços Encaixados

f o r i i n range ( 1 , 5 ) :f o r j i n range ( 1 , 4 ) :

p r i n t ( i , j )

Fixado um valor para i no primeiro laço for, começa-se o segundo laçofor, que varia o valor de j entre 1 e 3.

No �nal deste segundo laço for voltamos para o primeiro laço onde avariável i assumirá seu próximo valor. Fixado este valor de i começa-senovamente o segundo laço for.

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 21 / 31

Page 22: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Laços Encaixados

f o r i i n range ( 1 , 5 ) :f o r j i n range ( 1 , 4 ) :

p r i n t ( i , j )

Será impresso:

1 11 21 32 12 22 3. . .4 14 24 3

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 22 / 31

Page 23: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Laços Encaixados: Equações Lineares Inteiras

Um uso comum de laços encaixados ocorre quando para cada um dosvalores de uma determinada variável, precisamos gerar/checar algosobre os valores de outras variáveis.

Problema

Determinar todas as soluções inteiras de um sistema linear como:

x1 + x2 = C

com x1 ≥ 0, x2 ≥ 0, C ≥ 0 e todos inteiros.

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 23 / 31

Page 24: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Laços Encaixados: Equações Lineares Inteiras

Problema

Determinar todas as soluções inteiras de um sistema linear como:

x1 + x2 = C

com x1 ≥ 0, x2 ≥ 0, C ≥ 0 e todos inteiros.

Uma solução: para cada um dos valores de 0 ≤ x1 ≤ C , teste todos osvalores de x2 possíveis e veri�que quais deles são soluções.

Para cada x1 e n t r e 0 e C f a çaPara cada x2 e n t r e 0 e C f a ça

Se x1 + x2 = C então imprima so l u ç ão

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 24 / 31

Page 25: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Laços Encaixados: Equações Lineares Inteiras

Em Python:

C = i n t ( i n pu t ( ' Va lo r de C : ' ) )

f o r x1 i n range (0 ,C+1):f o r x2 i n range (0 , C+1):

i f x1 + x2 == C:p r i n t ( '%d + %d = %d ' %(x1 , x2 , C) )

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 25 / 31

Page 26: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Laços Encaixados: Equações Lineares Inteiras

OBS: Note que �xado x1, não precisamos testar todos os valores de x2, pois esteé determinado como x2 = C − x1.

C = i n t ( i n pu t ( " D i g i t e o v a l o r da con s t an t e C : " ) )f o r x1 i n range (C+1):

x2 = C − x1p r i n t ( x1 , " + " , x2 , " = " , C)

Mas em um caso geral com n variáveis,

x1 + x2 + . . .+ xn = C

será preciso �xar (n − 1) variáveis para só então determinar o valor de xn.

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 26 / 31

Page 27: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Laços Encaixados: Equações Lineares Inteiras

Problema

Quais são as soluções de x1 + x2 + x3 = C com x1 ≥ 0, x2 ≥ 0, x3 ≥ 0 ,C ≥ 0 e todas inteiras?

Uma solução: para cada um dos valores de 0 ≤ x1 ≤ C , teste todos osvalores de x2 e x3 e veri�que quais deles são soluções.

Para cada x1 e n t r e 0 e C f a çaPara cada x2 e n t r e 0 e C f a ça

Para cada x3 e n t r e 0 e C f a çaSe x1 + x2 + x3 = C então imprima so l u ç ão

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 27 / 31

Page 28: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Laços Encaixados: Equações Lineares Inteiras

Em Python:

C = i n t ( i n pu t ( ' D i g i t e o v a l o r de C : ' ) )

f o r x1 i n range (C+1):f o r x2 i n range (C+1):

f o r x3 i n range (C+1):i f x1 + x2 + x3 == C:

p r i n t ( x1 , '+ ' , x2 , '+ ' , x3 , '= ' ,C)

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 28 / 31

Page 29: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Laços Encaixados: Equações Lineares Inteiras

Note que �xado x1, o valor máximo de x2 é C − x1.

Fixados x1 e x2, o valor de x3 é determinado como C − x1 − x2.

Podemos alterar o programa com estas melhorias:

C = i n t ( i n pu t ( ' D i g i t e o v a l o r de C : ' ) )

f o r x1 i n range (C+1):f o r x2 i n range (C+1−x1 ) :

x3 = C−x1−x2p r i n t ( x1 , '+ ' , x2 , '+ ' , x3 , '= ' ,C)

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 29 / 31

Page 30: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Exercício

Na transformação decimal para binário, modi�que o programa paraque este obtenha o valor binário em uma variável inteira, ao invés deimprimir os dígitos um por linha na tela.

Dica: Suponha n = 7 (111 em binário), e você já computou x = 11,para "inserir"o último dígito 1 em x você deve fazer x = x + 100. Ouseja, você precisa de uma variável acumuladora que armazena aspotências de 10: 1, 10, 100, 1000 etc.

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 30 / 31

Page 31: MC-102 Aula 07 Comandos Repetitivoseduardo/2020_S2_mc102/aula07.pdfMenu de Escolhas O programa terá as seguintes opções: 1 - Cadastrar um produto. 2 - Buscar informações de produto

Exercício

Implemente um programa que compute todas as soluções de equaçõesdo tipo

x1 + x2 + x3 + x4 = C

Melhore o seu programa com as seguinte idéias.I Fixado x1, os valores possíveis para x2 são 0, . . . ,C − x1. Fixado x1 e

x2, os valores possíveis para x3 são 0, . . . ,C − x1 − x2. Fixados x1, x2,e x3, então x4 é unicamente determinado.

Eduardo C. Xavier (Instituto de Computação � Unicamp)MC-102 � Aula 07 7 de Outubro de 2020 31 / 31