MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada...

52
MAC2166 Introdução à Computação - aulas 13 e 14- Mauro Cesar Bernardes 29/Abril/2014

Transcript of MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada...

Page 1: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

MAC2166

Introdução à Computação - aulas 13 e 14-

Mauro Cesar Bernardes

29/Abril/2014

Page 2: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Agenda

• Strings

• Manipulação de Arquivos

• Matrizes...

Page 3: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Strings

Page 4: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Strings

• Uma string é uma sequencia de caracteres

• Utiliza aspas ' ' ou " "

• o sinal + concatena strings

• Uma string pode ser composta apenas de números (e ainda será uma string)

• Para converter números em string utilize str()

• Para converter uma string em números utilize int() ou float()

Page 5: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

e000.py

Page 6: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Strings

É possível o acesso a qualquer caractere de um string utilizando índices

0

b

1

a

2

n

3

a

4

n

5

a

Page 7: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Strings

Cuidado com os índices!!

0

b

1

a

2

n

3

a

4

n

5

a

Índice Inválido

Page 8: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Comando for O comando for, utilizado para repetições (loop) em Python, também é útil para percorrer strings.

Ex.: texto="testando um string"

for caracter in texto:

print (caracter)

A cada iteração (loop), a variável caractere receberá um caractere do string armazenado em texto, sequencialmente.

e0.py

Page 9: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos
Page 10: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Comando for

O comando for, utilizado para repetições (loop) em Python, também é útil para percorrer strings.

Ex.: texto="testando um string" for i in range(len(texto)):

print (texto[i])

A cada iteração (loop), a variável caractere receberá um caractere do string armazenado em texto, sequencialmente.

e00.py

Page 11: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos
Page 12: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Strings são “imutáveis”

Analise o trecho a seguir:

texto="testando um string."

texto[0]="T"

for i in range(len(texto)):

print (texto[i])

e00.py

ERRO!! Strings são imutáveis!

Page 13: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Utilizando in como um operador

• Pode-se utilizar in para verificar se um string está contido em outro string

• O in é utilizado em uma expressão lógica e retorna True ou False

(pode ser utilizado em uma estrutura com if)

Page 14: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Biblioteca string

https://docs.python.org/3.3/library/string.html

Page 15: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

>>> test = 'This is just a simple string.'

>>> len(test)

29

>>> test = test.replace('simple', 'short')

>>> test

'This is just a short string.'

>>> test.count('r')

2

>>> test.find('r')

18

>>> test[18]

'r'

>>> test.upper()

'THIS IS JUST A SHORT STRING.'

>>> test.lower()

'this is just a short string.'

Alguns métodos para manipular Strings

Page 16: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Removendo whitespace • Dependendo da aplicação, precisaremos remover whitespace no

início ou no fim de um string

• lstrip() e rstrip()removem whitespace à direita ou à esquerda

• strip() Remove whitespace do início e do final

Page 17: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Arquivos

Page 18: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Manipulação de arquivos: a função open() A função open() serve para obter uma referência a um objeto do tipo arquivo. Assumindo que temos um arquivo chamado arquivo.txt, contendo um trecho de um livro famoso, podemos codificar o seguinte exemplo: >>> a = open("arquivo.txt")

>>> print a

<open file 'arquivo.txt', mode 'r' at 0x820b8c8>

Uma vez obtida a referência ao objeto arquivo, podemos usar métodos específicos como o read(), que retorna o conteúdo do arquivo: >>> texto = a.read()

>>> print texto

`...Would you tell me, please,

which way I ought to go from here?'

`That depends a good deal on where you want to get to,'

said the Cat.

`I don't much care where--' said Alice.

`Then it doesn't matter which way you go,' said the Cat.

Page 19: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Manipulação de arquivos: sintaxe da função open()

O formato geral da função open é:

open(nome_do_arquivo, modo)

Ambos os parâmetros são strings. O modo determina a forma como o arquivo será aberto e é composto de uma ou mais letras:

'r' (ou nada) abre para leitura,

'w' abre para escrita, apagando o conteúdo já existente

'a' abre para escrita, com dados escritos acrescentados ao final do

arquivo.

Se um símbolo '+' for agregado ao modo, o arquivo pode ser lido e escrito simultaneamente.

Page 20: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Arquivo: alunos.txt

Page 21: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Manipulação de arquivos: métodos do objeto arquivo

O objeto arquivo possui um conjunto de métodos úteis; os mais importantes são descritos abaixo. Note que o arquivo possui um conceito de posição atual: em um dado momento, operações serão realizadas com base em uma certa posição. Alguns métodos utilizam ou alteram esta posição; outros são operações globais, independentes da posição dela.

read(): retorna uma string única com todo o conteúdo do arquivo.

readline(): retorna a próxima linha do arquivo e incrementa a posição atual.

readlines(): retorna todo o conteúdo do arquivo em uma lista, uma linha do arquivo por elemento da lista.

writelines(data): escreve cada elemento string da lista data na posição atual ou ao final do arquivo, dependendo do modo de abertura.

seek(n): muda a posição atual do arquivo para o valor indicado em n.

close(): fecha o arquivo.

Qualquer arquivo pode ser aberto e lido desta forma; experimente com esta função, abrindo alguns arquivos locais, lendo e modificando-os

Page 22: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Arquivo: alunos.txt

Exemplos de whitespaces que podem ser removidos com o uso de rstrip ou strip ou end=""

Page 23: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

end="" para remover o whitespace \n do final de cada linha do arquivo.

Page 24: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

arquivo = input("Nome do arquivo: ")

arq = open(arquivo, 'r', encoding="utf8")

nlin = 1

for linha in arq:

print(nlin, ':', linha)

nlin += 1

e1.py

Page 25: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

arquivo = input("Nome do arquivo: ")

arq = open(arquivo, 'r', encoding="utf8")

nlin = 1

for linha in arq:

print(nlin, ':', linha, end="")

nlin += 1

Page 26: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

arquivo = input("Nome do arquivo: ")

arq = open(arquivo, 'r', encoding="utf8")

nlin = 1

for linha in arq:

print("%6d : %s" %(nlin, linha), end="")

nlin += 1

Page 27: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

abriu = False

while not abriu:

arquivo = input("Nome do arquivo: ")

try:

arq = open(arquivo, 'r')

except FileNotFoundError:

print(arquivo, 'não encontrado.')

else:

abriu = True

nlin = 1

for linha in arq:

print('%6d:'%(nlin), end="")

nlin += 1

e1.py

Page 28: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Analise o programa a seguir:

def imprime(p):

for caracter in p:

print(caracter)

palavra=input("digite uma palavra:")

imprime(palavra)

Page 29: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Problema 5.2

a) Escreva uma função separa(texto, sep), que recebe uma frase texto e um caractere separador sep. A função "corta" o texto nos separadores, retornando uma lista com as palavras do texto. Exemplo: para o texto= ",1,,2,3," e sep = , a saída deve ser a lista: ['', '1', '', '2', '3', ''] onde '' indica uma palavra vazia (entre 2 separadores consecutivos).

def separa(texto, sep):

lista = []

palavra = ''

for l in texto:

if l == sep:

lista.append(palavra)

palavra = ''

else:

palavra += l

lista.append(palavra)

return lista

Page 30: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Problema 5.2

b) Escreva um programa que leia uma linha com palavras separadas por vírgula, e determina o comprimento da maior palavra. A linha pode conter palavras vazias.

frase = input("Digite palavras separadas por vírgula: ")

palavras = separa(frase, ',') #função apresentada anteriormente

print (palavras)

if len(palavras) > 0:

maxp = palavras[0]

for p in palavras:

print ("A palavra '%s' tem %d caracteres."%(p, len(p)))

if len(p) > len(maxp):

maxp = p

print("> palavra é:'%s' com %d caracteres." %(maxp, len(maxp)))

else:

print("Não achei nenhuma palavra em sua frase!")

Page 31: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Método split() O método split() separa a string pelos espaços.

Exemplo: teste = 'oi tudo bem?'

print(teste.split())

Saída: >>['oi', 'tudo', 'bem?']

Page 32: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Arquivo Excell salvo no formato CSV (Comma Separated Value)

Page 33: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos
Page 34: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Arquivo: planilha.csv

Page 35: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Exercício 2: Um arquivo Excell contendo uma planilha de números foi salva no formato CSV (Separado por vírgula) com o nome arqexcell.csv.

Desenvolva um programa que abra o arquivo arqexcell.csv imprima a soma dos números de cada linha e a soma de todos os números do arquivo.

Ao final, o programa deve imprimir também a soma total.

Exemplo: para o arquivo arqexcell com:

A saída deverá ser:

Arqexcell.csv

Page 36: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

import sys

nome=input("Forneça nome do arquivo:")

try:

arquivo=open(nome,'r')

except IOError:

print("Problema na abertura do arquivo!!")

sys.exit()

linha=[]

somatotal=0

for linhaarquivo in arquivo:

linha=linhaarquivo.split(";")

somalinha=0

for numero in linha:

somalinha=somalinha+float(numero)

somatotal=somatotal+somalinha

print("Soma linha=", somalinha)

print("Soma Total=", somatotal)

arquivo.close()

Page 37: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

PROBLEMA 5.2.

Dada uma sequência de caracteres representando um texto,

determinar a frequência relativa de vogais no texto.

Por exemplo, no texto: "Em terra de cego quem tem um olho e caolho"

essa frequência é 16/42.

texto = input("Digite um texto: ")

nv = 0

vogais = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']

for letra in texto:

if letra in vogais:

nv += 1

print ("Frequencia relativa = %d / %d"%(nv, len(texto)))

Page 38: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Dúvida na aula

anterior...

Page 39: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Dúvida na aula anterior

matriz=[[6,5,4],[8,7,6],[4,9,2]]

for linha in matriz:

for coluna in linha:

print(coluna, end=" ")

print()

• Apresentando o conteúdo de uma matriz:

• Somando um a cada elemento da matriz: matriz=[[6,5,4],[8,7,6],[4,9,2]]

for linha in range(len(matriz)):

for coluna in range(len(matriz[linha])):

matriz[linha][coluna]+=1

print(matriz)

Page 40: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Matrizes

Page 41: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Problema 1:

Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secundária são todas iguais.

Exemplo: A matriz é um quadrado mágico.

Dada uma matriz quadrada Anxn , verificar se A é um quadrado

mágico.

8

0

0

1

7

2

0

1

2

A 4 5 6

3 10 2

Page 42: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

def verifica (A):

aux=[]

#verificando linhas

for i in range(len(A)):

soma=0

for j in range (len(A[i])):

soma=soma+A[i][j]

aux.append(soma)

#verificando colunas

for i in range(len(A)):

soma=0

for j in range (len(A[i])):

soma=soma+A[j][i]

aux.append(soma)

#verificando diagonal principal

soma=0

for i in range(len(A)):

soma=soma+A[i][i]

aux.append(soma)

#verificando diagonal secundária

soma=0

c=1

for i in range(len(A)):

soma=soma+A[i][len(a)-c]

c=c+1

aux.append(soma)

#verificando se elementos de aux são iguais

for i in range(len(aux)):

if aux[i] != aux[1]:

return False

return True

#programa principal

a=[[8,0,7],[4,5,6],[3,10,2]]

if verifica(a):

print("É quadrado mágico")

else:

print("Não e quadrado mágico")

Primeira solução!!

Pode ser melhorada....

Page 43: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

def verifica (A):

aux=[]

#verificando linhas e colunas

for i in range(len(A)):

soma=0

soma2=0

for j in range (len(A[i])):

soma=soma+A[i][j]

soma2=soma2+A[j][i]

aux.append(soma)

aux.append(soma2)

#verificando diagonal principal e secundária

soma=0

soma2=0

c=1

for i in range(len(A)):

soma=soma+A[i][i]

soma2=soma2+A[i][len(A)-c]

c=c+1

aux.append(soma)

aux.append(soma2)

#verificando se elementos de aux são iguais

for i in range(len(aux)):

if aux[i] != aux[1]:

return False

return True

#programa principal

a=[[8,0,7],[4,5,6],[3,10,2]]

if verifica(a):

print("É quadrado mágico")

else:

print("Não e quadrado mágico")

Segunda solução!!

Pode ser melhorada....

Page 44: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

def verifica (A):

aux=[]

#verificando linhas e colunas

soma3=soma4=0

c=1

for i in range(len(A)):

soma=0

soma2=0

soma3=soma3+A[i][i]

soma4=soma4+A[i][len(A)-c]

c=c+1

for j in range (len(A[i])):

soma=soma+A[i][j]

soma2=soma2+A[j][i]

aux.append(soma)

aux.append(soma2)

#verificando se elementos de aux são iguais

for i in range(len(aux)):

if aux[i] != aux[1]:

return False

return True

#programa principal

a=[[8,0,7],[4,5,6],[3,10,2]]

if verifica(a):

print("É quadrado mágico")

else:

print("Não e quadrado mágico")

Terceira solução!!

Pode ser melhorada....

Page 45: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Exercícios com Matrizes:

Entrega na próxima aula

Page 46: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Exercício 1:

Os elementos aij de uma matriz inteira Anxn representam os custos de transporte da cidade i para a cidade j. Dados n itinerários, cada um com k cidades, calcular o custo total para cada itinerário.

Exemplo:

O custo do itinerário 0 3 1 3 3 2 1 0 é

a03 + a31 + a13 + a33 + a32 + a21 + a10 = 3 + 1 + 400 + 5 + 2 + 1 + 5 = 417

4

0

1

1

2

2

0

1

2

a 5 2 1

2 1 1

3

3

400

8

3 7 1 3 5

Page 47: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

matriz.txt

Page 48: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Funções com Matrizes Exercício 2: (Compute a matriz de campo minado (minesweeper).)

(a) Escreva uma função que recebe como parâmetros uma matriz inteira Anxm

, e uma

posição (i,j) da matriz, e conta quantas posições ao redor da posição (i,j) contém o valor

-1.

(b) Escreva um programa que lê uma matriz Anxm

de 0's (posições livres) e -1's

(minas). Utilizando a função do item anterior, o programa deve computar e imprimir a

quantidade de minas ao redor de cada posição livre da matriz.

Page 49: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Exercício 2: Compute a matriz de campo minado (minesweeper). (a)Escreva uma função que recebe como parâmetros uma matriz inteira Anxm e uma posição (i,j) da matriz e retorna quantas posições ao redor da posição (i,j) contém o valor -1.

def campominado(A, i, j):

campominado(A,2,2) 1 campominado(A,7,5) 3 campominado(A,8,3) 6 campominado(A,7,7) 2

2 1

3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

0 -1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 -1 0 0

0 -1 -1 -1 0 0 0 0 0

0 0 0 -1 -1 0 0 -1 0

0 -1 -1 0 0 0 0 0 0

0

1

2

3

4

5

6

7

8

0 1 2 3 4 5 6 7 8

Sem moldura

2 2 2 2 2 2 2 2 2 2 2

2 0 -1 0 0 0 0 0 0 0 2

2 0 0 0 0 0 0 0 0 0 2

2 0 0 0 0 0 0 0 0 0 2

2 0 0 0 0 0 0 0 0 0 2

2 0 0 0 0 0 0 0 0 0 2

2 0 0 0 0 0 0 -1 0 0 2

2 0 -1 -1 -1 0 0 0 0 0 2

2 0 0 0 -1 -1 0 0 -1 0 2

2 0 -1 -1 0 0 0 0 0 0 2

2 2 2 2 2 2 2 2 2 2 2

0

1

2

3

4

5

6

7

8

9

10

0 1 2 3 4 5 6 7 8 9 10

Com moldura

Page 50: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Exercício 2:

Compute a matriz de campo minado (minesweeper).

b) Escreva um programa que lê uma matriz Anxm de 0's (posições livres) e -1's (minas) de um arquivo texto. Utilizando a função do item anterior, o programa deve computar e imprimir a quantidade minas ao redor de cada posição livre da matriz.

(Obs: Resolver sem moldura e com moldura.)

2 1

3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

0 -1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 -1 0 0

0 -1 -1 -1 0 0 0 0 0

0 0 0 -1 -1 0 0 -1 0

0 -1 -1 0 0 0 0 0 0

0

1

2

3

4

5

6

7

8

0 1 2 3 4 5 6 7 8 2 2 2 2 2 2 2 2 2 2 2

2 0 -1 0 0 0 0 0 0 0 2

2 0 0 0 0 0 0 0 0 0 2

2 0 0 0 0 0 0 0 0 0 2

2 0 0 0 0 0 0 0 0 0 2

2 0 0 0 0 0 0 0 0 0 2

2 0 0 0 0 0 0 -1 0 0 2

2 0 -1 -1 -1 0 0 0 0 0 2

2 0 0 0 -1 -1 0 0 -1 0 2

2 0 -1 -1 0 0 0 0 0 0 2

2 2 2 2 2 2 2 2 2 2 2

0

1

2

3

4

5

6

7

8

9

10

0 1 2 3 4 5 6 7 8 9 10

Sem moldura Com moldura

Page 51: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Funções com Matrizes Exercício 3: (a) Escreva uma função que recebe como parâmetros uma matriz real Anxm, e uma

posição (i,j) da matriz, e calcula a média aritmética dos vizinhos de (i,j), ou seja, a

média entre A[i-1][j], A[i+1][j], A[i][j+1] e A[i][j+1]. Desconsidere os vizinhos que não

pertencem a matriz (por exemplo, os vizinhos de (0, 0) são somente (0,1) e (1,0)).

(b) Escreva uma função que recebe como parâmetro uma matriz real Anxm e devolve

uma matriz Amédia, onde Amédia[i][j] é a média aritmética dos vizinhos de (i,j). Para isto,

utilize a função do item anterior.

(c) Escreva um programa que lê uma matriz real Anxm , e um número inteiro k; utilizando

a função do item anterior, o programa deve transformar a matriz k vezes, imprimindo a

matriz inicial e depois de cada transformação.

Page 52: MAC2166 Introdução à Computaçãomcesar/Aulas_13e14.pdf · Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos

Funções com Matrizes

Exercício 4:

Dizemos que uma matriz Anxn é um quadrado latino de ordem n se em cada linha e em cada

coluna aparecem todos os inteiros 1,2,3,...,n (ou seja, cada linha e coluna é permutação dos

inteiros 1,2,...,n).

(a) Escreva uma função que recebe como parâmetros um inteiro n, um vetor V com n inteiros e

verifica se em V ocorrem todos os inteiros de 1 a n.

(b) Usando a função acima, verifique se uma dada matriz inteira Anxn é um quadrado latino de

ordem n.