Basic Pascal Tutorial/Chapter 5/1-dimensional arrays/ja

From Lazarus wiki
Revision as of 11:30, 19 September 2015 by Derakun (talk | contribs)
Jump to navigationJump to search

български (bg) English (en) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

5C - 1次元配列 (著者: Tao Yue, 状態: 原文のまま変更なし)

5000個の整数を読み込み、何か処理をしたいと考えてみよう。それらの整数をどう保存しておけばよいだろうか?

次のように5000個の変数を使うかもしれない。

aa, ab, ac, ad, ... aaa, aab, ... aba, ...

しかし、これは煩雑になる(これらの変数を宣言した後で、変数それぞれに値を読み込まなくてはならない)。

配列は同じタイプの保存スペースを含んでいる。それぞれの保存スペースは添え字付きの配列名で参照できる。定義は次のようになる。

type
  typename = array [列挙型] of データ型;

データ型は何でもよく、別な配列でもよい。どんな列挙型も問題ない。カッコ内に列挙型、あるいは事前に定義した列挙型を指定できる。例えば、次のようになる。

type
  enum_type = 1..50;
  arraytype = array [enum_type] of integer;

上の例は以下の例と同じである。

type
  arraytype = array [1..50] of integer;

Aside: This is how strings are actually managed internally — as arrays. Back before modern Pascal compilers added native support for strings, programmer had to handle it themselves, by declaring:

type
  String = packed array [0..255] of char;

and using some kind of terminating character to signify the end of the string. Most of the time it's the null-character (ordinal number 0, or ord(0)). The packed specifier means that the array will be squeezed to take up the smallest amount of memory.

Arrays of characters representing strings are often referred to as buffers, and errors in handling them in the C or C++ programming languages may lead to buffer overruns. A buffer overrun occurs when you try to put, say, a 200-character string into a 150-length array. If memory beyond the buffer is overwritten, and if that memory originally contained executable code, then the attacker has just managed to inject arbitrary code into your system. This is what caused the famous Slammer worm that ran rampant on the Internet for several days. Try it in Pascal and see what happens.

Arrays are useful if you want to store large quantities of data for later use in the program. They work especially well with for loops, because the index can be used as the subscript. To read in 50 numbers, assuming the following definitions:

type
  arraytype = array[1..50] of integer;
  
var
  myarray : arraytype;

use:

for count := 1 to 50 do
  read (myarray[count]);

Brackets [ ] enclose the subscript when referring to arrays.

myarray[5] := 6;
previous contents next