Ex01

From Prog0

Jump to: navigation, search

演習第1回

Contents

はじめに

  • プログラミング入門の演習では毎回、基本問題(A問題)と応用問題(B問題)をそれぞれ2〜3問ずつ用意しています。
  • 各自で問題を解いて期限内に解答を提出してください。
  • 提出〆切は、A問題が演習時間内B問題が演習日の6日後の午後9時です。
  • 各問題毎に指定されたファイル名の解答ファイルを作成し、後述するmenuコマンドを使って提出をしてもらいます。ファイルを作成していても正しい方法で提出しなければ採点はされませんので注意してください。
  • A, B問題に加えて、時間が余った人や理解を深めたい人向けに追加問題(Extra問題)も用意しています。
  • 各問題の模範解答は提出〆切後に公開します。
  • 演習の出席確認はLMS上の「演習出欠」で行ってもらいます
    • 演習時間のどこかのタイミングでパスワードを提示します。
    • 出席手続きが可能なのは演習時間中のみなので、気をつけて下さい。

演習問題

今回の演習は次のような流れになっています。

  1. 演習を始めるための準備として解答用ディレクトリを作成する。
  2. 課題提出用のツールであるmenuコマンドの使い方を理解する。
  3. 講義内容の復習がてら、Emacsを用いたファイル作成とテキスト入力の練習を行う。
  4. 実際にプログラムを作成してコンパイルと実行を試す。

基本的な用語やUNIXコマンドについてはリテラシーの授業で学習済みだと思いますが、もし忘れてしまった場合はこちらをクリックして「補足資料」を読んでください。わからないことがあれば教員またはTA/SAに質問してください。

今回の問題では解答をテキストファイルで提出するものと、プログラムのソースファイルで提出するものの2種類があります。前者は ".txt"、後者は ".c" という拡張子を付ける必要があることに注意してください。ファイル名は問題で指定されたものと完全に一致させてください(大文字・小文字も一致させること)。ファイル名やファイルの置き場が間違っていると、課題提出用のmenuコマンドがファイルを見つけることができません。また、数字のイチ (1) と小文字のエル (l)、数字のゼロ (0) と大文字のオー (O) は見間違えやすいことにも注意してください。

以下で出てくる囲み枠で示された部分は実行例です。その中では赤字がキーボードからの入力、緑字がコンピュータの出力を表しています。また、「%」はプロンプト(皆さんの環境では std5dc1:~ s13XXXXX[51]$ 等に相当)を示しており、皆さんが入力するのはその次の文字から(赤字の部分のみ)になります。

演習準備

解答用ディレクトリの作成

演習を始めるにあたり、まず解答用ディレクトリを作成します。自分のホームディレクトリに「Prog0」という名前のディレクトリを作り、さらにその下に演習全14回分のディレクトリ「Ex01」,「Ex02」,「Ex03」, ... ,「Ex14」を作ってください(先頭の文字は大文字でなくてはいけない点に注意)。

具体的な手順は以下のとおりです(ターミナル上で赤字のコマンドを入力する)。

% cd
% mkdir Prog0
% cd Prog0
% mkdir Ex01 Ex02 Ex03 Ex04 Ex05 Ex06 Ex07
% mkdir Ex08 Ex09 Ex10 Ex11 Ex12 Ex13 Ex14

menuコマンドの使い方

この演習では解答ファイルの提出時に専用ツールのmenuコマンドを使用してもらいます。menuコマンドにはディレクトリのチェック機能もあるので、コマンドの使い方の確認を兼ねて、先ほど作成した解答用ディレクトリが正しく作られているかをチェックしてみましょう。

(Macでmenuコマンドを使うとパスワードを要求されることがありますが、その場合はログインパスワードを入力してください。その回避方法については後述します。)

menuコマンドはターミナル上で以下を入力することで実行できます。

% ~prog0/bin/menu

menuコマンドを実行すると0〜4のメニューが表示されるので、ここでは「4. ディレクトリ確認」を選択してください。「4」を入力して「○」が表示されたら成功です。「×」または「△」が表示された場合は何らかのエラーが起きているので、ディレクトリ作成からやり直すか、教員またはTA/SAを呼んでください。

% ~prog0/bin/menu
【プログラミング入門 メニュー】
0. メニュー終了 (exit menu)
1. 課題提出 (submit)
2. 提出済みファイル確認 (submitcheck)
3. 作成ファイル確認 (filecheck)
4. ディレクトリ確認 (dircheck)
どれを実行しますか?(数字を入力して下さい)
4
「ディレクトリ確認」が選択されました
実行日時        アカウント名
【プログラミング入門 演習用ディレクトリ作成状況】
***/あなたのアカウント名/Prog0を調べます
(○:存在する、×:存在しない、△:読めない)
---------------------------
○ ***/あなたのアカウント名/Prog0/Ex01
○ ***/あなたのアカウント名/Prog0/Ex02
                 ・
                 ・
                 ・
○ ***/あなたのアカウント名/Prog0/Ex13
○ ***/あなたのアカウント名/Prog0/Ex14
---------------------------

【プログラミング入門 メニュー】
0. メニュー終了 (exit menu)
1. 課題提出 (submit)
2. 提出済みファイル確認 (submitcheck)
3. 作成ファイル確認 (filecheck)
4. ディレクトリ確認 (dircheck)
どれを実行しますか?(数字を入力して下さい)
0
終了します
%

上記の実行例を試すとわかると思いますが、解答ファイルを提出する場合はメニューで「1. 課題提出」を選択します。なお、menuコマンドは解答ファイルがその演習回のディレクトリに存在することを前提としています。そのため、正しい場所にファイルが作られるように、毎回演習を始める際にはその回のディレクトリに移動してから作業を始めると良いでしょう。つまり、第1回は「~/Prog0/Ex01」に、第2回は「~/Prog0/Ex02」に移動してからEmacsを立ち上げると良いということです。

Macでmenuコマンドのパスワード入力を回避する方法

menuコマンドのパスワード入力を回避したい場合は、以下のコマンドを一回だけ実行してください。

% ~prog0/bin/sshkey_set

menuコマンドの内部ではSSHを使用しているのですが、sshkey_setコマンドを実行するとその認証方式がパスワード認証から公開鍵認証に変わり、パスワード入力を省略できるようになります。なお、公開鍵認証を解除したい場合は ~/.ssh/authorized_keys を削除してください。

A問題

A-1 用語説明

ファイル名: ex01a1.txt

以下のキーワードとUNIXコマンドについてそれぞれ簡単に説明しなさい。それぞれ1行程度でよい。

  • CPU
  • メモリ
  • 基本ソフトウェア
  • 機械語
  • 高級言語
  • コンパイラ
  • ls
  • cd
  • cp

~/Prog0/Ex01に移動してからEmacsを使って上記の「ファイル名:」の右側に示しているファイル名で解答ファイルを作成し、解答を記入した上でmenuコマンドを使って提出してください。提出は〆切前であれば何度でもやり直しができるので、解答が全て終わっていなくても、きりの良いところでこまめに提出することをお勧めします。再提出すると前に提出したファイルは新しい内容で上書きされます。

A-2 Hello, World!

ファイル名: ex01a2.c

ハンドアウトの記述を参考にして、ターミナル上に「Hello, World!」と出力するプログラムを作成しなさい。プログラムが完成したらコンパイルと実行を行い、正しく動作するか確認すること。


[実行例]

% ./a.out
Hello, World!
%

B問題

B-1 学籍番号と名前の表示

ファイル名: ex01b1.c

自分の学籍番号と名前を表示するプログラムを作成しなさい。以下の実行例のように、学籍番号を表示した後、改行してから名前をローマ字で表示すること。ただし、使用するprintf文は1つにすること。


[実行例]

% ./a.out
s1390333
AIZU Ichiro
%

B-2 n * nの計算

ファイル名: ex01b2.c

ハンドアウトのLec01-23ページのプログラムを参考にして、n * n (ただし、nは 1から9まで)を計算・表示するプログラムを作成しなさい。 等号 = の右辺に計算結果の数を直接書くのではなく、式を計算した結果が出力されるように書くこと。

[実行例]

% ./a.out
1*1=1
2*2=4
3*3=9
4*4=16
   :
   : 
以下略
%

[補足] このプログラムを完成させるには、同じような文を9回書く必要があります。 「ループ(繰り返し)」処理ができる人は、ループを使用しても構いません。

B-3 様々なプログラミング言語

ファイル名: ex01b3.txt

コンピュータの世界で使われるプログラミング言語には、講義でも紹介したようにさまざまな種類があります。 図書館やインターネットなどで調べて、講義で紹介しなかったプログラミング言語を3つ以上挙げなさい。 調べたプログラミング言語について、名前と特徴を簡単に記述すること。

Extra問題

E-1 間違い探し

ファイル名: ex01e1.c

以下のプログラムの間違いを見つけ、実行結果と同じ出力になるように修正しなさい。 修正したプログラムをex01e1.cとして保存してからコンパイル、実行を行い、 以下の実行結果と同じ出力が得られることを確認しなさい。


[プログラム]

#include <student.h>

int main<>
{
    printf("The University of AIZU\n")
    PRINTF("to Advance Knowledge for Humanity\n");

    return 0

[実行結果]

% ./a.out
The University of AIZU
to Advance Knowledge for Humanity
% 

修正は必要最小限に留めること。

課題提出上の注意事項

解答ファイルはmenuコマンドを使って提出してください。以下のようにmenuコマンドを実行し、表示されるメッセージに沿って操作すること。

% ~prog0/bin/menu

menuコマンドは、解答ファイルが ~/Prog0/Ex## のディレクトリに指定されたファイル名で置かれているものとして処理します。正常に提出された場合は ○ が、何らかのエラーが生じた場合は × が表示されます。

解答の提出期間は以下のとおりです。

問題提出受付開始提出〆切
A問題 演習日の6日前の午後9時演習終了時刻
B, Extra問題 演習日の6日前の午後9時演習日の6日後の午後9時

提出は〆切前であれば何度でもやり直すことができます。再提出すると、前に提出したファイルは新しい内容で上書きされます。

Personal tools