Ir ao conteúdo
  • Cadastre-se
Pedro Felipe Aletto

Exercicio - programa em c

Recommended Posts

Galera, boa noite! Sou estudante de Analise e Desenvolvimento de Sistemas e estou fazendo Estruturas de dados e tem um exercício que estou com muita dúvida e dificuldade de fazer. É um programa em C onde tenho que usar os princípios de FILA e PILHA e no programa tenho que usar vetores. Veja o que exatamente eu preciso fazer:

 

"Faça dois vetores

vetor 1: fila
vetor 2: pilha

Adiciona os elementos no vetor1. Depois que ele estiver cheio, vá removendo os elementos do vetor1 e adicionando no vetor2. Como o vetor1 é uma fila, 'o primeiro que entra é o primeiro que sai'. Como o vetor2 é uma pilha, 'o último que entra é o primeiro que sai'. Assim que a fila estiver vazia e a pilha estiver cheia, vá removendo os valores da pilha e vai jogando na fila.

No final da operação você teria a fila com seus valores invertidos e a pilha vazia."

 

A teoria, a ideia da coisa eu entendi, mas estou tendo dificuldades para criar o programa. Estou precisando de uma luz.

Desde já, obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro usuário,

 

Seja bem-vindo ao Fórum do Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a sua resposta está certa ou não, ou para que possamos ajudá-lo com a sua dúvida no desenvolvimento do exercício.

 

Infelizmente, não temos como resolver seus trabalhos por você. O objetivo do Fórum do Clube do Hardware é auxiliar você a sanar suas dúvidas, e não de responde-las em seu lugar. Além disso, copiar e colar respostas que não são de sua autoria é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

Por gentileza poste uma tentativa. Assim os demais podem ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha vou te dar um empurrão.....

Crie a lista e fila:

 

Criando a lista:

typedef struct no * ponteiro;
struct no
{
 char nome[30];
 char tel[15];
 ponteiro llink;
 ponteiro rlink;	
};
//Lembrando que assim e uma lista Dinamica e nao Vetor

Inicializando a Lista dentro do Main

 

ponteiro pont;
 char nome[30];
 
 //Criação do NÓ Cabeça
 pont = (ponteiro) malloc(sizeof(struct no));
 pont->llink = pont;
 pont->rlink = pont;
 strcpy(pont->nome, nome);

 

modulo de Inclusao:

 

void inclusao(ponteiro pont)
{
 ponteiro aux;
 char nome[30];
 char tel[12];
 
 printf("\n\nNome do contato: ");
 scanf("%s", &nome);
 printf("\nTelefone: ");
 scanf("%s", &tel);

 aux = pont;
 while (aux->rlink != pont && strcmp(nome, aux->rlink->nome) == 1)
 {
  aux = aux->rlink;	
 }
  ins_dupla(aux, nome, tel);
 	
}

void ins_dupla(ponteiro p, char nome[], char tel[])
{
  ponteiro x;
  x = (ponteiro) malloc(sizeof(struct no));
  strcpy(x->nome, nome);
  strcpy(x->tel, tel);
  x->llink = p;
  x->rlink = p->rlink;
  p->rlink->llink = x;
  p->rlink = x;
}

//Lembre-se que como nao estamos usando Vetor a alocacao de memoria e dinamica e o uso de ponteiro e essencial 

modulo Remover antes de Remover Guarde o Valor Transferindo para sua Fila;

 

void remocao(ponteiro pont, char nome[])
{
 ponteiro aux;
 
 aux = consulta(pont, nome);
 if (aux != NULL)
 {
  rem_dupla(aux);	
 }
 else
 {
  printf("\nContato inexistente!");
  getch();
 }
 
}
void rem_dupla(ponteiro p)
{
 p->llink->rlink = p->rlink;
 p->rlink->llink = p->llink;
 free(p);
}

 

 

///Agora vamos pra a Fila:

 

Iniciando a fila e sua Criacao:

 

 

 

typedef struct {
          int comeco, termino, tamanho;
          int elementos[tam];
        } Fila;

//Inicializacao

Fila f;
 
 f.comeco = 0;
 f.termino = -1;
 f.tamanho = 0;

 

modulo Enfileirar

 

void enfileire(Fila * f, int valor)
{
 if (f->tamanho == tam)
 {
   printf("Fila Cheia!");
   getch();           
 }     
 else
 {
  f->termino = f->termino % tam + 1;
  f->elementos[f->termino] = valor;
  f->tamanho = f->tamanho + 1;    
 }
}

//Note que ha o uso de passagem de parametros por Referencia

 

Modulo Desinfileira

 

int desenfileire(Fila * f)
{
 int valor = -1;
    
 if (f->tamanho == 0)
 {
   printf("Fila Vazia!");
   getch();           
 }     
 else
 {
  valor = f->elementos[f->comeco];    
  f->comeco = f->comeco % tam + 1;
  f->tamanho = f->tamanho - 1;
 }
 return valor;
}

 

 

Acho que isso e tudo que você precisa para criar seu programa.
Boa Sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos, cheguei nesse ponto e buguei, deu tela azul do windows na cabeça. Eu consegui criar a FILA, passar ela pra PILHA, mas não consigo retornar o valor da PILHA pra FILA, que dai volta invertido. Veja o código como está:

 

//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;
};

//Estrutura da pilha
struct tpilha 
{
    int dados[tamanho];
    int ini;
    int fim;
};

//Variaveis globais
int op;
tfila Fila;
tpilha Pilha;

//Prototipação
void fila_entrar();
void fila_sair();
void fila_mostrar();
void inverterFila();
void inverterPilha();
void pilha_mostrar();
void pilha_mover();
void filaInvertidaMostrar();
void menu_mostrar();
void inverter();

//Função principal
int main() 
{
    setlocale(LC_ALL, "Potuguese");
   	system("color 17");
    op = 1;
    Fila.ini = 0;
    Fila.fim = 0;
    Pilha.ini = 0;
    Pilha.fim = 0;
    while (op != 0) 
	{
        system("cls");
        fila_mostrar();
        pilha_mostrar();
        filaInvertidaMostrar();
        menu_mostrar();
        scanf("%d", &op);
        switch (op) 
		{
            case 1:
            fila_entrar();
            break;
            case 2:
            pilha_mover();
            break;
            case 3:
            inverter();
            break;

        }
    }
    return(0);
}

//Adicionar um elemento no final da fila
void fila_entrar() 
{
    if (Fila.fim == tamanho) 
	{
        printf("\nA fila está cheia, impossivel adicionar um novo valor!\n\n");
        system("pause");
    }
	else
	{
        printf("\nDigite o valor a ser inserido: ");
        scanf("%d", &Fila.dados[Fila.fim]);
        Fila.fim++;
    }
}

//Retirar o primeiro elemento da fila
void fila_sair() 
{
    if (Fila.ini == Fila.fim) 
	{
        printf("\nA fila está vazia, não há nada para remover!\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("FILA: [ ");
    for (i = 0; i < tamanho; i++) 
	{
        printf(" %d ", Fila.dados[i]);
    }
    printf(" ]\n\n");
}

// Mostrar a pilha
void pilha_mostrar() 
{
    int j;
    printf("PILHA: [ ");
    for (j = 0; j < tamanho; j++) 
	{
        printf(" %d ", Pilha.dados[j]);
    }
    printf(" ]\n\n");
}
//Mostrar a fila invertida
void filaInvertidaMostrar() 
{
    int z;
    printf("FILA INVERTIDA: [ ");
    for (z = 0; z < tamanho; z++) 
	{
        printf(" %d ", Fila.dados[z]);
    }
    printf(" ]\n\n");
}

// Retirando da fila e colocando na pilha
void pilha_mover() 
{
    int j;
    Pilha.dados[Pilha.fim] = Fila.dados[0];
    Pilha.fim++;
    for (j = 0; j < tamanho; j++) 
	{
        Fila.dados[j] = Fila.dados[j + 1];
    }
    Fila.dados[j] = 0;
    Fila.fim--;

}

// Retirar da Pilha e colocar na fila invertendo os valores
void inverter() 
{
    int i;
    Fila.dados[Fila.fim] = Pilha.dados[0];
    Fila.ini++;
        for (i = 0; i < tamanho; i++) 
		{
            Fila.dados[i] = Pilha.dados[i - 1];
        }
        Fila.dados[i] = 0;
        Fila.fim--;
}

//Mostrar o menu opções
void menu_mostrar() 
{
    printf("\nEscolha uma opção:\n");
    printf("1 - Incluir na Fila\n");
    printf("2 - Passar para a Pilha\n");
    printf("3 - Passar a a Fila Invertida\n");
    printf("0 - Sair\n\n");
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×