Jump to content
Fivewin Brasil

Fila(Queue)


B@rney

Recommended Posts

Ola a todos.Bom gente como todos vão notar sou novo aqui no forum e tambem estou começando a trabalhar agora com FW.

Eu estou com um programa aqui e preciso implementar no mesmo uma fila(Queue),onde eu armazene dados como nome, numero de matricula,etc, e tenha uma variavel numerica de auto incremento para registrar sua posição na fila.Mas não estou conseguindo, porque até então eu trabalhava muito com C++ e la nos utilizamos o conceito de ponteiro(*) para indicar e localizar espoços de memoria dentro do array mas no FW não sei se isso funciona.

Preciso de ajuda.

Editado por - B@rney on 06/06/2012 09:55:35

Link to comment
Share on other sites

Ola a todos.Bom gente como todos vão notar sou novo aqui no forum e tambem estou começando a trabalhar agora com FW.

Eu estou com um programa aqui e preciso implementar no mesmo uma fila(Queue),onde eu armazene dados como nome, numero de matricula,etc, e tenha uma variavel numerica de auto incremento para registrar sua posição na fila.Mas não estou conseguindo, porque até então eu trabalhava muito com C++ e la nos utilizamos o conceito de ponteiro(*) para indicar e localizar espoços de memoria dentro do array mas no FW não sei se isso funciona.

Preciso de ajuda.

Editado por - B@rney on 06/06/2012 09:55:35

Link to comment
Share on other sites

Olá Barney, seja bem vindo...

Não entendi muito bem qual o seu problema, mas

neste topico existe uma discussão boa sobre o assunto, mas se mesmo assim não clarear as duvidas poste o que vc está tentando fazer...

Sucessos

Um grande Abraço

Alessandroid=blue>

FW9.07 + xHb121 + CDX

Fico feliz com os Meus erros, pois eles me apontam a direção para o acerto.id=red>

Link to comment
Share on other sites

Acredito que este comportamento pode ser obtido com o uso de um array, veja um exemplo:


AAdd( aQueue, { "001", "Joao" } )

? Len( aQueue )

AAdd( aQueue, { "002", "Maria" } )

? Len( aQueue )

AAdd( aQueue, { "003", "Marcos" } )

? Len( aQueue )

?

? "Localizando numero 002:", aScan( aQueue, {|a| a[1] == '002' })

?

FOR i := 1 TO Len( aQueue )

IF ( aQueue[i,1] == '003' )

? 'Achei o item 3:', aQueue[i,2]

EXIT

ENDIF

NEXT

id=code>id=code>

Espero ter ajudado.

Att,

Vailton Renato

assinatura.jpg

Link to comment
Share on other sites

No caso em C++ pra eu fazer oque preciso fazer agora em fW faria desta forma:

#include "stdafx.h"

#include

#include

#define N 100

struct fila {

int ini, fim;

float vet[N];

}

Fila* criaFilaVazia(void){

Fila* f = (Fila*) malloc(sizeof(Fila));

f->ini = f->fim = 0;

return f;

}

int incremento(int i){

return (i+1)%N;

}

void push(Fila* f, float v){

if (incremento(f->fim) == f->ini) {

printf("Capacidade da fila estourou.\n");

exit(1);

}

f->vet[f->fim] = v;

f->fim = incremento(f->fim);

}

float pop(Fila* f){

float v;

if (vazia(f)) {

printf("Fila vazia.\n");

exit(1);

}

v = f->vet[f->ini];

f->ini = incr(f->ini);

return v;

}

int vazia (Fila* f){

return (f->ini == f->fim);

}

void libera (Fila* f){

free(f);

}

Mas em FW nãosei se o conceito de ponteiro(*) funciona.

Link to comment
Share on other sites

Olá Barney.

Acho que a forma como o Vailton passou é o que vc precisa.

Um grande Abraço

Alessandroid=blue>

FW9.07 + xHb121 + CDX

Fico feliz com os Meus erros, pois eles me apontam a direção para o acerto.id=red>

Link to comment
Share on other sites

Vamos lá então, desconfio que em xBase (FW,Clipper,Harbour,etc) pra fazer o que voce quer com "ponteiros" ficará desta forma utilizando array:


function criaFilaVazia

return array(0)

function push(f, v)

if (len(f) >= N)

msginfo("Capacidade da fila estourou.")

return .f.

endif

AAdd( f, v )

return .t.

function pop(f)

local v

if (len(f)<1)

msginfo("Fila vazia.")

return .f.

endif

* Fiquei com duvida nesta parte, mas acho que seria assim...

v := f[1]

aDel( f, 1 )

aSize(f,len(f)-1)

return v

id=code>id=code>Nota: Existe o tipo de dados "ponteiro" em Harbour ou xHarbour, mas não para a funcionalidade que você está acostumado pois não podem ser manipulados através da aritmética de ponteiros como existe em C e são somente leitura.

Att,

Vailton Renato

assinatura.jpg

Link to comment
Share on other sites

Bem, como vc conhece bem o C++, não existe ponteiros em FiveWin, faça o seguinte, para cada comando do C++, existe um correspondente em FW, (for, return, do while, do case, aadd, etc), conheça todos eles, aqui no forum, vc tem uma gama de exemplos, e apostilas, não se desespere, aprenda bem o FW, pois é a linguagem mais simples que existe, com um poder enorme de programação.

Com os conhecimentos que vc tem de C++, vc vai arrebentar em FW.

Não desista, pois a dor temporária, lhe dará um prazer enorme.

Espero ter ajudado.

Rikko

Guaratinguetá - SP

(12) 8829-8088

E-Mail: mkyx@ig.com.br

pardes.mky@hotmail.com

MSN:pardes.mky@hotmail.com

www.adentech.com.br

www.rmahost.com

xH 1.1.0 Hb 8.02 - BCC 55

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...