Ajuda C

nans

Power Member
Boas

Estou aqui com um pequeno problema, que e o seguinte:

Quero fazer uma matriz, mas de começo nao sei o tamanho dela(linha e colunas). O tamanho dela vai-me ser fornecido pelo utilizador...

Outro problema, é como é que eu encho a matriz com caracteres "randomizados"!

Desde ja agradeço a ajuda

Cumprimentos
 
quanto ao problema do tamanho, podes recorrer ao 'malloc' ou 'calloc' para alocar o espaço em runtime.

para encher a matriz, é só percorrê-la e gerar números aleatórios para colocar em cada posição.

podes usar a seguinte função para gerar os números aleatórios:

Código:
long seed=0;

int getRandom(int min,int max)
{
  if(!seed)
  {
    time(&seed);
    srand((unsigned)seed);
  }

  return(min+rand()%(max-min+1));
}
 
Hmm, o malloc seria boa solução se a matriz tivesse apenas uma dimensão, com mais dimensões torna-se mais complicado. Uma solução alternativa pode ser qualquer coisa como:


Código:
#include <stdio.h>

void matriz_func(int linhas, int colunas);
int getRandom(int min, int max, long int seed); /* funcao do Rui_Carlos */

int main()
{
     int x, y;
     
     printf(" Numero de linhas -> ");
     scanf("%d", &x);
     printf(" Numero de colunas -> ");
     scanf("%d", &y);

     matriz_func(x,y);     

     return 0;
}

void matriz_func(int linhas, int colunas)
{
     int matriz[linhas][colunas], x, i;
     long int seed = 0;

     for(i=0; i < linhas; i++)
          for(x=0; x < colunas; x++)
                matriz[i][x] = getRandom(0, 100, seed); /* 0 e 100 por exemplo.. */

     return;
}

int getRandom(int min, int max, long int seed)
{
     if(!seed)
     {
         time(&seed);
         srand((unsigned)seed);
     }

     return(min+rand()%(max-min+1));
}


Isto foi feito à pressa, é provavel que tenha erros e possa ser optimizado, mas a ideia é esta.
 
Hmm, o malloc seria boa solução se a matriz tivesse apenas uma dimensão, com mais dimensões torna-se mais complicado.

qual é o problema?

Código:
char* matrix=(char*)calloc(linhas*colunas,sizeof(char));

deve resolver o problema, não?
o problema será depois aceder às posições... eu normalmente uso uma macro para resolver isso.

na tua solução vais ter problemas caso precises da matriz fora da função onde a estás a declarar, daí eu sugerir a utilização do 'malloc'.
 
qual é o problema?

Código:
char* matrix=(char*)calloc(linhas*colunas,sizeof(char));

deve resolver o problema, não?
o problema será depois aceder às posições... eu normalmente uso uma macro para resolver isso.

Exacto, quando referi complicado era em relação ao aceder às posições, porque o alocar memória não tem nada que saber, é sempre da mesma maneira, apenas varia o tipo/nº posições.

na tua solução vais ter problemas caso precises da matriz fora da função onde a estás a declarar, daí eu sugerir a utilização do 'malloc'.

Sim é vdd, o problema poderia ser contornado colocando as vars "int colunas" e "int linhas" como globais (ma prática eu sei, mas como são apenas duas..), e depois passando a matriz como parâmetro para outras funções
 
Bem se eu percebi bem queres é criar um array bidimensional, a melhor maneira seria usar o calloc ou malloc como o Rui_Carlos e o MaxDamage referiram.
exemplo:
Código:
w = (int **)calloc(var1,sizeof(int *));
 for(i = 0 ; i < var1; i++)
  w[i] = (int *)calloc(var2, sizeof(int));
 
atenção que isso que estás a fazer não é criar um array bidimensional, mas sim um array de arrays. provavelemente também resolve o problema, mas não é exactamente a mesma coisa...
 
Boas pessoal...

Esse problema ja esta resolvido (e desde já agradeço toda a ajuda que foi aqui dada), depois de ler o projecto mais 10 vezes depois de perguntar aqui, não conseguia perceber como é que nós iamos achar alguma palavra na sopa de letras, se era tudo randomizado, depois explicaram-me que o utilizador e que dava as letras para a sopa!!!!

mas agora tenho outro problema...
É o seguinte,

recebo varias string que estao na sopa de letras e tenho de la as procurar, por exemplo como esta no enunciado do projecto:
introdução
ist
algoritmos
dados
estruturas


e o output, tem de ser o seguinte:

introduçao 2,2
algoritmos 9,2
estruturas 11,1
dados 6,3
ist 2,2

traduzindo " PALAVRA 'POSIÇÃO DA PRIMEIRA LETRA NA LINHA','POSIÇÃO DA PRIMEIRA LETRA NA COLUNA' "

Eu gostava de saber como resolver este problema (sem recorrer a ponteiros, porque nao percebo muito disso), visto nao poder receber a palavra a procurar e dar logo o input.

Se nao perceberem alguma perguntem que eu tento explicar melhor o que pretendo

Desde ja agradeço mais uma vez a ajuda de todos

nans
 
Onde é que eu ja vi isto...

Se queres ajuda para um projecto se calhar sera melhor perguntares aos teus colegas... aqui (ou noutro qq se fores da alameda :P)
 
LOL, curioso.. esse enunciado não me é estranho.. hmm deixa ca ver.. ah já sei, não será de AED ? :P

Fazer esse projecto sem ponteiros parace-me quase impossivel.. aconselho-te a estudar e interiorizá-los bem, é fundamental, e serão precisos nos próximos projectos e em cadeiras futuras (SO, ASA, etc).
 
Última edição:
Back
Topo