Ir ao conteúdo
  • Cadastre-se

C++ Implementar algoritmo de ordenação código em c++,programa de estoque de farmácia


Posts recomendados

#include <iostream>
#include<conio.h> 
 
//add: códigos q adicionei; 
//sub: códigos q tirei(deixando comentado)

/*

Fazer >>>>>>>>>>>> Equipe de estrutura de Dados 
Acrescentar cadastro (string, int)
Acrescentar  o Max e Min (int)
Acrescentar = ponteiro,alocação dimanica ,vetores ,algum algoritmo de ordeção
case,funçao recursiva,while,if e else; 
*/

using namespace std;

struct farm_estoque 
{
	string nome;
	string tipo;
	int codigo;
	int saldo;
	int quant;
	int num; //add
	farm_estoque *prox; //add
	
	
	void insere(string far_nome,string far_tipo, int far_codigo, int far_saldo)
	{
	 	nome=far_nome;
	 	tipo=far_tipo;
	 	codigo=far_codigo;
	 	saldo=far_saldo;
	 	saldo=0;
	}
	
	void imprimi()
	{
	cout<<   " ||||||||||||||||||||||||||||" <<endl;
	cout<<   " ||||||||||||||||||||||||||||" <<endl;
	cout<<   " |||| Gestao de Estoque  ||||" <<endl;
	cout<<   " ||||||||||||||||||||||||||||" <<endl;
	cout<<   " ||||||||||||||||||||||||||||" <<endl <<endl;
	}
	
	void imprimi1()
	{
		cout << "Medicamento:|"<< nome <<"|"<<"\n";
		cout << "Tipo:" <<tipo <<"\n";
		cout << "Codigo:" <<codigo <<"\n";
		cout << "Quantidade atual:" <<quant<<"\n";
		cout << "Quantidade:"<<saldo <<"\n \n";
	}
	
	void mudaquant(int mSaldo)
		{
			quant=mSaldo;
			
			if(quant>saldo){
				quant=saldo;
			}
			if(quant>0){
				quant=0;
			}
		}
};

farm_estoque *inicio = NULL; //add
farm_estoque *fim = NULL; //add
farm_estoque *aux; //add 
farm_estoque *anterior; //add

int opcao, numero, achou; //add

int main ()
{
	
	farm_estoque *estoque=new farm_estoque[5];
		farm_estoque setor1, setor2, setor3, setor4, setor5,cabecalho;
		
		estoque[0]=setor1; estoque[1]=setor2, estoque[2]=setor3, estoque[3]=setor4, estoque[4]=setor5;
	
	
		estoque[0].insere("Profenid", "comprimido", 002,100);
		estoque[1].insere("Luftal","gotas",003,100);
		estoque[2].insere("Flagil","Frasco-Ampola",004,100);
		estoque[3].insere("Buscopam","comprimido", 005,100);
		estoque[4].insere("Buscopam","ampola", 006,100);
		
		cabecalho.imprimi();
		
		/*for(int i=0; i<5;i++){
			estoque[i].imprimi1();
		}*/ //sub
		
		do
		{
		    cout<<"\n MENU DE OPÇÕES \n";
		    cout<<"\n 1 - Inserir na lista";
		    cout<<"\n 2 - Consultar toda a lista";
		    cout<<"\n 3 - Remover da lista";
		    cout<<"\n 4 - Esvaziar a lista";
		    cout<<"\n 5 - Sair";
		    cout<<"\n Digite sua opção: ";
		    cin>> opcao;
		    
		    if (opcao < 1 || opcao > 5 )
		    {
		        cout<<"\n******************"<<endl;      
		        cout<<" Opção Inválida!! "<<endl;
		        cout<<"******************"<<endl;
		    }
		    
		    if (opcao == 1)
		    {
		        cout<<"Insira o nome do medicamento: ";
		        farm_estoque *novo = new farm_estoque();
		        cin>> novo -> nome;
		        
		        cout<<"Insira o tipo de remédio: ";
		        //farm_estoque *novo = new farm_estoque();
		        cin>> novo -> tipo;
		        
		        cout<<"Digite o código do produto (somente números): ";//se digitar letras entra em loop infinito
		        //farm_estoque *novo = new farm_estoque();
		        cin>> novo -> codigo;
		        
		        cout<<"Digite a quantidade a ser inserida: ";
		        cin>> novo -> quant;
		        
		        if (inicio == NULL)
		        {
		            inicio = novo;
		            fim = novo;
		            novo -> prox = NULL;
		        }
		        else
		        {
		            anterior = NULL;
		            aux = inicio;
		            
		            while (aux != NULL && novo -> nome > aux -> nome)
		            {
		                anterior = aux;
		                aux = aux -> prox;
		            }
		            if (anterior == NULL)
		            {
		                novo -> prox = inicio;
		                inicio = novo;
		            }
		            else if (aux == NULL)
		            {
		                fim -> prox = novo;
		                fim = novo;
		                fim -> prox = NULL;
		            }
		            else
		            {
		                anterior -> prox = novo;
		                novo -> prox = aux;
		            }
		        }
		        cout<<"=========================== \n";
		        cout<<"Dados inseridos na lista!!";
		        cout<<"\n===========================";
		        
		        
		    }
		    if (opcao == 2)
		    {
		        if (inicio == NULL)
		        {
		            cout<<"Lista vazia!!";
		        }
		        else
		        {
		            cout<<"\n Consultando a lista ... \n";
		            aux = inicio;
		            while (aux != NULL)
		            {
		                cout<<"NOME: ";
		                cout<< aux -> nome <<" ";
		                cout<<"\nTIPO DE REMÉDIO: ";
		                cout<< aux -> tipo <<" ";
		                cout<<"\nCÓDIGO DO PRODUTO: ";
		                cout<< aux -> codigo <<" ";
		                cout<<"\nQUANTIDADE DE ITENS: ";
		                cout<< aux -> quant << " \n";
		                cout<<"===========================\n";
		                aux = aux -> prox;
		            }
		        }
		    }
		    if (opcao == 3)
		    {
		        if (inicio == NULL)
		            cout<<"Lista vazia!!";
		 
		        else
		        {
		            cout<<"\n Digite a código do item a ser removido: ";
		            cin>> numero;
		            
		            aux = inicio;
		            anterior = NULL;
		            achou = 0;
		            
		            while (aux != NULL)
		            {
		                if (aux -> codigo == numero)
		                {
		                    achou = achou +1;
		                    if (aux == inicio)
		                    {
		                        inicio = aux -> prox;
		                        delete(aux);
		                        aux = inicio;
		                    }
		                    else if (aux == fim)
		                    {
		                        anterior -> prox = NULL;
		                        fim = anterior;
		                        delete(aux);
		                        aux = NULL;
		                    }
		                    else
		                    {
		                        anterior -> prox = aux -> prox;
		                        delete(aux);
		                        aux = anterior -> prox;
		                    }
		                }
		                else
		                {
		                    anterior = aux;
		                    aux = aux -> prox;
		                }
		            }
		            if (achou == 0)
		                cout<<"Item não encontrado";
		            else if (achou >= 1)
		                cout<<"Item removido " << achou << "vezes";
		        }
		    }
		    if (opcao == 4)
		    {
		        if (inicio == NULL)
		            cout<< "Lista vazia!!";
		    
		     else
		        {
		         aux = inicio;
		         while (aux != NULL)
		            {
		                inicio = inicio -> prox;
		                delete(aux);
		                aux = inicio;
		            }
		                cout<< "Lista esvaziada";
		        
		        }
		    }
		        getch();
		    }
		    while (opcao != 5);
		     }
	
	//return 0; sub

o código se trata de estoque de medicamentos de uma farmácia ,eu precisaria implementar 

algum algoritmo de ordenação,se alguém puder me ajudar por gentileza,estou um pouco perdida onde encaixar algum tipo de algoritmo de ordenação.

 

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Olá!

 

Seu programa é quase um programa C e isso não é vantagem. C++ é muito mais expressiva para escrever qualquer coisa.

 

conio.h

 

Isso é dos anos 80 e não entendo como ainda existe e como pode aparecer num programa C++ em 2022.

 

listas ligadas

 

C++ oferece listas e um número enorme de estruturas na biblioteca padrão. Não pode usar isso?

Entenda que uma lista que tem ponteiros para um lado só é mais complicada e não mais simples de programar. Com ponteiros para um lado só, next no seu caso. navegar é um pesadelo.

 

classificando os dados

 

Escreva em torno dos dados.

 

Seus dados são um estoque e não um produto. 

 

Não acha estranho não ter uma classe Estoque em seu programa? É. E a falta disso só vai tornar sua vida mais difícil.

 

Classificar envolve a noção de comparar. Basta isso. C++ tem sort() que pode usar para comparar e classificar. 

 

Se Estoque for um simples vetor de Produto e tiver uma função de comparação entre dois produtos basta uma linha para classificar por qualquer critério, como é em C com o qsort.

 

Recomendo muito escrever a classe Estoque mesmo que seja só o óbvio array de Produto. Fica muito simples depois disso. E esquecer isso de conio.h. Onde achou isso que nem está no C muito menos no C++ e vem de uma biblioteca do Apple II do início dos 80, quando foi transportado para o Turbo C da Borland que vinha em 2 diskettes de 1.2Mb?

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, rafahmacchado disse:

@arfneto Sim,na minha ignorância achei que estava usando o C++,preciso estudar e treinar mais, e corrigir  este código.

 

Sim, esta usando C++. E C++ compila muita coisa de C. E C++ é uma linguagem enorme e complicada. Só que é muito mais poderosa então é muito mais simples representar e criar coisas em C++ que em C., de modo que se usar apenas um pequeno conjunto de C++ ali na fronteira com C vai ter muito mais trabalho e muito menos resultado, gastando seu tempo à toa.

 

Repito: escreva em torno dos dados.

 

Não sei se tem restrição sobre usar algo da biblioteca padrão de C++, mas essa linguagem tem listas disponíveis, basta declarar e usar.

 

Sobre as listas

 

Entenda que se seu exercício é sobe criar uma lista mesmo --- e assim não pode usar as da linguagem C++ --- então a lista em si é claro uma estrutura de dados e isso também não está em seu programa. E claro que vai te custar caro. Não dá pra imaginar que um programa de lista encadeada não tenha uma estrutura lista e mesmo assim fique mais fácil e não mais difícil de escrever...

 

Uma lista é uma estrutura, uma classe na terminologia C++. E uma lista tem nós. E esses nós tem ou apontam para um produto no seu caso. Quanto mais perto estiver disso nos seus dados menos trabalho vai ter para escrever o programa.

 

Não sei se foi ideia sua usar uma lista para o estoque e se foi entenda que listas ligadas sã uma escolha ruim para coisas que tem que manter em ordem e eventualmente classificar por outra ordem. Estaria melhor servida com vetores ou arrays ou conjuntos.

 

 

Ficaria mais claro se você postasse o enunciado completo ou a especificação do que está tentando fazer

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, rafahmacchado disse:

Estrutura de dados a única exigência seria a linguagem c++ e usar algum algoritmo de ordenação,só que estou com muita dificuldade na linguagem

 

E como chegou a esse lance de estoque e farmácia então? E as listas encadeadas? Precisa programar as estruturas de dados imagino, então não pode usar as listas da linguagem C++? E não pode usar o sort da linguagem?  Ajudaria você dizer qual a dificuldade com a linguagem. Fica mais fácil ajudar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, rafahmacchado disse:

@arfnetosinceramente não sei ,por isso pedi ajuda aqui.

 

 

Eu fiz acho que 5 perguntas.  O que não sabe?

  • como chegou a esse lance de estoque e farmácia então?
  • E as listas encadeadas? Essa foi a estrutura de dados que escolheu? Como escolheu?
  • Precisa programar as estruturas de dados imagino, então não pode usar as listas da linguagem C++?
  • E não pode usar o sort da linguagem? 
  • Ajudaria você dizer qual a dificuldade com a linguagem. Fica mais fácil ajudar. Pode falar de uma dificuldade ao menos?

Sobre o código

 

struct farm_estoque
{
    string        nome;
    string        tipo;
    int           codigo;
    int           saldo;
    int           quant;
    int           num;   // add
    farm_estoque* prox;  // add

    void insere(
        string far_nome, string far_tipo, int far_codigo,
        int far_saldo)
    {
        nome   = far_nome;
        tipo   = far_tipo;
        codigo = far_codigo;
        saldo  = far_saldo;
        saldo  = 0;
    }

 

Isso é uma mistura de uma estrutura de produto com um nó de lista encadeada com uma lista encadeada. E o Estoque seria a lista. 

 

farm_estoque *inicio = NULL; //add
farm_estoque *fim = NULL; //add
farm_estoque *aux; //add 
farm_estoque *anterior; //add

 

Por não ter escrito em torno dos dados aparecem aí nada menos que 4 ponteiros para a estrutura. Vai ter muito trabalho para concluir assim: esses ponteiros seriam basicamente a lista que seu programa não tem. Porque inicializou apenas 2 dos 4?

 

    farm_estoque* estoque = new farm_estoque[5];
    farm_estoque  setor1, setor2, setor3, setor4, setor5,
        cabecalho;

    estoque[0] = setor1;
    estoque[1] = setor2, estoque[2] = setor3,
    estoque[3] = setor4, estoque[4] = setor5;

 

E aqui está usando new para alocar um vetor de ponteiros em main. Ao mesmo tempo em que declara 5 estruturas. E depois atribui os endereços das estruturas para os ponteiros. Podia fazer isso em uma linha só, mas porque precisa de ponteiros para essas variáveis que estão em main e que assim vão estar "vivas" durante todo o programa?

 

E onde está o delete[] para apagar isso?

 

Uma maneira de ver os dados

 

Um dado pode ser algo simples, um Produto

 

struct Produto
{
    string nome;
    string tipo;
    int    codigo;
    int    saldo;
    int    quant;
    int    num;

    Produto(
        string far_nome, string far_tipo, int far_codigo,
        int far_saldo)
        : nome(far_nome),
          tipo(far_tipo),
          codigo(far_codigo),
          saldo(far_saldo){};
};

 

E o estoque seria um vetor de produtos então

 

struct Estoque{    vector<Produto> prd; };

 

E a lista teria um início e um fim e um tamanho

 

struct Lista
{
    Node*  ini;
    Node*  fim;
    size_t tamanho;
}

 

E um nó da lista seria uma posição no vetor

 

struct Node
{
    size_t   pos; // posicao no estoque
    Node*    ant;
    Node*    prox;
};

 

Então do seu exemplo

 

image.png.ce7ede1530f04305606955a1f2e4529b.png 

  • Por ordem de nome uma Lista ia mostrar 1,2,3
  • Por ordem de codigo ia ser 2,3,1
  • Por ordem de quant is ser 3,1,2

Vendo apenas os dados ANTES de escrever qualquer coisa.

 

Vê a diferença em pensar assim?

 

 

Link para o comentário
Compartilhar em outros sites

Estes tópicos de trabalho de casa (ainda mais quando a pessoa se inscreve no forum exclusivamente pra pedir ajuda) são uma tristeza. Dá a impressão que a pessoa literalmente quer que alguém faça o trabalho inteiro por ela e o entregue prontinho. Sério mesmo?

 

Meu, se não consegue fazer um trabalho simples desses, das duas uma:

- O professor é um sem noção que superestima os conhecimentos dos alunos (e nesse caso vale uma conversa com ele), ou

- O nível de dificuldade é tranquilo para a turma e talvez desenvolvimento de software não seja pra você (pra se refletir).

Link para o comentário
Compartilhar em outros sites

Em 17/05/2022 às 23:14, W46n3r disse:

Estes tópicos de trabalho de casa (ainda mais quando a pessoa se inscreve no forum exclusivamente pra pedir ajuda) são uma tristeza. Dá a impressão que a pessoa literalmente quer que alguém faça o trabalho inteiro por ela e o entregue prontinho. Sério mesmo?

 

Meu, se não consegue fazer um trabalho simples desses, das duas uma:

- O professor é um sem noção que superestima os conhecimentos dos alunos (e nesse caso vale uma conversa com ele), ou

- O nível de dificuldade é tranquilo para a turma e talvez desenvolvimento de software não seja pra você (pra se refletir).

Boa tarde ,eu não pedi solução pronta para as minhas dificuldades,mas as explicações que me deram estão sendo muito útil,estava escrito em meu

post o que você disse ter entendido?E como pode afirmar que me inscrevi só para ter um exercício resolvido?

@arfneto Sim,obrigada pela explicação,como mencionaram eu não vim apenas pedir respostas prontas e ,te agradeço por ter explicado a maneira lógica que devo pensar para desenvolver,muito obrigada por ter gasto seu tempo transferindo seu conhecimento.

@arfneto

Em 13/05/2022 às 14:31, arfneto disse:

 

E como chegou a esse lance de estoque e farmácia então? E as listas encadeadas? Precisa programar as estruturas de dados imagino, então não pode usar as listas da linguagem C++? E não pode usar o sort da linguagem?  Ajudaria você dizer qual a dificuldade com a linguagem. Fica mais fácil ajudar

Meu professor disse que teríamos que usar os conteúdos que foram estudados durante o semestre,eu tinha cogitado usar apenas algum Algoritmo de ordenação,ou apenas Lista ,mas ele disse que teria que usar td que foi dado .A escolha do estoque de farmácia foi o tema que meu grupo escolheu,sinceramente estou estudando por fora pois na faculdade estão preocupados em cumprir apenas a grade e, é obrigação minha ,estudar e praticar para realmente saber o que estou fazendo.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 

Acha que isso vai te ajudar a aprender uma linguagem complicado como essa? Ou alguma linguagem? 

 

1 hora atrás, ederangelo21 disse:

( pode postar no yt em modo sigiloso e colocar o link aqui ).

 

Isso é interessante: publicar em modo sigiloso e ao mesmo tempo publicar o link num forum publico.

Link para o comentário
Compartilhar em outros sites

54 minutos atrás, arfneto disse:

 

Acha que isso vai te ajudar a aprender uma linguagem complicado como essa? Ou alguma linguagem? 

 

 

Isso é interessante: publicar em modo sigiloso e ao mesmo tempo publicar o link num forum publico.

 

Sim, concordo que é complexo, visto que talvez não seja interessante deixar expostos para família, amigo etc, porém em modo sigiloso para quem visitar essa página e que é do ramo é interessante, concordo que minha solicitação demora tempo para ser processada kkkk , em tempo, copiei o código e coloquei rodar no site https://www.onlinegdb.com/ , e gostei, coloquei Doril em estoque ! 

 

Sim, ver o resultado final, ajuda sim, pois te dá ânimo, você já vê o objetivo final, agora só falta colocar as mãos na massa !

 

 

segue print

que luxo !

farmacia c++.png

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