C言語何でも質問掲示板


Total hit  今日  昨日  

必ずお読み下さい → 規約と注意事項  アンケートはこちら  エラーで投稿できない方はこちら  過去ログ検索はこちら

 
   課題の問題でつまって ....   
     ・[56216] へろり 
     ・[56219] 白い時空 
     ・[56222] たかぎ 
     ・[56247] へろり 
     ・[56256] 白い時空 
     ・[56276] ISLe 
     ・[56288] へろり 
     ・[56351] かむかむ 
     ・[562141279036622] かむかむ 
   【雑談】ゲーム開発の ....   
     ・[55985] ムンバ 
     ・[56005] ookami 
     ・[56029] ぽこ 
     ・[56033] 御津凪 
     ・[56198] ookami 
     ・[56220] dic 
     ・[56238] ぽこ 
     ・[56296] ookami 
     ・[56347] ぽこ 
     ・[557691278992107] ookami 
   マルチスレッドとタイ ....   
     ・[56343] シエル 
     ・[56344] 組木紙織 
     ・[56345] 組木紙織 
   Perl(CGI)の環境変数 ....   
     ・[56194] toyo 
     ・[56200] ムンバ 
     ・[56275] ムンバ 
     ・[56286] toyo 
     ・[56287] toyo 
     ・[56339] ムンバ 
   並び替えについて   
     ・[56319] toyo 
     ・[56325] 黒猫 
   課題   
     ・[56299] さかまき 
     ・[56300] ookami 
     ・[56302] さかまき 
     ・[56309] 蓮 
     ・[56313] さかまき 
     ・[56314] さかまき 
     ・[56324] スキマ妖怪 
   バブルソート   
     ・[56317] ルーニー 
     ・[56318] asd 
     ・[56321] toyo 
   部分文字列を置き換え ....   
     ・[56229] シエル 
     ・[56235] ぽこ 
     ・[56293] トマト 
     ・[56306] トマト 
     ・[56307] シエル 
     ・[56311] ideyan 
     ・[56312] トマト 
   横型から縦型への変換   
     ・[55743] 晶 
     ・[55745] ookami 
     ・[55746] 晶 
     ・[55748] ookami 
     ・[56003] 晶 
     ・[56013] ookami 
     ・[56016] ookami 
     ・[56156] 晶 
     ・[56162] 晶 
     ・[56206] ookami 
     ・[56273] 晶 
     ・[56297] ookami 
     ・[56305] 晶  
   学校の課題[RLC回路]で ....   
     ・[56071] パコネコ 
     ・[56073] box 
     ・[56074] パコネコ 
     ・[56080] 迷子の子猫 
     ・[56082] fatens 
     ・[56083] パコネコ 
     ・[56084] パコネコ 
     ・[56085] シエル 
     ・[56090] 迷子の子猫 
     ・[56091] パコネコ 
     ・[56092] パコネコ 
     ・[56093] 迷子の子猫 
     ・[56094] へろり 
     ・[56095] パコネコ 
     ・[56096] パコネコ 
     ・[56097] パコネコ 
     ・[56098] 迷子の子猫 
     ・[56099] へろり 
     ・[56100] 迷子の子猫 
     ・[56101] へろり 
     ・[56295] 迷子の子猫 
   学校の課題で悩んでい ....   
     ・[56254] パコネコ 
     ・[56257] Dixq (管理人) 
     ・[56264] パコネコ 
     ・[56266] フリオ 
     ・[56267] Dixq (管理人) 
     ・[56268] たすけてぇ><; 
     ・[56269] Dixq (管理人) 
     ・[56270] パコネコ 
     ・[56271] Dixq (管理人) 
     ・[56272] パコネコ 
     ・[56277] パコネコ 
     ・[56279] ISLe 
     ・[56292] へろり 
   iPhoneアプリに関して   
     ・[56189] Justy 
     ・[56263] altupuru 
     ・[56283] Justy 
   ダイヤ作成   
     ・[55865] パコネコ 
     ・[55866] パコネコ 
     ・[55875] あくあ 
     ・[55892] パコネコ 
     ・[55903] あくあ 
     ・[55924] Dixq (管理人) 
     ・[55934] あくあ 
     ・[55936] Dixq (管理人) 
     ・[55937] Dixq (管理人) 
     ・[55970] あくあ 
     ・[55971] fatens 
     ・[55982] Dixq (管理人) 
     ・[55986] パコネコ 
     ・[55994] fatens 
     ・[55995] あくあ 
     ・[56255] Dixq (管理人) 
   矢印キーについて教え ....   
     ・[56211] バグ 
     ・[56212] 秋色 
     ・[56213] ookami 
     ・[56241] 秋色 
   へにょりレーザー   
     ・[56204] ookami 
     ・[56236] yamataka 
   ウィンドウを閉じた際 ....   
     ・[55747] ookami 
     ・[55751] 深黒 
     ・[55752] ookami 
     ・[55803] 深黒 
     ・[55807] fatens 
     ・[55810] 深黒 
     ・[55823] s-rush 
     ・[55833] Justy 
     ・[55849] 深黒 
     ・[55854] Justy 
     ・[55983] 深黒 
     ・[56159] 深黒 
     ・[56168] Justy 
     ・[56227] 深黒 
   アルゴリズムを利用し ....   
     ・[56207] ookami 
     ・[56208] toyo 
     ・[56209] toyo 
   エラーが出てしまいま ....   
     ・[56174] シエル 
     ・[56175] シエル 
     ・[56176] box 
     ・[56177] シエル 
     ・[56178] パコネコ 
     ・[56187] narica 
     ・[56195] へろり 
     ・[56203] シエル 
   GetGlyphOutline関数等 ....   
     ・[56133] ISLe 
     ・[56149] シエル 
     ・[56163] シエル 
     ・[56170] シエル 
     ・[56190] ISLe 
     ・[56192] ISLe 
     ・[56197] シエル 
   3次元配列の要素数   
     ・[56109] fatens 
     ・[56167] mitsu 
   課題がわかりません。 ....   
     ・[56034] ROM 
     ・[56035] シエル 
     ・[56036] Dixq (管理人) 
     ・[56039] パコネコ 
     ・[56040] シエル 
     ・[56047] パコネコ 
     ・[56048] パコネコ 
     ・[56050] ROM 
     ・[56060] natu 
     ・[56061] パコネコ 
     ・[56062] パコネコ 
     ・[56063] パコネコ 
     ・[56066] パコネコ 
     ・[56104] natu 
     ・[56105] Dixq (管理人) 
     ・[56106] フリオ 
     ・[56114] パコネコ 
     ・[56129] ISLe 
     ・[56135] 通りすがり 
     ・[56138] パコネコ 
     ・[56166] natu 
   関数に渡す引数につい ....   
     ・[56136] パコネコ 
     ・[56137] だいちゃん 
     ・[56139] パコネコ 
     ・[56140] 爺プログラマー 
     ・[56142] MNS 
     ・[56143] 爺プログラマー 
     ・[56144] fatens 
     ・[56146] シエル 
     ・[56150] 爺プログラマー  
     ・[56152] 爺プログラマー  
     ・[56153] シエル 
   画像に線が入って横に ....   
     ・[56018] Dixq (管理人) 
     ・[56107] ラプター 
     ・[56110] dic 
     ・[56111] Dixq (管理人) 
     ・[56112] Dixq (管理人) 
     ・[56121] ラプター 
     ・[56122] シエル 
     ・[56123] ラプター 
     ・[56124] シエル 
     ・[56148] Dixq (管理人) 
   文字列操作時のメモリ ....   
     ・[56115] へろり 
     ・[56119] dic 
     ・[56125] ゆーずぃ 
     ・[56126] へろり 
     ・[56127] へろり 
     ・[56131] ゆーずぃ 
     ・[56134] toyo 
     ・[56141] たかぎ 
     ・[561131278845321] ゆーずぃ 
   2バイト文字をUNIT型に ....   
     ・[55984] Justy 
     ・[56000] シエル 
     ・[56002] へろり 
     ・[56006] シエル 
     ・[56007] へろり 
     ・[56008] へろり 
     ・[56009] シエル 
     ・[56011] toyo 
     ・[56012] シエル 
     ・[56057] ISLe 
     ・[56059] シエル 
     ・[56102] Justy 
     ・[56103] toyo 
   WebCamでの物体追跡に ....   
   関数が動きません   
     ・[56067] パコネコ 
     ・[56068] シエル 
     ・[56072] 白い時空 
     ・[56075] シエル 
     ・[56076] narica 
   エラーの原因がわかり ....   
     ・[56045] パコネコ 
     ・[56046] シエル 
     ・[56049] narica 
     ・[56051] シエル 
     ・[56052] narica 
     ・[56053] box 
     ・[56054] シエル 
     ・[56055] box 
   lvalue required as . ....   
     ・[55895] パコネコ 
     ・[55896] パコネコ 
     ・[55897] パコネコ 
     ・[55898] Dixq (管理人) 
     ・[55899] パコネコ 
     ・[55901] タマ 
     ・[55902] fatens 
     ・[55907] タマ 
     ・[55909] シエル 
     ・[55918] box 
     ・[55950] タマ 
     ・[55957] box 
     ・[55972] タマ 
     ・[55973] パコネコ 
     ・[56023] タマ 
     ・[56038] タマ 
     ・[56042] シエル 
   二分木を使ったプログ ....   
   cppファイルが追加でき ....   
     ・[55888] たいちう 
     ・[55889] 白 
     ・[55910] シエル 
     ・[55911] 白 
     ・[55913] シエル 
     ・[55923] 白 
     ・[55925] シエル 
     ・[55931] たいちう 
     ・[55932] softya 
     ・[55941] 白 
     ・[55962] softya 
     ・[55988] ISLe 
     ・[56022] 白 
   助けてください。ファ ....   
     ・[55842] Justy 
     ・[55846] スカイ 
     ・[55852] Justy 
     ・[56020] スカイ 
   enumの定義の仕方に関 ....   
     ・[55838] たかぎ 
     ・[55839] シエル 
     ・[55840] NN 
     ・[55841] たかぎ 
     ・[55997] toyo 
   【雑談】「コンパイラ ....   
     ・[55800] わふー 
     ・[55801] たかぎ 
     ・[55808] ookami 
     ・[55812] fatens 
     ・[55813] たかぎ 
     ・[55814] fatens 
     ・[55820] s-rush 
     ・[55825] たかぎ 
     ・[55826] s-rush 
     ・[55827] たかぎ 
     ・[55829] パコネコ 
     ・[55831] たかぎ 
     ・[55835] シエル 
     ・[55837] たかぎ 
     ・[55858] ISLe 
     ・[55860] ISLe 
     ・[55863] たかぎ 
     ・[55864] たかぎ 
     ・[55867] ISLe 
     ・[55869] たかぎ 
     ・[55871] たかぎ 
     ・[55873] 組木紙織 
     ・[55874] たかぎ 
     ・[55876] 組木紙織 
     ・[55877] たかぎ 
     ・[55881] めるぽん 
     ・[55882] めるぽん 
     ・[55883] めるぽん 
     ・[55991] たかぎ 
   標準体重のプログラム   
     ・[55975] パコネコ 
     ・[55976] C言語初心者 
     ・[55977] fatens 
     ・[55978] パコネコ 
     ・[55979] パコネコ 
     ・[55980] C言語初心者 
     ・[55981] パコネコ 
   アクセス違反について   
     ・[55967] 爺プログラマー 
   はじめまして   
     ・[55959] パコネコ 
     ・[55960] ROM 
     ・[55961] パコネコ 
   ダウンロードできませ ....   
     ・[55940] Dixq (管理人) 
   心のしくみ   
     ・[55755] dic 
     ・[55770] パコネコ 
     ・[55777] TKOZ 
     ・[55782] TKOZ 
     ・[55789] ookami 
     ・[55790] ookami 
     ・[55796] たかぎ 
     ・[55939] TKOZ 
   指定のファイルがなか ....   
     ・[55879] めるぽん 
     ・[55880] スキマ妖怪 
     ・[55929] ぬるぽ 
     ・[55933] 通りすがり 
     ・[55935] ぬるぽ 
     ・[55938] スキマ妖怪 
   WM_LBUTTONDOWNを無効 ....   
     ・[55761] toyo 
     ・[55762] 爺プログラマー 
     ・[55763] toyo 
     ・[55764] 爺プログラマー 
     ・[55765] シエル 
     ・[55781] 爺プログラマー 
     ・[55786] シエル 
     ・[55787] 爺プログラマー 
     ・[55788] シエル 
     ・[55859] shiro4ao 
     ・[55885] 爺プログラマー 
     ・[55887] 爺プログラマー 
     ・[55893] シエル 
     ・[55916] 爺プログラマー 
     ・[55917] シエル 
     ・[55927] 爺プログラマー 
     ・[55928] シエル 
   ■ HPのイベントアイデ ....   
     ・[55223] あ〜る 
     ・[55226] たかぎ 
     ・[55229] Dixq (管理人) 
     ・[55236] シエル 
     ・[55239] wing 
     ・[55241] wing 
     ・[55242] jay 
     ・[55244] Dixq (管理人) 
     ・[55245] たかぎ 
     ・[55258] 山崎 
     ・[55270] ムンバ 
     ・[55292] Dixq (管理人) 
     ・[55293] たかぎ 
     ・[55294] 御津凪 
     ・[55298] Tororo 
     ・[55301] わふー 
     ・[55307] ムンバ 
     ・[55318] 白 
     ・[55362] Dixq (管理人) 
     ・[55365] ムンバ 
     ・[55392] Tororo 
     ・[55422] Dixq (管理人) 
     ・[55433] wing 
     ・[55491] Dixq (管理人) 
     ・[55649] s-rush 
     ・[55665] Dixq (管理人) 
     ・[55691] ひよこ 
     ・[55926] Dixq (管理人) 
   通信関係のプログラム ....   
     ・[55915] シエル 
     ・[55919] Justy 
     ・[55920] shiro4ao 
     ・[55921] シエル 
     ・[55922] いむ 
   DirectXにてClear関数 ....   
     ・[55850] シエル 
     ・[55851] MOT 
     ・[55914] MOT 

Name: かむかむ  ..ぴよぴよ(543ポイント)   Date: 2010/07/07(水) 14:04   No:56214       
Title: 課題の問題でつまってしまいました    
題名の通り、学校の課題でつまってしまいました。
誰か教えてください。 お願いします。


↓問題文
基本: 構造体の配列、関数への構造体の引渡し

基本課題 13..2  

name(名前: char型配列), height(身長: float型変数), bloodType(血液型: char型変数)をメンバに持つ構造体を宣言し, 128名分が記憶可能になるようその構造体の配列を定義せよ.また,その配列に対して値を入力し,さらに表示できるようにせよ.構造体のメンバ値を表示するには、ひとつの構造体の各メンバの値を表示する関数を作成すること。

    % ./bodyData
    1人目のデータ: いい漢 175.5 A
    2人目のデータ: 竹達彩菜 169.0 B
    3人目のデータ: 能登麻美子 180.4 O
    4人目のデータ: 0 0 0                ← 0 0 0 と入力すると終わる.
    名前        身長        血液型
    いい漢    175.5       A
    竹達彩菜    169.0       B
    能登麻美子  180.4       O
    %
       

ヒント: 各人の名前、身長、血液型のデータを1行で入力するためには、参考12.1に示されたfgets()関数で、これらを1度に取り込み、最初の空白までを名前とみなし、次の空白までを身長とみなし、次に改行までを血液型をみなせばよい。これらを別々の文字列として、必要に応じて整数や浮動小数点数に変換し、構造体のメンバに設定すること。

ヒント: ひとつの構造体の各メンバの値を表示する関数に構造体を引渡すことを繰り返えせばよい。





↓とりあえず考えて作ってみたもの



#include<stdio.h>
#define BUFFER_SIZE 256
#define NUMBER 128
#define NAME_SIZE 32

struct PROFILE{
  char name[NAME_SIZE];

  float height;

  char bloodType;
}


int main(){
  struct PROFILE man[NUMBER];

  char buf[BUFFER_SIZE];

  int i, j, k, h;
  for(i = 0;man[i].name[0] == '0' && man[i].height == 0 && man[i].bloodType == 0;i++){
    printf("%d人目のデータ: ", i + 1);

    fgets(buf, BUFFER_SIZE, stdin);

    for(j = 0;buf[j] != ' ';j++){
      man[i].name[j] = buf[j];
    }
    for(k = j+1;buf[k] != ' ';k++){
      man[i].height = buf[k];
    }
    for(h = k+1;buf[h] != '\n';h++){
      man[i].bloodType = buf[h];
    }
  }
  printf("名前\t身長\t血液型\n");
  for(j = 0;j <= i;j++){
    printf("%s\t%f\t%c\n", man[j].name, man[j].height, man[j].bloodType);
  }
  return 0;
}


543ポイント を手に入れた。


Name: へろり  ..上級者(19,699ポイント)   Date: 2010/07/07(水) 15:15   No:56216     
Title: Re:課題の問題でつまってしまいました    
うほっ いい課題。 とでもいいのでしょうか。 最初の人は阿部さんですよね。

つっこみどころが多くてどこからどう説明したらいいのか解らないので、そこは他の人にまかせます。

とりあえずざっくりと作ってみました。 動作確認はしてません。
エラーチェックも、読み込んだデータの整合性のチェックもしてません。


何も無い改行だけの入力を受け取ると、入力ループを抜けます。

#include <stdio.h>
#include <stdio.h> 
#include <string.h>
#include <math.h>
#define BUFFER_SIZE 256 
#define NUMBER 128 
#define NAME_SIZE 32 

struct PROFILE{ 
    char name[NAME_SIZE]; 

    float height;

    char bloodType;
};


void printProfile(PROFILE *pf)
{
    printf("\t名前: %s\n\t身長: %f\n\t血液型: %c\n\n",
        pf->name, pf->height, pf->bloodType);
}

int main()
{ 
    int i, count;
    struct PROFILE man[NUMBER];

    char buf[BUFFER_SIZE]; 

    count = 0;
    while(count < NUMBER && fgets(buf, BUFFER_SIZE, stdin)){
        if(*buf == '\n') break;

        strcpy(man[count].name, strtok(buf, " "));
        man[count].height = (float)atof(strtok(NULL, " "));
        man[count].bloodType = *strtok(NULL, " ");

        count++;
    }

    for(i = 0;i<count;i++){
        printf("%d 人目\n", i);
        printProfile(&man[i]);
    }

  return 0; 
}



追記:
000を入力すると終わりなのですね。 読み飛ばしてました。
人の文章はにょろんとしか読まない癖があるらしくしばしばこういう事があります。 ごめんなさい。

 編集済み


554ポイント を手に入れた。

Name: 白い時空  ..かけだし(1,636ポイント)   Date: 2010/07/07(水) 16:25   No:56219     
Title: Re:課題の問題でつまってしまいました    
for文とか使わなくても、sscanf関数でできます。
あまり知られていない関数ですが。
fgets(buf, sizeof(buf), stdin);
        
sscanf(buf,"%s %f %c",
    man[i].name,
    &man[i].height,
    &man[i].bloodType);
とするだけで、それぞれにデータが入ります。
あと、
man[i].bloodType == 0
ではなく
man[i].bloodType =='0'
です。

もうひとつ、bloodTypeはchar型ですが、血液型ABが入らないのでは?


203ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(214,662ポイント)   Date: 2010/07/07(水) 16:58   No:56222     
Title: Re:課題の問題でつまってしまいました    
> bloodTypeはchar型ですが、血液型ABが入らないのでは?

そこを工夫するのも問題のうちなのでは?


12ポイント を手に入れた。

Name: へろり  ..上級者(19,860ポイント)   Date: 2010/07/07(水) 21:29   No:56247     
Title: Re:課題の問題でつまってしまいました    
>for文とか使わなくても、sscanf関数でできます。

そういえばそんな関数もありましたね。
しかし、for文等を使わずに、どうやって人数分を入力を受け取るのですか?


>あと、
>man[i].bloodType == 0
>ではなく
>man[i].bloodType =='0'
>です。

これから入力を受け取る構造体が空だったら、というループ条件だと解釈しましたが、
その場合 man[i].bloodType == 0 でよいのでは無いかと。
まぁ、メンバにfloat型が含まれてる時点でアレですが。
そもそも初期化もされてませんが。


>もうひとつ、bloodTypeはchar型ですが、血液型ABが入らないのでは?

そういえば、そんな血液型もありましたね。


161ポイント を手に入れた。

Name: 白い時空  ..かけだし(1,866ポイント)   Date: 2010/07/07(水) 22:25   No:56256     
Title: Re:課題の問題でつまってしまいました    
ちょっと誤解を招いてしまいましたね。
説明が下手ですいません。
    for(j = 0;buf[j] != ' ';j++){
      man[i].name[j] = buf[j];
    }
    for(k = j+1;buf[k] != ' ';k++){
      man[i].height = buf[k];
    }
    for(h = k+1;buf[h] != '\n';h++){
      man[i].bloodType = buf[h];
    } 
の部分でたくさんfor文を使われていたので、そのようなfor文は必要ないという意味です。 人数分入力するためのfor文は必要です。 具体的にはこんな感じです。
for(i=0;i<NUMBER;i++){
    printf("%d人目のデータ:",i+1);
    
    fgets(buf, sizeof(buf), stdin);
    
    sscanf(buf,"%s %f %c",
        man[i].name,
        &man[i].height,
        &man[i].bloodType);
    
    if(man[i].name[0] == '0' && man[i].height == 0 && man[i].bloodType == '0')
        break;
}



230ポイント を手に入れた。

Name: ISLe  ..入門者(4,315ポイント)   Date: 2010/07/08(木) 00:40   No:56276     
Title: Re:課題の問題でつまってしまいました    
sscanfの戻り値をチェックしたほうが良い気がします。


18ポイント を手に入れた。

Name: へろり  ..上級者(19,991ポイント)   Date: 2010/07/08(木) 07:44   No:56288     
Title: Re:課題の問題でつまってしまいました    
>の部分でたくさんfor文を使われていたので、そのようなfor文は必要ないという意味です。

なるほど納得です。

>if(man[i].name[0] == '0' && man[i].height == 0 && man[i].bloodType == '0')

終了条件ってこういう意味だったのですね。
確かに、スレ元を見ると0と0の間にスペースが入ってます。

てっきり "000\n" という入力を受け取ったら終わると思ってました。
変わった仕様だなと思ってました。
相当流し読みしてたみたいです。

やっぱり”いっぺん死んでみる?”とか言われるのでしょうか。


131ポイント を手に入れた。

Name: かむかむ  ..ぴよぴよ(570ポイント)   Date: 2010/07/08(木) 23:10   No:56351     
Title: Re:課題の問題でつまってしまいました    
みなさん、ありがとです。

sscanfとの二通りで作ってみようと、現在格闘しております。


27ポイント を手に入れた。

Name: かむかむ   Date: 2010/07/14(水) 00:57   No:562141279036622     
Title: Re:課題の問題でつまってしまいました    
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define BUFFER_SIZE 256 
#define NUMBER 128 
#define NAME_SIZE 32 

struct PROFILE{
  char name[NAME_SIZE];

  float height;

  char bloodType;
};

void printProfile(struct PROFILE *pp){
  printf("名前:%s\t身長:%f\t血液型:%c\n", pp->name, pp->height, pp->bloodType);

}

int main(){

  int i, count;
  struct PROFILE man[NUMBER];
  char buf[BUFFER_SIZE];

  float *height;
  char *blood;
  count = 0;

  height = &man[count].height;
  blood = &man[count].bloodType;

  while(count < NUMBER){
    printf("%d人目: ", count + 1);
    fgets(buf, BUFFER_SIZE, stdin);

    strcpy(man[count].name, strtok(buf, " "));
    height = double atof(strtok(NULL, " "));   ←40行目
    blood = strtok(NULL, "\n");

    count++;

    if(man[count].name[0] == '0' && man[count].height == '0' && man[count].bloodType == '0')
      break;
  }

  for(i = 0;i < count;i++){
    profilePrint(&man[i]);
  }

  return 0;
}


自分なりに考えてやってみたのですが、40行目に文法エラー befre "double"っとエラーになってしまいます


あと、char型変数にAB型を一文字として入れるにはどうすればよいのでしょうか?




Name: ookami  ..プログラマー(32,331ポイント)   Date: 2010/07/02(金) 20:40   No:55769       
Title: 【雑談】ゲーム開発の流れを紹介しているサイトって...    
いつも勉強させていただいております。

以前より何度かご意見いただいている、
ネット上でのゲーム開発については、
コアとなる掲示板を、その後も作り進めては
いるものの、おそらく、
「ゲーム開発に特有なコミュニケーションを支援する」ような
視点を取り入れないと、結局は二番煎じの域をでない、
「無意味だと思います」の二の舞かなと思っています。
Tracなどのツールを改造するにしてもそうです。
(作る手間が減るというのはメリットですが、
プログラマ的には、やっぱし自分でソースを打ちたいっていうw)

進捗は、
http://oookami.sakura.ne.jp/integ/
↑こんな感じで、「参考 - 入力テンプレート」が
追加されたくらいで、まだまだ目標にはほど遠いです。
サンプルプロジェクトとして実際にゲームを作りながら、
機能を追加して行きたい予定です。



それで、今回お願いしたい【雑談】なんですが…

「ゲーム 開発 講座」などでググると、
大抵「プログラミング」に特化したページが
ヒットするように思います。

もっと「ゲーム開発に特有なコミュニケーション」というか、
「仕様の決め方」「メンバーの募集の際気をつけること」
「トラブル事例」「モチベーションの保ち方」のような、
トータルな意味での「ゲーム 開発 講座」は
無いものでしょうか。

どなたかご存知ありませんか?


482ポイント を手に入れた。


Name: ムンバ  ..初心者(8,076ポイント)   Date: 2010/07/05(月) 00:53   No:55985     
Title: Re:【雑談】ゲーム開発の流れを紹介しているサイトって...    
こんばんは。

↓こちらのサイトは、如何でしょうか?
http://www.game-create.com/

既に、ご存知でしたら申し訳御座いません。
おやすみなさい。

---編集・追伸---

上述のページを覗くと(私の思い違いかもしれませんが)←編集部位
COOKIE_DOUBLECLICK
が、ほぼ100%?入ります。

以下、ウィルスバスターでの「COOKIE_DOUBLECLICK」のご解説を引用させて頂きます。


形式 : トラッキングクッキー  
別名 : クッキー  
感染報告の有無 : なし  
感染報告 : 低 
--------------------------------------------------------------------------------
 
特徴: 「これは一般に「Tracking Cookies」や「Data Miner」と呼ばれるCookieファイルです。Cookieファイルですのでこのファイル自体が危険な活動を行うことはありません。ご安心ください。 

CookieとはWebブラウザとWebサイト間で情報をやりとりするためのファイルです。Webサイトは前回のアクセス内容を呼び出すことができ、ユーザーごとに異なるサービスや画面を提供することが可能となります。 

Cookieファイルの中には、限定的ですが複数のWebサイトでユーザの情報収集に利用される可能性を持ったものがあります。トレンドマイクロ製品では、「Tracking Cookies」や「Data Miner」と呼ばれる活動の報告があったCookieファイルをDCS(トレンドマイクロダメージクリーンアップサービス)のスパイウェア検出機能で検出に対応しています。 

このCookieファイルの作成元は以下のサイトです。 

http://www.doubleclick.com

との事でした。
失礼します。 編集済み


79ポイント を手に入れた。

Name: ookami  ..プログラマー(32,920ポイント)   Date: 2010/07/05(月) 12:58   No:56005     
Title: Re:【雑談】ゲーム開発の流れを紹介しているサイトって...    
# ムンバさん
返信ありがとうございます^^

URL、見てみましたが、ここもプログラミングが主な
気がいたします。(私がちゃんと見れていないだけ...?


なんというか、結局「ケースバイケース」であって、
読んで学ぶようなものではないんでしょうかね。

# ウィルスは、特に問題ありませんでしたよ^^
# ご丁寧にありがとうございました。


2倍のポイントを手に入れた! 70ポイント を手に入れた。

Name: ぽこ  ..上級者(19,177ポイント)   Date: 2010/07/05(月) 20:21   No:56029     
Title: Re:【雑談】ゲーム開発の流れを紹介しているサイトって...    
「物事を(上手く、段取りよく)進めていく」という行為に、
ゲーム開発は、あまり関係ないと思います。

ookamiさんが作成されようとしているコンテンツの想定読者が
 ・社会人ではない
 ・企画を取りまとめた経験がない
人であれば、「プロジェクトマネージメント」の心得を読ませるのが一番だと思います。
結局、ケースバイケースから共通項抜き出すと、プロマネに落ち着くんじゃないでしょうか。



122ポイント を手に入れた。

Name: 御津凪 [URL]  ..ハッカー(143,736ポイント)   Date: 2010/07/05(月) 21:10   No:56033     
Title: Re:【雑談】ゲーム開発の流れを紹介しているサイトって...    
私は現役のゲームプログラマーですが、一つ雑談をば。


そもそも、全体のプロジェクトのスケジュールは同じであれど、
納期や会社の状態によって、それぞれの分野に費やす時間や順序はプロジェクトごとにバラバラです。

一番これがいいと言えるベストパターンはプロジェクトごとに違います。
なぜならば、フレンドリーでアットホームに開発するプロジェクト(会社)もあれば、
IT企業並みに厳しい規則を設けたプロジェクト(会社)もあり、
さらに(アマチュアの場合は)制作するゲームに対する各々の思いによって大きく変化するからです。

それぞれ、必要とする人材は違いますよね?
ゲーム会社の求人情報を見ればその会社の大まかな様子がわかると思います。

つまり、「ゲーム開発に特有なコミュニケーションを支援する」には、
それぞれの思想にあった枠組みが必要ということになります。

しかし、それぞれの思想をというと、(上記の例のように)大まかに区別できても、
その幅は大げさですが、無段階で無限にあります。

なので、「ゲーム開発に特有なコミュニケーションを支援する」には、
支援される方の要望を全て受け入れた、唯一のコミュニケーションツール(掲示板やフォーラムなど)を提供しなくてはならないということになります。

事実、(私の通っている会社によらず)会社で使われているツールのいくつかは
会社(あるいはプロジェクト)の要望に応えた社内専用ツールが存在します。


…まあ、以上は機能を突き詰めた場合の事の顛末を危惧したための話ですが。

アマチュアレベルであれば、プロジェクトページみたいなもので管理できるレベル(Wiki+掲示板)で十分でしょう。
(それがあるだけで参加している気分になれるのでモチベーションはある程度維持できるはず)

あと、単純にオープンベータとして使ってもらい、そこから出た要望や問題などを纏めたほうが
一番よい指南書・解説書として役立てるのではないでしょうか?
(ここの掲示板の規約もそんな感じで出来上がっていますからね)

以上、参考程度にどうぞ。

それでは最後に一言。

人は自由を好みながら制限を必要とします。
アマチュアの場合は特にそのバランスが重要になります。


682ポイント を手に入れた。

Name: ookami  ..プログラマー(33,854ポイント)   Date: 2010/07/07(水) 09:55   No:56198     
Title: Re:【雑談】ゲーム開発の流れを紹介しているサイトって...    
返信ありがとうございます!
お返事遅くなりすみませんでした。

# ぽこさん

>想定読者が 
>・社会人ではない
>・企画を取りまとめた経験がない 

その通りです。
「プロジェクトマネジメント」というと、
工程管理、スケジュール管理、リソース管理...といった
内容ですよね。

うーむ... 確かに共通項目となると、そうですね。
その辺を参考に、掲示板に機能を付加していくのが
いいかもしれませんね。

ありがとうございます。


# 御津凪さん

やり方、思想、トラブルなど、千差万別である、ということですね。
やはり「機能」としてはただの掲示板やWikiで十分で、
何か問題があるごとに対応を考えてゆく、という感じでしょうか...。

> 人は自由を好みながら制限を必要とします。

何となく分かる気がします^^;
メンバーは、ある程度は自分の思いを反映させたい、
かといって、好き勝手にやるわけにもいかないと。

一つ質問させていただきたいのですが...
トラブル時(意見が割れた、連絡がとれなくなった、利権がらみでもめた、など)、
やはり一番の解決策は、「面と向かって話し合う」ことだと思いますか?

メールや掲示板だけで、催促や、状況確認などしようにも、
メンバーによっては、ちょっとでも「やだな」と思ったら、
ついつい先延ばしにして、そのまま立ち消え、ということに、
やっぱりなりやすいのでしょうか。

前スレで、「(直接会えない場合は)掲示板からSkypeへの連携など面白いかも」と
アドバイスいただいたことがあって、ちょっとその線を考えたくて。

前スレはこちらです。
http://www.play21.jp/board/formz.cgi?action=res&resno=52130&page=&lognum=160&id=dixq&rln=52271
え...なんだか、毎回同じような質問して、全然前に進んでない気がしてまいりました(汗)


395ポイント を手に入れた。

Name: dic  ..比類無きプログラマー(82,567ポイント)   Date: 2010/07/07(水) 16:40   No:56220     
Title: Re:【雑談】ゲーム開発の流れを紹介しているサイトって...    
御津凪さんの意見にのるようで申し訳ないですが

逆に、プログラマ何人、グラフィッカー何人、音楽何人
と決めてしまって
A(大手企業のやり方)のパターン
B(中小企業のやり方)のパターン
C(実力主義のやり方)のパターン
とこちらで、決めてしまってから
説明のサイトを作るのはどうでしょうか?

汎用性も大事ですが、情報が多すぎで読んでいる暇がないとか
全部理解するのが大変だとか、汎用性があるとなるのか・・・な?

なにごとも結果より続けることのほうが大事と思います


163ポイント を手に入れた。

Name: ぽこ  ..上級者(19,742ポイント)   Date: 2010/07/07(水) 20:21   No:56238     
Title: Re:【雑談】ゲーム開発の流れを紹介しているサイトって...    
> # ぽこさん
 
> その通りです。
> 「プロジェクトマネジメント」というと、
> 工程管理、スケジュール管理、リソース管理...といった
> 内容ですよね。

「仕事」も重要ですが「心得」がもっとも重要かな、と思います。

> 一つ質問させていただきたいのですが...
> トラブル時(意見が割れた、連絡がとれなくなった、利権がらみでもめた、など)、
> やはり一番の解決策は、「面と向かって話し合う」ことだと思いますか?

意見が割れた場合、利権がらみの時はYesです。
連絡取れなくなったら、そもそも場が設けられないのでNo。
諦めるしかないでしょうね。

> メールや掲示板だけで、催促や、状況確認などしようにも、
> メンバーによっては、ちょっとでも「やだな」と思ったら、
> ついつい先延ばしにして、そのまま立ち消え、ということに、
> やっぱりなりやすいのでしょうか。

ネットで募集すると、プロジェクトに対するロイヤリティが低くなるのは仕方がないこと
だと思います。失敗しても何のペナルティも無いし。
#そう考えると、普通の仕事よりも高度なマネージメントスキルを要求されるんですよね。


96ポイント を手に入れた。

Name: ookami  ..プログラマー(34,760ポイント)   Date: 2010/07/08(木) 10:45   No:56296     
Title: Re:【雑談】ゲーム開発の流れを紹介しているサイトって...    
お返事ありがとうございます!

# dicさん

> 逆に、プログラマ何人、グラフィッカー何人、音楽何人と決めてしまって ...
なるほど、
プロジェクトの規模ややり方をテンプレート化するのは
思いつきませんでした。

確かに、汎用性を高めると具体情報(サンプルなど)の
幅が広くなってしまい、使う方も大変ですね。
ある程度、専用ツール・制限のあるツールに
したいとは思っています。

> なにごとも結果より続けることのほうが大事と思います
ありがとうございます!
確かに。。。継続が大事ですね^^



# ぽこさん

心得ですか... 確かに、リーダーが何をすべきか、全く心得ずに
募集をかけるような人もいますからね...。
なるほど、
> 読ませる
とおっしゃるのも納得です。
ツールでどうこうする物ではないですね^^;

> 連絡取れなくなったら、そもそも場が設けられないのでNo。
...ですね^^;
プログラマらしからぬ発言をしてしまいました(汗)
トラブル対応を含め、コミュニケーションには会うのが最適、
というのは、やはり 多くの方に共通のご意見なんですね。

遠隔地を前提としているので、やるとしたらテレビ電話なんですが...
Webカメラってどれくらい普及してるんでしょうね...。
だいぶ安くはなってきたようですが。
むむむ。
機能としてどれくらい有効かどうかを含めて、検討してみますね。


--- 以下、ちょっと脱線


http://pchannel.net/wthre/1147924.html
↑昨日見つけたのですが、
このページのように、
数日のスパンで流動的に人が出入りして、
どんどんとゲームが出来上がっていくようなところも
あるようです。

ここでは、コアとなる人が全体を
しっかり管理しているように思います。
掲示板の機能がどうとかではなくて、
「人」が良いのでうまくいっている...とでも言うのでしょうか。

ちょっと感動したので貼りました。


226ポイント を手に入れた。

Name: ぽこ  ..上級者(19,861ポイント)   Date: 2010/07/08(木) 22:18   No:56347     
Title: Re:【雑談】ゲーム開発の流れを紹介しているサイトって...    
> ここでは、コアとなる人が全体を
> しっかり管理しているように思います。
> 掲示板の機能がどうとかではなくて、
> 「人」が良いのでうまくいっている...とでも言うのでしょうか。

石のスープってやつですね。
http://ja.wikipedia.org/wiki/%E7%9F%B3%E3%81%AE%E3%82%B9%E3%83%BC%E3%83%97
http://homepage2.nifty.com/~castanha/legend4.htm

「人」が勝因でしょうね。
自分たちが持っていた「石」を上手く利用していると思います。


91ポイント を手に入れた。

Name: ookami   Date: 2010/07/13(火) 12:35   No:557691278992107 解決!     
Title: Re:【雑談】ゲーム開発の流れを紹介しているサイトって...    
お返事遅くなりました。
過去ログに落ちてしまいましたが、一応解決とさせていただきます。
みなさま、ご意見ありがとうございました!




Name: 組木紙織  ..比類無きプログラマー(88,837ポイント)   Date: 2010/07/08(木) 20:08   No:56340       
Title: マルチスレッドとタイマーによるアニメーションについて    
ゲーム作りのテストとして、
アニメーションの繰り返し処理をタイマーを使った場合とマルチスレッドを使った場合の
描写への影響の比較をしました。


マルチスレッドではちらつきが出ないのにもかかわらず、
シングルスレッドでやった時はちらつきが出てきます。
何故このような事が起こるのでしょうか?

サンプルコードを添付しました。
MULTI_THREADを1とするとマルチスレッドで動作するようにしています。

画像も一緒に添付しようとしたのですが、大きすぎるとおこられたので コードのみにしてます。



256ポイント を手に入れた。


Name: シエル  ..プログラマー(27,295ポイント)   Date: 2010/07/08(木) 20:28   No:56343     
Title: Re:マルチスレッドとタイマーによるアニメーションについて    
タイマーを使ったシングルスレッドでは下記のように、
InvalidateRectの第3引数をTRUEにして、背景を再描画しているからではないでしょうか?
::InvalidateRect(hWnd,NULL,TRUE);


59ポイント を落としてしまった。

Name: 組木紙織  ..比類無きプログラマー(88,839ポイント)   Date: 2010/07/08(木) 20:34   No:56344 解決!     
Title: Re:マルチスレッドとタイマーによるアニメーションについて    
>InvalidateRectの第3引数をTRUEにして、背景を再描画しているからではないでしょうか? 

そうでした、FALSEにしたらどちらもちらつきがなく動きました。

初歩的な質問で申し訳ありませんでした。
ありがとうございます


62ポイント を落としてしまった。

Name: 組木紙織  ..比類無きプログラマー(89,067ポイント)   Date: 2010/07/08(木) 20:34   No:56345 解決!     
Title: Re:マルチスレッドとタイマーによるアニメーションについて    
>InvalidateRectの第3引数をTRUEにして、背景を再描画しているからではないでしょうか? 

そうでした、FALSEにしたらどちらもちらつきがなく動きました。

初歩的な質問で申し訳ありませんでした。
ありがとうございます


2倍のポイントを手に入れた! 228ポイント を手に入れた。



Name: ムンバ  ..初心者(8,430ポイント)   Date: 2010/07/07(水) 02:11   No:56191       
Title: Perl(CGI)の環境変数「HTTP_REFERER」につきまして    
こんばんは。お世話になります。

またまた、C言語とは関係ない質問で申し訳無いのですが…。(汗
相変わらず、Perl(CGI)の環境変数の質問をさせて頂けるサイトが見つかりません。
(2chは、私には無理です。すみません。)

添付させて頂いたCGIファイル内のソース

sub kankyohensu{

    foreach $date(sort keys %ENV){

        print "$date = $ENV{$date}

\n";
    }
}


で、全ての環境変数を取得し(実行して)表示する事はできたのですが
環境変数「HTTP_REFERER」(どのサイトから飛んできたのかを取得する環境変数)
が、全ての環境変数を取得する中に含まれていない(実行しても表示されない)ので

print "HTTP_REFERER = $ENV{'HTTP_REFERER'} のサイトから、こちらのサイトに来ました。

\n";

↑のソースを追加して実行したところ、実行時に取得した環境変数「HTTP_REFERER」の値は表示されました。

sub kankyohensu で全ての環境変数を取得できると思っていたのですが
全ての環境変数取得時に「HTTP_REFERER」は、取得できません。

何故、環境変数「HTTP_REFERER」の情報は、全ての環境変数を取得する上述のサブルーチン
(sub kankyohensu)内では、取得できないのでしょうか?

と言う質問をしたいのですが、どちらで質問して良いのか解りません。
検索の仕方が足りないのかもしれませんが、見つかりませんでした。
もし、詳しい方がいらっしゃいましたら
ご指導の程、宜しくお願いします。


354ポイント を手に入れた。


Name: toyo  ..熟練のプログラマー(52,923ポイント)   Date: 2010/07/07(水) 07:28   No:56194     
Title: Re:Perl(CGI)の環境変数「HTTP_REFERER」につきまして    
私のローカルに入れたApache2.2とActiveperlではサブルーチン内でもちゃんと表示されました
最初はセキュリティソフトがブロックしてるのかなと思いましたが
print "HTTP_REFERER = $ENV{'HTTP_REFERER'} のサイトから、こちらのサイトに来ました。\n";
では表示されるんですよね
でも一度セキュリティソフトをオフにして確認してみてはどうでしょう


121ポイント を手に入れた。

Name: ムンバ  ..初心者(8,539ポイント)   Date: 2010/07/07(水) 10:33   No:56200     
Title: Re:Perl(CGI)の環境変数「HTTP_REFERER」につきまして    
おはようございます。

toyoさん、早速のご解説ありがとうございます。
ローカルは、httpdでプロバイダのサーバーはApacheです。
帰宅次第、セキュリティソフトをオフにして確認してみます。
ありがとうございます。(謝


109ポイント を手に入れた。

Name: ムンバ  ..初心者(8,083ポイント)   Date: 2010/07/08(木) 00:18   No:56275 解決!     
Title: Re:Perl(CGI)の環境変数「HTTP_REFERER」につきまして    
こんばんは。
toyoさん、すみません。帰宅遅くなりました。(_ _)

セキュリティソフトをオフにし
自鯖でも、お借りしてるサーバーでも試してみたのですが
サブルーチン内での表示(No:56191のソース)では、表示されませんでした。

>>print "HTTP_REFERER = $ENV{'HTTP_REFERER'} のサイトから、こちらのサイトに来ました。\n"; 
>>では表示されるんですよね

そうなんです。
個別には、どちらのサーバーでも表示できるんです。

自鯖のhttpdの設定で、制限がかかってて(カスタマイズ不足で)表示されないのか
プロバイダのサーバー(Apache)で表示されない様に制限がかかってるのかは解りません。
が、$ENV{'HTTP_REFERER'}単独では、値が表示されるのですよね。^^;

英語が苦手なもので、Apacheの導入を悩んでいたのですが
今回の疑問も含めまして、お試しにでもApache導入を検討してみたいと思います。

toyoさん、ご指導どうもありがとう御座いました。
少し検討する時間を下さい。
自分なりに今一度、調べてみたいと思います。

勝手ながら、一旦解決とさせて頂きます。(_ _)
また何かありましたら、ご指導の程、宜しくお願いします。
ありがとうございました。

---編集・追記---

すみません!
今、気づいたのですが、本当にすみません。
私の質問の内容が、不十分でしたので編集で追記させて頂きます。(謝

上述のサブルーチン内で、$ENV{'HTTP_REFERER'}の値が表示されない。
のではなく、HTTP_REFERER 自体が表示されないのです。
(ので、値も表示できない。)
つまり、添付させて頂いたファイルのサブルーチンを実行した場合に
全ての環境変数を取得できると思っていたのですが
実行しても

HTTP_REFERER =

↑これ自体が、表示されないのです。

すみません。うまく説明できて無くて申し訳有りませんでした。
解決後の編集、すみません。
自分なりに、がんばってみます。

PS:誤字脱字があったり、それを指摘してみたりされたりと
  変な意味は無く、難しいですね。^^
  今後とも、宜しくお願い致します。
  おやすみなさい。(∪。∪)。。。zzzZZ 編集済み


456ポイント を落としてしまった。

Name: toyo  ..熟練のプログラマー(53,338ポイント)   Date: 2010/07/08(木) 06:41   No:56286     
Title: Re:Perl(CGI)の環境変数「HTTP_REFERER」につきまして    
リファラ自体がないと表示されませんよ
HTTP_REFERERは常にあるわけではありません
URLをお気に入りやブックマークに登録してそこから飛んだ場合はHTTP_REFERERは作成されないので表示されません
リンクをクリックして飛んだときだけ作成されるのがHTTP_REFERER(リンク元のURL)です
http://localhost/cgi-bin/printenv.cgi
例えば↑をクリックしてとんだ場合HTTP_REFERERはこの掲示板のURLになります
ブラウザのアドレス欄に直接打ち込んだりお気に入りなどからアクセスした場合などリンク元が存在しないときはHTTP_REFERER自体が存在しません

編集:画像添付1 編集済み


262ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(53,364ポイント)   Date: 2010/07/08(木) 07:36   No:56287     
Title: Re:Perl(CGI)の環境変数「HTTP_REFERER」につきまして    
こちらはリファラなしの画像です


2倍のポイントを手に入れた! 26ポイント を手に入れた。

Name: ムンバ  ..初心者(8,927ポイント)   Date: 2010/07/08(木) 18:46   No:56339 解決!     
Title: Re:Perl(CGI)の環境変数「HTTP_REFERER」につきまして    
toyoさん、こんにちは。

詳しいご解説、並びに2つの添付ファイルどうもありがとうございます。
お手数おかけしました。(謝

>>リファラ自体がないと表示されませんよ 
>>HTTP_REFERERは常にあるわけではありません 
>>リンクをクリックして飛んだときだけ作成されるのがHTTP_REFERER(リンク元のURL)です

だから、表示されなかったのですね。
了解しました。
詳しくご解説頂いたおかげで理解する事ができました。

また何か御座いましたら、ご指導の程、宜しくお願いします。
本当にありがとうございました!
失礼します。

---編集・追記---
toyoさんへ
 帰宅して試してみました。出来ました!
 ありがとうございました。^^ 編集済み


273ポイント を手に入れた。



Name: 黒猫  ..入門者(3,116ポイント)   Date: 2010/07/08(木) 15:28   No:56316       
Title: 並び替えについて    
買い物リストを作っているのですが、
商品名と値段を入力して、値段の高い順、安い順にソートするものです。
値段のソートはできたのですが、商品名もつけて並び変えたいのですが、
文字化けしてしまいます。ご指摘お願いします。

#include <stdio.h>

void main(void){
 struct shopping{
    unsigned long p;
        unsigned char sp[20];
   }list[10];
     
   int i = 0;
   int a, j, order;
   unsigned char dumySP[20];
   unsigned long dumyP;
   for(i = 0; i < 3; i++){
       printf("買い物:");
       scanf("%s", &list[i].sp);
       printf("値段:");
       scanf("%lu",&list[i].p);
    }
/*//////////////////昇順ソート////////////////*/ 
    if(order == 1){
       for(i = 0; i < 3; i++){
      for(j = i+1; j < 3; j++){
       if(list[i].p < list[j].p){
          dumyP = list[i].p;
          for(a = 0; a == '\0'; a++){
        dumySP[a] = list[i].sp[a];
        printf("1%c\n", dumySP[a]);
           }
           list[i].p = list[j].p;
           for(a = 0; a == '\0'; a++){
         list[i].sp[a] = list[j].sp[a];
         printf("2%c\n", list[i].sp[a]);
            }
            list[j].p = dumyP;
        for(a = 0; a == '\0'; a++){
            list[j].sp[a] = dumySP[a];
            printf("3%c\n", list[j].sp[a]);
         }
              }
          }
      }
  for(i = 0; i < 3; i++){
  printf("\t\t%s \t\t\t%lu\n",list[i].sp, list[i].p);
  }
}
}


233ポイント を手に入れた。


Name: toyo  ..熟練のプログラマー(53,453ポイント)   Date: 2010/07/08(木) 16:01   No:56319     
Title: Re:並び替えについて    
          for(a = 0; a == '\0'; a++){ 

          for(a = 0; list[i].sp[a] != '\0'; a++){ 
が正しいです(後2箇所も同様)
また文字列のコピーならstrcpy( )使ったほうが楽です
しかし
   unsigned char dumySP[20];
   unsigned long dumyP; 
ではなくて
   struct shopping dummy;
にして
    dummy = list[i];
    list[i] = list[j];
    list[j] = dummy;
にしたほうが見やすいしバグも起こりにくいですよ
構造体のメンバー個々で代入しなくても同じ構造体同士はそのまま代入できます



32ポイント を手に入れた。

Name: 黒猫  ..入門者(3,127ポイント)   Date: 2010/07/08(木) 17:16   No:56325 解決!     
Title: Re:並び替えについて    
なるほど!!

ありがとうございます。


11ポイント を手に入れた。



Name:  ..ぴよぴよ(47ポイント)   Date: 2010/07/08(木) 10:07   No:56294       
Title: 課題    
すみませんが…、課題ができなくて、教えていただけませんか??

次のパズルを縦型探索により解くプログラムを作成しなさい。
「男女のペア3組(6人)が2人乗りボートで対岸に渡るのにはどのような順で渡ればよいか??
ただし、女性は1人では向こう岸に渡れない(しかし、戻ってくることは可能)
また、女性は他のペアの男性とは一緒に乗れないとする。」

プログラムは途中まで作ったのですが…エラーが発生します。

何がおかしいのか教えていただけませんか??

また、プログラムで足りない部分などお気付きになった時には教えていただけないでしょうか??


47ポイント を手に入れた。


Name: さかまき  ..ぴよぴよ(448ポイント)   Date: 2010/07/08(木) 10:58   No:56299     
Title: Re:課題    
>プログラムは途中まで作ったのですが…エラーが発生します。 
>何がおかしいのか教えていただけませんか?? 

(1) サブルーチン「move_boat」 が未定義です。⇒とりあえずコメントアウト
(2) サブルーチン名 「move_man1 & *move_man2」はNGです。
   move_man1and2 みたいに書き換えましょう。(計6箇所)

以上でコンパイルは出来ちゃいました。
move_man1 & *move_man2 他5個のサブルーチンは使われていないですね。

>プログラムで足りない部分など・・・
上記、使われていない関数を使用する必要があるのか、余分なのか?
縦型探索により解くプログラムの概要がよくわからないのでわかりません。
作成されたプログラムの処理概要を説明してもらえませんか?


178ポイント を手に入れた。

Name: ookami  ..プログラマー(34,872ポイント)   Date: 2010/07/08(木) 11:05   No:56300     
Title: Re:課題    
あれっ なんだかデジャヴが...
とりあえず、気づいた範囲で...

関数の宣言で
struct Cell *move_man1 & *move_man2( struct Cell *s )
これはおかしいですね。

あと、mallocしているのにfreeが無いのはまずいですね。


75ポイント を手に入れた。

Name: さかまき  ..ぴよぴよ(561ポイント)   Date: 2010/07/08(木) 11:28   No:56302     
Title: Re:課題    
よそに激似のプログラムがあったのですね。気付きませんでした。
蓮さん=晶さんじゃないですよね?
向こうをパクッたんだったら向こうが解決してからにしてはいかが?
人・オオカミ・ヤギ・キャベツより男・女の方が簡単だし。
(実際は男女間の問題はとっても複雑ですが)


113ポイント を手に入れた。

Name:  ..ぴよぴよ(132ポイント)   Date: 2010/07/08(木) 13:15   No:56309     
Title: Re:課題    
すみません。
晶さんってどなたですか??
後、さかまきさんに言われたように変えたんですが…
プログラムのエラーが減っただけでコンパイルできませんでした。
他に間違った箇所があるかもしれないので、教えていただけないでしょうか??


85ポイント を手に入れた。

Name: さかまき  ..ぴよぴよ(753ポイント)   Date: 2010/07/08(木) 14:31   No:56313     
Title: Re:課題    
>晶さんってどなたですか?? 
resno=55742さんです。ご存知ないとすれば他に原作者がいるってこと?

>後、さかまきさんに言われたように変えたんですが… 
>プログラムのエラーが減っただけでコンパイルできませんでした。 
>他に間違った箇所があるかもしれないので、教えていただけないでしょうか??

私は
サブルーチン名 「move_man1 & *move_man2」はNGです。 
move_man1and2 みたいに書き換えましょう。(計6箇所) 
と言いました。
「move_man1 and 2 and boat」に書き換えましょうとは言っていません。
直接言わなかったから誤解を招きましたが、関数名の途中に空白や*を含んではいけません。

>サブルーチン「move_boat」 が未定義です。⇒とりあえずコメントアウト
も直してありませんよ。私が言ったようには変えてありませんね。
 
move_man1をmove_man1andboatに書き換えたなら、MAINの中で呼んでいる
move_man1もmove_man1andboatに書き換えないとmove_man1は未定義に
なってコンパイルできません。結果エラーの個所は増えています。


192ポイント を手に入れた。

Name: さかまき  ..ぴよぴよ(786ポイント)   Date: 2010/07/08(木) 14:34   No:56314     
Title: Re:課題    
>move_man1は未定義に 
>なってコンパイルできません
コンパイルじゃなくリンクですね。


33ポイント を手に入れた。

Name: スキマ妖怪  ..かけだし(2,437ポイント)   Date: 2010/07/08(木) 16:55   No:56324     
Title: Re:課題    
こういう書き込みはしたくないんだけどなぁ…(看過できなかったので)
↓こっちでは、解決されたんですか?(マルチポストされてますか?)

http://oshiete.goo.ne.jp/qa/6019407.html


もし、違ってたらごめんなさいm(_ _)m


87ポイント を手に入れた。



Name: ルーニー  ..ぴよぴよ(10ポイント)   Date: 2010/07/08(木) 15:22   No:56315       
Title: バブルソート    
下のプログラムがなぜ降順で出力されるのか分かりません。不等号の向きが昇順になっているのに、どうして降順になるのかが理解できません。
ご教授お願いします。

  #include <stdio.h>
  #define MAX 10000
  int main (int argc, const char * argv[]) {
  int N,data[MAX],d[MAX],j,k,w,x,a;

  x=0;
  a=1;

  do{printf("学生番号を入力してください\n");
   scanf("%d",&N);

  if(N!=0){printf("得点を入力してください\n"); scanf("%d",&data[N]);}x++;}

  while(N!=0);

  for(j=0; j<x;j++){
  d[j]=data[j];}

  for(j=0; j<x;j++)
  
  {for(k=0;k<x-j-1;k++){

  if(d[k]>d[k+1]){
  w=d[k];
  d[k]=d[k+1];
  d[k+1]=w;}}}

  printf("昇順での整列結果\n");
  for(j=x-1;j>0;j--){
  printf("%d位 %d点\n",a,d[j]);a++;}


return 0;
}


10ポイント を手に入れた。


Name: ルーニー  ..ぴよぴよ(19ポイント)   Date: 2010/07/08(木) 15:33   No:56317 解決!     
Title: Re:バブルソート    
自己解決できました。

9ポイント を手に入れた。

Name: asd  ..上級者(21,123ポイント)   Date: 2010/07/08(木) 15:36   No:56318     
Title: Re:バブルソート    
>不等号の向きが昇順になっているのに、どうして降順になるのかが理解できません。 

最後のprintf文の添え字に注目してください。
そこにカギがあります。

  printf("昇順での整列結果\n");
  for(j=x-1;j>0;j--){
  printf("%d位 %d点\n",a,d[j]);a++;} 


添え字であるjはx-1から1まで(0より大きい間1ずつ減らしていく)変化しますので、
昇順に並べ替えた配列を逆順に出力しています。
(昇順の逆順は降順ですよね)

なのでfor文をfor(j=1;j<x;j++)にすると配列を先頭から表示していきますので、
昇順に表示されると思います。
----
自己解決されたようですが、どう自己解決したのかを書いておくと、
同じような問題で悩んでいる方のためになりますよ。


234ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(53,488ポイント)   Date: 2010/07/08(木) 16:07   No:56321     
Title: Re:バブルソート    
OKWave,教えてgooにもマルチポストしていたようなのでそちらで解決したのでしょう


35ポイント を手に入れた。



Name: トマト  ..初心者(6,570ポイント)   Date: 2010/07/07(水) 18:01   No:56225       
Title: 部分文字列を置き換えする方法    
IPアドレスを全て3文字づつにするやり方を教えてください

何度もお世話になり本当にその際はありがとうございました。

iso.3.6.1.2.1.4.22.1.2.1061.193.168.60.16 = Hex-STRING: 00 1B 8D CC 12 C2
iso.3.6.1.2.1.4.22.1.2.1061.193.168.61.178 = Hex-STRING: 00 24 EF 5A 1E F0

を以下に切り出す処理を入れています。
193.168.60.16,00 1B 8D CC 12 C2
193.168.61.178,00 24 EF 5A 1E F0

ですが、IPアドレスの不ぞろいな為「iso.3.6.1.2.1.4.22.1.2.1061.」があったら
193.168.60.16だけにするとの処理なのですが
必ずしも「iso.3.6.1.2.1.4.22.1.2.1061.」が一字一句同じなものがあまりないため
汎用的にするため、文字列の長さを同じにしたいのです。

「iso.3.6.1.2.1.4.22.1.2.1061.」
「iso.3.6.1.2.1.4.22.1.2.132.」
「iso.3.6.1.2.1.4.22.1.2.3.」とまちまちな為「192.」があったら

「193.168.60.16」-> 「193.168.060.016」
「193.168.61.178」-> 「193.168.061.178」
とする。
のようにするには、どうしたらいいのでしょうか?

大変申し訳ありませんが、もうずっと出来なくてなやんでしまいこちらに相談にきました
よろしくお願いいたします


77ポイント を落としてしまった。


Name: シエル  ..プログラマー(26,848ポイント)   Date: 2010/07/07(水) 18:53   No:56229     
Title: Re:部分文字列を置き換えする方法    
>>ですが、IPアドレスの不ぞろいな為「iso.3.6.1.2.1.4.22.1.2.1061.」があったら 
>>193.168.60.16だけにするとの処理なのですが 
>>必ずしも「iso.3.6.1.2.1.4.22.1.2.1061.」が一字一句同じなものがあまりないため 
>>汎用的にするため、文字列の長さを同じにしたいのです。 
>>「iso.3.6.1.2.1.4.22.1.2.1061.」 
>>「iso.3.6.1.2.1.4.22.1.2.132.」 
>>「iso.3.6.1.2.1.4.22.1.2.3.」とまちまちな為「192.」があったら 
>>「193.168.60.16」-> 「193.168.060.016」 
>>「193.168.61.178」-> 「193.168.061.178」 
>>とする。

この辺の意味が良く分かりません。

まあIPを3文字にして、頭に0をつけたいのであれば、
「.」を区切り位置として、フォーマット指定子を駆使すれば、何とかなるのではないでしょうか?


235ポイント を手に入れた。

Name: ぽこ  ..上級者(19,646ポイント)   Date: 2010/07/07(水) 20:00   No:56235     
Title: Re:部分文字列を置き換えする方法    
参考になるか分かりませんが、プログラム載せておきます。

#SNMP-Trapメッセージの解析と言ったほうが、伝わると思いますよ。

----hoge.c----
#include <stdio.h>

char oid[] = "iso.3.6.1.2.1.4.22.1.2.";

char * snmpTrapMsg[] = {
    "iso.3.6.1.2.1.4.22.1.2.1061.193.168.60.16 = Hex-STRING: 00 1B 8D CC 12 C2",
    "iso.3.6.1.2.1.4.22.1.2.1061.193.168.61.178 = Hex-STRING: 00 24 EF 5A 1E F0", 
    NULL,
};


int main()
{
    int offset = sizeof( oid ) - 1;
    int dummy = -1;
    int firstOctet = -1;
    int secondOctet = -1;
    int thirdOctet = -1;
    int forthOctet = -1;
    char ** p = snmpTrapMsg;
    
    for ( ; *p; p++ ) {
        sscanf( &(*p)[offset], "%d.%d.%d.%d.%d", &dummy, &firstOctet, &secondOctet, &thirdOctet, &forthOctet);
        printf("IP addres = %03d.%03d.%03d.%03d\n",firstOctet, secondOctet, thirdOctet, forthOctet);
    }
}


411ポイント を手に入れた。

Name: トマト  ..初心者(6,587ポイント)   Date: 2010/07/08(木) 09:44   No:56293     
Title: Re:部分文字列を置き換えする方法    
分かりにくくて申し訳ありません。

貰っている指示は、
iso.3.6.1.2.1.4.22.1.2.1061.193.168.60.16 = Hex-STRING: 00 1B 8D CC 12 C2
iso.3.6.1.2.1.4.22.1.2.1061.193.168.61.178 = Hex-STRING: 00 24 EF 5A 1E F1 
iso.3.6.1.2.1.4.22.1.2.9.193.168.60.16 = Hex-STRING: 00 1B 8D CC 12 C3
iso.3.6.1.2.1.4.22.1.2.1029.193.168.61.178 = Hex-STRING: 00 24 EF 5A 1E F2
iso.3.6.1.2.1.4.22.1.2.1030.193.168.60.16 = Hex-STRING: 00 1B 8D CC 12 C4
iso.3.6.1.4.1.3224.17.1.3.1.2.0 = IpAddress: 193.168.60.16 
iso.3.6.1.4.1.3224.17.1.3.1.3.0 = STRING: 00 1B 8D CC 12 C2
iso.3.6.1.2.1.4.22.1.2.4.193.168.60.16 = Hex-STRING: 00 1B 8D CC 12 C5

上記ログ情報を
193.168.60.16,00 1B 8D CC 12 C2
193.168.61.178,00 24 EF 5A 1E F1 
193.168.60.16,00 1B 8D CC 12 C3
193.168.61.178,00 24 EF 5A 1E F2
193.168.60.16,00 1B 8D CC 12 C4
193.168.60.16,00 1B 8D CC 12 C5
にする事です。
iso.3.6.1.4.1.3224.17.1.3.1.2.0 = IpAddress: 193.168.60.16 
iso.3.6.1.4.1.3224.17.1.3.1.3.0 = STRING: 00 1B 8D CC 12 C2
IPアドレスだけ、MACアドレスだけの情報は捨てる事。

だそうです。
今は、エクセルの置換みたいにしていますが、記述が多くてとんでもないプログラムになってしまいました。
どうしたらスムーズに処理できるのでしょうか。
何をどうしたら部分文字列の切り出しができるかわからない状態になってしまいました。

ぽこ さん、サンプルありがとうございました。
やってみます。

そして、
>#SNMP-Trapメッセージの解析と言ったほうが、伝わると思いますよ。 

アドバイスありがとうございます。
ログを渡されているだけなので、このデータは何ぞや って感じでした。


17ポイント を手に入れた。

Name: トマト  ..初心者(6,641ポイント)   Date: 2010/07/08(木) 13:07   No:56306     
Title: Re:部分文字列を置き換えする方法    
文字列の途中にある192.168.・・・
をみつけたら文字列から切り出す方法は何かないでしょうか?

申し訳ないですが、どなた様か知恵を貸してくださりませんでしょうか?


54ポイント を手に入れた。

Name: シエル  ..プログラマー(27,155ポイント)   Date: 2010/07/08(木) 13:08   No:56307     
Title: Re:部分文字列を置き換えする方法    
strstrを使ってみてはどうでしょうか

13ポイント を手に入れた。

Name: ideyan  ..中級者(9,960ポイント)   Date: 2010/07/08(木) 13:54   No:56311     
Title: Re:部分文字列を置き換えする方法    
ある程度文字列の書式が決まっているのだから
'=' を起点に '.' が4つ出てくるまで
長さをカウントしながら文字列を走査していって、
strncpyで一気にコピーするような愚直な方法じゃダメですかね?


11ポイント を手に入れた。

Name: トマト  ..初心者(6,656ポイント)   Date: 2010/07/08(木) 14:04   No:56312 解決!     
Title: Re:部分文字列を置き換えする方法    
strstrで切り出せました。
ありがとうございます! 


15ポイント を手に入れた。



Name:  ..ぴよぴよ(687ポイント)   Date: 2010/07/02(金) 14:02   No:55742       
Title: 横型から縦型への変換    
今、横型探索から縦型探索に書き換えているんですが…
どう書き換えたらよいかわかりません。

すみませんが…誰か教えていただけないでしょうか??

横型のプログラムです。
ちなみに言語はC言語です。

int main( void )
{
    struct Cell start_state;
    struct Cell open_list;
    struct Cell closed_list;
    struct Cell *temp;
    struct Cell *s;
    int i,j;

    /* リストの初期化(空リストにする)*/
    open_list.prev = open_list.next = &open_list;
    closed_list.prev = closed_list.next = &closed_list;
    start_state.prev = start_state.next = &start_state;

    /* 初期状態の設定 */
    start_state.state.wolf = 0;
    start_state.state.goat = 0;
    start_state.state.cabbage = 0;
    start_state.state.man = 0;

    /* OpenList に初期状態を追加 */
    push_back( &open_list, &start_state );

    j=0;
    /* OpenList が空になるまで、以下を繰り返し実行 */
    while( open_list.next != &open_list ) {
        j++;
        /* OpenList の先頭から状態を一つ取り出す */
        s = open_list.next;

        /* 途中経過を表示 */
        print_progress( s , &open_list , &closed_list , j );
        printf("\n");

        /* OpenList からsを削除 */
        remove_state( s );

        /* ClosedList の末尾に状態 s を追加 */
        push_back( &closed_list,s );

        /* 目標状態なら結果を出力して終了 */
        if ( succeeded(s) ) {
            print_result( s, &closed_list );
            break;
        }

        /* 禁止状態なら、状態 s を破棄し次に移る */
        if ( failed(s) ) {
            printf("%d%d%d%d は禁止状態 \n",
                s->state.man, s->state.wolf,
                s->state.goat, s->state.cabbage);
            continue;
        }

        for( i=0; i<4 ; i++) {
            /* 状態 s に可能なオペレーターを適用 */
            switch( i ) {  
                case 0:
                    temp = move_man( s ); /* 人を移動 */
                    break;
                case 1:
                    temp = move_wolf( s ); /* 狼を移動 */
                    break;
                case 2:
                    temp = move_goat( s ); /* 山羊を移動 */
                    break;
                case 3:
                    temp = move_cabbage( s ); /* キャベツを移動 */
                    break;
            }
            /* OpenListの更新(横型探索)*/
            if ( find( &open_list, temp ) == &open_list
                && find( &closed_list, temp ) == &closed_list )
                /* OpenList、ClosedListに無ければOpenListの末尾に追加 */
                push_back( &open_list, temp );
        }
    }
    return( 0 );
}


687ポイント を手に入れた。


Name:  ..ぴよぴよ(709ポイント)   Date: 2010/07/02(金) 14:03   No:55743     
Title: Re:横型から縦型への変換    
プログラムは横型で、これを縦型にするために書き換えたいんです。

22ポイント を手に入れた。

Name: ookami  ..プログラマー(31,038ポイント)   Date: 2010/07/02(金) 14:23   No:55745     
Title: Re:横型から縦型への変換    
私がちゃんと読めていないだけかもしれませんが、

Cell というのは晶さんが定義されたクラスで、Listか何かを継承しているのでしょうか。
見た感じ、パスがnextとprevしか無いように見えますが、
縦型か横型かというのは、ノード間が複数のパスで繋がっている場合なのではないでしょうか...?

トンチンカンなことを言っていたらすみません...


88ポイント を手に入れた。

Name:  ..かけだし(1,255ポイント)   Date: 2010/07/02(金) 14:28   No:55746     
Title: Re:横型から縦型への変換    
ookamiさんへ

Cellというのは、私が定義したクラスです。
Listの処理として使っています。
使い方は以下のプログラムです。

/* OpenList、ClosedList */
struct Cell {
    struct Cell *next;  /* リスト中の次の状態へのポインタ */
    struct Cell *prev;  /* リスト中の前の状態へのポインタ */
    struct Cell *path;  /* 親状態を指すポインタ */
    struct State state; /* 状態を表す変数 */
};

/* リスト処理 */
/* リストの先頭に追加 */
void push_front( struct Cell *l, struct Cell *n )
{
    n->prev = l;
    n->next = l->next;
    l->next->prev = n;
    l->next = n;
}

/* リストの末尾に追加 */
void push_back( struct Cell *l, struct Cell *n )
{
    n->prev = l->prev;
    n->next = l;
    l->prev->next = n;
    l->prev = n;
}

/* OpenListから状態を削除 */
void remove_state( struct Cell *n )
{
    n->prev->next = n->next;
    n->next->prev = n->prev;
}

/* リスト中に同じ状態があるか判定 */
struct Cell *find( struct Cell *l, struct Cell *n )
{
    struct Cell *p;
    p=l->next;
    while ( p!=l) {
        if ( p->state.man==n->state.man &&
            p->state.wolf==n->state.wolf &&
            p->state.goat==n->state.goat &&
            p->state.cabbage==n->state.cabbage )
            return ( p );  /* 見つかった状態へのポインタを返す */
        p=p->next;
    }
    return ( l );  /* リストの先頭へのポインタを返す */
}

/* 目標状態か判定 */
int succeeded( struct Cell *s )
{
    if (s->state.man==1 && s->state.wolf==1
        && s->state.goat==1 && s->state.cabbage==1)
        return( 1 );
    else
        return( 0 );
}



546ポイント を手に入れた。

Name: ookami  ..プログラマー(31,299ポイント)   Date: 2010/07/02(金) 14:38   No:55748     
Title: Re:横型から縦型への変換    
晶さんが「横型検索」とおっしゃっているのは、find関数のことですよね?

見た感じ、Cellクラスは「双方向リスト」なので、やはり、横型検索か縦型検索か、ということにはならないのではないでしょうか。

念のため、言葉の確認を...(いや 私が勘違いしているだけかもしれませんので)
http://ja.wikipedia.org/wiki/%E5%B9%85%E5%84%AA%E5%85%88%E6%8E%A2%E7%B4%A2
>幅優先探索
>「横型探索」とも言われる。

↑仰っている「横型検索」は、これですよね?


全体としてどんなことをしようとしていて、
データ構造はどんな感じで(たぶんイラストがあった方がよい)、
どんな問題があるか(問題があるからロジックを変更しようとしているのですよね?)
...あたりを書いてもらえますか?


145ポイント を手に入れた。

Name:  ..かけだし(1,535ポイント)   Date: 2010/07/05(月) 12:28   No:56003     
Title: Re:横型から縦型への変換    
返事遅くなってすみません。
最初の方から説明しますね。
問題は川渡りの問題です。
ある人がオオカミとヤギとキャベツをボートで川の対岸に渡さなければならない。
ボートには人とオオカミ、人とヤギ、人とキャベツ、あるいは人が1人しか乗る場所はない。
また、人がいないとオオカミはヤギをヤギはキャベツを食べてしまう。
みんなで渡りきるにはどう渡ればいいか??

添付は横型探索アルゴリズムをC言語を用いたプログラムです。

この川渡りの問題で縦型探索アルゴリズムになるように書き換えたいんですが…
自分でOpenListの更新の部分を作り替えたらOpenListの更新がうまくできませんでした。


280ポイント を手に入れた。

Name: ookami  ..プログラマー(33,181ポイント)   Date: 2010/07/05(月) 15:58   No:56013     
Title: Re:横型から縦型への変換    
むむむ... なるほど...。

最初は、データ構造とfind関数に着目して、「横型検索などではないのでは」と言ったのですが、
全体を見ると、たしかに「横型検索」になっている気がしてまいりました。
# find関数は、「線形検索」ですね。

確認ですが、

 Cell: 人・狼・ヤギ・キャベツがそれぞれ右にいるか左にいるかという状態を表す要素で、
    かつ、双方向リストのポインタと、親状態へのポインタを持つクラス。

 open_list:すでに見つかった、禁止状態でない(何かが何かを食べない)Cellのリスト

 closed_list:すでに見つかった、禁止状態のCellのリスト

という使い方でよろしいでしょうか。
# Cell のリスト構造がちょっち複雑なんですね。
# 双方向リスト と 木構造を合わせ持っているという...
# で、木構造は結果の表示のみに使っており、
# 探索には関係ないようですね。

「再帰」は使っていいでしょうか?
(使っていいテクニックに制限はありますか?)


261ポイント を手に入れた。

Name: ookami  ..プログラマー(33,342ポイント)   Date: 2010/07/05(月) 16:26   No:56016     
Title: Re:横型から縦型への変換    
...もしかして、

            if ( find( &open_list, temp ) == &open_list
                && find( &closed_list, temp ) == &closed_list )
                push_back( &open_list, temp );

の、
push_back を push_front に変えるだけでよかったりして^^;
ちゃんと試してないのでアレですが。


161ポイント を手に入れた。

Name:  ..かけだし(1,472ポイント)   Date: 2010/07/06(火) 19:43   No:56156     
Title: Re:横型から縦型への変換    
返事遅くなってすみません。
私もpush_back を push_front に変えることはしたんですが、それだけだと探索が最初の一つしかできなくて…


63ポイント を落としてしまった。

Name:  ..かけだし(1,524ポイント)   Date: 2010/07/06(火) 20:58   No:56162     
Title: Re:横型から縦型への変換    
 /* OpenListの更新(横型探索)*/
if ( find( &open_list, temp ) == &open_list
      && find( &closed_list, temp ) == &closed_list )
/* OpenList、ClosedListに無ければOpenListの末尾に追加 */
           push_back( &open_list, temp ); 

これは「新しく得られた各状態Pについて、次を実行する。
PがClosedListかつOpenListに無ければ、PをOpenListの末尾に追加する」というプログラムです。

ここを縦型探索にするため、「(1)PがClosedListに入っていない。
(2)OpenListに重複した状態があれば前に追加された方を削除する。
(3)PをOpenListの先頭に追加する」という感じに書き換えたいんです。

使ってはいけないテクニックなどは得にありません。



52ポイント を手に入れた。

Name: ookami  ..プログラマー(34,117ポイント)   Date: 2010/07/07(水) 11:51   No:56206     
Title: Re:横型から縦型への変換    
push_back を push_front に変えると、
以下のような結果になりましたが、
これは期待した結果ではないということでしょうか?

Open List = 0000
Closed List =
1: Testing 0000

Open List = 1001 1010 1100 1000
Closed List = 0000
2: Testing 1001

1001 は禁止状態
Open List = 1010 1100 1000
Closed List = 0000 1001
3: Testing 1010

Open List = 0010 1100 1000
Closed List = 0000 1001 1010
4: Testing 0010


(以下省略)

-- 追記

走査の順番を図にしてみました。
 編集済み


232ポイント を手に入れた。

Name:  ..かけだし(1,535ポイント)   Date: 2010/07/08(木) 00:09   No:56273     
Title: Re:横型から縦型への変換    
はい。
どうやったんですか??


11ポイント を手に入れた。

Name: ookami  ..プログラマー(34,797ポイント)   Date: 2010/07/08(木) 10:50   No:56297     
Title: Re:横型から縦型への変換    
56003 で示されていたソースについて、
56016 で書いたとおり、

            if ( find( &open_list, temp ) == &open_list 
                && find( &closed_list, temp ) == &closed_list ) 
                push_back( &open_list, temp ); 

の、 
push_back を push_front に変えただけです。
が...
> 私もpush_back を push_front に変えることはしたんですが、
とのことだったので、既に試されているのだろうと思い、
「これは期待した結果ではないということでしょうか?」という...。

えーと。
> 探索が最初の一つしかできなくて
という所が問題なんでしょうか。


37ポイント を手に入れた。

Name:  ..ぴよぴよ(74ポイント)   Date: 2010/07/08(木) 12:39   No:56305 解決!     
Title: Re:横型から縦型への変換    
回答ありがとうございます。
私が他の部分のプログラムもイジってたみたいでした。
ookamiさんの言うとおりにしたら解決できました。
本当にありがとうございました。


74ポイント を手に入れた。



Name: 迷子の子猫  ..ぴよぴよ(151ポイント)   Date: 2010/07/05(月) 23:59   No:56070       
Title: 学校の課題[RLC回路]でわからないところがあります    
「回路において、V0=10V,R=100Ω,L=1mFとし、t<0においてコンデンサー内に電荷は蓄積されていないもの(Vc=0)とする。t=0でスイッチを電源側に入れると、電流が流れコンデンサーの両端の電位差Vc(t)は、充電の結果上昇する。Vc(t)が7Vになったら、スイッチを切り、別の方に接続しする。今度は放電されてVc(t)が5Vになったら、スイッチを再び電源側に戻して、充電する。以下、これを繰り返す。」という課題が出ました。

自分なりにソースプログラムをつくって見たのですがエラーが出ました。何がおかしいのか教えてください。

#include <stdio.h>
#include <math.h>

main()
{
    double L=1.0,C=0.001,R=100.0,dt=0.001;
    double V0=10.0,I=0.0,V3=0.0,t=0.0;
    printf( "t    i    V3 \n" );
    for ( t=0.0;t<0.25;t=t+dt );
    {
        V3=V3+( i*dt/C );
        i=i+( V0-R*i-V3 )"dt/L;
        if( V3 > 7.0 );
            V0=0.0;
        else if( V3 < 5.0 );
            V0=10.0;
        printf( %f %f %f\n",t,i,V3);
    }
}


151ポイント を手に入れた。


Name: パコネコ  ..中級者(10,342ポイント)   Date: 2010/07/06(火) 00:02   No:56071     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
printf( %f %f %f\n",t,i,V3); 
とりあえず1つ


32ポイント を落としてしまった。

Name: box  ..ハッカー(155,229ポイント)   Date: 2010/07/06(火) 00:08   No:56073     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
> 自分なりにソースプログラムをつくって見たのですがエラーが出ました。何がおかしいのか教えてください。

何をしたときにどんなエラーが出たか、具体的に書きましょう。
質問が抽象的だと、具体的な答えは返ってきません。


30ポイント を手に入れた。

Name: パコネコ  ..中級者(10,365ポイント)   Date: 2010/07/06(火) 00:09   No:56074     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
回路苦手なんでわからないですがLは1.0であってるんですか?


23ポイント を手に入れた。

Name: 迷子の子猫  ..ぴよぴよ(363ポイント)   Date: 2010/07/06(火) 00:26   No:56080     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
すいません。エラーの内容を書きますと、

c 11: 未定義のシンボル i(関数 main )
c 12: ステートメントにセミコロン(;)がない(関数 main )
c 12: 文字列または文字定数が閉じていない(関数 main )
c 15: else の位置が誤っている(関数 main )
15: コードは効果を持たない(関数 main )
c 17: 式の構文エラー(関数 main )
c 17: 文字列または文字定数が閉じていない(関数 main )
19: 関数は値を返すべき(関数 main )
19: 'I' に代入した値は使われていない(関数 main )
19: 'V0' に代入した値は使われていない(関数 main )
19: 'R' に代入した値は使われていない(関数 main )
19: 'C' に代入した値は使われていない(関数 main )
19: 'L' に代入した値は使われていない(関数 main )

と出ます。
コンパイラはBorland C++ Compiler 5.5を使っています。


212ポイント を手に入れた。

Name: fatens  ..上級者(15,674ポイント)   Date: 2010/07/06(火) 00:32   No:56082     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
>c 11: 未定義のシンボル i(関数 main ) 

そのままです。
iが定義されていないので、定義してもう一度コンパイルしてみてください。

とりあえず上から順番に解決していきましょう。
 編集済み


35ポイント を手に入れた。

Name: パコネコ  ..中級者(10,411ポイント)   Date: 2010/07/06(火) 00:33   No:56083     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
とりあえずiと(I?l?)間違えてませんか?

10ポイント を手に入れた。

Name: パコネコ  ..中級者(10,428ポイント)   Date: 2010/07/06(火) 00:35   No:56084     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
for文やif文の後の;(セミコロン)いらないんじゃないですか?

17ポイント を手に入れた。

Name: シエル  ..上級者(23,115ポイント)   Date: 2010/07/06(火) 00:35   No:56085     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
main関数の戻り値の設定がない。
if文elseif文の後ろにセミコロンがあってそこで終了してる。
変数iが宣言されてない。

↓はそのままその変数が使われないという意味

19: 'I' に代入した値は使われていない(関数 main ) 
19: 'V0' に代入した値は使われていない(関数 main ) 
19: 'R' に代入した値は使われていない(関数 main ) 
19: 'C' に代入した値は使われていない(関数 main ) 
19: 'L' に代入した値は使われていない(関数 main ) 


202ポイント を落としてしまった。

Name: 迷子の子猫  ..ぴよぴよ(707ポイント)   Date: 2010/07/06(火) 00:57   No:56090     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
ソースを下のように変えて見たのですが、エラーがまだでます。何分プログラミングにうとい者です。よろしくお願いします。

#include <stdio.h>
#include <math.h>

main()
{
    double L=1.0,C=0.001,R=100.0,dt=0.001;
    double V0=10.0,i=0.0,V3=0.0,t=0.0;
    printf( "t    i    V3 \n" );
    for ( t=0.0;t<0.25;t=t+dt );
    {
        V3=V3+( i*dt/C );
        i=i+( V0-R*i-V3 )"dt/L;
        if( V3 > 7.0 )
            V0=0.0;
        else if( V3 < 5.0 )
            V0=10.0;
        printf( %f %f %f/n",t,i,V3);
    }
}

エラーは

c 12: ステートメントにセミコロン(;)がない(関数 main )
c 12: 文字列または文字定数が閉じていない(関数 main )
c 15: else の位置が誤っている(関数 main )
c 17: 式の構文エラー(関数 main )
c 17: 文字列または文字定数が閉じていない(関数 main )
19: 関数は値を返すべき(関数 main )
19: 'L' に代入した値は使われていない(関数 main )

とでます。


344ポイント を手に入れた。

Name: パコネコ  ..中級者(10,587ポイント)   Date: 2010/07/06(火) 01:00   No:56091     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
for ( t=0.0;t<0.25;t=t+dt ); 
    {
このセミコロンはいりません(;)。


40ポイント を手に入れた。

Name: パコネコ  ..中級者(10,615ポイント)   Date: 2010/07/06(火) 01:02   No:56092     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
いらないかもですが
void main(void)
{
のほうがいい気がします・・・


28ポイント を手に入れた。

Name: 迷子の子猫  ..ぴよぴよ(744ポイント)   Date: 2010/07/06(火) 01:09   No:56093     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
void main(void)とfor ( t=0.0;t<0.25;t=t+dt )にしたところ

19: 関数は値を返すべき(関数 main )

が消えました。



37ポイント を手に入れた。

Name: へろり  ..上級者(17,755ポイント)   Date: 2010/07/06(火) 01:12   No:56094     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
>void main(void) 
>{ 
>のほうがいい気がします・・・

あまり重隅をつつくようなまねはしたくないのですが一応。

最近の規格は知りませんが、ANCI-C では main() 関数は

int main(void)
int main(int argc, char *argv[])

の2つのいずれかと決まっています。
それ以外の方法は実装依存になります。


私も掲示板では if(....){} なんて書いたりしますから、アレですけど、あえて void main(void) と書かせるのはどうかと。


153ポイント を手に入れた。

Name: パコネコ  ..中級者(10,634ポイント)   Date: 2010/07/06(火) 01:12   No:56095     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
 i=i+( V0-R*i-V3 )"dt/L; 
"があります。


19ポイント を手に入れた。

Name: パコネコ  ..中級者(10,682ポイント)   Date: 2010/07/06(火) 01:13   No:56096     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
そうですか…すいませんでした。
int main(void) 
int main(int argc, char *argv[]) 

どっちかに治しといてください


48ポイント を手に入れた。

Name: パコネコ  ..中級者(10,642ポイント)   Date: 2010/07/06(火) 01:16   No:56097     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
一回書いたけどprintf( %f %f %f/n",t,i,V3); 
"が足りていません


40ポイント を落としてしまった。

Name: 迷子の子猫  ..かけだし(1,038ポイント)   Date: 2010/07/06(火) 01:46   No:56098     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
回答してもらった通りにソースを変えました。エラーの数が減りました。後少しだと思いますので、ご協力お願いします。

#include <stdio.h>
#include <math.h>

int main(void)
{
    double L=1.0,C=0.001,R=100.0,dt=0.001;
    double V0=10.0,i=0.0,V3=0.0,t=0.0;
    printf( "t    i    V3 \n" );
    for ( t=0.0;t<0.25;t=t+dt )
    {
        V3=V3+( i*dt/C );
        i=i+( V0-R*i-V3 )dt/L;
        if( V3 > 7.0 )
            V0=0.0;
        else if( V3 < 5.0 )
            V0=10.0;
        printf(" %f %f %f/n",t,i,V3);
    }
}

エラーの内容は下の通りです。

エラー E2379 kadai3-2.c 12: ステートメントにセミコロン(;)がない(関数 main )
警告 W8070 kadai3-2.c 19: 関数は値を返すべき(関数 main )
警告 W8004 kadai3-2.c 19: 'L' に代入した値は使われていない(関数 main )


294ポイント を手に入れた。

Name: へろり  ..上級者(17,974ポイント)   Date: 2010/07/06(火) 01:57   No:56099     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
>エラー E2379 kadai3-2.c 12: ステートメントにセミコロン(;)がない(関数 main ) 
>警告 W8070 kadai3-2.c 19: 関数は値を返すべき(関数 main ) 
>警告 W8004 kadai3-2.c 19: 'L' に代入した値は使われていない(関数 main )

1番目と3番目は関連しています。

i=i+( V0-R*i-V3 )dt/L; 

の行ですね。コンパイラは ...V3)までしか解釈出来ません。 ")" の後dtの前に演算子が必要です。
そのために、あとに続く/L;が読み飛ばされています。

それが1番目と3番目のエラーです。

2番目のエラーは、そのままです。 main() 関数の最後にreturn 0;とでもしてください。
OS環境下ではOSに値を返すというのはとても大切な事です。


219ポイント を手に入れた。

Name: 迷子の子猫  ..かけだし(1,204ポイント)   Date: 2010/07/06(火) 02:13   No:56100     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
return 0; を付けたら2番目のエラーが消えました。

本当に申し訳ないのですが、

i=i+( V0-R*i-V3 )dt/L; を i=i + ( V0-R*i-V3 ) * dt/L; に変えたところ


警告 W8004 kadai3-2.c 7: 't' に代入した値は使われていない(関数 main )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

というエラーがでてしまいました。
演算子は何を入れればよろしいですか


166ポイント を手に入れた。

Name: へろり  ..上級者(18,234ポイント)   Date: 2010/07/06(火) 02:24   No:56101     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
>警告 W8004 kadai3-2.c 7: 't' に代入した値は使われていない(関数 main ) 
>Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland 

>というエラーがでてしまいました。


BCCってホントおしゃべりですよね。

double V0=10.0,i=0.0,V3=0.0,t=0.0; 

と、宣言時に0.0を代入してますね。そして

for ( t=0.0;t<0.25;t=t+dt )

と、宣言時に代入された0.0が使われる事なく、for()文内でまた0.0を代入しています。 これが原因です。

このエラーというか警告は無視してもいいんですが、とりあえず宣言時に初期化しないことで回避出来ます。
もしくは、for(;t<0.25;t=t+dt) とするかです。


>演算子は何を入れればよろしいですか

回路の事はさっっっっぱり解りませんので解りません。


260ポイント を手に入れた。

Name: 迷子の子猫  ..かけだし(1,303ポイント)   Date: 2010/07/08(木) 10:15   No:56295 解決!     
Title: Re:学校の課題[RLC回路]でわからないところがあります    
返信が遅れてすみません。

for ( t=0.0;t<0.25;t=t+dt ) を for(;t<0.25;t=t+dt)  に変え、
i=i+( V0-R*i-V3 )dt/L; も i=i + ( V0-R*i-V3 ) * dt/L; に変えたところ

うまくできました。

回答してくださった皆さんありがとうございます。


99ポイント を手に入れた。



Name: たすけてぇ><;  ..ぴよぴよ(478ポイント)   Date: 2010/07/07(水) 21:59   No:56252       
Title: 学校の課題で悩んでいます    
改めて自力で試みて、やはり分からなかったので質問致しますです。

自分に出された課題で、三角形やダイヤ型といった実行画面例をfor文を使って解いたのですが、
画像の実行例題7・8は法則がまったくわからなくて困っています><;

関数の定義など、基礎の基礎は一応理解しているのですがこの2問はどうしても解けません。

ヒントだけでも全然構いません。解法の道筋だけでも教えて頂けたら幸いに思います;;

どうかよろしくお願いいたします<(_ _)>

 編集済み


143ポイント を手に入れた。


Name: パコネコ  ..中級者(11,142ポイント)   Date: 2010/07/07(水) 22:04   No:56254     
Title: Re:学校の課題で悩んでいます    
数字を入力した後どうするんですか?


14ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,231,245ポイント)   Date: 2010/07/07(水) 22:25   No:56257     
Title: Re:学校の課題で悩んでいます    
> たすけてぇ><;さん

こんにちは。
最近似たような質問が多いですね。

こちらで同じような質問に答えているので参考にして下さい。
http://www.play21.jp/board/formz.cgi?action=res&resno=55861&page=&id=dixq&rln=56255

私が書いたプログラムをいじれば大抵の図形には対応出来ると思います。

とりあえずどういう規則性があるか考えてみましょう。
まず7番ですが、4本の線が交差していますよね。
なので4つの一次直線を判定式にいれてやればよさそうですね。


177ポイント を手に入れた。

Name: パコネコ  ..中級者(11,536ポイント)   Date: 2010/07/07(水) 23:15   No:56264     
Title: Re:学校の課題で悩んでいます    
意味があるかわかりませんが、表を書いてみます。
例題7

0 @ 2 @ 2 @ 0
1 @ 1 @ 1 @ 1
0 0 2 B 2 0 0
0 0 0 F 0 0 0
0 0 2 B 2 0 0
1 @ 1 @ 1 @ 1
0 @ 2 @ 2 @ 0
丸がついてるのが、*の数です。
それ以外が、空欄の数です。
これの通りにするとループを7個も使うようです…
数字の入力でどう変わるのかにもいりますが…


187ポイント を手に入れた。

Name: フリオ  ..プログラマー(34,164ポイント)   Date: 2010/07/07(水) 23:27   No:56266     
Title: Re:学校の課題で悩んでいます    
 
 入力した数字(数値)と図形との関係はどうなっているのでしょうか。


34ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,231,469ポイント)   Date: 2010/07/07(水) 23:30   No:56267     
Title: Re:学校の課題で悩んでいます    
> パコネコさん

入力した数値は大きさでしょう。
横、縦の長さだと思われます。
入力した数が横幅になるのか、X2が幅になるのかは解りませんが、2から入力できる所をみるとX2かもしれませんね。
しかし偶数ではちゃんと表示できそうにないですねこの図形。


後、for文は2個で出来ますよ。
無理すれば1個でも出来ますし。

x,yの格子点を二重ループで通らせ、判定式を満たせば印を付ける方法で何にでも対応出来そうです。


96ポイント を手に入れた。

Name: たすけてぇ><;  ..ぴよぴよ(587ポイント)   Date: 2010/07/07(水) 23:32   No:56268     
Title: Re:学校の課題で悩んでいます    
> パコネコさん
2〜9のどれかをいれると入れた数に対応する図形がでてくるものです。

> 管理人様
1時間ほど考えてみたのですが、途中でパニックを起こしてしまいました><;

関数をどう用いればいいのか、基本的なことで申し訳ないのですがご教授いただけますでしょうか;;


109ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,231,523ポイント)   Date: 2010/07/07(水) 23:37   No:56269     
Title: Re:学校の課題で悩んでいます    
> 2〜9のどれかをいれると入れた数に対応する図形がでてくるものです。

どう対応するのですか?

> 途中でパニックを起こしてしまいました><;

必要な説明は全部書いてあると思うのですが、どこまで解っていてどこが解らないですか?


54ポイント を手に入れた。

Name: パコネコ  ..中級者(11,723ポイント)   Date: 2010/07/07(水) 23:37   No:56270     
Title: Re:学校の課題で悩んでいます    
でもそれって、一旦配列に入れて、それの通りに描写させるということでしょうか?
たとえば
if(x==y)map[x][y]=1;
else map[x][y]=0;
みたいな感じで…
==================
>x,yの格子点を二重ループで通らせ、判定式を満たせば印を付ける方法で何にでも対応出来そうです。
これについてです。 編集済み


75ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,231,560ポイント)   Date: 2010/07/07(水) 23:39   No:56271     
Title: Re:学校の課題で悩んでいます    
> パコネコさん

プログラムは上で書いたリンク先(http://www.play21.jp/board/formz.cgi?action=res&resno=55861&page=&id=dixq&rln=56255#55924)に書いてありますよ。


37ポイント を手に入れた。

Name: パコネコ  ..中級者(11,790ポイント)   Date: 2010/07/07(水) 23:54   No:56272     
Title: Re:学校の課題で悩んでいます    
前に読みましたけど…要はシューティングの当たり判定のようなものだと思ってます。
特定の条件であたり判定の形が変わると言うだけですよね。




67ポイント を手に入れた。

Name: パコネコ  ..中級者(12,397ポイント)   Date: 2010/07/08(木) 00:43   No:56277     
Title: Re:学校の課題で悩んでいます    
8番作ってみました。
(ゲームのつもりで)
穴を掘る感じで…多分課題には使えないけど(無駄が多そう)
#include<stdio.h>
void main(void)
{
    int x,y;
    int map[11][11];
    int MAX=9;
    int muki=1;//0上、1右、2下、3左

    printf("5〜9までの奇数を入力してください");
    scanf("%d",&MAX);
//すべてを*に
    for(x=0;x<MAX+2;x++){
        for(y=0;y<MAX+2;y++){
            map[x][y]=1;
        }
    }
//いちばん外を空欄に
    for(x=0;x<MAX+2;x++){
        map[x][0]=0;
        map[x][MAX+1]=0;
        map[0][x]=0;
        map[MAX+1][x]=0;
    }
muki=1;
x=1;
y=2;
    for(;;){
        map[x][y]=0;
        if(muki==0){
            if(map[x][y-2]==0)muki++;
            else y--;
        }
        else if(muki==1){
            if(map[x+2][y]==0)muki++;
            else x++;
        }
        else if(muki==2){
            if(map[x][y+2]==0)muki++;
            else y++;
        }
        else if(muki==3){
            if(map[x-2][y]==0)muki++;
            else x--;
        }
        if(3<muki)muki=0;
        if(map[x][y-2]==0 && map[x+2][y]==0){
            if(map[x][y+2]==0 && map[x-2][y]==0){
                map[x][y]=0;
                break;
            }
        }
    }

//描写
    for(x=0;x<MAX+2;x++){
        for(y=0;y<MAX+2;y++){
            if(map[y][x]==0)printf(" ");
            else printf("*");
        }
        printf("\n");
    }



}
大きさってこんな感じですか?
入力7
横7 縦7 の正方形から穴をあけました。
参考までに…
==========================
奇数しかできません。
しかも5から… 編集済み


607ポイント を手に入れた。

Name: ISLe  ..入門者(4,345ポイント)   Date: 2010/07/08(木) 01:01   No:56279     
Title: Re:学校の課題で悩んでいます    
> たすけてぇ><;さん

添付画像はどんな数のときの実行例なのですか?
文章が途中で切れてるから分からないのですよ。


30ポイント を手に入れた。

Name: へろり  ..上級者(20,369ポイント)   Date: 2010/07/08(木) 08:53   No:56292     
Title: Re:学校の課題で悩んでいます    
8番の奴です。

一応偶数も表示出来るはずです。 これでいいのか解りませんが。

#include <stdio.h>

#define MAX        100

int main(void)
{
    char buf[MAX][MAX] = {1};
    int mass, dire = 0;
    int x = 0, y = 0, c = 0;

    scanf("%d", &mass);

    while(c++ < mass){
        switch(dire){
            case 0: while(x == mass - 2 || x < mass - 2 && !buf[x + 2][y]) buf[x += 1][y] = 1; dire++; break;
            case 1: while(y == mass - 2 || y < mass - 2 && !buf[x][y + 2]) buf[x][y += 1] = 1; dire++; break;
            case 2: while(x == 1 || x > 0 && !buf[x - 2][y]) buf[x -= 1][y] = 1; dire++; break;
            case 3: while(y == 1 || y > 0 && !buf[x][y - 2]) buf[x][y -= 1] = 1; dire = 0; break;
        }
    }

    for(y = 0;y<mass;y++){
        for(x = 0;x<mass;x++){
            printf("%s", buf[x][y] ? "*" : " ");
        }
        printf("\n");
    }

    return 0;
}





378ポイント を手に入れた。



Name: altupuru  ..ぴよぴよ(223ポイント)   Date: 2010/07/07(水) 01:27   No:56188       
Title: iPhoneアプリに関して    
板違いな気もしますが、以前、Androidに関する質問等も
出ていたようなので質問させてください。

私は現在、iPhoneのアプリを制作しようと、Mac&iPhoneの購入を
検討しているところなのですが、Macで制作したアプリを
自分のiPhoneに入れるには、どのような方法があるでしょうか?

通信料を消費せずに入れることが可能かどうか?が、
気になっているのですが。

また、iPhone関連のプログラミングの情報やBBS
等、参考になりそうなものがあれば、ご紹介頂けると幸いです。

以上、よろしくお願い致します。


223ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(556,423ポイント)   Date: 2010/07/07(水) 01:47   No:56189     
Title: Re:iPhoneアプリに関して    
>自分のiPhoneに入れるには、どのような方法があるでしょうか?
 充電に使う USBケーブルを Macにさして Xcodeや iPhone構成ユーティリティなどから転送します。
 なので実機へのアプリの転送に通信料はかかりません。
 ただ、転送するには iPhone Developer Programへの加入が必要です。



>参考になりそうなものがあれば
 とりあえず、基本ということで。

iPhone Dev Center - Apple Developer
http://developer.apple.com/iphone/index.action
日本語訳ドキュメント
http://developer.apple.com/jp/iphone/library/japanese.html


連載:目指せ!iPhoneアプリ開発エキスパート|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/iphone

いまさら聞けないiPhone/iPadアプリの作り方の基礎(1/4) - @IT
http://www.atmarkit.co.jp/fwcr/design/tool/iphonesdk01/01.html
iPhone開発。まずはサンプルを動かしてみよう − @IT
http://www.atmarkit.co.jp/fwcr/design/benkyo/iphone02/01.html

iPhone/開発環境の構築 - DIGIらいふ 〜COOLに行こう!〜
http://digilife.bz/wiki/index.php?iPhone%2F%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89


iphone_dev_jp (iphone_dev_jp) on Twitter
http://twitter.com/iphone_dev_jp

開発/マーケティング:iPhoneBBS
http://jp.forum.appbank.net/category/t_dev



530ポイント を手に入れた。

Name: altupuru  ..ぴよぴよ(147ポイント)   Date: 2010/07/07(水) 23:12   No:56263 解決!     
Title: iPhoneアプリに関して    
Justyさん、レスありがとうございます。

参考サイト等、確認させていただきました。
通信料はかからないけど、登録料が10800円かかるんですね。
ちょっとびっくりしましたが、しょうがないので、登録してみよと思います。

ありがとうございました。


76ポイント を落としてしまった。

Name: Justy  ..伝説なるハッカー(556,518ポイント)   Date: 2010/07/08(木) 01:56   No:56283     
Title: Re:iPhoneアプリに関して    
>登録料が10800円かかるんですね
 しかもこれ年間ですしね。

 言語もちょっと特殊ですし機材も含め安くはないので、じっくり本とか書籍とかで調べて
いけそうでしたら機材購入&登録することをお勧めします。


95ポイント を手に入れた。



Name: あくあ  ..ぴよぴよ(481ポイント)   Date: 2010/07/04(日) 00:04   No:55861       
Title: ダイヤ作成    
はじめまして。
初投稿になります。
早速ですが、先日学校の課題で*を使って三角形・逆三角形・三角旗・ダイヤ・六角形・星型を表示させなさいというのが出ました。
三角旗までは自力で出来たのですが、ダイヤで詰んでいます。
最初に入力をさせてその数を辺にして表示するという感じです。
おそらくダイヤだと入力5で
  *  
 ***
*****
 ***
  *
こんな感じに出ればOKだと思います。
コンバイラ?とかよく分からないのですが、とりあえずOSは7で、Visual Studio2008のcppファイルを使ってます。
自分で書いてみたのですがエラーコードが出て、どこが間違っているのか分からないのでご教授頂けると嬉しいです。以下自分で書いたもの

#include <stdio.h>
void daiya(int);
void main(void)
{
    int cnt1, cnt2, n;
    scanf("%d",&n);
    for(cnt1 = 1; cnt1 <= n; cnt1++)
    {
        for(cnt2 = 1; cnt2 <= n*2; cnt2++)
        {
            if(cnt2 <= n-cnt1 || cnt2 >= n+cnt1)
            {
                printf(" ");
            }else{
                printf("*");
            }
        }
        printf("\n");
    daiya(n);
}
void daiya(int a)
{
    int cnt3, cnt4;
    for(cnt3 = a-1; cnt3 > 0; cnt3--)
    {
        for(cnt4 = 1; cnt4 <= a*2; cnt4++)
        {
            if(cnt4 <= a-cnt3 || cnt4 >= a+cnt3)
            {
                printf(" ");
            }else{
                printf("*");
            }
        }
        pritnf("\n");
    }
    return;
}

以下エラーコード
error C3872: '0x3000': この文字を識別子で使用することは出来ません
error C4430: 型指定子がありません - int と仮定しました。 メモ: C++ は int を既定値としてサポートしていません
error C3861: 'daiya': 識別子が見つかりませんでした

の3つです。
入力ミスもしくは掻き方が違っていたらご指摘下さい。
ちなみに自分は関数に関してはまだ何となくしか分かっておらず、そのため関数名は適当に付けました。
今まで見た事の無いエラーコードなのでどうしたらいいのか分かりません。
誰か教えて頂けると助かります。
課題の期限は7/9です。

長文失礼しましたm(_ _)m


481ポイント を手に入れた。


Name: パコネコ  ..初心者(6,366ポイント)   Date: 2010/07/04(日) 00:29   No:55865     
Title: Re:ダイヤ作成    
前まったく(ほとんどかな?)同じ課題持ってきた人いたよ!
☆せっかく作ったのに無駄にならなくてよかった。
と思ったけど、めんどくさい書き方してる…指定があったのかな?
ワイ、サブ苦手だからお手上げだね。
スタディCで起動してみたら宣言に誤りがあるらしい…よく見たら「}」が足りない
エラーの場所は
> void daiya(int a) 
ここ、この前から数えてみてね。
>pritnf("\n"); 
パソコンに怒られた…
==================
ごめん、頼みたいことあったんだ…三角旗ってどんな形?
1辺の大きさが同じとした場合です(ぴらみっとあーととかで困ってたんだ♪) 編集済み


47ポイント を落としてしまった。

Name: パコネコ  ..初心者(6,433ポイント)   Date: 2010/07/04(日) 00:43   No:55866     
Title: Re:ダイヤ作成    
直して起動したらすごいことになった…なんでわざわざサブルーチンで作ろうとしたんですか?
(あ、またポイント落してる…最近よく落しちゃうんですよね)
出力結果が1行づつしかコピーできないから張らないあけど…おしいとこまでできてるのに…
==================
と、「}」の位置を勝手に解釈してました
メインで最後の出力のすぐ後に「}」ですね。
すいません、上のは勘違いです。 編集済み


67ポイント を手に入れた。

Name: あくあ  ..ぴよぴよ(556ポイント)   Date: 2010/07/04(日) 02:09   No:55875     
Title: Re:ダイヤ作成    
入力ミスすいません(汗)
「}」付けるの忘れてました;

三角旗は
*
**
***
****
*****
****
***
**
*
こんな感じです。(入力5の場合)

サブルーチン…?
すいませんそういう用語まだ分からないです><


75ポイント を手に入れた。

Name: パコネコ  ..初心者(6,600ポイント)   Date: 2010/07/04(日) 11:31   No:55892     
Title: Re:ダイヤ作成    
/*
ピラミットアートの数値を一つ入力し、その個数分の'*'を1辺とする 
正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形、などの描画どう作るかわからないので教えてくれませんか。
*/
前(先月)こういう書き込みがありまして…やっぱりそういう形になりますよね。
でもそれだと1辺のあたりでだめになるんですよね…
>サブルーチン
ワイはそういう名前だって習っていたので…ワイが間違っていたらすいません(;一_一)
/*
void daiya(int a) 
{
*/
これのことだと思って言っていました。
間違っていたらごめんなさい
残りの課題もがんばってください


167ポイント を手に入れた。

Name: あくあ  ..ぴよぴよ(938ポイント)   Date: 2010/07/04(日) 14:11   No:55903     
Title: Re:ダイヤ作成    
>ピラミットアートの数値を一つ入力し、その個数分の'*'を1辺とする 
要するに、入力が5なら三角旗は
*
**
***
**
*
こうなるべきだってことですか?
逆三角までは入力した個数分の'*'=1辺なんですが、三角旗からは入力した個数=横の行の最大出力数(?)になるんです。(説明下手ですいません;)
入力した個数をnとすると、三角旗の1辺は2n-1になります。
六角形と星型は…どうなるんですかね?
とりあえず先生に説明されたのが三角旗までだったので…
六角形はおそらくnが1辺になって、
  *****
 *******
*********
*********
*********
*********
*********
 *******
  *****
ななめのところの1辺が3しかありませんが、多分コレでいいんだと思います。
星はダイヤと同じで、横の出力の数がnになればいいのかと…(曖昧ですいません)

>void daiya(int a) 
どうしてこれを使ったのかってことですか?
この形を教わったからとしか言いようが無いです。
'daiya'と'a'の所は何でもいいと言われたので適当にしましたが、基本的な形は習った通りに書きました。
コレがエラーの原因なんですか?


382ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,230,030ポイント)   Date: 2010/07/04(日) 17:36   No:55924     
Title: Re:ダイヤ作成    
> あくあさん

こんにちは。
以前似たような投稿がありました。
http://www.play21.jp/board/formz.cgi?action=res&resno=55133&page=&id=dixq&rln=55766

学校の課題ならひょっとしたら同じクラスの人だったりするかもしれませんね。

ところで、この課題について、
一つならばエイヤと無理やりプログラムを書いて済ますのもありかもしれませんが、
似たようなものが沢山あるようですので、どの課題にも対応できるようなプログラムを考えてみます。

既に以下の事はおわかりかと思いますが、改めて説明しますね。



今、この図形の第一象限の青い部分はどう表されるでしょうか?
y切片がNumで、傾きが-1ですから

y<=-x+Num ... (1)

となりますよね。
第四象限まで考えるとひし形の範囲はどうなるでしょう。



y<=-x+Num ... (1)
y<= x+Num ... (2)
y>=-x-Num ... (3)
y>= x-Num ... (4)

で囲まれた範囲になりますよね。

(1)かつ(2)かつ(3)かつ(4) の条件を満たす座標が真・・つまり*を表示すべき座標です。
それ以外は空白を表示すべき座標です。 ★1

今、大きさ10のひし形を考える時、
-5<=x<=5
-5<=y<=5
の格子点を全て調べて★1の条件を満たすかどうか判定させてみましょう。
重ねて言いますが、満たせば*を、満たさなければ空白を表示します。

まず私の書いたプログラムをご覧ください

★1を判定する機能を果たす関数をJudge関数として作りました。
実行してみて好きな数値を入力してみて下さい。

#include <stdio.h> 

// 現在の座標が大きさNumのひし形の中かどうか判定する
int Judge( int x, int y, int Num ){
    if( y<= x+Num && y<=-x+Num && 
        y>= x-Num && y>=-x-Num ){//中ならば
        return 1;//1を返す
    }
    else{//外ならば
        return 0;//0を返す
    }
}

int main(){
    int x, y, n;

    scanf( "%d", &n );//大きさを取得

    for( y=-n/2; y<=n/2; y++ ){//y方向ループ
        for( x=-n/2; x<=n/2; x++ ){//x方向ループ
            if( Judge( x, y, n/2 ) == 1 ){//現在の座標が大きさn/2のひし形の中かどうか判定する
                printf("*");//中ならば*を表示
            } 
            else {
                printf(" ");//外ならば空白を表示
            }
        }
        printf("\n");//一行ずつ改行
    }

    return 0;
} 

実行結果
9
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *
※(0,0)を中心としている為、偶数は考慮していません。
 

課題が変わった時は、青字部分の条件式のみ(必要ならば赤字部も)変更してあげればいい事になります。
こうするとどの課題にも対応できて楽なのではないかと思います。

このプログラムを三角旗に適用する事が出来れば順次課題も解けるのではないでしょうか。


686ポイント を手に入れた。

Name: あくあ  ..かけだし(1,244ポイント)   Date: 2010/07/04(日) 18:57   No:55934     
Title: Re:ダイヤ作成    
>管理人様
詳しい解説、回答ありがとうこざいますm(_ _)m

その方の投稿は読みました。
ググった時に、このサイトのトップで出てきたので。
自分が言うのも何ですが、あまりに丸投げですよね^^;

>一つならばエイヤと無理やりプログラムを書いて済ますのもありかもしれませんが
'daiya'をエイヤにするってことですか?
してみたところ同じエラーが…

プログラムまで書いて頂きありがとうございます。
実行したみたらちゃんとひし形が出てきました。
ですが、習ったプログラムの形とは違うのでOKが出るかどうか…

そのプログラムで三角旗を作ろうとしたら上の2行が出力されませんでした。
関数自体いまいち理解出来てないので無理も無いですよね。


306ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,230,362ポイント)   Date: 2010/07/04(日) 19:13   No:55936     
Title: Re:ダイヤ作成    
> 習ったプログラムの形とは違うのでOKが出るかどうか… 

あ、読み飛ばしていました。

> 入力した個数をnとすると、三角旗の1辺は2n-1になります。 

ということは、ダイヤ型で言うと

4
   *
  ***
 *****
*******
 *****
  ***
   *


こうならないといけないということでしょうか?
でもscanfの後に一行足せば修正可能ですね。

scanf( "%d", &n );//大きさを取得

n = ○○○;

ここで、nの値を変えればOKです。

> >一つならばエイヤと無理やりプログラムを書いて済ますのもありかもしれませんが 
> 'daiya'をエイヤにするってことですか? 

どういうことでしょう?
すみません、私の表現がおかしかったですね。
私は、
「効率的だの汎用的だの考えるのめんどくさい!え〜い、無理やりこれで実装してしまえ!」
という、エィヤッ!と作ってしまうという意味で言っただけなのでプログラム的な意味は全くありません。

> してみたところ同じエラーが… 

エラーが出た時はそのエラーメッセージを一緒に書いて頂ければ何が悪いのか回答者が解りやすいと思います。
どのようなエラーが出ました?

> 関数自体いまいち理解出来てないので無理も無いですよね。

どの辺りが解りにくいですか?
また、書き換えてうまくいかなかったプログラムはどんなプログラムですか?

・エラーが発生した場合はエラーメッセージを。
・プログラムが期待通りに動かなかった場合はプログラムソースを。

一緒に添付することで、回答がスムーズになると思います。

では、私が描いた図の上の図のような図形なら描画出来ますか?
第一象限のみの三角形です。


424ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,230,153ポイント)   Date: 2010/07/04(日) 19:24   No:55937     
Title: Re:ダイヤ作成    
自作関数についての理解がまだあやふやだと言う事ですので、勉強してみましょう。

http://www5c.biglobe.ne.jp/~ecb/c/c00.html

の7章あたりを読んで頂ければと思います。

他入門サイトもみてみてください。

11章
http://www9.plala.or.jp/sgwr-t/

読んだら以下をご覧ください。


#include <stdio.h> 

int GetValue(){
    return 5;
}

int main(){
    int x;
    x = GetValue();
    
    printf("返ってきた値は %d です", x);

    return 0;
}

何故5が表示されるか解りますよね。ならば

#include <stdio.h> 

int GetValue( int z ){
    if( z>=10 )
        return 1;
    else
        return 0;
}


int main(){
    int x;

    scanf("%d", &x );

    if( GetValue(x) == 1 )
        printf("入力された値は10以上です");
    else
        printf("入力された値は10未満です");

    return 0;
} 

これもおわかりいただけるかと思いますがいかがでしょう?

 


209ポイント を落としてしまった。

Name: あくあ  ..かけだし(1,515ポイント)   Date: 2010/07/04(日) 22:54   No:55970     
Title: Re:ダイヤ作成    
>「効率的だの汎用的だの考えるのめんどくさい!え〜い、無理やりこれで実装してしまえ!」 

そういう意味だったのですね^^;
私はてっきりエイヤ=eiyaだと…
だから'daiya'を'eiya'に変えてみたら最初と同じエラーが出たってことです。

以下エラーコード 
error C3872: '0x3000': この文字を識別子で使用することは出来ません 
error C4430: 型指定子がありません - int と仮定しました。 メモ: C++ は int を既定値としてサポートしていません 
error C3861: 'daiya': 識別子が見つかりませんでした 

まぁ関数名変えただけなので当たり前ですよね。

>では、私が描いた図の上の図のような図形なら描画出来ますか? 
>第一象限のみの三角形です。

えと、三角形を'*'で表示させるってことですか?
それでしたら自力で出来ました。
ご希望ならプログラム書きますが…

URLありがとうございます。

>読んだら以下をご覧ください。 
このプログラムであればURL読まなくても何が起こっているのかは分かりました。
ですが、最初に書いて頂いたプログラムはちょっと複雑でよく分からないって感じです。


271ポイント を手に入れた。

Name: fatens  ..上級者(15,192ポイント)   Date: 2010/07/04(日) 22:59   No:55971     
Title: Re:ダイヤ作成    
>error C3872: '0x3000': この文字を識別子で使用することは出来ません

おそらくソースコードのどこかに全角スペースが入っていますので削除してください。


31ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,230,478ポイント)   Date: 2010/07/05(月) 00:24   No:55982     
Title: Re:ダイヤ作成    
エラーの原因はfatensさんが仰る通りだと思います。

> えと、三角形を'*'で表示させるってことですか? 
> それでしたら自力で出来ました。 
> ご希望ならプログラム書きますが… 

これはご自分のプログラムでということでしょうか?
私が書いたプログラムを変更して、上の事が出来ますか?という意味だったのですが、いかがでしょう?
私のプログラムを今後の課題でお使いにならないのでしたら良いと思いますが、
もし使われるのでしたら意味を理解して頂く為に質問させて頂きました。

> 最初に書いて頂いたプログラムはちょっと複雑でよく分からないって感じです。

どの辺が解らないでしょうか?

int GetValue( int z ){
    if(  )
        return 1;
    else
        return 0;
}

プログラムとしては赤の部分が変わっただけです。
赤の部分の判定式は図に書いた式のまんまです。

それとも関数よりfor文の回り方が解らないのでしょうか?


281ポイント を手に入れた。

Name: パコネコ  ..初心者(8,158ポイント)   Date: 2010/07/05(月) 01:06   No:55986     
Title: Re:ダイヤ作成    
/*
どうしてこれを使ったのかってことですか? 
この形を教わったからとしか言いようが無いです。 
'daiya'と'a'の所は何でもいいと言われたので適当にしましたが、基本的な形は習った通りに書きました。 
コレがエラーの原因なんですか?
*/
私(注意されたので以後私にします)がただ苦手なだけです。
使わなくていいなら基本的に使わないので…使う利点がありませんし
たとえば2か所以上で同じ(値は別でも)ことをしないといけないとき以外に使うと、見づらく感じてしまって・・・あくまでも私の個人的な意見ですが
勉強のために使うなら問題ありませんが、一か所ならお勧めしません。
===================
一か所でもif文などの条件式として書き込むんでしたら必要です。
条件式に複雑な式が入ったらいやですから。
応用すれば階乗(自分で自分を呼ぶ)などを使っていろいろなこともできます。
(名前間違ってたらすいません) 編集済み


174ポイント を手に入れた。

Name: fatens  ..上級者(15,387ポイント)   Date: 2010/07/05(月) 09:35   No:55994     
Title: Re:ダイヤ作成    
>応用すれば階乗(自分で自分を呼ぶ)などを使っていろいろなこともできます。

再帰ですね。
そのもっともよくある例が階乗を求める計算だと思います。
int factorial(int n)
{
    if (n <= 1)
        return 1;

    return n * factorial(n - 1);
}


96ポイント を手に入れた。

Name: あくあ  ..かけだし(1,794ポイント)   Date: 2010/07/05(月) 09:49   No:55995     
Title: Re:ダイヤ作成    
>fatensさん、管理人様

仰る通り、スペースで全角使っているところがありました。
直してみたところ、エラーが無くなって無事にひし形が出来ました。

それと、ひし形の形なんですが、自分が勘違いしていたみたいで、入力が5の場合
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

となるのが正解だということです。
管理人様が仰っていた形で合っていました。すいません。

>私が書いたプログラムを変更して、上の事が出来ますか?

あのプログラムで三角形はやってないです。
三角旗にはチャレンジしたんですが、

***
****
*****
****
***
**
*

しか表示されず、どうしても上の2行が出力されなかったです。
そのプログラムコードに関しては、今はちょっと時間が取れないのでまた後で書きますね。

>それとも関数よりfor文の回り方が解らないのでしょうか?

そうかもしれないです。
二重ループからさらにifで分岐してるので尚更ややこしくて…


279ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,231,068ポイント)   Date: 2010/07/07(水) 22:14   No:56255     
Title: Re:ダイヤ作成    
> あくあさん

> また後で書きますね。 

ということだったので、続きは書いていないのですが、その後どうでしょうか?
過去ログに落ちそうだったので、書き込みしました。


55ポイント を手に入れた。



Name: 秋色  ..ぴよぴよ(28ポイント)   Date: 2010/07/07(水) 12:39   No:56210       
Title: 矢印キーについて教えてください。    
こんにちは。
矢印キーを使ってキャラを動かしたいのですが、どうやったらいいですか??
そもそも矢印キーは入力できるのですか??


28ポイント を手に入れた。


Name: バグ  ..ハッカー(198,280ポイント)   Date: 2010/07/07(水) 12:51   No:56211     
Title: Re:矢印キーについて教えてください。    
開発環境にもよると思います。
OS、コンパイラ、使用するライブラリなどの情報を書いていただいた方がいいと思いますよ(^-^)


63ポイント を手に入れた。

Name: 秋色  ..ぴよぴよ(44ポイント)   Date: 2010/07/07(水) 13:01   No:56212     
Title: Re:矢印キーについて教えてください。    
MAKE  Version 3.0??かな?

16ポイント を手に入れた。

Name: ookami  ..プログラマー(34,282ポイント)   Date: 2010/07/07(水) 13:21   No:56213     
Title: Re:矢印キーについて教えてください。    
この掲示板の管理人さんが作成されている講座が参考になるかもしれません。
http://dixq.net/rp/9.html

あるいは、こっちを1章から順に読むのもいいかもしれません。
http://dixq.net/g/


2倍のポイントを手に入れた! 96ポイント を手に入れた。

Name: 秋色  ..ぴよぴよ(69ポイント)   Date: 2010/07/07(水) 20:49   No:56241 解決!     
Title: Re:矢印キーについて教えてください。    
こんばんわ。
解決しました。ありがとうございます。


25ポイント を手に入れた。



Name: yamataka  ..ぴよぴよ(579ポイント)   Date: 2010/07/06(火) 22:39   No:56169       
Title: へにょりレーザー    
私は今、東方でいうへにょりレーザーを作ろうとしています。
http://okabi.blog92.fc2.com/blog-date-200908.html
そして、上記のサイト様を参考にして一回作ってみました。
    int lazer[256];
    LoadDivGraph("画像ファイル.png",256,1,256,16,1,lazer);
    int img_width = 16;
    double x1[256],y1[256],x2[256],y2[256];
    double before_x1[256],before_y1[256],before_x2[256],before_y2[256];
    double angle;
(変数などは上記のものを使いました)
    while(1){
        x1[0] += 2;
        y1[0] += 1;
        x2[0] += 2;
        y2[0] += 1;
        for(int i=0;i<256 - 1;i++){
            if(x1[i] > 2)x1[i + 1] += 2;
            if(y1[i] > 1)y1[i + 1] += 1;
            if(x2[i] > 2)x2[i + 1] += 2;
            if(y2[i] > 1)y2[i + 1] += 1;
        }

        for(int i=0;i<256;i++){
            angle = atan2(y1[i] - y2[i],x1[i] - x2[i]);

            DrawModiGraph(before_x1[i],before_y1[i],before_x2[i],before_y2[i],x2[i] + img_width * cos(angle + PHI / 2),y2[i] + img_width * sin(angle + PHI / 2),x2[i] + img_width * cos(angle - PHI / 2),y2[i] + img_width * sin(angle - PHI / 2),lazer[i],TRUE);
        }

        ScreenFlip();
    }

上のように作ってみたのですが、参考サイト様に書いてあることとプログラムがどこか色々と合っていないと思うので指摘していただけると有り難いです。
あと、どのようにしてホーミングさせるかを教えていただければ有り難いです。

OSはWindows Vista
コンパイラはMicrosoft Visual C++ 2008 Express Edition

C言語理解度は初心者だと思います。
DXライブラリを使用しています。

(※質問の書き方が間違っていないか心配です。) 編集済み


120ポイント を手に入れた。


Name: ookami  ..プログラマー(33,885ポイント)   Date: 2010/07/07(水) 11:39   No:56204     
Title: Re:へにょりレーザー    
>(※質問の書き方が間違っていないか心配です。)
はい、例えば、
> どこか色々と合っていないと思うので指摘していただけると有り難いです。 
↑というのは、かなりあいまいで、答えづらいですね;

URLを見てみました。
「へにょりレーザー」については、うっすら分かりました。

全体的に、もうちょっと各変数の説明などを
加えてもらったほうが回答が集まると思います。

あと、現状ではどのように動きますか?

--追記

最初の質問文でも、
「ソースコードさえあれば、読み解いて、問題点を探すのが得意」
という人なら、返事があるでしょうが、
より多くの人に見てもらうことを狙うなら、
ソースコード以外の情報がちょっと少ないのでは、という意味です。 編集済み


123ポイント を落としてしまった。

Name: yamataka  ..ぴよぴよ(639ポイント)   Date: 2010/07/07(水) 20:03   No:56236 解決!     
Title: Re:へにょりレーザー    
ookamiさん有り難うございます。

すみませんが、もう少し試行錯誤してみることにしました。
(ので、一応解決にしておきます)


60ポイント を手に入れた。



Name: 深黒  ..初心者(7,275ポイント)   Date: 2010/07/01(木) 11:26   No:55648       
Title: ウィンドウを閉じた際に    
DXライブラリで、
作成してるゲームに効果音をつけたのですが、
ウィンドウを閉じた際に、次に鳴る筈だったらしい効果音が鳴るのですが、
どうしたらこれは防げるでしょうか?

↓簡略化したプログラム
#include "DxLib.h"
int sound();

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ 
    ChangeWindowMode(TRUE); // ウインドウモードに変更]
    SetUseMenuFlag(-1);
    enum { MenuID_File = 1000, MenuID_NewFile, MenuID_Open, MenuID_Exit, MenuID_Help, MenuID_About }; 
    AddMenuItem_Name(NULL, "A"); 
    AddMenuItem_Name("A", "B"); 
    SetGraphMode(800,600,32);
    if( DxLib_Init()==-1) return -1;// DXライブラリ初期化処理 エラーが起きたら終了

    while(ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){
        sound();
        その他いろいろ処理
    }
    return 0;
}

int sound(){
    int oto=LoadSoundMem( "効果音.wav" ) ;
    PlaySoundMem(oto,DX_PLAYTYPE_BACK) ;
    その他いろいろ処理
    return 0;
}


417ポイント を手に入れた。


Name: ookami  ..プログラマー(31,154ポイント)   Date: 2010/07/02(金) 14:28   No:55747     
Title: Re:ウィンドウを閉じた際に    
「簡略化したプログラム」は、特に問題なさそうに見えました。
# LoadSoundMemは ループの外でやるのがいいとは思いますが。

> ウィンドウを閉じた際に、次に鳴る筈だったらしい効果音が鳴る
というのをもう少し詳しくお願いします。
「ウィンドウを閉じる」というのは、
 ・×で閉じた場合
 ・Alt+F4で終了した場合
 ・ESCで終了した場合
のどれでしょうか。また、「次に鳴る筈だったらしい効果音が鳴る」というのは、
 ・一瞬(0.2秒くらい?)鳴ってすぐ鳴り止む
 ・wavファイルの終わりまで鳴る
のどちらでしょうか。


116ポイント を手に入れた。

Name: 深黒  ..初心者(7,437ポイント)   Date: 2010/07/02(金) 16:24   No:55751     
Title: Re:ウィンドウを閉じた際に    
説明足らずですみません…。
私の言う「ウィンドウを閉じる」は、右上の×で閉じた場合です。

「次に鳴る筈だったらしい効果音が鳴る」の方は、 
・wavファイルの終わりまで鳴る
です。

らしい、と言っているのは、
ウィンドウを閉じた際に、for文等で音が連続して鳴るように仕組んだ部分が影響してか、ウィンドウが消えているのに音が連続して鳴ったからです。


162ポイント を手に入れた。

Name: ookami  ..プログラマー(31,471ポイント)   Date: 2010/07/02(金) 16:48   No:55752     
Title: Re:ウィンドウを閉じた際に    
すると、確かに「その他いろいろ処理」「音が連続して鳴るように仕組んだ部分」が怪しい気がしますねぇ。

DxLib_Endが明示されていませんが、呼ばなくてもちゃんとDXライブラリ側で終了してくれるはずだから、その線は薄いハズ...

「×」ボタンで閉じる前後で、
タスクマネージャの「プロセス」タブで、
[プロジェクト名].exe
は表示されていますか?
ウィンドウが閉じているのにタスクマネージャに残っているようですと、
実は終了していない、ということになります。

あるいは、ソースをそのままアップしてもらったほうが早いかもですね。


172ポイント を手に入れた。

Name: 深黒  ..初心者(7,444ポイント)   Date: 2010/07/03(土) 06:55   No:55803     
Title: Re:ウィンドウを閉じた際に    
プロセスは、音が鳴り終わったら消えてますね。
「音が連続して鳴るように仕組んだ部分」はただのfor文で作っているから、ESCキーで終われないってのは分かるんですが・・・

ソースは出来れば必要以上の部分は見せたくないですね・・・ 編集済み


7ポイント を手に入れた。

Name: fatens  ..上級者(15,121ポイント)   Date: 2010/07/03(土) 11:20   No:55807     
Title: Re:ウィンドウを閉じた際に    
本家のリファレンスによると、DxLib_End 関数は、

>DXライブラリの使用を終了する関数です。
>DXライブラリを使用しているソフトはすべてソフトを終了させる前にこの関数を呼ぶ必要があります。
>同時に、DXライブラリはソフトのウインドウの制御もしているので、
  この関数を呼び出した後はなるべくすぐにプログラムを終了させなければなりません。

とのことなので、WinMain 関数のreturn 0の前にDxLib_end 関数を呼び出してみてください。


145ポイント を手に入れた。

Name: 深黒  ..初心者(8,029ポイント)   Date: 2010/07/03(土) 13:08   No:55810     
Title: Re:ウィンドウを閉じた際に    
一応入ってはいるのですが…
もう少し書き加えたのを出します

#include "DxLib.h"
int draw(int);
int p1hand[16];
int p2hand[16];
int i=0;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ 
    ChangeWindowMode(TRUE); // ウインドウモードに変更]
    SetUseMenuFlag(-1);
    enum { MenuID_File = 1000, MenuID_NewFile, MenuID_Open, MenuID_Exit, MenuID_Help, MenuID_About }; 
    AddMenuItem_Name(NULL, "A"); 
    AddMenuItem_Name("A", "B"); 
    SetGraphMode(800,600,32);
    if( DxLib_Init()==-1) return -1;// DXライブラリ初期化処理 エラーが起きたら終了
    for(i=0;i<=4;i++){
        p1hand[draw(1)]++;
        p2hand[draw(2)]++;
    }        
    while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){
        p1hand[draw(1)]++;
        色々処理
    }
    DxLib_End() ;           // DXライブラリ使用の終了処理
    return 0;
}

int draw(int hands){
    int card=GetRand(120);
    WaitTimer(300) ;
    int hiki=LoadSoundMem( "ドロー.wav" ) ;
    PlaySoundMem(hiki,DX_PLAYTYPE_BACK) ;

    GetRandの値によっては値の取得しなおしの処理

    return card;
}

前のプロトタイプ関数soundが、今回のdrawにあたります。
前の効果音.wavが、今回のドロー.wavです


585ポイント を手に入れた。

Name: s-rush  ..熟練のプログラマー(59,794ポイント)   Date: 2010/07/03(土) 15:05   No:55823     
Title: Re:ウィンドウを閉じた際に    
私も似たような現象が起こっています。

私の場合はバックグラウンドでBGMをループ再生しているのですが(音楽形式:wav)、
右上の×で終了するとウインドウが消えてからも音楽が鳴り続けています。
タスクマネージャで確認すると「プロジェクト名.exe」が残ったままなので
プログラムそのものが終了してなさそうです。

どうも×で終了しても現在実行中の関数(DXライブラリにある関数だけ?)は
終了されていないような感じがします。

効果音ということなので、私のようにループ再生はおそらくしていないと思いますが、
PlaySoundMem関数が実行中
 ↓
×で終了
 ↓
効果音が鳴って関数終了
のような現象が起こっているのではないでしょうか?


ちなみに、私は原因が分からないのでEscで終了してもらうようにして、
問題そのものは放置プレーを決め込んでますw

時間があれば解決策を探したいのですが^^;


360ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(552,833ポイント)   Date: 2010/07/03(土) 17:50   No:55833     
Title: Re:ウィンドウを閉じた際に    
 ×を押しても終了できないのは(×を無効にしている場合はともかく)大抵 WinMain関数を抜けていないからで、
今回のケースでは多分 ProcessMessage関数まで到達できていないか、到達していても処理に負荷がかかっていて
内部の終了判定まで到達出来ていないかのどちらかでしょう。


>音が連続して鳴るように仕組んだ部分」はただのfor文で作っているから、
>ESCキーで終われないってのは分かるんですが・
 上の2つのコードで ESCで終了できないのであれば×でも終了できない思うのですが、そもそもどうして ESCで終了できないのでしょうか?
 コードからはそれが読み取れないです。


175ポイント を手に入れた。

Name: 深黒  ..初心者(8,134ポイント)   Date: 2010/07/03(土) 22:29   No:55849     
Title: Re:ウィンドウを閉じた際に    
ESCキーで終われないと言ったのは、for文ではCheckHitKey( KEY_INPUT_ESCAPE ) == 0が無いせいで、繰り返してしまっていると考えたので・・・

軽々しく分かってるなんて言ってはいけなかったかもしれないです・・・


105ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(553,500ポイント)   Date: 2010/07/03(土) 23:30   No:55854     
Title: Re:ウィンドウを閉じた際に    
> for文
 その連続で鳴らしているという for文はどうなっているのでしょうか。
 そのあたりのコードを提示できますか?
 又構造的に No:55810の draw関数のように毎フレーム呼ばれているのでしょうか?



# 再現できる最小限のプロジェクトとか作れないですかね?


126ポイント を手に入れた。

Name: 深黒  ..中級者(9,032ポイント)   Date: 2010/07/05(月) 00:26   No:55983     
Title: Re:ウィンドウを閉じた際に    
こんな感じになると思います

#include "DxLib.h"
int i=0;
int White=GetColor(255,255,255);
int draw();
int victory();

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode(TRUE);
    if( DxLib_Init() == -1 ) return -1; 
    SetGraphMode(800,600,32);
    int j;
    for(j=0;j<=4;j++){
        draw();
        draw();
    }

    while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){
        i++;
        draw();
        DrawFormatString(1,i*24,White,"自分ターン:残りデッキ%d枚",10-i);
        int mouse_pos_X=-1; 
        int mouse_pos_Y=-1; 
        while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){
            if(( GetMouseInput()&MOUSE_INPUT_LEFT)!=0)// 左クリックされたら
                GetMousePoint(&mouse_pos_X,&mouse_pos_Y);// マウスの座標を取得
            if(mouse_pos_Y>=0&&mouse_pos_Y<600&&mouse_pos_X >= 0 &&mouse_pos_X<= 800){
                DrawString(250,i*24,"ターン交代",White);
                break;
            }
        }
        WaitTimer(150);
        i++;
        draw();
        DrawFormatString(1,i*24,White,"相手ターン:残りデッキ%d枚",10-i);
        DrawString(250,i*24,"ターン交代",White);
    }
    DxLib_End() ;
    return 0 ;
}
int draw(){
    if(i>10){
        victory();
        return 0;
    }
    WaitTimer(300) ;
    int hiki=LoadSoundMem( "test.wav" ) ;
    PlaySoundMem(hiki,DX_PLAYTYPE_BACK) ;
    return 0;
}
int victory(){
    DrawString(300,300,"デッキ切れです",White);
    WaitTimer(2000);
    DxLib_End() ;     // DXライブラリ使用の終了処理
    return 0;
}

始めの連続の部分でウィンドウを閉じると、for文が音が鳴り終わるまで終わらないです。
while中で閉じると、消えた後ぐらいに一回効果音が鳴ります


898ポイント を手に入れた。

Name: 深黒  ..中級者(9,069ポイント)   Date: 2010/07/06(火) 20:30   No:56159     
Title: Re:ウィンドウを閉じた際に    
画面をクリックしたらデッキからカードを引く(ドロー)
デッキ切れで終了です


37ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(555,900ポイント)   Date: 2010/07/06(火) 22:31   No:56168     
Title: Re:ウィンドウを閉じた際に    
>始めの連続の部分でウィンドウを閉じると、for文が音が鳴り終わるまで終わらないです
 なるほど。
 この構造では鳴り終わるまで終らないですね。
 ウインドウを閉じたことを検出するのが ProcessMessage関数ですから、これを随時呼んで
終了を検出し、速やかに WinMain関数を抜ければいいかと。

    for(j=0;ProcessMessage() == 0 && j<=4;j++)

とか。

(ループ中の draw()を2回から1回にし、その分ループの数を減らすとより速やかに終了できるでしょう)


284ポイント を落としてしまった。

Name: 深黒  ..中級者(9,178ポイント)   Date: 2010/07/07(水) 18:28   No:56227     
Title: Re:ウィンドウを閉じた際に    
for文にそんな使い方があったんですか!?
for文の問題は返信のおかげで解決できました。

while文の方は、各draw();の後に、各プレイヤーがカードを使用する等の処理が入る為、draw()を減らすということは出来ないです・・・。


109ポイント を手に入れた。



Name: NoName  ..ぴよぴよ(253ポイント)   Date: 2010/07/07(水) 11:50   No:56205       
Title: アルゴリズムを利用した画像処理    
アルゴリズムを利用した画像処理プログラムって、具体的にどんな感じのプログラムになりますか?
R,G,Bを使ったり、配列を使用するらしいのですが、一体どんな感じになるのか、おおまかなサンプルプログラムを示してもらえばうれしいです。


81ポイント を手に入れた。


Name: ookami  ..プログラマー(34,186ポイント)   Date: 2010/07/07(水) 11:53   No:56207     
Title: Re:アルゴリズムを利用した画像処理    
「アルゴリズム」というのは「方式」というような意味です。
「○○アルゴリズム」という言葉でないと、具体的な中身にはなりません。

どんな画像処理をしたいのでしょうか?


69ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(53,020ポイント)   Date: 2010/07/07(水) 12:34   No:56208     
Title: Re:アルゴリズムを利用した画像処理    
画像処理のアルゴリズムにもいろいろあります
ディザリング、減色、エッジ強調、ぼかし、モザイク、その他いろいろ
掲示板で説明するのはむずかしいので希望のアルゴリズムで検索したら詳しく説明してあるサイトが見つかると思います
それからわからない部分を質問されたほうがいいですよ


97ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(53,076ポイント)   Date: 2010/07/07(水) 12:36   No:56209     
Title: Re:アルゴリズムを利用した画像処理    
とりあえず「画像処理のアルゴリズム」で検索したサイトです
http://homepage2.nifty.com/tsugu/sotuken/ronbun/sec3-2.html


56ポイント を手に入れた。



Name: narica  ..かけだし(2,480ポイント)   Date: 2010/07/06(火) 23:15   No:56171       
Title: エラーが出てしまいます。    
昨日に引き続き質問です。
取り組んでいる物:数字で分岐するアドベンチャー

昨日質問した問題と同様の問題なのですが、解決方法がわからないので質問させて頂きます。
上記のプログラムで実行し、1→1 と進行していくと Run-Time Check Failure #3 - The variable 'd' is being used without being initialized. というエラーが出てしまいます。

このエラーが出た場合は d が初期化されていないからエラーが出る。と教えて頂いたのですが、どこを初期化すればいいのかわかりません。


返答をお待ちしております。


119ポイント を手に入れた。


Name: シエル  ..プログラマー(25,991ポイント)   Date: 2010/07/06(火) 23:20   No:56174     
Title: Re:エラーが出てしまいます。    
else if(a==2){sentakud(d);}
↑ここでdを初期化しないで、関数に渡してるからだと。

だから何か値を入れておけばいいかと。


53ポイント を手に入れた。

Name: シエル  ..プログラマー(26,047ポイント)   Date: 2010/07/06(火) 23:22   No:56175     
Title: Re:エラーが出てしまいます。    
何か値を入れるだけでは駄目ですね。まあちゃんとした値を入れて下さい。

2倍のポイントを手に入れた! 56ポイント を手に入れた。

Name: box  ..ハッカー(155,273ポイント)   Date: 2010/07/06(火) 23:29   No:56176     
Title: Re:エラーが出てしまいます。    
それはそうと、

>    if (a==1,2,3){

これは何を意図しているのですか?


44ポイント を手に入れた。

Name: シエル  ..プログラマー(26,061ポイント)   Date: 2010/07/06(火) 23:31   No:56177     
Title: Re:エラーが出てしまいます。    
分岐によって、値が入らない変数があるのも良くないかな。

14ポイント を手に入れた。

Name: パコネコ  ..中級者(10,536ポイント)   Date: 2010/07/06(火) 23:44   No:56178     
Title: Re:エラーが出てしまいます。    
boxさんの聞いてるやつ私も気になります。
前にfor(;;a++,b++)
みたいなのみたことありますけどそれですか?
あれwhile文でしたっけ?
これは「もしくは」とかの意味があるんですか?
a!=0でもいい気がしますけど…意味を教えてもらってもかまいませんか?


87ポイント を手に入れた。

Name: narica  ..入門者(2,579ポイント)   Date: 2010/07/07(水) 00:53   No:56187     
Title: Re:エラーが出てしまいます。    
シエルさん:ご返答ありがとうございます!
すいません、どの時点でなんという値を入れればいいのかいまいちわからないので、差し支えなければ例を教えてもらえないでしょうか?

boxさん.パコネコさん:ご返答ありがとうございます!
えっと・・・
特に意味はないのですが、これでも動くのかな〜、と実験でやってみたのをそのままにしていたみたいです。
すいません。


99ポイント を手に入れた。

Name: へろり  ..上級者(19,145ポイント)   Date: 2010/07/07(水) 07:49   No:56195     
Title: Re:エラーが出てしまいます。    
>特に意味はないのですが、これでも動くのかな〜、と実験でやってみたのをそのままにしていたみたいです。 
すいません。


if(a == 1, 2, 3)....
一応動く事には動きますが、このコードはaと1もしくは2もしくは3と等しいと言う意味にはなりません。

カンマ演算子の役割は、カンマ演算子で区切られた式は必ず左から評価される事、そしてカンマ演算子が現れた時点で副作用が完了することの2つです。
そして、カンマ演算子が返す値は後に続く式の結果となります。

つまり、上記のコードは if(3)... と等価となります。



187ポイント を手に入れた。

Name: シエル  ..プログラマー(26,613ポイント)   Date: 2010/07/07(水) 11:31   No:56203     
Title: Re:エラーが出てしまいます。    
>>すいません、どの時点でなんという値を入れればいいのかいまいちわからないので、差し支えなければ例を教えてもらえないでしょうか?

とりあえず、全ての条件分岐に対応できるような組み方をしていただければ問題ありません。 編集済み


92ポイント を手に入れた。



Name: シエル  ..プログラマー(25,290ポイント)   Date: 2010/07/06(火) 16:22   No:56128       
Title: GetGlyphOutline関数等について    
最近質問が多くてすみません。
下記URLの高速なフォント描画について、お聞きしたことがあります。
http://www3.pf-x.net/~chopper/home2/DirectX/CDX30.html

【質問@】
このページのソースにある、ポリゴンの頂点をセットするSetPorigon関数についてです。
この関数には頂点構造体(p)、x1(左上頂点x),y1(左上頂点y),x2(テクスチャの横幅),y2(テクスチャの縦幅)を
渡して、座標をセットしているようなのですが、
左上頂点以外の頂点で-1されている部分があります。

なぜ-1しなければならないのか、理由が分からないのでご教授願います。。

void setPorigon(PTRIANGLE p,float x1,float y1,float x2,float y2)
{
    p[0].x = x1;
    p[0].y = y1;
    p[0].z = 0.0f;
    p[0].rhw = 1.0f;
    p[0].color = D3DCOLOR_XRGB(255,255,255);
    p[0].tu = 0.0f;
    p[0].tv = 0.0f;

    p[1].x = x1 + x2 - 1;
    p[1].y = y1;
    p[1].z = 0.0f;
    p[1].rhw = 1.0f;
    p[1].color = D3DCOLOR_XRGB(255,255,255);
    p[1].tu = 1.0f;
    p[1].tv = 0.0f;

    p[2].x = x1 + x2 - 1;
    p[2].y = y1 + y2 - 1;
    p[2].z = 0.0f;
    p[2].rhw = 1.0f;
    p[2].color = D3DCOLOR_XRGB(255,255,255);
    p[2].tu = 1.0f;
    p[2].tv = 1.0f;

    p[3].x = x1;
    p[3].y = y1 + y2 - 1;
    p[3].z = 0.0f;
    p[3].rhw = 1.0f;
    p[3].color = D3DCOLOR_XRGB(255,255,255);
    p[3].tu = 0.0f;
    p[3].tv = 1.0f;
}


【質問A】
二つ目はGetGlyphOutline関数によって、確保される配列についてです。
このページのソースにもありますが、下記のように実行するとpfontbitmapのアドレスに指定した文字の
ビットマップデータが格納されますが、このバイト型の配列のどのような並びでビットマップデータが
入っているのかがイメージできません。
*pfontbitmap = new BYTE[fontsize];
GetGlyphOutline(hdc,fontcode,GGO_GRAY4_BITMAP,pgm,fontsize,*pfontbitmap,&mat))

このデータをその後下記のように読み込んで、動的テクスチャにピクセルデータを書き込んでいっているのですが、先ほど確保した配列を読み込む部分だけ意味が良く分かりません。(下記赤字部分のみ)
どのようにビットマップデータが格納されているのかが分かっていれば、イメージができるようになり、
自分で考えてコードが組めるようになるのですが、このままではコピるしかありません。
どなたか、この確保した配列にどのようにビットマップデータが格納されているのかが分かる方、
具体的に説明していただけますでしょうか?
よろしくお願い致します。

一応このページの全ソースコードを添付しておきます。


//フォントの書き出しの一番左X座標
    int offsetx = pgm->gmptGlyphOrigin.x;
    //フォントの書き出しの一番左Y座標
    int offsety = ptm->tmAscent - pgm->gmptGlyphOrigin.y;
    //フォントビットマップの横幅を調べる
    int bitmap_width = pgm->gmBlackBoxX + (4-(pgm->gmBlackBoxX%4)%4);
    //フォントビットマップの縦幅を調べる
    int bitmap_height = pgm->gmBlackBoxY;
    //フォントレベル
    int fontlevel = 17;
    BYTE *pPixel;

    

    //テクスチャサーフェイスを初期化する
    FillMemory(rc.pBits , rc.Pitch * ptm->tmHeight, 0);

    //フォントビットマップをテクスチャに書き込む
    for (int y = offsety; y < offsety + bitmap_height; y++)
    {
        for (int x = offsetx; x < offsetx + bitmap_width; x++)
        {
            DWORD a = 255 * (*pfontbitmap)[x - offsetx + bitmap_width * (y - offsety)] / (fontlevel-1);
            //フォントの色を決める
            DWORD fontcolor = 0x00FFFFFF | (a<<24);
            //現在のピクセル位置の計算
            pPixel = ((BYTE*)rc.pBits) + (x * 4) + (y * rc.Pitch);
            //フォントビットマップの書き込み
            memcpy(pPixel, &fontcolor, sizeof(DWORD));
        }
    }

    //テクスチャのアンロック
    g_ptexture9->UnlockRect(0);

    return S_OK;


2倍のポイントを手に入れた! 2,088ポイント を手に入れた。


Name: ISLe  ..入門者(3,998ポイント)   Date: 2010/07/06(火) 17:33   No:56133     
Title: Re:GetGlyphOutline関数等について    
> 【質問@】
(略)
> なぜ-1しなければならないのか、理由が分からないのでご教授願います。。

-1する必要はないですね。
リンク先のページは一般的なピクセル座標と勘違いしていると思います。
変換済み頂点座標は画面のピクセルの中心ではなくて、ピクセルとピクセルのあいだを指しますから、例えば0
〜640で640ピクセル幅になります。

テクスチャの歪み解消のためにすべての座標から-0.5fしておくと良いかもしれません。


> 【質問A】

GetGlyphOutline
http://msdn.microsoft.com/ja-jp/library/cc410385.aspx
によると
> GGO_GRAY4_BITMAP フラグが指定されているときに返されるビットマップは、位置調整がダブルワードの行方向のバイト配列で、0〜16 までの値を保持します。

・1ピクセル1バイトで0〜16の値を持つ
・横方向サイズは4バイト単位に切り上げられる
(↑のページには書いてないけど)上下反転している

--編集
すみません。上下反転はしてなかったです。
 編集済み


182ポイント を手に入れた。

Name: シエル  ..プログラマー(25,827ポイント)   Date: 2010/07/06(火) 18:55   No:56149     
Title: Re:GetGlyphOutline関数等について    
ISLeさん。ありがとうございます。

>>-1する必要はないですね。 
>>リンク先のページは一般的なピクセル座標と勘違いしていると思います。  

テストで実行してみたのですが、マイナス1しないと、微妙に文字が一部欠けた感じになりましたので、
やっぱりマイナス1は必要なのだと思われます。

>>変換済み頂点座標は画面のピクセルの中心ではなくて、ピクセルとピクセルのあいだを指しますから、例えば
>>0〜640で640ピクセル幅になります。 
>>テクスチャの歪み解消のためにすべての座標から-0.5fしておくと良いかもしれません。

変換済み頂点座標はピクセルの中心ではなくて、ピクセルとピクセルの間なんですね。
これは知りませんでした。覚えておきます。


>>GGO_GRAY4_BITMAP フラグが指定されているときに返されるビットマップは、位置調整がダブルワードの行方向>>のバイト配列で、0〜16 までの値を保持します。 
>>・1ピクセル1バイトで0〜16の値を持つ 
>>・横方向サイズは4バイト単位に切り上げられる 

ちょっとイメージできましたが、まだ引っかかる部分があるので後でまた書き込みます。



追記:
画像貼りました。
左が-1してないやつで、右側がー1したものです。
左側のほうが一部ギザギザしてしまってます。 編集済み


484ポイント を手に入れた。

Name: シエル  ..プログラマー(26,045ポイント)   Date: 2010/07/06(火) 21:08   No:56163     
Title: Re:GetGlyphOutline関数等について    
座標をマイナス1しなければならない理由はまだ分かりませんが、
↓の配列を読み込んでいる方法はよく考えたら分かって、イメージできました。
失礼しました。。。
DWORD a = 255 * (*pfontbitmap)[x - offsetx + bitmap_width * (y - offsety)] / (fontlevel-1); 


76ポイント を手に入れた。

Name: シエル  ..プログラマー(25,906ポイント)   Date: 2010/07/06(火) 22:44   No:56170 解決!     
Title: Re:GetGlyphOutline関数等について    
GetGlyphOutline関数で取得される、GLYPHMETRICS構造体の値は長さではなくて、
ピクセル数を取得してるような感じなので、-1しないと合わないのかなと思いました。
msdn探しても、GLYPHMETRICS構造体のメンバの詳しい説明が載ってないので、そう割り切ります。
なので、解決にします。

ISLeさん!ありがとうございました!


139ポイント を落としてしまった。

Name: ISLe  ..入門者(4,146ポイント)   Date: 2010/07/07(水) 02:08   No:56190     
Title: Re:GetGlyphOutline関数等について    
-1しないとギザギザになるので根拠無しに-1しているのではないでしょうか。

一方だけ-1するとサイズが短くなってしまいますよ。

このサンプルだと文字が描かれている範囲がテクスチャサイズよりずっと小さいので違いが分からないですがタイルマップで座標指定するときとかはチップマップに隙間ができます。

No:56133に書いたように歪みを解消するにはすべての座標から-0.5fすると良いです。
#マイクロソフトが推奨している方法ですし。


148ポイント を手に入れた。

Name: ISLe  ..入門者(4,230ポイント)   Date: 2010/07/07(水) 02:46   No:56192     
Title: Re:GetGlyphOutline関数等について    
http://marupeke296.com/WINT_GetGlyphOutline.html
↑のページの説明が分かりやすいかと。

GLYPHMETRICS Structure
http://msdn.microsoft.com/en-us/library/dd144955(VS.85).aspx
#日本語のページはありませんでした

gmCellIncYは0が返りますね。
縦書きフォントだとgmCellIncYに値が入ってくるのかな(未確認)。


84ポイント を手に入れた。

Name: シエル  ..プログラマー(26,374ポイント)   Date: 2010/07/07(水) 09:22   No:56197 解決!     
Title: Re:GetGlyphOutline関数等について    
全ての座標からマイナス0.5しても、ギザギザが無くなって綺麗に描画されました!
色々とありがとうございました!


36ポイント を手に入れた。



Name: mitsu  ..ぴよぴよ(45ポイント)   Date: 2010/07/06(火) 12:20   No:56108       
Title: 3次元配列の要素数    
3次元配列の要素数を求める式がわかりません。
c++の初心者で、これが簡単な問題なのかどうかもよくわかりません。
あまりに基礎的でしたら申し訳ありません。


45ポイント を手に入れた。


Name: fatens  ..上級者(15,739ポイント)   Date: 2010/07/06(火) 13:18   No:56109     
Title: Re:3次元配列の要素数    
int array[l][m][n];

とすると、その要素数は l*m*n です。

もしくは、sizeof(array) / sizeof(array[0][0][0]) でも求まります。


65ポイント を手に入れた。

Name: mitsu  ..ぴよぴよ(90ポイント)   Date: 2010/07/06(火) 22:19   No:56167 解決!     
Title: Re:3次元配列の要素数    
ああなるほど!
実は、入門書を買って演習問題を解いていたのですが、その本、解答が載っていないのです。
このサイトいいですね。助かりました。


45ポイント を手に入れた。



Name: natu  ..かけだし(1,160ポイント)   Date: 2010/07/05(月) 21:09   No:56032       
Title: 課題がわかりません。解いてください。    
課題ですが、『#を使って通路を作り、その通路をXが移動していく』というものです。
通路はできたのですが、Xの移動がどうしてもできません。#がないところにXを表示
させようとすると、#がないところすべてにXが表示されてしまいます。しかも、Xを
表示させると#がずれてしまいます。

どこが悪いのでしょうか??

条件:
1.#の通路は二次元配列を使う
2.Xは配列を参照して移動させる。

 編集済み


246ポイント を手に入れた。


Name: ROM  ..入門者(2,918ポイント)   Date: 2010/07/05(月) 21:14   No:56034     
Title: Re:課題がわかりません。解いてください。    
私が言わなくともまず規約をしっかり読んでから投稿して下さいという書き込みがある事でしょう。
ここは宿題を誰かにやらせる場所じゃありません。
だいたい自分の宿題を誰かにやらせて単位を取って何の意味があるんでしょうかね。


76ポイント を手に入れた。

Name: シエル  ..上級者(23,002ポイント)   Date: 2010/07/05(月) 21:21   No:56035     
Title: Re:課題がわかりません。解いてください。    
「解いて下さい」はちょっとまずいかな。
自分がまずどこまで出来るかを明確にして、出来るところまでのコードを提示して下さい。

#最近、課題丸投げの投稿多いですね。


84ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,230,721ポイント)   Date: 2010/07/05(月) 21:28   No:56036     
Title: Re:課題がわかりません。解いてください。    
出番ですね。



なんちゃって・・。

> natuさん

今どこまで出来ていてどこで躓いていますか?
作っているプログラムがあるようなので、それを提示して、解らない所を聞くとスムーズにやり取りできるように思います。

後、仕様が良く解らないのですが、Xが移動しさえすればいいんですか?
じゃウロウロ同じ所を左右に移動するだけでもいいんですか?
ゴールなどがあり、迷路のゴールへの道探索プログラムを作るわけではないんですか?


185ポイント を手に入れた。

Name: パコネコ  ..中級者(9,270ポイント)   Date: 2010/07/05(月) 21:50   No:56039     
Title: Re:課題がわかりません。解いてください。    
配列を参照するときにいじっちゃってるところはないですか?
皆さん書いてますが…ソースを書いといてください。
どこが間違ってるかがわからないので…


55ポイント を手に入れた。

Name: シエル  ..上級者(23,047ポイント)   Date: 2010/07/05(月) 21:56   No:56040     
Title: Re:課題がわかりません。解いてください。    
>>管理人さん

いや〜すばらしいFLASHです。
掲示板のトップにでも貼っといてほしいぐらいですw


45ポイント を手に入れた。

Name: パコネコ  ..中級者(9,761ポイント)   Date: 2010/07/05(月) 22:14   No:56047     
Title: Re:課題がわかりません。解いてください。    
後ついでに、いつまでなのか(提出期限)書いといていただけないと、時間が足りなくなりますよ?


37ポイント を手に入れた。

Name: パコネコ  ..中級者(9,803ポイント)   Date: 2010/07/05(月) 22:25   No:56048     
Title: Re:課題がわかりません。解いてください。    
いつの間に編集を…できれば後に書かないとだれも気がづきませんよ。
移動のプログラムはどれですか?


42ポイント を手に入れた。

Name: ROM  ..入門者(2,928ポイント)   Date: 2010/07/05(月) 22:33   No:56050     
Title: Re:課題がわかりません。解いてください。    
どうやら規約を読む気が無いようです。

10ポイント を手に入れた。

Name: natu  ..かけだし(1,178ポイント)   Date: 2010/07/05(月) 23:11   No:56060     
Title: Re:課題がわかりません。解いてください。    
>>パコネコさん

プログラム載せました。


18ポイント を手に入れた。

Name: パコネコ  ..中級者(9,843ポイント)   Date: 2010/07/05(月) 23:13   No:56061     
Title: Re:課題がわかりません。解いてください。    
移動のプログラムはどれですか?
自動でうごくものなんですか?
自分で動かすものだと思っていました…


40ポイント を手に入れた。

Name: パコネコ  ..中級者(10,040ポイント)   Date: 2010/07/05(月) 23:20   No:56062     
Title: Re:課題がわかりません。解いてください。    
/*
int x, y, i;

    for(i = 19; i >= 0; i--){
    for(x = 0; x < 20; x++){
        for(y = 0; y < 20; y++){
            printf("%c", nk[x][y]);
            if(i == x){
                if(nk[x][y] == ' '){
                    nk[x][y] = 'x';
                    printf("%c", nk[x][y]);
                }
            }
        }
    printf("\n");
    }
    }
return 0;
}
*/
プログラムはこれですね
移動はiを使っているんですか?
空白にxを入れて移動させているんですね。
移動させるなら移動させた後にもともとxがあった場所は空白にすべきでは?と思いました。
何か食い違いがありそうなので、何がしたいのか1つずつ書いてもらっていいですか?


197ポイント を手に入れた。

Name: パコネコ  ..中級者(10,157ポイント)   Date: 2010/07/05(月) 23:27   No:56063     
Title: Re:課題がわかりません。解いてください。    
連続すいません
迷路のプログラムだと勝手に思っています。
まずnk[x][y]の中は0&1にして描写するときに#を描写すべきです。
あと移動させるときに条件として
たとえば上に移動するなら
if(nk[x][y-1]==0){//0なら空欄
 nk[x][y]=0;
 nk[x][y-1]=2;//2はXのこと
}
ダメですか?
少し長くなりますが(ソースが)わかりやすいです。
scanf文を使って0なら上へなどできますから…


117ポイント を手に入れた。

Name: パコネコ  ..中級者(10,344ポイント)   Date: 2010/07/05(月) 23:37   No:56066     
Title: Re:課題がわかりません。解いてください。    
この#って小文字ですか?
×が大文字だとしたらその分ずれます
#と空欄を大文字にしたらずれないと思います
================
            //printf("%c", nk[x][y]);
            if(i == x){
                if(nk[x][y] == ' '){
                    nk[x][y] = 'x';
                    printf("%c", nk[x][y]);
                }
            }else printf("%c", nk[x][y]);
ずれるのは両方描写してたから?ですかね
 編集済み


2倍のポイントを手に入れた! 104ポイント を手に入れた。

Name: natu  ..かけだし(1,460ポイント)   Date: 2010/07/06(火) 07:55   No:56104     
Title: Re:課題がわかりません。解いてください。    
>>パコネコさん

返答ありがとうございます。
 
>>移動はiを使っているんですか?
 iは#の通路の空白をしたから探すために使ってます。
 こんなことしなくてもできるのでしょうか??

>>移動させるなら移動させた後にもともとxがあった場所は空白にすべきでは?
 そうしたかったのですが、今できているのは空白にできなかったんです。

>>まずnk[x][y]の中は0&1にして描写するときに#を描写すべきです。
 通路の描画は、二次元配列で書いてあると思うのですが…

>>この#って小文字ですか?
 大文字です。

私としては、ユーザーからの入力で上、下、右、左に動かせるようにしたいんです。


282ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,230,782ポイント)   Date: 2010/07/06(火) 08:11   No:56105     
Title: Re:課題がわかりません。解いてください。    
>>この#って小文字ですか? 
> 大文字です。 

そうじゃなくて全角か半角かってことじゃないですか?
全角ならこのままではだめです。
しかし本当に課題は全角ですか?
全角ならば余計に0,1で管理する必要性が高くなります。

同じようなプログラムがゲームプログラミングの館の24章にありますのでよければご覧ください。


61ポイント を手に入れた。

Name: フリオ  ..プログラマー(34,130ポイント)   Date: 2010/07/06(火) 09:50   No:56106     
Title: Re:課題がわかりません。解いてください。    
 
>2.Xは配列を参照して移動させる。
 ひょっとして、こういうことでしょうか。

#include <stdio.h>

#define SIZE 5

void print_map(char map[][SIZE], int p[])
{
    int i;
    
    for(i = 0; i < SIZE; ++ i){
        int j;
        
        for(j = 0; j < SIZE; ++ j){
            if(i == p[0] && j == p[1]) putchar('@');
            else putchar(map[i][j]);
        }
        putchar('\n');
    }
}

int main(void)
{
    char map[SIZE][SIZE] = {".....", ".....", ".....", ".....", "....."};
    int p[][2] = {{0, 0}, {0, 1}, {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {4, 3}, {4, 4}};
    int x, n = sizeof p / sizeof p[0];
    
    for(x = 0; x < n; ++ x){
        print_map(map, p[x]);
        getchar();
    }
    return 0;
}


 編集済み


2倍のポイントを手に入れた! 510ポイント を手に入れた。

Name: パコネコ  ..中級者(10,142ポイント)   Date: 2010/07/06(火) 13:57   No:56114     
Title: Re:課題がわかりません。解いてください。    
ようやくやりたいことがわかりました。
>そうじゃなくて全角か半角かってことじゃないですか?
すいません、間違えました。
フリオさんは自動でうごくものを作ったんですね。(あらかじめ決められたルートを進む)


書いてみました
#include<stdio.h>
int main(void){
    int map[][5]={    {1,1,1,1,1},
            {1,0,1,0,1},
            {1,0,0,0,1},
            {1,0,1,0,1},
            {1,1,1,2,1}};
    int a,b,c;
    int x=1,y=3;

    do{
        for(b=0;b<5;b++){
            for(a=0;a<5;a++){
                if(a==x&&b==y)putchar('x');
                else{
                    if(map[b][a]==0)putchar(' ');
                    else if(map[b][a]==1)putchar('#');
                    else putchar('G');
                }
            }
            putchar('\n');
        }
        do{
            printf("0=左、1=右、2=上、3=下ーーー");
            scanf("%d",&c);
        }while(4<c);
        if(c==0&&map[y][x-1]!=1)x--;
        if(c==1&&map[y][x+1]!=1)x++;
        if(c==2&&map[y-1][x]!=1)y--;
        if(c==3&&map[y+1][x]!=1)y++;

        
    }while(map[y][x]!=2);
    printf("CREA");

}
================
500ポイントも落したとは…少し残念です。
どこが何を意味しているのかわかりますか?
わからないままコピーだけするのは絶対にしないでくださいね。
わかるならいいけど… 編集済み


500ポイント を落としてしまった。

Name: ISLe  ..入門者(3,761ポイント)   Date: 2010/07/06(火) 16:36   No:56129     
Title: Re:課題がわかりません。解いてください。    
壁に沿って自動で移動するプログラムを作ってしまったのですがせっかくなので貼っておきます。

#include <stdio.h>

int main(void)
{
    char nk[20][20] = {
        {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
        {'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'}
    };
    int x, y, i;
    enum DIR { /* 進行方向を表す */
        DIR_UP,
        DIR_RIGHT,
        DIR_DOWN,
        DIR_LEFT,
        DIR_NUM
    } dir;

    x = 10; y = 18; /* スタート地点 */
    dir = DIR_UP; /* 最初の進行方向 */

    for (;;) {
        int col, row;
        for (row=0;row<20;++row) {
            for (col=0;col<20;++col) {
                if (col == x && row == y)
                    putchar('x');
                else
                    putchar(nk[row][col]);
            }
            putchar('\n');
        }
        if (x <= 0 || x >= 19 || y <= 0 || y >= 19) {
            puts("Congratulations on the escape!!!");
            break;
        }
        puts("Press enter key to next step...");
        getchar();

        {   /* 左回りに移動可能な方向を探索 */
            enum DIR d;
            for (i=0;i<DIR_NUM;++i) {
                int vx, vy;
                d = (dir + i - 1 + DIR_NUM) % DIR_NUM;
                vy = (d == DIR_DOWN) - (d == DIR_UP);
                vx = (d == DIR_RIGHT) - (d == DIR_LEFT);
                if (nk[y+vy][x+vx] == ' ') {
                    x += vx;
                    y += vy;
                    dir = d;
                    break;
                }
            }
        }
    }
    return 0;
}


1,960ポイント を手に入れた。

Name: 通りすがり  ..上級者(21,927ポイント)   Date: 2010/07/06(火) 17:51   No:56135     
Title: Re:課題がわかりません。解いてください。    
宿題代わりにやって下さいなんて要望に応えてたらそういう質問が増えますよ。

14ポイント を手に入れた。

Name: パコネコ  ..中級者(10,246ポイント)   Date: 2010/07/06(火) 18:03   No:56138     
Title: Re:課題がわかりません。解いてください。    
でもソース書いてくれましたし…一緒に考えてください的なのだったら楽しい上に勉強になるからいいんですけど…丸投げが増えるのは困りますね。

42ポイント を手に入れた。

Name: natu  ..かけだし(1,506ポイント)   Date: 2010/07/06(火) 21:45   No:56166 解決!     
Title: Re:課題がわかりません。解いてください。    
お手伝い頂きありがとうございます!!

皆さんのを参考にして考えてみます。


2倍のポイントを手に入れた! 46ポイント を手に入れた。



Name: 爺プログラマー  ..かけだし(2,492ポイント)   Date: 2010/07/06(火) 17:32   No:56132       
Title: 関数に渡す引数について    
通常は関数内では引数を参照して計算するだけですが、計算結果を引数に(反映)戻すことは出来ないでしょうか?
戻り値は1個だけで、多くの変数の計算結果を得たいのですが・・・
変数をアドレスで渡す以外に簡単な方法はないでしょうか?


102ポイント を落としてしまった。


Name: パコネコ  ..中級者(10,204ポイント)   Date: 2010/07/06(火) 18:00   No:56136     
Title: Re:関数に渡す引数について    
ポインタとかなら…でもアドレスはダメなんですよね。
宣言をメインの外でする奴はダメですか?


36ポイント を手に入れた。

Name: だいちゃん  ..ぴよぴよ(369ポイント)   Date: 2010/07/06(火) 18:02   No:56137     
Title: Re:関数に渡す引数について    
こういうことですか?

main(){

int a = 5;
int b = 10;

calc(a,b);

}

int calc(int a, int b){

a+bの解
a-bの解
a*bの解
a/bの解

}


このように関数内で複数解が出る時に
全てを取得したいっていうことでしょうか?


93ポイント を手に入れた。

Name: パコネコ  ..中級者(10,264ポイント)   Date: 2010/07/06(火) 18:05   No:56139     
Title: Re:関数に渡す引数について    
main()の上で宣言できましたよね?
それでどうですか?


18ポイント を手に入れた。

Name: 爺プログラマー  ..入門者(2,584ポイント)   Date: 2010/07/06(火) 18:13   No:56140     
Title: Re:関数に渡す引数について    
パコネコ さん

回答ありがとうございます。

パブリックに宣言すれば問題ないのですが、引数のみ入れ替えて同じ処理をする関数なので、
パブリック宣言したのでは意味がなくなってしまいます。
この場合、同じ処理をする関数を2個作成することになりメモリー資源に不利となります。


92ポイント を手に入れた。

Name: MNS  ..プログラマー(37,994ポイント)   Date: 2010/07/06(火) 18:18   No:56142     
Title: Re:関数に渡す引数について    
ポインタを使いたくないのなら、参照を使ってはどうでしょうか。

void Swap(int& a, int& b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

int main()
{
    int A = 5, B = 10;
    Swap(A, B);
    return 0;
}


75ポイント を手に入れた。

Name: 爺プログラマー  ..入門者(2,625ポイント)   Date: 2010/07/06(火) 18:24   No:56143     
Title: Re:関数に渡す引数について    
だいちゃん さん

回答ありがとうございます。

main(){ 

int a = 5; 
int b = 10; 

calc(a,b); 





int calc(int a, int b){

この関数でaが変更になった場合aに結果が入らないか、ということです。

}


41ポイント を手に入れた。

Name: fatens  ..上級者(15,971ポイント)   Date: 2010/07/06(火) 18:41   No:56144     
Title: Re:関数に渡す引数について    
>int calc(int a, int b){
>
>この関数でaが変更になった場合aに結果が入らないか、ということです。
>
>}

受け取ったaはあくまでコピーなので、変更することはできません。


なぜこのようにしたいのか分かりませんが、構造体にまとめてしまうのはどうでしょうか。


144ポイント を手に入れた。

Name: シエル  ..プログラマー(25,343ポイント)   Date: 2010/07/06(火) 18:46   No:56146     
Title: Re:関数に渡す引数について    
構造体にまとめて、そのアドレスを渡して変更するのが良いと思います。
なぜ、ポインタを使いたくないのかが分かりませんが…


53ポイント を手に入れた。

Name: 爺プログラマー  ..ぴよぴよ(27ポイント)   Date: 2010/07/06(火) 19:03   No:56150 解決!     
Title: Re:関数に渡す引数について    
MNS  ..プログラマー さん
ありがとうございます、解決しました。


27ポイント を手に入れた。

Name: 爺プログラマー  ..ぴよぴよ(169ポイント)   Date: 2010/07/06(火) 19:07   No:56152     
Title: Re:関数に渡す引数について    
シエルさん

毎度ありがとうございます。

今後はそのようにすれば可能のようですが・・・
今回はゴタゴタと沢山変数を設定した後ですので今から切り替えはシンドイです。




2倍のポイントを手に入れた! 142ポイント を手に入れた。

Name: シエル  ..プログラマー(25,872ポイント)   Date: 2010/07/06(火) 19:16   No:56153     
Title: Re:関数に渡す引数について    
いえ、こちらこそありがとうございます。
私も参照渡しというのを初めて知ることが出来ました。
あまりポインタとの違いは分かりませんでしたが、勉強になりました。


45ポイント を手に入れた。



Name: ラプター  ..ぴよぴよ(182ポイント)   Date: 2010/07/05(月) 11:32   No:56001       
Title: 画像に線が入って横に伸びる    
初めまして、こちらを利用させてもらって学校の授業でゲームを作成しています。
ゲームプログラミングの館のほうで入門編から一つずつ学ばせてもらっているのですが、
画像を表示する部分まではうまくいくのですが、
動かすとなると添付の画像のように線が入ってしまって綺麗に表示されません。
他のメンバーのほうはHP内にある画像のように綺麗に出来てるのですが
自分のPCでだけうまく出ません。
色々と調べてみたのですが原因がつかめなくてさっぱりです。

開発環境
OS:Windows Server 2008 Standerd 
使用ソフト:Visual Studio 2010 Professional Edition

他のメンバーも同じ開発環境です。
この他にXNAを試しに使用するためにVisual Studio C# 2008 Express Editionを
入れているのですがこれが原因でこの現象が起きているのでしょうか?

アドバイスお願いいたします。


182ポイント を手に入れた。


Name: Dixq (管理人)  ..ウィザード(1,230,536ポイント)   Date: 2010/07/05(月) 16:36   No:56018     
Title: Re:画像に線が入って横に伸びる    
13章以降ですよね?ならば、グラフィックドライバの問題かもしれません。ドライバを更新してみてください。また、DXライブラリも最新にしてみて下さい。現在のバージョンはいくつですか?

58ポイント を手に入れた。

Name: ラプター  ..ぴよぴよ(343ポイント)   Date: 2010/07/06(火) 11:37   No:56107     
Title: Re:画像に線が入って横に伸びる    
ご返信ありがとうございます。
はい、13章以降で問題が発生します。
グラフィックドライバは最新のものを入れていましたが念のために新しいものをダウンロードして
入れなおしてみましたが結果は変わりませんでした。
DXライブラリは「DXライブラリ VisualC++用(Ver3.02e)」を使っております。

後別の授業でBorlandC++のコンパイラを入れて使っているのですが、
これは関係ありますでしょうか?
(DXライブラリ BorlandC++用(Ver3.02e)を入れているわけではありません。)


161ポイント を手に入れた。

Name: dic  ..比類無きプログラマー(82,244ポイント)   Date: 2010/07/06(火) 13:20   No:56110     
Title: Re:画像に線が入って横に伸びる    
>OS:Windows Server 2008 Standerd
DxLibの作者に動作OSを聞いたのですが
Server系は触れなかったですね


44ポイント を手に入れた。

Name: Dixq (管理人)  ..ウィザード(1,230,892ポイント)   Date: 2010/07/06(火) 13:24   No:56111     
Title: Re:画像に線が入って横に伸びる    
それは関係ないと思います。
DXライブラリVer3はDirectX9以上対応のグラフィックカードまたはチップが必要ですが、対応していますか?

わからなければ、DXライブラリVer2を使ってみて下さい。こちらはDirectX7ですから古いPCでも動くでしょう。ただし新しいPCでは正常動作しない可能性があります。

もしそれでうまくいけばDirectX9に対応していないのだと思います。


110ポイント を手に入れた。

Name: Dixq (管理人)  ..ウィザード(1,230,914ポイント)   Date: 2010/07/06(火) 13:26   No:56112     
Title: Re:画像に線が入って横に伸びる    
>dicさん

見逃してました…。それが原因でしょうね。


22ポイント を手に入れた。

Name: ラプター  ..ぴよぴよ(474ポイント)   Date: 2010/07/06(火) 15:12   No:56121     
Title: Re:画像に線が入って横に伸びる    
ご返信ありがとうございます。

他に5人メンバーがいますが全員同じ「Server 2008 Standerd」で動いているので
OSは関係ないと思われます。

グラフィックボードのほうは「GF6200A-LP128H - 玄人志向」積んでいますので
DirectX9には対応していると思われます。
dxdiagコマンドで調べたところDirectX11が入っていました。


131ポイント を手に入れた。

Name: シエル  ..上級者(23,169ポイント)   Date: 2010/07/06(火) 15:15   No:56122     
Title: Re:画像に線が入って横に伸びる    
線が入るだけでなく、横にも伸びるのですか?

伸びるのであれば、ウィンドウのサイズ自体が横に大きくなっているということですか?


54ポイント を手に入れた。

Name: ラプター  ..ぴよぴよ(525ポイント)   Date: 2010/07/06(火) 15:19   No:56123     
Title: Re:画像に線が入って横に伸びる    
>シエルさん
添付画像を見ていただけるとわかるのですがウィンドウのサイズは変わっていません。

中に表示する画像などに縦線みたいなのが入って伸びているようなことになっています。


51ポイント を手に入れた。

Name: シエル  ..上級者(23,202ポイント)   Date: 2010/07/06(火) 15:26   No:56124     
Title: Re:画像に線が入って横に伸びる    
リモートデスクトップ接続で他のメンバのPCにつないで、
実行するとちゃんと表示されますか?


33ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,231,013ポイント)   Date: 2010/07/06(火) 18:50   No:56148     
Title: Re:画像に線が入って横に伸びる    
DXライブラリの制作者様に聞いてみてはいかがでしょうか?
公式サイトの掲示板で質問が出来ます。

DirectX自体はWindowsServerに対応していると思いますが、DXライブラリが対応している保証はあるんですかね・・。


99ポイント を手に入れた。



Name: ゆーずぃ  ..入門者(4,477ポイント)   Date: 2010/07/06(火) 13:29   No:56113       
Title: 文字列操作時のメモリの使われ方について    
ふと疑問に思ったのですが、ポインタに直接文字列を代入した場合ポインタのアドレスは一つずつ増加していくと思うのですが、もし極端に長い文字列を代入した時に途中で使用中のアドレスとぶつかったらどうなるのでしょうか?
ちょっと分かりづらいと思うのですが(;^^)
例で書くと、

(*pが確保していない状態の) *p[10000] のアドレスが別の何かで使用中だった場合、
*p = "abcdefg......" ←10000文字を超える文字列

を代入したらどうなるのかと思ったのです。上書きされるのか、メモリの再配置か何かで邪魔者をどけてくれるのか…。
的外れなことを言っているかもしれませんが、分かる方がいらっしゃいましたら是非ご回答をお願いします。


256ポイント を手に入れた。


Name: へろり  ..上級者(18,448ポイント)   Date: 2010/07/06(火) 13:58   No:56115     
Title: Re:文字列操作時のメモリの使われ方について    
言いたいことが今ひとつ解りません。

基本的に自動変数は勝手にスタックに積まれます。
必要なサイズ分を順番に積んでいくので、スタック上に確保した(スタックははじめから確保されてますが)領域がかぶる事はあり得ません。 もしあったらコンパイラのバグです。

malloc() calloc() realloc() 等のメモリアロケート系の関数はすでに確保した領域とかぶらないようにします。
もし、領域がかぶってしまったらやっぱりそれもコンパイラのバグです。


通常文字列定数は定数領域にこっそりと配置されています。 *p が確保していない状態というのが解りませんが、*p が宣言されていようがいまいが、領域を確保していようがいまいが、文字列定数ははじめからこっそりと定数領域に配置されています。


スタックにしろヒープにしろ、きちんと確保した領域はその領域内で使う限り、安全に使える事が保証されています。
でないとプログラムなんてまともに走りませんよ。


214ポイント を手に入れた。

Name: dic  ..比類無きプログラマー(82,404ポイント)   Date: 2010/07/06(火) 14:50   No:56119     
Title: Re:文字列操作時のメモリの使われ方について    
いいたいことと違ったレスかもしれないですが
ポインタがうまく使えてないかもしれないので
ポインタのサンプルを書いておきます
#include <stdio.h>

int main()
{
    char    *p;
    char    hello[100] = "hello world";

    p = hello;

    printf( "%s\n", p );

    return 0;
}



160ポイント を手に入れた。

Name: ゆーずぃ  ..初心者(5,116ポイント)   Date: 2010/07/06(火) 15:33   No:56125     
Title: Re:文字列操作時のメモリの使われ方について    
へろりさん、dicさん、早速のご回答と丁寧なレスをありがとうございます。

>ポインタがうまく使えてないかもしれないので
確かに最近理解したばかりなので危ういところはあります;


>言いたいことが今ひとつ解りません。 
すみません;
何かで読んだのですが、確かポインタに代入するアドレスは変数や定数のアドレスじゃなくても自分で無理やり設定することができるんですよね?(コンパイル環境のせいかもしれませんが、自分ではそのやり方が分からなくて実験することができなかったのですが;)

そこで例えばですね、元々アドレス0x00000008に値'A'が入っていたとします。
そこでchar型のポインタ変数pをアドレス0x00000002で無理やり初期化します。
その上で p = "abcdefghijklmn..." とした場合に、aから順に
0x00000002 = a
0x00000003 = b
0x00000004 = c
0x00000005 = d
.....
となっていくと思うのですが、この時にアドレス0x00000008に入っていた値'A'は上書きされるのかどこか違うアドレスに再編されるのかと…。

イメージのソースはこんな感じです。

#include <stdio.h>

int main(void){

    char *px;
    char *py;

    px = 0x00000008;  //アドレスを無理やり設定(やり方は間違っているのでしょうが;)
    px = 'A';         //アドレス0x00000008に入っているはず?

    py = 0x00000002;  //アドレスを無理やり設定(やり方は間違っているのでしょうが;)
    py = "abcdefghijk";  //アドレス0x00000002から始まるはず?

    /* アドレス0x00000008にあった'A'はどうなる? */

    return 0;
}



なんとなく伝わるといいなと思います;

また別の言い方をすれば、あまりにも巨大すぎて連続するアドレスを確保できなかった配列変数はどうなるのか、と”似たような”感じです…。

分かりづらくてすみませんが、お願いします‥。


639ポイント を手に入れた。

Name: へろり  ..上級者(18,747ポイント)   Date: 2010/07/06(火) 15:47   No:56126     
Title: Re:文字列操作時のメモリの使われ方について    
言いたいことは解りました。

結論から言うと上書きされます。

C言語において代入は常に破壊的コピーです。

>px = 0x00000008;  //アドレスを無理やり設定(やり方は間違っているのでしょうが;)

間違ってはいません。 処理系によっては警告を出すでしょうが間違ってはいません。
組み込み系ではよく見る書き方ですね。
グラフィック用のメモリに直接アクセスするとかなんとか。


ただ、ポインタが返すアドレスはメモリアドレスではありません。
多くの処理系で単にメモリアドレスを返すのも事実ですが、規格上メモリアドレスではありません。
ただ、ポインタが持つ値をアドレスと呼んでいるに過ぎません。
具体的にその値がなんなのか、それはプログラマが知り得るところではありませんし、また知ろうとしてもいけません。

ポインタはただ、インスタンスの在りかを指し示すもの。 ただそれだけです。


C言語は非常に原始的な言語ですから、上書きされそうだから元あるデータをちょっとよそに避難避難。 なんて高等な事はやってくれません。
プログラマは神であり、間違いなんて無い無い。 コンパイラはそう思ってます。


299ポイント を手に入れた。

Name: へろり  ..上級者(18,958ポイント)   Date: 2010/07/06(火) 15:57   No:56127     
Title: Re:文字列操作時のメモリの使われ方について    
読み逃してました。

>また別の言い方をすれば、あまりにも巨大すぎて連続するアドレスを確保できなかった配列変数はどうなるのか、と”似たような”感じです…。 


メモリアローケート系の関数はNULLを返します。
スタックが足りなくなった場合はプログラムは落ちます。SIGSEGVあたりが投げられるでしょう。


>py = 0x00000002;  //アドレスを無理やり設定(やり方は間違っているのでしょうが;)
>py = "abcdefghijk";  //アドレス0x00000002から始まるはず?

ちなみに、この時の py には、"abcdefghijk" が格納されている定数領域のポインタが代入されています。
0x02へのアクセスは行われていません。


211ポイント を手に入れた。

Name: ゆーずぃ  ..初心者(5,654ポイント)   Date: 2010/07/06(火) 17:29   No:56131     
Title: Re:文字列操作時のメモリの使われ方について    
へろりさん、続けてのご回答ありがとうございます!

>ただ、ポインタが返すアドレスはメモリアドレスではありません。 
多くの処理系で単にメモリアドレスを返すのも事実ですが、規格上メモリアドレスではありません。 
ただ、ポインタが持つ値をアドレスと呼んでいるに過ぎません。 
具体的にその値がなんなのか、それはプログラマが知り得るところではありませんし、また知ろうとしてもいけません。 

ポインタはただ、インスタンスの在りかを指し示すもの。 ただそれだけです。



なるほど!私の疑問と冒頭のスタックの説明が理解できました!本当にありがとうございます。

迷惑ついでにもう一つご質問すると、

>ちなみに、この時の py には、"abcdefghijk" が格納されている定数領域のポインタが代入されています。 
0x02へのアクセスは行われていません。

というご指摘の中の、定数領域というのはどういったものなのでしょうか?少し調べましたところ、他にもテキスト領域やヒープ領域というものも出てきたのですが、わかりやすく説明してあるHPが見つかりませんで;スタック領域やヒープ領域は分かるのですが、出来れば定数領域(とテキスト領域)の説明もして頂けませんでしょうか?;

すみませんが、宜しくお願いいたします。


538ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(52,802ポイント)   Date: 2010/07/06(火) 17:40   No:56134     
Title: Re:文字列操作時のメモリの使われ方について    
    char *px;

    px = (char*)0x00000008; // ポインタならちゃんとキャストしましょう
    *px = 'A';
こういうのは環境によってはまったく問題ありません
ポインタがIOに割り当てられたりとか普通にあります
メモリマップがわかっていて自分で管理する環境もあります


76ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(214,650ポイント)   Date: 2010/07/06(火) 18:18   No:56141     
Title: Re:文字列操作時のメモリの使われ方について    
> (*pが確保していない状態の) *p[10000] のアドレスが別の何かで使用中だった場合、 
> *p = "abcdefg......" ←10000文字を超える文字列 

> を代入したらどうなるのかと思ったのです。上書きされるのか、メモリの再配置か何かで邪魔者をどけてくれるのか…。 

使用中というのが、どういう状況なのかによります。
シングルプロセッサの環境で、別のタスク(あるいはスレッド)や割り込みハンドラで同時更新が起きた場合は、上書きといえば上書きになります。
ただし、型によっては代入がアトミックオペレーションになりませんので、中途半端に上書きされる可能性があります。

マルチタスク環境では、上記に加え、バスの調停方法がどうなっているのかに依存します。


130ポイント を落としてしまった。

Name: ゆーずぃ   Date: 2010/07/11(日) 19:48   No:561131278845321 解決!     
Title: Re:文字列操作時のメモリの使われ方について    
toyoさん、たかぎさん、ご回答ありがとうございます!私用でパソコンの使えない環境へと出掛けていたため、お礼が遅くなって申し訳ありませんでした;
これからも宜しくお願いいたします。

>toyoさん
>px = (char*)0x00000008; // ポインタならちゃんとキャストしましょう 

最初見たときは何をしているのか、何故キャストをするのかが分からなかったのですが、何度も読み返すうちになんとなく分かりました。初めてそういった方法を見たので、とても勉強になりました!ありがとうございます。


>たかぎさん

たかぎさんの深い知識、いつも大変尊敬しております。耳慣れない言葉もありますが、そういったお話をして頂けると調べることも出来て大変勉強になります。ありがとうございました!

皆さんありがとうございました!これをもって解決とさせて頂きます!





Name: シエル  ..上級者(22,131ポイント)   Date: 2010/07/04(日) 22:46   No:55969       
Title: 2バイト文字をUNIT型に置き換える方法    
2バイト文字をUINT型に置き換える方法を調べていたところ、
2バイト文字は先行コードと呼ばれるものと、文字コードの2バイトの構成になっていることが分かりました。
さらに調べていたところ、
下記のサンプルがネットに転がっていました。

下記のコードの意味をお伺いしたいのですが、
IsDBCSLeadByte関数で、先行バイトか調べた後に、
(BYTE)c[0]<<8 | (BYTE)c[1]でビット演算をしていますが、この意味が具体的に良く分かりません。

自分の解釈としては先行コードはc[0]に入っており、それを左に8ビットシフトさせて0にし、
c[1]に入ってる文字コードとの論理輪を求め、文字コードだけを取り出しているのかな、
と思いましたが、合っていますでしょうか?
もしそうだとすると、c[1]の値だけcodeに代入すればいいとも思ったのですがどうなのでしょうか?
また、BYTE型にキャストしている意味も分かりません。


char *c = "あ";
UINT code = 0;
if(IsDBCSLeadByte(*c))
   code = (BYTE)c[0]<<8 | (BYTE)c[1];
else
   code = c[0];


どなたか分かる方、具体的に説明していただけますでしょうか?
ビット演算自体苦手なので、考え方自体が破綻していたら申し訳ありません。。。


531ポイント を落としてしまった。


Name: Justy  ..伝説なるハッカー(556,110ポイント)   Date: 2010/07/05(月) 00:36   No:55984     
Title: Re:2バイト文字をUNIT型に置き換える方法    
> code = (BYTE)c[0]<<8 | (BYTE)c[1]; 
 まず BYTE型にキャストしているのは、キャストすることで符号無しであることを確実にする為です(後述)。

 次にその符号なしBYTE型のデータを <<8でシフトするとき、c[0]は整数拡張(汎整数昇格)により
int型として扱われ、それを 8ビットシフトすることになります。
 なので、c[0]が 0でない限りシフトの結果は 0にはなりません。

 そして最後に同じく整数拡張した c[1]と論理和を求めることで2バイトの文字が codeに格納されます。


 例を挙げます。
 環境的に charが符号有り Shift-JISだと仮定すると "あ"の文字は  c[0]に -126、c[1]に -86が入っています。
 これを BYTE型にすることで c[0]は 0x82、c[1]は 0xa0になります。
 c[0]を 8ビット左にシフトすると 0x8200となり、これと c[1]の論理和で結果 codeへは 0x82a0が代入される
ことになります。


>BYTE型にキャストしている意味も分かりません
 そもそも符号付き整数の負の値を左にシフトするのは言語的には未定義な動作となりますので、
符号無しに変換するか、符号有りでも正であることを保証した上で左シフトする必要があります。

 その上で、もしBYTE型にキャストしなかった場合を先ほどの"あ"をある特定環境下での挙動をみてみますと
c[0]を 8ビット左にシフトするとき c[0]の -126は整数拡張により int型として扱われ 0xffffff82とした
状態で 8bit左にシフトします。
 その結果は  0xffff8200となり、c[1]も整数拡張により 0xffffffa0となっていますので
2つの論理和の結果は 0xffff82a0という値になってしまいます。


400ポイント を手に入れた。

Name: シエル  ..上級者(22,996ポイント)   Date: 2010/07/05(月) 11:09   No:56000     
Title: Re:2バイト文字をUNIT型に置き換える方法    
Justyさん。本当にいつも助かります。ありがとうございます!

>>次にその符号なしBYTE型のデータを <<8でシフトするとき、c[0]は整数拡張(汎整数昇格)により 
>>int型として扱われ、それを 8ビットシフトすることになります。 
>>なので、c[0]が 0でない限りシフトの結果は 0にはなりません。
汎整数昇格という言葉は初めて知りました。
ネットで調べると、演算されるときにint型で表現できる値であれば、int型に暗黙的に変換されているらしいですね。
この文章は理解できました。


>>環境的に charが符号有り Shift-JISだと仮定すると "あ"の文字は  c[0]に -126、c[1]に -86が入っています。 
>>これを BYTE型にすることで c[0]は 0x82、c[1]は 0xa0になります。 
charが符号有りだと、正の数は127までしか表現できないので、130という値は-126になってしまう。
それをBYTE型(unsigned char)にキャストすると255まで表現できるので、0x82(130)の正の数で表せるという
認識で大丈夫でしょうか?


>>c[0]を 8ビット左にシフトすると 0x8200となり、これと c[1]の論理和で結果 codeへは 0x82a0が代入される 
>>ことになります。
計算の意味は分かるのですが、なぜc[0]は上位ビット、なぜc[1]は下位ビットで計算をするのでしょうか?
"あ"という文字が、c[0],c[1]の中にどのように分割されて値が入っているのでしょうか?
深く考えずにそういうものだと思ってたほうがいいですかね?



>>そもそも符号付き整数の負の値を左にシフトするのは言語的には未定義な動作となりますので、 
>>符号無しに変換するか、符号有りでも正であることを保証した上で左シフトする必要があります。 
>>その上で、もしBYTE型にキャストしなかった場合を先ほどの"あ"をある特定環境下での挙動をみてみますと 
>>c[0]を 8ビット左にシフトするとき c[0]の -126は整数拡張により int型として扱われ 0xffffff82とした 
>>状態で 8bit左にシフトします。 
>>その結果は  0xffff8200となり、c[1]も整数拡張により 0xffffffa0となっていますので 
>>2つの論理和の結果は 0xffff82a0という値になってしまいます。
この文章の意味は理解できました。


865ポイント を手に入れた。

Name: へろり  ..上級者(16,456ポイント)   Date: 2010/07/05(月) 12:21   No:56002     
Title: Re:2バイト文字をUNIT型に置き換える方法    
>charが符号有りだと、正の数は127までしか表現できないので、130という値は-126になってしまう。 
>それをBYTE型(unsigned char)にキャストすると255まで表現できるので、0x82(130)の正の数で表せるという 
>認識で大丈夫でしょうか? 

キャストしないと整数拡張により、内部のビットパターンが破綻するからでしょう。


>計算の意味は分かるのですが、なぜc[0]は上位ビット、なぜc[1]は下位ビットで計算をするのでしょうか? 
>"あ"という文字が、c[0],c[1]の中にどのように分割されて値が入っているのでしょうか? 
>深く考えずにそういうものだと思ってたほうがいいですかね?

SIFT_JISがそういう仕様だからというのが答えになりますが、シフトを行わずに単純にキャストした場合。

unsigned short moji = *(unsigned short*)"あ";

この場合は、エンディアンの差を吸収出来ません。
リトルエンディアンでは、上位8ビットと、下位8ビットが入れ替わります。

unsigned short moji2 = (BYTE)("あ"[0])<<8 | (BYTE)("あ"[1]);

とした場合のコードと結果を比べてみるとわかりやすいです。


315ポイント を手に入れた。

Name: シエル  ..上級者(22,849ポイント)   Date: 2010/07/05(月) 13:25   No:56006     
Title: Re:2バイト文字をUNIT型に置き換える方法    
へろりさん!ありがとうございます!

リトルエンディアンとかはまだ意味がわかってないので、完全に理解は出来てませんが、
テストしながら理解していきます。

最後に質問ですが、
char *c = "あ"とした場合は、この「あ」という文字はSHIFT_JISとして処理されるのでしょうか?
ほかにもUNICODE等の文字コードがあるのに、なぜSHIFT_JISとして処理されるのかが分かりません。
プロジェクトの文字セットの設定とかが関係してくるのでしょうか?

また変なこと言ってたらすみません。。。


147ポイント を落としてしまった。

Name: へろり  ..上級者(17,010ポイント)   Date: 2010/07/05(月) 13:37   No:56007     
Title: Re:2バイト文字をUNIT型に置き換える方法    
>キャストしないと整数拡張により、内部のビットパターンが破綻するからでしょう。

ちょっと分かりにくかったと思うので補足。

内部のビットをどのように解釈するかその方法が変わるのではなく、ビットパターンそのものが壊れてしまいます。

unsigned char hoge = 130;
signed char hoge2 = 130;
unsigned char hoge3 = -126;
signed char hoge2 = -126;

これらの値はどちらも0x82 ビットパターンは同じです。
0x82 という値が、130でも−126でもどちらでもかまわないのです。
要は10000010(2)であればいいのです。

ところが、整数拡張でint型になると話が変わってきます。

130は正数ですから、
00000000000000000000000010000010(2)になります。

しかし−126は負数ですから、
11111111111111111111111110000010(2)になりますね。

これでは不都合です。


ですから、わかりやすく? 必要な部分だけをマスクして
unsigned int hoge = "あ"[0] << 8 & 0xFF00 | "あ"[1] & 0xFF;
なんてしても0x82A0 という数値は得られるはずです。


(BYTE)でキャストを行う理由は、単に鼻から悪魔を出さないためであるだけなのでしょうけども、計算上でも不都合がありますよということで、鼻から悪魔はスルーしてください。


ところで、0xFFFF8200 と 0xFFFFFFA0 の論理和は 0xFFFFFFA0 ではありませんか。


554ポイント を手に入れた。

Name: へろり  ..上級者(17,319ポイント)   Date: 2010/07/05(月) 13:52   No:56008     
Title: Re:2バイト文字をUNIT型に置き換える方法    
>char *c = "あ"とした場合は、この「あ」という文字はSHIFT_JISとして処理されるのでしょうか? 
>ほかにもUNICODE等の文字コードがあるのに、なぜSHIFT_JISとして処理されるのかが分かりません。 

環境依存です。 少なくとも"あ"は、基本実行文字集合・基本ソース文字集合のいずれにも含まれません。


>プロジェクトの文字セットの設定とかが関係してくるのでしょうか?

プロジェクトというのがよくわかりませんが、VisualStudioで作成するプロジェクトのプロパティの事を言ってるのでしたら、あれはTCHAR型をどう扱うかってだけだと思いますよ。 たぶん。

Unicodeの場合 TCHAR型 は unsigned short型。 で、_T("あ") は、L"あ"
マルチバイト文字の場合 TCHAR型は char型。  で、_T("あ")は、"あ"

ていうだけの設定かと。 多分。 よくはわかりません。


309ポイント を手に入れた。

Name: シエル  ..上級者(22,896ポイント)   Date: 2010/07/05(月) 14:23   No:56009 解決!     
Title: Re:2バイト文字をUNIT型に置き換える方法    
補足説明ありがとうございます。
あとちょっとで理解できそうなので、何回も読み直して理解します!

プロジェクトの文字セットの件は、おっしゃるとおりVisualstdioのプロジェクトのプロパティのことです。
こちらは今回の件では直接関係なさそうですね。

あとは自分で何とかします!ありがとうございました!


追記:
解決し忘れました。 編集済み


47ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(52,614ポイント)   Date: 2010/07/05(月) 14:57   No:56011     
Title: Re:2バイト文字をUNIT型に置き換える方法    
>char *c = "あ"とした場合は、この「あ」という文字はSHIFT_JISとして処理されるのでしょうか?
>ほかにもUNICODE等の文字コードがあるのに、なぜSHIFT_JISとして処理されるのかが分かりません。 

これはファイルのエンコードに関係します
ファイルを「名前を付けてファイルを保存」にした場合保存ボタンにリストボックスがついてきます
これで「エンコード付きで保存」を選ぶとそのファイルの文字コードや改行コードを変えられます

サブバージョンがらみでファイルをUTF-8にしたかったときこの変更方法がわからずに苦労しました


248ポイント を手に入れた。

Name: シエル  ..上級者(22,918ポイント)   Date: 2010/07/05(月) 15:27   No:56012     
Title: Re:2バイト文字をUNIT型に置き換える方法    
toyoさん!情報ありがとうございます。
覚えときます!


22ポイント を手に入れた。

Name: ISLe  ..かけだし(1,801ポイント)   Date: 2010/07/05(月) 22:51   No:56057     
Title: Re:2バイト文字をUNIT型に置き換える方法    
Visual C++だとソースファイルの文字コードに関係なく、"あ"がShiftJISで、L"あ"がUnicodeですよ。


29ポイント を手に入れた。

Name: シエル  ..上級者(23,133ポイント)   Date: 2010/07/05(月) 22:57   No:56059     
Title: Re:2バイト文字をUNIT型に置き換える方法    
ISLeさん!最近はお世話になってます!
Visualc++ならソースファイルの文字コードは関係無いんですね。頭の中で上書きしときます。


39ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(556,184ポイント)   Date: 2010/07/06(火) 02:26   No:56102     
Title: Re:2バイト文字をUNIT型に置き換える方法    
>ところで、0xFFFF8200 と 0xFFFFFFA0 の論理和は 0xFFFFFFA0 ではありませんか
 おっと、その通りですね。
 ご指摘ありがとうございます。


>No:55984
>  その結果は  0xffff8200となり、c[1]も整数拡張により 0xffffffa0となっていますので 
> 2つの論理和の結果は 0xffff82a0 0xffffffa0 という値になってしまいます。



74ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(52,726ポイント)   Date: 2010/07/06(火) 05:56   No:56103     
Title: Re:2バイト文字をUNIT型に置き換える方法    
ISLeさん訂正ありがとうございます
確認したら確かにファイルの文字コード関係なくShift_JISとしてコンパイルされました
勉強になりました


2倍のポイントを手に入れた! 112ポイント を手に入れた。



Name: クロウ  ..中級者(13,738ポイント)   Date: 2010/07/06(火) 00:38   No:56086       
Title: WebCamでの物体追跡について    
数カ月ぶりの投稿になります。

今現在、OpenCVの勉強をしている所です。
そこでAeroBeatのような指定した色の部分を追跡するプログラムを作ってみたのですが、ゆっくり動かすと追跡してくれるのですが、あまり早く動かすと追跡範囲(赤い楕円)から外れてしまって再びそこに持ってくるまで追跡範囲の追跡が行われなくなってしまいます。
原因は明らかに追跡部分が間違っているのだろうとは思うのですが、どうすれば早く動かしてもしっかり追跡してくれるようになるのかがわかりません。
物体追跡の方法はCamShift法を使っています。

よろしくお願いします。

一体、AeroBeatはどうやって追跡しているのかなぁ・・・。


2倍のポイントを手に入れた! 434ポイント を手に入れた。




Name: narica  ..かけだし(2,266ポイント)   Date: 2010/07/05(月) 23:37   No:56065       
Title: 関数が動きません    
一時間も経たずに連続投稿申し訳ありません。

現在、選択した数字によって展開が分岐する簡単なアドベンチャーを作っているのですが、下記のプログラムがうまく動作しません。

#include "stdafx.h"
#include "stdlib.h"

int sentakua(int);
int sentakub(int);

int _tmain(int argc, _TCHAR* argv[])
{
    int a,b,d,e;
    
    printf("\"敵\"が現れた!\n"
        "-------------------------------------------------\n"
        "どうしますか?\n"
        "(1:攻撃する,2:様子を伺う,3:逃げる)---");
    scanf("%d", &a);

    sentakua;

    if(a==1){
        printf("-------------------------------------------------\n");
        printf("\"敵\"の反撃!\n"
            "\"自分\"は 109 のダメージを受けた!\n"
            "-------------------------------------------------\n"
            "どうしますか?\n"
            "(1:攻撃する,2:様子を伺う,3:回復する,4:逃げる)---");    
        scanf("%d", &b);
    }

    else if(a==2){
        printf("-------------------------------------------------\n"
            "どうしますか?\n"
            "(1:攻撃する,2:様子を伺う,3:逃げる)---");    
        scanf("%d", &d);
    }
    
    else if(a==3){
        printf("-------------------------------------------------\n"
            "どうしますか?\n"
            "(1:攻撃する,2:様子を伺う,3:逃げる)---");    
        scanf("%d", &e);
    }

    sentakub;

    system("pause");
    return 0;
}

//-----------------------------------------------------------------------------

int sentakua(int a){    

    switch(a){
        case 1:
            printf("-------------------------------------------------\n"
                "攻撃が当たった!\n"
                "\"敵\"に 55 のダメージを与えた!\n");
            break;

        case 2:
            printf("-------------------------------------------------\n"
                "\"敵\"もこちらの様子を伺っているようだ。\n");
            break;

        case 3:
            printf("-------------------------------------------------\n"
                "しかし、\"敵\"に回り込まれてしまった!\n");
            break;

        default:
            printf("-------------------------------------------------\n"
                "間違った選択をする事は\"死\"を意味します。\n");
            return 0;            
    }

    return 0;
}

int sentakub(int b){

    switch(b){
        case 1:
            printf("-------------------------------------------------\n"
                "\"敵\"にクリティカルヒット!\n"
                "\"敵\"に 126 のダメージを与えた!!\n");
            break;

        case 2:
            printf("-------------------------------------------------\n"
                "\"敵\"はキズを舐めてダメージを回復した!\n");
            break;

        case 3:
            printf("-------------------------------------------------\n"
                "\"自分\"は手持ちの薬草を使った!\n"
                "HPを 68 回復した!\n");
            break;

        case 4:
            printf("-------------------------------------------------\n"
                "うまく逃げ切れた!\n"
                "---END---\n");
            system("pause"); 
            return 0;

        default:
            printf("-------------------------------------------------\n"
                "間違った選択をする事は\"死\"を意味します。\n");
            system("pause"); 
            return 0;
    }

    return 0;
}


最初に 1 を選択すると、 sentakua はきちんと動作するのですが、2回目の 1 を選択すると sentakub がうまく動作しません。
どうすれば sentakub がうまく動作するのか教えて頂けると助かります。


1,324ポイント を手に入れた。


Name: パコネコ  ..中級者(10,374ポイント)   Date: 2010/07/05(月) 23:44   No:56067     
Title: Re:関数が動きません    
選択aって起動してますか?
aの値を渡しているように見えないんですが…
違ったらすいません


30ポイント を手に入れた。

Name: シエル  ..上級者(23,260ポイント)   Date: 2010/07/05(月) 23:49   No:56068     
Title: Re:関数が動きません    
sentakua(&a)
sentakub(&b)
↑この二つの関数へはa,bそれぞれのアドレスを渡すようにします。

int sentakua(int *a)
int sentakub(int *b)
↑そしてこの関数は、上記のようにint型のポインタで受け取ります


switch(*a){
}
↑そしてswitch文のaは*a、bは*bとして下さい。

意味が分からなければ、値渡し、参照渡し、ポインタを勉強して下さい。


追記:
一部修正しました。
 編集済み


127ポイント を手に入れた。

Name: 白い時空  ..かけだし(1,365ポイント)   Date: 2010/07/06(火) 00:02   No:56072     
Title: Re:関数が動きません    
sentakuaをsentakua(a)に
sentakubをsentakub(b)にしてください。

シエルさんはポインタを使っていますが、
sentakua関数・sentakub関数ではa,bの値を変更しないため
ポインタを使う必要はないと思います。


74ポイント を手に入れた。

Name: シエル  ..上級者(23,317ポイント)   Date: 2010/07/06(火) 00:10   No:56075     
Title: Re:関数が動きません    
そのとおりです。まったくポインタを使う必要はありませんでした。
白い時空さんがおっしゃってるようにa,bの値をそのまま渡すだけで良いです。


57ポイント を手に入れた。

Name: narica  ..かけだし(2,361ポイント)   Date: 2010/07/06(火) 00:12   No:56076 解決!     
Title: Re:関数が動きません    
パコネコさん:返答ありがとうございます!
すいません・・・起動してませんでした。

シエルさん:返答ありがとうございます!
意味はわかりませんでしたが、今後のために勉強しようと思います。
ご指摘ありがとうございます。

白い時空さん:返答ありがとうございます!
無事に動きました!
ありがとうございます!


95ポイント を手に入れた。



Name: narica  ..ぴよぴよ(848ポイント)   Date: 2010/07/05(月) 22:00   No:56044       
Title: エラーの原因がわかりません    
今、私は選択した数字によって展開が分岐する簡単なアドベンチャーを作っているのですが、下記のプログラムでコンパイルすると Run-Time Check Failure #3 - The variable 'a' is being used without being initialized. というエラーが出てしまいます。


#include "stdafx.h"
#include "stdlib.h"

int sentakua(int);

int _tmain(int argc, _TCHAR* argv[])
{
   int a;
   sentakua(a);
   system("pause");
   return 0;
}

int sentakua(int a){    

    printf("\"敵\"が現れた!\n"
        "-------------------------------------------------\n"
        "どうしますか?\n"
        "(1:攻撃する,2:様子を伺う,3:逃げる)---");
    scanf("%d", &a);

    switch(a){
       case 1:
        printf("-------------------------------------------------\n"
           "攻撃が当たった!\n"
           "\"敵\"に 55 のダメージを与えた!\n");
           break;

       case 2:
        printf("-------------------------------------------------\n"
           "\"敵\"もこちらの様子を伺っているようだ。\n");
           break;

       case 3:
        printf("-------------------------------------------------\n"
           "しかし、\"敵\"に回り込まれてしまった!\n");
           break;

       default:
        printf("-------------------------------------------------\n"
           "間違った選択をする事は\"死\"を意味します。\n");
 
        return 0;
            
    }

    return 0;
}


なぜこのエラーが出てしまうのか教えて頂けると助かります。
まだ、C言語を始めて日が経たないのでお手柔らかにお願いします。

--------------------------------------------------------------------------------------------------
開発環境
OS:Windows XP Home Edition Service Pack 3
開発環境:Visual C++ 2010 Express 編集済み


848ポイント を手に入れた。


Name: パコネコ  ..中級者(9,724ポイント)   Date: 2010/07/05(月) 22:07   No:56045     
Title: Re:エラーの原因がわかりません    
/*
#include "stdafx.h" 
#include "stdlib.h" 

int sentakua(int a); 
*/
int aではなくintだけだったと思ったのですが…違ったらすいません


2倍のポイントを手に入れた! 118ポイント を手に入れた。

Name: シエル  ..上級者(23,048ポイント)   Date: 2010/07/05(月) 22:10   No:56046     
Title: Re:エラーの原因がわかりません    
The variable 'a' is being used without being initialized
↑これを見るとaの変数が関係していることが分かります。

で、こいつを翻訳にかけると、

「初期化されずに、可変'a'は使用されています。」

と出ました。

まさに、そのとおりでaが初期化されない状態でsentakua関数に渡されてしまっているから、
このエラーが出ております。


19ポイント を手に入れた。

Name: narica  ..ぴよぴよ(915ポイント)   Date: 2010/07/05(月) 22:32   No:56049     
Title: Re:エラーの原因がわかりません    
パコネコさん:直しておきました。
         ご指摘、ありがとうございました!

シエルさん:返答ありがとうございます。
        差し支えなければ初期化のやり方を教えて頂けると助かります。 編集済み


67ポイント を手に入れた。

Name: シエル  ..上級者(23,055ポイント)   Date: 2010/07/05(月) 22:34   No:56051     
Title: Re:エラーの原因がわかりません    
a=0;です。

7ポイント を手に入れた。

Name: narica  ..ぴよぴよ(942ポイント)   Date: 2010/07/05(月) 22:38   No:56052 解決!     
Title: Re:エラーの原因がわかりません    
シエルさん:ありがとうございます!
エラーも出ずにコンパイルできました! 編集済み


27ポイント を手に入れた。

Name: box  ..ハッカー(155,083ポイント)   Date: 2010/07/05(月) 22:40   No:56053     
Title: Re:エラーの原因がわかりません    
> エラーも出ずにコンパイルできました!

そもそも、_tmainからsentakuaにaを渡す必要があったのでしょうか。
提示されたコードを見る限り、必要性は全くないと思います。 編集済み


24ポイント を手に入れた。

Name: シエル  ..上級者(23,094ポイント)   Date: 2010/07/05(月) 22:43   No:56054     
Title: Re:エラーの原因がわかりません    
私も意味がないと思ってましたが、
まだポインタなどがあまり理解されてないと思ってあえて突っ込みませんでした。すみません。


39ポイント を手に入れた。

Name: box  ..ハッカー(155,199ポイント)   Date: 2010/07/05(月) 22:46   No:56055     
Title: Re:エラーの原因がわかりません    
> パコネコさん:直しておきました。
>          ご指摘、ありがとうございました!

別に直さなくてもよかったのに。
プロトタイプ宣言では、引数の型だけ書いてもよいし、
型と変数名を書いてもよいです。

なお、プロトタイプ宣言で
int sentakua(int a);
と書いたからといって、
同関数の定義時も引数の名前をaにしなければならない、
というわけではありません。
まあ、同じにしておくのがわかりやすいですけど。


116ポイント を手に入れた。



Name: タマ  ..入門者(3,786ポイント)   Date: 2010/07/04(日) 12:00   No:55894       
Title: lvalue required as ...    
学校の宿題で、患者が100人いる病院の平均診察時間を入力して、乱数を用いて診察時間を計算、
10人おきに改行して時間を表示するプログラムを作っています。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
srand((unsigned)time(NULL));
int kanja;
double kanjawait=0;
double kakuritu;
double ransu;
int wait;
double x=(double)rand()/RAND_MAX;
printf("平均診察時間は?(整数で):");
scanf("%d",&wait);
kakuritu=1/wait;
ransu=0+(double)(rand()*1-0+1.0)/(1.0+RAND_MAX);
while(kanja=0;kanja<100;kanja++)
{
    while(ransu<kakuritu)
    {
        kanjawait++;
    }
    kanjawait++;
    printf("%d ",kanjawait);
    kanjawait=0;
    if(kanja%10=9)
    {
        printf("\n");
    }
}
return(0);
}

出力例:
 2 16 2 8 2 11 26 3 3 2
 34 11 25 26 4 24 2 7 7 22
 3 4 31 13 14 2 21 6 23 21
 3 9 6 20 25 2 4 8 2 2
 13 12 9 3 4 12 5 4 18 9
 7 28 4 4 24 34 2 2 2 7
 9 3 11 4 7 12 7 4 2 12
 10 33 12 5 14 4 2 7 9 7
 23 4 2 7 3 4 5 6 58 3
 5 5 16 23 4 30 5 10 5 11

これをコンパイルすると、    if(kanja%10=9)  の部分で、
lvalue required as left operand of assignmentなるものが出てきます。
一体どういう意味なのでしょうか?


416ポイント を手に入れた。


Name: パコネコ  ..初心者(6,644ポイント)   Date: 2010/07/04(日) 12:03   No:55895     
Title: Re:lvalue required as ...    
>lvalue required as left operand of assignmentなるものが出てきます。 
これの意味はわかりませんが
if(kanja%10=9)はわざとですか?


44ポイント を手に入れた。

Name: パコネコ  ..初心者(6,708ポイント)   Date: 2010/07/04(日) 12:11   No:55896     
Title: Re:lvalue required as ...    
ワイのやつが(スタディCが)ダメなだけだと思いますが。
RAND_MAXって自分で定義するんじゃないんですね…
>srand((unsigned)time(NULL)); 
これも宣言の前に置けるんですか?



64ポイント を手に入れた。

Name: パコネコ  ..初心者(6,775ポイント)   Date: 2010/07/04(日) 12:17   No:55897     
Title: Re:lvalue required as ...    
>lvalue required as left operand of assignment
「左オペランドまたは割り当てとして必要な左辺値」
翻訳ソフト?によるとこうなるらしいです
左辺値を聞かれているのでやはり「=」が足りないのが原因だと思います


67ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,229,344ポイント)   Date: 2010/07/04(日) 12:26   No:55898     
Title: Re:lvalue required as ...    
RAND_MAXはrand()で返す値の最大値です。
stdlib.hにあるので、includeすれば使えます。

>>srand((unsigned)time(NULL));  
>これも宣言の前に置けるんですか?

C++だと変数宣言は途中でも可能です。
スタディCがC++に対応しているかどうかは解りませんが、C++でコンパイルすると可能になるでしょう。


88ポイント を手に入れた。

Name: パコネコ  ..初心者(6,929ポイント)   Date: 2010/07/04(日) 12:34   No:55899     
Title: Re:lvalue required as ...    
スタディCはC言語のみだと思う…画像の回転とか縮小とかできないこと多いですが、使いやすいんですよね
DX?はうまく起動できなくてまだ使えていません…自分で作ったファイルだとすぐビルドできませんとか、exeが多いとか文句言われてしまって…簡単なものを作るときはすごく使いズらいです。
>C++だと変数宣言は途中でも可能です
そういえば、聞いたことがありましたね。C++だったんですか〜途中でかけるやつ
==================
勉強不足で
===============
大変失礼しました。
 編集済み


154ポイント を手に入れた。

Name: タマ  ..入門者(3,830ポイント)   Date: 2010/07/04(日) 13:43   No:55901     
Title: Re:lvalue required as ...    
>lvalue required as left operand of assignment
=を足したらエラーが消えました、ありがとうございます。

if(kanja%10=9)は、while文の中で最初の値がkanja=0となっているので
10個おきに行を移るには余りが9の時に改行するというつもりです。(0,1,2,3,4,5,6,7,8,9)

今度はwhile(kanja=0;kanja<100;kanja++)で、
expected ')' before ';' tokenと出てきました。
付近の')'が足りないと思い、直前の文章を
ransu=0+(double)(rand()*1-0+1.0/(1.0+RAND_MAX));
と最後の方に')'を足してみましたが駄目でした。


44ポイント を手に入れた。

Name: fatens  ..上級者(15,161ポイント)   Date: 2010/07/04(日) 13:53   No:55902     
Title: Re:lvalue required as ...    
とりあえず、whileではなくforでは。


13ポイント を手に入れた。

Name: タマ  ..入門者(4,176ポイント)   Date: 2010/07/04(日) 15:25   No:55907     
Title: Re:lvalue required as ...    
ありがとうございます。コンパイルが通るようになりました。
また少し文を変えてみました。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
srand((unsigned)time(NULL));
int kanja;
int kanjawait=0;
double kakuritu;
int wait;
double x=(double)rand()/RAND_MAX;
printf("平均診察時間は?(整数で):");
scanf("%d",&wait);
kakuritu=1/wait;
for(kanja=0;kanja<100;kanja++)
{
    while(x>kakuritu)
    {
        kanjawait++;
    }
    kanjawait++;
    printf(" %d",kanjawait);
    kanjawait=0;
    if(kanja%10==9)
    {
        printf("\n");
    }
}
return(0);
}

以前のwhile(x<kakuritu)の状態だと全部1になってしまうので符号を逆にしたのですが、
今度は診察時間を入力した後に動かなくなってしまいます。


346ポイント を手に入れた。

Name: シエル  ..上級者(22,478ポイント)   Date: 2010/07/04(日) 15:31   No:55909     
Title: Re:lvalue required as ...    
  while(x>kakuritu) 
    { 
        kanjawait++; 
    } 

↑このループを抜けてないと思われます。


32ポイント を手に入れた。

Name: box  ..ハッカー(155,006ポイント)   Date: 2010/07/04(日) 16:51   No:55918     
Title: Re:lvalue required as ...    
> kakuritu=1/wait;

この文に問題があります。
例えば、waitに2が入っているとすると、
右辺の計算は1/2という整数同士の割り算となり、
結果は0です。0.5ではありません。
このため、kakurituには0.5ではなく0が入ります。
そういう結果をお望みではないと思います。


109ポイント を手に入れた。

Name: タマ  ..入門者(4,257ポイント)   Date: 2010/07/04(日) 20:54   No:55950     
Title: Re:lvalue required as ...    
while(x>kakuritu)においてxとkakurituの両方が整数になっているのだろうと思い、
kakurituの方をkakuritu=1.00/wait;に、
int wait;をdouble wait;に変えたところ、うまく100人分表示されました。
ですが、またしても全部1になっています。乱数が0〜1の範囲で動いてないのでしょうか?


81ポイント を手に入れた。

Name: box  ..ハッカー(155,059ポイント)   Date: 2010/07/04(日) 21:32   No:55957     
Title: Re:lvalue required as ...    
> int wait;をdouble wait;に変えたところ、うまく100人分表示されました。

平均診察時間は、そもそも整数であることが前提ではないのですか?
もし前提であるなら、それを崩してはいけませんね。


53ポイント を手に入れた。

Name: タマ  ..入門者(4,314ポイント)   Date: 2010/07/04(日) 23:14   No:55972     
Title: Re:lvalue required as ...    
int wait;が理想的ですが、そうすると実行した際に、
ループから抜け出せなくなってしまうのですが何か良い方法はありますか?


57ポイント を手に入れた。

Name: パコネコ  ..初心者(7,619ポイント)   Date: 2010/07/04(日) 23:16   No:55973     
Title: Re:lvalue required as ...    
キャストとかいうのはダメなんですか?
ループの中で…これも前提崩してますかね?


36ポイント を手に入れた。

Name: タマ  ..入門者(4,369ポイント)   Date: 2010/07/05(月) 18:13   No:56023     
Title: Re:lvalue required as ...    
とりあえずdouble wait;のままにしておきます。

double x=(double)rand()/RAND_MAX; 
この文は「0から1までの乱数を作る」の意味で合っているでしょうか?


55ポイント を手に入れた。

Name: タマ  ..入門者(4,689ポイント)   Date: 2010/07/05(月) 21:47   No:56038 解決!     
Title: Re:lvalue required as ...    
自己解決しました。いくつかの()内で乱数を何度も読み込ませたらうまく出来ました。
このプログラムの提出が今日の22:00までなのでとても嬉しいです。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
srand((unsigned)time(NULL));
int kanja,wait,kanjawait;
double x=(double)rand()/RAND_MAX;
printf("平均診察時間は?(整数で):");
scanf("%d",&wait);
for(kanja=0;kanja<100;kanja++)
{
    kanjawait=1;
    while(x>1.0/wait)
    {
        kanjawait++;
        x=(double)rand()/RAND_MAX;
    }
    printf(" %d",kanjawait);
    x=(double)rand()/RAND_MAX;
    if(kanja%10==9)
    {
        printf("\n");
    }
}
return(0);
}


320ポイント を手に入れた。

Name: シエル  ..上級者(23,029ポイント)   Date: 2010/07/05(月) 21:58   No:56042     
Title: Re:lvalue required as ...    
まさにギリギリですねwおめでとうございます!

18ポイント を落としてしまった。



Name: bun  ..入門者(4,536ポイント)   Date: 2010/07/05(月) 20:53   No:56031 解決!       
Title: 二分木を使ったプログラム    
いつもお世話になっております。
前置記法(ポーランド記法)で与えられた式を二分木として読込み計算させるプログラムに取り組んでいます。
添付した画像のように出力するのを目標としているのですが、「計算過程」の出し方がわかりません。
なお、Java言語で再帰的な構造を利用して書いております。
ご協力お願いします。
自己解決しました。 編集済み


61ポイント を手に入れた。




Name:  ..初心者(6,322ポイント)   Date: 2010/07/04(日) 10:23   No:55886       
Title: cppファイルが追加できない:Visual C++ 2008    
 タイトルの通りなんですが、空のプロジェクトを
作成した後にソースコードに追加をしようとして
追加→新しい項目としてもそこにcppファイルが出てきません。
でてくるのはwindowsフォーム プロパティシート コンポーネントクラス
とオンラインテンプレートの検索の計4つだけです。

 以前にも一回あって、その時はVC++を再インストールしたら
直ったのですが、今後また起きそうな気がするので、
できれば、再インストール以外の解決方法と原因を知りたいです。

 環境は
os:windows xp pro sp3
コンパイラ:Visual C++ 2008


237ポイント を手に入れた。


Name: たいちう  ..ハッカー(100,398ポイント)   Date: 2010/07/04(日) 10:43   No:55888     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
ファイルではなく、プロジェクトを追加しようとしているのではないですか?
メニューの、ファイル→新規作成→ファイルを選ぶと「新しいファイル」ダイアログが出ます。
そこのカテゴリで、「Visual C++」を選べば、C++ファイルという選択肢が出ますが。

これで解決しないようでしたら、もっと情報が必要かも。
VC2008のエディション名や、どのようにインストールしたか、
ファイル追加の際の正確な手順など。


165ポイント を手に入れた。

Name:  ..初心者(6,750ポイント)   Date: 2010/07/04(日) 11:04   No:55889     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
>>ファイルではなく、プロジェクトを追加しようとしているのではないですか? 
プロジェクトを追加しているわけではないです。

>>メニューの、ファイル→新規作成→ファイルを選ぶと「新しいファイル」ダイアログが出ます。
メニューを開くのはプロジェクトを開いた後ですか?
それともプロジェクト作成前のスタートページ?が表示されている地点でですか?
どちらにせよ出てくる「新しいファイル」ダイアログには
HTMLページ スタイルシート XMLファイル XMLスキーマ XSLTファイル
の計5つが出てくるだけです。

>>そこのカテゴリで、「Visual C++」を選べば、C++ファイルという選択肢が出ますが。
カテゴリですか?えと、visual studioにインストールされたテンプレートの下に
上に書いた五つの選択肢がでているだけであとは「開く」ボタンと「キャンセル」ボタンのみです。

 インストール方法
「14歳からはじめるC言語ゲームプログラミング教室」という本に付属しているCD-ROM
からインストールしました。ISBN 978-4-89977-217-0

 CDには MicrosoftVisualStudioExpressEditionsと題名があり、
そこにVb2008,VC#2008,VC++2008,VWD2008,SQLserver2005が含まれており
それのVC++2008をインストールしました。
 確証はありませんが、このCDはマイクロソフトのHPからダウンロードしたISOイメージを
そのまま焼いただけかなと思います。//以前そっちをダウンロードして使用したことがあるので

 初期設定のままインストールして特にインストール時に設定はいじっていません。
とりあえず、ヘルプからだせた情報も載せておきます
Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1

インストールされている Edition: VC Express

Microsoft Visual C++ 2008   91909-152-0000052-60459
Microsoft Visual C++ 2008


428ポイント を手に入れた。

Name: シエル  ..上級者(22,488ポイント)   Date: 2010/07/04(日) 15:33   No:55910     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
「Visual C++」というカテゴリを選択した状態の画面ショットを
見せてほしいです。


10ポイント を手に入れた。

Name:  ..初心者(6,814ポイント)   Date: 2010/07/04(日) 16:12   No:55911     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
 まず、visual C++というカテゴリを選択できません。
とりあえず、ファイル→新規作成→ファイルとしたのちに
出た画面だけはりつけてみます.


64ポイント を手に入れた。

Name: シエル  ..上級者(22,560ポイント)   Date: 2010/07/04(日) 16:18   No:55913     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
私の場合はファイル→新規作成→ファイルを選択したら、
visual C++と全般の項目が出てきて、visual C++を選択したら、c++ファイルとかが
選べるようになるんですけどね。。

ちなみにライセンス登録してますか?
登録してなければ、インストールしてから、何日ぐらい経ってますか?


72ポイント を手に入れた。

Name:  ..初心者(7,057ポイント)   Date: 2010/07/04(日) 17:30   No:55923     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
>>ファイル→新規作成→ファイルを選択したら、 
>>visual C++と全般の項目が出てきて、visual C++を選択したら、c++ファイルとかが 
ここの時点ですでにさきほどはりつけた画面しか出てこないです。

 ライセンス登録はしてあります。インストールしてから
だいたい90日手前というくらいかと思います。

 以前作成したプロジェクト等を開いて編集してコンパイルすることは
できます。開いたプロジェクトに対して既存の項目を追加で
cppファイルを追加することもできています。

 新しく追加することができないだけです。
やはり、再インストールしかないのでしょうか?


243ポイント を手に入れた。

Name: シエル  ..上級者(22,589ポイント)   Date: 2010/07/04(日) 17:40   No:55925     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
う〜ん。私では判断できかねます。

他の詳しい方の回答を待ちましょう。


25ポイント を落としてしまった。

Name: たいちう  ..ハッカー(100,459ポイント)   Date: 2010/07/04(日) 18:37   No:55931     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
プロジェクトを先に作成し、その後ファイルを追加する方法ではどうですか?
私の環境では、プロジェクトなしでもファイルを新規作成できるのですが。

一応、参考になりそうなページ。
http://eternalwindows.jp/else/vc2008.html


61ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(183,668ポイント)   Date: 2010/07/04(日) 18:40   No:55932     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
とりあえず新規プロジェクトの作成から行ったことを説明してもらえますか?
新規ファイルの作成でカテゴリが選べないのも変ですので。


49ポイント を落としてしまった。

Name:  ..初心者(7,263ポイント)   Date: 2010/07/04(日) 20:06   No:55941     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
>たいちうさん
どっちもだめです。VC++でcppファイルを作成することができません。
プロジェクトは作成できます。そのプロジェクト既存の項目を追加で
別に作成したcppファイルを入れることはできます。

URL上の「新しい項目を追加」のダイアログで
参考ページでは
・c++ファイル(cpp)
・ヘッダーファイル(h)
・コンポーネントクラス
と三つ出ていますかが、
僕の環境では「コンポーネントクラス」だけしか
出ません。

>softyaさん
VC++の起動→プロジェクトの作成→win32コンソールアプリケーション
→その後出てきたダイアログから、空のプロジェクトとコンソールアプリケーションに
チェックを入れて okを押す。

その後は左側にあるツリー?のソースフォルダを右クリックで、新規→追加
   あるいは
ファイル→新規作成→ファイル
です。


206ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(183,729ポイント)   Date: 2010/07/04(日) 21:58   No:55962     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
うーん。経験したことがないですね。すいません、分かりかねます。

もし、VC++2008がSP1じゃなかったらこの機会にSP1を入れたほうが良いですね。
http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/


61ポイント を手に入れた。

Name: ISLe  ..かけだし(1,772ポイント)   Date: 2010/07/05(月) 01:36   No:55988     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
C:\Program Files\Microsoft Visual Studio 9.0\VC\vcprojectitems

hfile.h
newc++file.cpp
というファイルが無いと質問者さんのような現象が発生しました。
ファイルを作ってVisual C++を起動しなおせば表示されるようになります。

どちらも0バイトのファイルなのでウイルス対策ソフトやハードディスク掃除ソフトのようなソフトが勝手に削除してしまっているのかもしれません。


123ポイント を手に入れた。

Name:  ..初心者(7,356ポイント)   Date: 2010/07/05(月) 18:13   No:56022 解決!     
Title: Re:cppファイルが追加できない:Visual C++ 2008    
>ISLeさん
まさに、その通りでした。ハードディスクの掃除のとき
0バイトのファイルをすべて消していました。まさか、
そこにそんな重要なファイルがあるとは…
 今作成してみましたが、ちゃんと、cppファイルも追加できるように
なりました。
 助言、助力本当にありがとうございました。大変助かりました。


93ポイント を手に入れた。



Name: スカイ  ..ぴよぴよ(21ポイント)   Date: 2010/07/03(土) 02:51   No:55799       
Title: 助けてください。ファイルの書き込み    
ここの掲示板を利用させてもらいハイスコアをファイルに保存できるシューティングを作成しました。

それをVisual Studioで起動させてファイルに保存するときはいいのですが、インストーラでインストールしたCSVファイルやtxtファイルは、上書き禁止のモードになってしまいファイルの更新が出来ません。

インストーラの作成はVisual Studioで行ないました。

どうすればよいのかわかれば力を貸して頂ければと思います。宜しくお願いします。


21ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(552,931ポイント)   Date: 2010/07/03(土) 18:34   No:55842     
Title: Re:助けてください。ファイルの書き込み    
 セットアップ関連はあまり詳しくはないのですが、その csvなどのファイルか何かのプロパティで
項目 "ReadOnly"にTrueが入っていませんか?

 もしあれば Falseにしてみてください。


2倍のポイントを手に入れた! 98ポイント を手に入れた。

Name: スカイ  ..ぴよぴよ(167ポイント)   Date: 2010/07/03(土) 22:08   No:55846     
Title: Re:助けてください。ファイルの書き込み    
解答ありがとうございます。

今日一日試行錯誤してみたのですが自分自身の質問内容がおかしかったみたいです。

四聖龍神録Plusはセーブデータやリプレイデータは何処に保存しているのでしょうか?またどのように保存しているのでしょうか?

自分はProgram Filesの所に保存しようとしたところファイルの作成自体が出来なく困っています。


146ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(553,324ポイント)   Date: 2010/07/03(土) 23:02   No:55852     
Title: Re:助けてください。ファイルの書き込み    
 ひょっとして Visuaか 7ですか?
 だとすると、 UACに引っかかっているような。

DSAS開発者の部屋:Vista で動くプログラムを書くために 〜UAC編〜
http://dsas.blog.klab.org/archives/51108671.html


 もしそうなら、設定ファイルはアプリの直下などにおかないで SHGetSpecialFolderPathや SHGetFolderPathで
取得した APPDATA等のパスにアプリ用のディレクトリを作成しその中に設定ファイルを保存するといいかと。

Windows アプリケーションの設定ファイル (ini ファイルや config ファイル) 格納場所について
http://seclan.dll.jp/cciniloc.htm


# 或いは Program Filesにアプリを入れない、とか……。


>四聖龍神録Plusはセーブデータやリプレイデータは何処に保存しているのでしょうか
 XPの場合はアプリ直下に作成したセーブデータ・リプレイデータ専用フォルダに保存しているようです。
 Vistaの場合も同じかどうかはわかりません。


365ポイント を手に入れた。

Name: スカイ  ..ぴよぴよ(232ポイント)   Date: 2010/07/05(月) 17:43   No:56020 解決!     
Title: Re:助けてください。ファイルの書き込み    
いろいろやった結果appdataに保存することで出来ました。

vistaだったのでセキュリティーの問題だったのだと思います。ありがとうございました。


65ポイント を手に入れた。



Name: NN  ..ぴよぴよ(678ポイント)   Date: 2010/07/03(土) 18:05   No:55836       
Title: enumの定義の仕方に関して    
いつもお世話になっております。
超初歩的な質問ですが、「enumの定義の仕方」を教えていただければと思います。
まずは、参考ソースを載せていただきます。

int i ;

enum DEBUG_T{
    MENU0,
    MENU1,
    MENU2,
};
DEBUG_T DEBUG;

switch ( i ){
    case DEBUG.MENU0 :
        break;
    case DEBUG.MENU1 :
        break;
    case DEBUG.MENU2 :
        break;
}


上記のソースでコンパイルを行うと

'.Menu0' の左側はクラス、構造体、共用体でなければなりません
'.Menu1' の左側はクラス、構造体、共用体でなければなりません
'.Menu2' の左側はクラス、構造体、共用体でなければなりません

とコンパイルエラーが起こってしまいます。
いかんせん初めてenumを使うので、色々とググッてみても
ググり方が悪いのか、正答を得ることができませんでした。

非常に初歩的な質問で恐縮なのですが、
ご教授のほどよろしくお願いいたします。


233ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(213,953ポイント)   Date: 2010/07/03(土) 18:13   No:55838     
Title: Re:enumの定義の仕方に関して    
言語は何でしょうか?


13ポイント を手に入れた。

Name: シエル  ..上級者(21,615ポイント)   Date: 2010/07/03(土) 18:17   No:55839     
Title: Re:enumの定義の仕方に関して    
この辺がわかりやすいかと。
http://www.geocities.jp/ky_webid/c/046.html


34ポイント を手に入れた。

Name: NN  ..ぴよぴよ(931ポイント)   Date: 2010/07/03(土) 18:27   No:55840 解決!     
Title: Re:enumの定義の仕方に関して    
いつもお世話になっております。

>たかぎ様
C++です。言語によって、定義の仕方が異なるのですね。。。

>シエル様
さきほどもそのページを見て研究してたつもりですが、
再度よく見直したら、解決しました。

結局は以下のように変更しました。
int i ;

enum DEBUG_T{
    MENU0,
    MENU1,
    MENU2,
};

switch ( i ){
    case MENU0 :
        break;
    case MENU1 :
        break;
    case MENU2 :
        break;
}


以上となります。
ご教授いただき誠にありがとうございました。


253ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(213,984ポイント)   Date: 2010/07/03(土) 18:27   No:55841     
Title: Re:enumの定義の仕方に関して    
> 言語によって、定義の仕方が異なるのですね。。。 

どの言語でも書き方が同じであれば、別の言語である必然性がありませんね。


31ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(52,366ポイント)   Date: 2010/07/05(月) 10:13   No:55997     
Title: Re:enumの定義の仕方に関して    
列挙型変数の定義なら
enum DEBUG_T i;
/* */
switch ( i ){
    case MENU0 :
        break;
    case MENU1 :
        break;
    case MENU2 :
        break;
}

のように使うのでは


55ポイント を手に入れた。



Name: たかぎ [URL]  ..ハッカー(213,382ポイント)   Date: 2010/07/03(土) 00:35   No:55795       
Title: 【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
うちのサイトに、
http://www.kijineko.co.jp/tech/superstitions/compiler-is-mind-reader.html
といった記事があります。
これに関して具体例を挙げて説明しようとすると、なかなかこれといった例が思いつきません。
そこで、皆さんのいろいろな体験を聞かせていただけないでしょうか?
レベルの高い、低いは問いません。


120ポイント を手に入れた。


Name: わふー  ..入門者(4,029ポイント)   Date: 2010/07/03(土) 03:31   No:55800     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
こんにちは。
構造体とかクラスなどへのポインタpを作り、p.Init();としたときなどに「代わりに '->' を使用しますか?」と聞いてくれることですとか?
こんな感じの解答でいいんでしょうかね?


86ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(213,562ポイント)   Date: 2010/07/03(土) 03:56   No:55801     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
> 構造体とかクラスなどへのポインタpを作り、p.Init();としたときなどに「代わりに '->' を使用しますか?」と聞いてくれることですとか? 

ちょっと違います。
わかりやすい例でいうと...

if (1 <= month <= 12)  /* 月の値は1から12でなければならない */
{
    ...
}
else
{
  /* エラー処理 */
}

とか、


#include <stdio.h>

struct A
{
  int value;
}

static a;

int main(void)
{
  printf("%d\n", a);
  return 0;
}

のようなものですかね。


74ポイント を手に入れた。

Name: ookami  ..プログラマー(32,850ポイント)   Date: 2010/07/03(土) 12:29   No:55808     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
代入と比較を間違えて
if(i=1){...}
とかですかね。私はBasicから入ったので最初戸惑いました。


38ポイント を落としてしまった。

Name: fatens  ..上級者(15,125ポイント)   Date: 2010/07/03(土) 13:37   No:55812     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
#include <stdio.h>

int main(void)
{
    int a = 2;
    int b = 3;
    double c = (a + b) / 2;    /* aとbの平均のつもり */

    printf("c = %f\n", c);

    return 0;
}

こういうのをやってしまったことがあったと思います。


以下「プログラマーのためのソースコードを読む技術」に関することです。
もうご存知のことかもしれませんが、お時間があるときにでも確認していただければ。
P.23 本文
    && 演算子は短絡評価を行います.
 → || 演算子の間違いだと思います。
P.58 [ブロックを単位としたスコープがないPHP]
    $a = 1; (C)
 → C言語の方ではint a = 2;なので、こちらも$a = 2ではないでしょうか。
P.60 [C++のデストラクタ]
    foo x; (xのデストラクタはfunc関数から抜ける時点で呼び出される)
 → func関数ではなくg関数だと思います。
P.71 本文
    ソースコードを可読性を上げることができます。
 → ソースコードの ではないでしょうか。
    そのあとの文ではそうなっています。
P.80 [単純なスタックの実装例]
    *sp = value;
    int value = *sp;
 → stack[sp] = value;
    int value = stack[sp];
    ではないでしょうか。
奥付
    2010年7月10日 初版 第1刷発行
 → これを書いているのが7月3日なので……

まだまだ読み解けていないので、もう何度か読み返したいと思います。


4ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(213,621ポイント)   Date: 2010/07/03(土) 13:48   No:55813     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
ookamiさん、fatensさん、情報ありがとうございます。
両方ともありがちですね。

あと、fatensさん
本に関する内容はここでレスするときりがなくなるので、メールでご連絡いただけると助かります。


59ポイント を手に入れた。

Name: fatens  ..上級者(15,148ポイント)   Date: 2010/07/03(土) 13:53   No:55814     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
分かりました。
もし今後何かあればそのようにします。


23ポイント を手に入れた。

Name: s-rush  ..熟練のプログラマー(59,326ポイント)   Date: 2010/07/03(土) 14:44   No:55820     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
#include <stdio.h>

int main(void){
  int a = 10;
  int b = 20;

  /*aとbの入れ替え*/
  a = b;
  b = a;
  printf("a=%d b=%d\n", a, b);
  return 0;
}


C言語を勉強し始めた人で、変数の中身を入れ替える処理でこのように書いちゃう人が
結構な確率でいるような気がします^^;

って言ってる私も同じミスをした人の1人ですがorz


コンパイラにも人工知能的な技術が組み込まれて、
人間の心を察して補間してくれるような日が来るんでしょうかね?

こういうようなコンパイラがあれば、バグ解析も楽になるのでは・・・
と、素人の甘い考えですいません^^;

けど、大規模なプログラムのバグってしょうもないミスが多いんですよね
1をiと書き間違っていたり、
if(cnt=1)としてしまっていたり・・・


283ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(213,825ポイント)   Date: 2010/07/03(土) 15:06   No:55825     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
> C言語を勉強し始めた人で、変数の中身を入れ替える処理でこのように書いちゃう人が 
> 結構な確率でいるような気がします^^; 

これは今までで一番よい例かもしれませんね。

他には、別の言語ではこうだったので、CやC++でもこうなるに違いないとかいった例もあると教えて下さい。>みなさん

> コンパイラにも人工知能的な技術が組み込まれて、 
> 人間の心を察して補間してくれるような日が来るんでしょうかね? 

これはかえってコントロールが難しくなります。
書いたとおりに動いてくれる素直なコンパイラが結局は一番使いやすいと思います。

> けど、大規模なプログラムのバグってしょうもないミスが多いんですよね 
> 1をiと書き間違っていたり、 

こういうのは単純なケアレスミスですね。


100ポイント を手に入れた。

Name: s-rush  ..熟練のプログラマー(60,160ポイント)   Date: 2010/07/03(土) 15:17   No:55826     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
>これはかえってコントロールが難しくなります。 
>書いたとおりに動いてくれる素直なコンパイラが結局は一番使いやすいと思います。 

確かにそうですよね^^;
でも、警告で表示してくれるようになれば便利そうな気はします。
この文章、ほんとに意図して書いたの?
みたいな・・・

>こういうのは単純なケアレスミスですね。
い、痛いところをorz


2倍のポイントを手に入れた! 344ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(213,692ポイント)   Date: 2010/07/03(土) 15:33   No:55827     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
こういうコードを見たような気が...

#include <stdio.h>

int main(void)
{
  char *x = '123';
  int y = x + 1;
  printf("%d\n", y);
  return 0;
}

123 + 1 なので 124 が出力されるはずなのに、なぜか 3224116 のようなワケの分からない値が出力されます。
とか...


133ポイント を落としてしまった。

Name: パコネコ  ..初心者(6,365ポイント)   Date: 2010/07/03(土) 17:24   No:55829     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
ワイはポインタの勉強中に中身に+1をしたいのにアドレスに+1とかしちゃうのよく聞きます。
(自分でもある)
まあこれもケアレスミスだと言われればそれまでですが。


66ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(213,757ポイント)   Date: 2010/07/03(土) 17:42   No:55831     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
> ワイはポインタの勉強中に中身に+1をしたいのにアドレスに+1とかしちゃうのよく聞きます。 
> (自分でもある) 
> まあこれもケアレスミスだと言われればそれまでですが。

ちゃんと理解していない場合はダメですね。
理解はしているけれども、単なる打ち間違いとか、編集ミスとかであれば、それはケアレスミスだと思います。


65ポイント を手に入れた。

Name: シエル  ..上級者(21,581ポイント)   Date: 2010/07/03(土) 17:56   No:55835     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
察してくれた経験はないですね。

前は予約語を変数名にしてしまったんですが、コンパイラが意味不明な回答をしたので、
原因を突き止めるのに、相当時間がかかりましたw


70ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(213,940ポイント)   Date: 2010/07/03(土) 18:11   No:55837     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
> 察してくれた経験はないですね。

そうですか?
実際には動作が未定義になるものであっても、処理系によっては期待通りにコンパイルできて、しかも期待通りに動いてしまうということはよくありますよ。
例えば、int型が32ビットの処理系で、-1 << 32 と書くと、期待通りに 0 になるとかです。

> 前は予約語を変数名にしてしまったんですが、コンパイラが意味不明な回答をしたので、 
> 原因を突き止めるのに、相当時間がかかりましたw

これはときどきやりますね。
処理系の独自拡張の予約語が一番危険です。とくに、interface とか...


158ポイント を手に入れた。

Name: ISLe  ..かけだし(1,395ポイント)   Date: 2010/07/03(土) 23:57   No:55858     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
わたしも察してくれた経験はないです。
既出のは裏切られたサンプルに見えるんですけど。

> 例えば、int型が32ビットの処理系で、-1 << 32 と書くと、期待通りに 0 になるとかです。

-2 >> 1 が絶対に -1 になると思い込んでいる人はもっと多いと思いますね。
未定義ではなくて処理系定義だから分かってて期待する分には良いと思いますけど。


察してくれるというのはこんな↓イメージですか?

LLVMのC/C++コンパイルエラーメッセージはわかりやすい|マイコミジャーナル
http://journal.mycom.co.jp/news/2010/04/07/037/index.html


206ポイント を手に入れた。

Name: ISLe  ..かけだし(1,417ポイント)   Date: 2010/07/04(日) 00:03   No:55860     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
失礼しました。

> -1 << 32

は未定義でした(intが32ビットの場合)。


22ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(214,249ポイント)   Date: 2010/07/04(日) 00:14   No:55863     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
> 既出のは裏切られたサンプルに見えるんですけど。 

ちょっと表現が悪かったので、混乱がありますね。
基本的には、コンパイラは察してくれないものです。
(ただし、処理系によってはたまたま察してくれるケースもないわけではありません)
例えば、


#include <stdio.h> 

int main(void) 

  char *x = '123'; 
  int y = x + 1; 
  printf("%d\n", y); 
  return 0; 


のようなコードを書く初心者は、124 が出力されることを期待しているわけです。
しかし、そんな気持ちを察してくれるはずはないので、無残にも裏切られます。
今回の質問は、「察してくれる」と感じたことがあるかどうかですので、このコードを書いた人は、少なくとも動かして絶望するまでは、そのように感じていた可能性があります。

「察してくれる」と感じる原因のひとつが、たまたま察してくれる場合があるということかと思います。
先のシフトもそうですが、

std::vector<std::vector<int>> v;

のようなコードが期待通りにコンパイルできてみたり、

struct A
{
  struct B
  {
    int b;
  };
};

struct A a;
a.b = 123;

のようなコードが期待通りに動いてみたりしますので。

> 察してくれるというのはこんな↓イメージですか? 
> LLVMのC/C++コンパイルエラーメッセージはわかりやすい|マイコミジャーナル 
http://journal.mycom.co.jp/news/2010/04/07/037/index.html 

このようなエラーや警告メッセージもそうですが、主には実際の動作についてですね。


265ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(214,295ポイント)   Date: 2010/07/04(日) 00:20   No:55864     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
> > -1 << 32 
> は未定義でした(intが32ビットの場合)。 

これは二重の意味で未定義です。
-1 << 1 が -2 になると期待している人は、もっと多いでしょうね(そして、多くの場合、その期待は察してもらえます)。


46ポイント を手に入れた。

Name: ISLe  ..かけだし(1,488ポイント)   Date: 2010/07/04(日) 00:47   No:55867     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
> 今回の質問は、「察してくれる」と感じたことがあるかどうかですので、このコードを書いた人は、少なくとも動かして絶望するまでは、そのように感じていた可能性があります。 

なるほど理解しました。
そうすると裏切られた経験がないと期待していたことにも気付かないのではないでしょうか。

ゲームプログラムでは背景スクロールなど負数に対するビットシフトや剰余を使うことになる機会は多いです。
言語仕様を読むと未定義だったり処理系定義だったりするのですが期待通りに動かないことがありません。
プロのゲームプログラマの中にも一生そのことに気付かない人がたくさんいると思います。

わたしも10年以上知らずにコード書いてました。
いまでもスクロールオフセットを正の数に修正するコードは必要なのか悩みどころです。


26ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(214,407ポイント)   Date: 2010/07/04(日) 01:23   No:55869     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
> ゲームプログラムでは背景スクロールなど負数に対するビットシフトや剰余を使うことになる機会は多いです。 
> 言語仕様を読むと未定義だったり処理系定義だったりするのですが期待通りに動かないことがありません。 
> プロのゲームプログラマの中にも一生そのことに気付かない人がたくさんいると思います。 

それはわかります。
規格上は未定義であっても、移植性を捨てるつもりであれば、時には目を瞑ることは必要だと思います(自サイトであまり大声でいうと、リンクを貼られて免罪符にされるのが嫌なのでやりませんが...)。
ただし、動作がドキュメント化されていないのであれば、処理系に何らかの動作保証を求めるのであればやめるべきですし、コンパイル結果の確認なしに安心することもできませんね。

負値の左シフトは、(本当は未定義なのに)コンパイラがプログラマの気持ちを察してくれたかのような振る舞いをする例として挙げました。
しかし、今回求めているのは、気持ちを察してくれて期待通りに動作してくれると思っていたのに、実際にはそうはならなかったという具体例です。


112ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(214,523ポイント)   Date: 2010/07/04(日) 01:41   No:55871     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
↓に応えていませんでした。

> そうすると裏切られた経験がないと期待していたことにも気付かないのではないでしょうか。 

完全にそうかどうかはともかく、おおむねその通りです。

期待を裏切られることは多々あると思いますが、処理系の不具合や標準準拠度の低さなどが原因のものではなく、プログラマ側に問題がある例を集められればと考えています。


116ポイント を手に入れた。

Name: 組木紙織  ..比類無きプログラマー(87,941ポイント)   Date: 2010/07/04(日) 01:51   No:55873     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
まだ、質問を十分理解してないのですが、
C++で継承を使ってるつもりなのにvirtualを関数名の前につけてないとかはどうでしょうか


10ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(214,579ポイント)   Date: 2010/07/04(日) 02:03   No:55874     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
> C++で継承を使ってるつもりなのにvirtualを関数名の前につけてないとかはどうでしょうか

すみません。意味がわかりませんでした。
派生クラス側だけでなく、基底クラス側でもvirtualを付けていないのに、オーバーライドしたつもりになっていたということでしょうか?


56ポイント を手に入れた。

Name: 組木紙織  ..比類無きプログラマー(88,116ポイント)   Date: 2010/07/04(日) 02:09   No:55876     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
きちんと書かなかったせいで分かりにくくてすみません。

>派生クラス側だけでなく、基底クラス側でもvirtualを付けていないのに、オーバーライドしたつもりになっていたということでしょうか? 

そういうことです。

コードで書くなら以下のような感じです。
class Base
{
publc:
 virtual f();//ここのvirtualを忘れていた。
};



ほかには、std::auto_ptrの使い方のミスとかもはいるのかな。


175ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(214,764ポイント)   Date: 2010/07/04(日) 02:16   No:55877     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
> コードで書くなら以下のような感じです。 
> class Base 
> { 
> publc: 
>  virtual f();//ここのvirtualを忘れていた。 
> }; 

なるほど。
派生に絡むものだと、次のようなものもありますね。

#include <stdio.h>

struct A
{
    virtual void func(int x = 1)
    {
        printf("A::func(%d)\n", x);
    }
};

struct B : A
{
    virtual void func(int x = 2)
    {
        printf("B::func(%d)\n", x);
    }
};

int main()
{
    B b;
    A* p = &b;
    p->func(); // B::func(2)が出力されると思っていた。
}

あるいは、

struct A
{
    A()
    {
        func();
    }
    virtual void func();
};

struct B : A
{
    virtual void func();
};

B b;  // A::AからB::funcが呼び出されると思っていた。


185ポイント を手に入れた。

Name: めるぽん  ..入門者(3,755ポイント)   Date: 2010/07/04(日) 05:03   No:55881     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
#include <iostream>
 
struct Hoge
{
    Hoge() { std::cout << "呼ぶなよ!絶対呼ぶなよ!" << std::endl; }
    Hoge(const Hoge&) { std::cout << "コピーなんて絶対しちゃダメだぞ!" << std::endl; }
};
 
int main()
{
    Hoge h1();
    Hoge h2(Hoge());
}

何も出力されません、とか。
いやこれはむしろ出力されないのが意図通りじゃないんでしょうけど……。


126ポイント を手に入れた。

Name: めるぽん  ..入門者(4,167ポイント)   Date: 2010/07/04(日) 05:13   No:55882     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
ふと思ったのですけど、
#include <iostream>
int main()
{
    std::cout << "hoge";
}

とか書いても、ちゃんと std 名前空間に入っている std::operator<<() が呼ばれて、
ちゃんと終了時には文字列がフラッシュされているというのは、
なんかいろいろ察した結果なのかなーと思ったりします。
まあこの場合察したのはコンパイラじゃなくてC++の仕様なんでしょうけど。


2倍のポイントを手に入れた! 412ポイント を手に入れた。

Name: めるぽん  ..入門者(4,510ポイント)   Date: 2010/07/04(日) 05:43   No:55883     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
char* p = new char[100];
...
delete p; // delete[] じゃないとダメだけど大抵の環境では平気
とかよくありますね。 あと、Pimpl イディオムなんかで、
// hoge.h
#include <memory>
 
struct hoge
{
    hoge();
private:
    struct impl;
    std::auto_ptr<impl> p;
};

// hoge.cpp
#include "hoge.h"
#include <iostream>

struct hoge::impl
{
    impl() { std::cout << "call impl constructor" << std::endl; }
    ~impl() { std::cout << "call impl destructor" << std::endl; }
};

hoge::hoge() : p(new impl) { }

こうしておくと "call impl constructor" は呼ばれるけど "call impl destructor" が呼ばれなかったりします。
でもデストラクタで何もしてない間は気がつかないっていうのとか。
まあこれは大抵コンパイラが不完全型に対する delete に対して警告してくれるから大丈夫でしょうけど。 編集済み


343ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(214,780ポイント)   Date: 2010/07/05(月) 07:00   No:55991 解決!     
Title: Re:【雑談】「コンパイラはプログラマの心を察してくれる」と感じた経験はありますか?    
めるぽんさん、情報ありがとうございます。

>    Hoge h1();
>    Hoge h2(Hoge());

このへんは結構やってしまいがちですね(特に後者)。

ここで一旦解決にしたいと思います。


16ポイント を手に入れた。



Name: C言語入門者  ..ぴよぴよ(184ポイント)   Date: 2010/07/04(日) 23:24   No:55974       
Title: 標準体重のプログラム    
学校の宿題で、身長と体重を入力して、そのデータから場合わけしてコメントを表示するプログラムなんですが、
うまいこといかなくて困ってます。
以下にソースコードを記します。


#include<stdio.h>
#include<stdlib.h>

main()
{

  int weight,height;

  printf("体重を入力してください:");
  scanf("%d",&weight);
  printf("身長を入力してください:");
  scanf("%d",&height);

  if(weight > (height - 105) * (110 /100) )
    printf("太り過ぎです\n");
  else if(weight >= (height - 105) * (90 / 100) &&
      weight <= (height - 105) * (110 / 100) )
    printf("健康です.この状態を維持しましょう\n");
  else if(weight < (height -105) * (90 / 100) )
    printf("やせ過ぎです。もう少し体力をつけましょう\n");
  
  exit(0);

}

標準体重を height-105 で表し、標準体重の1割増しより体重が重い場合と、標準体重の1割減よりも体重が低い場合、
またその間の時にそれぞれコメントするプログラムです。
しかし、なぜか標準体重の1割減よりも体重が低い場合が表示されず、1割増と1割減の間の時のコメントが表示されます。
なぜでしょうか。コンパイルしてもエラーはでません。
ご教授お願いいたします。


184ポイント を手に入れた。


Name: パコネコ  ..初心者(7,637ポイント)   Date: 2010/07/04(日) 23:31   No:55975     
Title: Re:標準体重のプログラム    
いっそ最後のifなくしちゃいたくなりました。
やっぱダメですか?


18ポイント を手に入れた。

Name: C言語初心者  ..入門者(4,106ポイント)   Date: 2010/07/04(日) 23:36   No:55976     
Title: Re:標準体重のプログラム    
なくしてみましたけど駄目でした。
いったい何がいけないんでしょうか?


26ポイント を手に入れた。

Name: fatens  ..上級者(15,261ポイント)   Date: 2010/07/04(日) 23:42   No:55977     
Title: Re:標準体重のプログラム    
110/100や90/100はともにint型なので結果もint型になり、
110/100は1、90/100は0になってしまいます。
素直に1.1や0.9と書いてみてはどうでしょうか。

それから、やせ過ぎ, 太り過ぎ, 健康の順番にすることで、
if 〜 else if 〜 elseの形にできるので、&& 演算子を使う必要がなくなります。
 編集済み


69ポイント を手に入れた。

Name: パコネコ  ..初心者(7,888ポイント)   Date: 2010/07/04(日) 23:44   No:55978     
Title: Re:標準体重のプログラム    
ちょっと整理してみますね
if(weight > (height - 105) * (110 /100) ) 
    printf("太り過ぎです\n"); 
  else if(weight >= (height - 105) * (90 / 100) && 
      weight <= (height - 105) * (110 / 100) ) 
    printf("健康です.この状態を維持しましょう\n"); 
  else if(weight < (height -105) * (90 / 100) ) 
    printf("やせ過ぎです。もう少し体力をつけましょう\n"); 
   
これでheikin-105をaとした場合
a*110%<weight    =条件1
a*90%<=weight<=a*110%=条件2
weight<a*90%         =条件3
全部つなげると
条件3<a*90%<=条件2<=a*110%<条件1
間違ってないみたいですね。




251ポイント を手に入れた。

Name: パコネコ  ..初心者(7,924ポイント)   Date: 2010/07/04(日) 23:45   No:55979     
Title: Re:標準体重のプログラム    
そっか、気になってはいたけど行けそうかな〜とか思ってました…
もしくは.0をつけても行けそうですね。無駄だけど


36ポイント を手に入れた。

Name: C言語初心者  ..入門者(4,202ポイント)   Date: 2010/07/04(日) 23:56   No:55980     
Title: Re:標準体重のプログラム    
うまくいきました。
本当にありがとうございました。

float型に変えてやってみたんですが、それでも何故かうまくいきませんでした。
なので、言われた通り、1.1や0.9と書いてみましたらうまくいきませんでした。
float型でうまくいかなかった理由を後日教授に質問しようと思います。

本当にありがとうございました。


96ポイント を手に入れた。

Name: パコネコ  ..初心者(7,984ポイント)   Date: 2010/07/05(月) 00:00   No:55981     
Title: Re:標準体重のプログラム    
あのfloat型では何を定義していたんですか?
(100/90)これが整数型だからダメって話ですよ。
(0.9)これなら実数型ですね。
これは確認してませんが、
(100.0/90.0)これも実数型だと思います
==========
ごめんなさい
(90/100)ですね 編集済み


60ポイント を手に入れた。



Name: 爺プログラマー  ..入門者(2,594ポイント)   Date: 2010/07/04(日) 21:17   No:55952       
Title: アクセス違反について    
アクセス違反が起きた場所をみつけたいのですが、デバッガーの使い方が今一わかりません。
表示 → デバッグウインドー → 混合モード
としてもデバッグ窓にはアセンブラーの表示しかありません、違反が起きた関数を表示させることが出来ません。
確かに違反が起きた場所を指して止まっているのですがアセンブラーではどこなのか全く見当が立ちません。
どなたかご教授ください。


153ポイント を手に入れた。


Name: 爺プログラマー  ..入門者(2,594ポイント)   Date: 2010/07/04(日) 22:27   No:55967 解決!     
Title: Re:アクセス違反について    
自己解決しました。

構成にDebugがありませんでした。




Name: けん  ..かけだし(1,650ポイント)   Date: 2010/07/04(日) 21:20   No:55955       
Title: はじめまして    
このページを見てゲームを作ろうとしたのですが
ページが見にくくて分かりづらいです。


31ポイント を手に入れた。


Name: パコネコ  ..初心者(7,529ポイント)   Date: 2010/07/04(日) 21:43   No:55959     
Title: Re:はじめまして    
気になっただけだからワイにはどうにもできないけど、このページってどのページ?

22ポイント を手に入れた。

Name: ROM  ..入門者(2,842ポイント)   Date: 2010/07/04(日) 21:46   No:55960     
Title: Re:はじめまして    
> けんさん

それだけでは全然何を言っているのかわからないのですが。

> パコネコさん

ワイというのはやめませんか?
とても丁寧な言葉には聞こえません。
ここでは丁寧な言葉で話す事が規約になっています。


2倍のポイントを手に入れた! 134ポイント を手に入れた。

Name: パコネコ  ..初心者(7,486ポイント)   Date: 2010/07/04(日) 21:49   No:55961     
Title: Re:はじめまして    
そうでしたか…失礼しました。
今度から使わないようにします。
ご指摘ありがとうございました。
============
さっき読んできました。確かに丁寧語で書いてください的なことを書いてました。

 編集済み


43ポイント を落としてしまった。



Name: takaya  ..ぴよぴよ(3ポイント)   Date: 2010/07/04(日) 18:37   No:55930       
Title: ダウンロードできません。    
ダウンロードできません。

3ポイント を手に入れた。


Name: Dixq (管理人) [URL]  ..ウィザード(1,230,174ポイント)   Date: 2010/07/04(日) 19:59   No:55940     
Title: Re:ダウンロードできません。    
> takayaさん

こんにちは。

> ダウンロードできません。

どのファイルの事でしょうか?


21ポイント を手に入れた。



Name: こうめいいのち  ..ぴよぴよ(0ポイント)   Date: 2010/07/02(金) 14:46   No:55749       
Title: 心のしくみ    
全てのものは、相性体力作因縁果報の流れで動いている。人は、認識と対処で行動する。[心を作る]森羅万象の相から報(今から報の未来を感じ観る)を観た瞬間に認識度合いによって度合いそれぞれの生命状態が心に顕われる。同時にそれに対処しようとするところに、その対処予測が瞬間同時に心に現れる。(例)蛇ににらまれた蛙〜蛙はその瞬間に認識する。「食べられる姿を一瞬に見る」この認識が心(この場合、地獄と表現すればいいのか?)に顕われる。瞬間同時に対処しようとする(変革)しかし「術がない。この状態を変える自分(蛙)の姿が浮かばない。自分の相から報までが浮かばない。」また心として顕われる。この2つが、瞬間同時で蛙は動けない。知能ロボットは、認識と対処がその度合いと予測がそれぞれ心に現れるようにすればいい。


Name: dic  ..比類無きプログラマー(82,186ポイント)   Date: 2010/07/02(金) 17:20   No:55755     
Title: Re:心のしくみ    
http://www.google.co.jp/search?source=ig&hl=ja&rlz=&q=%E7%9B%B8%E6%80%A7%E4%BD%93%E5%8A%9B%E4%BD%9C%E5%9B%A0%E7%B8%81%E6%9E%9C%E5%A0%B1&aq=f&aqi=&aql=&oq=&gs_rfai=
仏にも宗派があるんですね
こわばわこわばわ


91ポイント を手に入れた。

Name: パコネコ  ..初心者(5,448ポイント)   Date: 2010/07/02(金) 20:41   No:55770     
Title: Re:心のしくみ    
これってAIについての雑談スレみたいなものなのでしょうか?
質問ではないし…AIなら興味深い話だと思うけど…将来のための勉強になるし


48ポイント を手に入れた。

Name: TKOZ  ..熟練のプログラマー(69,109ポイント)   Date: 2010/07/02(金) 21:15   No:55777     
Title: Re:心のしくみ    
AIに興味があったので、人工無能を作ってみたんですが、
バグが多いソースになってしまいました。

会話が成立しません。基本的なアルゴリズムは、
もし、その言葉を覚えているなら、返事をする。
もし、知らなければ、「何それ?」と返し、
覚えさせるというものです。

例えば、コンソール画面での作業なので、
日本語が直接入力できず、使えないので、
まず、ローマ字を全角のひらがなに変えてしまおうとしました。
しかし、関数char *henkan()は、全角をうまく返してくれません。

それが1番目のバグで、2番目のバグは、会話が成立しないという事です。

例えば、画面上で、こう入出力したいとします。
メッセージ?>Mr.Person  ohayou
おはよう
Mr.COM「何それ?」>aisatu
あいさつ
Mr.COM「覚えた」
メッセージ?>Mr.Person ohayou
おはよう
Mr.COM「あいさつだなw」

こんな感じです。

でも実際のソースをコンパイルして実行すると、
メッセージ?>Mr.Person  ohayou
おはよう
Mr.COM「何それ?」>aisatu
あいさつ
Mr.COM「覚えた」
メッセージ?>Mr.Person ohayou
おはよう
Mr.COM「何それ?」
になってしまいます。

ソースは今から貼ります。

これです。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define INFINITY (1000)
#define MAX_SERIF 100

char Tbl[17]={'k','s','t','n','h','m','y','r','w','g','z','d','b','p'};
char Tbl02[17][5][5]={
    "か","き","く","け","こ",
    "さ","し","す","せ","そ",
    "た","ち","つ","て","と",
    "な","に","ぬ","ね","の",
    "は","ひ","ふ","へ","ほ",
    "ま","み","む","め","も",
    "や"," ","ゆ"," ","よ",
    "ら","り","る","れ","ろ",
    "わ"," ","を"," ","ん",
    "が","ぎ","ぐ","げ","ご",
    "ざ","じ","ず","ぜ","ぞ",
    "だ","ぢ","づ","で","ど",
    "ば","び","ぶ","べ","ぼ"
    "ぱ","ぴ","ぷ","ぺ","ぽ"
};
char Tbl03[5]={'a','i','u','e','o'};

char *henkan(char Input[])
{
    int i=0;
    int j=0;
    int k=0;
    static char OutPut[1000];
    while(Input[i])
    {
        switch(Input[i])
        {
            case 'a':printf("あ");break;
            case 'i':printf("い");break;
            case 'u':printf("う");break;
            case 'e':printf("え");break;
            case 'o':printf("お");break;
        }        
        for(j=0;j<13;j++)
        {
            if(Tbl[j]==Input[i])
            {
                i++;
                for(k=0;k<5;k++)
                {
                    if(Input[i]==Tbl03[k])
                    {
                        printf("%s",Tbl02[j][k]);
                        strcat(OutPut,Tbl02[j][k]);
                    }
                }
            }
        }
    i++;
    }
    return OutPut; 
}
void File_Save()
{
    
}

int CheckMemory(char tbl[][MAX_SERIF],char checkstring[],int max)
{
    int i;

    for(i=0;i<max;i++)
    {
        if(strcmp(tbl[i],checkstring)==0)
        {
            return i;
        }
    }
    return 0;
}

int main(void)
{
    
    char MemoryOfHeart[INFINITY][MAX_SERIF];
    char MemoryOfWhen[INFINITY][MAX_SERIF];
    char InputString[MAX_SERIF];
    char InputString2[MAX_SERIF];
    int i=0,j,k,max=0;
    while(1)
    {
        printf("メッセージ?>Mr.Person\t"); gets(InputString);
        strcpy(InputString2,henkan(InputString));
        printf("\n");
        //あれば、答える、なければ「何それ?」と答える
        max=i;
            //printf("Debug(max=%d)(inputstring2=%s)\n",max,InputString2);
            if(CheckMemory(MemoryOfHeart,InputString2,max)>0)
            {
                //printf("Debug(%s)\n",InputString2);
                //あれば、いつのものかを考える
                for(j=0;j<max;j++)
                {
                    for(k=0;k<max;k++)
                    {
                        if(strcmp(MemoryOfWhen[j],InputString2)==0)//
                        {
                            printf("「%sだな。w」\n",MemoryOfHeart[k]);
                        }
                    }
                }
            }
            else
            {
                printf("Mr.COM「何それ?」>");
                strcpy(MemoryOfWhen[i],InputString2);//いつの文字列かを記憶する
                sprintf(InputString,"%s"," ");
                sprintf(InputString2,"%s"," ");
                gets(InputString);
                strcpy(InputString2,henkan(InputString));
                strcpy(MemoryOfHeart[i],InputString2);//これだよと答える
                //printf("%s\n",InputString2);
                printf("Mr.COM「覚えた。」\n");
            }
        
        i++;
    }
    return 0;
}


145ポイント を手に入れた。

Name: TKOZ  ..熟練のプログラマー(69,406ポイント)   Date: 2010/07/02(金) 21:52   No:55782     
Title: Re:心のしくみ    
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct COM{
    char Memory[1000][100];
    char Answer[1000][100];
}COM;

int main()
{
    COM ai={0};
    char InputString[MAX_SERIF];
    int i=0,j,k,max=0;
    while(1)
    {
        printf("メッセージ?>"); gets(InputString);
        //henkan(InputString);
        //あれば、答える、なければ「何それ?」と答える
        max=i;
        for(j=0;j<max;j++)
        {
            if(strcmp(ai.Memory[j],InputString)==0)//これは記憶したものかどうか検索する
            {
                printf("%sだな。w\n",ai.Answer[j]);
            }else{
                printf("何それ?>");
                strcpy(ai.Memory[j],InputString);//いつの文字列かを記憶する
                gets(InputString);
                strcpy(ai.Answer[j],InputString);//これだよと答える
            }
        }
        
        i++;
    }
    
}

//とりあえず、半角で改良してみました。
//一応、動きますが、まだバグが残っています。


297ポイント を手に入れた。

Name: ookami  ..プログラマー(32,567ポイント)   Date: 2010/07/02(金) 23:24   No:55789     
Title: Re:心のしくみ    
とりあえず全角の方、見てました。
「おはよう」と入力すると、returnが「はよ」だったので、
あれっと思ったら、

        switch(Input[i]) 
        { 
            case 'a':printf("あ");break; 
            case 'i':printf("い");break; 
            case 'u':printf("う");break; 
            case 'e':printf("え");break; 
            case 'o':printf("お");break; 
        }         

では printf してるだけで strcat してないっていう。
でも覚えてくれないのはまた別の問題のようですね。

もうちょっと見てみます。

あっ、こうめいいのちさんが0ポイントのままだ ('□';
これが相性体力作因縁果報の力なのかッッ

# 紅の豚最高ォー


236ポイント を手に入れた。

Name: ookami  ..プログラマー(32,757ポイント)   Date: 2010/07/02(金) 23:35   No:55790     
Title: Re:心のしくみ    
覚えて紅のは、
    static char OutPut[1000]; 
の後に
    strcpy(OutPut,"");
を追加。
            if(CheckMemory(MemoryOfHeart,InputString2,max)>0) 

            if(CheckMemory(MemoryOfWhen,InputString2,max)>-1) 
に変更。(HeartをWhenに変更、0を-1に変更)
CheckMemoryの
    return 0;
を、 
    return -1; 
に変更。と。

この場合は、やっぱりステップ実行が最強ですねw 編集済み


190ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(213,488ポイント)   Date: 2010/07/03(土) 00:53   No:55796     
Title: Re:心のしくみ    
よく知らないですが、「相性体力作因縁果報」というのは(創価学会や立正佼成会などを含む)日蓮宗系の宗派でしか出てこない言葉では?
宗派が違うと意味がわからないので、(蛙の例だけでなく)誰にでも分かるように噛み砕いて説明してください。


106ポイント を手に入れた。

Name: TKOZ  ..熟練のプログラマー(69,443ポイント)   Date: 2010/07/04(日) 19:54   No:55939     
Title: Re:心のしくみ    
>>ookamiさん
ありがとうございました。
おかげで完成しました。


37ポイント を手に入れた。



Name: ぬるぽ  ..かけだし(2,172ポイント)   Date: 2010/07/04(日) 02:27   No:55878       
Title: 指定のファイルがなかった場合、指定のファイルを自動作成する方法    
こんにちは。龍神録を改造して遊ばさせてもらってます。
例えばですが、ハイスコアを保存するときに
savedatというファイルの中にscore.datを生成して保存するとします。

//ハイスコアのセーブ
void hi_score_save(){
    FILE *fp;
    fp = fopen( "savedat/score.dat" , "wb" );
    if( fp == NULL ) return;
    fwrite( &HiScore, sizeof( HiScore ), 1, fp );
    fclose( fp );
    return;
}

保存時、savedatファイルがなかった場合、
自動でsavedatファイルを生成し、中にscore.datを生成して保存する
というようなプログラムに直したいのですが、
上記のプログラムをどのように修正、追加すればよいのか分からなくて困ってます。
どなたか分かる方がいましたら教えてください。よろしくお願いします。


347ポイント を手に入れた。


Name: めるぽん  ..入門者(3,629ポイント)   Date: 2010/07/04(日) 04:29   No:55879     
Title: Re:指定のファイルがなかった場合、指定のファイルを自動作成する方法    
この場合、savedat はファイルではなくフォルダもしくはディレクトリと呼びます。
フォルダ作成はC言語の範疇ではできなかった気がするので、
Windows なら _mkdir や CreateDirectory あたりを使えばいいと思います。


100ポイント を落としてしまった。

Name: スキマ妖怪  ..かけだし(2,244ポイント)   Date: 2010/07/04(日) 04:31   No:55880     
Title: Re:指定のファイルがなかった場合、指定のファイルを自動作成する方法    
竜神録ということですのでこういうのはどうでしょうか(^^;


#include <windows.h>
#include <shlwapi.h>
#pragma comment( lib, "shlwapi.lib" )

int main(int argc, char* argv[])
{
    // フォルダの存在チェック
    if( PathIsDirectory( "Hoge" ) )
    {
        // フォルダは存在する
    }
    else
    {
        // フォルダ作成
        CreateDirectory( "Hoge", NULL );
    }

    return 0;
}


> savedatというファイルの中にscore.datを生成して保存するとします。 

ファイルではなくて、フォルダ又はディレクトリの事ではないでしょうか…;
(本当にファイル(アーカイブとか?)の中に読み書きしたいのなら、上のコードではダメです…)



219ポイント を手に入れた。

Name: ぬるぽ  ..かけだし(2,482ポイント)   Date: 2010/07/04(日) 18:29   No:55929     
Title: Re:指定のファイルがなかった場合、指定のファイルを自動作成する方法    
>>めるぽんさん
>savedat はファイルではなくフォルダもしくはディレクトリと呼びます
そうなのですか。
知らなかったので勉強になりました。ありがとうございます。

>>スキマ妖怪さん
試しに、龍神録50章で
どこかのcpp内にスキマ妖怪さんのおっしゃる

#include <windows.h> 
#include <shlwapi.h> 
#pragma comment( lib, "shlwapi.lib" ) 

int main(int argc, char* argv[]) { 
    // フォルダの存在チェック 
    if( PathIsDirectory( "Hoge" ) ) { 
        // フォルダは存在する 
    } 
    else { 
        // フォルダ作成 
        CreateDirectory( "Hoge", NULL ); 
    } 
    return 0; 


を追加し、function.h内に

GLOBAL int folder(int argc, char* argv[]);

を追加。main.cpp内のload後に

switch(func_state){
    case 0:            //初回のみ入る処理
        load();        //データロード
        int main(int argc, char* argv[]);        //←追加
        break;

を追加。
[プロジェクト]->[プロパティ]->[構成プロパティ]->[全般]の[文字セット]を
[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する]
にしてから実行してみると、エラーは出なかったのですが
Hogeというフォルダは作成できなかったです。
どこが原因で、どのようにしたら良いのでしょうか?


310ポイント を手に入れた。

Name: 通りすがり  ..上級者(21,913ポイント)   Date: 2010/07/04(日) 18:56   No:55933     
Title: Re:指定のファイルがなかった場合、指定のファイルを自動作成する方法    
C言語の基本が解っていないようです。
入門レベルの勉強を飛ばして上を望んでも壁にぶつかるばかりになることでしょう。
C言語の入門サイトでしっかりまずはC言語の基本を学んで下さい。

関数の呼び出し方が違うし、そもそもmainはやめましょう。



105ポイント を手に入れた。

Name: ぬるぽ  ..かけだし(2,488ポイント)   Date: 2010/07/04(日) 19:08   No:55935 解決!     
Title: Re:指定のファイルがなかった場合、指定のファイルを自動作成する方法    
自己解決しました。

6ポイント を手に入れた。

Name: スキマ妖怪  ..かけだし(1,934ポイント)   Date: 2010/07/04(日) 19:30   No:55938     
Title: Re:指定のファイルがなかった場合、指定のファイルを自動作成する方法    
自分が書かなかったのが悪いのですが、そのままコピペされると困ります…
かなり適当に書いてしまったので、細かいところを修正してもらわないとダメです;
(分かるかなと思ったのですが…)


なるべく分かりやすく書こうと思ったんですが、裏目になっちゃいましたね。

> CreateDirectory( "Hoge", NULL );
こう書くのならせめて

CreateDirectoryA( "Hoge", NULL );
とか
CreateDirectory( _T("Hoge"), NULL );
の方がよかったんですかね…


> switch(func_state){ 
>     case 0:            //初回のみ入る処理 
>         load();        //データロード 
>         int main(int argc, char* argv[]);        //←追加 
>         break; 

ちなみに、これは関数の呼び出しではなくて、宣言ですよ;(実行されませんよ)

main(0,0);

とりあえず、これで動くと思います。(コンソールのメイン関数なんで、適宜変更してください)

ユニコードなら文字列を「L"Hoge"」
マルチバイトなら「"Hoge"」
「#include "tchar.h"」をインクルードしているのなら「_T("Hoge")」
としてもらうといいかもしれません;


追記-----------------------------------------------------

だらだらと書いていたら、自己解決されたようで;
もっと早く書けるようにならないといけませんね…
 編集済み


310ポイント を落としてしまった。



Name: 爺プログラマー  ..かけだし(1,383ポイント)   Date: 2010/07/02(金) 18:23   No:55759       
Title: WM_LBUTTONDOWNを無効にしたい    
WM_LBUTTONDOWN:をシステム上無効にしたり有効にしたりしたいのですが、
可能でしょうか?
よろしくお願いします。


47ポイント を手に入れた。


Name: toyo  ..熟練のプログラマー(51,225ポイント)   Date: 2010/07/02(金) 18:42   No:55761     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
クリックされた場所で方法は変わってくると思います
普通のクライアント領域
タイトルバーや最大化、×ボタンなどの非クライアント領域
ボタンやテキストボックスなどの子ウィンドウ
無効化したいのは一部でしょうか全部でしょうか


71ポイント を手に入れた。

Name: 爺プログラマー  ..かけだし(1,416ポイント)   Date: 2010/07/02(金) 18:59   No:55762     
Title: Re:WM_LBUTTONDOWNを無効にしたい    

デスクトップ上に作成した子ウインドーの普通のクライアント領域です。
よろしくお願いします。



33ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(51,340ポイント)   Date: 2010/07/02(金) 19:16   No:55763     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
それは
case WM_LBUTTONDOWN:
    //何がしかの処理
    break;
とあるのを無効にしたいということでしょうか
それなら
case WM_LBUTTONDOWN:
    if (クリック無効フラグがないとき) {
        //何がしかの処理
    }
    break;
のような処理ではだめでしょうか


115ポイント を手に入れた。

Name: 爺プログラマー  ..かけだし(1,445ポイント)   Date: 2010/07/02(金) 19:24   No:55764     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
WM_LBUTTONDOWNのイベント自体をWindowsに発生させない方法になります。
WM_LBUTTONDOWNが必要なければソフトでいくらでも無効として処理することは可能ですから・・・


29ポイント を手に入れた。

Name: シエル  ..上級者(19,878ポイント)   Date: 2010/07/02(金) 19:34   No:55765     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
確かヒットテストのメッセージを処理すればいけたような…
勘違いだったらすみません。
以下を参考にしてみて下さい。

http://wisdom.sakura.ne.jp/system/winapi/win32/win43.html


54ポイント を手に入れた。

Name: 爺プログラマー  ..かけだし(1,651ポイント)   Date: 2010/07/02(金) 21:41   No:55781     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
シエル  ..上級者さん いつもありがとうございます。

さて、ご指摘のサイトを参考に下記のように記述しました。

case WM_NCHITTEST:
i = DefWindowProc(hWnd, uMsg, wParam, lParam);
if (i == HTCLIENT)
{
mouse_dw=1; mouse_dw1=1;
return HTCAPTION;
}
break;


でも、マウスを移動させるだけでボタンが押し下げしたのと同じ効果が出てしまいました、移動情報とクリック情報を切り離せないでしょうか?
よろしくお願いします。



206ポイント を手に入れた。

Name: シエル  ..上級者(20,227ポイント)   Date: 2010/07/02(金) 22:42   No:55786     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
HTCAPTIONを返すと、ウィンドウを掴んでしまうと思いますので、
違う値を返さなければいけないと思われます。

それと、上記のコードでは、クライアント領域でクリックされているのかの判定は
されていますが、右クリックか左クリックかの判定がされていないので、
その判定も必要だと思います。

と、偉そうに言ってますが、私はこのメッセージを処理したことがないので、
申し訳ありませんが、あまり理解しておりません。

ググってみたら、下記のサイトを見つけましたので参考にしてみて下さい。
以後は答えられる範囲であれば、答えます。すみません。。。

http://eternalwindows.jp/winbase/menu/menu09.html


192ポイント を手に入れた。

Name: 爺プログラマー  ..かけだし(1,472ポイント)   Date: 2010/07/02(金) 23:10   No:55787     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
シエル  ..上級者 さん

貴重な情報ありがとうございます。
後は自力で頑張ります。今後ともよろしくお願いします。

DirectX複雑ですね、順番を間違えないように。
衝突判定は裏画面ですると見えないところで簡単に早くできます。
奥行きで捕らえて、2D表示の無色でかなり早く判定できます。
衝突判定の関数は重たいです。この方式だと線同士の衝突も外しません。

あっ!!余計な事でした。



179ポイント を落としてしまった。

Name: シエル  ..上級者(20,301ポイント)   Date: 2010/07/02(金) 23:16   No:55788     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
いえ、情報ありがとうございます。
今はDirectXのアルファブレンド、テクスチャブレンド、加算合成等で
思いっきりつまずいてます。
こちらこそ、私がDirectXの質問をした際は、よろしくお願い致します!


74ポイント を手に入れた。

Name: shiro4ao  ..初心者(6,650ポイント)   Date: 2010/07/04(日) 00:02   No:55859     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
「システム上」とのことでしたので、自分のアプリケーション以外
へのクリックでも無効にしたいということでしょうか?でしたらマ
ウスフックをインストールして、メッセージを無効にするという方
法はどうでしょうか?
・・・・と思ったのですが、うまくいきませんでした・・・

==================hookdll.cpp===============================
EXPORT LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wp, LPARAM lp)
{
    if (nCode > 0){
    if (wp == WM_LBUTTONDOWN) {
    //   MessageBox(pmh->hWnd,"左クリックが押されました","hook",NULL);          
         return TRUE;
    }
    }    
    
     return CallNextHookEx(hHook, nCode, wp, lp);
}
==================ここまで===============================
上記のコードでMessageBoxの行をコメントアウトすると、左クリックを無効にできず、
普通にクリックが出来てしまいます。
コメントアウトしないと、左クリックが効かないようになりました。


さらなる問題点として、非クライアント領域(タイトルバーとかウィンドウの枠など)
だと普通にクリックできてしまいます・・・・

解決策でなくて申し訳ありません・・・・


追記:TRUEをreturnするようにしたら無効化できました。(上記のコードで可能になりました)
   ただ非クライアント領域ではふつうにクリックできるという問題は依然起こります。 編集済み


497ポイント を手に入れた。

Name: 爺プログラマー  ..かけだし(1,641ポイント)   Date: 2010/07/04(日) 09:54   No:55885     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
shiro4ao さん

回答ありがとうございます。

実は自力で解決したのですが、普通のウインドープロシージャー内で次のように記述すると無効になりましたが・・・完全ではなく極まれに発生してしまいます。

    case WM_LBUTTONDOWN:
    if(mouse_dw_cancel)return 0;
    mouse_dw=1; mouse_dw1=1;
    break;

メインルーチンで「mouse_dw_cancel」を真にすると「mouse_dw」に値が入りませんでした。
無効になる率はかなり大きくなりましたが、ハード的な要因が関わっているような気がします。

ちなみに「ヒットテスト」では効果がありませんでした。プログラム進行上のタイミングがとれないのだと考えます。


169ポイント を手に入れた。

Name: 爺プログラマー  ..かけだし(1,940ポイント)   Date: 2010/07/04(日) 10:40   No:55887     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
皆さんにこの件でお騒がせしておりますが、興味のある方はご一読ください。
ダイレクトサウンド8で10秒間隔のストリーミング再生をしています。
再生進行バーをクリックして再生位置をランダムに変更できます。
マウスクリックが、ちょうど再生が終わった時と重なった場合「問題が発生したため、通話録音の記録操作.exe を終了します。 ご不便をおかけして申し訳ありません。」のメッセージがでます。
そのため、スライーダーが終端に来た時、例えクリックしてもプログラム上無視したのですが、効果がありません。クリックしなければ、最終まで難なく再生できるのです。
これってハード的な要因ではないでしょうか。DSとの素性が悪いとか?

このWindowsメッセージは割り算の時や許容アクセスを超えたメモリー(ファイル)アクセスでも発生するようで、この当たりは徹底的に追及しております。
他にもこのようなメッセージを回避する手段がありましたら、ご教授ください。


299ポイント を手に入れた。

Name: シエル  ..上級者(22,192ポイント)   Date: 2010/07/04(日) 11:33   No:55893     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
私は数日前にDirectsound8で、ストリーミング再生に成功しました。
成功したときは声を出して喜びましたw

まあ個人的な話は置いといて、メッセージが違いますが、テスト中は何十回と
エラーが発生しましたが、そのときの原因はメモリにまだデータがコピーされないときに、
再生しようとしてエラーが発生していたのが多かったと思います。

クリックしたときに、終端であれば、再生しないという条件にしてはどうでしょうか?

ど素人の意見ですので、あまり気にしなくてもいいです…


201ポイント を手に入れた。

Name: 爺プログラマー  ..かけだし(2,246ポイント)   Date: 2010/07/04(日) 16:34   No:55916     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
シエル  ..上級者 さん お世話になります。同じプログラムを組んでいたとは奇遇です。

さて、私の場合ファイルを最後まで再生すると、lpSecondary->Stop();をさせています。
この状態で次の再生を開始するには再生ボタンをクリックした時点で初期設定して新たにプレイが再開されます。
空のバッファーを再生することは先ずないと思いますが、どこかでアクセス違反が起こっているのかも知れません。



今のところmouse_dw_cancelが真でクリックイベントをキャンセルさせるには

case WM_NCHITTEST:
    lRet = DefWindowProc(hWnd, uMsg, wParam, lParam);
    if ( lRet == HTCLIENT)
    {
    if(mouse_dw_cancel)lRet = HTNOWHERE;
    }    
    return lRet;

の処理より

    case WM_LBUTTONDOWN:
        if(mouse_dw_cancel)return 0;
        mouse_dw=1; mouse_dw1=1;
    break;

の方が効果があります。



306ポイント を手に入れた。

Name: シエル  ..上級者(22,548ポイント)   Date: 2010/07/04(日) 16:45   No:55917     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
マウスでバーをクリックしたときは、その位置から再生されるようにしているということですが、
左マウスボタンクリックを無効にするというより、
クリック時の再生処理内で再生するかしないかを判定してはどうでしょうか?

そのクリック時の再生処理がどうなってるのかわからないので、あまり言えませんが。
 編集済み


86ポイント を落としてしまった。

Name: 爺プログラマー  ..かけだし(2,441ポイント)   Date: 2010/07/04(日) 18:10   No:55927     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
シエル  ..上級者 さん いつも親切にありがとうございます。

再生終盤でクリックするとエラーになるため、終盤に差し掛かると再生が完全に終了するまで終盤フラグを立ててサウンド関連の処理を全てパスしているのです。
ですからプログラム進行上では終盤においてはクリックの有り無しは無関係になっています。
ですが、クリックイベントの発生を止めると正常に終わりまで再生できるのです。
不思議でなりません。


195ポイント を手に入れた。

Name: シエル  ..上級者(22,629ポイント)   Date: 2010/07/04(日) 18:27   No:55928     
Title: Re:WM_LBUTTONDOWNを無効にしたい    
う〜ん。じゃあDirectSound関連の処理は関係なさそうですね。
クリックイベントが何で影響するのか…
さっぱりですね。すみません。。。


40ポイント を手に入れた。



Name: Dixq (管理人) [URL]  ..ウィザード(1,226,420ポイント)   Date: 2010/06/24(木) 19:52   No:55221       
Title: ■ HPのイベントアイディア募集 【雑談】■    
皆様いつもC言語何でも質問掲示板にお越し下さり、ありがとうございます^^

お陰様で、先日900万アクセスを迎える事ができました。
これも皆様のお力添えあっての事と感謝致しております★

このHPのコンテンツの多くは「猫でも解るプログラミング」のHPをリスペクトしていて、
作成当時そのHPが1000万アクセスに近かった事から、1000万という数字を目標にしてきました。
(あちらはトップページにしかカウンタが無いので、PVは1億とかかもしれませんが)

ですので、1000万アクセスを達成した時は何かイベントを行いたいなと思っていました。
しかし、こんな遠く(蝦夷地)に転勤になるとは思っていなかったので、
東京や大阪で研究会やオフ会ということはちょっと無理そうです;
(次回は東京で開催すると言っていたのに申し訳ないです・・)

となるとイベントごとと言っても特にアイディが無くて・・。
ボチボチHPを作り変えて1000万アクセスと同時にリニューアルしようかとも思いましたが、どうリニューアルしてよいものか・・。

後アイディアがあるとすれば
「1000万のキリ番踏んだ人に、非売品パッケージングした龍神録とAerobeatをセットでプレゼント」



みたいな・・・。

(え、誰もそんなもの欲しくないって?!)

何かアイディアがあればご意見下さると幸いです(´▽`)


42ポイント を手に入れた。


Name: あ〜る  ..上級者(21,038ポイント)   Date: 2010/06/24(木) 20:11   No:55223     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
いや超欲しいですよ!!
というかお金払ってでも欲しいです!!(笑)
何とかして手に入りませんかね?(笑)

アイデアはというと…そうですね…うぅ…それより良いのが思いつきません…
というか僕はそれが良いですwww
あとは本プレゼントとか?ですかね?



79ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(210,916ポイント)   Date: 2010/06/24(木) 20:21   No:55226     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
できるかどうかは別として、本来であれば1000万アクセス記念の新作を公開するのが一番です。
ただ、実際には難しいですよね。
Dixqさんが学生ではなくなった今、以前のような活発さがなくなるのはある程度しかたがないわけですが、1000万アクセスを機会に、今後のあり方を改めて検討するのがよいのではないでしょうか?

コンテンツは年月とともに陳腐化するのが宿命ですし、掲示板がある程度活発でも、それだけでは限度があります。
現状維持だけではやがて自然消滅するのが目に見えていますからね。


172ポイント を落としてしまった。

Name: Dixq (管理人) [URL]  ..ウィザード(1,226,880ポイント)   Date: 2010/06/24(木) 20:55   No:55229     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
> あ〜るさん

ありがとうございます^^;
そこまで言って頂けるとは思っていませんでした;
では記念なので希望者全員にしましょうか。

ただいたずら希望者が多いと困るので、掲示板ランク中級者以上とかある程度限定させていただく必要があるかもしれませんが;

ご意見ありがとうございます^^


> たかぎさん

なるほど、、仰る通り。
うちのHPの内容は最近更新してないですもんね。
「RPGの館」が先日から掲示板を拝見していると需要がありそうなので、
 ・RPGの館      それだけにとどまらず
 ・シューティングの館
 ・格ゲーの館
 ・パズルゲーの館
 ・サウンドノベルゲーの館
みたいに、本当は沢山作っていきたいんですよね^^;

・・サウンドノベルゲーの館ならサクッっと作れるかな・・。
ボンバー○ンの館とかも作りたいな・・w

いや思いつきで作っていったゲームプログラミングの館が内容ぐちゃぐちゃだから整理もしたいな・・(ブツブツ


仰る通りコンテンツを増やすなり更新していく事が大事ですね。
ご意見ありがとうございます^^


296ポイント を手に入れた。

Name: シエル  ..上級者(15,092ポイント)   Date: 2010/06/24(木) 22:00   No:55236     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
パッケージングした龍神録とAerobeat、すごいかっこいいですね!
かなり本格的に作られたんですね!普通にゲーム屋にありそうw
私も欲しいですが、希望者全員にすると応募が殺到しそうな気が…

このプレゼントもかなり良い案だと思いますが、
私もDixqさんの次の新作を公開してほしいですね。
まあ、仕事してると作る時間が少ないと思いますので、無理は言いませんが。。

また、何かいい案があったら書き込みます!





171ポイント を落としてしまった。

Name: wing  ..中級者(11,467ポイント)   Date: 2010/06/24(木) 22:53   No:55239     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
龍神録プログラミングの館だけでもすごいのに、RPGの館などを始めたら
2000万アクセスなんてあっという間ですよ。

私は独学なので、龍神録プログラミングの館でゲームの作り方を覚えましたが、
向上心とでも言うんでしょうか、C++でclassを使ってゲームを作ろうと挑戦して
いるんですが、弾幕やら当たり判定やらになると挫折してしまいます。

私の希望としては、簡単なシューティングでもいいですから、classを使って
解説していただけたらありがたいです。


201ポイント を手に入れた。

Name: wing  ..中級者(11,457ポイント)   Date: 2010/06/24(木) 23:05   No:55241     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
よく考えたら、まだポインタなどもよく理解していないし、
リストなんかが普通に出てきたら大変そうなので........。
C++の話はなかったことにしてください。


10ポイント を落としてしまった。

Name: jay  ..上級者(17,323ポイント)   Date: 2010/06/24(木) 23:53   No:55242     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
まずは900万HITおめでとうございます。


記念の企画ですか
このサイト常連のお方たち(有志)と管理人さんがそれぞれゲームを作って発表会、なんてどうでしょう?
っと、これはよく考えなくてもかなり難しいお話なのでした(汗)

ちょっと変えて管理人さんと有志のみなさんと共同でゲームを作ってみるとか・・・。
どっち道難しそうですね。

ああ、なにかいいアイデアがないものでしょうか(←振り出しに戻った)


137ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,226,554ポイント)   Date: 2010/06/25(金) 00:26   No:55244     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
>> シエルさん

ありがとうございます^^
このパッケージを作ったのは2年位前の話なのですが、パッケージ作りとかした事無いので面白がって作った覚えがあります^^;
結局作ったのは一つだけ。姉貴の家に置いてきましたが、今も捨てずに持っているのだろうか・・。

> Dixqさんの次の新作を公開してほしいですね。

ありがとうございます。
そうですね、私も早く作りたいものですが、まだまだ知識が少ないのでとりあえず現在は学ぶ事に徹しています。
私は今ARに興味を持っています。
知識が付いたらニコニコ技術部と言ってもらえるような動画をアップしたいと思います^^


>> wingさん

ありがとうございます。
たかぎさんも仰っていましたが、これから需要がありそうなのはC++を使った館のようですね。
初心者の為の館なので、C++というだけで敬遠してしまう人が多いのではないかと思ったのですが、
「C++のようなC」みたいな設計を経てC++に移行すると抵抗なく学べるということもあるかもしれません。
まず「半C++」なる館を作ってみて完全なC++の館を作ったりしたいな・・など、頭の中では色々あるんですけどね^^;

> リストなんかが普通に出てきたら大変そうなので........。 

むしろC++のリストはCよりかなり使うの楽じゃないですか?
便利だという面ではC++の方がずっと上ですよね。
覚えることは多いのかもしれませんが・・。


>> jayさん
> ゲーム制作発表会

面白そうですね^^
ただ時間が・・;
共同制作は興味がある方沢山いらっしゃるようですね。
顔を合わせない共同制作で完成まで持って行くなんて私にはとても出来そうにありませんが、
今まで企画した方々はその後うまく完成されたんでしょうか・・。
一応リアルで共同制作はしているんですが、みんな社会人なので、別な意味で難しいですねぇ;
打ち合わせはいつもしているものの、帰るのが毎日深夜では制作も進まないし・・。

> 振り出しに戻った

結構難しいですね^^;


535ポイント を落としてしまった。

Name: たかぎ [URL]  ..ハッカー(211,150ポイント)   Date: 2010/06/25(金) 00:37   No:55245     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
> 初心者の為の館なので、C++というだけで敬遠してしまう人が多いのではないかと思ったのですが、 
> 「C++のようなC」みたいな設計を経てC++に移行すると抵抗なく学べるということもあるかもしれません。 
> まず「半C++」なる館を作ってみて完全なC++の館を作ったりしたいな・・など、頭の中では色々あるんですけどね^^; 

いっそのこと、DXライブラリのラッパーを作って、ベターCとしてのC++ではなく、本物のCで使うとどうなるかというアプローチを試みるのもよいと思います。
C++を使う場合と違って、かなり面倒ですし、エラー検出も甘いので難度が上がるはずです。
一度それを味合わせた上で、「だからC++が必要なんだ」と理解させてから本格的にC++に入っていくと、案外抵抗感がなくなるかもしれませんね。



2倍のポイントを手に入れた! 234ポイント を手に入れた。

Name: 山崎  ..熟練のプログラマー(45,291ポイント)   Date: 2010/06/25(金) 07:57   No:55258     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
いやぁ、900万アクセスなんてさすがですねっ!
1アクセス1円だとしても、900万円ですよ!

画像のパッケージ、フツーにすごくほしいですね ^^
手に入れたら、とりあえず友達のみんなに自慢しまくります、ブログでも自慢しますよ〜 ^^
あんなに完成されたパッケージを作れるなんてうらやましいです〜。
有名なゲーム会社が作るようなパッケージと同じくらいか、それ以上のクオリティがありますよね。
…私も漫画研究会の友達にお願いしたら、描いてくれるのでしょうかな〜…。

1000万円アクセスの記念イベントですかぁ、楽しみですね〜!
あのパッケージをプレゼント、ってのでも十分いいと思いますね私は。
他にはどんなものがあるでしょうかな〜。
管理人さんが蝦夷に行っていなければ「ぜひ東京で研究会を!」というところでしたが ^^

う〜ん、私じゃなかなかいいアイデアが出ませんね ^^;
あっ、1000万記念に、掲示板を自前にリニューアル、とか…も時間的にきつそうですね


314ポイント を手に入れた。

Name: ムンバ  ..初心者(6,101ポイント)   Date: 2010/06/25(金) 12:14   No:55270     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
こんにちは!
お世話になります。

このペースでいくと、あと2〜3ヶ月位で行きそうな勢いですねっ!^^
非売品パッケージ、私も欲しいですね〜♪
サイトのリニューアル(するとしたら)は
1000万を超えてから徐々に開始していく。
と言う様な方法もあるかと思います。
生まれ変わる。というより、進化させる。って感じがいいかな?と思いました。

ご無理なさらずに、東京オフの件も宜しくお願いします!
現状、きつそうですので、少し余裕が出てきたらと言う事で。w
体調崩さない様に、無理せずがんばって下さい。

---編集・追記---
個人的には、通信(チャット)の館、も希望です。^^; 編集済み


183ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,227,058ポイント)   Date: 2010/06/25(金) 20:56   No:55292     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
> たかぎさん

なるほど。そうすればC++の魅力は伝わるかもしれませんね。
ただ無い時間を使って使えないライブラリを作成するというのも・・。
色んなアプローチを検討したいと思います。

> 山崎さん

ありがとうございます^^
これも皆様のお力添え合っての事と感謝しています。

パッケージの件、そこまで言って下さって恐縮です^^;
研究会は是非検討します。
遠くだとは言え、お金さえ出せば下手に近くて交通の便が悪い場所よりも時間的には早く行けますしね。
問題は研究発表の題材を用意するような時間が無い事・・。
はぁ学生の時にもっと積極的にやればよかった;

> ムンバさん

最近何故か1日に3万近くアクセスがある事がありますよね;
なんでこんなにムラがあるんだろう・・。
休日にアクセスが多いならまだ解るようなものの、月曜日にアクセスが多いとは意味不明・・。
うかうかしてると、準備もしないうちに迎えてしまいそうですね、早い所準備しなければ^^;

リニューアルの件は私もやりたいと思っていました。
内容的にも新しく作るより修正したいところが山のようにありますし・・。

> 通信の館

あ〜確かに案外通信関連って割と参考サイト少ないですかね。
解説はあれどもサンプルは少なかったり。
特にマルチに使えるsocketプログラムもですが、
DXライブラリを使った通信プログラムは参考になるサイトが少ないですね。
検討してみます★


260ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(211,289ポイント)   Date: 2010/06/25(金) 21:07   No:55293     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
> ただ無い時間を使って使えないライブラリを作成するというのも・・。 

使えないかどうかは考えかた次第です。
うまくやれば、C/C++以外の言語へのバインディングが容易にできるようになります。
現状でも、C#で使えるようにしたDLL版がありますが、制約が大きいですからね。
ほぼ制約のないものを作ることで、C#やVBだけでなく、各種スクリプト言語からも使えるようになる可能性があります。

メリットを明確にできれば、何人かで共同作業をするのもありかと思います。


98ポイント を手に入れた。

Name: 御津凪 [URL]  ..ハッカー(142,990ポイント)   Date: 2010/06/25(金) 21:08   No:55294     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
> 休日にアクセスが多いならまだ解るようなものの、月曜日にアクセスが多いとは意味不明・・。 

最近はサイト巡回ボット系が急増していますし、リファラスパムも多くなっています。
もしかしたらそれらが勝手にカウンタを回しているんじゃないんですか?
(うちのサイトにはとある記事だけにリファラスパムが毎日やってきてます)

> 内容的にも新しく作るより修正したいところが山のようにありますし・・。

友人などの近場の方々に協力を仰げばいいと思いますよ。
そのほうがどうリニューアルすればいいか決まりやすいはずです。


館のページを誰かと共同で作るという手もありますね〜。


140ポイント を手に入れた。

Name: Tororo [URL]  ..初心者(7,688ポイント)   Date: 2010/06/25(金) 22:24   No:55298     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
普通に売ってるゲームのLVじゃないですかw。
自分は小さなチャット広場が欲しいですかね。
些細な質問がしやすそうです。




52ポイント を手に入れた。

Name: わふー  ..ぴよぴよ(330ポイント)   Date: 2010/06/26(土) 11:16   No:55301     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
チャット広場ってより、IRCチャンネルが作られないかなぁ
なんて思ってる者です。

ゲームください! ←


33ポイント を手に入れた。

Name: ムンバ  ..初心者(6,205ポイント)   Date: 2010/06/26(土) 12:35   No:55307     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
>>休日にアクセスが多いならまだ解るようなものの、月曜日にアクセスが多いとは意味不明・・。
 
 私の場合は、休日よりも職場から覗く回数の方が多いですよ。^^
 通信(プログラミング)の館、ぜひぜひご検討の程をっ!ご無理せず。w


104ポイント を手に入れた。

Name:  ..初心者(6,085ポイント)   Date: 2010/06/26(土) 14:41   No:55318     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
 僕も通信系のプログラミングの館をぜひとも
解説していただきたいです。
調べ方が悪いのか、どうもCにおける通信系の入門書や
入門ページが見つからず、あったとしても、古すぎたり
環境が書いてなかったりで、初心者にもわかりやすい
ページがあってもらえるとうれしいです。


139ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,227,811ポイント)   Date: 2010/06/26(土) 23:10   No:55362     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
>> たかぎさん

なるほど、ご意見ありがとうございます。
DXライブラリをマルチな環境で使えるように出来ればそれも魅力的ですね。

>> みつなぎさん

ボットってそんなに何万もアクセスしてくるんですか?
友達に聞くと、月曜日だけアクセスが上がるなら専門学校の授業とかじゃないかと言われましたが、
何かどこかで使って頂いているのでしょうかね・・・っても万単位にはならないですよね;

> 館のページを誰かと共同で作るという手もありますね〜。

あ〜なるほど。それは魅力的ですね。
ゲームプログラミングの館をwiki化するとか、
何か新しい館をwiki化するのありですね。

>> Tororoさん

チャット関連の話は前も出てましたね。
確かに利点もあると思うのですが欠点も多くなりそうで。
例えば細かい質問をいつもチャットで聞くような人が出てきて、
小さなものにとどまらず結構長くなってしまうとか。
そうなると貴重な回答データが流れてしまってもったいないって事になりそうだったので、あえて作らない事にしました。
しかし雑談チャットみたいなものは確かに欲しいですね。検討してみますね。

>> わふーさん

IRCチャット?
ググってみたら「古い歴史を持つリアルタイム・チャット・システムです」みたいな事出てきましたけど普通のチャットと違うんですか?

>> ムンバさん

職場からこんなとこ覗いていいんですか?;
私の会社はそういう私的利用は一切禁止されてるので、無理なので、もっと融通聞かせてほしいです・・。
ガンブラーみたいなウィルスもありますし、HPを見ただけで危険性があると言われたら何も言えませんが・・。
それに会社から個人のHPにアクセスすると会社のデータが流出することもありますしねぇ
仕方ない事かも知れませんね。

>> 白さん

http://www.google.co.jp/search?hl=ja&q=socket+bind&lr=lang_ja

こんな感じでググれば割とめぼしい情報は出てくると思いますよ。
windows版もLinux版もチャットのサンプルも出てくるので昔よく見ていました。
館の件検討してみますね。


753ポイント を手に入れた。

Name: ムンバ  ..初心者(7,524ポイント)   Date: 2010/06/26(土) 23:39   No:55365     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
---編集・削除---
勝手ながら、書き込み削除させて頂きました。
失礼します。

>>それに会社から個人のHPにアクセスすると会社のデータが流出することもありますしねぇ。

 それを外部で受け取り悪用などする方を、俗にクラッカーと呼びます。
 その行為を、クラッキングと呼びます。

 会社内部のLAN接続内のPCなどに詳しい方(操作できる方)は、ハッカーと呼ばれる様です。

 ハッカーは、外部からの流出などを受け止めたとしても
 個人や会社以外には、基本的に情報を外部に漏らしたりしません。
 逆にハッカーは、個人や会社への役に立とう?と情報を収集したり改善したりします。
 もしも外部に情報を漏らすと、その時点でクラッカーと呼ばれる立場になります。
 情報を収集した時点で、クラッカーと呼ばれる立場になるのかもしれません。

 例えば、詳細情報を収集した会社では、ハッカーと呼ばれ
     詳細情報を収集した会社で得た情報を、他会社に流すとクラッカー
 と、呼ばれます。

 自分のPCや、会社のLAN内の、各PCの構造を熟知してる方が、ハッカーと呼ばれ
 情報を収集した上で、その情報を外部に漏らしたり
 個人や会社の情報を、勝手に収集する行為を、クラッキングと呼びます。
 この場合、クラッキングした方を、クラッカーと呼びます。

 情報を(熟知して)自分勝手に収集する行為は、クラッカー
 情報を(熟知して)内部で、自分勝手に内部の情報を収集する方は、ハッカー

してる行為は違うとしても、やってる事は同じです。

会社の情報が入っているパソコンで、ネットに接続していませんので、どうぞご心配なくです。

>>会社から個人のHPにアクセスすると会社のデータが流出することもありますしねぇ。
 
 それは、会社のセキュリティーがいい加減な場合は在り得ますよね。
 良い加減で、セキュリティーの設定された方が良いかと思います。
 特にP2Pとかしてた場合は、危険度大ですね。

またまた余計なお世話でした。
おやすみなさい。(∪。∪)。。。zzzZZ 編集済み


238ポイント を手に入れた。

Name: Tororo [URL]  ..初心者(7,773ポイント)   Date: 2010/06/27(日) 12:58   No:55392     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
たったいまdicさんの書き込み(違うスレ)で思ったのですが、
3Dの館ってのは欲しいかもしれません。

DxLibの3Dの解説は本家のサンプルしか知りませんし・・・


85ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,229,555ポイント)   Date: 2010/06/27(日) 20:48   No:55422     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
> ムンバさん

そうですね^^;

> Tororoさん

あ〜確かに3Dは対応したばかりなので参考になるサイト無いかもしれませんね。
と言っても、私は最近DXライブラリを触って無いので、
3D機能もザッと見程度にしかまだ見ていません;
やはりwikiっぽいものが欲しいですね^^;


59ポイント を手に入れた。

Name: wing  ..中級者(11,564ポイント)   Date: 2010/06/27(日) 23:03   No:55433     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
>C++のことですが
私はネットのC言語講座で勉強しましたが、シューティングゲームが作れませんでした。
もちろん弾幕などもです。
しかし、龍神録の館をみたらすぐにできました。
配列ってこう使うのか、とか構造体ってこう使うのかって、使い方が分からなかったんです。

C++もネットの講座で勉強しましたが、講座のサンプルは分かるんですが、
ゲームでは何をスーパークラスにして何をサブクラスにするとか、よく分かりません。
また、メンバ変数なども使えたり使えなかったりです。

つまりC++をゲームに応用する方法がよく分からないんです。
C++でゲームを作りたいと思っている人は、ネットでそれなりに勉強していると思うので、
きっちりしたC++でいいですから、ゲームをC++で作る方法の解説の館をぜひお願いします。

最近は掲示板しか見なくなったので、ちょっと物足りない思いです。


263ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,229,468ポイント)   Date: 2010/06/29(火) 07:30   No:55491     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
> wingさん

なかなかネットの情報で基本を学んだとしても効率的な設計が出来るようになるには時間がかかりますよね。
本格的に設計方法が学べるサイトってなかなか無いですよね。

C++を使った館の件、検討しますね。ありがとうございます。


20ポイント を手に入れた。

Name: s-rush  ..熟練のプログラマー(59,043ポイント)   Date: 2010/07/01(木) 12:07   No:55649     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
900万アクセスおめでとうございます^^

最近忙しくてあまり書き込むことができませんが、掲示板はほぼ毎日拝見させていただいています。
この1週間はある回路の設計をしていたので覗くことができませんでしたが・・・orz

サイト開設記念としては、他の方もおっしゃっているように新たな館を開設することが良い気がします。
1000万アクセスとちょうどいい感じの節目でもありますし、
心機一転新ジャンルの館を更新していくっていうのはいかがでしょう?

私個人的にはゲームジャンルの王道である(?)RPGについての館を希望しますw
実際にRPGゲームを作っていて、イベント管理が大変ですし、
探し方が悪いのかもしれませんがネット上や書籍でそのような管理プログラムのサンプルが見つかりませんorz

自分なりにイベントテーブルをexcelで作成し、力技で実装していますが・・・


お仕事が大変だと思いますが、お体に気をつけてくださいね^^
これからもサイトの運営頑張ってください。
ずっと応援してます。

そして、私にもゲームをください!!←(ぇ


411ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,229,198ポイント)   Date: 2010/07/01(木) 20:45   No:55665     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
> s-rushさん

ありがとうございます^^
お久しぶりです☆

回路の設計ですか〜。学校の研究ですか?

> 新たな館開設

ですよね〜。編集しやすいようにwiki的なページにしてみようかなと思ったりしています。
時間を見つけて新たな館作ってみたいですね。

> ゲームをください

ありがとうございます^^;
・・って結局イベントはプレゼントの方向にw


102ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(86,404ポイント)   Date: 2010/07/01(木) 22:56   No:55691     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
おひさしぶりです。
来れる日にはこの掲示板に来ています。
館については
RPGの館ですか・・・いいですね。昔作ろうと思いましたが、「大変だろうな」で終わってしまいました。
3Dの館もいいですね。両方あるといいですね。


1000万のキリ番踏んだ人に、非売品パッケージングした龍神録とAerobeatをセットでプレゼント
も欲しいです。


102ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,229,938ポイント)   Date: 2010/07/04(日) 17:54   No:55926     
Title: Re:■ HPのイベントアイディア募集 【雑談】■    
> ひよこさん

お返事遅くなりました;
お久しぶりです。
こうして考えるとやりたいことは沢山あります^^;

・・ってかこうしているうちにいつの間にか920万に・・。
ぼやぼやしてるとすぐに時期が来てしまいそうですね;


92ポイント を落としてしまった。



Name: いむ  ..ぴよぴよ(596ポイント)   Date: 2010/07/04(日) 13:36   No:55900       
Title: 通信関係のプログラムについて    
初歩的なのですが、タイトル通りの質問をさせて下さい。
DXライブラリの関数リファレンスページというものを
見ていた時に、ネットワーク関係の関数を見つけたので試しに
やってみようと思ってそこに載っていたサンプルプログラムを
見てみたのですが、こういった接続側と待機側のプログラムを実行
するためにはPCが2台必要ですか?
家には1台しかなく、このプログラムを実行してみたいのですが・・・


113ポイント を手に入れた。


Name: シエル  ..上級者(22,634ポイント)   Date: 2010/07/04(日) 16:24   No:55915     
Title: Re:通信関係のプログラムについて    
2台必要だと思います。
私も通信系のプログラムの興味が出てきたので、テストしたいと思ってたので、
一台でもテストできるのであれば、その方法が知りたいです。


74ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(555,710ポイント)   Date: 2010/07/04(日) 17:03   No:55919     
Title: Re:通信関係のプログラムについて    
 あのあたりのサンプルならウインドウモードにして多重起動を許可(SetDoubleStartValidFlag)するようにさえ
しておけば1台のPCでもテストできたはずですよ。


2倍のポイントを手に入れた! 52ポイント を手に入れた。

Name: shiro4ao  ..初心者(6,709ポイント)   Date: 2010/07/04(日) 17:09   No:55920     
Title: Re:通信関係のプログラムについて    
ConnectNetWork() などでしょうか?
でしたら,IPアドレスで127.0.0.1(ローカルループバックアドレス)
を渡すと接続先を自分にできると思います。
間違ってたらすみません。


59ポイント を手に入れた。

Name: シエル  ..上級者(22,614ポイント)   Date: 2010/07/04(日) 17:22   No:55921     
Title: Re:通信関係のプログラムについて    
おお!できました!

IPをローカルホストにしたらできました!
DirectXやWinSockでの通信も自分相手にできるってことですかね。

暇があったらやってみます!
Justyさん!ありがとうございました!


66ポイント を手に入れた。

Name: いむ  ..ぴよぴよ(639ポイント)   Date: 2010/07/04(日) 17:30   No:55922 解決!     
Title: Re:通信関係のプログラムについて    
僕も実行できました!
シエルさん、Justyさん、shiro4aoさん
ありがとうございました。


43ポイント を手に入れた。



Name: MOT [URL]  ..ぴよぴよ(328ポイント)   Date: 2010/07/03(土) 22:09   No:55847       
Title: DirectXにてClear関数を呼んだとき    
現在、DirectX9を用いてプログラムを行っています。

ですが、IDirect3DDevice9::Clearを「ウインドウを最小化」して呼ぶと、IDirect3DDevice9::Clearが
失敗して描画が出来ずにプログラムが落ちてしまいます。

Clearの前にデバイスロストの解消する処理を入れたり、TestCooperativeLevelを呼んだりしてみましたが、
どうにもうまくいきません。

ウインドウを最小化する以外では何一つ問題が無いので完全に身動きが取れなくなってしまいました。

以前に同じ症状が出た方や、対処法が分かる方はぜひアドバイスをお願いします。

環境
OS : Windows Vista Home Premiunm
ライブラリ : DirectX 9
開発環境 : Visual Studio 2008 Professional


214ポイント を手に入れた。


Name: シエル  ..上級者(21,978ポイント)   Date: 2010/07/03(土) 22:30   No:55850     
Title: Re:DirectXにてClear関数を呼んだとき    
私も現在DirectXでゲームを作成していますが、そのような症状は出ないですね。

DIRECT3Dデバイス作成までのコードと、Clearメソッドのコードを貼っていただけますか?

私が回答できる保障はありませんが…


51ポイント を手に入れた。

Name: MOT [URL]  ..かけだし(1,171ポイント)   Date: 2010/07/03(土) 22:59   No:55851     
Title: Re:DirectXにてClear関数を呼んだとき    
    mD3DParameters.Windowed                        = mFullScreenFlag ? FALSE : TRUE;
    mD3DParameters.BackBufferWidth                = width;
    mD3DParameters.BackBufferHeight                = height;
    mD3DParameters.BackBufferFormat                = mFullScreenFlag ? D3DFMT_A8R8G8B8 : displayMode.Format;
    mD3DParameters.BackBufferCount                = 1;
    mD3DParameters.MultiSampleType                = D3DMULTISAMPLE_NONE;
    mD3DParameters.MultiSampleQuality            = 0;
    mD3DParameters.SwapEffect                    = D3DSWAPEFFECT_DISCARD;
    mD3DParameters.EnableAutoDepthStencil        = TRUE;
    mD3DParameters.AutoDepthStencilFormat        = D3DFMT_D16;
    mD3DParameters.hDeviceWindow                = mHWnd;
    mD3DParameters.Flags                        = 0;
    mD3DParameters.FullScreen_RefreshRateInHz    = D3DPRESENT_RATE_DEFAULT;
    mD3DParameters.PresentationInterval            = D3DPRESENT_INTERVAL_DEFAULT;

    if(FAILED(mD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, mHWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &mD3DParameters, &mD3DDevice)))
    {
        if(FAILED(mD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, mHWnd, D3DCREATE_MIXED_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &mD3DParameters, &mD3DDevice)))
        {
            if(FAILED(mD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, mHWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &mD3DParameters, &mD3DDevice)))
            {
                if(FAILED(mD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, mHWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &mD3DParameters, &mD3DDevice)))
                {
                    SAFE_RELEASE(mD3D);
                    showErrorMessage(_T("Dreamer : CreateDevice関数に失敗しました\n"));
                }
                else
                {
                    showCautionMessage(_T("Dreamer : REF & SOFTWAREにて起動します...ほとんど満足に動きません\n"));
                }
            }
            else
            {
                showCautionMessage(_T("Dreamer : HAL & SOFTWAREにて起動します...なんとかぎりぎり動くかも?\n"));
            }
        }
        else
        {
            showCautionMessage(_T("Dreamer : HAL & MIXEDにて起動します...少々見劣りしますが動きます\n"));
        }
    }
    else
    {
        showCautionMessage(_T("Dreamer : HAL & HARDWAREにて起動します...余裕に動きます\n"));
    }

Clearメソッド周り

    if(FAILED(mDevice->Clear(0, NULL, flag, color, 1.0f, 0)))
    {
        showErrorMessage(_T("CGraphicsManager : Clearに失敗しました \n"));
    }


独自関数
showCautionMessage : デバッグ出力関数
showErrorMessage : エラーダイアログ出力後例外を投げて終了




843ポイント を手に入れた。

Name: MOT [URL]  ..かけだし(1,173ポイント)   Date: 2010/07/04(日) 16:21   No:55914 解決!     
Title: Re:DirectXにてClear関数を呼んだとき    
自己解決しました。

原因は変なところでデバイスロストからの復活の関数を呼んでいたため、おかしくなっていました。


2ポイント を手に入れた。




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +