[SP-pm] Ajuda com vetor de 2 dimensões

Solli Honorio shonorio at gmail.com
Tue Dec 7 07:58:21 PST 2010


2010/12/7 Juliana <julianalduque em yahoo.com.br>

> Olá amigos da lista,
>
> Estou com dificuldade em implementar um código utilizando um vetor com 2
> dimensões.
>
> Poderiam me dar uma dica de onde está o erro?
> O código segue abaixo:
>
>
> #abre arquivo de frases, uma frase por linha: frase1: xxxx; frase2: yyyyyy;
> frase3: zzzzz
> open(my $frases, "set.txt") or die "Nao foi possivel abrir o arquivo: $!";
>
>
Puxa, ninguém sugeriu o meu artigo sobre isto :'( -
http://sao-paulo.pm.org/artigo/2010/analisedastecnicasparaabrirelerarquivos


>
> my @vetor=$frases;
>

Isto não faz o menor sentido, pois vc está atribuindo um elemento a uma
array, e este elemento é um file-handle de uma arquivo. Tem certeza que é
isto mesmo ?


> my $pontuacao=0;
> my $i=0;
>
> #insiro a frase a pontuacao em um vetor de duas dimensoes: posicao frase e
> posicao pontuacao
> while (<$frases>) {
> $vetor[$i] = [$frases, $pontuacao];
> $i++;
> }
>
>
Olhe isto parece uma confusão de outras linguagem de programação, então vou
tentar explicar como funciona uma matriz multidimensional.

em C, você teria algo assim

<code C>

#include <stdio.h>

#define ROW  5
#define COL  5

int main(void) {

  int   i, j;
  float matrix2D[ROW][COL]; # aqui você um vector com 2 endereço de
memória com 5 x o tamanho de um float

  printf("Entre com os elementos da matriz :");
  for (i = 0; i < ROW; i++) {


    for (j = 0; j < COL; j++) {
      printf("\nEntre com o elemento [%d][%d] : ", i, j);


      scanf("%f", &matrix2D[i][j]);
  }
}

</code C>

A idéia básica para criar matriz multi-dimensional é você utilizar espaços
de memórias diferentes e associar valores com isto. No caso do exemplo
assim, eu estou declaro 2 endereçamento de memórias. O computador
(compilador) não tem menor idéia de que isto seja uma matrix
multi-dimensional, então você é responsável por criar e manter o
relacionamento entre os dados. O exemplo acima é a maneira mais básica de
fazer isto.

Para fazer isto em Perl, temos algumas alternativas, podemos fazer da
seguinte maneira :

<perl_1>
use strict;

my @dim_1 = qw(1 2 3);
my @dim_2 = qw(um dois tres);

# crio um array de array (AoA) com 2 elementos (o elemento 0 e o elemento 1)
que possuem referências para outras array.
my @matriz = ( \@dim_1, \@dim_2);

say $matriz[0][1]; # resultado será '2'
say $matriz[1][1]; # resultado será 'dois'

</perl_1>

Claro que existe outras alternativas, mas eu recomendo você dar uma olhada
no perllol (perldoc perllol).


> #imprimir todas as frases seguido de sua pontuacao : print $vetor->[$i],
> "=", $vetor->[$i], "\n"; ????
> for my $vetor (@vetor){
> print $vetor->[0], "=", $vetor->[1], "\n";
>
> }
>
> Aguardo contato.
>
> Obrigada!
>
> Abraços
> Juliana
>
>
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20101207/9c22d32d/attachment.html>


More information about the SaoPaulo-pm mailing list