Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Dreigon Fenriz

[Resolvido] Retirar espaços de vetor?

Mensagens Recomendadas

Dreigon Fenriz

Ola ,tenho outro probleminha,

Tenho um vetor de 4000 mil campos de strings e preciso retirar espaços da direita e esquerda de cada vetor

mas ai preciso retirar os espaços ate o primeiro caractere valido;

Vcs acham que assim daria certo ,não testei:

for i:=1 to 4000 do
for j:=1 to length(linha[i]) do
begin
TLINHA:='';
while linha[i][j]<>' ' do
TLINHA:=TLINHA+linha[i][j];
linha[i]:=TLINHA;
end;

Onde Linha é o vetor e TLINHA é uma string;

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Não, isso não serve.

Primeiro porque estás a usar no while uma condição que só executa se não encontrar espaços, segundo porque 3 ciclos encadeados para isto é overkill.

Para remover os espaços tens uma função específica chamada TRIM.

Logo, só precisas de um ciclo:

for i:=1 to 4000 do
   linha[i]:=Trim(linha[i]);

Editado por nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Eu acrescento mais umas coisas :D

1) Vectores é coisa do C! Em Pascal não há o conceito de vector, é um array.

2) Costuma-se usar constantes para definir os arrays. Imagina que precisas de mudar o programa para que trabalhe não com 4000 elementos mas sim 2000. Ora bolas, vais andar a vasculhar o código todo à procura dos "4000" e rezar que não te falhe nenhum. Com constantes, basta mudar o seu valor e já está.

3) Não uses maiúsculas para variáveis, eu sei que o @nunopicado vai dizer que é ao gosto de cada um, mas eu digo que há que manter uma certa uniformidade na forma como escrevemos os vários identificadores.

Claro que isto são outros "pormenores", mas sinceramente não são menos importantes. Pessoalmente já ando um pouco cansado de ver o pessoal chamar "vector" aos arrays... :D


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
I-NOZex

mas uma array nao deixa de ser um vector (ou matriz se for multidimensional) :P

mas sim, em pascal, e nao so, em bastantes outras linguagens, a estrutura de dados vectorial, da-se pelo nome de array :)


B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Vector e array não são a mesma coisa, apesar de serem da mesma família. Os irmãos não são a mesma pessoa, e neste caso nem sequer são gémeos verdadeiros nem falsos. Cuidado que na net há muita informação enganosa que diz coisas como "arrays são vectores cujos elementos são vectores" e mais uma quantas balelas.

Enquanto que um vector é tipicamente de tamanho dinâmico e acessível com base em ponteiros, uma array é de tamanho estático e acessível com base em índices. Em C, claro, podemos aceder a elementos com índices, mas também o podes fazer com ponteiros - é por isso que as strings em C são uma dor de cabeça. Em Pascal, não acedes aos elementos da array com ponteiros, a não ser que tenhas a sorte de acertar com o endereço de um elemento, o que é altamente improvável (há formas de obter o endereço correcto, claro, mas são raras as situações em que tal é útil, para isso usam-se listas ligadas).

Em Pascal existem arrays dinâmicas, mas ainda assim não são vectores.

Estes conceitos que coloquei são um resumo e há pormenores que são alvo de debate e que achei melhor não colocar. Quem souber melhor do assunto do que eu que se pronuncie. :P

O conceito de vector e arrays distingue-se bem em C++ (falo com base no C++11) uma vez que o std tem ambos os tipos, os quais têm subtis mas grandes diferenças.

Editado por thoga31

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Dreigon Fenriz

A função Trim creio que não serviria ,sendo que eu preciso tirar os espaços da esquerda para a direita ate o primeiro caractere valido, e da direita para a esquerda ate o primeiro caractere valido;

ou seja o começo e fim do vetor pode conter espaço e são eles que quero tirar:

Eu fiz isso funcionou mas da erro quando carrego o vetor para o programa principal;

VAR I,J,P,P2:INTEGER;
TLINHA:STRING;
BEGIN
P:=0;
P2:=0;
FOR I:=1 to X-1 do
BEGIN
TLINHA:='';
P2:=LENGTH(LINHA[i]);
FOR J:=1 TO LENGTH(LINHA[i]) DO
CASE LINHA[i][J] OF
' ':=P+1;
'A'..'Z','a'..'z','0'..'9','>',')',']','.',',','^','=','#':BEGIN P:=J;BREAK;END;
END;
FOR J:=LENGTH(LINHA[i]) DOWNTO 1 DO
CASE LINHA[i][J] OF
' ':P2:=P2-1;
'A'..'Z','a'..'z','0'..'9','>',')',']','.',',','^','=','#','/','\','!','.','<','$':BEGIN P2:=J;BREAK;END;
END;
IF (P<>0) AND (P2<>0) THEN
BEGIN
FOR J:=P-1 TO P2+1 DO
TLINHA:=TLINHA+LINHA[i][J];
LINHA[i]:=TLINHA;
END;
END;

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Lol

Oh Thoga, deixa-te lá de semânticas...

Array não é uma palavra portuguesa.

Vector é a palavra portuguesa que mais se aproxima e como tal é usada no ensino, tal como matriz para os multidimensionais.

Há vectores estatísticos e dinâmicos, nesse sentido.

Eu pessoalmente prefiro usar o termo original, mas não considero errado outro termo.

Quanto aos identificadores, onde está escrito que variaveis têm de ser em minúsculas e constantes em maiúsculas?

Deve sim ser seguido um esquema, mas esse deve pertencer ao programador ou à equipa.

Eu por exemplo não passo sem usar termos compostos em alguns identificadores. Por exemplo:

Var

fDadosFiscais:TfDadosFiscais;

Diz-me que é uma form (f) relativa aos dados fiscais e pertence à classe (T)...

Dragon:

Experimentaste o Trim?

Ele é feito mesmo para isso, retira-te os espaços antes e depois, mas não no meio.

Esse código está giro... Se o texto começar ou terminar por exemplo num ; fazes como?

Se queres eliminar espaços, tens de basear o código nesse caracter, e não nos que sobram, pois com certeza acaba por faltar algum...

Editado por nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

@Dreigon Fenriz, já é altura de indicares nas tags code a linguagem para que seja feito highlight. Vê aqui como. ;)

Mais, tens de começar a indentar o código, isso tudo ao mesmo nível torna-se ilegível.

Por último, não podes fazer case desses caracteres todos. Para isso é que tens o else:

case linha[i][j] of
  ' ' : begin
           // qq coisa
        end;
else begin
        // qq coisa
    end;
end;

@nunopicado, desde quando é obrigatório traduzir tudo para português? (isto é o que eu deduzo das tuas afirmações) Isso é lá no Brasil que traduzem tudo, e muitas vezes de forma suis generis (electrón em vez de electrão, por exemplo).

Portanto, eu uso os termos correctos e não os aproximados, e se vector (palavra existente no inglês, btw) é diferente de array, eu uso os termos correctos. Vector, em português, é um termo matemático. Vector enquanto estrangeirismo é um vector e não array. Mais uma vez, esta história do vector ser uma array vem essencial e historicamente do Brasil (nada contra os brasileiros, atenção, mas eu não gosto de muitas traduções que fazem aos estrangeirismos).

Quanto aos identificadores, tudo bem que é ao gosto de cada um, mas por haver essa falta de uniformidade é que muitas vezes se torna difícil ler códigos. Nesse aspecto adoro as linguagens case-sensitive (desde que estejam bem desenhadas nesse aspecto), como por exemplo Haskell - ele é muito rígido na forma como escreves identificadores, pelo que sabes sempre do que se trata determinada coisa. Um argumento de nome [tt]Linha[/i] é rejeitado, pois as palavras Capitalizadas estão reservadas para tipos de dados e mais nada.

Editado por thoga31

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

:) eu não disse que é obrigatório.

Disse inclusivamente que eu pessoalmente prefiro o termo original.

Mas que esse é o nome em Portugal, é! (Portugal, no Brasil não sei).

Tudo maiúsculas eu usava no início... Parecia-me bem, pobre de mim! :P

Dos identificadores, se houver uma estrutura bem seguida, mesmo que não a conheças rapidamente a aprendes.

Se vires num programa meu na secção das constantes todas começadas por c quanto tempo achas que o teu cérebro precisa para no meio do programa reconheceres uma quando a vires?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Dos identificadores, se houver uma estrutura bem seguida, mesmo que não a conheças rapidamente a aprendes.

Se vires num programa meu na secção das constantes todas começadas por c quanto tempo achas que o teu cérebro precisa para no meio do programa reconheceres uma quando a vires?

Não demoro, em princípio. Mas repara, a ideia é uniformizar a escrita de código para todos os programadores. O problema é que, por exemplo em Pascal, nunca houve bem uma linha de recomendações, e então cada um tem o seu estilo, e a cada código temos de nos adaptar a um novo estilo.

Tu vês o meu código e vês as constantes todas em maiúsculas, mas eu vejo o teu e é iniciado por "c", mas vamos a outro código e... well... sempre que vamos ver um código, não o podemos começar logo logo a ler uma vez que nos temos de adaptar ao estilo primeiro.

Em Haskell, por exemplo, já estás previamente adaptado e ponto final. Vês a meio Batatas que não reparaste no início - eu já sei que é um tipo de dados, pois está Capitalizado. Vamos para Pascal... pois é. Até com métodos nós mesmos nem sempre somos uniformes - reparar que fazes writeln mas depois Trim e outros Capitalizados. Nem tu és 100% uniforme no teu código, e isso pode ser chato até certa medida.

Eu sei que tu vais argumentar, mas garanto-te que se trabalhasses mais com linguagens rígidas neste aspecto começarias a ver as maravilhas da uniformidade, e não quererias outra coisa. Eu mesmo só me apercebi disso quando comecei a aprender Haskell ;)

Editado por thoga31

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Lol

Só dois argumentos para acabar:

1. A programação é uma arte: cada artista tem um estilo, mas é impossível que todos os artistas tenham o mesmo estilo! ;)

2. Tenho estado todo o dia a responder do telemóvel... Não me peças uniformização aqui por favor! :P


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
I-NOZex

Vector e array não são a mesma coisa, apesar de serem da mesma família. Os irmãos não são a mesma pessoa, e neste caso nem sequer são gémeos verdadeiros nem falsos. Cuidado que na net há muita informação enganosa que diz coisas como "arrays são vectores cujos elementos são vectores" e mais uma quantas balelas.

Enquanto que um vector é tipicamente de tamanho dinâmico e acessível com base em ponteiros, uma array é de tamanho estático e acessível com base em índices. Em C, claro, podemos aceder a elementos com índices, mas também o podes fazer com ponteiros - é por isso que as strings em C são uma dor de cabeça. Em Pascal, não acedes aos elementos da array com ponteiros, a não ser que tenhas a sorte de acertar com o endereço de um elemento, o que é altamente improvável (há formas de obter o endereço correcto, claro, mas são raras as situações em que tal é útil, para isso usam-se listas ligadas).

Em Pascal existem arrays dinâmicas, mas ainda assim não são vectores.

Estes conceitos que coloquei são um resumo e há pormenores que são alvo de debate e que achei melhor não colocar. Quem souber melhor do assunto do que eu que se pronuncie. :P

O conceito de vector e arrays distingue-se bem em C++ (falo com base no C++11) uma vez que o std tem ambos os tipos, os quais têm subtis mas grandes diferenças.

Por acaso achava que ponteiros era outra coisa diferente xD

mas epah, esta parte aprendi foi na escola, e ja sabes como é o ensino secundario nisto... baboseiras...


B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Por acaso achava que ponteiros era outra coisa diferente xD

mas epah, esta parte aprendi foi na escola, e ja sabes como é o ensino secundario nisto... baboseiras...

Meu filho, está tudo dito :D

Desde que vi um aluno usar procedimentos num exercício que assim o exigia (uso repetitivo do mesmo código) e a professora dizer "estes miúdos só complicam", e ainda dizer para meter tudo no bloco principal, já nada me admira.

Editado por thoga31

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Meu filho, está tudo dito :D

Desde que vi um aluno usar procedimentos num exercício que assim o exigia (uso repetitivo do mesmo código) e a professora dizer "estes miúdos só complicam", e ainda dizer para meter tudo no bloco principal, já nada me admira.

:D Essa é das boas!

Até porque um procedimento é uma coisa mesmo muito complicada!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
I-NOZex

mesmo xD

eu, que pouco sabia da pascal, tinha bases de delphi (tinha começado tipo a meses), ensinei la muita porcaria ao prof!

ele nem sabia que:

if (batatas = couves) then
   write('bela baboseira pá!');
else
   write('pois claro!');

dava erro xD ( ponto e virgula pois claro)

e tanta outra treta... tipo a biblioteca CRT fui eu que implementei la o uso xD

mas, ya essa parte dos vectores e ponteiros foi mt mal explicado e para ajudar, como consequencia, ja nao me recordo muito bem, mas espero aliviar a memoria disso em algoritmia (p*ta de sorte, a prof deve ser o 1º ano dela e nao explica nada, diz as cenas e fica a pensar se o q disse esta certo... coitado de qem foi para la as cegas!)

Editado por thoga31
Correcção do GeSHi

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Uhh, o clássico do ponto e vírgula. Nunca me canso de rir com essa :P

@nunpicado, e a tua do gotoxy? Também é boa :D

heheheh

Só para quem não conhece:

Prof a ensinar o GotoXY, teima que os parametros a usar são GotoXY(Y,X);

Aqui o Picado diz que não, que é X,Y, como diz o proprio nome do procedimento.

A prof continua a teimar.

A turma fica contra mim, e diz que eu às tantas penso que sei mais que a prof.

A prof para terminar por ali diz que no fim da aula testamos no PC.

O Picado cala-se.

No fim da aula tudo a sair, o Picado puxa tudo para dentro: Não sai ninguém sem tirarmos a limpo a cena.

Testa-se: Pois é, afinal o Picado tinha razão!

Desculpa da prof: Estou mais habituada ao Locate do Basic...

Editado por nunopicado
  • Voto 2

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Moral da história: o Picado pica quando é picado... :D

Moral da história: Quando tenho a certeza de estar certo, não me calo nem por decreto!

O que não deixa de ser chato quanto tenho a certeza de estar certo, e depois vai-se a ver e não estou! :D :D

Claro que nesses casos, sou gajo para dar a mão à palmatória!

Editado por nunopicado
  • Voto 2

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Mas pelo menos esperamos sempre que o topico esteja resolvido para continuar em offtopic...

Ou então não!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
passarito

heheheh

Só para quem não conhece:

Prof a ensinar o GotoXY, teima que os parametros a usar são GotoXY(Y,X);

Aqui o Picado diz que não, que é X,Y, como diz o proprio nome do procedimento.

A prof continua a teimar.

A turma fica contra mim, e diz que eu às tantas penso que sei mais que a prof.

A prof para terminar por ali diz que no fim da aula testamos no PC.

O Picado cala-se.

No fim da aula tudo a sair, o Picado puxa tudo para dentro: Não sai ninguém sem tirarmos a limpo a cena.

Testa-se: Pois é, afinal o Picado tinha razão!

Desculpa da prof: Estou mais habituada ao Locate do Basic...

ehehehe

Tenho uma situação igualzinha com um prof. (muito presunçoso por sinal, e foi o que me deu mais gozo) no ensino superior.

A duvida situava-se com as diferenças ou não do Text e o File of Char.

Enfim... vidas!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.