Ir ao conteúdo
  • Cadastre-se

C++ Script de fila, para incluir mais 2 variaveis.


Posts recomendados

Estou tentando aprender um pouco sobre C++,  e estou tentando programar uma fila, onde seja solicitado o numero de R.A, nome da pessoa e o numero de telefone, porém estou esbarrando em alguns problemas, consigo que ele me solicite a inclusão do número de R.A, e entre numa fila onde ele entre e seja o primeiro a sair.

Mas como incluo nessa fila mais de um dado para armazenar, e depois mostrar.

Tipo Aluno 1 = numero de R.A, nome da pessoa e o numero de telefone.

       Aluno 2 = numero de R.A, nome da pessoa e o numero de telefone.

 

Deixa meu Script. Ele esta rodando, mas preciso incluir mais 2 variáveis.

//Bibliotecas
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
//Constantes
#define tamanho 5
//Estrutura da Fila
struct tfila {
int dados[tamanho];
int ini;
int fim;
};
//Variáveis globais
struct tfila fila;
int op;
//Protipação
void fila_entrar();
void fila_sair();
void fila_mostrar();
void menu_mostrar();
//Função principal
int main(){
setlocale(LC_ALL, "Portuguese");
op = 1;
fila.ini = 0;
fila.fim = 0;
while (op != 0) {
system("cls");
fila_mostrar();
menu_mostrar();
scanf("%d", &op);
switch (op) {
case 1:
fila_entrar();
break;
case 2:
fila_sair();
break;
}
}
return(0);
}
//Adicionar um elemento no final da Fila
void fila_entrar(){
if (fila.fim == tamanho) {
printf("\nA fila está cheia, volte outro dia!\n\n");
system("pause");
}
else {
printf("\nDigite seu R.A: ");
scanf("%d", &fila.dados[fila.fim]);
fila.fim++;
}
}
//Retirar o primeiro elemento da Fila
void fila_sair() {
if (fila.ini == fila.fim) {
printf("\nFila vazia, mas logo aparece alguém!\n\n");
system("pause");
}
else {
int i;
for (i = 0; i < tamanho; i++) {
fila.dados[i] = fila.dados[i+1];
}
fila.dados[fila.fim] = 0;
fila.fim--;
}
}
//Mostrar o conteúdo da Fila
void fila_mostrar() {
int i;
printf("[ ");
for (i = 0; i < tamanho; i++) {
printf("%d ", fila.dados[i]);
}
printf("]\n\n");
}//Mostrar o menu de opções
void menu_mostrar() {
printf("\nEscolha uma opção:\n");
printf("1 - Incluir na Fila\n");
printf("2 - Excluir da Fila\n");
printf("0 - Sair\n\n");
}

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Nicholas_PG_City disse:

e entre numa fila onde ele entre e seja o primeiro a sair.

 

É isso mesmo? Uma pilha? Ele entra e é o primeiro a sair? LIFO, last in first out? Em geral na noção de fila a ordem é inversa, FIFO, first in first out na literatura.

 

1 hora atrás, Nicholas_PG_City disse:

/Variáveis globais
struct tfila fila;
int op;
//Protipação
void fila_entrar();
void fila_sair();
void fila_mostrar();
void menu_mostrar();
//Função principal
int main(){

 

Evite a todo custo usar isso. Variáveis globais são um pesadelo de manutenção. Só vai ter mais trabalho, mais erros, mais tempo testando e não vai ganhar nada. São proibidas em todo lugar, escolas e empresas.

 

Entenda que uma função void sem argumentos é um buraco negro: nada entra, nada retorna. Seu programa passa a girar em torno de variáveis globais. 

 

Como só tem um "globo"  suas funções tratam uma única variável, uma única estrutura. Isso vai contra o próprio sentido de escrever uma função.

 

Sua função fila_entrar() por exemplo só entra em uma única fila. Pode imaginar realmente que alguém escreva um programa sério com uma função para uma fila só? 

 

Comente o que está fazendo ou porque está fazendo de um certo modo, para orientar a você mesmo daqui um mês  se for ver esse programa. Evite comentários tipo 

 

//Função principal
int main(){

// ...

 

É fato conhecido que main() é a função principal de todo programa C para a console.

 

A estrutura da fila

 

struct tfila {
int dados[tamanho];
int ini;
int fim;
};

 

Acho que deve ter na fila já os parâmetros de tamanho e capacidade. Facilita muito as coisas e não por acaso é sempre implementado assim. 

 

Sobre Script de fila, para incluir mais 2 variáveis você deve pensar no simples: os dados. Escreva em torno dos dados. 

A fila como escreveu é um vetor de 5 int. E Você precisa de 5 (RA + nome + telefone). Faça apenas isso.

 

Compare com algo assim:

 

typedef struct
{
	char		RA[8];
	char		nome[30];
	char		telefone[20];

}	Dado;


typedef struct 
{
	Dado		dado[tamanho];
	int 		ini;
	int 		fim;
	unsigned	n; // quantos tem agora
	unsigned    capacidade; // quantos cabem
  
}	Fila;

 

Em que você pode declarar diretamente uma fila.

 

Mas entenda que se está criando a fila inteira já de início talvez tenha que pensar melhor nos ponteiros de início e fim, que serão apenas índices nesse caso. Ao apagar elementos vai mover todo mundo? Ao inserir vai sempre colocar no fim? Vai marcar os registros "apagados"  por exemplo?

 

Por essa razão nesses casos cada elemento da fila tem o índice do anterior e do próximo.

 

Sugiro pensar nessas coisas e reescrever seu programa. Vai perder menos tempo.

Link para o comentário
Compartilhar em outros sites

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...