Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <windows.h>
- #include <math.h>
- typedef struct {
- char name[20]; // нименование продукта
- int cal, bel, jir, ugl; // калорийность, белки, жиры, углеводы
- char land[20]; // страна производства
- int preis; // цена продукта
- }Product;
- void add(Product* pr) {
- printf("\nВведите наименование продукта: ");
- scanf("%19s", pr->name);
- printf("Калорийность, количество белков, жиров и углеводов: ");
- scanf("%d%d%d%d", &pr->cal, &pr->bel, &pr->jir, &pr->ugl);
- printf("Страну происхождения: ");
- scanf("%19s", pr->land);
- printf("И цену: ");
- scanf("%d", &pr->preis);
- printf("\nВаш продукт успешно добавлен.\n");
- }
- void del(Product* pr, int count) {
- int n;
- printf("\nВведите номер продукта, который хотите удалить из списка: ");
- scanf("%d", &n);
- n--;
- while (n < 0 || n > count) {
- printf("\nТакого номера нет, введите существующий: ");
- scanf("%d", &n);
- n--;
- }
- pr[n] = pr[count];
- }
- void table(Product* pr, int count) {
- printf("\n\n\nСписок продуктов:\n");
- printf("Наименование\tКалорийность\tБелки\tЖиры\tУглеводы\tСтрана\tЦена\n");
- for (int i = 0; i < count; i++) {
- 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,
- pr[i].jir, pr[i].ugl, pr[i].land, pr[i].preis);
- }
- }
- void search_land_best_cal(Product* pr, int count) {
- float max1 = 0, max2 = 0, max3 = 0;
- int name1 = -1, name2 = -1, name3 = -1;
- char land[20];
- printf("Введите страну производителя: ");
- scanf("%19s", &land);
- for (int i = 0; i < count; i++) {
- if (strcmp(land, pr[i].land) == 0) {
- if (max1 < pr[i].cal) {
- max3 = max2; max2 = max1; max1 = pr[i].cal;
- name3 = name2; name2 = name1; name1 = i;
- }
- else if (max2 < pr[i].cal) {
- max3 = max2; max2 = pr[i].cal;
- name3 = name2; name2 = i;
- }
- else if (max3 < pr[i].cal) {
- max3 = pr[i].cal;
- name3 = i;
- }
- }
- }
- if (name1 == -1 && name2 == -1 && name3 == -1)
- printf("Продуктов, которые имеют страну производстава %s, нет в списке.\n",
- land);
- else {
- printf("Список наиболее калорийных продуктов, по заданной стране:\n");
- printf("1. %s\n", pr[name1].name);
- if (name2 != -1)
- printf("2. %s\n", pr[name2].name);
- if (name3 != -1)
- printf("3. %s\n", pr[name3].name);
- }
- }
- void search_best_cal_no_ugl(Product* pr, int count) {
- float bestcal = -1;
- int bestpr = -1;
- for (int i = 0; i < count; i++) {
- if (bestcal < (float)pr[i].cal / (float)pr[i].preis && pr[i].ugl == 0) {
- bestcal = (float)pr[i].cal / (float)pr[i].preis;
- bestpr = i;
- }
- }
- if (bestpr == -1)
- printf("Продукт у которого не имеется углеводов в списке не оказалось.");
- else
- printf("Энергетически наиболее эффективный продукт это %s, в нем содержится %2.f
- калорий в расчете на рубль.", pr[bestpr].name, bestcal);
- }
- int menu(int count) {
- int use;
- printf("\n\n\t\tМеню\n");
- printf("1. Вывод списка на экран.\n");
- printf("2. Добавить продукт в список.\n");
- printf("3. Удалить продукт из списка.\n");
- printf("4. Поиск трёх наиболее калорийных продуктов, произведенных в заданной
- стране.\n");
- printf("5. Поиск энергетически наиболее эффективного продукта, не содержащего
- углеводов.\n");
- printf("6. Для выхода из системы.\n");
- if (count == 1) {
- printf("Ваш список пуст добавьте в него продукт.\n");
- return 2;
- }
- else {
- do {
- printf("Введите цифру пункта, который вы желаете выполнить.\n");
- scanf("%d", &use);
- } while (use < 1 || use > 6);
- return use;
- }
- }
- void main() {
- system("chcp 1251");
- int count = 1;
- Product* pr;
- pr = (Product*)malloc(sizeof(Product) * count);
- while (count != -1) {
- int i = menu(count);
- switch (i)
- {
- case 1:
- table(pr, count - 1);
- break;
- case 2:
- add(&pr[count - 1]);
- count++;
- pr = (Product*)realloc((void*)pr, sizeof(Product) * count);
- break;
- case 3:
- del(pr, count - 2);
- count--;
- pr = (Product*)realloc((void*)pr, sizeof(Product) * count);
- break;
- case 4:
- search_land_best_cal(pr, count);
- break;
- case 5:
- search_best_cal_no_ugl(pr, count);
- break;
- default:
- count = -1;
- break;
- }
- }
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement