Вопрос задан 23.09.2023 в 22:13. Предмет Информатика. Спрашивает Оборина Даша.

Помогите, написать программу на языке С. Описать структуру с именем ZNAK, содержащую следующие

поля: • фамилия, имя; •знак Зодиака: •дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK; записи должны быть упорядочены по датам рождения;• вывод на экран информации о людях, родившихся под знаком зодиака, название которого введено с клавиатуры; • если таких нет, выдать на дисплей соответствующее сообщение ​
0 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 или добавить/изменить данные людей для проверки программы.

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Вот пример программы на языке C, который выполняет описанные вами действия:

c
#include <stdio.h> #include <string.h> // Структура для хранения информации о человеке struct ZNAK { char surname[50]; char name[50]; char zodiac[20]; int birthdate[3]; // Массив из трех чисел: день, месяц, год }; // Функция для сравнения дат рождения для сортировки int compareDates(const void *a, const void *b) { struct ZNAK *personA = (struct ZNAK *)a; struct ZNAK *personB = (struct ZNAK *)b; // Сравниваем год рождения if (personA->birthdate[2] < personB->birthdate[2]) { return -1; } else if (personA->birthdate[2] > personB->birthdate[2]) { return 1; } // Если годы одинаковые, сравниваем месяц if (personA->birthdate[1] < personB->birthdate[1]) { return -1; } else if (personA->birthdate[1] > personB->birthdate[1]) { return 1; } // Если месяцы одинаковые, сравниваем день if (personA->birthdate[0] < personB->birthdate[0]) { return -1; } else if (personA->birthdate[0] > personB->birthdate[0]) { return 1; } return 0; // Даты рождения совпадают } int main() { struct ZNAK people[8]; char searchZodiac[20]; // Ввод данных о людях printf("Введите данные о людях:\n"); for (int i = 0; i < 8; i++) { printf("Человек %d:\n", i + 1); printf("Фамилия: "); scanf("%s", people[i].surname); printf("Имя: "); scanf("%s", people[i].name); printf("Знак Зодиака: "); scanf("%s", people[i].zodiac); printf("Дата рождения (день месяц год): "); scanf("%d %d %d", &people[i].birthdate[0], &people[i].birthdate[1], &people[i].birthdate[2]); } // Сортировка массива по датам рождения qsort(people, 8, sizeof(struct ZNAK), compareDates); // Ввод знака Зодиака для поиска printf("\nВведите знак Зодиака для поиска: "); scanf("%s", searchZodiac); // Поиск и вывод информации о людях с заданным знаком Зодиака int found = 0; printf("\nЛюди, родившиеся под знаком %s:\n", searchZodiac); for (int i = 0; i < 8; i++) { if (strcmp(people[i].zodiac, searchZodiac) == 0) { printf("Фамилия: %s\n", people[i].surname); printf("Имя: %s\n", people[i].name); printf("Дата рождения: %02d.%02d.%d\n", people[i].birthdate[0], people[i].birthdate[1], people[i].birthdate[2]); found = 1; } } if (!found) { printf("Людей с заданным знаком Зодиака не найдено.\n"); } return 0; }

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

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос