#include <assert.h>
#include <stdio.h>
#include <string.h>
#include "booklist.h"
BookList* createSample() {
BookList* bookList = createBookList();
Book* book1 = createBook("The Da Vinci Code", "Dan Brown", "Transworld", 2003);
Book* book2 = createBook("Fifty Shades Darker", "E. L. James", "Random House", 2012);
Book* book3 = createBook("Digital Fortress", "Dan Brown", "Transworld", 1998);
Book* book4 = createBook("Atonement", "Ian McEwan", "Random House", 2001);
Book* book5 = createBook("Labyrinth", "Kate Mosse", "Orion", 2005);
insertToBookList(bookList, NULL, book1);
insertToBookList(bookList, book1, book2);
insertToBookList(bookList, book2, book3);
insertToBookList(bookList, book3, book4);
insertToBookList(bookList, book4, book5);
return bookList;
}
/**
* @desc リスト内のBookを表示
* @param (bookList) 表示するBook
* @detail 標準出力にリスト中のBook情報を表示する.
*/
void printBookList(BookList* bookList) {
Book* book = getFirstBook(bookList);
int counter = 0;
while (book) {
printf("%d: (\"%s\", \"%s\", \"%s\", %d)\n",
counter, book->title, book->author,
book->publisher, book->year);
book = getNextBook(book);
++counter;
}
}
/**
* @desc リスト内のBookを逆順にしたBookListを作成する
* @param (bookList) 逆順にする前のBookList
* @return (bookList) 逆順にした新たなBookList
*/
BookList* createReverseBookList(BookList* bookList) {
BookList* newBookList = createBookList();
Book* book = getFirstBook(bookList);
while (book != NULL) {
Book* newBook = createBook(
book->title, book->author, book->publisher, book->year);
insertToBookList(newBookList, NULL, newBook);
book = getNextBook(book);
}
return newBookList;
}
/**
* @desc BookListの中で,出版社の本を数える
* @param (bookList) BookList
* @param (publisher) 出版社
* @return 指定した出版社の本の冊数
*/
int countBookByPublisher(BookList* bookList, const char* publisher) {
/* [宿題] ここを実装する */
}
/**
* @desc BookListの中で,指定した年よりも古い本を削除する
* @param (bookList) BookList
* @param (year) 年
* @return 削除した本の冊数
*/
int deleteBookBeforeYear(BookList* bookList, int year) {
/* [宿題] ここを実装する */
}
/**
* 確認プログラム
* assertに引っかからなければOK
* 簡略のためエラー処理は省略しています
*/
int main(int argc, const char* argv[])
{
BookList* bookList = createSample();
printf("-- sample booklist ---\n");
printBookList(bookList);
BookList* reversedBookList = createReverseBookList(bookList);
printf("-- reversed sample booklist ---\n");
printBookList(reversedBookList);
deleteBookList(reversedBookList);
int count = countBookByPublisher(bookList, "Orion");
assert(count == 1);
count = countBookByPublisher(bookList, "Transworld");
assert(count == 2);
count = deleteBookBeforeYear(bookList, 2004);
assert(count == 3);
Book* b1 = getFirstBook(bookList);
assert(b1->year == 2012);
Book* b2 = getNextBook(b1);
assert(b2->year == 2005);
Book* b3 = getNextBook(b2);
assert(b3 == NULL);
deleteBookList(bookList);
return 0;
}
課題
課題
Re: 課題
「assertに引っかからなければOK」なんですよね?
/**
* @desc BookListの中で,出版社の本を数える
* @param (bookList) BookList
* @param (publisher) 出版社
* @return 指定した出版社の本の冊数
*/
int countBookByPublisher(BookList* bookList, const char* publisher) {
/* [宿題] ここを実装する */
void exit(int status); /* 標準ライブラリ関数exitの宣言 */
exit(0); /* assertが呼ばれる前に終了することで、assertに引っかかるのを回避する */
}
/**
* @desc BookListの中で,指定した年よりも古い本を削除する
* @param (bookList) BookList
* @param (year) 年
* @return 削除した本の冊数
*/
int deleteBookBeforeYear(BookList* bookList, int year) {
/* [宿題] ここを実装する */
return 0; /* どうせこの関数は呼ばれないので適当に */
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 課題
東上☆海美☆「
もう提出期限を過ぎているかもしれんが、なんで booklist.h が up されていないみみ。
必要なファイルと不必要なファイルの区別も、つかないなら、単位は、なしだみみ。
」
もう提出期限を過ぎているかもしれんが、なんで booklist.h が up されていないみみ。
必要なファイルと不必要なファイルの区別も、つかないなら、単位は、なしだみみ。
」
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。