[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] shell ou nao shell, eis a questao
From: |
aurelio |
Subject: |
Re: [shell-script] shell ou nao shell, eis a questao |
Date: |
Tue, 22 Apr 2003 16:42:40 -0300 (ART) |
oi rodolfo,
--- Rodolfo Villanova escreveu:
> Realmente há a limitação de só ser possível incluir até 10x10 no que
> normalmente eu chamaria de "matriz".
>
> Se o que segue abaixo não reproduz o princípio de matriz, então nunca
> entendi ou já esqueci qual o conceito de matrizes (o que vem a
> reforçar um antigo ódio à matemática, mesmo! %P)
calma, seguir segue :), só que com a limitação do 10x10.
se o bash suportasse matrizes "de verdade", não haveria este
limite, pois ele deixaria você colocar um array dentro de
outro array.
> Meu script de teste:
seu script funciona, mas se o bash suportasse matrizes
de verdade, na atribuição dos valores, ao invés do
> P[$i$j]=$k
você faria
P[$i][$j]=$k
e na hora de pegar o resultado:
> echo "${P[$i$j]} \t\c"
ficaria:
echo "${P[$i][$j]} \t\c"
a grande diferença de se ter os dois [] separados é que
você pode por qualquer número dentro de cada um deles,
então se você quiser ter uma matriz de 99x99, bastaria
defini-la e usar o ${matriz[99][99]} para pegar o valor.
mas isso não rola no bash, pois não dá pra colocar um array
dentro uma pasição qualquer de um array já existente.
aliás, você de repente pode fazer um
matriz[9999]='bla'
e depois se virar nos 'for' da vida, mas fica um troço meio,
digamos, porco :)
só pra exemplificar, um trechinho de código em python
(mas poderia ser qualquer outra linguagem) que demonstra
como criar e obter valores de uma matriz usando os colchetes:
>>> matriz = [ [], [], [] ]
>>> matriz[0] = [0,1,2,3,4,5]
>>> matriz[1] = [6,7,8]
>>> matriz[2] = [9,10,11,12]
>>> matriz[1]
[6, 7, 8]
>>> matriz[1][1]
7
em shell:
# matriz[0]=(0,1,2,3,4,5)
bash: matriz[0]: cannot assign list to array member
isso é exatamente o que o shell não suporta, você poder
colocar um array dentro de um array, formando uma matriz
de arrays, com 'linhas' e 'colunas'.
ficou claro ou baguncei mais ainda? :)
> -----Mensagem original-----
> De: aurelio [mailto:address@hidden]
>
> > > for i in 1 2 3
> > > do
> > > for j in 1 2 3
> > > do
> > > [ "${P[$i$j]}" = X ] && LX[i]=$((${LX[$i]}+1))
> > > [ "${P[$i$j]}" = O ] && LO[i]=$((${LO[$i]}+1))
> > > [ "${P[$j$i]}" = X ] && CX[i]=$((${CX[$i]}+1))
> > > [ "${P[$j$i]}" = O ] && CO[i]=$((${CO[$i]}+1))
> > > done
> > > done
>
> ok, isso funciona, mas não deixa de ser um array
> unidimensional, com apenas uma "linha" e várias
> "colunas".
> um array assim como eu o conheço, deve ter linhas e colunas.
> tipo assim:
>
> array[0] = (1 2 3 4 5) # linha 1
> array[1] = (1 2 3 4 5) # linha 2
> ...
> array[N] = (...) # linha N
>
> pra depois você acessar como:
> array[linha][coluna]
>
> até onde eu vi, em shell não dá pra fazer matrizes com
> linhas e colunas:
>
> > > > mas uma pergunta... dá pra trabalhar com matriz em shell?
> > > também não sei, vamos ver:
> > > # a[0]=(1 2 3 4)
> > > bash: a[0]: cannot assign list to array member
> > > Resposta: não &:)
>
> mas usando a técnica do trecho do script do julio se pode
> "simular" uma matriz com linhas e colunas se usar as
> dezenas como linhas e as unidades como colunas.
>
> mas isso te limita a uma matriz de tamanho máximo de
> 10 linhas e 10 colunas (array[99]).
=====
--
ATENCAO: o www.verde666.org vai morrer, use www.aurelio.net
ATTENTION: www.verde666.org is no more, use www.aurelio.net
_______________________________________________________________________
Yahoo! Mail
O melhor e-mail gratuito da internet: 6MB de espaço, antivírus, acesso POP3,
filtro contra spam.
http://br.mail.yahoo.com/