Algoritmos e programação

Identificar matriz identidade e comparador da loteria esportiva

São mostrados dois algoritmos, onde o primeiro tem o propósito de identificar se uma matriz é uma matriz identidade e o segundo é um algoritmo que, dado o resultado da loteria esportiva, encontra uma cartela de aposta que tenha acertado todos os palpites.

Os algoritmos são explicados em vídeo, onde também é mostrado como utilizar o modo de depuração (debug) do CodeSkulptor (http://www.codeskulptor.org/viz/), um editor online de Python .

Matriz identidade

O objetivo desse algoritmo está em ter uma função que recebe uma matriz quadrada e retornar se a matriz é uma matriz identidade (explicação do que é uma matriz identidade se encontram aqui).

Algoritmo

def testaMatrizIdentidade(mat):
    for i in range(len(mat)):
        for j in range(len(mat)):
            if (i == j and mat[i][j] <> 1):
                return False
            elif (i <> j and mat[i][j] <> 0):
                return False
    return True

ordem = input('Digite a ordem: ')
mat = [0] * ordem
for i in range(ordem):
    mat[i] = [0] * ordem

for i in range(ordem):
    for j in range(ordem):
        mat[i][j] = input('Digite um valor: ')

for i in range(ordem):
    print mat[i][:]

if testaMatrizIdentidade(mat) == False:
    print 'A matriz nao e identidade'
else:
    print 'A matriz e identidade'

Vídeo


Loteria

O enunciado no vídeo está um pouco diferente, mas o seguido foi o descrito aqui.

Escreva um programa em Python que leia um vetor de 13 elementos inteiros, que é o gabarito de um teste da loteria esportiva, contendo os valores 1 (coluna 1), 2 (coluna 2) e 3 (coluna do meio). Leia, a seguir, para cada apostador, um vetor de respostas de 13 posições. Verifique para cada apostador o números de acertos, comparando o vetor de gabarito com o vetor de respostas. Escreva o número do apostador e o número de acertos. Se o apostador tiver 13 acertos, mostrar a mensagem “ganhador”.

EXEMPLO

Entrada
Vetor de gabarito: | 1 | 2 | 1 | 3 | 1 | 1 | 1 | 3 | 2 | 2 | 2 | 1 | 1 |

Apostador 1: | 1 | 2 | 1 | 3 | 1 | 1 | 1 | 3 | 2 | 2 | 2 | 2 | 2 |
Apostador 2: | 1 | 2 | 1 | 3 | 1 | 1 | 1 | 3 | 2 | 2 | 2 | 1 | 1 |

Saída
Apostador 1: 11 acertos
Apostador 2: 13 acertos – ganhador

Algoritmo

import random

def geraCartao():
    vet = [0]*13
    for i in range(13):
        vet[i] = random.randint(1,3)
    return vet    

def resultadoJogos():
    vet = [0]*13
    for i in range(13):
        vet[i] = input('Valor da rodada: ')
        while vet[i] < 1 or vet[i] > 3:
            vet[i] = input('Valor invalido. Digite outro: ')
    return vet

def acertos(gab, aposta):
    acertos = 0
    for i in range(13):
        if gab[i] == aposta[i]:
            acertos += 1 #acertos = acertos + 1
    return acertos

##### Começa o algoritmo principal #####
gabarito = resultadoJogos()
print 'Gabarito: ', gabarito

apostadores = 0
ganhador = False
while (ganhador == False):
    aposta = geraCartao()
    acertou = acertos(gabarito, aposta)
    apostadores += 1
    
    if acertou == 13:
        ganhador = True
        print 'Apostador ',apostadores, ': ', acertou, ' acertos - ganhador'
    else:
        print 'Apostador ',apostadores, ': ', acertou, ' acertos'

Vídeos

O vídeo está divido em duas partes: na primeira parte é explicado como resolver o problema, enquanto na segunda é mostrado o uso do debug do CodeSkulptor em uma execução passo-a-passo.

Sair da versão mobile