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

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

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

Есть задача: Компания платит своим служащим как администраторам (это те, кто получает еженедельно фиксированную зарплату), работникам с почасовой оплатой (те, кто получает фиксированную почасовую оплату за первые 40 отработанных часов и «полуторную», т.е. превышающую в 1.5 раз их почасовую, оплату за сверхурочные часы работы), работникам с комиссионным вознаграждением (те, кто по*лучает $250 плюс 5.7% от их валовых еженедельных продаж) и ра*ботникам со сдельной оплатой труда (те, кто получает фиксирован*ную сумму денег за каждую единицу произведенной ими продукции- каждый сдельщик в этой компании работает только с одной разновидностью продукции). Напишите программу для расче*та еженедельной зарплаты каждого служащего. Вам неизвестно за*ранее количество служащих. Служащий каждой из групп имеет соб*ственный код оплаты: администраторы имеют код оплаты 1, работники с почасовой оплатой имеют код 2, работники с комисси*онным вознаграждением имеют код 3 и работники со сдельной опла*той труда имеют код 4. Используйте оператор switch для расчета зарплаты каждого служащего в зависимости от его кода. Внутри оператора switch попросите пользователя (т.е. клерка, рассчитываю*щего зарплату) ввести соответствующие данные, которые потребу*ются вашей программе для расчета зарплаты каждого служащего, исходя из его кода оплаты. Есть код на Си:
Листинг программы
  1. #include <stdio.h>
  2. #include <locale.h>
  3. int main()
  4. {
  5. int cog,chas,sverh,i,e,valprod,q;
  6. double oplata,zarplata,g,w;
  7. setlocale(LC_ALL, "Russian");
  8. puts("Введите код оплаты(1-Администратор,2-почасовая оплата,\n3-с коммисионным вознагрождением,4-сдельная оплата");
  9. puts("Ctrl + Z для окончания");
  10. oplata=0;
  11. i=40;
  12. g=1.5;
  13. valprod=0;
  14. w=5.7;
  15. e=100;
  16. q=250;
  17.  
  18. while((cog=getchar())!=EOF)
  19. {
  20. switch (cog)
  21. {
  22. case'1':
  23. puts("Ведите вашу еженедельную оплату");
  24. scanf("%d",&oplata);
  25. printf("Ваша еженедельная зарплата: %d",oplata);
  26. break;
  27. case'2':
  28. puts("Ведите вашу часовую зарплату");
  29. scanf("%d",&oplata);
  30. puts("Сколько часов на этой неделе вы работали?");
  31. scanf("%d",&chas);
  32. if(chas>40){
  33. sverh=chas-i;
  34. zarplata=((oplata*g)*sverh)+(oplata*i);
  35. printf("Ваша еженедельная зарплата: %d\n",zarplata);
  36. }
  37. else{
  38. zarplata=oplata*(double)chas;
  39. printf("Ваша еженедельная зарплата: %d\n",zarplata);}
  40. break;
  41. case'3':
  42. puts("Ведите ваши валовые еженедельный продажи");
  43. scanf("%d",&oplata);
  44. zarplata= ((oplata*w)/e+q) ;
  45. printf("Ваша еженедельная зарплата: %d\n", zarplata);
  46. break;
  47. case'4':
  48. puts("Ведите сколько вы получаете денег за единицу продукции");
  49. scanf("%d",&oplata);
  50. puts("Ведите сколько вы произвели продукцию за неделю");
  51. scanf("%d",&chas);
  52. zarplata=oplata*(double)chas;
  53. printf("Ваша еженедельная зарплата: %d\n",zarplata);
  54. break;
  55.  
  56. case'\n':
  57. case'\t':
  58. case' ':
  59. break;
  60. default:
  61. puts("Неккоректный ввод");
  62. break;
  63. }
  64. }
  65. return 0;
  66. }
Почти все нормально работает,но когда при вводе кода №3 и вводе любого числа в еженедельные валовые продажи пишет 0, Причем! Если я убираю из этой формулы прибавление 250(ну или как у меня q) процент он считает и выводит число,а не 0. Что не так? P.S. Знаю что код не очень то хорош но по другому остальные пункты не работали.

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

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

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

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

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


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

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

5   голосов , оценка 3.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы