C/C++の宿題片付けます 146代目

このエントリーをはてなブックマークに追加
601デフォルトの名無しさん
>>600
#include <stdio.h>

unsigned char *pack( unsigned char *dst, const unsigned char *src ) {
  unsigned char *ret = ( src != NULL ) ? dst : NULL;
  while( ( ret != NULL ) && ( *src != '\0' ) ) {
    if( ( '0' <= *src ) && ( *src <= '9' ) ) { *dst = 16 * ( *src - '0' ); }
    else if( ( 'A' <= *src ) && ( *src <= 'F' ) ) { *dst = 16 * ( *src - 'A' + 10 ); }
    else if( ( 'a' <= *src ) && ( *src <= 'f' ) ) { *dst = 16 * ( *src - 'a' + 10 ); }
    else { ret = NULL; break; }
    src++;
    if( ( '0' <= *src ) && ( *src <= '9' ) ) { *dst = *dst + ( *src - '0' ); }
    else if( ( 'A' <= *src ) && ( *src <= 'F' ) ) { *dst = *dst + ( *src - 'A' + 10 ); }
    else if( ( 'a' <= *src ) && ( *src <= 'f' ) ) { *dst = *dst + ( *src - 'a' + 10 ); }
    else { ret = NULL; break; }
    src++; dst++;
  }
  if( ret != NULL ) *dst = '\0';
  return ret;
}

int main() {
  char buf[20], s[] = "938c8B9e";
  pack( buf, s );
  printf( "%s\n", buf );
  return 0;
}
602デフォルトの名無しさん:2011/02/21(月) 08:43:24.94
eval_pv("$s = pack('H*','938c8b9e');",TRUE);
printf("$s = %s\n", SvPV_nolen(get_sv("s",0)));
>>600
> そのままが必要だと面倒だと言う部分が
> 私には、さっぱり分かりません。

H* 前提でなければこの仕様を全部実現しろって話になるわけで、
ttp://homepage2.nifty.com/Catra/memo/perl_pack.html
そりゃ面倒だと思うよ。
604デフォルトの名無しさん:2011/02/21(月) 12:32:30.21
>>595
void pack( char* dst, const char* src )
{
char buff[ 4 ];

while( (src[ 0 ] != '\0') && (src[ 1 ] != '\0') )
{
strncpy( buff, src, 2 );
if( (*dst = strtol( buff, NULL, 16 )) != 0 )
{
dst += 1;
}
src += 2;
}
*dst = '\0';
}
605デフォルトの名無しさん:2011/02/21(月) 12:34:04.37
void pack( char* dst, const char* src )
{
char buff[ 4 ];

while( (src[ 0 ] != '\0') && (src[ 1 ] != '\0') )
{
strncpy( buff, src, 2 );
if( (*dst = strtol( buff, NULL, 16 )) != 0 )
{
dst += 1;
}
src += 2;
}
*dst = '\0';
}
606デフォルトの名無しさん:2011/02/21(月) 12:34:34.10
- char buff[ 4 ];
+ char buff[ 4 ] = {0};
607デフォルトの名無しさん:2011/02/21(月) 21:55:06.66
600さんへ、早速の解答有難う御座います。
最初のif文の所は、パスしてしまいました。
機会があったら、試してみます。

604さんへ、こちらの方がコードが少なくてこちらの方は大体は理解出
来ました。要は、longの型に変換すると言う事ですね。こちらは、試し
てきちんと動きました。助かりました。

一番のシンプルさでは、602さんです。
このコードでは、このままでは何かをincludeしないと動かないと思い
ますが、何をincludeしないといけないのかと言うのが分かりません。
これは、詰まりc言語からperlインターフェースを呼んでいるんですよ
ね。これが、簡単で良いとは思いますが、includeするべきヘッダーフ
ァイルは、何処から持って来れば良いのか、分かりません。

602さん、その辺を宜しくお願いします。
608デフォルトの名無しさん:2011/02/21(月) 22:46:21.57
>607, 602じゃないが面白そうなのでやってみた
piyo.c
#include <EXTERN.h>
#include <perl.h>

static PerlInterpreter *my_perl;

int main(int c, char **v, char **e) {
  char *embedding[] = {"", "-e", "0"};

  /* initialize my_perl */
  PERL_SYS_INIT3(&c, &v, &e);
  my_perl = perl_alloc();
  perl_construct(my_perl);

  perl_parse(my_perl, NULL, 3, embedding, NULL);
  PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
  perl_run(my_perl);

  /* evaluate Perl statments */
  eval_pv("$s = pack('H*', '938c8b9e');", TRUE); /* S-JIS */
  printf("$s = %s\n", SvPV_nolen(get_sv("s", 0)));

  /* finalize my_perl */
  perl_destruct(my_perl);
  perl_free(my_perl);
  PERL_SYS_TERM();

  return 0;
}
cc -Wall -o piyo piyo.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
http://perldoc.jp/docs/perl/5.10.0/perlembed.pod#Evaluating32a32Perl32statement32from32your32C32program
609デフォルトの名無しさん:2011/02/21(月) 22:53:39.24
eval_pv は独立した Perl の文字列を評価し、強制的に C の型へと 変数を展開します。
へー
知らなかった
610デフォルトの名無しさん:2011/02/22(火) 02:35:21.35
[1] 授業単元: プログラミング
[2] 問題文 サッカーの試合結果の記録されたデータファイルを読み取り、
優勝したチーム名を出力するプログラムを作成せよ。
データファイルには、先頭の行にチーム数が出力されており、
2行目からチーム名(チーム数分)、
それ以降の行に試合結果が出力されている。
試合結果の行は以下のフォーマットとなっている。
<ホーム側のチーム名> <ホーム側チームの得点>
<アウェイ側チームの得点> <アウェイ側チーム名>
チーム名は30文字以内とする。
試合に勝ったチームには勝ち点3が与えられ、引き分けたチームには
勝ち点1が与えられる。勝ち点の合計が最も多いチームが優勝となるが、
勝ち点の合計が同じチームが複数ある場合には、それらのうち、
得失点差(得点と失点の差)の合計が大きいチームが優勝となる。
得失点差の合計が同じ場合にはどちらを優勝としてもよい。
4
MANCHESTER_UNITED
ARSENAL
CHELSEA
LIVERPOOL
MANCHESTER_UNITED 3 1 ARSENAL
CHELSEA 3 0 LIVERPOOL
ARSENAL 2 2 CHELSEA
LIVERPOOL 3 0 MANCHESTER_UNITED
------------------------------------
[3] 環境
 [3.1] Windows
 [3.2] visual 2008
 [3.3] 言語: C++
[4] 期限: 2011年2月23日午前8時
[5] その他の制限: 初心者で現在条件分岐までならっているのですがこの問題はは
初心者には難しいでしょうか?よろしくお願いします。
611デフォルトの名無しさん:2011/02/22(火) 03:00:56.83
>>610
条件分岐までしか進んでないのにファイル入力や二次元配列 or 構造体配列が必要な宿題を出すのか?
もし自分の独習用なら少し早いかも知れないね
まぁ調べながらコードを書くのは良い勉強になるからダメもとで書いてみるのは良いと思うけど
612デフォルトの名無しさん:2011/02/22(火) 04:28:48.10
foo.exe << bar.txt
のようにすればcinでもいいので
そういうのを想定してるのかもよ
613デフォルトの名無しさん:2011/02/22(火) 06:24:40.43
>>607
おい>>606
614デフォルトの名無しさん:2011/02/23(水) 00:31:36.29
そのままでは、エラーになるので、多分ライブラリーが無いと思われるのだが。
下記で、調べようと思って、下記のコマンドを実行したら、下記のメッセージが出た。

これは、何を意味しているのだろうか。ヘッダーファイルが無いと言う事なのだろうか。
バージョンは確かにこの通りに4.3.2にはなっています。

済みません。宜しくお願いします。

おそらく、さらにライブラリを追加指定する必要があるでしょう。 どれを? おそらく以下のようにすれば表示されます:perl -MConfig -e 'print $Config{libs}'

Set up gcc environment - 4.3.2
-lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lmsvcrt

615デフォルトの名無しさん:2011/02/23(水) 02:32:44.38
616デフォルトの名無しさん:2011/02/23(水) 02:50:56.98
そのperlコマンドを実行し、コンパイル時にそれらのリンカオプションをつけてみろってことなんでないのかな
617デフォルトの名無しさん:2011/02/23(水) 02:58:11.57
>>614
良く分からんが、perlをコンパイルすると、perlライブラリが出来るらしい
で、そのコマンドは出来上がったライブラリがどこにあるか調べるコマンドだって
618デフォルトの名無しさん:2011/02/23(水) 23:08:49.94
シリアル通信の質問したものですが学校の制限のせいでAPIが制限されていただけのようです
課題は何とかなりそうです。リンクを張ってくれた方ありがとうございます
ところで制限のかかったアカウントで管理者のユーザーとして立ち上げたVisual studioで作ったプログラムから
管理者権限でプログラムを起動するのは可能ですか?
素人なのでよくわかりません。
619デフォルトの名無しさん:2011/02/24(木) 01:55:30.70
環境に依存しなさそうな方法が、ショートカットを作って管理者権限を要求するように設定する方法
Vista以降ならシールドアイコンつける
620 ◆tr.t4dJfuU :2011/02/25(金) 23:12:18.56
[1] プログラミング言語
[2]問題文 以下のソースプログラムで誤っている箇所(○行目の〜の部分)とそれを
どのように修正すればよいのかを指摘しなさい。誤っている箇所は複数あるので、以下の
例のように箇条書きにして、誤っている部分と修正安を指摘してください。(一箇所の指摘に対して1点、最大5点まで加点)
(箇条書きの例)
・9行目の「kekka =10;」で、合計を求める変数kekkaの初期化が正しく行われていない。
「kekka = 0;」とすべき。
・○行目の〜の部分で・・・・・など。

2つの整数を引数として受け取り、第一引数と第2引数の足し算の結果(整数)
を戻り値とする関数をsumという関数名で作成せよ。さらに、関数sumを利用して、以下の
配列numberの10個の数値の合計値を求めるプログラムを作成せよ。
int number[10]={1,2,3,4,5,6,7,8,9,10};

[3] 環境
 [3.1] linuxのkateです。
 [3.3] C言語
[4] 期限: 2011年の2月26日の12時です。
[5] その他の制限: 特にないと思います。お手数かけますがどなたかお願いします。
621デフォルトの名無しさん:2011/02/25(金) 23:16:41.12
イカソースがないじゃないか
622 ◆tr.t4dJfuU :2011/02/25(金) 23:18:53.10
ソースはこちらになります。
#include<stdio.h>
int sum(int arg1, int arg2)

int main(void)
{
int number[10]={1,2,3,4,5,6,7,8,9,10};
int kekka, i;

kekka = 10;
for (i=1; i<=10; i++)
{
kekka = su(kekka, number[i]);
}
printf("%d\n", &kekka);

return 0;
}

sum(int arg1, int arg2)
{
return = arg1 + arg2;
}
623 ◆tr.t4dJfuU :2011/02/25(金) 23:21:27.11
じ、字下げが反映されてない・・・orz
字下げはちゃんとされてる設定です!
624デフォルトの名無しさん:2011/02/25(金) 23:27:00.93
     
625デフォルトの名無しさん:2011/02/25(金) 23:31:40.14
>>622
いくら宿題だとはいえ、こんなソース見た瞬間に0から書き直すことを考える。
一応書いておくと8箇所か9箇所かな…
626デフォルトの名無しさん:2011/02/25(金) 23:37:37.94
int sum(int arg1, int arg2);
2行目。末尾に終端記号 ; を付加

kekka = 0;
9行目。例に従い初期値を0とする

for (i=0; i<=9; i++)
10行目。初期値及び終了条件をnumber配列の添え字の範囲に変更

kekka = sum(kekka, number[i]);
12行目。関数名の間違い

printf("%d\n", kekka);
14行目。& は不要

return arg1 + arg2;
21行目。= は不要
627 ◆tr.t4dJfuU :2011/02/25(金) 23:47:06.88
>>625
すいません。人に物を頼むのに適当なことやって
書き直します!

#include<stdio.h>
int sum(int arg1, arg2)

int main(void)
{
int number[10]={1,2,3,4,5,6,7,8,9,10};
int kekka, i;

kekka =10;
for(i=1; i<=10; i++)
{
kekka = sum(kekka,number[i]);
}
printf("%d\n", &kekka);

return 0;
}

sum(int arg1, int arg2)
{
return = arg1 + arg2;
}

628 ◆tr.t4dJfuU :2011/02/25(金) 23:50:40.95
何故さがらない・・・・orz
629 ◆tr.t4dJfuU :2011/02/25(金) 23:54:18.35
>>626
ありがとうございます。
12行目は自分の打ち込みミスでした・・・
ほんとすいません。
凄く助かりました。
630デフォルトの名無しさん:2011/02/26(土) 00:18:38.24
>for (i=0; i<=9; i++)
マジックナンバー (・A・)イクナイ!
for (i=0;i<sizeof(number)/sizeof(number[0]);i++)
631デフォルトの名無しさん:2011/02/26(土) 00:21:56.36
ループで毎回計算させるのもイクナイ!
632デフォルトの名無しさん:2011/02/26(土) 00:27:10.77
>>631
嘘つけ、コンパイル時に定数決定される。あれ?もしかすると釣りか?
633デフォルトの名無しさん:2011/02/26(土) 00:36:55.58
まぁ、マジックナンバーは「誤っている」とまでは言えないわな。
sum(int arg1, int arg2) も返却値の型 int を明示すべきだが
規格ではエラーではない(ここでは int と推測されてプロトタイプに一致する)。
634デフォルトの名無しさん:2011/02/26(土) 00:56:22.77
2行目が何気に変わってるのも釣りなのかな…?
>int sum(int arg1, arg2)
635デフォルトの名無しさん:2011/02/26(土) 01:15:28.60
何気に
kekka = sum(kekka,number[i-1]);

for (i=1; i<=10; i++)
は正しいのかも知れない…
636デフォルトの名無しさん:2011/02/26(土) 01:19:11.74
>>628
以前はダメだったんだけど、最近は tab インデントは下がるはずだよ
空白でインデントしていないかい?
もしくは専ブラとかが関係してるのかな?
637デフォルトの名無しさん:2011/02/26(土) 01:24:23.85
#include<stdio.h>

int main() {
printf( "%s\n", ">>636 そうなのか?" );
return 0;
}
638デフォルトの名無しさん:2011/02/26(土) 01:29:34.01
駄目じゃん
639 ◆tr.t4dJfuU :2011/02/26(土) 01:31:02.23
>>635
ああ!2行目も打ち間違えてた・・・orz
正式には
int sum(int arg1,int arg2)
です。
>>636
tabキーですか!
一回目の書き込みは専ブラからで
二回目は直で書き込んだんですけど
どちらも駄目で焦りましたw
640デフォルトの名無しさん:2011/02/26(土) 02:26:40.27
>>639
アンカーも間違ってるみたいだけど気にするなwww
641 ◆tr.t4dJfuU :2011/02/26(土) 02:51:21.10
>>640
hahaha...
もう駄目ですねwww
死んだほうがいい俺wwww
642デフォルトの名無しさん:2011/02/26(土) 04:05:11.40
#include <stdio.h>
int main( void )
{
    printf( "下がってない?\n" );
}
643642:2011/02/26(土) 04:07:28.19
エディターで書いてコピペすれば下がるみたい
ちなみにギコナビ使ってる、ギコナビだと直打ちするにも tab が入らない
644デフォルトの名無しさん:2011/02/26(土) 04:13:52.54
>>643
それギコナビがtabを&nbsp;×4に置き換えてくれてるだけでは無かろうか?
645デフォルトの名無しさん:2011/02/26(土) 05:43:03.25
>>644
どうやらそうみたいだね、今 chrome で同じ事しようとしたら確認画面の段階でダメだったよ
以前はギコナビでもダメだった記憶が有るんだけど、バージョンアップしたっけか?
ちなみに現在はバタ61です
646デフォルトの名無しさん:2011/02/27(日) 12:36:52.75
[1] 授業単元: データ構造とアルゴリズム
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C言語
[4] 期限: ([2011年2月28日18:00まで]

問題1
「与えられた浮動小数点データより平均値を求め、その値を出力せよ。」という課題プログラムを、
線形リストを用いたC 言語プログラムで実現することを考える。
(1) 用いる構造体、および、処理関数Heikin を作成せよ。ただし、引数として「データ入力済み
の線形リスト」のみが渡されるものとし、演算結果を戻り値で処理せよ
(2) 処理すべき浮動小数点データがバイナリでファイルfile1 に格納されているものとする。この
file1 から浮動小数点データを読み込み、線形リストを作成する処理部分を記述せよ。
647646:2011/02/27(日) 12:41:01.03
よろしくお願いします。
お手上げです。
648デフォルトの名無しさん:2011/02/27(日) 13:35:43.44
649646:2011/02/27(日) 14:03:21.01
>>648
ありがとうございます
650デフォルトの名無しさん:2011/03/03(木) 03:28:29.46
[1] 授業単元:C言語でアクションゲーム制作
[2] 問題文:@キーを取得し,プレイヤーを操作できるようにする
ボタン入力でプレイヤーから弾を発射できるようにする     
A乱数で座標を取得し,乱数で画面右から飛来する敵を設定
B敵と弾の当たり判定を作成。プレイヤーに当たったら死亡
弾が当たったら描画を消す。
[3] 環境
[3.1] OS:Windows
[3.2] バージョン:Visual studio2008
[3.3] 言語:C言語
[4] 期限:3月5日
[5] その他の制限:DirectXは使用しない

敵の作成と当たり判定で詰んでます・・・
よろしくお願いします。
651デフォルトの名無しさん:2011/03/03(木) 15:05:44.22
>>650
2Dなら当たり判定は円同士(3Dなら球同士)が楽でいいんじゃね?
2つの円の距離が半径の合計より小さければ当たったってことで。

float player_x, player_y, player_r;
float enemy_x, enemy_y, enemy_r;
float length_x, length_y, length_r;

length_x = enemy_x - player_x;
length_y = enemy_y - player_y;
length_r = player_r + enemy_r;

if( ((length_x * length_x) + (length_y * length_y)) < (temp_r * temp_r) )
{
// 当たった
}

ただ高速に移動するもの同士だとすり抜けが起こるから
気になるようなら弾は直線で判定するといいかもね。
652デフォルトの名無しさん:2011/03/03(木) 21:09:32.56
[1] 授業単元: デジタル信号処理
[2] 問題文: 次のC言語構造体練習用コード
(ttp://www1.axfc.net/uploader/Sc/so/210923)
を参考にしてQuaternion一次方程式{Ax+B=0, xA+B=0}の解を計算するプログラムを作れ。
[3] 環境
 [3.1] OS: MacOSX
 [3.2] コンパイラ名とバージョン: gcc4.2
 [3.3] 言語: C
[4] 期限: 3月9日
653652:2011/03/03(木) 21:12:12.11
連続post申し訳ないです。。。
連立多元一次方程式の解法は種々ありますが、この形は初めてで手がつけられません。よろしくお願いします。
654デフォルトの名無しさん:2011/03/03(木) 21:15:44.14
四元数の計算ルーチンが揃ってるんだからガウス法か掃き出し法ですぐ解けるだろ
655デフォルトの名無しさん:2011/03/03(木) 21:28:14.21
交換法則が成り立たない場合があるのでそれだけ気を付ければいいみたいだな
656デフォルトの名無しさん:2011/03/03(木) 21:58:17.67
[1] 授業単元: C言語プログラミング
[2] 問題文
  任意の正の実数同士の割り算を30ケタまで正確に出力するプログラムを作成せよ。
  例 1/3=0.3333333333333・・・・・333
[3] 環境
 [3.1]Windows7
 [3.2]gcc
 [3.3]C言語
[4]明日のAM7:00
[5] その他の制限:なし
657デフォルトの名無しさん:2011/03/03(木) 22:25:45.42
>>656

>任意の正の実数
何億桁とかもおkなの?

>30ケタまで正確に出力するプログラム
小数点以下30桁?値全体の桁が30?まさか小数点を抜くと29桁ってこと?
658デフォルトの名無しさん:2011/03/03(木) 22:33:19.89
>>657
すいません、情報が少なすぎました。
任意の実数、そうですね、0<x<10000程度でお願いします。

30桁とは、小数点以下が30桁です。

おねがいします
659デフォルトの名無しさん:2011/03/03(木) 22:33:35.62
>>656
整数じゃなくて実数?
表現方法は?
660デフォルトの名無しさん:2011/03/03(木) 22:40:05.41
>>659
じゃぁ実数はint型でお願いします。
34/4

1000/23

みたいな感じの出力が知りたい。

とにかく知りたいのが出力なんで・・・
661デフォルトの名無しさん:2011/03/03(木) 22:44:27.75
Cスレで騒いでるキチガイか
相手すんな
662デフォルトの名無しさん:2011/03/03(木) 23:08:28.21
>>660
#include <stdio.h>

int main( void )
{
    int a = 1000, b = 23, c, d, i;
    
    c = a / b;
    d = a % b;
    printf( "%d.", c );

    for( i = 0; i < 10; i++ ) {
        a = d * 1000;
        c = a / b;
        d = a % b;
        printf( "%03d", c );
    }
    printf( "\n" );
    return 0;
}
こんな感じ?
入力を実数にするのはちょっと面倒だな
663662:2011/03/03(木) 23:13:52.86
補足:
適当に3桁づつ処理したけど、入力によっては駄目な場合が有るね
5桁くらいが適当かな
 
for( i = 0; i < 6; i++ ) {
a = d * 100000;;
c = a / b;
d = a % b;
printf( "%05d", c );
}

に直してちょ
664デフォルトの名無しさん:2011/03/04(金) 00:24:11.28
>>662
やっぱり技巧でするんですか・・・

割り算じゃなくて、例えば
int 型だと

9000から1ずつ増やしていったら、9001・・・9997・・・9998・・・9999 10000
とちゃんと正確に出ますよね?

なのに、なんでfloatは

1.0000にならないといけないのに、0.9989とかなるんですか?
665デフォルトの名無しさん:2011/03/04(金) 00:24:30.59
>>651
円で考えてやったら出来ました!
ありがとうございました。
666デフォルトの名無しさん:2011/03/04(金) 00:43:51.82
>>664
技巧の意味は解らんが有効数字30桁を扱える型が無い以上、あんな方法しか無いだろう

1.0 が 0.9989 にはならんだろ、釣りか?
667デフォルトの名無しさん:2011/03/04(金) 00:48:24.82
>>666
桁の違う数値の足し算をしたと思われる
668デフォルトの名無しさん:2011/03/04(金) 01:08:33.04
相手にすんなって警告したのに
669デフォルトの名無しさん:2011/03/04(金) 01:18:47.78
浮動小数点型の丸め誤差と桁落ちについて調べなおしたほうがいい
670デフォルトの名無しさん:2011/03/04(金) 01:50:07.06
プログラミング以前の常識だと思うんだけど間違いなのかな
671デフォルトの名無しさん:2011/03/04(金) 02:07:50.17
そりゃ宿題スレで質問するぐらいなんだから初心者なんでしょ。
初心者の質問を気違いだと捨てる人の度量のなさに驚くわ。
もしくは答えられないのか。
672デフォルトの名無しさん:2011/03/04(金) 02:18:44.12
あんたが答えてやれよwww
673デフォルトの名無しさん:2011/03/04(金) 02:55:46.65
もう答えられてるじゃん。どうしたの?
674デフォルトの名無しさん:2011/03/04(金) 07:34:43.35
>>656
時間切れだよ〜♪

http://codepad.org/gA1zB7VU
675デフォルトの名無しさん:2011/03/04(金) 22:10:16.22
>>656
こんなん1桁づつ計算したらいいだけじゃん
676デフォルトの名無しさん:2011/03/04(金) 22:14:35.04
今 codepad.org 繋がる?
677デフォルトの名無しさん:2011/03/04(金) 23:49:36.47
>最終的には高速フーリエ変換等の高速化が必須となる。
はいはい博識乙^^
678デフォルトの名無しさん:2011/03/05(土) 02:17:54.67
博識?ユニバーサルメルカトルをつかうのが常識じゃないか?
679デフォルトの名無しさん:2011/03/06(日) 06:57:34.47
[1] 授業単元:C言語の機能
[2] 問題文: タイマーを作成,30秒から0秒まで表示せよ
WAIT(1000);とおくと1秒経過します。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visualstudio2007
 [3.3] 言語: C言語
[4] 期限: 3月6日

デジタル時計のような感じです。
30が表示され,1秒後に同じ場所に29が表示されていく感じです

よろしくお願いします。
680デフォルトの名無しさん:2011/03/06(日) 07:23:09.69
>>679
int i;
for(i=30;i>=0;i--){
system("cls");
printf("%d",i);
WAIT(1000);
}
681デフォルトの名無しさん:2011/03/06(日) 12:46:19.57
>>680ナイキストさんに謝れ!
682デフォルトの名無しさん:2011/03/07(月) 00:50:30.17
>>679
Visual Studio 2007なんて見たことないから、
動作確認できないが、基本的にWindows系ならこれでOK

int main() {
  int i;
  for( i = 30 ; i >= 0 ; i-- ){
    printf( "%2d\r", i );
    WAIT(1000);
  }
  return 0;
}
683682:2011/03/07(月) 00:53:37.22
タイマー処理で誤差が大きくならない仕様に汁って話なら正しいコンパイラを
684デフォルトの名無しさん:2011/03/07(月) 00:56:32.81
誤差ならWAITを先にしたほうがいいんじゃね
って思ったけどたいした差じゃないか
685デフォルトの名無しさん:2011/03/07(月) 00:56:48.02
正しいコンパイラって?
686デフォルトの名無しさん:2011/03/07(月) 01:04:37.89
>>685
> [3.2] コンパイラ名とバージョン:Visualstudio2007
2007なんてあるのか?
687デフォルトの名無しさん:2011/03/07(月) 03:24:57.65
2005または2008で書いたらどうなるわけ?
688デフォルトの名無しさん:2011/03/07(月) 04:08:07.10
1900とか2100とか書いたらどうなるの?
年代物の価値が出る?
689デフォルトの名無しさん:2011/03/07(月) 05:07:22.12
クロックが可変なCPUや、マルチの場合、どうなるかは良く分からん

#include <stdio.h>
#include <windows.h>

int main() {
  int i;
  LARGE_INTEGER clock, st, tm;
  long long cd[31];
  QueryPerformanceFrequency( &clock );
  QueryPerformanceCounter( &st );
  for( i=0; i<31; i++ ) {
    cd[i] = st.QuadPart + clock.QuadPart * ( i+1 );
  }
  for( i=0; i<31; i++ ){
    while( 1 ) {
      WAIT(1); // 精度を上げたければ、この行を削除
      QueryPerformanceCounter( &tm );
      if( cd[i] < tm.QuadPart ) {
        printf( "%2d\r", 30-i );
        break;
      }
    }
  }
  return 0;
}
690デフォルトの名無しさん:2011/03/07(月) 05:25:16.22
それは正しいコンパイラですか?
691デフォルトの名無しさん:2011/03/07(月) 06:28:42.54
いいえ、それはトムです
692デフォルトの名無しさん:2011/03/07(月) 06:41:24.38
はい、インテル入ってます
693デフォルトの名無しさん:2011/03/07(月) 13:37:40.19
>>689
なぜ素直に clock() を使わない
694デフォルトの名無しさん:2011/03/07(月) 13:38:24.81
精度がワロス
695デフォルトの名無しさん:2011/03/07(月) 15:44:27.50
>>693
> QueryPerformanceCounter( &tm ); // ここから
> if( cd[i] < tm.QuadPart ) {
> printf( "%2d\r", 30-i ); // ここまでの処理を出来るだけ短い時間、かつ、一定の処理速度に
clock()使うとvc++のclock()の実装処理に依存してしまうから
696デフォルトの名無しさん:2011/03/07(月) 20:29:12.95
CLOCKS_PER_SEC も併用すれば解決じゃね?
697デフォルトの名無しさん:2011/03/07(月) 21:06:44.64
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク):
問1
サイコロをN個、振って、全てのサイコロが同じ数の目が出るまでにかかった
処理時間を表記する。1〜100回など切りの良い個数まで全て計測し、出力形式
N=1 x秒  
N=2 y秒


N=100 z秒
の形式で出力する。

[3] 環境
 [3.1] Windows7
 [3.2] gcc
 [3.3] C
[4] 3月8日 午前7:00
[5] その他の制限: 出力端末:cygwinの画面、エディター:メモ帳
698デフォルトの名無しさん:2011/03/07(月) 21:09:50.66
>>697
コレをどうしろってのよ?
699デフォルトの名無しさん:2011/03/07(月) 21:10:04.88
>>697
サイコロの振り方に関する注文はないのか?
700デフォルトの名無しさん:2011/03/07(月) 21:10:08.81
>>697をよろしくお願いします。