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

(Resolvido) duvidas em C#


fredyee

Pergunta

Olá pessoal, eu tenho umas duvidas sobre usar ponteiros em linguagem C, eu uso para compilar os códigos o DEVC++. Esse código ai logo abaixo eu não consegui identificar o erro, o enunciado diz que dependendo do código que o usuário digitar corresponde o tanto em porcentagem que o salário aumentou, ao executar o programa ele não compila e da essa mensagen que diz “first use this function ” onde devo declarar a função e como devo declarar? se alguém puder me esclarecer os erros e me mostrar como se faz obrigado desde já agradeço. :D

#include <stdio.h>
float v_prod,aum,tot;
int cod_prod;
main (){
     printf ("digite o valor do produto");
     scanf ("%f", & v_prod);
     printf ("digite o codigo do produto");
     scanf ("%d", & cod_prod);
                if (v_prod = cod1){
                        aumento1 (&v_prod,&cod_prod,&aum,&tot);
                        printf ("valor do produto", v_prod);
                        }
                if (v_prod = cod2){
                        aumento2 (&v_prod,&cod_prod,&aum,&tot);
                        printf ("valor do produto", v_prod);
                        }
                if (v_prod = cod3){
                        aumento3 (&v_prod,&cod_prod,&aum,&tot);
                        printf ("valor do produto", v_prod);
                        }
                        aumento1 (float*pv_prod,float*pcod_prod,int*paum,float*tot);
                        {
                                 *pv_prod = v_prod;
                                 *pcod_prod = cod_prod;
                                 *p_aum = (v_prod *10/100);
                                 *p_tot = (v_prod + p_aum);
                                 }
                                 *p_aum = (v_prod *20/100);
                                 *p_tot = (v_prod + p_aum);
                                 }
                                 *p_aum = (v_prod*30/100);
                                 *p_tot = (v_prod + p_aum);
                                 }

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

4 respostass a esta questão

Posts Recomendados

  • 0

Olá amigo!

Além de uns nomes das variáveis escritos errado, acho que você se embolou um pouco com as chaves e os asteriscos.

As funções do seu programa devem ser declaradas fora da função main(), seja acima dela ou abaixo, sendo que eu costumo dar preferência por declarar acima, caso contrário o compilador reclama e você acaba tendo que declarar um protótipo acima da main().

Quanto aos parâmetros da função, você declara como declararia as próprias variáveis, por exemplo, se a função foo vai receber um inteiro e um ponteiro para float e retornar um outro inteiro, você a declararia assim:

int foo(int var1 , float *var2)
Quanto ao seu código, não consegui consertar, ta um pouco confuso, mas fiz um exemplo que eu acho que pode te ajudar com essa coisa de funções e ponteiros. O meu código funciona assim: ele pergunta o salário e o código, ai dependendo do código ele aumenta o valor do salário, dessa forma: Se o código for 1, aumenta 10%. Se o código for 2, aumenta 20%. ... Se o código for 10, aumenta 100%. Ele faz isso chamando uma função que define o valor da variável novoSalario. Esse exemplo poderia ser feito fazendo a função retornar um valor e armazenando na variável, mas preferi usar o ponteiro para te mostrar mais ou menos como se faz.
#include <stdio.h>

void calculaAumento(float salario , int codigo , float *novoSalario)
{
    *novoSalario = salario + salario * ((float)codigo / 10);
}

int main(void)
{
    float salario,novoSalario;
    int codigo;
    
    printf("Digite o seu salário: ");
    scanf("%f",&salario);
    
    while (salario <= 0)
    {
        printf("Este salário não é válido. Digite outro: ");
        scanf("%f",&salario);
    }
    
    printf("Digite o código: ");
    scanf("%d",&codigo);
    
    while (codigo < 1 || codigo > 10)
    {
        printf("O código deve estar entre 1 e 10. Digite outro: ");
        scanf("%d",&codigo);
    }
    
    calculaAumento(salario,codigo,&novoSalario);
    
    printf("Seu novo salário é R$%.2f.\n",novoSalario);
}

Qualquer dúvida, estamos ai!

Espero ter ajudado!

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Gui Meira, para eu fazer cada um eu preciso criar uma linha dessa pra cada? segue a linha

*novoSalario = salario + salario * ((float)codigo / 10);

*novoSalario = salario + salario * ((float)codigo / 20); e assim por diante?

ou essa parte do codigo para cada um deles? segue o codigo

*novoSalario = salario + salario * ((float)codigo / 10);

}

int main(void)
{
    float salario,novoSalario;
    int codigo;
    
    printf("Digite o seu salário: ");
    scanf("%f",&salario);
    
    while (salario <= 0)
    {
        printf("Este salário não é válido. Digite outro: ");
        scanf("%f",&salario);
    }
    
    printf("Digite o código: ");
    scanf("%d",&codigo);
    
    while (codigo < 1 || codigo > 10)
    {
        printf("O código deve estar entre 1 e 10. Digite outro: ");
        scanf("%d",&codigo);
    }
    
    calculaAumento(salario,codigo,&novoSalario);
    
    printf("Seu novo salário é R$%.2f.\n",novoSalario);
}

Link para o comentário
Compartilhar em outros sites

  • 0

Olá amigo!

Essa função, do jeito que coloquei ali, funciona da forma que te falei: se passar no argumento 'codigo' o valor 1, ele aumenta 10%, se for 2, aumenta 20% e assim por diante, tudo na mesma função, bastando você mudar a chamada da função.

Por exemplo:

calculaAumento(salario,3,&novoSalario);
Isso ai aumentaria o salário em 30%. A brincadeira ai é mais com a matemática do que com a programação. Observe como a função calcula o novo salário:
*novoSalario = salario + salario * ((float)codigo / 10);
Eu somo o valor atual do salário com o valor:
salario * (codigo/10)

Como o valor do código são números de 1 a 10, dividindo por 10 eu tenho valores de 0,1 até 1.

Suponha que o código seja 1. Dividindo por 10 eu tenho 0,1.

Talvez você deva se lembrar das aulas de porcentagem na escola que multiplicar um número por 0,1 é a mesma coisa que pegar 10% dele, por isso quando você passa o código 1, ele pega o salário e soma com 10% do valor dele e assim por diante.

E só pra esclarecer, esse (float) ai no meio da expressão é pra forçar que a variável código seja tratada como float, porque o tipo original dela é int e quando você passa dois ints para o operador de divisão (/) ele retorna só a parte inteira da divisão, sem vírgula.

Ou seja, sem o (float) a divisão codigo/10 retornaria zero para os códigos de 1 a 9.

Ufa... só espero não ter confundido as coisas ainda mais :D

Um abraço!

Editado por Gui Meira
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...