今日
http://oshiete1.goo.ne.jp/kotaeru.php3?q=119986

で回答しました。
私としては、質問に対する最もまともな回答をしたつもりでしたが、
反応すらなかったので、「あれ? なんか間違ってんのかな?」と
思ったしたいです。

で、普段からC++でプログラム組んでいる人に伺いたいんですが、
これって質問に対する答えとして相当間違った方向なのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

私のコードの利点は


構造体のメンバを増やしても関数pointplusを変更しなくてもよい
です。
例えば、
struct point{
 union {
  struct {
   int x;
   int y;
   int z;
   int z2;
  };
  int member[4];
 };
};
としても関数pointplusは変更せずに済みます。

それから、以下の2つのパターンですが、
1. pointplus(足し先点、足し元点1、足し元点2)
2. 足し先点 = pplus(足し元点1、足し元点2)
2のパターンだと、復帰値で構造体のメンバのコピーが発生するので、
1のパターンの直接変更の方が無駄がありません。
    • good
    • 0
この回答へのお礼

あ、そうかなるほど。。。。

良く考えると、(技法としては一見特殊に見えますが)考え方は至ってしごくまっとうですよね。

メンバーに名前をつけると共に、テーブル化して走査できるようにしてしまう、
こんな手法ってあったんですね。。。(しらんかったですまじで。。。)

うーむ。妙なところで妙な収穫を得ましたです。。。
ありがとうございました。

お礼日時:2001/08/18 03:04

みなさん言うとおりCのみの話でありC++ではないのでしょう。


C++に慣れるとあのコードで普通ですね。

Cのみでも以下のようにすればできると思うんですが、
あっさり締めきられちゃいましたね(笑)

struct point{
 union {
  struct {
   int x;
   int y;
   int z;
  };
  int member[3];
 };
};


void pointplus(struct point *pa, struct point *pp1, struct point *pp2)
{
 int i;
 for (i = sizeof (pa->member) / sizeof (int) - 1; i >= 0; i --)
  pa->member[i] = pp1->member[i] + pp2->member[i];
}
    • good
    • 0
この回答へのお礼

mkii さん、アドバイスありがとうございます。

おぉ!? これは? 無名の共用体ですね。。。たしかに、これで
member配列に入れた値が、x,y,zにてアクセスできますが。。。
(ちょっとこれは思いつかなかったです。。。)

しかし、、結局

1. pointplus(足し先点、足し元点1、足し元点2)

という形ですから、

2. 足し先点 = pplus(足し元点1、足し元点2)

と大して変わんない気もするのですが、、、
なんかすごい(記述上などの)利点があるのでしょうか?
(私の勉強不足ですか?)

お礼日時:2001/08/18 01:03

質問者の質問や補足からは「C++」という言葉は一言も


出ていなかったので「C++」ではなく「C」での
質問であると(解答者のみなさんが)判断したんだろうと想像します。
「C++」でという条件がある場合は、演算子のオーバロードのほうがより最適な解答だと、私も思います。
    • good
    • 0
この回答へのお礼

shuyamakawaさま、アドバイスありがとうございます。

>質問者の質問や補足からは「C++」という言葉は一言も
>出ていなかったので「C++」ではなく「C」での
そうですね。そこは私もおもいました。
少なくとも質問者の方が知っているのはC言語の範囲であろうとは思いました。
と、同時に、環境等々において、何も記述なさってはいなかったので、
#「多分WindowsでVC++かBC++」あたりを使ってC言語勉強中かな~
#「そうでなければ、学校でUNIXのGNU GCC」をつかって勉強中なのだろうか。
、、、うーむ、とすれば、とりあえず(本人はC++使ってないけれど、
多分C++が動く環境だろうから)カット&ペーストで使えるように
回答しとくのが一番かな~。。。

と思ってあんな感じになったのですが、、、撃沈でした。。。

とりあえず、「C++なら妥当」と言って頂いたので、
その点では、安心できました。

お礼日時:2001/08/18 00:34

読んでみました。



確かに一番無難そうな回答ですね。
ただ、補足やお礼を見てみると、「お早い回答」と
書かれているので、もしかしたらkokucho81様が回答
したのとほぼ同じ時間にお礼を書き込んでいて、
質問者の方は、kokucho81様の回答を読んでいない
のではないでしょうか?

書き込んでいる間の時間というのは、表示される
ページが更新されないので、結構こういうことは
起こりがちです。

Pointがつかない・・・だから回答しないとならずに、
誰か困っている人のためとこれからもがんばって
回答していれば、質問者の方にも心は伝わると
思いますよ。
#別に回答するのは競争ではないと思いますし・・・
#まぁ、Pointがもらえればうれしいのは確かですが。

ではでは☆
    • good
    • 0
この回答へのお礼

Kanata様。
私のわがまま勝手な疑問にアドバイス頂きありがとうございます。

>書き込んでいる間の時間というのは、表示される
>ページが更新されないので、結構こういうことは
>起こりがちです。
そうですね~。もしかしたら質問者の方がお礼をカキカキしている間に、
私がコネコネ回答していたのかもしれないですね~。(はぅ~

とりあえず、回答の方向性としては、それなりに妥当性の有るものでは
あったということが確認できて良かったです。

>Pointがつかない・・・だから回答しないとならずに、
>誰か困っている人のためとこれからもがんばって
いえ、より一層回答の「質」を高めていこうと思いました。
目指すところは、「500回答で5000点」なので。。。

#私の勝手な目標なのですが、そうやって、
#自分なりに目標点立ててやるのもありかなと。。。
#って話それてる。。。(= =;)

お礼日時:2001/08/18 00:21

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q抽出方法、抽出部位を英語で・・

こんにちは。質問です。
海外でエッセンシャルオイルを買おうかと考案中
なんですが、そのHPには抽出方法と抽出部位が
明記さていません。そこでメールで問い合わせようと
思うのですが、抽出方法と抽出部位を英語でなんと
表現すればよいのか迷っています。
どなたかアドバイスありましたらよろしくお願いいたします。

Aベストアンサー

ここで言われているエッセンシャルオイルがどういうものかいまいち理解していないのですが、

一般に動植物からある成分を抽出するのであれば、

方法:What's the method of extraction/ how do you extract the oil ?

部位:What is the organ or part of the plant(creature) the oil is extracted from ?/ Where exactly was the oil taken from ?

などが使えると思います。2番目はそれぞれの口語表現です。

Qいつもお世話になっております。http://oshiete.goo.n

いつもお世話になっております。http://oshiete.goo.ne.jp/qa/5836517.htmlで質問させているものです。

皆さんのアドバイスを頂き、2分探索法で郵便番号から住所を検索するプログラムが出来たのですが、
住所から郵便番号を2分探索法で出すプログラムも同じ方法でやろうとしましたが、比較対象が漢字の為、大きい・小さいの判断できずに上手くプログラムが出来ていません。

csvファイルは読みデータをひとつに繋げてあいうえお順にソートしました

プログラムを一部載せておきます(かなり省略済みですが…)
#define NAME ken_all_address.csv

int main(int argc,char *argv[])
{
struct tb line;
FILE *fp;
char buff[SIZE], string_buff[SIZE];
char *address,*ret;
int flag,linesu,linesu1,sum,count,up,up1,low,low1,center,center1;
int i,j;
long pos[FSIZE];

clock_t start,end;

start = clock();
//引数処理
if((fq=fopen(NAME1,"r")) == NULL){
printf("ファイル%sが開けません\n",NAME1);
return -1;
}

if((fp=fopen(NAME,"r")) == NULL){
printf("ファイル%sが開けません\n",NAME);
return -1;
}

flag = 0;
address = argv[1];

count=0;
sum=0;

if(atoi(address) == 0){
for(i=0; ;i++){
pos[i] = ftell(fq);
ret=fgets( buff, sizeof(buff), fp );

if(ret==NULL){
break;
}
}
linesu = i;

//printf("%d",linesu);

low=0;
up=linesu-1;

while(low <= up){
center=(up+low)/2;
fseek(fq,pos[center-1],SEEK_SET);
fgets( buff, sizeof(buff), fp );

strtok(buff,",\"");
strtok(NULL,",\"");
strcpy(line.now_num,strtok(NULL,",\""));
strtok(NULL,",\"");
strtok(NULL,",\"");
strtok(NULL,",\"");
strcpy(line.kanji1,strtok(NULL,",\""));
strcpy(line.kanji2,strtok(NULL,",\""));
strcpy(line.kanji3,strtok(NULL,",\""));

strcpy(string_buff,line.kanji1);
strcat(string_buff,line.kanji2);
strcat(string_buff,line.kanji3);

printf("%s %s %s\n",line.kanji1,line.kanji2,line.kanji3);

if(strcmp(string_buff,address)==0){
printf("〒%s \n",line.now_num);
flag=1;
}
if(strstr(string_buff,address) ==NULL){
low=center+1;
}
else{
up=center-1;
}
}
}
fclose(fp);

if(flag==0 && atoi(argv[1]) == 0){
printf("「%s」に該当する郵便番号はありませんでした\n",address);
}

if(flag==0 && atoi(argv[1]) != 0){
printf("「%s」に該当する住所はありませんでした\n",address);
}

end = clock();

printf("引数=%s\n",address);
printf("%.30f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC);
printf("fgetsの実行回数=%d回\n",sum);
printf("比較回数=%d回\n",count);
printf("\n");

return 0;
}

いつもお世話になっております。http://oshiete.goo.ne.jp/qa/5836517.htmlで質問させているものです。

皆さんのアドバイスを頂き、2分探索法で郵便番号から住所を検索するプログラムが出来たのですが、
住所から郵便番号を2分探索法で出すプログラムも同じ方法でやろうとしましたが、比較対象が漢字の為、大きい・小さいの判断できずに上手くプログラムが出来ていません。

csvファイルは読みデータをひとつに繋げてあいうえお順にソートしました

プログラムを一部載せておきます(かなり省略済みですが…)
#de...続きを読む

Aベストアンサー

 strcmpの返り値は文字列を文字コードで比較しての大小関係です。
 ただし、漢字の文字コードは必ずしも「あいうえお順」じゃないので、そのままでは2分探索法では検索出来ないでしょう。

 この場合は普通はデータに「読み方」のフィールドを追加し、そこに住所をひらがな(あるいはカタカナ)で記載し、それを使って2分探索法で検索します。
 別のやり方としては、CSVファイルを「あいうえお順」ではなく「文字コード順」にソートしたものを使って検索する方法もあります。

Qエクセル(英語リスト)で大文字で始まるものを抽出したい

関数のことあまりわかっていない初心者です。
英単語(1単語以上)のリストから、大文字で始まるものだけを抽出する関数を教えてください。6万行以上もあり、困っています。以下のようなリストです。
<A列>
Cesfalko
setting
set-point
sedation
cutting off sedation
Setous
Cedlips
Senapanman
Cepadipin

↑このうち、
Cesfalko, Setous, Cedlips, Senapanman, Cepadipin がわかるようにB列に1とか*とか入れたいです。

#ご存じの方からすれば、こんなことぐらいわからないの?と思われるくらい、恥ずかしいレベルですみません。
#FIND、IFなどを使う?程度ぐらいしかわかっていません。

よろしくお願いします。

Aベストアンサー

別解です。
=IF(EXACT(A1,LOWER(A1)),0,1)

QAnsiPos相当の関数はありませんか?

BorlandC++ なら使えると思いますが、AnsiPosという関数があります。
n := AnsiPos('表題\一覧');
上の例でnが5になり、漢字コードの中の\は拾いません。

VisualC++ でこのような処理は、自前で作るしかないのでしょうか。

当然ですが、C++でstringのfindメソッドでは面倒を見てくれませんでした。
string str="表題\\一覧";
n = str.find("\\");
この例では、nが1になります。

ちなみにAnsiPosが使えるコンパイラであるFreePascalでも、期待した結果は得られませんでした。
(nが2になります。)

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

Aベストアンサー

AnsiPosの仕様を知りませんが、VC++専用で良ければ、_mbsstrが使えそうです。

#include <mbstring.h>

int AnsiPos(const char *s1, const char *s2)
{
const unsigned char *p = _mbsstr((const unsigned char *)s1, (const unsigned char *)s2);
if (p) {
return p - (const unsigned char *)s1 + 1;
}
return 0;
}

Q英語音声・字幕あり にする方法

 最近PSPで洋画DVD鑑賞にはまっており
DVDshrinkというフリーソフトで抽出し、携帯動画変換君でMP4に変換して楽しんでます。
 いつもは「日本語音声・字幕なし」なので特別な設定はいらずに簡単に抽出できるのですが次からは「英語音声・字幕あり」にしたいです。
 ですが何度やっても英語音声だけしか抽出できません。
どなたか英語音声と字幕を同時に一つのデータに出力できる
フリーソフト又は方法をお知りの方教えてくださりませんか?

Aベストアンサー

DVDのリッピングは著作権法的にグレーであり、またリッピングの質問自体がここの禁止事項です。
削除依頼出しておきますね。

QC++でJavaのアプレットに相当するもの

あるプロジェクトを任されているんですが
ちょっとしたアニメーションのようなものが必要となります。
メイン言語はC++です。
それで担当の人に「アニメの部分はJavaのアプレットを使ってもいいですし、C++のままなら『コXX』を使ってもいいですね」と言われました。
『コXX』???
その時に聞き直せばよかったのですが、いかにも知ってるかのように返答してしまいました。
なんか「コルバ」みたいに聞こえたんですが、まさかCORBAじゃないでしょうし、DirectXやOpenGLの聞き間違えでもありません。
何か心当たりはありませんでしょうか?

Aベストアンサー

★追記。
・コンパイラ
・コンパイル
・コンソール
・コントロール
・これ以上は思い浮かびません。

参考URL:http://yougo.ascii24.com/gh/toc/ka_5.html

Q超臨界抽出法

私は、海外で化粧品の買い付けと日本への輸出の仕事をしています。今回、日本の輸出先会社から、扱っている化粧品の成分の抽出法について問い合わせがありまして、「これは、超臨界抽出法か?」という旨の質問が来ました。こちらのメーカーに問い合わせしたいのですが、どのように英語に訳すかわかりません。また、「抽出」は、extractionでよろしいのでしょうか?あと、ついでにもうひとつ教えていただきたいのですが、「膿む」傷などが、膿む、と言いますよね?これは、普通英語ではなんといいますか?お教え下さい。宜しくお願いいたします。

Aベストアンサー

supercritical fluid extraction 超臨界抽出法

suppurate (傷が)膿む

ネット辞書・英辞郎に載っていました。英辞郎使ってみてください。

QjavaのLinkedHashMapの機能相当のSTLのクラス

javaのLinkedHashMapの機能に最も近いSTLのクラスは何になるか、ご存知の方教えていただけますか

Aベストアンサー

std::mapでしょうか。
C++のmapは通常ハッシュではなく赤黒木等の木構造になってます。

Qあるフィールドの最大値を条件にデータを抽出する方法

Access97のVBAで開発を行っています。SQLでデータの抽出で、あるフィールドの最大値を条件に指定して抽出する方法を教えてください。最大値という曖昧な条件なため、悩んでいます。

(例)ある学校の成績テーブル(左から、学籍番号,組,氏名,性別,科目,点数)

0103,鈴木,男,国語,95
0103,鈴木,男,数学,40
0103,鈴木,男,英語,80
0104,高橋,男,国語,45
0104,高橋,男,数学,85
0104,高橋,男,英語,55

|(SQLで各人の最高点のデータのみ抽出したい)

(抽出結果)
0103,鈴木,男,国語,95
0104,高橋,男,数学,85

知っている方、是非教えてください。
お願いします。

Aベストアンサー

クエリーを使えば比較的楽に出来るでしょうがひとつのSQLでやるのは少々難しいように思います。 そこで、SQLを二回に分けて結果を出してはどうでしょうか。

最初に学籍番号と点数だけで「SELECT 学籍番号, Max(点数) AS 最高点 FROM 成績テーブル GROUP BY 学籍;」とし、個人別の最高点を抽出します。 そして、それをもとに「SELECT * FROM 成績テーブル WHERE 学籍番号 = 最高点のSQLの学籍番号 AND 点数 = 最高点のSQLの最高点;」とし、必要なほかの情報(氏名、性別、科目)を持ってきます。

【例】
Dim db As database
Dim rs1 As recordset
Dim rs2 As recordset

Set db=CurrentDb
Set rs1=db.OpenRecordset("SELECT 学籍番号, Max(点数) AS 最高点 FROM 成績テーブル GROUP BY 学籍;",dbOpenDynaset)

rs1.MoveFirst

Set rs2=db.OpenRecordset("SELECT * FROM 成績テーブル WHERE 学籍番号 = '" & rs1("学籍番号") & "' AND 点数 = " & rs1("最高点") & ";",dbOpenDynaset)

rs2.MoveFirst

後はrs2("学籍番号")、rs2("氏名")等の必要な情報を必要に応じて操作すれば
よろしいのではないでしょうか。

クエリーを使えば比較的楽に出来るでしょうがひとつのSQLでやるのは少々難しいように思います。 そこで、SQLを二回に分けて結果を出してはどうでしょうか。

最初に学籍番号と点数だけで「SELECT 学籍番号, Max(点数) AS 最高点 FROM 成績テーブル GROUP BY 学籍;」とし、個人別の最高点を抽出します。 そして、それをもとに「SELECT * FROM 成績テーブル WHERE 学籍番号 = 最高点のSQLの学籍番号 AND 点数 = 最高点のSQLの最高点;」とし、必要なほかの情報(氏名、性別、科目)を持ってきます。

【例】
D...続きを読む

QGdiplus::Graphics::DrawPath()でのDT_CALCRECTに相当するもの。

表題の通りなのですが、Gdiplus::Graphics::DrawPath()を用いた描画結果の
描画範囲の矩形を取得するにはどのようにしたらいいのでしょうか?
DrawText()時にDT_CALCRECTを指定した場合と同じように、DrawPath()を
した場合の正確な矩形が知りたいのです。

環境はxp sp3のVC9になります。
よろしくお願いします。

Aベストアンサー

GraphicsPathオブジェクトの GetBoudsで取得できるのでは?

path.AddString( "Sample Text", this->Font->FontFamily,
  (int)FontStyle::Regular, 24.0f, Point( 0,0),
  StringFormat::GenericDefault );
RectangleF rcf = path.GetBounds();
といった具合で


人気Q&Aランキング

おすすめ情報