Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Rodrigo Dallagno

Precizo de ajuda !

Recommended Posts

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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como é uma lista encadeada, você já poderá inseri-los na ordem, bastando comparar o código que será inserido com os já existentes da lista, assim, quando terminar de cadastrar todos, a lista já estará ordenada.

Compartilhar este post


Link para o post
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;
}

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






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

×