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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RES: [shell-script] shell ou nao shell, eis a questao


From: Rodolfo Villanova
Subject: RES: [shell-script] shell ou nao shell, eis a questao
Date: Tue, 22 Apr 2003 18:11:15 -0300

É isso aí, Aurélio!

Nada como a experimentação para vislumbrar novos horizontes.
Concordo "ipsis literis" em relação aos conceitos sobre matrizes que expuseste 
aqui na lista.
Mas como em computação esses conceitos nem sempre se aplicam de forma ortodoxa, 
resolvi testar alguns limites.

Andei fuçando de novo no que tu NÃO chamas de matriz e no que eu chamaria 
princípio de matriz e cheguei a algumas conclusões:

1. Pode-se dimensionar isso que tu não chamas mas eu chamaria de matriz em 
11x14 (linhas: [0-10]; colunas: [0-23] - o que, convenhamos, é bastante 
limitado e acompanha o limite de vetor no shell-script). O problema central 
reside em armazenar e recuperar nessa "coisa" que eu chamaria de matriz os 
dados que eu quiser.

2. Como essa "joça" de matriz não se comporta como uma matriz normal se 
comportaria em qualquer outra linguagem computacional (M[x;y]), então só posso 
concluir que só é possível acessá-la decentemente na forma vetorial V[264] - 
forma, aliás, como os computadores processam matrizes).

3. O "cheese" da "questã", nesse caso, é a forma matricial como indexo os 
valores contidos nesse vetor, onde alguns valores se sobrepõe por não existirem 
índexadores específicos para esse fim.

4. Finalizando, apesar de o shell-script não oferecer recursos de tratamento 
matricial, provei (nem que seja para meu próprio ego!) que esse tipo de 
tratamento pode ser simulado sobre a dimensão de vetor de uma forma limitada; 
não existir a forma normalmente prevista de indexação matricial, mas se 
tentarmos simulá-la e tentarmos utilizá-la de forma ampla, alguns valores 
armazenados nesse vetor acabam se sobrepondo em determinados intervalos, 
inutilizando alguns dados alí armazenados.

5. Chega desse assunto que eu já enjoei!

------------------
for i in 1 2 3 4 5
do
  echo "ABRAÇO \c"
done
------------------

Rodolfo Villanova


-----Mensagem original-----
De: aurelio [mailto:address@hidden]
Enviada em: terça-feira, 22 de abril de 2003 16:43
Para: address@hidden
Assunto: Re: [shell-script] shell ou nao shell, eis a questao


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/


---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listasdiscussao.cjb.net
---------------------------------------------------------------------
 

Seu uso do Yahoo! Grupos é sujeito às regras descritas em: 
http://br.yahoo.com/info/utos.html 





reply via email to

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