Logo Hardware.com.br
Sandman
Sandman Membro Senior Registrado
476 Mensagens 0 Curtidas

Alguém poderia resolver este problema de C++?

#1 Por Sandman 05/11/2003 - 13:50
Alguém poderia resolver este problema de C++?

Obrigado

Neste trabalho, você irá utilizar técnicas para construção de projetos com mais de um arquivo. É importante seguir as instruções, utilizando um arquivo makefile apropriado.

O trabalho consiste em criar um programa que sorteia um número inteiro, e depois pede ao usuário que tente adivinhá-lo, com uma quantidade limitada de tentativas. A cada tentativa, o programa informa se o número sorteado é menor ou maior que o fornecido pelo usuário.

É importante seguir a estrutura de projeto apresentada a seguir.
Arquivos do projeto, e seu conteúdo:
• principal.cpp : contém a função main;
• util.h e util.cpp : funções utilitárias para sorteio de números e crítica de entrada de dados;
• jogo.h e jogo.cpp : constantes associadas ao jogo, e função que simula as jogadas, até um determinado número de tentativas.
• makefile : descrição do projeto - deve ser executado pelo programa make.


O código do arquivo principal.cpp deve ser o apresentado abaixo:

...
#include "util.h"
#include "jogo.h"

int main() {
inicSorteio();
cout << "Sorteio de um numero entre 1 e " << MAXNUM << endl;
int num = sorteiaInteiro (1, MAXNUM);

cout << "Tente descobrir o numero com no maximo "
<< MAXTENT << " tentativas." << endl;
int t = jogoIntervalo (num);
if (t <= MAXTENT)
cout << "Parabens! Acertou o número sorteado, usando "
<< t << " tentativas!" << endl;
else
cout << "Ultrapassou o número máximo de tentativas!" << endl;

return 0;
}

Observe que são usadas as funções inicSorteio e sorteiaInteiro, definidas no arquivo util.h, e a função jogoIntervalo, definida no arquivo jogo.h.

Em seguida, são apresentados os códigos dos arquivos util.h e jogo.h.



Código do arquivo util.h:

#ifndef __util_h
#define __util_h

void inicSorteio();
// Inicializa a seqüência de números aleatórios
// (usa uma semente diferente a cada execução)

int sorteiaInteiro (int inf, int sup);
// Dados 2 números inteiros inf e sup, onde inf <= sup,
// sorteia um número entre inf e sup, incluindo esses limites.

void leValorIntervalo (int inf, int sup, int &resp);
// Enquanto o usuário não fornecer um valor entre inf e sup,
// imprime mensagens de erro apropriadas e solicita nova entrada
// de dados. O resultado deve ser colocado na variável resp.

#endif


Código do arquivo jogo.h:

#ifndef __jogo_h
#define __jogo_h

const int MAXNUM = 1000;
// Valor máximo a ser sorteado

const int MAXTENT = 10;
// Número máximo de tentativas

int jogoIntervalo (int n);
// Dado um número n inteiro, esta função solicita que o usuário
// faça no máximo MAXTENT tentativas para adivinhá-lo. Se o valor
// for adivinhado em um número de tentativas menor ou igual a MAXTENT,
// esse número de tentativas é retornado pela função. Caso contrário,
// a função retorna MAXTENT+1.

#endif


Atenção: a entrada de valores para tentar adivinhar o número sorteado (dentro da função jogoIntervalo) deve ser criticada. Apenas os valores entre 1 e MAXNUM podem ser considerados. Para essa crítica, deve ser usada a função leValorIntervalo, definida no arquivo util.h.
Sandman
Sandman Membro Senior Registrado
476 Mensagens 0 Curtidas
#3 Por Sandman
06/11/2003 - 12:41
Olá: Quais os erros que tem neste código????
Não estou conseguind compilar.....

O makefile que eu fiz é este:
prog.exe : principal.o util.o jogo.o
gpp principal.o util.o jogo.o -o prog.exe
principal.o : principal.cpp util.h jogo.h
gpp -c principal.cpp
util.o : util.cpp util.h
gpp -c util.cpp
jogo.o : jogo.cpp jogo.h
gpp -c jogo.cpp


#include
using std::cin;
using std::cout;
using std::endl;

#include
#include

#include "util.h"
#include "jogo.h"

int main() {
inicSorteio();
cout << "Sorteio de um numero entre 1 e " << MAXNUM << endl;
int num = sorteiaInteiro (1, MAXNUM);

cout << "Tente descobrir o numero com no maximo "
<< MAXTENT << " tentativas." << endl;
int t = jogoIntervalo (num);
if (t <= MAXTENT)
cout << "Parabens! Acertou o número sorteado, usando "
<< t << " tentativas!" << endl;
else
cout << "Ultrapassou o número máximo de tentativas!" << endl;

return 0;
}

#ifndef __util_h
#define __util_h

void inicSorteio () {
srand ( time( 0 ) );
}

int sorteiaInteiro (int inf, int sup){
int k;
k = inf + rand () % sup;
return k;
}

void leValorIntervalo (int inf, int sup, int &resp) {
while (true) {
cout << "Digite valor inteiro:";
cin >> resp;
if (resp>=inf && resp<=sup)
break;
else
cout << "Deve ser valor entre" << inf << "e"
<< sup < }
}

#endif


#ifndef __jogo_h
#define __jogo_h

const int MAXNUM = 1000;

const int MAXTENT = 10;

int jogoIntervalo (int n){
int i;
for (i=1; i<=MAXTENT; ++i) {
int valor;
leValorIntervalo (1, MAXNUM, valor){
if (valor==n)
if (i<=MAXTENT)
return i;
else
return MAXTENT+1;

}
}
}

#endif
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal