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

alguém poderia me ajudar nisso


Justiceira

Pergunta

8 respostass a esta questão

Posts Recomendados

  • 0

É que estou começando a aprender linguagem C,e num livro encontrei este codigo,já sei umas coisas e entendi por parte...so q o Dev C++ não esta compilando isso...

E queria entender porque faz parte de eu criar um trabalho também

Por isso postei o codigo todo mas só tem partes q não consegui entender para corrigir como a citada acima


struct DADO {
int valor;
};

struct CELULA {
int lin;
int col;
struct DADO dado;
struct CELULA *direita;
struct CELULA *abaixo;
};
struct MATRIZ {
struct CELULA linha[NLINHAS];
struct CELULA coluna[NCOLUNAS];
};

void criar(struct MATRIZ matriz) {
int i;
for (i=0; i < NLINHAS; i++) {
matriz.linha[i].direita = NULL;
matriz.linha[i].abaixo = NULL;
matriz.linha[i].lin = -1;
matriz.linha[i].col = -1;
}
for (i=0; i < NCOLUNAS; i++) {
matriz.coluna[i].direita = NULL;
matriz.coluna[i].abaixo = NULL;
matriz.coluna[i].lin = -1;
matriz.coluna[i].col = -1;
}
}

void limparMatriz(struct MATRIZ matriz) {
int i;
struct MATRIZ CELULA;
for (i=0; i < NLINHAS; i++) {
CELULA *paux = matriz.linha[i].direita;
while (paux != NULL) {
CELULA *prem = paux;
paux = paux->direita;
free(prem);
}
}
}

inserir(struct MATRIZ matriz, int lin, int col,struct DADO dado) {
struct MATRIZ CELULA;
if (lin < NLINHAS && col < NCOLUNAS) {
///////////inserir na linha
//aponta para a posição anterior de inserção
CELULA *paux = &matriz.linha[lin];
//procurar posição de inserção
while (paux->direita != NULL && paux->direita->col < col) {
paux = paux->direita;
}
//célula já preenchida na martiz
if (paux->direita != NULL && paux->direita->col == col)
paux->direita->dado = dado;
else {
//cria nova célula
CELULA *pnovo = (CELULA *) malloc (sizeof(CELULA));
pnovo->dado = dado;
pnovo->lin = lin;
pnovo->col = col;
//insere na linha
pnovo->direita = paux->direita;
paux->direita = pnovo;
///////////inserir na coluna
paux = &matriz.coluna[col];
//procurar posição de inserção
while (paux->abaixo != NULL && paux->abaixo->lin < lin) {
paux = paux->abaixo;
}
//insere na coluna
pnovo->abaixo = paux->abaixo;
paux->abaixo = pnovo;
}
return true;
}
return false;
}

remover(struct MATRIZ matriz, int lin, int col) {
struct MATRIZ CELULA;
if (lin < NLINHAS && col < NCOLUNAS) {
//aponta para a posição anterior de remoção
CELULA *paux = &matriz.linha[lin];
//procurar posição de remoção
while (paux->direita != NULL && paux->direita->col < col) {
paux = paux->direita;
}
//se o elemento a direita é o procurado, remover
if (paux->direita->col == col) {
CELULA *prem = paux->direita;
paux->direita = paux->direita->direita;
free(prem);
}
return true;
}
return false;
}

consultar(struct MATRIZ matriz, int lin, int col,struct DADO dado) {
struct MATRIZ CELULA;
if (lin < NLINHAS && col < NCOLUNAS) {
CELULA *paux = matriz.linha[lin].direita;
while (paux != NULL) {
if (paux->col == col) {
dado = paux->dado;
return true;
}
paux = paux->direita;
}
dado.valor = 0;
return true;
}
return false;
}
[/codebox]

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, Justiceira

Se você está aprendendo C++, esqueça esse código. Ele é cheio de detalhes que não são simples de entender. Por exemplo, a declaração de um ponteiro dentro de um struct, e o seu funcionamento.

Mas se o C++ não está compilando este código, deve ser porque NLINHAS e NCOLUNAS não estão definidas. Além disso, não há uma função main, ou seja, o compilador não sabe por onde começar. Devem haver outros problemas, mas estes são notáveis.

Novamente, se você está iniciando, deixe este código de lado e procure outros mais simples. Aqui mesmo no fórum há tutoriais e links.

Abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

Na verdade já tem isso da definição de NLINHAS e NCOLUNAS

#define NLINHAS 10

#define NCOLUNAS 10

E quanto a erros não quer compilar diz que não esta declarado paux,prem,pnovo...entre outros

Esse é o problema maior não sei se seria isso

struct MATRIZ *paux;

não entendi mesmo isso

E só não troco de programa porque preciso entregar um trabalho com a função de inserção somente,porem tenho q fazer ele todo pra rodar e estar certo

Link para o comentário
Compartilhar em outros sites

  • 0

alguém poderia me explicar qual a função dessa linha(pensando numa matriz esparsa)

aux.direita.valor=valor

tipo temos varios zeros que não seriam inseridos porem o q essa linha acima faz??

tipo estou no 1° zero ele é a vaiavel aux??

0 6 0 0

0 0 0 5

1 0 0 8

0 0 1 0

seria uma por exemplo struct celula{

float valor;

struct celula *direita;

};

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...