Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
valiatti

sist. dinamico de criticalidade auto-organizada.

Recommended Posts

boa tarde forum

Estou fazendo um pequeno programa baseado em criticalidade auto-organizada que consiste num programa que simula desmoronamento e avalanche.

Com ajuda do fórum consegui fazer o algoritmo para a lógica, mas há dias travei na hora de inserir isso em uma estrutura.

Busquei em várias fontes na internet (google!!)

mas todos os resultados, por mais variados que fossem, usam as mesmas palavras para explicar.

O post

forum.clubedohardware.com.br/estruturas-dados-pilhas foi o que mais ajudou, mas não evolui muito.

Pois bem, ao assunto do tópico:

O programa é simples: ele gera um matriz NxN, q vai incrementando em uma unidade aleatóriamente a matriz. quando uma célula dessa matriz chega a um valor crítico (4) ela desmorona a célula é zerada e o conteúdo divido entre as célula vizinhas.

Até aí foi fácil, mas não consgui colocar isso em uma estrutura (struct)

segue aqui o protótipo sem o struct


#include <stdlib.h>
#include <time.h>

float **areia;

main()
{
int i,j,x,y,l,c, cont=0;
char sair;
printf("\tAVANCHE SIMULATOR\n\n");

while(l>100){
printf("qual o tamanho da mesa (menor que 100)?\n:");
scanf("%d",&l);
c=l;
system("cls");}

printf("Precione enter para jogar um grao de areia sobre a mesa\n\n");
getchar();
areia = (float**) malloc(l*sizeof(float*));
for(i=0;i<l;i++){
areia[i] = (float*) malloc(c*sizeof(float));}

for(i=0;i<l;i++){
for(j=0;j<c;j++){
areia[i][j]=0;
}
}

srand(time(NULL));
while(sair!='n'){
x=l*rand()/RAND_MAX;
y=c*rand()/RAND_MAX;
areia[x][y]++;
for(i=0;i<l;i++){
for(j=0;j<c;j++){
if(areia[x][y]>3)
{
areia[x][y]=0;
areia[x+1][y]++;
areia[x-1][y]++;
areia[x][y+1]++;
areia[x][y-1]++;
cont++;
printf("avalanche na linha [%d] coluna[%d]\n\n", x, y);
}}
}
for(x=0;x<l;x++){
for(y=0;y<c;y++){
printf("%.f\t",areia[x][y]);
}
printf("\n");
}
cont++;
printf("\ncontinuar (S/N) ?(S)\n:");
scanf("%c",&sair);
if(sair=='n'||sair=='N')
{sair='n';}
else
if(sair=(NULL))
{sair='s';}
system("cls");
}
getchar();
free(areia);
system("exit");
}
#include <stdio.h>

Eu comecei a tentar estruturar alguma coisa mas dai eu trancava..

tentei cria uma estrutura dentro da outra.. mas daí não conseguia inseir valor de dentro dessa última.

ficaria algo tipo

 linha[].coluna[]. valor 

obrigado

Editado por dif
Usar tag CODE para postar seus códigos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi o motivo da estrutura, você quer armazenar quais informações nela?

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Boa Noite Waltton.

    é um trabalho de curso e precisa incluir estrutura.

    Acho que estarei falando besteira porém minha ideia é criar uma estrutura dentro da outra, fazendo uma matriz de estrutura.

    Minha dificuldade é o seguinte: se eu criar um campo dentro de estrutura, ex:

     struct vertical{int coluna;}linha;

    eu posso criar quantas 'colunas'eu quiser? tipo

    linha[1].coluna[1]

    linha[1].coluna[2]

    linha[1].coluna[n]

    linha[2].coluna[1]

    linha[2].coluna[2]

    linha[2].coluna[n] ?

    de forma que linha e coluna formassem um endereço,?

    falei muita asneira? realmente struct eu não compreendo..todos os textos que achei usam as mesmas palavras para explicar.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Então cara, meio desnecessário isso, se você precisa fazer algo desse tipo, podes usar uma matriz bidimensional.


    int matriz[L][C];

    Ps: não lembro exatamente se é assim, tenho confundido um pouco c/c++ com c# hehe, mas é isso, você usaria matriz bidimensional.

    Editado por dif
    Caro usuário, se possível, evite de usar gírias ou abreviações.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Boa noite Waltton,

    Então cara, meio desnecessário isso, se você precisa fazer algo desse tipo, podes usar uma matriz bidimensional.


    int matriz[L][C];

    Ps: não lembro exatamente se é assim, tenho confundido um pouco c/c++ com c# hehe, mas é isso, você usaria matriz bidimensional.

    A utilidade que vejo é apenas a nível de aprendizado.

    No código que postei (não sei se apareceu) mas foi assim que comecei o código.

    Daí no final que reparei que deveria usar struct.

    Estou tentando aqui, mas sem sucesso.

    Assim que eu conseguir, se eu conseguir, eu posto aqui..

    Obrigado pela força..

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Bom pode ser util para o aprendizado sim, o triste é que tem alguns professores que passam algumas coisas nada condizentes pode ser isso, ou existe outra coisa no seu programa que você posso usar estrutura...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Bom pode ser util para o aprendizado sim, o triste é que tem alguns professores que passam algumas coisas nada condizentes pode ser isso, ou existe outra coisa no seu programa que você posso usar estrutura...

    Não sei se existe outra coisa, eu entendo que seja para aprendizado..

    Obrigado a atenção.. mais tarde vou tentar postar o que eu consegui desenvolver..

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Conforme solicitado, estamos reabrindo este tópico!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Boa Noite Waltton.

    é um trabalho de curso e precisa incluir estrutura.

    Acho que estarei falando besteira porém minha ideia é criar uma estrutura dentro da outra, fazendo uma matriz de estrutura.

    Minha dificuldade é o seguinte: se eu criar um campo dentro de estrutura, ex:

     struct vertical{int coluna;}linha;

    eu posso criar quantas 'colunas'eu quiser? tipo

    linha[1].coluna[1]

    linha[1].coluna[2]

    linha[1].coluna[n]

    linha[2].coluna[1]

    linha[2].coluna[2]

    linha[2].coluna[n] ?

    de forma que linha e coluna formassem um endereço,?

    falei muita asneira? realmente struct eu não compreendo..todos os textos que achei usam as mesmas palavras para explicar.

    Para isso, faça assim verde.gif:


    struct Matriz
    {
    int Colunas[2];
    } Linhas[2];

    Exemplo de uso:


    #include <stdio.h>



    struct Matriz
    {
    int Colunas[2];
    } Linhas[2];



    int main(void)
    {
    Linhas[0].Colunas[0] = 10;
    Linhas[0].Colunas[1] = 20;
    Linhas[1].Colunas[0] = 30;
    Linhas[1].Colunas[1] = 40;
    printf("%d\n", Linhas[0].Colunas[0]); //Mostraria o número 10.
    printf("%d\n", Linhas[0].Colunas[1]); //Mostraria o número 20.
    printf("%d\n", Linhas[1].Colunas[0]); //Mostraria o número 30.
    printf("%d\n", Linhas[1].Colunas[1]); //Mostraria o número 40.
    getchar();
    return 0;
    }

    Espero ter ajudado smiled.gif.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Walton, rjjj,

    Foi bem isso mesmo que eu fiz, só que não imaginava que poderiam ser simples assim!!

    Dái ficou assim


    struct ordenada{int sitio;};
    struct posicao{struct ordenada y[100];}x[100], *psitio;

    e para inserir uma unidade aleatóriamante:


    e=l*rand()/RAND_MAX;
    n=c*rand()/RAND_MAX;
    x[e].y[n].sitio++;
    for(i=0;i<l;i++){
    for(j=0;j<c;j++){
    if(x[e].y[n].sitio>3){
    x[e].y[n].sitio=0;
    x[e+1].y[n].sitio++;
    x[e-1].y[n].sitio++;
    x[e].y[n-1].sitio++;
    x[e].y[n+1].sitio++;
    printf("linha %d coluna %d\n", e+1,n+1);
    }
    }

    Obrigado mais uma vez rjjj, dif e waltton

    Editado por dif
    Usar a barra "normal" e não a invertida no fechamento da tag CODE

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×