'****************** EP 2 ******************* ' Apesar do QBasic nao exigir, optamos por declarar as variaveis para melhor ' estruturacao do programa. DIM Dias AS INTEGER DIM Simulacoes AS INTEGER DIM ContSimul AS INTEGER DIM ContDias AS INTEGER DIM FatorDescida AS SINGLE DIM FatorSubida AS SINGLE DIM ProbSubida AS SINGLE DIM ProbDescida AS SINGLE DIM Media AS SINGLE DIM Varianca AS SINGLE DIM Preco AS SINGLE DIM ValorContrato AS SINGLE DIM Aux AS SINGLE ' Armazenara o valor de RND ' Limpa a tela e inicializa variaveis CLS ProbDescida = 2 ProbSubida = 2 FatorDescida = -1 FatorSubida = -1 Dias = 0 Simulacoes = 0 ValorContrato = -1 Media = 0 Varianca = 0 ' Informacoes sobre o programa PRINT " Este programa ira simular variacoes de preco de acordo com variaveis" PRINT "fornecidas pelo usuario. Para essas simulacoes, o preco inicial adotado" PRINT "sera igual a 1 (um)." PRINT ' Pede o numero de dias do contrato. Nao pode ser menor que 1. O While ' garante que isso aconteca WHILE Dias < 1 INPUT "Entre com o numero de dias do contrato............: ", Dias WEND ' Pede o numero de simulacoes a executar. Nao pode ser menor que 1. O While ' garante que isso aconteca WHILE Simulacoes < 1 INPUT "Entre com o numero de simulacoes a realizar.......: ", Simulacoes WEND ' Pede a probalidade do preco subir. Deve ser 0 < P < 1. O While ' garante que isso aconteca WHILE ProbSubida > 1 OR ProbSubida < 0 INPUT "Entre com a probalidade do preco subir............: ", ProbSubida IF PU > 1 THEN PRINT "Probabilidade invalida! Valores validos 0 <= P <= 1" END IF WEND ' Se a probabilidade de subida eh 1, nao precisa pedir a prob. de descida ' jah que 0 <= ProbSubida + ProbDescida <= 1 IF ProbSubida = 1 THEN PRINT "Entre com a probalidade do preco descer...........: 0" ProbDescida = 0 ELSE ' Se a probabilidade de subida ficar entre 0 e 1, deve pedir a prob. de ' descida obedecendo 0 <= ProbSubida + ProbDescida <= 1. O While cuida para ' que essa obediencia ocorra WHILE ProbDescida + ProbSubida > 1 OR ProbDescida + ProbSubida < 0 INPUT "Entre com a probalidade do preco descer...........: ", ProbDescida IF ProbDescida + ProbSubida > 1 THEN PRINT "Probabilidade invalida! Valores validos 0 <= P <= " + STR$(1 - ProbSubida) END IF WEND END IF ' Pede o fator de subida. Nao pode ser negativo, utiliza o while para ' garantir isso WHILE FatorSubida < 0 INPUT "Entre com o fator de subida do preco..............: ", FatorSubida WEND ' Pede o fator de descida. Nao pode ser negativo, utiliza o while para ' garantir isso WHILE FatorDescida < 0 INPUT "Entre com o valor do fator de descida do preco....: ", FatorDescida WEND ' Pede o valor do contrato. Nao pode ser negativo, utiliza o while para ' garantir isso WHILE ValorContrato < 0 INPUT "Entre com o valor minimo do contrato (K)..........: ", ValorContrato WEND ' Inicializa gerador de numeros aleatorios RANDOMIZE 1 PRINT PRINT "Aguarde. Realizando simulacoes..." ' Inicia as simulacoes com preco inicial = 1 FOR ContSimul = 1 TO Simulacoes Preco = 1 FOR ContDias = 1 TO Dias Aux = RND ' Verifica se o preco tem que subir, descer ou ficar na mesma IF Aux <= ProbSubida THEN Preco = Preco * (1 + FatorSubida) ELSEIF Aux <= ProbDescida + ProbSubida THEN Preco = Preco * (1 - FatorDescida) END IF NEXT ContDias ' Se teve lucro, coloca o mesmo nos totalizadores para Media e Varianca IF Preco - ValorContrato > 0 THEN Media = Media + Preco - ValorContrato Varianca = Varianca + (Preco - ValorContrato) * (Preco - ValorContrato) END IF NEXT ContSimul ' Calcula a media e varianca final Media = Media / Simulacoes Varianca = Varianca / Simulacoes ' Exibe o resultado PRINT PRINT "Media de lucro (C).: ", STR$(Media) PRINT "Desvio padrao......: ", STR$(SQR(Varianca - Media * Media))