Программа неправильно считает еженедельную зарплату каждого служащего - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть задача: Компания платит своим служащим как администраторам (это те, кто получает еженедельно фиксированную зарплату), работникам с почасовой оплатой (те, кто получает фиксированную почасовую оплату за первые 40 отработанных часов и «полуторную», т.е. превышающую в 1.5 раз их почасовую, оплату за сверхурочные часы работы), работникам с комиссионным вознаграждением (те, кто по*лучает $250 плюс 5.7% от их валовых еженедельных продаж) и ра*ботникам со сдельной оплатой труда (те, кто получает фиксирован*ную сумму денег за каждую единицу произведенной ими продукции- каждый сдельщик в этой компании работает только с одной разновидностью продукции). Напишите программу для расче*та еженедельной зарплаты каждого служащего. Вам неизвестно за*ранее количество служащих. Служащий каждой из групп имеет соб*ственный код оплаты: администраторы имеют код оплаты 1, работники с почасовой оплатой имеют код 2, работники с комисси*онным вознаграждением имеют код 3 и работники со сдельной опла*той труда имеют код 4. Используйте оператор switch для расчета зарплаты каждого служащего в зависимости от его кода. Внутри оператора switch попросите пользователя (т.е. клерка, рассчитываю*щего зарплату) ввести соответствующие данные, которые потребу*ются вашей программе для расчета зарплаты каждого служащего, исходя из его кода оплаты. Есть код на Си:
#include <stdio.h>
#include <locale.h>
 
int main()
{
   int cog,chas,sverh,i,e,valprod,q;
   double oplata,zarplata,g,w;
   setlocale(LC_ALL, "Russian");
   puts("Введите код оплаты(1-Администратор,2-почасовая оплата,\n3-с коммисионным вознагрождением,4-сдельная оплата");
   puts("Ctrl + Z для окончания");
   oplata=0;
   i=40;
   g=1.5;
   valprod=0;
   w=5.7;
   e=100;
   q=250;

   while((cog=getchar())!=EOF)
   {
     
     switch (cog)
       {
         case'1':
            puts("Ведите вашу еженедельную оплату");
            scanf("%d",&oplata);
            printf("Ваша еженедельная зарплата: %d",oplata);
            break;
 
         case'2':
            puts("Ведите вашу часовую зарплату");
            scanf("%d",&oplata);
            puts("Сколько часов на этой неделе вы работали?");
            scanf("%d",&chas);
 
            if(chas>40){
               sverh=chas-i;
               zarplata=((oplata*g)*sverh)+(oplata*i); 
               printf("Ваша еженедельная зарплата: %d\n",zarplata);
               }
            else{
               zarplata=oplata*(double)chas;
            printf("Ваша еженедельная зарплата: %d\n",zarplata);}
            break;
       
         case'3':
            puts("Ведите ваши валовые еженедельный продажи");
            scanf("%d",&oplata);
            zarplata= ((oplata*w)/e+q) ; 
               printf("Ваша еженедельная зарплата: %d\n", zarplata);
               
            break;
 
         case'4':
            puts("Ведите сколько вы получаете денег за единицу продукции");
            scanf("%d",&oplata);
            puts("Ведите сколько вы произвели продукцию за неделю");
            scanf("%d",&chas);
            zarplata=oplata*(double)chas;
            printf("Ваша еженедельная зарплата: %d\n",zarplata);
            break;

        case'\n':
        case'\t':
        case' ':
           break;
   
       default:
       puts("Неккоректный ввод");
           break;
       }
    }
 
   return 0;
}
Почти все нормально работает,но когда при вводе кода №3 и вводе любого числа в еженедельные валовые продажи пишет 0, Причем! Если я убираю из этой формулы прибавление 250(ну или как у меня q) процент он считает и выводит число,а не 0. Что не так? P.S. Знаю что код не очень то хорош но по другому остальные пункты не работали.

Решение задачи: «Программа неправильно считает еженедельную зарплату каждого служащего»

textual
Листинг программы
printf("Ваша еженедельная зарплата: %f\n", zarplata);

Объяснение кода листинга программы

  1. Программа запрашивает у пользователя информацию о зарплате каждого служащего
  2. Полученные данные сохраняются в переменную zarplata
  3. Затем программа выводит на экран сообщение с еженедельной зарплатой каждого служащего, используя функцию printf
  4. Форматирование вывода осуществляется с помощью спецификатора формата %f, который указывает на то, что необходимо вывести переменную zarplata в формате с плавающей точкой
  5. После вывода сообщения на экран программа завершается

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.2 из 5
Похожие ответы