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