Buscar

Aula_12 - Funções(2)

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Funções (2)
Aula nº 12
arquivos de cabeçalho
rand ( )
*
*
* - 29
Arquivos de Cabeçalho
Cada biblioteca padrão de C++ tem um arquivo de cabeçalho correspondente que contém todos os protótipos das funções que ela contém;
O programador pode criar arquivos de cabeçalho e incluí-los no programa:
			#include “maximo.h”
*
*
* - 29
Implementar a função raizQuadrada. Esta função deve:
Receber um número do tipo float como parâmetro.
Retornar a raiz quadrada do número recebido, de tal maneira que esta raiz, quando elevada ao quadrado, apresente um erro máximo de 0.01% em relação ao valor do parâmetro.
Escreva um programa para testar a função.
Lembrando o exercício anterior ...
*
*
* - 29
Arquivo: raizQuadrada.h
float raizQuadrada(float z) {
 float r=0;
 do{
 r +=0.0001;
 }while(z-r*r>0.0001);
 return r;
} // fim da função raizQuadrada
*
*
* - 29
#include <iostream>
using namespace std;
#include “raizQuadrada.h"
int main() {
 float x;
 cout << "\nDigite um numero: ";
 cin >> x;
 cout << "\n\nA raiz quadrada desse numero 	eh: " << raizQuadrada(x) << endl<<endl; 
} // fim de main
Arquivo:
chama_raizQ.cpp
*
*
* - 29
Geração de números aleatórios
Função rand ( )
Gera um inteiro entre 0 e RAND_MAX (RAND_MAX = 2.147.483.647)
		int i = rand ( ) ;
Biblioteca <cstdlib>
*
*
* - 29
Ex.: Simulando lançamentos de dados
O número gerado por rand( ) está entre 0 e 65535;
Para forçar valores entre 1 e 6 fazemos
 (1 + rand ( ) % 6)
 (1 + rand ( ) % 6)
O resto da divisão de qualquer número por 6 vai dar um resto de 0 a 5
Somado com 1 vai dar um número de 1 a 6
*
*
* - 29
#include <iostream> 
using namespace std;
#include <iomanip>
#include <cstdlib> // para usar rand ( )
Ex.: Simulando lançamentos de dados
*
*
* - 29
int main()
{
 for ( int i = 1; i <= 4; i++ ) {
 for (int j = 1; j<=5; j++)
	 cout<<setw( 10 )<<( 1 + rand() % 6 );
 cout << endl;
 }
 return 0;
}
*
*
* - 29
for ( int i = 1; i <= 4; i++ ) {
 for (int j = 1; j<=5; j++)
 cout<<setw( 10 )<<( 1 + rand() % 6 );
 cout << endl;
}
i=1
i=2
i=3
i=4
Exemplo de execução:
*
*
* - 29
rand ( )
Se rand ( ) gera números aleatórios
Cada número gerado deve ter a mesma probabilidade.
mas toda execução gera os mesmos números !! 
rand gera números pseudo-aleatórios !
*
*
* - 29
srand ( )
Argumento unsigned int – semente
Inteiro não negativo 
 unsigned int semente;
 cin >> semente;
 srand (semente);
 for (int i = 1; i <= 10; i++) {
 for (int j = 1; j<=5; j++)
 cout<<setw(10)<<(1+rand ( ) % 6);
inteiro sem sinal
acrescentado
*
*
* - 29
int main()
{
 unsigned semente;
 cout << “Forneça a semente”;
 cin >> semente;
 srand (semente);
 for ( int i = 1; i <= 4; i++ ) {
 for (int j = 1; j<=5; j++)
	 cout<<setw( 10 )<<( 1 + rand() % 6 );
 cout << endl;
 }
 return 0;
}
*
*
* - 29
int main()
{
 unsigned semente;
 cout << “Forneça a semente”;
 cin >> semente;
 srand (semente);
 for ( int i = 1; i <= 4; i++ ) {
 for (int j = 1; j<=5; j++)
	 cout<<setw( 10 )<<( 1 + rand() % 6 );
 cout << endl;
 }
 return 0;
}
Mas para a mesma semente, os números gerados ainda serão os mesmos !!
Vamos usar a hora
do computador
como semente !!
*
*
* - 29
Função time ( )
time (0) 
 retorna a hora de calendário (em segundos);
 convertido em um unsigned
 protótipo em <ctime>
vamos usar time(0) como semente:
		srand ( time (0) );
*
*
* - 29
#include <iostream> 
using namespace std;
#include <iomanip>// para usar setw ( )
#include <ctime>// para usar time ( )
#include <cstdlib> // para usar rand ( )
int main(){
 srand ( time(0) );
 for ( int i = 1; i <= 4; i++ ) {
 for (int j = 1; j<=5; j++)
	 cout<<setw( 10 )<<( 1 + rand() % 6 );
 cout << endl;
 }
 return 0; }
*
*
* - 29
Exemplo - Jogo
Um jogador joga 2 dados. A soma da face superior dos dados é calculada.
 se soma = 7 ou 11 –> vence na 1ª jogada;
 se soma = 2, 3 ou 12 –> perde na 1ª jogada;
 se soma = 4, 5, 6, 8, 9 ou 10, esta soma torna-se o ‘ponto’ do jogador. Para vencer, o jogador deve tirar outra soma igual ao seu ‘ponto’.
se tirar 7 antes de fazer seu ponto, ele perde o jogo.
*
*
* - 29
1ª jogada
soma
soma ==
7 ou 11
vence
perde
soma == 
2, 3 ou 12
ponto=soma
jogada
soma
soma == 
ponto
soma
== 7
perde
vence
V
F
V
F
F
F
V
V
*
*
* - 29
Exemplo de Execução 1
Jogador fez 4 + 6 = 10
Ponto: 10
Jogador fez 1 + 1 = 2
Jogador fez 6 + 4 = 10
Jogador venceu !!
*
*
* - 29
Exemplo de Execução 2
Jogador fez 2 + 5 = 7
Jogador venceu !!
Exemplo de Execução 3
Jogador fez 2 + 2 = 4
Ponto: 4
Jogador fez 2 + 5 = 7
Jogador perdeu !!
*
*
* - 29
Exemplo de Execução 4
Jogador fez 1 + 3 = 4
Ponto: 4
Jogador fez 1 + 2 = 3
Jogador fez 5 + 5 = 10
Jogador fez 1 + 4 = 5
Jogador fez 3 + 2 = 5
Jogador fez 4 + 5 = 9
Jogador fez 3 + 4 = 7
Jogador perdeu !!
*
*
* - 29
Exemplos de Execução 5
Jogador fez 4 + 6 = 10
Pontos: 10
Jogador fez 1 + 1 = 2
Jogador fez 6 + 4 = 10
Jogador venceu !!
*
*
* - 29
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int jogaDado();
int main(){
	srand (time(0));
	int d1, d2, ponto;
	d1 = jogaDado();
	d2 = jogaDado();
*
*
* - 29
 cout << "Jogador fez " << d1 << " + " 	<< d2 << " = " << d1+d2 << endl;
 switch (d1 + d2){
 //tirando 7 ou 11 – vence na 1ª jogada
 case 7:
 case 11:
 cout << "\nJogador venceu"<< endl;
	 break;
*
*
* - 29
 //tirando 2, 3 ou 12 – perde na 1ª jogada
 case 2:
 case 3:
 case 12:
	 cout << "\nJogador perdeu"<< endl;
	 break;
*
*
* - 29
 default:
 ponto = d1+d2;
 cout<<"\nPonto = "<<ponto<<endl;
 //jogar dados até tirar o ponto (vence) 	ou 7 (perde)
 while(1) {
	 d1 = jogaDado();
	 d2 = jogaDado();
	 cout << "Jogador fez " << d1 << "+" 			<<d2<<" = "<<d1+d2<<endl;
*
*
* - 29
	if (d1+d2 == ponto) {
	 cout << "\nJogador venceu"<< endl;
	 break; //sai do while
	}
	if (d1+d2 == 7) {
	 cout << "\nJogador perdeu"<< endl;
	 break; //sai do while
	}
 } // fim do while
 break; //sai do switch
 }// fim do switch
return 0; } // fim de main
*
*
* - 29
 default:
 ponto = d1+d2;
 cout<<"\nPonto = "<<ponto<<endl;
 do {
	 d1 = jogaDado();
	 d2 = jogaDado();
	 cout<<"Jogador fez "<<d1<<“+”<<d2<<“=” 			<<d1+d2<<endl;
 } while ( (d1+d2 != ponto) && (d1+d2 != 7) )
 if (d1+d2 == ponto)
	 cout << "\nJogador venceu"<< endl;
 if (d1+d2 == 7) 
	 cout << "\nJogador perdeu"<< endl;
 break;
 }// fim do switch
Outra opção para o default:
*
*
* - 29
// Definição da função jogaDado( )
int jogaDado( ){
	return ( 1 + rand() % 6 );
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais