Ir ao conteúdo

Posts recomendados

Postado

Um treinador de voleibol gostaria de manter estatísticas sobre sua equipe. A cada jogo, seu auxiliar anota quantas tentativas de saques, bloqueios e ataques cada um de seus jogadores fez, bem como quantos desses saques, bloqueios e ataques tiveram sucesso (resultaram em pontos). Seu programa deve mostrar qual o percentual de saques, bloqueios e ataques do time todo tiveram sucesso.

 

para armazenar as informações de cada jogador usei um vetor de struct, e para calcular a porcentagem de sucesso, preciso fazer uma funcao que receba essa struct por parametro mas estou meio perdido e não sei como fazer, e estou perdido nos ponteiros tmb.

tenho certeza que tem muita coisa errada no meu codigo kkk ,mas n sei como consertar.

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



typedef struct {
    char nome[255];
    int saquesTotal;
    int bloqueiosTotal;
    int ataquesTotal;
    int saquesSucesso;
    int bloqueiosSucesso;
    int ataquesSucesso;
}Jogador;

void porcentagem (Jogador a[ ? ]){
    int i, b=0, c=0, d=0, e=0, f=0, g=0;
    float *s;
    float *q;
    float *k;
    for(i=0;i< ? ;i++){
        b = b + a[i].saquesTotal;
        c = c + a[i].saquesSucesso;
        d = d + a[i].bloqueiosTotal;
        e = e + a[i].bloqueiosSucesso;
        f = f + a[i].ataquesTotal;
        g = g + a[i].ataquesSucesso;
    }

    (float)b=((float)c/b)*100;
    (float)d=((float)e/d)*100;
    (float)f=((float)g/f)*100;

    s=&b;
    q=&d;
    k=&f;
}

int main(void){
    int n, i;
    int *p;

    Jogador a[n];

    scanf("%d", &n);
    p=&n;

    for(i=0;i<n;i++){
        scanf("%s", &a[i].nome);
        setbuf(stdin,NULL);
        printf("\n");
        scanf("%d %d %d", &a[i].saquesTotal, &a[i].bloqueiosTotal, &a[i].ataquesTotal);
        printf("\n");
        scanf("%d %d %d", &a[i].saquesSucesso, &a[i].bloqueiosSucesso, &a[i].ataquesSucesso);
        printf("\n");
    }
    porcentagem(Jogador a[ ? ])
    
        printf("Pontos de Saque: %.2f%%", *s); 
        printf("Pontos de Bloqueio: %.2f%%", *q); 
        printf("Pontos de Ataque: %.2f%%", *k); 

}

 

  • Obrigado 1
Postado
Em 18/10/2021 às 16:03, Nelsonderocha disse:

para armazenar as informações de cada jogador usei um vetor de struct,

 

Pois é. Mas 

 

Em 18/10/2021 às 16:03, Nelsonderocha disse:

Um treinador de voleibol gostaria de manter estatísticas sobre sua equipe.

 

Uma equipe não deveria ser um vetor de struct.

 

Escreva em torno dos dados: e os dados são uma equipe, uma coleção de jogadores, com um número, uma capacidade, um nome, um local de treino, atributos, e coisas como... ESTATÍSTICAS.... ;) 

 

Em 18/10/2021 às 16:03, Nelsonderocha disse:

usei um vetor de struct, e para calcular a porcentagem de sucesso, preciso fazer uma funcao que receba essa struct por parametro mas estou meio perdido e não sei como fazer, e estou perdido nos ponteiros tmb.

 

Se tivesse uma estrutura para a equipe tudo estaria resolvido: passa o endereço da equipe.

 

void porcentagem (Jogador a[ ? ]){
    int i, b=0, c=0, d=0, e=0, f=0, g=0;
    float *s;
    float *q;
    float *k;

 

Que pretende com esses ponteiros não inicializados? Não declare assim: s é float*. É isso que está declarando: s é um ponteiro para float. Então o tipo é float* e o nome é s. Isso só vai te confundir. EVITE esse vício. O asterisco tem tripla personalidade em C.

 

Escreva
 

    float*        s = NULL;

 

E fica claro que s é um ponteiro para float e inicializado com NULL;

 

É claro que se s é float*  *s é float. Isso é a definição. Mas não se declara uma definição. Se declara um nome.

 

Use nomes mais expressivos.

 

Exemplo de representação

 

typedef struct
{
    char nome[255];
    int  saquesTotal;
    int  bloqueiosTotal;
    int  ataquesTotal;
    int  saquesSucesso;
    int  bloqueiosSucesso;
    int  ataquesSucesso;

} Jogador;

typedef struct
{
    float saque; // entre 0 e 1.
    float bloqueio; // 1. = 100%
    float ataque; // 

}   Stats; // estatisticas

typedef struct
{
    char nome[30];
    int  n; // quantos
    int  max; // quantos no maximo
    Jogador j[MAX_EQUIPE];
    Stats   stats;

}   Equipe;

int atualiza_stats(Equipe*);

 

Se tem uma Equipe e a equipe tem um nome, um vetor de jogadores e umas estatísticas então não faz mais sentido, mesmo ANTES de começar a programar, só porque escreveu em torno dos dados? E como faria para atualizar um trem desses?

 

    int atualiza_stats(Equipe* E);

 

Pois é: a função recebe a Equipe E. Tudo dentro de E. Então lê o vetor de jogadores J, e já sabe quantos são, n. E quantos poderiam ser, max. E o nome da equipe. E aí calcula as estatísticas e grava em stats. Ao retornar está tudo certo. 

 

Recebe só um ponteiro de 4 ou 8 bytes e tem acesso a qualquer equipe.

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!