Ir ao conteúdo

Posts recomendados

Postado

Vamos fazer a programação de uma ÁRVORE para testar seu conhecimento no computador.
Aqui você deve fazer um programa em linguagem C ou C++ que contenha os seguintes itens:
A estrutura de dados (struct) deverá conter os seguintes dados:
nome do município
· área total do município (em km2)
· população
A árvore deverá ter funções para inserir, percorrer e listar, que podem ser conseguidas nas aulas da disciplina (e não valerão nota, mas formam a base para ela). Então, prossiga resolvendo a avaliação:
a) Faça uma função que conte o número de municípios, percorrendo os nós cadastrados na árvore.
b) Faça uma função que mostre apenas os nomes dos municípios com mais de X habitantes. Por exemplo, X pode ser 100.000 pessoas.
c) Faça uma função que mostre a densidade demográfica de cada cidade. A densidade demográfica é a relação entre a população e a área.
d) Faça uma função que mostre o somatório de área em km2 de todas as cidades juntas em relação ao território nacional (em porcentagem).
e) Faça uma função que mostre as cidades em ordem alfabética, com todos os dados.
f) Faça uma função que mostre o nome da cidade com a maior população.
g) Teste o seu programa com utilizando cidades de sua região e dados realísticos.

 

Preciso de ajuda para terminar a arvore e resolver o erro.

 

<''#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define TAM 5

#define MAX 80

int main ()

{

   /* Declarando um vetor de apontadores */

   char *mat[TAM];

   /* Declara um buffer para efetuar a leitura */

   char buffer[MAX];

   int i,j;

   printf("\nEntre com %d Frases:\n\n", TAM);

   for (i=0; i<TAM; i++)

   {

       gets(buffer);

       /* Aloca em mat a quantidade de caracteres suficiente para armazenar o buffer */

       mat=(char *) calloc((strlen(buffer)+1), sizeof(char));

       /* Testa se a alocação teve sucesso */

       if (!mat)

       {

           printf ("** Erro: Memoria Insuficiente **");

           for(j=0; j < i; j++)

               free(mat[j]);

           exit(1);

       }

       /* Copia a string, do buffer para o vetor de strings */

       strcpy(mat,buffer);

   }    

   printf("\nFrases digitadas");

   for(i=0; i<TAM; i++)

   printf("%s\n", mat);

   for(j=0; j<TAM; j++)

   free(mat[j]);

}''>

 

erro.PNG

Postado

Olá

 

 

O enunciado fala em poder usar material de aulas prévias,onde teria o código para manipular a árvore. Você não tem nada?

 

Está certo de que sabe o que é uma árvore? Teve aulas sobre Heap talvez? Seu código está longe de funcionar.

 

Uma árvore NÃO é uma lista ligada.

  • Curtir 1
Postado
Em 07/11/2019 às 21:22, KXSY disse:

Não entendi muito bem o seu algorítimo, mas você já tentou fazer algo assim?


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

/* Constantes */
#define T_NOME 20

/* Tipos */
typedef struct
{
  char nome[T_NOME];
  long area;
  long populacao;
}TMunicipio;

typedef struct Lista
{
  TMunicipio municipio;
  struct Lista *proximo;
}TLista;


int main()
{
  TMunicipio m;
  TLista *inicio=NULL,*ponteiro;
  char tecla;
  do
  {
    printf("\nDigite o nome do municipio:\t");
    scanf("%s",m.nome);
    printf("\nDigite a area total do municipio:\t");
    scanf(" %li",&m.area);
    printf("\nDigite a quantidade da populacao:\t");
    scanf(" %li",&m.populacao);
    /* Cria a lista */
    if(!inicio)   /* Se inicio for igual a NULL */
    {
      ponteiro=inicio=malloc(sizeof(TLista));
      if(!inicio)
        return(-1);   /* Erro */
      inicio->proximo=NULL;
      inicio->municipio=m;
    }
    else 
    {
      ponteiro=ponteiro->proximo=malloc(sizeof(TLista));
      if(!ponteiro)
        return(-1);   /* Erro */
      ponteiro->proximo=NULL;
      ponteiro->municipio=m;
    }
    printf("\nDeseja cadastrar mais\nS/N:\t");
    scanf(" %c",&tecla);
  }while(tecla!='n');
  /* Mostra a lista */
  ponteiro=inicio;
  while(ponteiro)
  {
    printf("\n\nNome do municipio:\t%s",ponteiro->municipio.nome);
    printf("\nTamanho do municipio em Km:\t%li",ponteiro->municipio.area);
    printf("\nPopulacao total da cidade:\t%li",ponteiro->municipio.populacao);
    ponteiro=ponteiro->proximo;
  }
  /* Apaga a lista */
  ponteiro=inicio;
  while(ponteiro)
  {
    inicio=ponteiro->proximo;
    free(ponteiro);
    ponteiro=inicio;
  }
  return(0);
}

 

é isso mesmo irmão @KXSY

Postado
11 horas atrás, Ozama disse:

é isso mesmo irmão @KXSY

 

Bem, não é meu curso nem são meus alunos, mas lembro que uma árvore não é uma lista.

Uma lista pode ser vista como uma árvore totalmente desbalanceada com alguma liberalidade, mas é só isso.

Postado

Cortesia do Google, imagens de arvores e listas como estruturas de dados. Não vou ficar discutindo as definições ou mostrando diferenças em código :D 

 

Mas não são só os desenhos que são diferentes

 

Arvores

 

arvores.thumb.png.6606738e27338c2cdd87d6ef5beb792d.png

 

Listas

 

listas.thumb.png.39dbe3881758b996f7dfa8097840c06c.pnglistas.thumb.png.39dbe3881758b996f7dfa8097840c06c.png

  • Amei 1
Postado
Em 12/11/2019 às 15:38, KXSY disse:

Só dei como exemplo, porque o conhecimento mínimo para fazer uma arvore binaria e saber fazer uma lista encadeada.

Em 10/11/2019 às 01:02, arfneto disse:

Bem, não é meu curso nem são meus alunos, mas lembro que uma árvore não é uma lista.

Uma lista pode ser vista como uma árvore totalmente desbalanceada com alguma liberalidade, mas é só isso.

A teoria por detrás das duas e a mesma, mas na pratica uma não tem nada a ver com a outra.

 

Esse não é mesmo um forum sobre estrutura de dados, mas mesmo em se falando da implementação em alguma linguagem que não tenha suporte embutido, o conhecimento mínimo para implementar uma estrutura de árvore nada tem a ver com o necessário para implementar uma lista encadeada. Lembro que se usar um Heap para implementar uma árvore sequer usará ponteiros. 

 

Nem a teoria é a mesma: uma árvore tem um conceito bem distinto. Existe a noção de raiz, a noção de pai e a noção de níveis. E existe o mecanismo de rotação de nós. Uma lista é só isso: uma lista com acesso ao próximo e ao anterior elemento na estrutura. E um endereço de início.

Postado

@allison vasconcelos

Talvez pudesse postar sua dificuldade e a parte relevante do código, de modo que alguém possa ajudar.

 

Implementou já a parte da árvore? Se não fez isso recomendo muito fazer isso em separado, sem misturar com a lógica de seu programa

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!