Ir ao conteúdo
  • Cadastre-se

Vinicius78

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

posts postados por Vinicius78

  1. Bom dia, alguém poderia me dar uma luz de como faço a busca em uma arvores, de valores menores que um  determinado numero e  somar quantos desses valores tem, por exemplo: A arvores possui os números 5 6 7 10 e o usuário digita 8, a função deve procurar todos os numero menores que 8 e retornar a quantidade deles que nesse caso seria 3. Meu código ae 

    *
        3) Implemente um método árvore que indique quantos elementos da árvore são
           menores do que um determinado valor. Você deve ler um determinado valor e
           contar quantos são menores que ele (5 pts).
    */
    //DEFININDO OS PONTEIROS PARA ARVORES
    typedef struct no {
        int v;
        struct no *esq, *dir;
    } no;
    no* inserir (no *raiz, int valor){
        //DEFININDO O NO PAI(PRIMEIRO NO)
        if(raiz == NULL){
            no *novo = (no*) malloc (sizeof(no));
            novo->v = valor;
            novo->dir = NULL;
            novo->esq = NULL;
            raiz = novo;
        }else{//DEFININDO OS NOS FILHOS(NOS APOS O PRIMEIRO NO)
            if(valor == raiz->v){
                printf("\n VALOR JÀ INSERIDO\n");
                system("pause");
            }
            if(valor > raiz->v){
                raiz->dir = inserir(raiz->dir,valor);//FUNÇÂO RECURSIVA PARA INSERIR A DIREITA
            }
            if(valor < raiz->v){
                raiz->esq = inserir(raiz->esq,valor);//FUNÇÂO RECURSIVA PARA INSERIR A ESQUERDA
            }
        }
        return(raiz);
    }
    //CONTAR OS NUMEROS MENORES
    int count_value(no *raiz, int number,int flag){
        no *aux = (no*) malloc (sizeof(no));
        aux = raiz;
        if(raiz != NULL)
        {
            if(number>aux->v){
                flag++;
            }
            count_value(aux->dir,number,flag);
            count_value(aux->esq,number,flag);
        }
        return (flag);
    
    return flag;
    }
    int main()
    {
        no *raiz = (no*) malloc(sizeof(no));
        int flag =0,valor = 0,op = 0;
        raiz = NULL;
        do{
            system("cls");
            printf("\n SELECIONE A OPCAO DESEJADA: ");
            printf("\n 1 - INSERIR");
            printf("\n 2 - PROCURAR NUMEROS MENORES");
            printf("\n 3 - SAIR\n");
            scanf("%d",&op);
            switch(op){
                case 1:{
                    printf("\n INFORME O VALOR: ");
                    scanf("%d",&valor);
                    raiz = inserir(raiz,valor);
                    break;
                }
                case 2: {
                    printf("\n INFORME O VALOR: ");
                    scanf("%d",&valor);
                    flag = count_value(raiz,valor,flag);
                    printf("%d\n",flag);
                    system("pause");
                    break;
                }
                case 3:{
                    printf("\nENCERRANDO");
                    op = 3;
                    break;
                }
            }
    
        }while(op != 3);
    
        printf("\n");
        return 0;
    }

     

  2. Alguem poderia me mostrar como eu transformo o código abaixo da lista duplamente encadeada em uma lista duplamente encadeada circular?

    main.c

    #include <stdio.h>
    #include <stdlib.h>
    
    #include "lista.h"
    
    void menu(){
     lista *l=(lista*)malloc(sizeof(lista));
     create_lista(l);
    
     int op;  //opção recursiva
    
     do{
         system("cls");
         printf("\n lista: ");
         mostra_lista(l);
         printf("\n\n");
         printf("1 - Inserir inicio lista \n");
         printf("2 - Inserir fim lista \n");
         printf("3 - Remover inicio Lista \n");
         printf("4 - Remover fim Lista \n");
         printf("5 - Sair \n");
    
         printf("\n\n Informe a opcao :>_");
         scanf("%d",&op);
    
        switch(op){
    
         case 1:{
          int x;
    
          printf("Informe o valor: ");
          scanf("%d",&x);
          inserir_ini_lista(l,x);
          break;
         }
    
    
         case 2:{
              int x;
              printf("Informe o valor: ");
              scanf("%d",&x);
              inserir_fim_lista(l,x);
              break;
         }
    
         case 3:{
                remove_ini_lista(l);
                 break;
    
            }
    
           case 4:{
                remove_fim_lista(l);
                break;
           }
    
            case 5:
             op=5;
     }
    
     }while(op != 5);
    }
    
    
    int main()
    {
    
        menu();
        printf("\n\n");
        return 0;
    }

    lista.h

    #ifndef LISTA_H_INCLUDED
    #define LISTA_H_INCLUDED
    
    typedef struct no{
        int dado;
        struct no *prox; //ponteiro do próximo
        struct no *ant;  //ponteiro do anterior
    }no;
    
    typedef struct lista{
     no *inicio;
     no *fim;
    }lista;
    
    void create_lista(lista *l);
    int  lista_vazia(lista *l);
    void inserir_ini_lista(lista *l, int valor);
    void inserir_fim_lista(lista *l, int valor);
    int  remove_ini_lista(lista *l);
    int remove_fim_lista(lista *l);
    void mostra_lista(lista *l);
    
    
    #endif // LISTA_H_INCLUDED

     

    lista.c

    #include <stdio.h>
    #include <stdlib.h>
    
    #include "lista.h"
    
    
    void create_lista(lista *l){
     l->inicio = NULL;
     l->fim = NULL;
    }
    
    int lista_vazia(lista *l){
    
     if(l->inicio ==NULL){
        return 1;
     }else{
        return 0;
     }
    }
    
    void inserir_ini_lista(lista *l, int valor){
    
      //criar um novo nó
      no *novo=(no*)malloc(sizeof(no));
      novo->dado = valor;
      novo->prox =NULL;
      novo->ant =NULL;
    
      if(l->fim ==NULL){ //Primeiro no lista
        l->inicio = novo;
        l->fim = novo;
    
      }else{
        l->fim->ant = novo;
        novo->prox =l->inicio;
        l->inicio = novo;
      }
      novo->ant = l->fim;
    }
    
    
    void inserir_fim_lista(lista *l, int valor){
    
      //criar novo no
      no *novo=(no*)malloc(sizeof(no));
      novo->dado = valor;
      novo->prox = NULL;
      novo->ant = NULL;
    
      if(l->inicio == NULL){ //Primeira vez no lista
        l->inicio = novo;
        l->fim    = novo;
      }else{
    
    
        l->fim->prox = novo;
        novo->ant = l->fim;
        l->fim = novo; //ajusta o ponteiro fim
    
      }
      l->fim->prox = l->inicio;
    }
    
    
    int  remove_ini_lista(lista *l){
    
      int y;
    
      //aux
      no *aux =(no*)malloc(sizeof(no));
    
      if(lista_vazia(l)==1){
       printf("Nao e possivel remover ----");
       printf("Lista Vazia!! \n");
       free(aux);
       return 0;
    
      }else{
    
         if(l->inicio == l->fim){ //só tenho um no na lista
            aux=l->inicio;
            y =aux->dado;
            l->fim = NULL;
            l->inicio = NULL;
            free(aux);
         }else{
           aux=l->inicio;
           y=aux->dado;
           l->inicio = l->inicio->prox; //ou l->inicio= aux->prox
           aux->prox =NULL;
           l->inicio->ant = l->fim;
           free(aux);
    
         }
      }
      return y;
    }
    
    void mostra_lista(lista *l){
    
     if(lista_vazia(l)){
        printf("Lista vazia!!!");
    
     }else{
       no *aux=(no*)malloc(sizeof(no));
       aux=l->inicio;
    
       while(aux!=NULL){
         printf("| %d",aux->dado);
         aux=aux->prox; //incrementa o ponteiro
       }
       free(aux);
     }
    }
    
    
    int remove_fim_lista(lista *l){
    
      no *aux=(no*)malloc(sizeof(no));     //ponteiro auxiliar
      int y;
    
    
    
         if(lista_vazia(l)){//se so tem um unico nó
    
            aux=l->fim;  //aponta para o nó final
            y =aux->dado; //passa o valor da struc para a variável
            l->fim=NULL;
            l->inicio=NULL;
            free(aux);
            return y;
    
         }else{
    
            aux = l->fim;
            y=aux->dado;
    
            l->fim = aux->ant;          //passa o final para o anterior
            l->fim->prox = l->inicio;       //desconect ao final
            aux->ant =NULL;
            free(aux);             //free último elemento
            return y;
         }
    
    }
    

     

  3. Pessoal, alguém poderia me ajudar a entender o por que de meu código estar dando esses erros, verifiquei e tenho quase certeza que fechei todos os parênteses.

     

    main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <conio.h>
    #include <locale.h>
    #include "fila.h"
    int main()
    {
        srand(time(NULL));//FUNÇÂO PARA NÂO REPEtIR A FILA
        setlocale(LC_ALL, "Portuguese");//FUNÇÂO PARA ACEITAR OS CARACTERES DO PORTUGUES
        int opc=0, e;
        pilha *p = (pilha*) malloc(sizeof(pilha));
        fila  *f = (fila*)  malloc(sizeof (fila));
        creatfila(f);//CRIANDO FILA
        creatpilha(p);//CrIANDO ILHA
        //CHAMANDO MENUS DE OPÇÔES
        while(opc != 3)
        {
            system("cls");
            mostra(f, p);
            printf("\n----ESCOLHA A OPÇÂO DESEJADA----");
            printf("\n1-ENFILERA");
            printf("\n2-EMPILHA");
            printf("\n3-FINALIZAR");
            scanf("%d",&opc);
            switch (opc){
                case 1:{//ENFILEIRANDO
                    e = rand() % 1000; //DEFININDO UM NUMERO ALEATORIO PARA FILA
                    printf("\n|%d|",e);
                    enfilera(f, e);
                    system("pause");
                    break;
                }
                case 2:{//EMPILHANDO
                    if(f->ini == NULL)//CASO NÂO HAJA NENHUM VALOR NA FIlA
                    {
                        printf("\nPOR VAFOR INSIRA UM VALOR A FILA PARA DEPOIS EMPILHAR");
                    }
                    else{
                        e = desenfilera(f);
                        printf("\nO valor |%d| será adicionado a pilha\n",e);
                        system("pause");
                        empilha(p,e);
                    }
                    break;
                }
                case 3:{//ENCERRANDO
                    opc =3;
                    printf("\nENCERRANDO");
                    break;
                }
            }
        }
        printf("\n");
        return 0;
    }

    fila.h

    #ifndef FILA_H_INCLUDED
    #define FILA_H_INCLUDED
    //DEFININDO PILHA
    typedef struct Tpilha{
        int item;
        struct Tpilha *ant;
    }Tpilha;
    typedef struct pilha{
        Tpilha *topo;
    }pilha;
    //DEFININDO FILA
    typedef struct Tfila{
        int dado;
        struct Tfila *prox;
    }Tfila;
    typedef struct fila{
        Tfila *ini;
        Tfila *fim;
    }fila;
    //FUNÇÔES PARA LIDAR COM A PILHA
    void creatpilha(pilha *p);
    int pilha_vazia(pilha *p);
    void empilha (pilha *p,int e);
    //FUNÇÔES PARA LIDAR COM A FILA
    int fila_vazia(fila *f);
    void creatfila(fila *f);
    void enfilera (fila *f, int e);
    int desenfilera (fila *f);
    void mostra(fila *f, pilha *p)
    
    
    #endif // FILA_H_INCLUDED

    fila.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "fila.h"
    //INICIALIZANDO PILHA COM NULL
    void creatpilha(pilha *p)
    {
        p->topo=NULL;
    }
    //INICIALIZANDO FILA COM NULL
    void creatfila(fila *f)
    {
        f->ini = NULL;
        f->fim = NULL;
    }
    //VERIFICANDO SE A PILHA ESTÀ VAZIA
    int pilha_vazia(pilha *p)
    {
        if(p->topo == NULL)
            return 1;
        else
            return 0;
    }
    
    
    
    //VERIFICANDO SE A FILA ESTÀ VAZIA
    int fila_vazia(fila *f)
    {
        if(f->ini == NULL)
            return 1;
        else
            return 0;
    }
    //EMPILHANDO VAOR DA FILA
    void empilha (pilha *p,int e)
    {
        Tpilha *novo = (Tpilha*) malloc(sizeof(Tpilha));
        novo->ant = p->topo;
        novo->item = e;
        p->topo =novo;
    
    }
    //ENFILEIRANDO VALOR ALEATORIO
    void enfilera (fila *f, int e)
    {
        Tfila *novo = (Tfila*) malloc(sizeof(Tfila));
        novo->dado = e;
        novo->prox = NULL;
        if(fila_vazia(f) == 1)
        {
            f->ini = novo;
            f->fim= novo;
        }
        else{
            f->fim->prox = novo;
            f->fim= novo;
    
        }
    }
    //DESENFILEIRANDO PARA JOGAR NA PILHA
    int desenfilera(fila f)
    {
        int valor;
        Tfila *aux = (Tfila*) malloc(sizeof(Tfila));
        aux = f->ini;
        valor = aux->dado;
        f->ini= aux->prox;
        aux->prox=NULL;
        if(f->ini==NULL)
        {
            f->fim = NULL;
            free(aux);
        }
        else
            free(aux);
    
        return valor;
    
    }
    //MOSTRANDO A FILA E A PILHA
    void mostra(fila *f, pilha *p)
    {
       //FILA
           printf("\n");
           Tfila *aux = (Tfila*)malloc(sizeof(Tfila));
           aux = f->ini;
           while(aux != NULL)
           {
              printf("| %d ",aux->dado);
              aux=aux->prox;
           }
    
        //PILHA
            printf("\n");
            Tpilha *auxp=(Tpilha*)malloc(sizeof(Tpilha));
            auxp=p->topo;
            while(auxp!=NULL){
                printf("%d \n",auxp->item);
                auxp=auxp->ant;
            }
    
    }

    main.c e fila.c estão na pasta sources  e o arquivo fila.h esta na pasta  headhers

  4. @arfneto  Muito obrigado pelas dicas o problema foi resolvido, esse é somente um código para responder um trabalho em c, utilizei variáveis menores para economizar tempo, antes de entregar irei fazer os comentários em cada parte do código, a partir de agora quando nomear uma struct utilizarei a primeira letra maiúscula, na linha 47 havia esquecido de colocar o \n, ainda irei corrigir a amostragem do programa na tela só não o fiz ainda porque estava tentando resolver esse problema que alias você foi de grande ajuda tinha esquecido completamente do strcpy. 

    • Curtir 1
  5. Pessoal, alguém poderia me ajudar a entender o porque do meu código estar sando pau nas linhas 34,35,37?

    Segue o código a baixo 

    /*
        2) Escreva uma função que recebe uma pilha p1 e os dados
        dos alunos (nome, rua, idade, sexo). Você deve inserir os
        dados na pilha seguindo os parâmetros da Struct. Lembre-se
        das aulas de ponteiros e como serão inseridos os dados dentro
        da pilha.
    
    VINICIUS GABRIEL
    DATA 15/04/2020
    
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct aluno{
        char nm[40];
        char rua[40];
        int idade;
        char sx[10];
    }aluno;
    typedef struct Tpilha{
        struct aluno item;
        struct Tpilha *ant;
    }Tpilha;
    typedef struct pilha{
        Tpilha *t;
    }pilha;
    void creatpilha (pilha *p){
        p->t = NULL;
    }
    void empilha (pilha *p,aluno e)
    {
        Tpilha *novo =(Tpilha*)malloc(sizeof(Tpilha));
            novo->item.nm=e.nm;
            novo->item.rua=e.rua;
            novo->item.idade=e.idade;
            novo->item.sx=e.sx;
            novo->ant=p->t;
            p->t=novo;
    }
    void mostra_pilha(pilha *p){
         Tpilha *aux = (Tpilha*)malloc(sizeof(Tpilha));
         aux=p->t;
         while(aux!=NULL){
            printf("\nNome: %s",aux->item.nm);
            printf("\nRua: %s",aux->item.rua);
            printf("\Idade: %d",aux->item.idade);
            printf("\nSexo: %s",aux->item.sx);
            aux=aux->ant;
         }
    
    }
    int main()
    {
        int i=5;
        pilha *p = (pilha*)malloc(sizeof(pilha));
        aluno e;
        creatpilha(p);
        while(i!=0)
        {
            printf("\nDigite a opção desejada");
            printf("\n1-Empilhar");
            printf("\n2-Mostrar pilha");
            printf("\n3-Sair\n");
            scanf("%d", &i);
            switch(i){
                case 1:{
                    printf("\nDigite o nome: ");
                    fflush(stdin);
                    gets(&e.nm);
                    printf("\nDigite a rua: ");
                    fflush(stdin);
                    gets(&e.rua);
                    printf("%s",e.rua);
                    printf("\nDigite o sexo(F ou M): ");
                    fflush(stdin);
                    gets(&e.sx);
                    printf("\nDigite a idade: ");
                    fflush(stdin);
                    scanf("%d",&e.idade);
                    empilha(p,e);
                    break;
                }
                case 2:{
                    mostra_pilha(p);
                    break;
                }
                case 3:{
                    i =0;
                    break;
                }
            }
        }
        printf("\n");
        return 0;
    }

     

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!