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

(Resolvido) Problema com ponteiros


Carla Aguiar

Pergunta

Eu também estou com dificuldade para concluir um exercicio utilizando ponteiros que deve receber o salário bruto - Inss e Ir e mostrar o salário liquido :blink:

Comecei fazendo este código de acordo com o exemplo do prof°, porém o copilador (Dev c++) não reconhece o ponteiro, alguém pode me ajudar a entender como ''chamá-lo'' corretamente? segue o modelo que iniciei:

#include <stdio.h>
#include <stdlib.h>
struct Sal {
       float qtdhoras;
       float vlrhoras; 
       float salbruto;
       };
     typedef struct Sal salario;
     main() {
            salario VarSal;
            salario *PtrSal;
            PtrSal = &VarSal;
            float salbruto;
            float inss;
            float ir;
            float saliquido;
            printf ("\n Informe sua quantidade de horas trabalhadas: ");
            scanf ("%f" ,&qtd);// não consigo puxar o ponteiro ????
            printf ("\n Informe o valor da hora: ");
            scanf ("%f", &vlr); // ???
            (*PtrSal). salario = sal;
            (*PtrSal). vlrhoras = vlr;
            if (( *PtrSal).salario <= 1000.00){
                  (*PtrSal). VarSal = (*PtrSal).salario + (((*PtrSal).salario*8)/100); //desconto do Inss
                  } else if ((*PtrSal.salario > 1000.00){
                  (*PtrSal). VarSal = (*PtrSal).salario + (((*PtrSal).salario*9)/100);  
                  } else if 
                  
                  ??????????????????????????????????????
                  
                  
                  system ("pause");
                  }

Obrigada desde já pela atenção!

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Separei seu post do tópico principal por tratar de outro assunto.

No seu código as variáveis qtd e vlr não foram declaradas, por isso ocorre o erro. Provavelmente você se refere às variáveis VarSal.qtdhoras e VarSal.vlrhoras.

Nota:

Qualquer expressão do tipo (*ponteiro).valor equivale a ponteiro->valor (operador seta). Portanto, ao invés de (*PtrVarSal).salario, você pode usar PtrVarSal->salario (a primeira forma não é errada, mas é mais trabalhosa de se escrever)

Link para o comentário
Compartilhar em outros sites

  • 0
Separei seu post do tópico principal por tratar de outro assunto.

No seu código as variáveis qtd e vlr não foram declaradas, por isso ocorre o erro. Provavelmente você se refere às variáveis VarSal.qtdhoras e VarSal.vlrhoras.

Nota:

Qualquer expressão do tipo (*ponteiro).valor equivale a ponteiro->valor (operador seta). Portanto, ao invés de (*PtrVarSal).salario, você pode usar PtrVarSal->salario (a primeira forma não é errada, mas é mais trabalhosa de se escrever)

Muito Obrigada Jonathan, estou penando um pouco, mas vou testar desta forma :)

Link para o comentário
Compartilhar em outros sites

  • 0

Trago aqui a resolução do codigo completo.

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

     struct calc_sal {
        
        float qtd_horas;
        float vlr_horas;
        float sal_bruto;
              
       
       };
        
        


     int  main() {
     struct calc_sal *salario;
              
       float desconto;                
                     

                                    salario = (struct calc_sal*)malloc(sizeof(struct calc_sal));
                                    fflush (stdin);
                                    printf ("HORAS\n");
                                    scanf ("%f",&salario->qtd_horas);
                                    printf ("Salario \n");
                                    scanf ("%f",&salario->vlr_horas);

                                    salario->sal_bruto = (salario->qtd_horas) *( salario->vlr_horas);
                                    printf ("\nSalario Bruto TOTAL:%.2f",salario->sal_bruto);

//CALCULAR DESCONTO INSS

                     if (salario->sal_bruto<=1000) {
                              
           desconto=(salario->sal_bruto*0.08);
           salario->sal_bruto=(salario->sal_bruto-desconto);

}        
                     if (salario->sal_bruto>1000) {
                             
           desconto=(salario->sal_bruto*0.09);
           salario->sal_bruto=(salario->sal_bruto-desconto);
                             }
               
          
                             
           printf ("\nSalario Bruto INSS: %.2f ",salario->sal_bruto);         

//CALCULAR DESCONTO IR
                     if (salario->sal_bruto>500 && salario->sal_bruto<=1000) {
                           
          desconto=(salario->sal_bruto*0.05);
          salario->sal_bruto=(salario->sal_bruto-desconto);
                           }
                           
                     if (salario->sal_bruto > 1000) {
                       
         desconto=(salario->sal_bruto*0.07);
         salario->sal_bruto=(salario->sal_bruto-desconto);
                       }
                       
         printf ("\nSalario Bruto IR: %.2f",salario->sal_bruto);
         printf ("\nSalario LIQUIDO: %.2f",salario->sal_bruto);
getch();          
          
                             }

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, partindo deste codigo ai que funciona tudo certinho e etc, queria fazer uma alteração para que quando calcular o sal_bruto e for mostra o desconto de inss e IR, que mostre quanto foi tirado de cada um, por que neste codigo ele mostra o salario já descontado

será possivel esse help?

Agradeço desde já

Link para o comentário
Compartilhar em outros sites

  • 0

Pra mostrar o desconto é só mostrar o valor da variável desconto:

desconto=(salario->sal_bruto*0.05);
Agora não entendi essa parte:
printf ("\nSalario Bruto IR: %.2f",salario->sal_bruto);
printf ("\nSalario LIQUIDO: %.2f",salario->sal_bruto);
Você colocou a mesma variável pra mostrar o salário bruto e líquido, então não tá mostrando o mesmo valor? Não teria que ter uma variável salario_liquido pra guardar o salário liquido?
if (salario->sal_bruto>500 && salario->sal_bruto<=1000) {
                          
          desconto=(salario->sal_bruto*0.05);
          salario_liquido=(salario->sal_bruto-desconto);
                           }

Link para o comentário
Compartilhar em outros sites

  • 0

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

 struct calc_sal {
        
        float qtd_horas;
        float vlr_horas;
        float sal_bruto;
        float sal_liquido;
              
       
       };
        
        


int  main() {
struct calc_sal *salario;
              
    float desconto;                
                     

salario = (struct calc_sal*)malloc(sizeof(struct calc_sal));
fflush (stdin);
printf ("Informe a quantidade de Horas trabalhadas: \n");
scanf ("%f",&salario->qtd_horas);
printf ("Informe o salario por hora: \n");
scanf ("%f",&salario->vlr_horas);

salario->sal_bruto = (salario->qtd_horas) *( salario->vlr_horas);
printf ("\nSalario Bruto TOTAL:%.2f",salario->sal_bruto);

//CALCULAR DESCONTO INSS

if (salario->sal_bruto<=1000) {
                              
                            desconto=(salario->sal_bruto*0.08);
                            salario->sal_liquido=(salario->sal_bruto-desconto);
                            
}        
if (salario->sal_bruto>1000) {
                             
                           desconto=(salario->sal_bruto*0.09);
                           salario->sal_bruto=(salario->sal_bruto-desconto);
                           salario ->sal_liquido=(salario->sal_bruto-desconto);
                             }
               
          
                             
printf ("\nSeu INSS desconto: %.2f ",desconto);         

//CALCULAR DESCONTO IR
if (salario->sal_bruto>500 && salario->sal_bruto<=1000) {
                           
                           desconto=(salario->sal_bruto*0.05);
                           salario->sal_bruto=(salario->sal_bruto-desconto);
                           salario ->sal_liquido=(salario->sal_bruto-desconto);
                                                      }
                           
if (salario->sal_bruto > 1000) {
                       
                           desconto=(salario->sal_bruto*0.07);
                           salario->sal_liquido=(salario->sal_bruto-desconto);
                           
                       }
                       
printf ("\nSeu IR descontou: %.2f",desconto);
printf ("\nSeu Salario LIQUIDO: %.2f",salario->sal_liquido);
getch();          
          
                             }

Cara joguei assim e o resultado que deu foi bacana, mas os numeros não batem, qual o caminho para a solução? :|

Link para o comentário
Compartilhar em outros sites

  • 0

Só lembrando que: se você quiser dar um desconto de 5% é o mesmo que cobrar 95% do preço, então basta multiplicar o valor por 0.95.

preço - preço*0.05 = preço * 0.95

Com esse tipo de notação, em certos casos é possível economizar algumas variáveis! ;)

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