[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