Ir ao conteúdo
  • Cadastre-se

sist. dinamico de criticalidade auto-organizada.


valiatti

Posts recomendados

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

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
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...

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

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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