Advertisement
Qellex

Untitled

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