• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Krazzi

Matriz

21 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;    

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

error while dumping state(probably corrupted stack)

Segmentation fault(core dumped)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesta linha de código?

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

não percebeste porque é que está errado?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora