カテゴリー
C

独習C#第3版 P276 Setクラスを作成する

C#のこーどならシンタックスハイライターが効きますか?

/* 
   例7-1 
 
   char型データ用のSetクラス
*/ 
using System;  
  
class Set {     
  char[] members; // この配列がセットの値を保持する

  // 実質的に読み取り専用の、自動実装する Length プロパティ 
  public int Length { get; private set; }

  // ヌルのセット(配列の実体がないセット)を作る
  public Set() {  
    Length = 0; 
  }

  // 指定されたサイズの領域を持つ空のセットを作る
  public Set(int size) {     
    members = new char[size]; // セットのためにメモリを確保
    Length = 0; // 実質的な要素はない
  }     
   
  // セットから別のセットを作る
  public Set(Set s) {     
    members = new char[s.Length]; // セットのためにメモリ確保    
    for(int i=0; i < s.Length; i++) members[i] = s[i];
    Length = s.Length; // 実質的な要素の数 
  }     
 
  // 読み取り専用のインデクサ
  public char this[int idx]{  
    get {  
      if(idx >= 0 & idx < Length) return members[idx];
      else return (char)0; 
    }  
  }  
 
  /* 引数で指定されたデータがセットの中に
     存在するかチェックする
     あればそのインデックスを返し、なければ-1を返す */ 
  int find(char ch) {  
    int i; 
     
    for(i=0; i < Length; i++)
      if(members[i] == ch) return i; 
 
    return -1; 
  }

  // ユニークな要素をセットに追加する
  public static Set operator +(Set ob, char ch)
  {

    // もし、セットの中にchと同じものが既に存在していた場合は、
    // 元のセットのコピーを返す
    if (ob.find(ch) != -1)
    {

      // 元のセットのコピーを返す
      return new Set(ob);

    } else { // 新しい要素を含む新しいセットを返す

      // 元のセットよりも、要素1つ分だけ大きいセットを新規作成する
      Set newset = new Set(ob.Length + 1);

      // 新しいセットに要素をコピーする 
      for (int i = 0; i < ob.Length; i++)
        newset.members[i] = ob.members[i];

      // Length プロパティを設定する
      newset.Length = ob.Length + 1;

      // 新しいセットに新しい要素を追加する
      newset.members[newset.Length - 1] = ch;

      return newset; // 新しいセットを返す
    }
  } 
 
  // セットから要素を取り除く
  public static Set operator -(Set ob, char ch) {   
    Set newset = new Set();
    int i = ob.find(ch); // もし見つからなければ、変数iは-1になる
 
    // 残りの要素をコピーする
    for(int j=0; j < ob.Length; j++)
      if(j != i) newset = newset + ob.members[j]; 
 
    return newset; 
  }     
 
  // 和集合
  public static Set operator +(Set ob1, Set ob2) {
    Set newset = new Set(ob1); // 1番目のセットをコピーする
 
    // 2番目のセットの要素を追加する
    for(int i=0; i < ob2.Length; i++)
        newset = newset + ob2[i]; 
 
    return newset; // 更新されたセットを返す
  }  
 
  // 差集合
  public static Set operator -(Set ob1, Set ob2) {
    Set newset = new Set(ob1); // 1番目のセットをコピーする 
 
    // 2番目のセットの要素を1番目のセットから引く 
    for(int i=0; i < ob2.Length; i++)
        newset = newset - ob2[i]; 
 
    return newset; // 更新されたセットを返す
  }  
}     
  
// セットクラスの使用例
class SetDemo {     
  static void Main() {     
    // ヌルのセットを作成する
    Set s1 = new Set();    
    Set s2 = new Set(); 
    Set s3 = new Set(); 
  
    s1 = s1 + 'A'; 
    s1 = s1 + 'B'; 
    s1 = s1 + 'C'; 
 
    Console.Write("s1 after adding A B C: ");  
    for(int i=0; i<s1.Length; i++)
      Console.Write(s1[i] + " ");    
    Console.WriteLine(); 
 
    s1 = s1 - 'B'; 
    Console.Write("s1 after s1 = s1 - 'B': ");  
    for(int i=0; i<s1.Length; i++)
      Console.Write(s1[i] + " ");    
    Console.WriteLine(); 
 
    s1 = s1 - 'A'; 
    Console.Write("s1 after s1 = s1 - 'A': ");  
    for(int i=0; i<s1.Length; i++)
      Console.Write(s1[i] + " ");    
    Console.WriteLine(); 
 
    s1 = s1 - 'C'; 
    Console.Write("s1 after s1 = s1 - 'C': ");  
    for(int i=0; i<s1.Length; i++)   
      Console.Write(s1[i] + " ");    
    Console.WriteLine("\n"); 
 
    s1 = s1 + 'A'; 
    s1 = s1 + 'B'; 
    s1 = s1 + 'C'; 
    Console.Write("s1 after adding A B C: ");  
    for(int i=0; i<s1.Length; i++)   
      Console.Write(s1[i] + " ");    
    Console.WriteLine(); 
 
    s2 = s2 + 'A'; 
    s2 = s2 + 'X'; 
    s2 = s2 + 'W'; 
 
    Console.Write("s2 after adding A X W: ");  
    for(int i=0; i<s2.Length; i++)
      Console.Write(s2[i] + " ");    
    Console.WriteLine(); 
 
    s3 = s1 + s2; 
    Console.Write("s3 after s3 = s1 + s2: ");  
    for(int i=0; i<s3.Length; i++)
      Console.Write(s3[i] + " ");    
    Console.WriteLine(); 
 
    s3 = s3 - s1; 
    Console.Write("s3 after s3 - s1: ");  
    for(int i=0; i<s3.Length; i++)
      Console.Write(s3[i] + " ");    
    Console.WriteLine("\n"); 
 
    s2 = s2 - s2;  // s2のクリア
    s2 = s2 + 'C'; // 逆の順番にABCを加える
    s2 = s2 + 'B'; 
    s2 = s2 + 'A'; 
 
    Console.Write("s1 is now: ");  
    for(int i=0; i<s1.Length; i++)
      Console.Write(s1[i] + " ");    
    Console.WriteLine(); 
 
    Console.Write("s2 is now: ");  
    for(int i=0; i<s2.Length; i++)
      Console.Write(s2[i] + " ");    
    Console.WriteLine(); 
 
    Console.Write("s3 is now: ");  
    for(int i=0; i<s3.Length; i++)
      Console.Write(s3[i] + " ");    
    Console.WriteLine(); 
   }     
}
カテゴリー
C

C#コードを張り付ける、その2

using System;
namespace Chapter01All
{
    class IntNijigenAry
    {
        static void Main()
        {
            int r = 5; int c = 10;
            int[,] ary = new int[5, 10];
            for(int i = 0; i < r; i++)
            {
                for(int j = 0; j < c; j++)
                {
                    ary[i, j] = i * 10 + j;
                }
            }
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < c; j++)
                {
                    Console.Write(ary[i, j] + " ");
                }
                Console.WriteLine();
            }
        }
    }
}

中々思ったようには行かないもののようです。パソコン全てそう、と言ってしまえばそれまでですが。((+_+))

カテゴリー
C

C#コードを張り付ける

using System;
namespace Chapter01All
{   class NigenAry
    {
        int[,] ary;
        public NigenAry(int r, int c)
        {
            ary = new int[r, c];
        }
        public int this[int indexr, int indexc]
        {
            get
            {
                return ary[indexr, indexc];
            }
            set
            {
                ary[indexr, indexc] = value;
            }
        }
    }
    class NigenAryIndex
    {
        static void Main()
        {
            int r = 5; int c = 10;
            NigenAry obj = new NigenAry(r, c);
            for(int i=0; i<r * c; i++)
            {
                obj[i / c, i % c] = i;
            }
            for (int i = 0; i < r * c; i++)
            {
                if (i % c == 0)
                    Console.WriteLine();
                Console.Write(obj[i / c, i % c] + " ");
            }
            Console.WriteLine();
        }
    }
}
inserted by FC2 system