Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Dúvidas para utilização de ponteiros


Carla Aguiar

Pergunta

Bom dia pessoal. :rolleyes:

Tenho o seguinte exercicio para concluir: Crie um programa que receba 4 valores qualquer e mostre a média entre eles, a somatoria entre eles, e o resto da divisão da somatoria por cada um dos valores.

Comecei da seguinte forma: (fiz a requisição dos 4 valores e consegui fazer a média, utilizando os ponteiros e struct)

#include <stdio.h>
#include <stdlib.h>
struct Media{       
       float v1;
       float v2;
       float v3;
       float v4;
       float totmed;
       };
       main (){
            struct Media med [4];
            float totmed;
            float totsoma;
            int i=1;
           for (i=1; i<2; i++){
                printf ("\n inf o %u. valor: ", i);
                scanf ("%f", &med[i].v1);
                printf ("\n inf o %u. valor: ", 2);
                scanf ("%f", &med[i].v2);
                printf ("\n inf o %u. valor: ", 3);
                scanf ("%f", &med[i].v3);
                printf ("\n inf o %u. valor: ", 4);
                scanf ("%f", &med[i].v4);
               
                med[i].totmed= (med[i].v1+med[i].v2+med[i].v3+med[i].v4)/4;
                              }
                system ("cls");
               
                for (i=1; i<2; i++){ 
                  
                    printf ("\n media dos valores %u. e %0.2f", i, med[i].totmed);
                    
                   
                  
                                   }
                                   system ("pause");
                                   }

Mas quando tentei utilizar da mesma fórmula só para mostrar a soma, e depois tentar fazer o mod para demonstrar o resto não consegui :unsure: Como posso aproveitar este código de forma que eu faça a soma e mostre, e já realize o mod com o total da soma e os valores? Me ajudem pleas!

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde!

Pra você fazer isso tá simples!

Oh, você tem a média certo? Se você multiplicar a média pelo número de elementos (no caso 4) você terá a soma!

Com a soma é só você fazer as contas necessárias...

Por exemplo, para descobrir o resto da primeira nota:

PS: Como você está usando floats, o operador de módulo(%) não funciona, você terá que usar a função fmod[http://www.cplusplus.com/reference/clibrary/cmath/fmod/]

printf( "O resto da somatoria dividida pela primeira nota é: %f\n" , fmod( med[1].totmed * 4 , med[1].v1 ) );
Agora seria interessante se você criasse um vetor para armazenar os valores, assim oh:
float v1;
float v2;
float v3;
float v4;

//Poderia trocar por:
float valor[4];

Porque daí você pode iterar o vetor num laço de repetição!

PS: Quando for postar um código, coloque ele entre as tags [ code] [ /code] (sem espaço)

Qualquer coisa, é só falar!

Link para o comentário
Compartilhar em outros sites

  • 0

Ok! desculpe por não ter postado o código da forma correta :( sou iniciante no forúm por isto ainda dou uma dessas...rs

então vou testar realizando estas alterações, e qualquer coisa posto aqui denovo. Pois preciso concluir este programa até quarta no máximo, e o seu auxilio foi muito útil!!!!!! :lol:

Editado por Jonathan Queiroz
Remover quote desnecessário (Jonathan)
Link para o comentário
Compartilhar em outros sites

  • 0

Bem fiz o código assim:

#include <stdio.h>
#include <stdlib.h>
struct Media{       
       float v1;
       float v2;
       float v3;
       float v4;
       float totmed;
       float totsoma;
       };
       main (){
            struct Media med [4];
            
            
           int  i=1;
           for (i=1; i<2; i++){
                printf ("\n inf o %u. valor: ", 1);
                scanf ("%f", &med[i].v1);
                printf ("\n inf o %u. valor: ", 2);
                scanf ("%f", &med[i].v2);
                printf ("\n inf o %u. valor: ", 3);
                scanf ("%f", &med[i].v3);
                printf ("\n inf o %u. valor: ", 4);
                scanf ("%f", &med[i].v4);
               
                med[i].totmed= (med[i].v1+med[i].v2+med[i].v3+med[i].v4)/4;
                med[i].totsoma= (med[i].v1+med[i].v2+med[i].v3+med[i].v4);
                           }
                system ("cls");
               
                for (i=1; i<2; i++){                   
                   printf ("\n media dos valores e = %0.1f \n", med[i].totmed);
                   printf ("\n soma dos valores  e = %0.1f  \n", med[i].totsoma);
                      
                   printf( "\n Resto da somatoria div. pela primeira nota e: %0.1f \n" , fmod( med[i].totmed * 4 , med[1].v1 ) );
                   printf( "\n Resto da somatoria div. pela segunda nota e: %0.1f  \n" , fmod( med[i].totmed * 4 , med[2].v2 ) );
                   printf( "\n Resto da somatoria div. pela terceira nota e: %0.1f \n" , fmod( med[i].totmed * 4 , med[3].v3 ) );
                   printf( "\n Resto da somatoria div. pela quarta nota e: %0.1f   \n" , fmod( med[i].totmed * 4 , med[4].v4 ) );
                                     
                                   }
                                   system ("pause");
                                   }

Mas acho que a parte do resto da somatoria esta errada :( pois os valores aparentemente não coincidem com o resto da divisão da somatoria por cada um dos valores....será que alguém poderia revisar??? e se tiver algo que possa melhorar meu programa também seria muito legal me fazer a notação.

Obrigada pela atenção!!!!!!!!!!!!!!!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noitee!

Ultimo post antes de drumir! :x

Aki oh, seu código "revisado"

Fiz alguns comentários!

#include <stdio.h>
#include <stdlib.h>
struct Media{ 
    float v1;
    float v2;
    float v3;
    float v4;
    float totmed;
    float totsoma;
};

main (){
    /*
     * Se você quer descobrir a média para um conjunto de quatro números, você não precisa declarar um vetor,
     * afinal de contas, a struct média já tem as 4 variaveis para as notas!
     * Se você queria ter 4 conjuntos de 4 números, então tá certinho! :D
     */
    struct Media med [4];


    int i=1;
    for (i=1; i<2; i++){
        printf ("\n inf o %u. valor: ", 1);
        scanf ("%f", &med[i].v1);
        printf ("\n inf o %u. valor: ", 2);
        scanf ("%f", &med[i].v2);
        printf ("\n inf o %u. valor: ", 3);
        scanf ("%f", &med[i].v3);
        printf ("\n inf o %u. valor: ", 4);
        scanf ("%f", &med[i].v4);

        med[i].totmed= (med[i].v1+med[i].v2+med[i].v3+med[i].v4)/4;
        med[i].totsoma= (med[i].v1+med[i].v2+med[i].v3+med[i].v4);
    }
    system ("cls");

    for (i=1; i<2; i++){ 
        printf ("\n media dos valores e = %0.1f \n", med[i].totmed);
        printf ("\n soma dos valores e = %0.1f \n", med[i].totsoma);
    
        /*
         * O problema tá aqui oh, você tava pegando uma nota de cada estrutura (med[1].v1,med[2].v2,med[3].v3,med[4].v4)
         * quando que o certo seria você pegar todas as notas da estrutura do loop atual(med[i])
         *
         * Outra coisa é que você tem a soma na estrutura agora, então você não precisa mais pegar a (media*4)
         */
        printf( "\n Resto da somatoria div. pela primeira nota e: %0.1f \n" , fmod( med[i].totsoma , med[i].v1 ) );
        printf( "\n Resto da somatoria div. pela segunda nota e: %0.1f \n" , fmod( med[i].totsoma , med[i].v2 ) );
        printf( "\n Resto da somatoria div. pela terceira nota e: %0.1f \n" , fmod( med[i].totsoma , med[i].v3 ) );
        printf( "\n Resto da somatoria div. pela quarta nota e: %0.1f \n" , fmod( med[i].totsoma , med[i].v4 ) );    
    }
    system ("pause");
}
Basicamente eu só não entendi o porque você declarou um vetor de 4 posições da estrutura sendo que você só usa 1! Mais do resto tá certinho, o unico errinho na média foi uma confusãozinha, imagino eu que decorrente da declaração desse vetor! Se você quiser, eu fiz uma "versão" oh:
#include <stdio.h>
#include <stdlib.h>
/*
 * Mudando um pouco a estrutura da média, criando os valores num vetor, daí agnt pode preencher e analisar eles através de um
 * loop
 */
struct Media {
    float valor[4];
    float soma;
    float media;
};

int main( int argc, char **argv ){
    /*
     * Se você quer pegar somente um conjunto de quatro números, não é preciso declarar um vetor aqui, 
     * a struct já tem as 4 variaveis para os valores, então basta declarar uma 
     * struct!
     */
         
    struct Media med;
    int i;
    
    //Inicializa o somatorio como 0 (ZERO)
    med.soma = 0;
    
    //Loop pra pegar todas as notas
    for( i=0; i<4; i++ ){
        printf( "Digite o valor %d: " , i+1 );
        scanf( "%f" , &med.valor[i] );
    }   

    //Calcula a soma: Esse for é o equivalente a: (med[i].v1+med[i].v2+med[i].v3+med[i].v4)
    for( i=0; i<4; i++ ){         
        med.soma += med.valor[i];
    }        
    //Adiciona a média agora
    med.media = med.soma / 4;
    
    system ("cls");

    printf ("Media dos valores é: %0.1f\n", med.media);
    printf ("Soma dos valores é : %0.1f\n", med.soma);
    
    //Loop pra percorrer todos os valores(notas)
    for( i=0; i<4; i++ ){ 
        printf( "Resto da somatoria(%.2f) divido pela %d nota(%.1f) é: %0.1f\n" , med.soma, i+1 , med.valor[i], fmod( med.soma , med.valor[i] ) );
    }
    system ("pause");
}

Ahh, não tem espaço entre o "[" e o "code", é tudu junto!

Enfim, espero ter ajudado!

Boa noite! ^.^

Link para o comentário
Compartilhar em outros sites

  • 0

hum... eu tentei copilar e deu erro :( não apareceu nenhum valor no resto da somatória. Olha como eu fiz:

#include <stdio.h>
#include <stdlib.h>
    
    struct Media {
    float valor[4];
    float soma;
    float media;
};

    int main( int argc, char **argv ){

    struct Media med;
    int i;

    med.soma = 0;
   

   for( i=0; i<4; i++ ){
        printf( "Digite o valor %d: " , i+1 );
        scanf( "%f" , &med.valor[i] );
}

  for( i=0; i<4; i++ ){        
        med.soma += med.valor[i];

  med.media = med.soma / 4;


  system ("cls");

    printf ("Media dos valores é: %0.1f\n", med.media);
    printf ("Soma dos valores é : %0.1f\n", med.soma);
}

  for( i=0; i<4; i++ ){
        printf( "Resto da somatoria(%.2f) divido pela %d nota(%.1f) é: %0.1f\n" , med.soma, i+1 , med.valor[i], fmod( med.soma , med.valor[i] ) );
    }

    system ("pause");

}

Esse resto tá complicado :( help-me!!!!

Editado por MLeandroJr!
Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia,

vê se foi claro:

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

struct Media {
    float valor[4];
    float soma;
    float media;
};

int main( int argc, char **argv ){

    struct Media med;
    int i;

    med.soma = 0;


    for( i=0; i<4; i++ ){
        printf( "Digite o valor %d: " , i+1 );
        scanf( "%f" , &med.valor[i] );
    }

    for( i=0; i<4; i++ ){ 
        med.soma += med.valor[i];
    }//O loop termina aki, e não embaixo dos prints

    //Você só faz a média DEPOIS que você tiver a soma
    med.media = med.soma / 4;


    system ("cls");

    printf ("Media dos valores é: %0.1f\n", med.media);
    printf ("Soma dos valores é : %0.1f\n", med.soma);

    //Substitui a função fmod, vamo fazer na mão mesmo:
    // O resto da divisão é: o numerador menos a parte inteira do numerador/denomidor vezes o denominador
    //Ex: o resto de 5/2
    //Númerador = 5; Denominador = 2;
    // 5 - ( (a parte inteira de 5/2) * 2 )
    // 5 - ( (2) * 2 )
    // 5 - 4
    // 1
    //Deu pra intender?!

    for( i=0; i<4; i++ ){
        printf( "Resto da somatoria(%.2f) divido pela %d nota(%.1f) é: %0.1lf\n" , med.soma, i+1 , med.valor[i], med.soma - ( ((int)(med.soma/med.valor[i]))* med.valor[i] ) );
    }
    system ("pause");

}

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui funcionou normalmente com essas entradas:

O resultado esperado é o seguinte:

Media dos valores é: 10.0

Soma dos valores é : 40.0

Resto da somatoria(40.00) divido pela 1 nota(10.0) é: 0.0

Resto da somatoria(40.00) divido pela 2 nota(10.0) é: 0.0

Resto da somatoria(40.00) divido pela 3 nota(10.0) é: 0.0

Resto da somatoria(40.00) divido pela 4 nota(10.0) é: 0.0

Só lembrando que o resto é o resto mesmo,

40 / 10 = 4 e sobra 0

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...