Информатика, вопрос задал grabovasofia139 , 1 год назад

Помогите, написать программу на языке С.
Описать структуру с именем ZNAK, содержащую следующие поля:
• фамилия, имя;
•знак Зодиака:
•дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK;
записи должны быть упорядочены по датам рождения;
• вывод на экран информации о людях, родившихся под знаком зодиака, название которого введено с клавиатуры;
• если таких нет, выдать на дисплей соответствующее сообщение ​

Ответы на вопрос

Ответил shahbazovelman97
0

Ответ:

Объяснение:

#include <stdio.h>

#include <string.h>

#define MAX_SIZE 8

struct ZNAK {

   char name[50];

   char zodiac[20];

   int birthdate[3];

};

void sort_by_birthdate(struct ZNAK arr[], int size) {

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

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

           if (arr[j].birthdate[0] > arr[j + 1].birthdate[0]) {

               struct ZNAK temp = arr[j];

               arr[j] = arr[j + 1];

               arr[j + 1] = temp;

           } else if (arr[j].birthdate[0] == arr[j + 1].birthdate[0]) {

               if (arr[j].birthdate[1] > arr[j + 1].birthdate[1]) {

                   struct ZNAK temp = arr[j];

                   arr[j] = arr[j + 1];

                   arr[j + 1] = temp;

               } else if (arr[j].birthdate[1] == arr[j + 1].birthdate[1]) {

                   if (arr[j].birthdate[2] > arr[j + 1].birthdate[2]) {

                       struct ZNAK temp = arr[j];

                       arr[j] = arr[j + 1];

                       arr[j + 1] = temp;

                   }

               }

           }

       }

   }

}

void print_zodiac_people(struct ZNAK arr[], int size, char zodiac[]) {

   int found = 0;

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

       if (strcmp(arr[i].zodiac, zodiac) == 0) {

           printf("Имя: %s\n", arr[i].name);

           printf("Дата рождения: %d.%d.%d\n", arr[i].birthdate[0], arr[i].birthdate[1], arr[i].birthdate[2]);

           printf("\n");

           found = 1;

       }

   }

   if (!found) {

       printf("Людей с знаком зодиака '%s' не найдено.\n", zodiac);

   }

}

int main() {

   struct ZNAK people[MAX_SIZE];

   printf("Введите данные о людях:\n");

   for (int i = 0; i < MAX_SIZE; i++) {

       printf("Человек %d:\n", i + 1);

       printf("Фамилия, имя: ");

       fgets(people[i].name, sizeof(people[i].name), stdin);

       printf("Знак зодиака: ");

       fgets(people[i].zodiac, sizeof(people[i].zodiac), stdin);

       printf("Дата рождения (день, месяц, год): ");

       scanf("%d %d %d", &people[i].birthdate[0], &people[i].birthdate[1], &people[i].birthdate[2]);

       getchar();  // считываем символ новой строки после ввода даты рождения

       printf("\n");

   }

   sort_by_birthdate(people, MAX_SIZE);

   printf("Введите название знака зодиака для поиска: ");

   char zodiac[20];

   fgets(zodiac, sizeof(zodiac), stdin);

   zodiac[strcspn(zodiac, "\n")] = '\0';  // удаляем символ новой строки из введенной строки

   printf("\nЛюди, родившиеся под знаком зодиака '%s':\n", zodiac);

   print_zodiac_people(people, MAX_SIZE, zodiac);

   return 0;

}

Программа сначала определяет структуру ZNAK, которая содержит необходимые поля. Затем используются функции sort_by_birthdate для сортировки записей по датам рождения и print_zodiac_people для вывода информации о людях, родившихся под указанным знаком зодиака.

В функции main происходит ввод данных о людях с клавиатуры и вызываются функции сортировки и вывода информации. Вы можете изменить максимальный размер массива MAX_SIZE или добавить/изменить данные людей для проверки программы.

Новые вопросы