profile
Опубликовано 5 лет назад по предмету Информатика от Aillianna

Язык программирования Си !
Написать программу для работы с массивом структур . Программа требует:
1. Создайте шаблон структуры с полями, которые соответствуют предметной области задачи.
2. Определите тип конструкции.
3. Определите размер массива из пяти элементов, каждый из которых является определенной структурой.

Программа должна выполнять следующие функции:
1. Ввод данных структуры с клавиатуры.
2. выполнение работы с массивом конструкций в соответствии с требованиями задачи.
3. вывод результата на экран, при необходимости, в виде таблицы.

Данные внутри структуры должны совпадать с темой задачи:
1. Опишите структуру с именем PRICE, содержащее следующие поля:
• Наименование продукта;
• Наименование магазина, в котором продаются товары;
• Стоимость товара .

2. Напишите программу, которая выполняет следующие действия:
• ввод данных с клавиатуры в массив из 5 структур типа PRICE;
• Организовывать записи в алфавитном порядке по названиям магазинов;
• Вывод информации о товарах, продаваемых в магазине, который был введен с клавиатуры; Если элементов нет, отобразите соответствующее сообщение на экране.

  1. Ответ
    Ответ дан Slavque

    Сортировал массив пузырьком (сравнивал первый символ в названии магазина).

    Пробегался циклом через массив и функцией strcmp, сравнивал названия магазинов и строку с названием того магазина, который мы ищем.

    Если вкратце, strcmp возвращает нам -1 когда строка которая передаётся в качестве первого параметра больше, 0 когда они равны (по содержимому тоже), и 1 если строка которая передаётся 2 параметром больше.

    Вот мой вариант:

    #include <stdio.h>

    #include <string.h>

    #include <ctype.h>

    #include <windows.h>

    template <typename T>

    struct PRICE

    {

       char prod_name[20];

       char shop_name[20];

       T price;

    };

    template <typename T>

    void sortByShop(PRICE<T>* arr, int size)

    {

       PRICE<T> tmp;

       bool check=true;

       while(check)

       {

           check=false;

           for(int i=0; i < size-1; ++i)

           {

               if(toupper(arr[i].shop_name[0])>toupper(arr[i+1].shop_name[0]))

               {

                   tmp = arr[i];

                   arr[i]=arr[i+1];

                   arr[i+1]=tmp;

                   check=true;

               }

           }

       }

    }

    template <typename T>

    void show(PRICE<T>* arr, int size)

    {

       for(int i = 0; i < size; ++i)

       {

           printf("nshop name -> %sn",arr[i].shop_name);

           printf("poduct name -> %sn",arr[i].prod_name);

           printf("poduct price -> %dn",arr[i].price);

       }

    }

    int main()

    {

       const int size = 5;

       PRICE<double> arr[size];

       for(int i = 0; i < size; ++i)

       {

           printf("Enter shop name -> ");

           scanf("%s",&arr[i].shop_name);

           printf("Enter poduct name -> ");

           scanf("%s",&arr[i].prod_name);

           printf("Enter poduct price -> ");

           scanf("%d",&arr[i].price);

       }

       show(arr,size);

       sortByShop(arr,size);

       printf("nSorted array.n");

       show(arr,size);

       char target[20];

       printf("Enter shop name -> ");

       scanf("%s",&target);

       bool check=false;

       for(int i = 0; i < size; ++i)

       {

           if(strcmp(arr[i].shop_name,target)==0)

           {

               printf("nFounded products:n");

               printf("poduct name -> %sn",arr[i].prod_name);

               check=true;

           }

       }

       if(!check) printf("Shop is not founded.n");

       system("pause");

    }

Самые новые вопросы