#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STUDENTS 100
#define MAX_STRING_LEN 50
typedef struct {
char surname[ MAX_STRING_LEN] ;
char name[ MAX_STRING_LEN] ;
char patronymic[ MAX_STRING_LEN] ;
char birth_date[ 11 ] ; // формат "YYYY-MM-DD"
char address[ 100 ] ;
char phone[ 20 ] ;
char faculty[ MAX_STRING_LEN] ;
int course;
} Student;
// Безопасное копирование строки с ограничением длины
void safe_strcpy( char * dest, const char * src, size_t dest_size) {
dest[ dest_size - 1 ] = '\0 ' ;
}
// Функция установки данных
void set_student( Student * s, const char * surname, const char * name, const char * patronymic,
const char * birth_date, const char * address, const char * phone,
const char * faculty, int course) {
safe_strcpy( s-> surname, surname, sizeof ( s-> surname) ) ;
safe_strcpy( s-> name, name, sizeof ( s-> name) ) ;
safe_strcpy( s-> patronymic, patronymic, sizeof ( s-> patronymic) ) ;
safe_strcpy( s-> birth_date, birth_date, sizeof ( s-> birth_date) ) ;
safe_strcpy( s-> address, address, sizeof ( s-> address) ) ;
safe_strcpy( s-> phone, phone, sizeof ( s-> phone) ) ;
safe_strcpy( s-> faculty, faculty, sizeof ( s-> faculty) ) ;
s-> course = course;
}
void show_student( const Student * s) {
printf ( "ФИО: %s %s %s\n " , s
-> surname
, s
-> name
, s
-> patronymic
) ; printf ( "Дата рождения: %s\n " , s
-> birth_date
) ; printf ( "Адрес: %s\n " , s
-> address
) ; printf ( "Телефон: %s\n " , s
-> phone
) ; printf ( "Факультет: %s\n " , s
-> faculty
) ; printf ( "Курс: %d\n " , s
-> course
) ; printf ( "-------------------------------------\n " ) ; }
int get_birth_year( const Student * s) {
char year_str[ 5 ] ;
strncpy ( year_str
, s
-> birth_date
, 4 ) ; year_str[ 4 ] = '\0 ' ;
}
void print_by_faculty( const Student students[ ] , int n, const char * faculty) {
if ( n <= 0 || n > MAX_STUDENTS) {
printf ( "Некорректное количество студентов\n " ) ; return ;
}
printf ( "\n Студенты факультета %s:\n " , faculty
) ; for ( int i = 0 ; i < n; i++ ) {
if ( strcmp ( students
[ i
] .
faculty , faculty
) == 0 ) { show_student( & students[ i] ) ;
}
}
}
void print_by_faculty_and_course( const Student students[ ] , int n) {
if ( n <= 0 || n > MAX_STUDENTS) {
printf ( "Некорректное количество студентов\n " ) ; return ;
}
printf ( "\n Студенты по факультетам и курсам:\n " ) ; for ( int i = 0 ; i < n; i++ ) {
printf ( "Факультет: %s, Курс: %d\n " , students
[ i
] .
faculty , students
[ i
] .
course ) ; show_student( & students[ i] ) ;
}
}
void print_born_after_year( const Student students[ ] , int n, int year) {
if ( n <= 0 || n > MAX_STUDENTS) {
printf ( "Некорректное количество студентов\n " ) ; return ;
}
printf ( "\n Студенты, родившиеся после %d года:\n " , year
) ; for ( int i = 0 ; i < n; i++ ) {
if ( get_birth_year( & students[ i] ) > year) {
show_student( & students[ i] ) ;
}
}
}
int main( ) {
Student students[ MAX_STUDENTS] ;
int n = 3 ; // Количество студентов
set_student( & students[ 0 ] , "Иванов" , "Иван" , "Иванович" , "2002-05-14" ,
"г. Москва, ул. Ленина, д. 10" , "+71234567890" , "Физика" , 2 ) ;
set_student( & students[ 1 ] , "Петров" , "Петр" , "Петрович" , "2001-03-22" ,
"г. Санкт-Петербург, Невский пр., д. 20" , "+79876543210" , "Информатика" , 3 ) ;
set_student( & students[ 2 ] , "Сидоров" , "Сидор" , "Сидорович" , "2003-12-01" ,
"г. Казань, ул. Баумана, д. 5" , "+79991112233" , "Физика" , 1 ) ;
print_by_faculty( students, n, "Физика" ) ;
print_by_faculty_and_course( students, n) ;
print_born_after_year( students, n, 2003 ) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2RlZmluZSBNQVhfU1RVREVOVFMgMTAwCiNkZWZpbmUgTUFYX1NUUklOR19MRU4gNTAKCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIgc3VybmFtZVtNQVhfU1RSSU5HX0xFTl07CiAgICBjaGFyIG5hbWVbTUFYX1NUUklOR19MRU5dOwogICAgY2hhciBwYXRyb255bWljW01BWF9TVFJJTkdfTEVOXTsKICAgIGNoYXIgYmlydGhfZGF0ZVsxMV07IC8vINGE0L7RgNC80LDRgiAiWVlZWS1NTS1ERCIKICAgIGNoYXIgYWRkcmVzc1sxMDBdOwogICAgY2hhciBwaG9uZVsyMF07CiAgICBjaGFyIGZhY3VsdHlbTUFYX1NUUklOR19MRU5dOwogICAgaW50IGNvdXJzZTsKfSBTdHVkZW50OwoKLy8g0JHQtdC30L7Qv9Cw0YHQvdC+0LUg0LrQvtC/0LjRgNC+0LLQsNC90LjQtSDRgdGC0YDQvtC60Lgg0YEg0L7Qs9GA0LDQvdC40YfQtdC90LjQtdC8INC00LvQuNC90YsKdm9pZCBzYWZlX3N0cmNweShjaGFyKiBkZXN0LCBjb25zdCBjaGFyKiBzcmMsIHNpemVfdCBkZXN0X3NpemUpIHsKICAgIHN0cm5jcHkoZGVzdCwgc3JjLCBkZXN0X3NpemUgLSAxKTsKICAgIGRlc3RbZGVzdF9zaXplIC0gMV0gPSAnXDAnOwp9CgovLyDQpNGD0L3QutGG0LjRjyDRg9GB0YLQsNC90L7QstC60Lgg0LTQsNC90L3Ri9GFCnZvaWQgc2V0X3N0dWRlbnQoU3R1ZGVudCAqcywgY29uc3QgY2hhciAqc3VybmFtZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0cm9ueW1pYywKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiaXJ0aF9kYXRlLCBjb25zdCBjaGFyICphZGRyZXNzLCBjb25zdCBjaGFyICpwaG9uZSwKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmYWN1bHR5LCBpbnQgY291cnNlKSB7CiAgICBzYWZlX3N0cmNweShzLT5zdXJuYW1lLCBzdXJuYW1lLCBzaXplb2Yocy0+c3VybmFtZSkpOwogICAgc2FmZV9zdHJjcHkocy0+bmFtZSwgbmFtZSwgc2l6ZW9mKHMtPm5hbWUpKTsKICAgIHNhZmVfc3RyY3B5KHMtPnBhdHJvbnltaWMsIHBhdHJvbnltaWMsIHNpemVvZihzLT5wYXRyb255bWljKSk7CiAgICBzYWZlX3N0cmNweShzLT5iaXJ0aF9kYXRlLCBiaXJ0aF9kYXRlLCBzaXplb2Yocy0+YmlydGhfZGF0ZSkpOwogICAgc2FmZV9zdHJjcHkocy0+YWRkcmVzcywgYWRkcmVzcywgc2l6ZW9mKHMtPmFkZHJlc3MpKTsKICAgIHNhZmVfc3RyY3B5KHMtPnBob25lLCBwaG9uZSwgc2l6ZW9mKHMtPnBob25lKSk7CiAgICBzYWZlX3N0cmNweShzLT5mYWN1bHR5LCBmYWN1bHR5LCBzaXplb2Yocy0+ZmFjdWx0eSkpOwogICAgcy0+Y291cnNlID0gY291cnNlOwp9Cgp2b2lkIHNob3dfc3R1ZGVudChjb25zdCBTdHVkZW50ICpzKSB7CiAgICBwcmludGYoItCk0JjQnjogJXMgJXMgJXNcbiIsIHMtPnN1cm5hbWUsIHMtPm5hbWUsIHMtPnBhdHJvbnltaWMpOwogICAgcHJpbnRmKCLQlNCw0YLQsCDRgNC+0LbQtNC10L3QuNGPOiAlc1xuIiwgcy0+YmlydGhfZGF0ZSk7CiAgICBwcmludGYoItCQ0LTRgNC10YE6ICVzXG4iLCBzLT5hZGRyZXNzKTsKICAgIHByaW50Zigi0KLQtdC70LXRhNC+0L06ICVzXG4iLCBzLT5waG9uZSk7CiAgICBwcmludGYoItCk0LDQutGD0LvRjNGC0LXRgjogJXNcbiIsIHMtPmZhY3VsdHkpOwogICAgcHJpbnRmKCLQmtGD0YDRgTogJWRcbiIsIHMtPmNvdXJzZSk7CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwp9CgppbnQgZ2V0X2JpcnRoX3llYXIoY29uc3QgU3R1ZGVudCAqcykgewogICAgY2hhciB5ZWFyX3N0cls1XTsKICAgIHN0cm5jcHkoeWVhcl9zdHIsIHMtPmJpcnRoX2RhdGUsIDQpOwogICAgeWVhcl9zdHJbNF0gPSAnXDAnOwogICAgcmV0dXJuIGF0b2koeWVhcl9zdHIpOwp9Cgp2b2lkIHByaW50X2J5X2ZhY3VsdHkoY29uc3QgU3R1ZGVudCBzdHVkZW50c1tdLCBpbnQgbiwgY29uc3QgY2hhciAqZmFjdWx0eSkgewogICAgaWYgKG4gPD0gMCB8fCBuID4gTUFYX1NUVURFTlRTKSB7CiAgICAgICAgcHJpbnRmKCLQndC10LrQvtGA0YDQtdC60YLQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtGD0LTQtdC90YLQvtCyXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcHJpbnRmKCJcbtCh0YLRg9C00LXQvdGC0Ysg0YTQsNC60YPQu9GM0YLQtdGC0LAgJXM6XG4iLCBmYWN1bHR5KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgaWYgKHN0cmNtcChzdHVkZW50c1tpXS5mYWN1bHR5LCBmYWN1bHR5KSA9PSAwKSB7CiAgICAgICAgICAgIHNob3dfc3R1ZGVudCgmc3R1ZGVudHNbaV0pOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBwcmludF9ieV9mYWN1bHR5X2FuZF9jb3Vyc2UoY29uc3QgU3R1ZGVudCBzdHVkZW50c1tdLCBpbnQgbikgewogICAgaWYgKG4gPD0gMCB8fCBuID4gTUFYX1NUVURFTlRTKSB7CiAgICAgICAgcHJpbnRmKCLQndC10LrQvtGA0YDQtdC60YLQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtGD0LTQtdC90YLQvtCyXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcHJpbnRmKCJcbtCh0YLRg9C00LXQvdGC0Ysg0L/QviDRhNCw0LrRg9C70YzRgtC10YLQsNC8INC4INC60YPRgNGB0LDQvDpcbiIpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBwcmludGYoItCk0LDQutGD0LvRjNGC0LXRgjogJXMsINCa0YPRgNGBOiAlZFxuIiwgc3R1ZGVudHNbaV0uZmFjdWx0eSwgc3R1ZGVudHNbaV0uY291cnNlKTsKICAgICAgICBzaG93X3N0dWRlbnQoJnN0dWRlbnRzW2ldKTsKICAgIH0KfQoKdm9pZCBwcmludF9ib3JuX2FmdGVyX3llYXIoY29uc3QgU3R1ZGVudCBzdHVkZW50c1tdLCBpbnQgbiwgaW50IHllYXIpIHsKICAgIGlmIChuIDw9IDAgfHwgbiA+IE1BWF9TVFVERU5UUykgewogICAgICAgIHByaW50Zigi0J3QtdC60L7RgNGA0LXQutGC0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLRg9C00LXQvdGC0L7QslxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHByaW50ZigiXG7QodGC0YPQtNC10L3RgtGLLCDRgNC+0LTQuNCy0YjQuNC10YHRjyDQv9C+0YHQu9C1ICVkINCz0L7QtNCwOlxuIiwgeWVhcik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGlmIChnZXRfYmlydGhfeWVhcigmc3R1ZGVudHNbaV0pID4geWVhcikgewogICAgICAgICAgICBzaG93X3N0dWRlbnQoJnN0dWRlbnRzW2ldKTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgU3R1ZGVudCBzdHVkZW50c1tNQVhfU1RVREVOVFNdOwogICAgaW50IG4gPSAzOyAvLyDQmtC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0YPQtNC10L3RgtC+0LIKCiAgICBzZXRfc3R1ZGVudCgmc3R1ZGVudHNbMF0sICLQmNCy0LDQvdC+0LIiLCAi0JjQstCw0L0iLCAi0JjQstCw0L3QvtCy0LjRhyIsICIyMDAyLTA1LTE0IiwgCiAgICAgICAgICAgICAgICAi0LMuINCc0L7RgdC60LLQsCwg0YPQuy4g0JvQtdC90LjQvdCwLCDQtC4gMTAiLCAiKzcxMjM0NTY3ODkwIiwgItCk0LjQt9C40LrQsCIsIDIpOwogICAgc2V0X3N0dWRlbnQoJnN0dWRlbnRzWzFdLCAi0J/QtdGC0YDQvtCyIiwgItCf0LXRgtGAIiwgItCf0LXRgtGA0L7QstC40YciLCAiMjAwMS0wMy0yMiIsIAogICAgICAgICAgICAgICAgItCzLiDQodCw0L3QutGCLdCf0LXRgtC10YDQsdGD0YDQsywg0J3QtdCy0YHQutC40Lkg0L/RgC4sINC0LiAyMCIsICIrNzk4NzY1NDMyMTAiLCAi0JjQvdGE0L7RgNC80LDRgtC40LrQsCIsIDMpOwogICAgc2V0X3N0dWRlbnQoJnN0dWRlbnRzWzJdLCAi0KHQuNC00L7RgNC+0LIiLCAi0KHQuNC00L7RgCIsICLQodC40LTQvtGA0L7QstC40YciLCAiMjAwMy0xMi0wMSIsIAogICAgICAgICAgICAgICAgItCzLiDQmtCw0LfQsNC90YwsINGD0LsuINCR0LDRg9C80LDQvdCwLCDQtC4gNSIsICIrNzk5OTExMTIyMzMiLCAi0KTQuNC30LjQutCwIiwgMSk7CgogICAgcHJpbnRfYnlfZmFjdWx0eShzdHVkZW50cywgbiwgItCk0LjQt9C40LrQsCIpOwogICAgcHJpbnRfYnlfZmFjdWx0eV9hbmRfY291cnNlKHN0dWRlbnRzLCBuKTsKICAgIHByaW50X2Jvcm5fYWZ0ZXJfeWVhcihzdHVkZW50cywgbiwgMjAwMyk7CgogICAgcmV0dXJuIDA7Cn0=