Jump to content
Krazzi

Matriz

Recommended Posts

Krazzi

Boas...já não programo em c a ja algum tempo, não consigo lembrar como o que faço um um programa que gere aleatoriamente uma matriz quadrada com valores

inteiros que podem variar de 1 a 100, que visualize a matriz gerada e que determine

as somas dos elementos da diagonal principal e da diagonal secundária. Use

funções e considere que as dimensões da matriz nunca ultrapassam 10×10.

Alguém me ajude?

Share this post


Link to post
Share on other sites
Krazzi

Tenho duvidas em gerar a matriz aleatória......pois todos os exemplos que tenho visto e pra colocar determinados valores em certos sitios

Share this post


Link to post
Share on other sites
Baderous

Basta iterar sobre a matriz e, em cada elemento utilizar as funções de geração de números aleatórios para obter um valor.

Share this post


Link to post
Share on other sites
KiNgPiTo

Com 1 simples ciclo for, faz-se isso rapidamente, atribuindo valores à matriz...

Não sou grande adepto de fornecer código, mas pega lá algo que fiz à pressa:

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

int main()

{
    
//Declaração de Variaveis    
int matriz[10][10], i, k;

//Iniciar o gerador de numeros
srand (time(NULL));

//Parte para gerar os valor
    for (i=0; i<10; i++){
        for (k=0; k<10; k++)
        matriz[i][k] = rand() % 100; //Se quiseres incluir o 100 nas possibilidades isto passa para 101
    }
    
//Vizualizar os valores gerados
    for (i=0; i<10; i++){
        for (k=0; k<10; k++)
        printf("[%d][%d] = %d\n", i, k , matriz[i][k]);
    }
        
system("pause");
return 0;    

}

Share this post


Link to post
Share on other sites
Krazzi

Mas agora com com outra duvida. Eu quero que no final do programa ele me apresente a soma da diagonal principal e secundaria. De momento tou com as funcoes assim:

float somp() {
float total=0;
int i,c;
int matriz[c][c];

for(i=0;i<c;i++)
	total+=total+matriz[c][c];

printf("A somda diagonal principal e: \n",total);
}

float soms() {
float total=0;
int i,c,l;
int matriz[c][c];

for(i=0;i<c;i++)
	for(i=0;i<l;i--)

		total+=matriz[l][c];

printf("A somda diagonal secundaria e: \n",total);		
}

Mas o programa da-me sempre erro o que se passa?

Share this post


Link to post
Share on other sites
pedrosorio

int i,c;

int matriz[c][c];

Continua a usar variáveis não inicializadas e hás-de ter uma grande sorte. Esse c é o quê? Declaras o c mas não lhe atribuis nenhum valor. Estás a definir uma matriz de que tamanho nesse caso?

Se isso são funções têm que ter argumentos (nesse caso um apontador para apontadores para inteiros que é a matriz, e um inteiro que é a dimensão da matriz quadrada).

Para além disso não percebo porque é que funções que somam inteiros devolvem float.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
pedrosorio

Parece que não queres ser ajudado. É evidente que esse código não executa nada. Em C precisas de uma função main para o código ser executado. Tal como está presumi que tinhas uma função main que estava a chamar essas funções.

E partindo disso, essas funções tal como estão, estão mal. Não têm argumentos, têm variáveis essenciais que não são inicializadas. E reparei agora que ao somares os elementos fazes total+=total+matriz[c][c] que obviamente está mal, porque x+=a faz x=x+a, pelo que essa linha de código faz total=total+total+matriz[c][c].


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Krazzi

mas as variaveis nao podem ser as que foram inicialmente declaradas?

mas entao como e que crio a funcao que desejo? e o que tal mal de modo a que eu posso modificar?

Obrigado

Share this post


Link to post
Share on other sites
pedrosorio

Se queres usar as variáveis inicialmente declaradas então não as declaras de novo na função. Mas o mais correcto seria as funções receberem como argumento as variáveis.

Neste caso seria algo do género:

int somp(int** matriz, int c)


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
pedrosorio

Nesta linha de código?

total+=total+matriz[c][c]

não percebeste porque é que está errado?


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Krazzi

Nao, porque na minha prepetiva tou a somar ao total o "valor" do que se encontra na dada posicao da matriz

Share this post


Link to post
Share on other sites
pedrosorio

Sim, isso corresponde a escrever

total = total + matriz[c][c]

Somo o total ao valor que se encontra numa dada posição e coloco esse novo valor no total.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Krazzi

Sim por acaso ja fiz isso mas ele nao efectua a soma. deve ser por nao guardar a matriz gerada....devo igualar a um outro vector e assim fazer as operacoes com o novo vector?

Share this post


Link to post
Share on other sites
pedrosorio

O problema é que tu não tens função nenhuma! Estás a definir uma matriz dentro da função obviamente que não é a que está fora...

int somp(int** matriz,int c) {

  int i, total;

  total=0;

  for(i=1;i<c;i++)

      total += matriz[c][c];

  return total;

}


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.