1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda C

Discussão em 'Programação' iniciada por nans, 20 de Março de 2007. (Respostas: 12; Visualizações: 1585)

  1. nans

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

    Rui_Carlos 1st Folding then Sex

    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));
    }
     
  3. MaxDamage

    MaxDamage Power Member

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

    Rui_Carlos 1st Folding then Sex

    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'.
     
  5. MaxDamage

    MaxDamage Power Member

    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.

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

    Cesaria Power Member

    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));
    
     
  7. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

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

    nans Power Member

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

    Sniper32 Power Member

    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)
     
  10. MaxDamage

    MaxDamage Power Member

    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: 23 de Março de 2007
  11. BernardoDW

    BernardoDW Power Member

    Isto é só gajos do tagus :X

    também ando à volta com o C xD
     
  12. MaxDamage

    MaxDamage Power Member

    Nop, alameda here :P
     
  13. Sniper32

    Sniper32 Power Member

    O projecto (e muitos outros) sao iguais nos 2 plos
     

Partilhar esta Página