2021/01/15 ソフトウェア概論 試験(2021/01/22)の流れ 2021/01/22 のページを開く ダウロードのページを開く 自分の番号のファイルをダウンロード 内容が微妙に異なるので自分のファイルをダウロードする # 本日は、20210115-9999.zip を共有する .zip ファイルは、 c:\usr\c\20210122 にダウンロード 右クリックして、すべて展開 中に question フォルダ => q.txt (問題がファイルがある) それぞれ解く 解答法 ファイルに解答を書き込んで、それを提出 (パターンが二つ) a) QQQQ-a.txt に直接答えを記入して、複数の解答をまとめて一つで行う問題 b) 一つ一つの問題に対して、一つの C 言語のソースファイルを一答する !! 全体で、たくさんの問題がある !! => 解答のファイルもたくさんある !! => CST Portal IIに提出(アップロードする) 解答法 a) 答えが、プログラムの出力になる問題 ( 例 : Q.10 では 28218 ) これを、QQQQ-a.txt の所定の場所に書き込む => 複数の問題の解答を、一つファイル (QQQQ-a.txt)に記入して、 その一つのファイルの提出をもって、(複数の問題の)解答とする b) Q.00 を例 番号のフォルダに、実行例とテンプレートが入っている 基本、実行例と同じような出力が出るようなプログラムを書く !! q00.txt と 00.out が一致しない場合 !! => 基本 q00.txt の内容を優先 解答ファイルは、 テンプレートを編集してもよいし、 零から作り直してもよい !! すで、作成済のファイルを(変更して..)作ってもよい 解答は、CST Portal II にファイルの形で提出する 未提出のものは、採点の対象にならない できたものだけ、提出するとよい # 最後にまとめて提出すると CST Portal II が重くなって、 # 提出できない事がおきます。 => 解答案ができたら、その場で、提出する == [前回(2020/12/18)の復習] 動的データ型 <=> C 言語で、これまで学んだデータ型 コンパイル時で、サイズが決まっている ( 静的データ型 ) 例: 単純変数宣言 : int i; <= 整数型変数の宣言で、整数 1 つ分を記録 配列宣言 : char c[10]; <= 文字型配列の宣言で、文字 10 つ分を記録 構造体 : struct { int i; double d } s; <= 構造体の変数宣言で、整数 1 つ分と浮動小数点数 1 つ分を記録 !! 情報を記録するには、メモリを確保する必要がある !! => 変数宣言を利用すると、その型のメモリを自動的に確保してもらえる => 実行時になって初めて、サイズが決まるデータ型 メモリを「動的(実行時)に確保」する仕組みが必要 alloc 関数 ( malloc, calloc : メモリの確保関数 ) と free ( メモリの解放 ) 実行時に、必要サイズを指定して、malloc を呼び出し、 必要なサイズの領域を得る 利用が終わったら、わすれずに free を呼び出して、解放する !! プログラムそのものは free しなくても、うごきます。 !! 大量の領域を alloc して free しないと !! => メモリ不足になる 前回 : 動的なデータ構造 list を紹介 FILE I/O / ファイル I/O ファイル操作 ファイル : データを恒常的記憶するための仕組み <=> メモリの情報 : 電源を切ると失われる 情報を恒常的に記録するには、ファイルに保存する必要がある 大量の情報を入力するときに、キーボードから入力していると大変 => ファイルに記録して、そこから読み出せると楽 ファイル 情報が永続的に利用可能で、サイズの大きな(文字の..)配列のように利用できる 任意のファイルに対する読み(Read/Input)書き(Write/Output)する機能 ファイルの参照は ( 基本 ) 先頭から、順番に参照する 例 : fgetc では、先頭から 1 文字ずつ読み出す !! ファイルは、大きな文字配列のように考えられるが、 !! その要素(ファイルに記録されているデータ)への参照は、 !! 逐次的に行うのが普通 !! !! 任意の場所の参照も可能だが、時間がかかる !! !! cf. List : 先頭は早いが、後ろな遅かった ファイルの参照 ( I/O : Read/Write ) の場合 FILE ポインター変数の宣言 ファイルのオープン オープンが成功したかどうかのチェック # 成功した場合は、ファイルの中身を参照 ファイルのオープンに成功した場合は、最後にクローズする [コマンドライン引数] プログラムを実行する時に、そこに、引数 ( コマンドライン引数 ) が追加できる # ./p-003.exe # => # ./p-003.exe abc 123 # この実行するファイル(名)の後ろに追加された # 文字列の並び 「abc」と「123」 # # (基本) コマンドライン引数は、空白で区切られる プログラム中では、 main 関数の引数 ( argc, argv ) を利用して、参照可能 argc は引数の個数 + 1 argv[i] は、i 番目の引数だが、 i = 0 の時は、コマンドファイル名 という形で参照可能