Ir ao conteúdo
  • Cadastre-se

Precizo de ajuda !


Rodrigo Dallagno

Posts recomendados

1) Considere a necessidade de um programa para gerenciar os medicamentos comercializados por uma farmácia utilizando uma lista simplesmente encadeada. Sobre cada medicamento, deve-se armazenar o seu código (atributo identificador), o seu nome, o preço de venda e a quantidade em estoque. Diante disso e considerando a existência de uma função que efetue a busca de um medicamento pelo seu código na lista, escreva as funções para:

- inserir um novo medicamento na lista, que deve sempre estar ordenada pelo valor do atributo “código”;

- remover um medicamento da lista, buscando-o previamente pelo atributo “código”;

- remover um medicamento da lista, buscando-o previamente pelo atributo “nome”;

- pesquisar a existência de um medicamento na lista, procurando-o pelo código;

- pesquisar a existência de um medicamento na lista, procurando-o pelo seu nome;

- exibir todos os dados dos medicamentos cadastrados na lista.

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

struct tipo_medicamento {

int codigo;

char nome[30];

float preco;

struct tipo_medicamento *prox;

};

struct tipo_medicamento *ptlista, *ant, *pont;

int busca_lista(int cod) {

int aux = 0; //Variável que indica se o elemento foi ou não encontrado na lista

ant = ptlista;

pont = ptlista->prox; //pont percorrerá a lista

while ((pont != NULL) && (aux == 0)) {

if(pont->codigo != cod) {

ant = pont;

pont = pont->prox;

}

else {

printf("\n\nO Medicamento ja esta cadastrado na lista");

aux = 1;

getch();

}

}

return aux;

}

void insercao() {

tipo_medicamento *pt;

int aux;

int codigo;

printf("\n\nInforme o codigo do medicamento que deseja cadastrar: ");

scanf("%i", &codigo);

aux = busca_lista(codigo); //Chamada da busca, passando como parâmetro o código que deseja-se inserir

if(aux == 0) { //aux == 0 significa que o elemento ainda não está na lista

pt = (tipo_medicamento *) malloc(sizeof(tipo_medicamento));

pt->codigo = codigo;

pt->prox = ant->prox;

ant->prox = pt;

printf("\n\nDigite o nome do Medicamento: ");

fflush(stdin);

gets(pt->nome);

printf("\nDigite o preco do Medicamento: ");

scanf("%f", &pt->preco);

printf("\n\nMedicamento inserido com sucesso");

getch();

}

}

void remocao() {

int aux;

int codigo;

printf("\n\nInforme o codigo do Medicamento que deseja remover: ");

scanf("%i", &codigo);

aux = busca_lista(codigo); //Chamada da busca, passando como parâmetro o código que deseja-se remover

if(aux == 1) { //aux == 1 significa que o elemento foi encontrado na lista

ant->prox = pont->prox;

pont->prox = NULL;

printf("\n\nMedicamento que sera removido: %s", pont->nome);

getch();

free(pont);

}

else {

printf("\n\nO Medicamento nao esta na lista");

getch();

}

}

void percorrer() {

pont = ptlista->prox;

if (pont == NULL) {

printf("\n\nA lista esta vazia");

getch();

}

else {

while(pont != NULL) {

printf("\n\nCodigo: %i", pont->codigo);

printf("\nNome: %s", pont->nome);

printf("\nPreco: %.2f", pont->preco);

pont = pont->prox;

}

getch();

}

}

main() {

int opcao = 0, aux = 0, codigo;

ptlista = (tipo_medicamento *) malloc(sizeof(tipo_medicamento));

ptlista->prox = NULL;

while (opcao != 5) {

system("cls");

printf("\n1 - Inserir Medicamento");

printf("\n2 - Remover Medicamento");

printf("\n3 - Localizar Medicamento");

printf("\n4 - Exibir todos os Medicamentos");

printf("\n5 - Sair do Programa");

printf("\n\nSua opcao: ");

scanf("%i", &opcao);

switch(opcao) {

case 1:

insercao();

break;

case 2:

remocao();

break;

case 3:

printf("\n\nInforme o codigo do Medicamento que deseja consultar: ");

scanf("%i", &codigo);

aux = busca_lista(codigo);

if (aux == 1) {

printf("\n\nNome: %s", pont->nome);

printf("\nPreco: %.2f", pont->preco);

}

else { printf("\n\nO Medicamento nao esta cadastrado na lista"); }

getch();

break;

case 4:

percorrer();

break;

case 5:

printf("\n\nDigite uma tecla qualquer para encerrar o programa.");

getch();

break;

default:

printf("\n\nVoce digitou uma opcao invalida.");

getch();

}

}

}

Precizo Ordernar eles por codigo como esta na pergunta alguem poderia me explicar ?

Link para o comentário
Compartilhar em outros sites

Um exemplo bem simples:

#include <stdio.h>#include <stdlib.h>
struct Elemento{    int numero;    struct Elemento *proximo;};
int main(void){
    struct Elemento *lista = NULL;    struct Elemento *tmpPtr = NULL;    struct Elemento *tmp = NULL;
    int contador = 0;    int i = 0;
    // Cria o primeiro Elemento    tmp = malloc( sizeof( struct Elemento) );    tmp->numero = 10;    tmp->proximo = NULL;
    if ( lista == NULL )    {        // Insere o numero 10 como primeiro da lista        lista = tmp;        contador++;    }
    // Cria o segundo elemento    tmp = malloc( sizeof(struct Elemento) );    tmp->numero = 5;    tmp->proximo = NULL;
    // Compara primeiro elemento da lista    if ( lista->proximo == NULL )    {        //Se numero novo for menor que a primeira posicao, então insere ele no lugar        if ( tmp->numero < lista->numero )        {            tmp->proximo = lista;            lista = tmp;            contador++;        }        else // Caso contrario, insere no final        {            lista->proximo = tmp;            contador++;        }
    }
    tmpPtr = lista;    tmp = lista;    i = 0;    while ( tmpPtr != NULL )    {        printf("Valor da posicao %d: %d\n", i+1, tmpPtr->numero);        tmpPtr = tmpPtr->proximo;        free(tmp); // Aproveita o 'while' para ir liberando memoria        tmp = tmpPtr;        i++;    }
    free(tmp); // Liber o ultimo elemento
    return 0;
}
Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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