Дан файл bibl, содержащий сведения о книгах. Сведения о каждой из книг – это фамилия автора, название и год издания.
а) Найти названия книг данного автора, изданных с 1960 года.
б) Определить, имеется ли книга с названием “Информатика”. Если да, то сообщить фамилию автора и год издания. Если таких книг несколько, то сообщить имеющееся сведения обо всех этих книгах.
Другие языки программирования и технологии
Помогите пожалуйста решить задачу на C.
Это одна из самых полноценных программ, что я сюда писала
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#define stringSize 256
typedef struct BOOK_s{
char surname[stringSize];
char bookname[stringSize];
unsigned year;
} BOOK;
typedef struct LIBRARY_S{
BOOK* books;
size_t size;
size_t maxSize;
} LIBRARY;
LIBRARY initLibrary(void);
void closeLibrary(LIBRARY*);
void addBook(LIBRARY*, BOOK*);
void findBooksByName(LIBRARY*, BOOK***, size_t* n, const char* bookname);
void findBooksByAuthor(LIBRARY*, BOOK***, size_t* n, const char* author);
int main(int argv, const char** argc){
char author[stringSize], bookname[stringSize];
unsigned year;
printf("Введите фамилию автора и год: ");
scanf("%s %u", author, &year);
printf("Введите название книги: ");
scanf("%s", bookname);
printf("\n");
FILE* f = fopen("bibl.txt", "r");
if(!f){
printf("Невозможно открыть файл\n");
return 0;
}
LIBRARY lib = initLibrary();
BOOK tmpBook;
while(!feof(f)){
fscanf(f, "%s %s %u", tmpBook.surname, tmpBook.bookname, &tmpBook.year);
addBook(&lib, &tmpBook);
}
BOOK** books = NULL;
size_t size;
findBooksByAuthor(&lib, &books, &size, author);
printf("Все книги автора %s с %u года: \n", author, year);
for(size_t i = 0; i < size; i++){
if(books[i]->year > year)
printf("%s %s %u\n", books[i]->surname, books[i]->bookname, books[i]->year);
}
printf("\n");
findBooksByName(&lib, &books, &size, bookname);
printf("Все книги под названием \"%s\":\n", bookname);
for(size_t i = 0; i < size; i++){
printf("%s %s %u\n", books[i]->surname, books[i]->bookname, books[i]->year);
}
printf("\n");
free(books);
closeLibrary(&lib);
fclose(f);
return 0;
}
LIBRARY initLibrary(){
LIBRARY lib;
lib.maxSize = 1;
lib.size = 0;
lib.books = (BOOK*)calloc(lib.maxSize, sizeof(BOOK));
return lib;
}
void resizeLibrary(LIBRARY* lib){
size_t newSize = lib->maxSize * 2;
BOOK* newBooks = (BOOK*)realloc(lib->books, newSize * sizeof(BOOK));
if(newBooks != NULL){
lib->books = newBooks;
lib->maxSize = newSize;
}
}
void closeLibrary(LIBRARY* lib){
lib->maxSize = 0;
lib->size = 0;
free(lib->books);
}
void addBook(LIBRARY* lib, BOOK* book){
if(lib->maxSize - 1 == lib->size) resizeLibrary(lib);
strcpy(lib->books[lib->size].surname, book->surname);
strcpy(lib->books[lib->size].bookname, book->bookname);
lib->books[lib->size].year = book->year;
lib->size++;
}
void findBooksByName(LIBRARY* lib, BOOK*** books, size_t* n, const char* bookname){
*n = 0;
if(*books != NULL) free(*books);
(*books) = (BOOK**)calloc(*n, sizeof(BOOK*));
for (size_t i = 0; i < lib->size; i++) {
if(strcmp(lib->books[i].bookname, bookname) == 0){
(*n)++;
(*books) = (BOOK**)realloc((*books), sizeof(BOOK*) * (*n));
(*books)[*n - 1] = &lib->books[i];
}
}
}
void findBooksByAuthor(LIBRARY* lib, BOOK*** books, size_t* n, const char* author){
*n = 0;
if(*books != NULL) free(*books);
(*books) = (BOOK**)calloc(*n, sizeof(BOOK*));
for (size_t i = 0; i < lib->size; i++) {
if(strcmp(lib->books[i].surname, author) == 0){
(*n)++;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#define stringSize 256
typedef struct BOOK_s{
char surname[stringSize];
char bookname[stringSize];
unsigned year;
} BOOK;
typedef struct LIBRARY_S{
BOOK* books;
size_t size;
size_t maxSize;
} LIBRARY;
LIBRARY initLibrary(void);
void closeLibrary(LIBRARY*);
void addBook(LIBRARY*, BOOK*);
void findBooksByName(LIBRARY*, BOOK***, size_t* n, const char* bookname);
void findBooksByAuthor(LIBRARY*, BOOK***, size_t* n, const char* author);
int main(int argv, const char** argc){
char author[stringSize], bookname[stringSize];
unsigned year;
printf("Введите фамилию автора и год: ");
scanf("%s %u", author, &year);
printf("Введите название книги: ");
scanf("%s", bookname);
printf("\n");
FILE* f = fopen("bibl.txt", "r");
if(!f){
printf("Невозможно открыть файл\n");
return 0;
}
LIBRARY lib = initLibrary();
BOOK tmpBook;
while(!feof(f)){
fscanf(f, "%s %s %u", tmpBook.surname, tmpBook.bookname, &tmpBook.year);
addBook(&lib, &tmpBook);
}
BOOK** books = NULL;
size_t size;
findBooksByAuthor(&lib, &books, &size, author);
printf("Все книги автора %s с %u года: \n", author, year);
for(size_t i = 0; i < size; i++){
if(books[i]->year > year)
printf("%s %s %u\n", books[i]->surname, books[i]->bookname, books[i]->year);
}
printf("\n");
findBooksByName(&lib, &books, &size, bookname);
printf("Все книги под названием \"%s\":\n", bookname);
for(size_t i = 0; i < size; i++){
printf("%s %s %u\n", books[i]->surname, books[i]->bookname, books[i]->year);
}
printf("\n");
free(books);
closeLibrary(&lib);
fclose(f);
return 0;
}
LIBRARY initLibrary(){
LIBRARY lib;
lib.maxSize = 1;
lib.size = 0;
lib.books = (BOOK*)calloc(lib.maxSize, sizeof(BOOK));
return lib;
}
void resizeLibrary(LIBRARY* lib){
size_t newSize = lib->maxSize * 2;
BOOK* newBooks = (BOOK*)realloc(lib->books, newSize * sizeof(BOOK));
if(newBooks != NULL){
lib->books = newBooks;
lib->maxSize = newSize;
}
}
void closeLibrary(LIBRARY* lib){
lib->maxSize = 0;
lib->size = 0;
free(lib->books);
}
void addBook(LIBRARY* lib, BOOK* book){
if(lib->maxSize - 1 == lib->size) resizeLibrary(lib);
strcpy(lib->books[lib->size].surname, book->surname);
strcpy(lib->books[lib->size].bookname, book->bookname);
lib->books[lib->size].year = book->year;
lib->size++;
}
void findBooksByName(LIBRARY* lib, BOOK*** books, size_t* n, const char* bookname){
*n = 0;
if(*books != NULL) free(*books);
(*books) = (BOOK**)calloc(*n, sizeof(BOOK*));
for (size_t i = 0; i < lib->size; i++) {
if(strcmp(lib->books[i].bookname, bookname) == 0){
(*n)++;
(*books) = (BOOK**)realloc((*books), sizeof(BOOK*) * (*n));
(*books)[*n - 1] = &lib->books[i];
}
}
}
void findBooksByAuthor(LIBRARY* lib, BOOK*** books, size_t* n, const char* author){
*n = 0;
if(*books != NULL) free(*books);
(*books) = (BOOK**)calloc(*n, sizeof(BOOK*));
for (size_t i = 0; i < lib->size; i++) {
if(strcmp(lib->books[i].surname, author) == 0){
(*n)++;
Иван Сироткин
Спасибо!
Файл для проверки где брать?
Иван Сироткин
На:
Ivanov I.A.
Information
12.04.03
Petrov A.S.
Literature
02.03.99
Sidorov D.V.
Physics
29.10.87
Vasichkin K.L.
Information
29.10.87
Ivanov I.A.
Information
12.04.03
Petrov A.S.
Literature
02.03.99
Sidorov D.V.
Physics
29.10.87
Vasichkin K.L.
Information
29.10.87
Похожие вопросы
- Помогите, пожалуйста, решить задачу в c++!!
- Помогите пожалуйста решить задачу в c++!!
- Помогите, пожалуйста, решить задачу на c++.
- Помогите пожалуйста решить на языке C++
- помогите пожалуйста решить задачу по работе компьютера!
- Програмрование C# .Помогите пожалуйста решить задачу . Бьюсь головой об экран уже ...
- Помогите, пожалуйста, решить задачу на языке C++
- Помогите пожалуйста решить задачу по программированию. В чем я ошибаюсь?
- Помогите,пожалуйста,решить задачу в Паскале.
- Pascal. Помогите пожалуйста решить задачу в паскале !