Matriz em C, Ajudem :(

Preciso fazer com que leia 4 partidas de 4 jogadores.
após isso exibir o jogador com maior pontuação.

está rodando porem não ta indo do jeito certo.

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

int matriz [3][3],i,j;
int jog_maior,maior,soma,jog;

int main(){
maior = 0;

for(i = 0;i <= 3;i++){
	soma = 0;
	}
	 for (j = 0; j < 3; j++){
	 	printf("\nDigite o pontuacao da partida[%d][%d] :",matriz[i][j]);
	 	scanf("%d",&matriz[i][j]); 
	 	soma = (soma + matriz[i][j]);
	 }
	 
	 if (soma > maior){
	 	maior = soma;
	 	jog_maior = jog;
	 } 
	 printf("O jogador com maior pontuacao %.2d",jog_maior);

}

Qual seria o erro?

Se a matríz é 3 x 3 os índices variam de [0][0] a [2][2] e portanto
você tem que fazer o laço assim:
for(i = 0;i < 3;i++){
quando no seu exemplo o i pode chegar a 3 e estourando o tamanho da linha.

ajudou parou de aparecer números negativos, porém ainda não está funcionando como deveria o final não está avisando quem foi o jogador com maior pontuação. apenas aparece
o jogador com maior potuacao 00
o que eu posso fazer neste caso ?

Ele está rodando, porém no final não emiti quem foi o jogador com maior pontuação.

Aqui não deveria ser jog_maior = i; // i guarda o número do jogador ?

Por que não printf("\nDigite a pontuação do jogador na partida[%d][%d] :",matriz[i][j]); ?

1 curtida

Quanto vale jog? Porque você está atribuindo o valor de jog a jog_maior. No entanto, não vi no seu código a parte que atribui valor ao jog.

Eu pensei dessa forma, veja se te serve como um norte:

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

int main(){
    int embates [4][4],i,j;
    //int jog_maior,maior,soma,jog;
    char jogadores[4][8] = {"Juninho", "Mané", "Fumiga", "Buiú"};
    int jogador_campeao; //Jogador que ganhou
    int maior_pontuacao; //A pontuação maior já registrada para um dos jogadores
    int partida; //Mostra as partidas de 1 a 4
    int contador = 0; //Conta as leituras da pontuação

    maior_pontuacao = 0; //A maior pontuação é zero entes do começar os embates
    jogador_campeao = maior_pontuacao; //Logo, o possível jogador campeão não tem pontuação
    for(i = 0; i <= 3;i++){
        partida = i;
        partida++;

        for(j = i; j <= partida ; j++){
            //Caso o jogador seja o quarto, então ele deve jogar com o primeiro jogador para fechar as chaves
            if(j == 4){
                i = 0;
                j = 0;
            }

            printf("\nDigite o pontuação do jogador %s na partida %d: ", jogadores[j], partida);
            scanf("%d",&embates[i][j]);
            ++contador; //Conta as leituras
            //soma = (soma + matriz[i][j]);

            //Se na partida i, o jogador j tiver uma pontuação maior que a pontuação do que a do seu oponente
            if(embates[i][j] > maior_pontuacao){
                maior_pontuacao = embates[i][j]; //Então a maior pontuação (atual) é a desse jogador
                jogador_campeao = j; //Então o jogador campeão para essa pertida é o jogador j
            }
            //Se houve houver quatro partidas então houve outo leituras
            if(contador == 8){
                i = 4; //Então o número de partidas é 4
                partida = -1; //As partidas terminam -> j = 4, 4 <= partidas = false, então é hora de mostrar o campeão
            }
        }
        printf("\n");
    }
    /*if (soma > maior){
        maior = soma;
        jog_maior = jog;
    }*/
    printf("\n\nO jogador com maior pontuacao foi: %s com %d pontos.\n\n", jogadores[jogador_campeao], maior_pontuacao);

    system("pause");
    return 0;
}

Rodando…

image

As partidas acontecem da seguinte forma:

1 - Juninho vs Mané
2 - Mané vs Fumiga
3 - Fumiga vs Buiú
4 - Buiú vs Juninho

1 curtida

Ficou legal a ideia cara mas não é exatamente isso.
basicamente ele pede que lemos linhas e colunas
linhas= jogadores
colunas=partidas

eu consegui arrumar uma parte do código porém falta o final onde tenho que exibir número do jogador com maior pontuação.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int matriz [4][6],i,j; //linha=jogadores , colunas=partidas
int jog_maior,maior,soma,jog;

int main(){

maior = 0;
 
for(i = 0;i < 4;i++){
   soma = 0;
	 for (j = 0; j < 6; j++){
	 	printf("\nDigite o pontuacao da partida[%.2d][%.2d] :",matriz[i][j]);
	 	scanf("%d",&matriz[i][j]);
	 	soma = soma + matriz[i][j];}
	 }

agora tenho que arrumar o final onde devo mostrar quem é o jogador com maior pontuação.

@Rodrigo90:

Embates[4][4] significa quatro partidas (linhas), quatro jogadores (colunas). Bom a minha ideia foi essa (não tinha pretensão de ser a resolução).

Toda ajuda é bem vinda, valeu mesmo assim.

O seu ir deveria estar dentro do for.
É sua variável jog não foi inicializado. Por isso está atribuindo 0 para variável jog_maior

Se você quer criar uma matriz numérica que suporte operações matemáticas simples ou complexas considere utilizar a biblioteca GLM.
https://glm.g-truc.net/

Não só pode ser utilizada para operações vetoriais e matriciais como também para outras miudezas, extremamente útil para programação gráfica com OpenGL.