Visual BasicPART4 入力した文字が携帯番号形式になっているかどうか調べる2008-07-19 Sat 10:41
先程の日付データと同様、こちらもMaskedTextBoxです。
'入力した文字が携帯番号形式になっているかどうか調べる Public Shared Function cellNumber_Input_Type_Check(ByVal str As String) As Boolean If str.Equals(" - -") Then cellNumber = "" cellNumber_Input_Type_Check = False Exit Function ElseIf str Like "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" Then cellNumber = Mid(str, 1, 3) + Mid(str, 5, 4) + Mid(str, 10, 4) cellNumber_Input_Type_Check = False Exit Function End If cellNumber_Input_Type_Check = True End Function |
Visual BasicPART3 入力した文字が日付形式になっているか調べて型変換をする2008-07-19 Sat 10:37
少し補足すると、入力時の日付データがMaskedTextBoxになっています。
また、フォームに検索開始日と検索終了日が設けられています。 '入力した文字が日付形式になっているかどうか調べる Public Shared Function Start_Date_Input_Type_Check(ByVal str As String) As Date Dim dt As Date If Not str.Equals(" / /") Then dt = CType(str, Date) Else dt = #12:00:00 AM# End If Return dt End Function ----------------------------------------------------------------------------- '入力した文字が日付形式になっているかどうか調べる Public Shared Function End_Date_Input_Type_Check(ByVal str As String) As Date Dim dt As Date If Not str.Equals(" / /") Then dt = CType(str, Date) Else dt = #12/31/9999# End If Return dt End Function |
Visual BasicPART2 文字に1バイト文字が含まれているか調べる2008-07-13 Sun 17:32
'入力した文字に1バイト文字が含まれているかどうか1文字ずつ調べる
Public Shared Function Byte_Size_Check(ByVal str As String) As Boolean If str.Length <> 0 Then For i As Integer = 1 To str.Length If sjisEnc.GetByteCount(str.Substring(i - 1, 1)) = 1 Then Byte_Size_Check = True Exit Function End If Next End If Byte_Size_Check = False End Function |
Visual BasicPART1 半角英数字以外の文字のチェックをする2008-07-13 Sun 17:27
本日より不定期にはなりますが、私が持っているVB.NETのサンプルを載せていきます。
'入力した文字に半角英数字以外の文字が含まれているかどうか1文字ずつ調べる Public Shared Function Sign_Check(ByVal str As String) As Boolean For i As Integer = 1 To str.Length If Not Mid(str, i, 1) Like "[0-9a-zA-Z]" Then Sign_Check = True Exit Function End If Next Sign_Check = False End Function |
C言語PART146 指定した数のビット目から指定した数のビット個数分1や0や反転して表示2008-06-01 Sun 20:03
#include
int count_bits(unsigned x){ int count = 0; while(x){ if(x & 1U) count++; x >>= 1; } return count; } int int_bits(void){ return count_bits(~0U); } unsigned set_n(unsigned x,int pos,int n){ int a,b,i; unsigned c; c = x; a = pos; for(i = pos;n > 0 && i > 0;n--,i--){ b = 2; pos = i; if (!(x >> --a) & 1U){ switch(i){ case 1: c += 1; break; case 2: c += 2; break; default: while(pos-- > 2){ b *= 2; } c += b; } } } return c; } unsigned reset_n(unsigned x,int pos,int n){ int a,b,i; unsigned c; c = x; a = pos; for(i = pos;n > 0 && i > 0;n--,i--){ b = 2; pos = i; if ((x >> --a) & 1U){ switch(i){ case 1: c -= 1; break; case 2: c -= 2; break; default: while(pos-- > 2){ b *= 2; } c -= b; } } } return c; } unsigned inverse_n(unsigned x,int pos,int n){ int a,b,i; unsigned c; c = x; a = pos; for(i = pos;n > 0 && i > 0;n--,i--){ b = 2; pos = i; if ((x >> --a) & 1U){ switch(i){ case 1: c -= 1; break; case 2: c -= 2; break; default: while(pos-- > 2){ b *= 2; } c -= b; } }else{ switch(i){ case 1: c += 1; break; case 2: c += 2; break; default: while(pos-- > 2){ b *= 2; } c += b; } } } return c; } void print_bits(unsigned x){ int i; for(i = int_bits()-1;i >= 0;i--) putchar(((x >> i) & 1U) ? '1' : '0'); } int main(void){ unsigned a; int b,c; printf("非負の整数を入力してください:"); scanf("%u",&a); printf("何ビット目から指定しますか:"); scanf("%d",&b); printf("何個のビットを指定しますか:"); scanf("%d",&c); printf("整数:"); print_bits(a); printf("\n%dビット目から%d個を1にした値:",b,c); print_bits(set_n(a,b,c)); printf("\n%dビット目から%d個を0にした値:",b,c); print_bits(reset_n(a,b,c)); printf("\n%dビット目から%d個を反転した値:",b,c); print_bits(inverse_n(a,b,c)); putchar('\n'); return 0; } |
C言語PART145 指定した数のビット目を1や0や反転して表示2008-06-01 Sun 20:00
#include
int count_bits(unsigned x){ int count = 0; while(x){ if(x & 1U) count++; x >>= 1; } return count; } int int_bits(void){ return count_bits(~0U); } unsigned set(unsigned x,int pos){ int a,b = 2; unsigned c; c = x; a = pos; if ((x >> --a) & 1U){ return c; }else{ switch(pos){ case 1: return c + 1; case 2: return c + 2; default: while(pos-- > 2) b *= 2; return c + b; } } } unsigned reset(unsigned x,int pos){ int a,b = 2; unsigned c; c = x; a = pos; if ((x >> --a) & 1U){ switch(pos){ case 1: return c - 1; case 2: return c - 2; default: while(pos-- > 2) b *= 2; return c - b; } }else{ return c; } } unsigned inverse(unsigned x,int pos){ int a,b = 2; unsigned c; c = x; a = pos; if ((x >> --a) & 1U){ switch(pos){ case 1: return c - 1; case 2: return c - 2; default: while(pos-- > 2) b *= 2; return c - b; } }else{ switch(pos){ case 1: return c + 1; case 2: return c + 2; default: while(pos-- > 2) b *= 2; return c + b; } } } void print_bits(unsigned x){ int i; for(i = int_bits()-1;i >= 0;i--) putchar(((x >> i) & 1U) ? '1' : '0'); } int main(void){ unsigned a; int b; printf("非負の整数を入力してください:"); scanf("%u",&a); printf("何ビット目を指定しますか:"); scanf("%d",&b); printf("整数:"); print_bits(a); printf("\n%dビット目を1にした値:",b); print_bits(set(a,b)); printf("\n%dビット目を0にした値:",b); print_bits(reset(a,b)); printf("\n%dビット目を反転した値:",b); print_bits(inverse(a,b)); putchar('\n'); return 0; } |
C言語PART144 符号無し整数を左右にnビット回転した値を表示2008-06-01 Sun 19:56
かなり久しぶりになってしまいましたが、勿論止めるつもりはありません。
ただ今後は、毎日書くのはさすがに厳しくなってきたので、不定期になってしまう事だけはご了承頂ければと思います。 #include unsigned rrotate(unsigned a,int b){ unsigned c,d; c = a >> b; d = a << int_bits()-b; return c | d; } unsigned lrotate(unsigned a,int b){ unsigned c,d; c = a << b; d = a >> int_bits()-b; return c | d; } int count_bits(unsigned x){ int count = 0; while(x){ if(x & 1U) count++; x >>= 1; } return count; } int int_bits(void){ return count_bits(~0U); } void print_bits(unsigned x){ int i; for(i = int_bits()-1;i >= 0;i--) putchar(((x >> i) & 1U) ? '1' : '0'); } int main(void){ unsigned a; int b; printf("非負の整数を入力してください:"); scanf("%u",&a); printf("何ビット回転しますか:"); scanf("%d",&b); printf("整数:"); print_bits(a); printf("\n右に%dビット回転した値:",b); print_bits(rrotate(a,b)); printf("\n左に%dビット回転した値:",b); print_bits(lrotate(a,b)); putchar('\n'); return 0; } |
C言語PART143 ビットのシフトと2のべき乗の関係を調べる2008-05-08 Thu 19:59
昨日やってないので今日は2件の予定なんですが、2件目がかなり時間がかかりそうなので、申し訳ないですが今日は1件だけにしておきます。
#include void right_bit_shift(unsigned a,int b){ int i; unsigned c = a; for(i = 0;i < b;i++) c /= 2; if(a >> b == c) printf("a >> bは等しい\n"); else printf("等しくない\n"); } void left_bit_shift(unsigned a,int b){ int j; unsigned d = a; for(j = 0;j < b;j++) d *= 2; if(a << b ==d) printf("a << bは等しい\n"); else printf("等しくない\n"); } int main(void){ unsigned a; int b; puts("符号無し整数値とシフトするビット数を入力してください。"); printf("符号無し整数値:"); scanf("%u",&a); printf("シフトするビット数:"); scanf("%d",&b); right_bit_shift(a,b); left_bit_shift(a,b); return 0; } |
C言語PART142 unsigned型を左右にシフトした値を表示2008-05-06 Tue 09:31
こちらはコードは読みやすくなったものの、頭の切り替えが上手くいかず答えを見る結果に・・・。
見た瞬間「ああ〜そういうことかよ〜」と叫びました(笑) 結構、ビット関係のプログラムって難しいです・・・。 #include int count_bits(unsigned x){ //xのビット列に1が幾つ含まれているか調べる int count = 0; while(x){ if(x & 1U) count++; //xの最下位ビットが1だったらcountを増やす x >>= 1; //xを右に1ビットシフトし、それをxに代入 } return count; //unsigned型のビット列の数を返す(gccだと32だった) } int int_bits(void){ return count_bits(~0U); //ビット列を全て1に反転する } void print_bits(unsigned x){ int i; for(i = int_bits()-1;i >= 0;i--) putchar(((x >> i) & 1U) ? '1' : '0'); //xを31〜0まで1ずつ右シフトしていき最下位ビット列の値を調べていく } int main(void){ unsigned a; int b; printf("非負の整数を入力してください:"); scanf("%u",&a); printf("何ビットシフトしますか:"); scanf("%d",&b); printf("\n整数 = "); print_bits(a); printf("\n左にシフトした値 = "); print_bits(a << b); printf("\n右にシフトした値 = "); print_bits(a >> b); putchar('\n'); return 0; } |
C言語PART141 unsigned型の論理積・論理和・排他的論理和・1の補数を表示2008-05-06 Tue 09:28
かなり苦戦しましたが、一応答えを見ずに出来ました。ただ、コードが汚い・・・。
#include int count_bits(unsigned x){ //xのビット列に1が幾つ含まれているか調べる int count = 0; while(x){ if(x & 1U) count++; //xの最下位ビットが1だったらcountを増やす x >>= 1; //xを右に1ビットシフトし、それをxに代入 } return count; //unsigned型のビット列の数を返す(gccだと32だった) } int int_bits(void){ return count_bits(~0U); //ビット列を全て1に反転する } void print_bits(unsigned x){ int i; for(i = int_bits()-1;i >= 0;i--) putchar(((x >> i) & 1U) ? '1' : '0'); //xを31〜0までずつ右シフトしていき最下位ビット列の値を調べていく } int main(void){ unsigned a,b; //符号なしの単なるint型 int i; puts("二つの非負の整数を入力してください。"); printf("整数A:"); scanf("%u",&a); printf("整数B:"); scanf("%u",&b); putchar('\n'); printf("A = "); print_bits(a); putchar('\n'); printf("B = "); print_bits(b); putchar('\n'); printf("A & B = "); print_bits(a & b); putchar('\n'); printf("A | B = "); print_bits(a | b); putchar('\n'); printf("A ^ B = "); print_bits(a ^ b); putchar('\n'); printf("~A = "); print_bits(~a); putchar('\n'); printf("~B = "); print_bits(~b); putchar('\n'); return 0; } |



