Jump to content

Recommended Posts

E aí, pessoa tudo certo?
Estou fazendo um programa que imita uma loja de informática com structs, alocação dinâmica e pilha em c e preciso da ajuda de vcs em algumas funções que não consegui fazer. Preciso que me ajudem fazer uma função para Editar um bloco especifico da pilha, outra função para Apagar um bloco especifico na pilha e uma função para Buscar valores a cima do informado pelo usuário, por exemplo: se o usuário digitar o preço 5, é pra mostrar os produtos com valores acima de 5. Vou mandar o código do que fiz aqui em baixo, mas a função excluir está errada, desconsiderem ela.

 

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

typedef struct kabum
{
    char desc [30];
    int cod;
    float valor;

    struct kabum *ant;
} p;
p *novo, *topo=NULL;


int i=0;
int quant;
FILE *arquivo;

int inserir ()
{
    printf("\n\n    QUANTOS PRODUTOS QUER CADASTRAR?: ");
    scanf("%d",&quant);

    for (i=0; i<quant; i++)
    {
        novo=(p *) malloc (2*sizeof(p));

        fflush(stdin);
        printf("\n\n    PRODUTO: ");
        gets(novo->desc);
        printf("    CODIGO: ");
        scanf("%d",&novo->cod);
        printf("    VALOR: R$");
        scanf("%f",&novo->valor);
        novo->ant=NULL;
        if(topo==NULL) //pilha vazia?
        {
            topo=novo;

        }
        else
        {
            novo->ant=topo;
            topo=novo;
        }
    }
    return (0);
}

int mostrar ()
{
    p *tmp;
    tmp=topo;
    if (tmp==NULL)   //aqui ele testa p/ saber se a pilha está fazia
    {
        printf ("\n\n     PILHA VAZIA! INSIRA UM DADO E TENTE NOVAMENTE.\n");
    }
    else
    {
        while (tmp!=NULL)
        {
            printf("\n\n    PRODUTO: %s\n", tmp->desc);
            printf("    CODIGO: %d\n",tmp->cod);
            printf("    VALOR: R$%0.2f\n\n",tmp->valor);
            tmp=tmp->ant;
        }

    }

    return (0);
}

int deletar ()
{
    char alerta;
    p *extra;
    extra = topo;
    if (topo == NULL)
    {
        printf ("\n\n     PILHA VAZIA!\n");
    }
    else
    {
        printf("\n\n      TEM CERTEZA DE DESEJA EXCLUIR A PILHA? (S/N): ");
        scanf("%c",&alerta);
        alerta=tolower(alerta);
        if (alerta=='s')
        {
            topo = topo -> ant;
            free(extra);
            printf("\n      PILHA DELETADA! \n");
        }
        if (alerta=='n')
        {
            printf("\n      PILHA NAO DELETADA! \n");
        }
        if (alerta!='s' && alerta!='n')
        {
            printf("\n\n      OPCAO INVALIDA\n");
        }
    }

    return(0);
}

int salvar()
{
    p *tmp;
    tmp=topo;

    arquivo=fopen("text.txt","wb");

    /*    if (tmp==NULL)
        {
            printf("\n\n    ERRO AO SALVAR, PILHA ESTA VAZIA. INSIRA UM DADO E TENTE NOVAMENTE! \n");
        }*/
    while (tmp!=NULL)
    {
        fprintf(arquivo,"\n\n     PRODUTO: %s \n",tmp->desc);
        fprintf(arquivo,"     CODIGO: %d \n",tmp->cod);
        fprintf(arquivo,"     VALOR: %f ",tmp->valor);
        tmp=tmp->ant;
    }

    fclose(arquivo);
    printf("\n\n    ARQUIVO SALVO COM SUCESSO!\n");


    return 0;
}

int abrir()
{
    p *tmp;
    tmp=topo;

    arquivo=fopen("text.txt","rt");

    if (arquivo == NULL)
    {
        printf("\n\n    NAO FOI POSSIVEL ABRIR O ARQUIVO. SALVE E TENTE NOVAMENTE! \n");
    }

    char frase [10000];
    while (fgets(frase, 1000,arquivo)!=NULL)
    {
        printf("%s\n",frase);
    }
    fclose(arquivo);

    return 0;
}


void sobre ()
{
    printf("\n\n");
    printf("    *================================ SOBRE ================================*\n");
    printf("    |                                                                       |\n");
    printf("    |PROGRAMA CRIADO UTILIZANDO ALOCACAO DINAMICA, STRUCTS E PONTEIROS, COMO|\n");
    printf("    |FORMA DE AVALIACAO DA DISCIPLINA DE ESTRUTURA DE DADOS, DO PROFESSOR:  |\n");
    printf("    |GUSTAVO QUIRINO E APRESENTADO EM SALA DE AULA, COM A FINALIDADE DE     |\n");
    printf("    |OBTER UMA DAS NOTAS DA SEGUNDA UNIDADE.                                |\n");
    printf("    |                                                                       |\n");
    printf("    |                          IDENTIFICACAO                                |\n");
    printf("    |                                                                       |\n");
    printf("    |IFBA - CAMPUS BARREIRAS                                                |\n");
    printf("    |TURMA: 732                                                             |\n");
    printf("    |CURSO: INFORMATICA                                                     |\n");
    printf("    |PROFESSOR: GUSTAVO QUIRINO                                             |\n");
    printf("    |COMPONENTES: LUCAS GOMES, MATEUS SENE E RICARDO CARVALHO               |\n");
    printf("    |                                                                       |\n");
    printf("    =========================================================================\n");
}

int main ()
{
    char op_menu=0, op_menu_interno=0; /*variaveis zeradas pq pode ser que o programa seja exacutado mais de uma vez
    por isso eu zerei todas, para não pegar os valores das vezes anteriores. A cada nova execução
    todas são zeradas*/

    do
    {
        printf("\n\n");
        printf("    *======================= MENU PRINCIPAL =========================*\n");
        printf("    |                                                                |\n");
        printf("    |                                                                |\n");
        printf("    |         A - INSERIR                   B - MOSTRAR              |\n");
        printf("    |                                                                |\n");
        printf("    |         C - DELETAR                   D - EDITAR               |\n");
        printf("    |                                                                |\n");
        printf("    |         E - BUSCAR                    F - SALVAR               |\n");
        printf("    |                                                                |\n");
        printf("    |         G - ABRIR                     H - SOBRE                |\n");
        printf("    |                                                                |\n");
        printf("    |                        S - SAIR                                |\n");
        printf("    |                                                                |\n");
        printf("    |                                                                |\n");
        printf("    ==================================================================\n");
        fflush(stdin);
        printf("\n    Digite...: ");
        scanf("%c", &op_menu);
        op_menu=tolower(op_menu);
        fflush(stdin); //limpa o buffer do teclado
        switch(op_menu)
        {
        case 'a'  :
            fflush(stdin);
            system("cls"); //limpa a tela
            inserir();
            printf("\n");
            do
            {
                printf("    0 - Menu principal: ");
                scanf("%s",&op_menu_interno);
            }
            while (op_menu_interno!='0');
            system("cls");
            break;
            fflush(stdin);
        case 'b':
            system("cls");
            mostrar();
            printf("\n");
            do
            {
                printf("    0 - Menu principal: ");
                scanf("%s",&op_menu_interno);
            }
            while (op_menu_interno!='0');
            system("cls");
            break;


        case 'c':
            fflush(stdin);
            system("cls");
            deletar();
            printf("\n");
            do
            {
                printf("    0 - Menu principal: ");
                scanf("%s",&op_menu_interno);
            }
            while (op_menu_interno!='0');
            system("cls");
            break;
            fflush(stdin);
        case 'd':
            fflush(stdin);
            system("cls");
            printf("você digitou: 4");
            printf("\n");
            do
            {
                printf("    0 - Menu principal: ");
                scanf("%s",&op_menu_interno);
            }
            while (op_menu_interno!='0');
            system("cls");
            break;
            fflush(stdin);
        case 'e':

        case 'f':
            fflush(stdin);
            system("cls");
            salvar();
            printf("\n");
            do
            {
                printf("    0 - Menu principal: ");
                scanf("%s",&op_menu_interno);
            }
            while (op_menu_interno!='0');
            system("cls");
            break;
        case 'g':
            fflush(stdin);
            system("cls");
            abrir();
            printf("\n");
            do
            {
                printf("    0 - Menu principal: ");
                scanf("%s",&op_menu_interno);
            }
            while (op_menu_interno!='0');
            system("cls");
            break;
        case 'h':
            system("cls");
            sobre();
            printf("\n");
            do
            {
                printf("    0 - Menu principal: ");
                scanf("%s",&op_menu_interno);
            }
            while (op_menu_interno!='0');
            system("cls");
            break;
        case 's':
            system("cls");
            printf("\n");
            printf("Finalizando programa...");
            printf("\n");
            exit(0);
            break;
        default:
            system("cls");
            printf("Codigo invalido! Digite novamente");
            break;
        }

    }
    while (op_menu!=5);
    return (0);
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By christin cley
      Construir um algoritmo em C++ que preencha um matriz quadrada de tamanho 4 pelo usuário. Após o preenchimento pelo usuário, verifique na diagonal principal qual foi o maior valor digitado e exiba na tela o valor. Por fim,  exiba na tela toda matriz em forma de matriz na tela.
    • By andreluizsgf
      Boa noite, eu estou tentando implementar uma função que imprima uma árvore como ela deveria ser, com o pai acima e a direita do menor filho e acima e a esquerda do maior filho. 
      Já tenho duas funcões que me permitem imprimir por nível, porém estou tentando adaptá-las para a impressão correta. Exemplo:
      árvore: 5,4,3,2,1;
      Impressão:
                  5
          3             4
      1      2

      O código para o print é este:
       
      void ---ivel(node_t* raiz, int level) { if (raiz == NULL){ for(int i = 0 ; i < 3 ; i++){ printf("\t"); return;} } if (level == 1) { for (int i=0; i<altura(raiz); i++) printf("\t"); simpleprint(raiz); } else if (level > 1) { ---ivel(raiz->left, level-1); ---ivel(raiz->right, level-1); } }   void printarordem(node_t *raiz) { int h = altura(raiz); int i; for (i=1; i<=h; i++) { printf("\t"); ---ivel(raiz, i); printf("\n"); } }

      Se alguém souber como resolver este ou sugerir outra implementação, fico super agradecido! 
    • By vinicius.benedito98
      Faça um Programa em Linguagem C que receba o nome e a nota de 180 alunos de uma sala e armazene em vetor. Calcule e mostre: 
      - A média da sala; 
      - O nome do aluno com a maior nota; 
      - O nome do aluno com a menor nota; 
      - Os nomes dos alunos aprovados;

      O meu código é esse :

      #define N 180 
      int main() { 
      int i, ind_maior, ind_menor; 
      float nota[N], soma=0, media, min_aprov=7; 
      char nome[N][50]; 
      for (i=0; i printf("Informe o nome do %dº aluno: ", i+1); 
      gets(nome); 
      printf("Informe a nota do %dº aluno: ", i+1); 
      scanf(" %d ", &nota); 
      soma += nota; 

      media = soma / N; 
      printf("\nMédia da sal: %.2f\n", media); 
      ind_menor = ind_maior = 0; 
      for (i=1; i if (nota < nota[ind_menor]) 
      ind_menor = i; 
      if (nota > nota[ind_maior]) 
      ind_maior = i; 

      printf("Menor nota: %s com %.2f\n", nome[ind_menor], nota[ind_menor]); 
      printf("Maior nota: %s com %.2f\n", nome[ind_maior], nota[ind_maior]); 
      printf("Aprovados:"); 
      for (i=0; i if (nota >= min_aprov) 
      printf("\t%s com: %.2f\n", nome, nota); 

      return 0; 
      }


      Porém quando vou executa-lo, o programa pede para inserir o nome e nota do aluno apenas uma vez, e fica por isso, ele não exibe os resultados, alguém pode me ajudar ?
    • By WizardTech
      Eu estou criando uma aplicação cliente/servidor em C no ubuntu. O propósito é bem simples, saber se vale mais a pena alugar ou vender um imóvel, o usuário digita o valor do aluguel, os meses que irá alugar e o valor que irá vender e o servidor faz as contas e devolve o resultado. Tudo está dentro de um do while para ficar infinito, no final o usuário digita CONTINUAR para testar outros valores e SAIR para encerrar a conexão. Mas está com um problema que não consigo identificar. A primeira vez que comparamos valores, o servidor retorna o resultado correto(alugar ou vender), porém a partir da segunda vez ao digitar CONTINUAR, ele sempre retorna resultados errados. Eu suspeito que esteja armazenando dados na variáveis erradas a partir da segunda vez, coloquei uns prints no meio do código para mostrar os valores e tem divergência.E também tentei zerar as variáveis no começo e usar vários bzero e fflush, mas sem resultado. Mas não tenho certeza de nada. Podem me ajudar?
       
      CÓDIGO DO CLIENTE:
      #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <string.h>  int main () { struct sockaddr_in sock; int con, sockid,numbytes; char resposta[10]; char buf[100]; char aluguel[10]; char venda[10]; char meses[2]; sockid = socket(AF_INET, SOCK_STREAM, 0); bzero(&(sock),sizeof(sock)); sock.sin_family = AF_INET; sock.sin_port = htons(9012); inet_pton(AF_INET, "127.0.0.1",&sock.sin_addr); con=connect(sockid,(struct sockaddr*)&sock,sizeof(sock)); do{ if(con>=0) { printf("=====================================================\n"); printf("Descubra se vale a pena vender ou alugar seu imóvel\n"); printf("=====================================================\n"); printf("Digite por quanto voce quer alugar: \n"); scanf("%s", &aluguel); printf("=====================================================\n"); if(send(sockid,aluguel,strlen(aluguel),0)==-1) { printf("Erro ao enviar mensagem\n"); close(sockid); } printf("Digite por quantos meses ira alugar : \n"); scanf("%s", &meses); printf("=====================================================\n"); if(send(sockid,meses,strlen(meses),0)==-1) { printf("Erro ao enviar mensagem\n"); close(sockid); } printf("Digite por quanto quer vender: \n"); scanf("%s", &venda); printf("=====================================================\n"); if(send(sockid,venda,strlen(venda),0)==-1) { printf("Erro ao enviar mensagem \n"); close(sockid); } bzero(&buf,sizeof(buf)); if((numbytes=recv(sockid,buf,100,0)==-1)) { printf("Erro ao receber a mensagem\n"); } printf("Vale mais a pena: %s\n",buf); printf("Digite SAIR para sair ou CONTINUAR para continuar a comparar.\n"); scanf("%s",&resposta); fflush(stdin); if(send(sockid,resposta,strlen(resposta),0)==-1) { printf("Erro ao enviar mensagem\n"); close(sockid); } if(strcmp(resposta,"CONTINUAR")==0) { continue; } } }while(strcmp(resposta,"SAIR")!=0); close(sockid); }  
      CÓDIGO DO SERVIDOR:
      #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <string.h> int main () { int sockid; struct sockaddr_in servidor; int client,numbytes; float convertido; float convertido1; float convertido2; char passar[10]; char buf[100]; char buf1[100]; char buf2[100]; float resultado; char resposta[10];  sockid = socket(AF_INET, SOCK_STREAM,0); if(sockid==-1) { printf("Não foi possivel criar o socket"); exit(1); } servidor.sin_family= AF_INET; servidor.sin_addr.s_addr = htonl(INADDR_ANY); servidor.sin_port = htons(9012); if(bind(sockid,(struct sockaddr*)&servidor, sizeof(servidor))<0) { printf("Falhou ao associar a porta\n"); } listen(sockid, 3); int c, new_socket; while(1) { c = sizeof(struct sockaddr_in); new_socket = accept(sockid, (struct sockaddr *)&client,(socklen_t *)&c); if(new_socket <=0) { printf("Falhou ao aceitar o conector\n"); continue; } while(1){ printf("Conexão aceita\n"); fflush(stdin); resultado = 0; convertido = 0; convertido1 = 0; convertido2 = 0; bzero(&buf,sizeof(buf)); if((numbytes=recv(new_socket,buf,100,0)==-1)) { printf("Erro ao receber a mensagem\n"); } convertido = atof(buf); bzero(&buf1,sizeof(buf1)); if((numbytes=recv(new_socket,buf1,100,0)==-1)) { printf("Erro ao receber mensagem\n"); } convertido1 = atof(buf1); printf(buf1); bzero(&buf2,sizeof(buf2)); if((numbytes=recv(new_socket,buf2,100,0)==-1)) { printf("Erro ao receber mensagem\n"); } convertido2 = atof(buf2); printf(buf2);  resultado = convertido*convertido1; if(resultado>convertido2) { sprintf(passar, "Alugar"); } else { sprintf(passar,"Vender"); } if(send(new_socket,passar,strlen(passar),0)==-1) { printf("Erro ao enviar a mensagem\n"); close(new_socket); } bzero(&resposta,sizeof(resposta)); if((numbytes=recv(new_socket,resposta,strlen(resposta),0)==-1)) { printf("Erro ao receber a mensagem\n"); } fflush(stdin); if(strcmp(resposta,"SAIR")==0) {  close(new_socket); break; }  } }  }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.