shell-script-pt
[Top][All Lists]
Advanced

[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/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]