locateってBASICじゃないのか?
まだはじめて1週間なのでサパーリです。
[問題]
Win32 Platform で動く同一プロセス内の Read/Write Lock クラスを C++ で作りなさい。
その際、Event と CriticalSection オブジェクトだけで構成しなさい。セマフォやミュー
テックスオブジェクトを使用してはならない。
同時に入るスレッドの数、システム状態などには全く依存せず、汎用的に作りなさい。
(但し、システムの限界を越える数(unsigned int の上限値など)の場合はその限りでは
ありません。)
Read/Write Lock とは、複数のスレッドがあるリソース(例えばメモリブロックなど)を
1. Read - Read conflict のときは何もしない
2. Read - Write, あるいは Write -Write conflict のときは待ち合わせ処理をする
という排他制御を言います。
int a,b;
a=2;b=1;
kansuu(int a, intb)
{int koukan;
koukan=a;
a=b;
b=koukan;
}
ポインタを使わない場合、なぜabの値の交換ができないのか
わかりません。
#include <conio.h>
int locate( short, short ) ;
int main( void )
{
int x,y,i;
locate(x,y);
printf("☆\n");
return 0;
}
int locate( short x, short y )
{
COORD dwPos ;
HANDLE hOut ;
dwPos.X = (SHORT)x ;
dwPos.Y = (SHORT)y ;
hOut = GetStdHandle( STD_OUTPUT_HANDLE ) ;
return (SetConsoleCursorPosition( hOut, dwPos ) == 0)? -1: 0;
}
960 :
デフォルトの名無しさん:03/04/29 12:08
Cが一通り(独習Cの内容)終わったので
何か宿題を下さい。おながいします
>>957 Cは値渡しだから、ポインタを使わないと交換関数は作れない。
C++なら&指定で参照渡しになるから交換関数も作れる。
しかし、実装上は単純なポインタ渡しも参照渡しも全く同一のコードになるので、
ポインタ渡しのやり方も覚えて置いて損はない。
また、単純な交換だけが目的なら交換関数とせずにマクロで実現するのも手。
#include<stdio.h>
koukan(int x,int y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
}
main()
{
int a,b;
a=2;
b=1;
koukan(a,b);
printf("%d,%d",a,b);
}
963 :
デフォルトの名無しさん:03/04/29 12:11
>>957>>961 #define SwapInt(a, b) {int tmp = a; a = b; b = tmp;}
#define Swap(a, b) {a ^= b; b^= a; a^= b;}
> #define Swap(a, b) {a ^= b; b^= a; a^= b;}
これってパイプライン乱しそうで遅くなりそうだよね。
>>964 #define Swap(a,b,type) do{type tmp; tmp=a; a=b; b=tmp;}while(0)
今時defineなんて使うな。(ifdefとかで使う場合を除く)
関数をinlineにしろ。
定数定義なら使ってもいいじゃん
っつーか、そもそもCの積もりなんだけどな。
C++だったら最初からテンプレート使うのが当たり前だしね。
#define Swap(a,b) \
{ \
char checker[sizeof(a)==sizeof(b)]; \
char temp[sizeof(a)]; \
memcpy(&temp,&a,sizeof(a)); \
memcpy(&a,&b,sizeof(a)); \
memcpy(&b,&temp,sizeof(a));\
}
>>970 すげぇ、効率度外視だけど型を問わないと言う点では強力だ。
おかげでわかりました
ありがとうございました。
>>970 なんつーか、char checkerの行がおもしろい。
もしかして常套手段?
>>974 static_assertのC版として使ってみた
別バージョンも思い付いた。 memcpyをつかわない。
#define Swap(a,b) \
{ \
char checker[sizeof(a)==sizeof(b)]; \
typedef struct { char temp[sizeof(a)]; } temp_t;\
temp_t temp=*(temp_t*)&a;\
a=b;\
(*(temp_t*)&b)=temp;\
}
糞コード量産厨(w
>>981 コンパイルエラーになるかどうかで型(の大きさ)があっているかどうか確かめること。
なんで空白厨が現れたのかと思ったら、1000取りか。
#include<stdio.h>
main(int argc,char **argv,char **envp)
{
echo(envp);
exit(0);
}
echo(char *ss)
{
while (*ss != NULL)
printf("%s\n",*ss++);
}
このプログラムがなんなのかわかりません
環境変数の値を標準出力に吐くプログラム
>>994 envp(というかmainの第三引数)は環境変数のリストだと思う。
Cの標準規格には存在しないけどね。
997 :
デフォルトの名無しさん:03/04/29 13:24
mainでexitって阿呆?
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。