ifmatriz
Version:
Web App feito para disciplinar de Calculo I - 2018.02, realizar operações com matrizes quadradas
151 lines (135 loc) • 4.07 kB
JavaScript
const antisimetrica = require('./operacoes/antisimetrica')
const determinante = require('./operacoes/determinante')
const identidade = require('./operacoes/identidade')
const igualdade = require('./operacoes/igualdade')
const multiplicacao = require('./operacoes/multiplicacao')
const produto = require('./operacoes/produto')
const simetrica = require('./operacoes/simetrica')
const soma = require('./operacoes/soma')
const subtracao = require('./operacoes/subtracao')
const transposta = require('./operacoes/transposta')
const ids = ['a', 'b']
let ordem = 3
let matrizes = {
a: [[]],
b: [[]]
}
const scanerMatriz = (id) => {
matrizes[id] = [[]]
for (let l = 0; l < ordem; l++) {
matrizes[id][l] = []
for (let c = 0; c < ordem; c++) {
matrizes[id][l].push(
Number(
document.getElementById(`${id}:${l}:${c}`).value || 0
)
)
}
}
console.log('Load Matriz', id, matrizes[id])
}
const showMatriz = (id) => {
let matrizDom = document.getElementById(`matriz:${id}`)
matrizDom.innerHTML = '' //Limpa matriz atual
for (let l = 0; l < ordem; l++) {
let linhaDom = document.createElement('div')
linhaDom.style['margin-top'] = 0
for (let c = 0; c < ordem; c++) {
let elemInput = document.createElement('input')
elemInput.type = 'number'
elemInput.style.width = `${(100/ordem)}%`
elemInput.style.margin = 0
elemInput.style.padding = 0
elemInput.placeholder = `${id}${l+1},${c+1}`
elemInput.id = `${id}:${l}:${c}`
linhaDom.appendChild(elemInput)
}
matrizDom.appendChild(linhaDom)
}
}
const criarTexto = (texto) => {
let pDom = document.createElement('p')
pDom.innerText = texto
return pDom
}
const informacao = (id, idNext) => {
let infoDom = document.getElementById(`info:${id}`)
infoDom.innerHTML = '' //Reset
infoDom.appendChild(
criarTexto(`Determinante(${id}): ${determinante(matrizes[id])}`)
)
infoDom.appendChild(
criarTexto(`Identidade(${id}): ${identidade(matrizes[id]) ? 'Sim' : 'Não'}`)
)
infoDom.appendChild(
criarTexto(`Igualdade(${id}, ${idNext}): ${igualdade(matrizes[id], matrizes[idNext]) ? 'Sim' : 'Não'}`)
)
infoDom.appendChild(
criarTexto(`Simétrica(${id}): ${simetrica(matrizes[id]) ? 'Sim' : 'Não'}`)
)
infoDom.appendChild(
criarTexto(`Anti-simétrica(${id}): ${antisimetrica(matrizes[id]) ? 'Sim' : 'Não'}`)
)
}
const criarMatriz = (id, matriz) => {
let matrizDom = document.getElementById(id)
matrizDom.innerHTML = '' //Reset
for (let l = 0; l < ordem; l++) {
let linhaDom = document.createElement('tr')
linhaDom.style['margin-top'] = 0
for (let c = 0; c < ordem; c++) {
let elemTd = document.createElement('td')
elemTd.textContent = matriz[l][c]
linhaDom.appendChild(elemTd)
}
matrizDom.appendChild(linhaDom)
}
}
const showMatrizDeResultado = (id, idNext) => {
criarMatriz(`soma:${id}`, soma(matrizes[id], matrizes[idNext]))
criarMatriz(`subtracao:${id}`, subtracao(matrizes[id], matrizes[idNext]))
criarMatriz(`produto:${id}`, produto(matrizes[id], matrizes[idNext]))
criarMatriz(`transposta:${id}`, transposta(matrizes[id]))
}
const main = () => {
console.log('Atualizando...')
const ordemAtual = document.getElementById('sl:ordem').value
ids.map((id) => {
scanerMatriz(id)
})
if (ordemAtual != ordem) {
console.log('Ordem foi alterado...')
ordem = ordemAtual
ids.map((id) => {
showMatriz(id, ordem)
})
document.getElementById('hidden').className = 'uk-hidden'
} else {
console.log('Obter dados...')
document.getElementById('hidden').className = ''
ids.map((id) => {
let idNext = ids.filter((i) => i != id)[0]
informacao(id, idNext)
showMatrizDeResultado(id, idNext)
})
}
console.log('Feito!')
}
document.getElementById('sl:ordem').value = 3 //Force
ids.map((id) => {
showMatriz(id)
})
document.getElementById('bt:load').addEventListener('click', main, false)
document.getElementById('sl:ordem').addEventListener('change', main)
module.exports = {
antisimetrica,
determinante,
identidade,
igualdade,
multiplicacao,
produto,
simetrica,
soma,
subtracao,
transposta
}