このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。
ワードプロセッサ(ワープロ)とは、文書ドキュメントを清書し、出力、印刷 を行うソフトウェアです。 但し、通常ワードプロセッサと呼ばれるものは WYSIWYG(What you see is What you get ウィジウィグ)、つまりグラフィックインターフェイスで、実際の印刷イ メージに近いものが画面に出て、直接そのイメージを編集可能なものを言うこ とが多いです。
2006 年現在、独占企業の地位を利用してほぼ標準添付品として配ってしまっ たため、マイクロソフトワードがワープロの市場を破壊してしまいました。 しかし、日本語を扱うにはジャストシステムの一太郎の方が性能が良いですし、 その他、出版に耐え得るレイアウト機能を持つ Adobe のページメーカー(もと もとは Aldus 社)や、Quark 社の XPress もあります。
ワープロには豊富な機能と、WYSIWYG による直観的な編集能力により万人が利 用できるコンピュータアプリケーションという地位を確立しました。 しかし、ここまで清書法を学んできたように、本来文書の清書は文書の持つ抽 象構造に基づくものでした。つまり、抽象構造ををコンピュータに与えると、 その抽象構造を元にスタイルやレイアウトを計算するという仕組みになってい ます。 この仕組みを理解している人と、理解していない人では著しく文書ファイルの 作り方が異なり、また編集効率が違います。 今回はワープロの清書機能について学びます。
ワープロは設定した印刷領域に文字を入れるようになっています。 入れた文字は右側に配置され、右端までいくと折り返され、次の行の左端から 文字が入れられます。 但し、改行を入れると、次の文字は強制的に次の行から配置されます。 単純なワープロの場合、このようなルールしかないため、特定の文字の塊を特 定の場所に配置するのは基本的に不可能です。 ドローソフトではテキストボックスという、四角形の領域に文字を入れたもの を作り、そのテキストボックスを任意の位置に配置します。 しかしワープロでは次のような方法で配置する位置を調整します。
また、いままで紹介してきた清書系とは違い、ワープロでは WYSIWYG による 編集のため、入力した文字は基本的には無視されません。 つまり、連続した空白を無視しません。 そのため、これらの機能を使わなくても改行と空白文字を連続させることで任 意の位置に文字を配置させることは可能です。 しかも、上記の機能を使用した場合と、改行と空白だけでレイアウトした文書 では印刷した時の差は付きません。 しかし、空白と改行でレイアウトされた文書は編集時に大きな手間が発生しま す。 すべてのレイアウト位置が手動で設定されているため、一文字付け加えただけ で、すべてがずれる可能性があります。また、例えば印刷の幅を 1cm 狭めた いなどレイアウトの変更は不可能に近いです。 そのため、空白や改行でのレイアウトは一切勧めません。 改行は段落を変える時だけ使用し、空白は空白を入れる時だけに使用します。 それ以外の状況で使用したくなった時は、本当に改行や空白が必要なのか、そ れとも位置を調整したいのかなどを考える必要があります。
ワープロでは印刷領域全面に文字が配置されるため、印刷領域を後で変更する と大幅にレイアウトが変わります。 そのため、始めに印刷領域を確認しておく必要があります。 ところが、この設定が明示されていないソフトウェアが多く、通常「プリンタ の設定」のような項目になっています。 通常のソフトウェアは編集してからプリンタの設定をしてもそれほど大きなダ メージは受けませんが、ワープロではプリンタの機種を変えるだけで印刷イメー ジが大きく変わることがあります。 始めにプリンタを設定しておきましょう。
ワープロでは改行を無視しません。 改行は段落の区切りのみで使用します。 従って、メモ帳や電子メールなどの見易いように 70 文字前後で改行記号を入 れて整形した文書を読み込む時は特に注意が必要です。 この、電子メールなどで使われている整形するための改行はワープロでは厳 禁ですので、一切使わないようにします。 テキストファイルを開いたり、他のアプリケーションから文書を読み込む時は、 まず、不要な改行を取り除いてください。
大きな章の始まりなど、途中から内容の意味が全く変わってしまう文書ではし ばしばページを変えます。 このとき、改行を複数繰り返して次のページまで行を送ると、あとで字数の変 化により行数が変わった時、レイアウトが大幅に崩れてしまいます。 ページを変えるには改ページを指定します。 この他、複数行の空行によるレイアウトの調整も途中で改ページしてしまうと 意図とは違う状態になるので避けましょう。 複数の改行は避けて、その代わり、一つの改行に対して本来の意図の行間の調 整を指定する必要があります。
見出しは文章の抽象構造で、文章の内容が大きく変わるたびにその内容を表す 一言が書かれます。 通常複数使われますが、同一のスタイルで表示します(新聞は別)。 このように抽象構造ごとにスタイルを分けるため、ワープロではスタイルごと に書式を指定することができます。 但し、ワープロでは「見出し」自体を特別な構造とは見なさず、本文などと同 じ文章の一部として考えてあるため、見出しも本文も同じようにスタイルを与 えます。 例えば OpenOffice.org で見出しに枠の囲みを付けるには次のようにします。
特定の単語に対して、文字を大きくしたいのか、赤にしたいのか、意味を強調 したいのかということをまず考える必要があります。 色見本や、フォントの見本を示す以外は、通常は文字のスタイルを変える理由 は強調したいはずです。 そのため、特に大きさや色は絶対的な物ではなく、状況に応じて別の方法も受 け入れられることが多いはずです。 このような場合、見出し同様「強調」というスタイルがあれば、それを適用し、 色や大きさはそのスタイルを変更すれば良いはずです。 しかし、 OpenOffice.org ではスタイルは段落ごとにしか適応できません。 したがって、 その代わり、通常のワープロにはそのような抽象的な「強調」の機能はなく、 メニューバーにフォントの字体や色を変えるボタンがあることが多いので、そ れが使われることがほとんどです。
例えば、レポートを提出したところ、赤くした部分を白黒にしろと指定された 場合、赤くした部分を太字に変換したい場合もあります。 HTML ではスタイルシートの一箇所を変更すれば全て変わります。 また、 LaTeX では抽象的な意味をマクロによって比較的簡単に作ることがで きますし、特にテキストファイルをマークアップするような処理系ではテキス トエディタの置換機能により一括で指定を変更できます。 しかし、ワープロの場合、赤と指定した部分だけを選択するようなことは通常 できませんので、このような場合は全て手作業で一つ一つ変更する必要があり ます。
特定の部分を中央に持って来る編集をセンタリングと呼びます。 この他、右側に寄せたり、左に寄せたり等、表現を変えることについて、ここ で話題にします。 英文の左右の端に空白が来ないように英単語間の空白の量を調整するのを 均等割り付けと言います。 センタリングは見出しなどの強調に使う他、宛名や日付などの表題の特殊な形 式、また表中の文字配置などいくつか利用される場面があります。 ただ、ここで挙げたように無意味なセンタリングなどはなく、基本的には強調 や見出しなどのスタイルの表現となってますので、見出しなどのスタイルで指 定すべきことです。 但し、ワープロでは、選択範囲をセンタリングする機能が付いていて、個別に 自由にセンタリングができてしまいます。
箇条書は選択範囲に対して箇条書を指定することで実現されます。 文頭の点や数字などは自動的に振られます。 段落ごとに番号が付くので、複数の段落からなる文章を箇条書の中に入れる時 は、始めに全段落に全て番号を付け、後で段落の前に付けられた番号を Backspace キーで消していきます。 なお、定義リストは作れませんので、要注意です。
日本語の文字は通常正方形の領域に書かれます。したがって、文字の大きさの 基本はこの文字領域の正方形になります。 この正方形内に書かれた文字の形を全角と言います。 この半分の領域に書かれた文字を半角と言い、通常は縦長の長方 形の形になります。 また、倍角とは正方形二つの領域をとるもので、縦倍角、横倍角 などと言います。 フォントの縦横比を正方形以外にするには領域指定した後、右クリックで文字 やフォントなどの指定ウィンドウを呼び出し、幅を変える必要があります。 ただ、 OpenOffice.org では文字ウィンドウ中の「位置→回転と倍率→幅の倍 率」と非常に連想しにくい位置に項目が配置されています。 これを 50% にすると半角になり、 200% にすると横倍角になります。
なお、 20 年位前は安いコンピュータは漢字が出ずアルファベット、数字、カ タカナ(ANK文字)しか出ない時期がありました。 これは、文字を 8bit で表す限界でした。 その互換性を持たせる形でマイクロソフトが漢字コード(MS 漢字コード現 Shift_JIS)を定めたため、現在でもアルファベットと同じ形式で縦長のカタカ ナを画面に出すことができます。 但し、この文字は濁点が離れてしまうなど美しくないので、ワープロで使用す べきではありません。
作成者、章のタイトルなどをページの端に印刷するにはフッタ、ヘッダを指定 します。 これは専用のメニューがありますので、そこで、指定します。 入れる内容に関しては固定の文字列であればそのまま指定します。 一方、「参照」を指定すると、間接的に指定できる内容の一覧が表示されます ので、そこから選ぶこともできます。
文書中に図を入れる時、文書の文字の位置を調整を考える必要があります。 LaTeX のfigure 環境では基本的には図の左右には文字が来ないようになって ました。 また、 HTML ではスタイルに float:left や float:right を指定すると図が 左寄せ、右寄せになり、文字が回り込む。 ワープロではこの辺の機能はさらに豊富で、 OpenOffice.org では、左右に文 字が来ないようにも、右や左への回り込みの他、単純に図を避けて両側に文字 を配置したり、文書を隠したり、図を背景したりできます。 あらかじめ改行や空白で図を入れる場所を作るとかえってレイアウトが崩れま すので、注意が必要です。
雑誌のように一つのページに左から右まで行が続かず、半分のところで折り返 して、幅を二つに分けて使うことがあります。 このような使い方を段組みとよび、二つの場合二段組と言います。 数式や箇条書など短い内容で改行するものが多い場合、多段組にした方がペー ジの効率が良くなります。
理科系の文書では特に良く使われる、用語説明や文書の補足のため、ページの 下の方に小さな文字で説明が書かれることがあります。 これを脚注と言います。 ワープロでは指定すれば自動的に番号を付けて管理されます。
ドローソフトの表は幅を自由に設定して図のように扱えますが、ワープロの表は 基本的には文書幅いっぱいに広がります。 但し、ドローソフトの表とは違い、ページをまたがる表を作ることができます。 このような場合、ページが変わるごとに表を作ってしまうと項目の追加や削除 のたびにすべての項目をずらしたりする必要が生じます。 意味的に同一の表は一つの大きな表として扱い、ワープロにページの管理を任 せるべきです。
ワープロは WYSIWYG のインターフェイスにより直観的に文書を作ることがで きます。 しかし、迅速な編集作業を考えると、文書の抽象的な構造を考えながら、その 構造を意図した編集項目を常に選んで使用する必要があります。 見た目に基づいて空白や改行を用いて整形を行うと、コンピュータの自動的な 整形機能が働かなくなり、単なる文字の修正が文書全体のレイアウトの調整を 伴うものになる可能性があります。
Meadow は様々なプログラミング言語のモードを持っていて、支援を行います。 通常ファイル名の拡張子から自動的にその言語の編集モードに入ります。 .c, .tex, .html, .java などはすべて自動的にそのモードになります。 各モードで重要な支援を紹介します。
支援の主なものは 予約語やリテラル(定数)やコメントの色分け、カッコの対応、インデントなど があります。
C 言語でもっとも基本的な繰り返し文は while 文です。 while 文は次のような構文になっていて、 if 文とよく似ています。
while(条件式){ 繰り返し文 }
条件式が正しい限り繰返し文を実行し続けます。 一方、始めに条件式が成立しなければ繰返し文は一回も実行されません。 条件式が成立すると繰返し文が実行されますが、もし繰返しているうちに条件 式が変わらないと永遠に繰り返しが起きてしまいます。 ここが if 文と違うところです。 if 文では条件文の中身を変化させることを意識する必要はありません。 しかし、 while 文では繰り返すたびに条件式を調べます。 したがって、繰り返している間は常に条件が成立し、そして、繰り返しを終え る時に条件が不成立になるように条件を繰返しの中で変化させなければなりま せん。
そこで、繰り返しの基本的なテクニックとして、次のような変数を導入します。
このような変数のことをループ変数と言います。
例えば、 5 回だけある処理を繰り返すことを考えます。 その時、ループ変数に繰り返しの回数を数えさせます。 つまりループ変数は 1 回目の処理では 1, 2 回目の処理では 2 と、繰り返されるたびにループ変数が 1 ずつ増え るようにします。 これには次の式を使います。
このようにするとこの式を実行した回数だけループ変数が増えます。 この式を利用してある処理を 5 回だけ実行するプログラムは次のように書け ます。
ループ変数 = 1; while(ループ変数 <= 5){ 処理; ループ変数 = ループ変数 +1; }
このプログラムにおいて、まずループ変数に 1 が入れられ、 while 文が実行 されます。 そして、while 文の中で処理を行った後ループ変数を 1 ずつ増やすようにす ることで処理を行う回数をループ変数で数えることができるようになります。 while の条件でループ変数の値が 5 以下かどうかをチェックすれば、ちょう ど 5 回だけ処理を行うことができます。 これを実行すると、次のようになります。
これにより処理が 5 回行われたことがわかると思います。
「a=a+1」という記法は、「次の a は、今の a に 1 を足したもの」という意味 になります。つまりこれは漸化式 と同じ役割になります。 始めに「a=0」としておいて、「a=a+1」を繰り返すと、「a=a+1」を繰り返した回数 だけ a が増えていきます。繰り返し回数を i とすると、 a の値は i になります。
次の例では abc が 5 回表示されます。
#include <stdio.h>
main(){
int a;
a=1;
while(a<=5){
printf("abc");
a=a+1;
}
}
一方、ループ変数を使用して数列の一般項を出力すると、数列を表示するこ とができます。
次の例では 1 3 5 7 9 が表示されます。
#include <stdio.h>
main(){
int a;
a=1;
while(a<=5){
printf("%d ",2*a-1);
a=a+1;
}
}
C 言語では全ての文や式に値を持ちます。 例えば代入文は代入した数を値に持ちます。 つまり、 j=0 という代入文の値は 0 です。 従って次のような記法が可能です(代入文は右から処理されます)。
i=j=0
この場合、「j=0」 により j に 0 が代入されますが、「j=0」の式の値は 0 なので、 i にはこの式の値 0 が代入されます。
次の例では a=2, b=1, c=0 が表示されます。
#include <stdio.h>
main(){
int a,b,c;
a=(b=(c=0)+1)+1;
printf("a=%d, b=%d, c=%d\n",a,b,c);
}
条件文の式の値は、真であれば 1、偽であれば 0 です。従って、0==0 は 1、 1==0 は 0 の値を持ちます。一方、条件文では、 0 なら偽、0 以外の値なら 真だと判定します。したがって、次の文は同じ意味を持ちます。
if(x!=0){} if(x){}
while(1){ } は永遠に続く繰返しになります。
プログラミングでは i=i+1 など、もともと変数に入っている値を 「増やす」など変化させる操作が 多いです。そのため、 C 言語ではこれを i+=1 と書くこともでき るようになってます。 これを代入演算子と言います。 たとえば、 2 減らすのは i-=2、 5 倍するには i*=5 と書きます。 また、特に 1 を足したり引いたりすることが多いので、特別に 1 増やすのを ++i、 1 減らすのを --i と書くことができます。 これらのそれぞれの式の値は、計算結果の変数の値になります。 一方で、i++, i-- と書くこともできますが、この場 合、変数の値を1 増やしたり減らしたりする際に、式の値は増減させる前の変 数の値になります。
i++ は配列変数の処理で使います。詳しくは次回以降に説明します。
上記の while の例のプログラムは次のようにも書くことができます。
#include <stdio.h>
main(){
int a;
a=1;
while(a<=5){
printf("abc");
a++;
}
}
他の言語では for 文は特別な動作をすることがありますが、 C 言語では for 文は while 文とほぼ同じです。 文法は次のようになります。
for(一番はじめにだけ実行する文 ; 条件文 ; 繰り返しの最後に実行する文 ) { 繰り返しの内容}
つまり次の二つのプログラムは同じ意味になります。
実際には次のように使います。
for(i=0;i<10;++i){ printf("%d\n",i); }
これは次のプログラムと同じ意味です。
i=0; while(i<10){ printf("%d\n",i); ++i; }
for 文で書くと、ループ変数の処理を一か所にまとめることができるので、繰 り返し回数が一目でわかるなどの利点があります。 for 文を使用する際、繰返しの処理中でループ変数の値を変えるようなプログ ラムは読みづらいです。 また、 for の中にループ変数以外の文を多く入れてしまうと読みづらくなりま す。
教育理念 情報通信工学科は、世界のIT(情報技術)関連技術の最先端を担うことの できる技術者を育成することを目標とし、次のような特徴を有しています。 情報技術・通信技術・メディア処理技術の統合的な教育 考える能力と独創性を涵養する教育 産業界との交流を盛んにし、先端技術を反映した教育 充実した最先端の実験環境による実学教育
3. 東京電機大学創立以来の『実学の精神』を尊重
学科構成 情報通信工学科には、以下の学科が設置されております。 工学部第一部 情報通信工学科(昼間部) 工学部第二部 情報通信工学科(夜間部)
次のプログラムを走らせなさい。 また、このプログラムを改造して 「●」を 10 個表示するプログラムを作り なさい。
#include <stdio.h> main(){ int a; a=0; while(a<5){ printf("○"); a=a+1; } printf("\n"); }
下のプログラムを走らせなさい。 また、このプログラムを改造し、ループ変 数の値が以下のようになるようにしなさい。
#include <stdio.h> main(){ int b; b=2; while(b<=10){ printf("ループ変数 = %d\n",b); b=b+2; } }
下のプログラムを走らせなさい。 また、このプログラムを改造して、次を表示するようにしなさい(余裕のある 人は最後のカンマ「,」が出ないようにしなさい)。
#include <stdio.h> main(){ int i,b; i=0; while(i<10){ b=2*(i+1); printf("%d, ",b); i=i+1; } printf("\n"); }
以下の三角関数の表を出力するプログラムを完成させなさい。
#include <stdio.h> #include <math.h> main(){ int i; float x,y; i=0; while(i<20){ x = /* x の値は 0 から 2πの間 をとるようにする。 */ y = /* sin x の値を入れる */ printf("x=%f, sin(x)=%f\n",x,y); /* i の値を更新する */ } }
フィボナッチ数列を(20個)表示するプログラムを書きなさい。 但し、フィボナッチ数列とは次のような数列です。
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
次の操作で変数 i,j の値はどうなるか?
次のプログラムを実行し、実際に式の値を調べなさい。
#include <stdio.h>
main(){
int i,j;
printf("i=0 で i に 1 を増やす\n");
i=0;j=(i=i+1);printf("i の値 %d, 式の値 %d\n",i,j);
i=0;j=(i+=1);printf("i の値 %d, 式の値 %d\n",i,j);
i=0;j=(++i);printf("i の値 %d, 式の値 %d\n",i,j);
i=0;j=(i++);printf("i の値 %d, 式の値 %d\n",i,j);
}
次のプログラムで何が出力されるか予想しなさい。 そして、実際に実行して、出力が一致するか確認しなさい。 また、画面に 10, 8, 6, 4, 2 と出力されるように改造しなさい。
#include <stdio.h> main(){ int i; i=5; while(i--){ printf("%d\n",i); } }
次のプログラムが何を出力するのか予想しなさい。 そして、実際に実行して、出力が一致するか確認しなさい。 また、右のパターンを出力するよう、大幅に改造しなさい。
● ●● ●●● ●●●● ●●●●● ●●●●●●
#include <stdio.h> main(){ int i, j; i=5; while(j=i--){ while(j--){ printf("○"); } printf("\n"); } }
次のプログラムの for 文を while 文に直しなさい。 また、n に 6, 14, 23 を入れて出力がどうなるか調べなさい。 なお、型が int 同士の割算の商は切捨てになります。 一方、a%b は a 割る b の余りを意味します。
#include <stdio.h> main(){ int n; n=11; for(;n;n/=2){ printf("%d",n%2); } printf("\n"); }
数を表す時、下の桁から表すのを little endian と言い、上の桁 から表すのを big endian と言います。 人間は通常 big endian で数を表現しますが、コンピュータでは処理に便利な 場合もあるので、 little endian が使われることがあります。 Intel 社の Pentium Processor は little endian です。
次のプログラムの while 文を for 文に直しなさい。 また、 n の値を 32 や 60 に変えて出力がどうなるか調べなさい。 余裕がある人は約数の数だけ表示するように改造しなさい。
#include <stdio.h> main(){ int n,i; n=18; printf("%dの約数は",n); i=1; while(i<=n){ if(!(n%i)){ printf(" %d",i); } i++; } printf("\n"); }