I Semana de Software Livre da USP Dojo C



Documentos relacionados
Universidade Federal de Rondônia Técnicas de Desenvolvimento de Programas Lista 4

428 Capítulo 7 Arrays. do { ExibeArrayInts(ar, n); /* Exibe a configuração */ /* corrente do array */ } while (ProximaPermutacao(ar, n));

Estrutura Condicional C++

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

A linguagem C oferece quatro estruturas de decisão: if, if-else, switch e o operador condicional.

Algoritmo Iterativo. Dilema do Martelo x Edifício. O Martelo. O Edifício 01/06/2014. Dilema das ações x declarações

ISBN Apresentação

9 Comandos condicionais

7. Estrutura de Decisão

Programação: Estruturas de seleção

VII MARATONA DE PROGRAMAÇÃO UERJ 17/05/2014. Este caderno contém 12 páginas com a descrição de 10 problemas 1 definidos a seguir:

Trabalho 7 Fila de prioridade usando heap para simulação de atendimento

Programas Interativos: Valores Aleatórios

Sistemas de Apoio à Decisão

Programação científica C++

O comando if. O comando condicional permite incluir no programa trechos de código que dependem de uma ou mais condições para sua execução.

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Computação II Orientação a Objetos

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM C/C++ Prof. Dr. Daniel Caetano

Conceitos básicos da linguagem C

Estruturas de repetição (Ciclos)

Obedecer é sempre certo

Implementando uma Classe e Criando Objetos a partir dela

insfcanceof new public switch transient while byte continue extends for int null

Algoritmos de Busca em Tabelas

Seu pé direito nas melhores faculdades

1. A corrida de vetores numa folha de papel.

Programação de Computadores Primeiros Passos Práticos em C++

Estruturas de Repetição

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

MATEMÁTICA A - 12o Ano Probabilidades - Triângulo de Pascal Propostas de resolução

Tipos de Dados Avançados Vetores e Matrizes

36ª Olimpíada Brasileira de Matemática GABARITO Segunda Fase

Plano de Aula SOU PAR OU ÍMPAR? TÍTULO: Iniciais. 3º ano. Matemática. Número e Operações/Álgebra e Funções 1 aula (45 min) Educação Presencial

Programa Olímpico de Treinamento. Aula 9. Curso de Combinatória - Nível 2. Tabuleiros. Prof. Bruno Holanda

Trabalho Prático 1 Tipos Abstratos de Dados

Lista 1 para a P2. Operações com subespaços

MD Sequências e Indução Matemática 1

AV1 - MA (b) Se o comprador preferir efetuar o pagamento à vista, qual deverá ser o valor desse pagamento único? 1 1, , , 980

Trabalho Prático 1 Revisão de Programação, Tipos Abstratos de Dados e Combinação de Alocação Estática e Dinâmica de Memória

COLÉGIO ESTADUAL VISCONDE DE BOM RETIRO. Plano de aula 05 junho de Bolsistas: Guimara Bulegon, Maiara Ghiggi e Viviane Polachini

Apêndice A Objetivos PEI

20 Caracteres - Tipo char

Veja na imagem acima que ao abrir o programa ele abrirá marcado em lotomania. Se você for jogar 10 números você deverá fazer as seguintes

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Estrutura Condicional em Java

Analise o código abaixo:

Exercícios de Matemática para o ENEM (Habilidades 2 e 4)

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios

Resolução da lista de exercícios de casos de uso

Tanto na visão semanal como diária você tem a sua disposição algumas opções uteis que facilitarão seu dia a dia.

TUTORIAL AMBIENTE WEB PORTUGOL

Aula 3 Desvio Condicional

UNIDADE III Aula 6 Cálculo do CRC. Fonte: Othon M. N. Batista

OBS.: Usem as funções rand() e srand(). Qualquer duvida,

Introdução à Engenharia ENG1000

Sistema topograph 98. Tutorial Módulo Fundiário

Laboratório de Programação I

OFICINA DE JOGOS APOSTILA DO PROFESSOR

Notas de Cálculo Numérico

02. [Manzano, 1996] Escreva um programa em C que apresente os quadrados dos números inteiros de 15 a 200.

INF 1005 Programação I lista 12

Introdução às equações diferenciais

Pilhas. Profa Morganna Diniz

Reaproveitando algoritmos

Estrutura switch if-else switch switch switch if-else-if switch switch case default break switch switch break Observações: case

Desenvolvimento OO com Java Orientação a objetos básica

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação

Investigando números consecutivos no 3º ano do Ensino Fundamental

SHOPAPOSTILAS. Obrigado e tenha um bom estudo.

Q1 Q2 Q3 Nota. Departamento de Informática - PUC-Rio INF 1005 Programação I P2 20/10/2010. Aluno: Exemplo (apenas um exemplo!):

Resolvendo problemas com logaritmos

BearingNet - Orçamentos Contenuto

4ª Lista de IP. Questão 1

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Aula 4 Estatística Conceitos básicos

Sua Tríplice de um Curso de Sucesso

JavaScript (ou JScript)

Revisando a Aritmética

O problema do jogo dos discos 1

Usando o do-file editor Automatizando o Stata

MANUAL LOTOFÁCIL. Por Cláudio luis

Exercícios Teóricos Resolvidos

Convertendo Algoritmos para a Linguagem C

Comandos Sequenciais if else, e Switch

MC Slide 13 Noções de eficiência e buscas

Comandos de repetição while

Curso de C para Engenharias

6+3=2 8+2= = 3. Nesses exemplos, os resultados podem ser facilmente confirmados pela multiplicação, que é a operação inversa da divisão.

Vamos ver duas telas: Mesa e Itens de uma Mesa, como exemplo.

Exercícios de Revisão Java Básico

Sistemas Operacionais INF Prof. José Gonçalves

5 Apresentando a linguagem C

Fração como porcentagem. Sexto Ano do Ensino Fundamental. Autor: Prof. Francisco Bruno Holanda Revisor: Prof. Antonio Caminha M.

Estrutura de Dados Básica

INF 1010 Estruturas de Dados Avançadas

Brasil Pensou em código de barras. Pensou GS1 Brasil. Como gerar seu Código de Barras

PROVA BRASIL E PRÁTICAS PEDAGÓGICAS

Transcrição:

I Semana de Software Livre da USP Dojo C CCSL PoliGNU-USP MasterMind 25 de abril de 2012 1 Introdução O MasterMind é um jogo cujo objetivo é descobrir um número de 5 dígitos em 10 tentativas. A cada tentativa, o jogador é informado quantos dígitos estão corretos e quantos dígitos estão na posição certa. Usando lógica, o jogador pode eliminar erros com uma nova tentativa. Mas também ocorre que depois de várias tentativas o seu subconsciente permite ver o número completo em sua mente. Por isso, esse jogo é útil para exercitar os dois lados do seu cérebro. Parapsicologia à parte, seria interessante saber qual o número mínimo de tentativas sucientes para acertar qualquer número sorteado. Mas essa estória ca para outra vez... 2 O jogo Inicialmente, um número inteiro de 5 dígitos é sorteado pelo programa, um número entre 0 e 99999. A tarefa do jogador é adivinhar o número que foi sorteado. A cada passo, o jogador digita um número e o programa revela quantos dígitos estão certos e, dentre estes, quantos estão na posição certa. O jogador ganha se acertar o número sorteado em 10 ou menos tentativas. Para a contagem dos dígitos certos podemos pensar no seguinte. Fazendo uma permutação dos dígitos do número chutado, qual é o maior número de dígitos que eu consigo colocar nas mesmas posições e com o mesmo valor do número sorteado? Esse é o número de dígitos certos. Por exemplo, se o número sorteado é 12335 e o número chutado é 32947 a permutação 92347 coloca 2 dígitos na posição certa, e isso é o melhor possível. Embora os números sejam digitados sempre com 5 ou menos dígitos, todos os dígitos à esquerda, até completar 5 dígitos, são sempre considerados zeros. Num exemplo abaixo, o número sorteado é 10 e o número chutado é 1. Neste caso, consideramos que o número sorteado é 00010 e o número chutado é 00001. Com isso, o número de dígitos certos é 5 e o número de dígitos na posição certa é 3, que são os 3 zeros à esquerda.

2 3 Exemplos Número sorteado 87345 Chute 97123 Número de dígitos certos 2 Número sorteado 22222 Chute 2 Número sorteado 22345 Chute 12678 Número sorteado 11224 Chute 32178 Número de dígitos em posições certas 0 Número de dígitos certos 2 Número sorteado 10 Chute 1 Número de dígitos em posições certas 3 Número de dígitos certos 5 Número sorteado 2 Chute 22222 4 O quê vocês devem fazer Vocês devem fazer um programa em C para o jogo MasterMind. Seu programa deve 1. perguntar ao jogador se ele prefere digitar o número a ser adivinhado ou se prefere que o programa sorteie o número; 2. se o jogador deseja que o programa sorteie o número, o seu programa deve pedir ao jogador para digitar um número que será usado como semente para gerar "aleatoriamente"o número a ser adivinhado (veja seção??); suponha que o número gerado seja armazenado na variável sorteado; 3. pedir, no máximo 10 vezes, para o jogador digitar um número chute, 0 < chute < 99999; 4. informar quantos dígitos de chute aparecem em sorteado na posição certa e quantos dígitos de chute aparecem em sorteado. No nal, imprimir uma mensagem indicando se o jogador adivinhou ou não o número. No caso de o jogador não ter resolvido o jogo, o número sorteado deverá ser informado.

3 5 Exemplos de execuções do programa Exemplo 1 Deseja digitar o numero a ser adivinhado? (1 = sim, 0 = nao): 0 Digite uma semente para geracao do numero aleatorio: 1 Tentativa 1: 11111 Tentativa 2: 22221 Tentativa 3: 13333 Tentativa 4: 41444 Tentativa 5: 54155 Tentativa 6: 64166 Numero de digitos certos = 3 Tentativa 7: 64177 Tentativa 8: 74168 Tentativa 9: 94167 Numero de digitos em posicoes certas = 4 Tentativa 10: 4167 Numero de digitos em posicoes certas = 5 Numero de digitos certos = 5 Parabens! Voce adivinhou o numero!

4 Exemplo 2 Deseja digitar o numero a ser adivinhado? (1 = sim, 0 = nao): 0 Digite uma semente para geracao do numero aleatorio: 2 Tentativa 1: 11111 Tentativa 2: 12222 Tentativa 3: 31333 Tentativa 4: 44144 Tentativa 5: 55514 Numero de digitos certos = 3 Tentativa 6: 65416 Tentativa 7: 67541 Tentativa 8: 85641 Tentativa 9: 96514 Tentativa 10: 65140 Numero de digitos certos = 5 Voce nao conseguiu advinhar! O numero sorteado foi 4516

5 6 Sorteio de um número pelo programa Para sortear o número a ser adivinhado usaremos as funções rand e srand da biblioteca padrão do C (<stdlib.h>). O seu programa precisa ter o seguinte trecho de código: #include <stdio.h> #include <stdlib.h> #define SIM 1 int main( ) int opcao; /* indica se o numero a ser adivinhado sera sorteado ou nao */ int sorteado; /* numero a ser adivinhado */ int semente; /* semente usada para inicializar o gerador de numeros "aleatorios" */ [... outras declaracoes... ] /* 1. pergunte se o numero a ser adivinhado deve ser lido */ printf("deseja digitar o numero a ser adivinhado? (1 = sim, 0 = nao): "); scanf("%d", &opcao); /* 2. leia ou sorteie o numero a ser adivinhado */ if (opcao == SIM) printf("digite o numero a ser adivinhado: "); scanf("%d", &sorteado); else printf("digite a semente para o gerador de numeros aleatorios: "); scanf("%d", &semente); srand(semente); sorteado = rand()%1000*100 + rand()%100; /* Remover a linha seguinte depois de testar o programa */ printf("numero sorteado: %d\n", sorteado); [... resto do programa... ] return 0; Para uma mesma semente, o número sorteado é sempre o mesmo.