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

Problema com codigo em C


leandro20099

Pergunta

Estou fazendo um programa que iria ler notas do teclado e iria as inserir em uma matriz tridimensional dinamicamente. estou usando o dev c++, ele complica, não mostra erros, mas para de funcionar em uma parte de codigo.

se alguém puder ajudar. :rolleyes:

Obs: tem um system("pause"), antes da parte que estava travando.

------------------------------------------------------------------------------

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

struct coluna
{
    float nota;
    struct coluna *prox_coluna;
};
typedef struct coluna Col;    

struct linha
{
    Col *c;    
    struct linha *prox_linha;
};
typedef struct linha Lin;    

struct tabela
{
    Lin *l;    
    struct tabela *prox_tabela;
};
typedef struct tabela Tab;

struct fila
{
    Tab* primeiro;
    Tab* ultimo;   
};
typedef struct fila Tfila;


//-----------------------------------------


void cria_fila(Tfila*f)
{
    f->primeiro = f->ultimo = NULL;
}

int fila_vazia(Tfila*f)
{
    return (f->primeiro == NULL);
}

Col* cria_no(float nota)
{
    Col*no = (Col*)malloc(sizeof(Col));
    if(no != NULL)
    {
        no->nota = nota;
        no->prox_coluna = NULL;
    }
    return no;
}

int controle()
{
    int i;
    do{
        printf("Acrescentar nota na ...\n1_Proxima coluna\n2_Proxima linha\n3_Proxima tabela\n\nOpcao: ");
        scanf("%d",&i);
        if(i<1||i>3)
        {
           system("cls");
           printf("Opcao errada.");
        }
      }while(i<1||i>3);
      
    return i;   
}

int insere_fila(Tfila*f, float nota)
{
    Col*novo;
    int op;
    
    novo=cria_no(nota);
    if(novo == NULL)
        return 0;
        
    if(fila_vazia(f))
    {system("pause");
        f->primeiro->l->c = novo;
        f->ultimo->l->c = novo;
        system("pause");
    }
    else
    {
        op = controle();
         
         if(op==1) 
         {    
            if(f->ultimo->l->c == NULL)    
                f->ultimo->l->c = novo;
            
            f->ultimo->l->c->prox_coluna = novo;
            f->ultimo->l->c = novo;
         } 
         if(op==2)
         {   
            f->ultimo->l->prox_linha->c = novo;
            f->ultimo->l->c = novo;
         }
         if(op==3)
         {
            f->ultimo->prox_tabela->l->c = novo;
            f->ultimo->l->c = novo;
         }
    }
    return 1;
}

void exibe_notas(Tfila*f)
{
    Tab* tabela;
    Lin *linha;
    Col *coluna;
    
    int cont_linha, cont_tabela;
    cont_linha=cont_tabela=1;
    
    system("cls");
    
    for(tabela=f->primeiro; tabela!=NULL; tabela=tabela->prox_tabela)
    {   
        printf("%d Tabela)\n\n",cont_tabela);
        
        for(linha=f->primeiro->l; linha!=NULL; linha=linha->prox_linha)
        {   
            printf("%d Linha)",cont_linha);            
            
            for(coluna=f->primeiro->l->c; coluna!=NULL; coluna=coluna->prox_coluna)
            { 
                  printf(" %.2f ", coluna->nota);
            }
            printf("\n");
            cont_linha++;
        }
        printf("\n\n");
        cont_tabela++;
    }
}

int main()
{
    Tfila f;
    int op, ok1;
    float nota;
    
    cria_fila(&f);
    
    printf("Inserir uma nota na matriz.\n\n1_Sim\n2_Nao\n\nOpcao: ");
    scanf("%d", &op);
    while(op==1)
    {
        printf("Digite uma nota: ");
        scanf("%f",&nota);
        ok1=insere_fila(&f, nota);
        
        exibe_notas(&f);
        
        printf("Deseja inserir mais uma nota na matriz.\n\n1_Sim\n2_Nao\n\nOpcao: ");
        scanf("%d", &op);
    }
    
    
}

----------------------------------------------------------------------------------------------------------

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

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