Problema em c++

1. Problema em c++

Haroldo Lorenci
hlorenci

(usa Outra)

Enviado em 19/10/2016 - 15:27h

Sou iniciante em c++, não consegui descobrir o problema do algoritmo da questão abaixo:
1-Na tentativa de criar um programa para testar os conceitos de filas, você escreveu o seguinte código:

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

struct node {
int info;
struct node *ptr;
}*frente, *cauda, *temp, *frente1;

int primeirodafila();
void inserir( int data);
void apagar();
void esvaziar();
void mostrar();
void criar();
void tamanho();

int count = 0;

int main () {
int no, ch, e;
criar();
while (1)
{
printf( "\n 1 - inserir um elemento;");
printf( "\n 2 - apagar um elemento;");
printf( "\n 3 - devolver o primeiro elemento;");
printf( "\n 4 - esvaziar a fila;");
printf( "\n 5 - mostrar a fila;");
printf( "\n 6 - tamanho da fila");
printf( "\n 7 - sair");
printf( "\n Digite sua escolha");
scanf_s( "%d", &ch);
switch (ch){
case 1:
printf("\n Digite o elemento:");
scanf_s("%d", &no);
inserir(no);
break;
case 2:
apagar();
break;
case 3:
e = primeirodafila();
if (e != 0){
printf("\n O primeiro da fila: %an", e);
system("Pause;");
}
else {
printf ("\n A fila vazia.Xn");
system ("Pause;");
}
break;
case 4:
esvaziar();
break;
case 5:
mostrar();
printf( "\n Digite sua escolha");
scanf_s( "%d", &ch);
break;
case 6:
tamanho();
printf( "\n Digite sua escolha: ");
scanf_s( "%d", &ch);
break;
case 7:
exit(0);
break;
default:
printf("\n Digite sua escolha");
break;
}
system("cls");
}
}
void criar() {frente = cauda = NULL;}
void tamanho() { printf( "\n Tamanho da fila: %d", count); }

void inserir( int data){
if (cauda == NULL)
{
cauda = (struct node *)malloc( 1 * sizeof( struct node));
cauda->ptr = NULL;
cauda->info = data;
frente = cauda;
}
else
{

temp = (struct node *)malloc( 1 * sizeof( struct node));
cauda->ptr = temp;
temp->info = data;
temp->ptr = NULL;
temp = cauda;
}
count++;
}

void mostrar() {

frente1 = frente;
if ((frente1 == NULL) && (cauda == NULL))
{

printf( "\nA fila vazia.\n");
return;
}
while (frente1 != cauda)
{

printf( "%d ", frente1->info);
frente1 = frente1->ptr;
}
if (frente1 == cauda)
printf( "%d", frente1->info);
}

void apagar(){
frente1 = frente;
if (frente1 == NULL)
{

printf("Xn A fila vazia");
return;
}
else
if (frente1->ptr != NULL)
{

frente1 = frente1->ptr;
printf("\n Retirado da fila o valor: %d", frente->info);
free(frente);
frente = frente1;
}
else
{

printf( "\n Retirado da fila o valor: %d", frente->info);
free(frente);
frente = NULL;
cauda = NULL;
}
count--;
}


int primeirodafila(){

if ((frente != NULL) && (cauda != NULL))
return(frente->info);
else
return 0;
}

void esvaziar(){

if ((frente == NULL) && (cauda == NULL))
printf("\nA fila vazia");
else
printf("\nA fila vazia");
system("pause");
}


No entanto, o seu programa não funcionou e você precisa encontrar onde está o erro e cabe a você garantir que o código apresentado atenda a estrutura básica de um programa contendo uma lista.Considerando as opções a seguir, marque aquela que contém a linha de código que está errada.

A temp = cauda;

B cauda->info = data;

C frente1 = frente1->ptr;

D return(frente->info);

E cauda->ptr = NULL;



  


2. Re: Problema em c++

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 19/10/2016 - 15:36h

Legal campeão, mas qual a sua opinião?
Raramente alguém "dá" a resposta pronta para algum problema.


--
Uilian Ries
Linux Counter: 521986


3. Re: Problema em c++

Haroldo Lorenci
hlorenci

(usa Outra)

Enviado em 19/10/2016 - 16:23h

Digitei todo o código no Dev-c, fui testando cada uma das alternativas e na linha frente1 = frente1->ptr; notei algo diferente, mas não tenho certeza, por isso minha dúvida amigo.


4. Re: Problema em c++

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/10/2016 - 13:56h

É difícil dar qualquer dica que não entregue a solução completa de bandeja.

Faça o seguinte: concentre-se no valores que deveriam ter cada os ponteiros frente e cauda. Para cada função que modifica a lista, veja se, ao final da operação, os ponteiros terão os valores que você acha que eles deveriam ter.