Advertisement
Qellex

lab 8 - v19

Jun 24th, 2022 (edited)
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.79 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <windows.h>
  6. #include <math.h>
  7. typedef struct {
  8. char name[20]; // нименование продукта
  9. int cal, bel, jir, ugl; // калорийность, белки, жиры, углеводы
  10. char land[20]; // страна производства
  11. int preis; // цена продукта
  12. }Product;
  13. void add(Product* pr) {
  14. printf("\nВведите наименование продукта: ");
  15. scanf("%19s", pr->name);
  16. printf("Калорийность, количество белков, жиров и углеводов: ");
  17. scanf("%d%d%d%d", &pr->cal, &pr->bel, &pr->jir, &pr->ugl);
  18. printf("Страну происхождения: ");
  19. scanf("%19s", pr->land);
  20. printf("И цену: ");
  21. scanf("%d", &pr->preis);
  22. printf("\nВаш продукт успешно добавлен.\n");
  23. }
  24. void del(Product* pr, int count) {
  25. int n;
  26. printf("\nВведите номер продукта, который хотите удалить из списка: ");
  27. scanf("%d", &n);
  28. n--;
  29. while (n < 0 || n > count) {
  30. printf("\nТакого номера нет, введите существующий: ");
  31. scanf("%d", &n);
  32. n--;
  33. }
  34. pr[n] = pr[count];
  35. }
  36. void table(Product* pr, int count) {
  37. printf("\n\n\nСписок продуктов:\n");
  38. printf("Наименование\tКалорийность\tБелки\tЖиры\tУглеводы\tСтрана\tЦена\n");
  39. for (int i = 0; i < count; i++) {
  40. printf("%s\t\t%d\t\t%d\t%d\t%d\t\t%s\t%d\n", pr[i].name, pr[i].cal, pr[i].bel,
  41. pr[i].jir, pr[i].ugl, pr[i].land, pr[i].preis);
  42. }
  43. }
  44. void search_land_best_cal(Product* pr, int count) {
  45. float max1 = 0, max2 = 0, max3 = 0;
  46. int name1 = -1, name2 = -1, name3 = -1;
  47. char land[20];
  48. printf("Введите страну производителя: ");
  49. scanf("%19s", &land);
  50. for (int i = 0; i < count; i++) {
  51. if (strcmp(land, pr[i].land) == 0) {
  52. if (max1 < pr[i].cal) {
  53. max3 = max2; max2 = max1; max1 = pr[i].cal;
  54. name3 = name2; name2 = name1; name1 = i;
  55. }
  56. else if (max2 < pr[i].cal) {
  57. max3 = max2; max2 = pr[i].cal;
  58. name3 = name2; name2 = i;
  59. }
  60. else if (max3 < pr[i].cal) {
  61. max3 = pr[i].cal;
  62. name3 = i;
  63. }
  64. }
  65. }
  66. if (name1 == -1 && name2 == -1 && name3 == -1)
  67. printf("Продуктов, которые имеют страну производстава %s, нет в списке.\n",
  68. land);
  69. else {
  70. printf("Список наиболее калорийных продуктов, по заданной стране:\n");
  71. printf("1. %s\n", pr[name1].name);
  72. if (name2 != -1)
  73. printf("2. %s\n", pr[name2].name);
  74. if (name3 != -1)
  75. printf("3. %s\n", pr[name3].name);
  76. }
  77. }
  78. void search_best_cal_no_ugl(Product* pr, int count) {
  79. float bestcal = -1;
  80. int bestpr = -1;
  81. for (int i = 0; i < count; i++) {
  82. if (bestcal < (float)pr[i].cal / (float)pr[i].preis && pr[i].ugl == 0) {
  83. bestcal = (float)pr[i].cal / (float)pr[i].preis;
  84. bestpr = i;
  85. }
  86. }
  87. if (bestpr == -1)
  88. printf("Продукт у которого не имеется углеводов в списке не оказалось.");
  89. else
  90. printf("Энергетически наиболее эффективный продукт это %s, в нем содержится %2.f
  91. калорий в расчете на рубль.", pr[bestpr].name, bestcal);
  92. }
  93. int menu(int count) {
  94. int use;
  95. printf("\n\n\t\tМеню\n");
  96. printf("1. Вывод списка на экран.\n");
  97. printf("2. Добавить продукт в список.\n");
  98. printf("3. Удалить продукт из списка.\n");
  99. printf("4. Поиск трёх наиболее калорийных продуктов, произведенных в заданной
  100. стране.\n");
  101. printf("5. Поиск энергетически наиболее эффективного продукта, не содержащего
  102. углеводов.\n");
  103. printf("6. Для выхода из системы.\n");
  104. if (count == 1) {
  105. printf("Ваш список пуст добавьте в него продукт.\n");
  106. return 2;
  107. }
  108. else {
  109. do {
  110. printf("Введите цифру пункта, который вы желаете выполнить.\n");
  111. scanf("%d", &use);
  112. } while (use < 1 || use > 6);
  113. return use;
  114. }
  115. }
  116. void main() {
  117. system("chcp 1251");
  118. int count = 1;
  119. Product* pr;
  120. pr = (Product*)malloc(sizeof(Product) * count);
  121. while (count != -1) {
  122. int i = menu(count);
  123. switch (i)
  124. {
  125. case 1:
  126. table(pr, count - 1);
  127. break;
  128. case 2:
  129. add(&pr[count - 1]);
  130. count++;
  131. pr = (Product*)realloc((void*)pr, sizeof(Product) * count);
  132. break;
  133. case 3:
  134. del(pr, count - 2);
  135. count--;
  136. pr = (Product*)realloc((void*)pr, sizeof(Product) * count);
  137. break;
  138. case 4:
  139. search_land_best_cal(pr, count);
  140. break;
  141. case 5:
  142. search_best_cal_no_ugl(pr, count);
  143. break;
  144. default:
  145. count = -1;
  146. break;
  147. }
  148. }
  149. system("pause");
  150. }
  151.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement