Ir ao conteúdo

Posts recomendados

Postado

Boa noite, pessoal,

 

estou desenvolvendo um programa que trabalha com filas, e a proposta do exercício é que eu faça 3 filas com prioridades diferentes, mas ando tendo algumas dificuldades para inserir dados nas filas. Se, por exemplo, eu chamo a função da seguinte maneira, a fila 1 deve armazenar os valores [A, G], a fila 2, somente o C e a 3, somente o F.

fprioridade('A', 1);
fprioridade('C', 2);
fprioridade('F', 3);
fprioridade('G', 1);

O problema é que ao printar a fila 1, ela está armazenando desse jeito: [A,A,A,G]. Esse problema se repete com as outras filas também. Gostaria de saber o por que disso e como consertar esse erro. Segue código completo abaixo.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct fila{
	char vet[7];
	int front, rear; 
}TFila;

int next(int n);
void destroy(TFila *f);
int isfull(TFila *f);
int isempty(TFila *f);
void create(TFila *f);
void store(TFila *f, char x);
char retrieve(TFila *f, char vet);
void fprioridade(char x, int prioridade);
void retira(TFila *f);

int main(void){

	fprioridade('A', 1);
	fprioridade('C', 2);
	fprioridade('F', 3);
	fprioridade('G', 1);
	return 0;
}

void fprioridade(char x, int prioridade){
	TFila FP1, FP2, FP3;
	create(&FP1);
	create(&FP2);
	create(&FP3);
	if(prioridade == 1){
		store(&FP1, x);
	}
	else if(prioridade == 2){
		store(&FP2, x);
	}else{
		store(&FP3, x);
	}
	printf("%s\n", FP1.vet);
}


int next(int n){
	return (n+1) % 7;
}

void create(TFila *f) {
	f->rear = f->front = 0;
}

void destroy(TFila *f){
	f->front = f->rear;
}

int isfull(TFila *f){
	if (next(f->rear) == f->front) return 1;
	else return 0;
}

int isempty(TFila *f){
	if (f->rear == f->front) return 1;
	else return 0;
}


void store(TFila *f, char x){
	if(isfull(f)){
		printf("overflow\n");
		abort();
	}
	f->vet[f->rear] = x;
	f->rear = next(f->rear);
}

char retrieve(TFila *f, char vet){
	char aux;
	if(isempty(f)){
		printf("underflow\n");
		abort();
	}
	aux = f->vet[f->front];
	f->front = next(f->front);
	return aux;
}
	

 

Postado

Você tem um vetor de 7 posições em cada fila, você precisa controlar em qual posição do vetor o elemento será inserido. Ou quer acrescentar algum detalhe a mais?

Postado
3 horas atrás, PG19 disse:

void fprioridade(char x, int prioridade){
	TFila FP1, FP2, FP3;
	create(&FP1);
	create(&FP2);
	create(&FP3);
	if(prioridade == 1){
		store(&FP1, x);
	}
	else if(prioridade == 2){
		store(&FP2, x);
	}else{
		store(&FP3, x);
	}
	printf("%s\n", FP1.vet);
}

 

Olá, todos bem?

 

 

Então, com relação as variáveis dessa função que são do tipo auto. Em tese, a fila 1 ... não existe.

 

As variáveis/todas elas por padrão são do tipo auto, assim sendo, esse tipo se destrói quando a função/ou escopo a qual pertencem termina. Que é exatamente o caso dessa função: fprioridade, pois para toda vez em que a função é chamada suas variáveis ( FP1, FP2, FP3; x, prioridade ) são liquidadas quando a função termina. Se isso está/ou não está acontecendo, temos aqui um erro de lógica. Estou com pouco de dúvida, porque você me passa a impressão de que essas variáveis persistem na memória Stack RAM mesmo pertencendo-as a classe auto.

 

Como (O problema é que ao printar a fila 1, ela está armazenando desse jeito: [A,A,A,G])?

Para mim, não existe armazenamento.

 

 

O.k. !? Até.

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!