1. 無料アクセス解析

プログラミングに没頭しているあるIT技術者の日々

プログラミングに関する技術やコードについて、日々思ったことを書いていくブログです。

Visual BasicPART4 入力した文字が携帯番号形式になっているかどうか調べる

先程の日付データと同様、こちらも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 Basic | コメント:0 | トラックバック:0 |

Visual BasicPART3 入力した文字が日付形式になっているか調べて型変換をする

少し補足すると、入力時の日付データが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 Basic | コメント:0 | トラックバック:0 |

Visual BasicPART2 文字に1バイト文字が含まれているか調べる

'入力した文字に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 Basic | コメント:0 | トラックバック:0 |

Visual BasicPART1 半角英数字以外の文字のチェックをする

本日より不定期にはなりますが、私が持っている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

Visual Basic | コメント:0 | トラックバック:0 |

C言語PART146 指定した数のビット目から指定した数のビット個数分1や0や反転して表示

#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言語 | コメント:0 | トラックバック:0 |

C言語PART145 指定した数のビット目を1や0や反転して表示

#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言語 | コメント:0 | トラックバック:0 |

C言語PART144 符号無し整数を左右にnビット回転した値を表示

かなり久しぶりになってしまいましたが、勿論止めるつもりはありません。

ただ今後は、毎日書くのはさすがに厳しくなってきたので、不定期になってしまう事だけはご了承頂ければと思います。

#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言語 | コメント:0 | トラックバック:0 |

C言語PART143 ビットのシフトと2のべき乗の関係を調べる

昨日やってないので今日は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言語 | コメント:0 | トラックバック:0 |

C言語PART142 unsigned型を左右にシフトした値を表示

こちらはコードは読みやすくなったものの、頭の切り替えが上手くいかず答えを見る結果に・・・。

見た瞬間「ああ〜そういうことかよ〜」と叫びました(笑)

結構、ビット関係のプログラムって難しいです・・・。

#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言語 | コメント:0 | トラックバック:0 |

C言語PART141 unsigned型の論理積・論理和・排他的論理和・1の補数を表示

かなり苦戦しましたが、一応答えを見ずに出来ました。ただ、コードが汚い・・・。

#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;
}

C言語 | コメント:0 | トラックバック:0 |
| HOME | NEXT