Задача со структурами турбопролог - Prolog

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

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

нужно решить такую задачу. Найти всех матерей, имеющих менее трех детей. Как это сделать?

Решение задачи: «Задача со структурами турбопролог»

textual
Листинг программы
  1. // ConsoleApplication2.cpp: главный файл проекта.
  2.  
  3. #include "stdafx.h"
  4.  
  5. using namespace std;
  6.  
  7. struct product{
  8.     char Name[40];
  9.     int weigh = 0;
  10.     int number = 0;
  11.     char material[40];
  12.     product *next;
  13. };
  14.  
  15.  
  16.  
  17.  
  18. void List_New_Elem(product* &my_food, product* to_food); // добавляет элемент в список
  19. int Kol_Elem_List(product* my_food); // возвращает количество элементов
  20. bool List_NULL(product* my_food); // проверяет на пустоту
  21. void Print_List(product* my_food); // вывод информации о продуктах на экран
  22. product* pow_Stal(product* my_food); // получает массив продуктов из стали
  23. product* pow_plastics(product* my_food); // получает массив продуктов из пластмассы
  24. product* pow_aluminum(product* my_food); // получаем массив продуктов из алюминия
  25. void torn(product *to_fStal, product *to_food); // создает отдельный элемент
  26. product *End_Sort(product* my_food); // заключительная сортировка
  27. void TopToTop(product *to_elem, product *mass_food, int j); // переставляет элементы местами
  28. product *post_elemMass_to_stract(product *mass_food, int n); // перенос элементов из массива в структуру
  29.  
  30.  
  31. int main(array<System::String ^> ^args)
  32. {
  33.     SetConsoleOutputCP(1251);
  34.     SetConsoleCP(1251);
  35.  
  36.     product *my_food = NULL;
  37.     product *to_food = NULL;
  38.     product *my_fStal = NULL; // продукты из стали
  39.     product *my_fplastics = NULL; // продукты из пластмассы
  40.     product *my_aluminum = NULL; // продукты из алюминия
  41.  
  42.  
  43.     cout << " Введите количество продуктив: ";
  44.     int k = 0;
  45.     cin >> k;
  46.    
  47.  
  48.  
  49.     cout << " <br>МЕНЮ<br>" << endl;
  50.     cout << " 1 - Добавить информацию о продуктах с клавиатуры" << endl;
  51.     cout << " 2 - Добавить информацию о продуктах из текстового файла" << endl;
  52.     cout << " 0 - Выход" << endl;
  53.     cout << " <br>" << endl;
  54.     cout << " Введите команду: ";
  55.  
  56.     int clic = 0;
  57.     cin >> clic;
  58.  
  59.     switch (clic)
  60.     {
  61.     case 1:{
  62.                    for (int i = 0; i < k; i++){
  63.                        to_food = new product;
  64.                        cout << " Введите наименование продукта: ";
  65.                        cin >> to_food->Name;
  66.                        cout << " Введите вес продукта: ";
  67.                        cin >> to_food->weigh;
  68.                        cout << " Введите серийный номер продукта: ";
  69.                        cin >> to_food->number;
  70.                        cout << " Введите материал продукта: ";
  71.                        cin >> to_food->material;
  72.                        cout << "<br>ПРОДУКТ ДОБАВЛЕН<br>" << endl;
  73.  
  74.                        to_food->next = NULL;
  75.                        List_New_Elem(my_food, to_food);
  76.                    }
  77.                    cout << "Полученный список продуктов: "<<endl;
  78.                    Print_List(my_food);
  79.  
  80.                 break;
  81.                }
  82.     case 2:{
  83.                    char str[40]; // файл
  84.  
  85.                    cout << " Введите имя файла: ";
  86.                    cin >> str;
  87.                    ifstream in(str); // открытие файла по заданному файлу
  88.  
  89.                    for (int i = 0; i < k; i++){
  90.                        to_food = new product;
  91.  
  92.                        in >> to_food->Name >> to_food->weigh >> to_food->number >> to_food->material;
  93.  
  94.                        to_food->next = NULL;
  95.                        List_New_Elem(my_food, to_food);
  96.  
  97.                    }
  98.                    cout << "Полученный список продуктов: " << endl;
  99.                    Print_List(my_food);
  100.            
  101.                break;
  102.     }
  103.     case 0:{
  104.                return 0;
  105.     }
  106.     default:
  107.         cout << "Неверная команда!" << endl;
  108.         break;
  109.     }
  110.  
  111.  
  112.     system("pause");
  113.  
  114.     cout << endl << " ==============Отсортированные продукты============== " << endl<<endl;
  115.  
  116.     cout << " =======Полученный список продуктов из стали:======== " << endl;
  117.     my_fStal = pow_Stal(my_food);
  118.     Print_List(my_fStal);
  119.     cout << " ==================================================== " << endl << endl;
  120.  
  121.     cout << " =====Полученный список продуктов из пластмассы:===== " << endl;
  122.     my_fplastics = pow_plastics(my_food);
  123.     Print_List(my_fplastics);
  124.     cout << " ==================================================== " << endl << endl;
  125.  
  126.     cout << " ======Полученный список продуктов из алюминия:====== " << endl;
  127.     my_aluminum = pow_aluminum(my_food);
  128.     Print_List(my_aluminum);
  129.     cout << endl << " =====================СОРТИРОВКА===================== " << endl;
  130.     my_fStal = End_Sort(my_fStal);
  131.    
  132.     Print_List(my_fStal);
  133.     cout << " ==================================================== " << endl;
  134.     my_fplastics = End_Sort(my_fplastics);
  135.    
  136.     Print_List(my_fplastics);
  137.     cout << " ==================================================== " << endl;
  138.     my_aluminum = End_Sort(my_aluminum);
  139.    
  140.     Print_List(my_aluminum);
  141.  
  142.  
  143.  
  144.  
  145.    
  146.     system("pause");
  147.  
  148. }
  149.  
  150. // Добавление элемента
  151. void List_New_Elem(product* &my_food, product* to_food) {
  152.     int kol = Kol_Elem_List(my_food);
  153.     if (kol == 0){
  154.         my_food = to_food;
  155.     }
  156.     else if (kol == 1){
  157.         my_food->next = to_food;
  158.     }
  159.     else {
  160.         product *my_f = my_food;
  161.         for (int i = 1; i < kol && my_f->next != NULL; i++) {
  162.             my_f = my_f->next;
  163.         }
  164.         my_f->next = to_food;
  165.     }
  166. }
  167.  
  168. // Количество элементов
  169. int Kol_Elem_List(product* my_food) {
  170.     int kol = 0;
  171.     product *to_food = my_food;
  172.     // Проходим весь список
  173.     while (!List_NULL(to_food)) {
  174.         to_food = to_food->next;
  175.         kol++;
  176.     }
  177.     return kol;
  178. }
  179.  
  180. // Проверка на пустоту списка
  181. bool List_NULL(product* my_food) {
  182.     if (my_food == NULL){
  183.         return true; // список пуст
  184.     }
  185.     else{
  186.         return false; //список не пуст
  187.     }
  188. }
  189.  
  190. // Вывод на экран
  191. void Print_List(product* my_food) {
  192.     product *to_food = my_food;
  193.     while (!List_NULL(to_food)) {
  194.         cout << " " << to_food->Name << " " << to_food->weigh << " " << to_food->number << " " << to_food->material << endl;
  195.         to_food = to_food->next;
  196.     }
  197. }
  198.  
  199. // получаем сталь
  200. product* pow_Stal(product* my_food){
  201.     product *to_food = my_food;
  202.     product *my_fStal = NULL;
  203.     while (!List_NULL(to_food)){
  204.         if (to_food->material[0] == 'С'&&to_food->material[1] == 'т'&&to_food->material[2] == 'а'&&to_food->material[3] == 'л'&&to_food->material[4] == 'ь'){
  205.             product *to_fStal = new product;
  206.             torn(to_fStal, to_food);
  207.             List_New_Elem(my_fStal, to_fStal);
  208.         }
  209.         to_food = to_food->next;
  210.     }
  211.     return my_fStal;
  212. }
  213.  
  214. // получаем пластмассу
  215. product* pow_plastics(product* my_food){
  216.     product *to_food = my_food;
  217.     product *my_fplastics = NULL;
  218.     while (!List_NULL(to_food)){
  219.         if (to_food->material[0] == 'П'&&to_food->material[1] == 'л'&&to_food->material[2] == 'а'&&to_food->material[3] == 'с'&&to_food->material[4] == 'т'&&to_food->material[5] == 'м'&&to_food->material[6] == 'а'&&to_food->material[7] == 'с'&&to_food->material[8] == 'с'&&to_food->material[9] == 'а'){
  220.             product *to_fplastics = new product;
  221.             torn(to_fplastics, to_food);
  222.             List_New_Elem(my_fplastics, to_fplastics);
  223.         }
  224.         to_food = to_food->next;
  225.     }
  226.     return my_fplastics;
  227. }
  228.  
  229. // получаем алюминий
  230. product* pow_aluminum(product* my_food){
  231.     product *to_food = my_food;
  232.     product *my_aluminum = NULL;
  233.     while (!List_NULL(to_food)){
  234.         if (to_food->material[0] == 'А'&&to_food->material[1] == 'л'&&to_food->material[2] == 'ю'&&to_food->material[3] == 'м'&&to_food->material[4] == 'и'&&to_food->material[5] == 'н'&&to_food->material[6] == 'и'&&to_food->material[7] == 'й'){
  235.             product *to_aluminum = new product;
  236.             torn(to_aluminum, to_food);
  237.             List_New_Elem(my_aluminum, to_aluminum);
  238.         }
  239.         to_food = to_food->next;
  240.     }
  241.     return my_aluminum;
  242. }
  243.  
  244. void torn(product *to_f, product *to_food){
  245.     strcpy(to_f->Name, to_food->Name);
  246.     to_f->number = to_food->number;
  247.     to_f->weigh = to_food->weigh;
  248.     strcpy(to_f->material, to_food->material);
  249.     to_f->next = NULL;
  250. }
  251.  
  252.  
  253.  
  254. product *End_Sort(product* my_food){
  255.     product *to_food = my_food;
  256.     product *mass_food;
  257.     product *to_elem = new product; // буферная переменная
  258.  
  259.     // выделение памяти
  260.     mass_food = new product[Kol_Elem_List(my_food)];
  261.  
  262.     // цикл переноса элементов структуры в массив
  263.     for (int i = 0; i < Kol_Elem_List(my_food); i++){
  264.         product *to_f = new product;
  265.         torn(to_f, to_food);
  266.         strcpy((mass_food[i]).Name, to_f->Name);
  267.         mass_food[i].number = to_f->number;
  268.         mass_food[i].weigh = to_f->weigh;
  269.         strcpy((mass_food[i].material), to_f->material);
  270.         mass_food[i].next = NULL;
  271.         if (!List_NULL(to_food)){
  272.             to_food = to_food->next;
  273.         }
  274.     }
  275.  
  276.     // сортировка массива
  277.     for (int i = Kol_Elem_List(my_food) - 1;i > 0; i--){
  278.         for (int j = 0; j<i; j++){
  279.             if (mass_food[j].number > mass_food[j + 1].number){
  280.                 TopToTop(to_elem,mass_food, j);
  281.             }
  282.             if (mass_food[j].number == mass_food[j + 1].number){
  283.                 if (mass_food[j].weigh < mass_food[j + 1].weigh){
  284.                     TopToTop(to_elem,mass_food, j);
  285.                 }
  286.             }
  287.         }
  288.     }
  289.  
  290.  
  291.     my_food = post_elemMass_to_stract(mass_food, Kol_Elem_List(my_food));
  292.     return my_food;
  293.  
  294. }
  295. void TopToTop(product *to_elem, product *mass_food, int j){
  296.     // копируем элемент
  297.     strcpy(to_elem->Name, mass_food[j].Name);
  298.     to_elem->number = mass_food[j].number;
  299.     to_elem->weigh = mass_food[j].weigh;
  300.     strcpy(to_elem->material, mass_food[j].material);
  301.     to_elem->next = NULL;
  302.     // переносим значение из следующего элемента
  303.     mass_food[j] = mass_food[j + 1];
  304.     // следующий элемент становится предыдущем
  305.     strcpy((mass_food[j + 1]).Name, to_elem->Name);
  306.     mass_food[j + 1].number = to_elem->number;
  307.     mass_food[j + 1].weigh = to_elem->weigh;
  308.     strcpy((mass_food[j + 1].material), to_elem->material);
  309.     mass_food[j + 1].next = NULL;
  310. }
  311.  
  312. product *post_elemMass_to_stract(product *mass_food,int n){
  313.     product *to_food = new product;
  314.     to_food = NULL;
  315.  
  316.     for (int j = 0; j < n; j++){
  317.         product *to_elem = new product;
  318.         strcpy(to_elem->Name, mass_food[j].Name);
  319.         to_elem->number = mass_food[j].number;
  320.         to_elem->weigh = mass_food[j].weigh;
  321.         strcpy(to_elem->material, mass_food[j].material);
  322.         to_elem->next = NULL;
  323.         List_New_Elem(to_food, to_elem);
  324.     }
  325.  
  326.     return to_food;
  327.  
  328. }

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


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

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

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

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

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

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