
Помогите, написать программу на языке С. Описать структуру с именем 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 или добавить/изменить данные людей для проверки программы.



Вот пример программы на языке 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;
}
Этот код позволяет вам ввести информацию о восьми людях, упорядочивает их по датам рождения и выводит информацию о людях, родившихся под заданным знаком Зодиака. Если таких людей нет, программа выдаст соответствующее сообщение.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili