Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) soma dos elementos de uma lista implementada com ponteiros


Jefinho

Pergunta

alguém poderia me dar um exemplo disso????

estou me enrolando na hora de apontar os ponteiros

while (Tem !=NULL)
        {
            if (strcmp(Tem->modelo,informacao)==0) 
                {
                 Tem =(Tem)->proxmodelo;                                 
                 soma = soma + Tem->n;
                 Tem->proxmodelo = Tem;
                    printf("ok\n");
                    break;
                   
                }
            else

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Não queria fazer isso

mas logo que você pediu

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct NO{
    int n;
    char cidade[20];
    char modelo[20];
    char cor[20];
    struct NO *prox;
    struct NO *proxcor;
    struct NO *proxcidade;
    struct NO *proxmodelo;
    }no;
void inicializar(no **celula)
{
    (*celula)->proxcor =NULL;
    (*celula)->proxcidade = NULL;
    (*celula)->proxmodelo=NULL;
    (*celula)->prox=NULL;
}
       
void inserirModelo(no **mod)
  {
      int i;
      int y;
      char informacao[20];
      no *Nova;
    printf("Entre a quantidade de modelos de carros: ");
    scanf("%d",&y);
    for (i=0;i<y;i++)
    {
        printf("Entre com o modelo do carro: ");
        scanf("%s",&informacao[0]);
        Nova = (no *)malloc(sizeof(no));
        strcpy(Nova->modelo,informacao);
        Nova->prox =(*mod)->prox;
        (*mod)->prox = Nova;
       
    }
}   
   
//FUNÇÃO PARA INSERIR COR //
void inserirCor(no **c)
  {
      int i;
      int y;
      char informacao[20];
      no *Nova;
    printf("Entre a quantidade de cores dos carros: ");
    scanf("%d",&y);
    for(i=0;i < y;i++)
    {
        printf("Entre com as cores do carro: ");
        scanf("%s",&informacao[0]);
        Nova = (no *)malloc(sizeof(no));
        strcpy(Nova->cor,informacao);
        Nova->prox =(*c)->prox;
        (*c)->prox = Nova;
    }
}       
   
void inserirCidade(no **cid)
  {
      int i;
      int y;
      char informacao[20];
      no *Nova;
      printf("Entre a quantidade de cidades onde há venda de carro: ");
    scanf("%d",&y);
    for (i=0;i< y;i++ )
    {
        printf("Entre com as cidade onde são vendidos os carro: ");
        scanf("%s",&informacao[0]);
        Nova = (no*)malloc(sizeof(no));
        strcpy(Nova->cidade,informacao);
        Nova->prox =(*cid)->prox;
        (*cid)->prox = Nova;
    }
}
void inserirPrincipal(no **cid ,no **mod, no **c)
{
    int i, v,y;
    char informacao[20];
    no *Nova,*Tem,*Tem1,*Tem2;
    printf("quantos cadastro deseja fazer");
    scanf("%d",&v);
    for (i= 0;i< v;i++)
    {
        printf("modelo: ");
        scanf("%s",&informacao[0]);
        Nova =(no*)malloc(sizeof(no));
        Tem =(*mod)->prox;
        while (Tem!= NULL)
        {
            if (strcmp(Tem->modelo,informacao)==0)
                {   
                  if (Tem->proxmodelo == NULL) 
                  {                              
                  Tem->proxmodelo = Nova;
                  strcpy(Nova->modelo,informacao);
                 Nova->proxmodelo=(Tem)->proxmodelo;
                 (Nova)->proxmodelo = NULL;
                    break;
                  }
                  else
                  {
                      while (Tem->proxmodelo != NULL) 
                        {
                            Tem=Tem->proxmodelo;
                       }
                       Tem->proxmodelo = Nova;
                       strcpy(Nova->modelo,informacao);
                       (Nova)->proxmodelo = NULL;      
                  }
                }  
            else
              {       
                Tem = Tem->prox;
              }
          }
     
        printf("cor: ");
        scanf("%s",&informacao[0]);
        Tem1=(*c)->prox;
        while (Tem1 !=NULL)
        {
            if (strcmp(Tem1->cor,informacao)==0)
                {
                    if(Tem1->proxcor == NULL)
                    {
                    Tem1->proxcor= Nova;
                    strcpy(Nova->cor,informacao);
                    Nova->proxcor=(Tem1)->proxcor;
                    (Tem1)->proxcor = NULL;
                    }
                    else
                    {
                      while (Tem1->proxcor != NULL) 
                        {
                            Tem1=Tem1->proxcor;
                        }
                       Tem1->proxcor =Nova;
                       strcpy(Nova->cor,informacao);
                       (Nova)->proxcor = NULL;      
                    }
                    break;
                }
            else
              {       
                Tem1 = Tem1->prox;
              }
      }

      printf("cidade: ");
        scanf("%s",&informacao[0]);
        Tem2 =(*cid)->prox;
        while (Tem2 !=NULL)
        {
            if (strcmp(Tem2->cidade,informacao)==0)
                {
                    if (Tem2->proxcidade ==NULL)
                       {
                        Tem2->proxcidade = Nova;
                        strcpy(Nova->cidade,informacao);
                      Nova->proxcidade=(Tem2)->proxcidade;
                        (Nova)->proxcidade = NULL;
                       } 
                     else
                         {
                          while (Tem2->proxcidade !=NULL) 
                          {
                              Tem2=Tem2->proxcidade;
                           }
                            Tem2->proxcidade =Nova;
                         strcpy(Nova->cidade,informacao);
                           (Nova)->proxcidade = NULL;      
                         }
               
                  break;
                 
                }
            else
              {       
                Tem2 = Tem2->prox;
              }
      }
      printf("n° de carros ");
      scanf("%d",&y);
      (Nova)->n = y;
     
      }
  }
void consultapormodelo(no **cid ,no **mod, no **c)
{
    char informacao[20];
    no *Tem;
    int soma;
    printf("m ");
    scanf("%s",&informacao[0]);     
    Tem=(no*)malloc(sizeof(no));
    Tem =(*mod)->prox;
    soma = 0;
        while (Tem !=NULL)
        {
            if (strcmp(Tem->modelo,informacao)==0) 
                {
           
                 Tem=Tem->proxmodelo ;
                 while (Tem != NULL)
                   {                   
                     soma = soma + Tem->n;
                    Tem=Tem->proxmodelo;
                     
                   }
                  break;
                   
                }
            else
              {       
                Tem = Tem->prox;
              }
          }
      printf("a soma é %d",soma);
  }     
/*void consultaModelo(no **mod)
{
    char informacao[20];
    scanf("%s",&informacao[0]);
    no *Tem;
    Tem = (*mod)->prox;
   
    while (Tem->prox != NULL)
    {
          if (strcmp(Tem->modelo,informacao)==0) 
          {
              Tem =(Tem)->proxmodelo;
              printf("%s",Tem->modelo);
              (Tem)->proxmodelo = Tem;
              }
            else
            {
                Tem= Tem->prox;
                }
    }
}            */ 
                                                   
//PROCEDIMENTO PARA O MENU INICIAL//
void menuInicial()
{ 
    printf("-------MENU PRINCIPAL-------");
    printf("\n\n ------------------------------ \n\n");
    printf("1. consulta quantidade de carros vendidos\n");
    printf("2. consulta quantidade de carros de uma determinada cor vendidos\n");
    printf("3. consulta quantidade de carros vendidos em uma determinada cidade\n");
    printf("4. consulta quantidade de carro por modelo e cidade\n");
    printf("5. consulta quantidade de carro por modelo e cor\n");
    printf("6. consulta quantidade de carro por modelo, cor e cidade\n");
    printf("7. remove informação sobre venda\n");
    printf("8. lista nomes de modelos de carros\n");
    printf("9. lista nomes de cores\n");
    printf("10.lista nomes de cidades\n");
    printf("11. término de sequência de operações\n");                               
  }

int main()
{
    //declaraçãoes//
    char opcao;
    no *c;
    no *cid;
    no *mod;
//  no *princ;
    printf("\n------------Casdastra Vendas-----------\n");
    //Para inserir os modelos//
    mod = (no*)malloc(sizeof(struct NO));
    inicializar(&mod);
    inserirModelo(&mod);
    //Para inserir as cores//
    c = (no*)malloc(sizeof(struct NO));
    inicializar(&c);
    inserirCor(&c);
    //Para inserir as cidade//
    cid = (no*)malloc(sizeof(struct NO));
    inicializar(&cid);
    inserirCidade(&cid);
  //  princ=(no*)malloc(sizeof(struct NO));
  //  inicializar(&princ);
    inserirPrincipal(&cid,&mod,&c);
    opcao = '0';
    while (opcao != 'e')
    {
        menuInicial();
        printf("escolha uma opção");
        scanf("%s",&opcao);
        if (opcao == '1')
  //      consultaModelo(&mod);
      consultapormodelo(&cid ,&mod,&c);
    }
    system("PAUSE");       
return (0);
}

Link para o comentário
Compartilhar em outros sites

  • 0

nossa mas olha essa parte do codigo:

Tem =(Tem)->proxmodelo;                                
                 soma = soma + Tem->n;
                 Tem->proxmodelo = Tem;[/code] olha na ultima linha, você ta alterando a lista. e ainda por cima ta fazendo o item aponta pra ele mesmo. porque você pos isso ai?? arranca essa linha agora otra coisa. não sei pra q você poe esse strcmp, mas ignorando isso, de uma olhada:
[code]while (Tem !=NULL)
        {
                 Tem =(Tem)->proxmodelo;                                
                 soma = soma + Tem->n;
                 Tem->proxmodelo = Tem;
                    printf("ok\n");
                    break;
                  
                }

alem daquela linha estranha q comentei acima, porque você da o print e o break?? não é pra somar a lista toda??

se você não pretende somar a lista toda, então explica pra gente exatamnete o q você quer fazer, q a gente não pode adivinhar.

hehe e tb não precisava postar o codigo todo o seu programa, era só por o codigo todo da sub, se você poe um pedaco só, fica dificil pra gente.

Link para o comentário
Compartilhar em outros sites

  • 0
nossa mas olha essa parte do codigo:

Tem =(Tem)->proxmodelo;                                
                 soma = soma + Tem->n;
                 Tem->proxmodelo = Tem;
olha na ultima linha, você ta alterando a lista. e ainda por cima ta fazendo o item aponta pra ele mesmo. porque você pos isso ai?? arranca essa linha agora otra coisa. não sei pra q você poe esse strcmp, mas ignorando isso, de uma olhada:
while (Tem !=NULL)
        {
                 Tem =(Tem)->proxmodelo;                                
                 soma = soma + Tem->n;
                 Tem->proxmodelo = Tem;
                    printf("ok\n");
                    break;
                  
                }

alem daquela linha estranha q comentei acima, porque você da o print e o break?? não é pra somar a lista toda??

se você não pretende somar a lista toda, então explica pra gente exatamnete o q você quer fazer, q a gente não pode adivinhar.

hehe e tb não precisava postar o codigo todo o seu programa, era só por o codigo todo da sub, se você poe um pedaco só, fica dificil pra gente.

valeu

deu certo

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...