トップページ⇒tech
1001コメント422KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG?2BP(417)
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう.
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):()
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 106代目
http://pc11.2ch.net/test/read.cgi/tech/1209810861/
01531212008/05/19(月) 20:30:14
>>152
たぶん答えとしては意味合いが違ってるだろうけどはっとく
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6611.txt
0154側近中の側近 ◆0351148456 2008/05/19(月) 21:18:10
>>145
(っ´▽`)っ
小行列式に分割するってのはどうなの?
再帰を使えばできるような気がするよ
0155デフォルトの名無しさん2008/05/19(月) 21:26:23
>>150
前スレで解答出てるんならそのリンクも張って具体的にどこがどう分からないのかも書けよ
あと、「多倍長」でググレ
0156デフォルトの名無しさん2008/05/19(月) 22:05:52
>>154
期待してる
0157側近中の側近 ◆0351148456 2008/05/19(月) 22:06:37
>>156
(っ´▽`)っ
がんばってる☆
0158デフォルトの名無しさん2008/05/19(月) 22:07:58
[1] コンピュータ言語�V
[2] 文字列sを先頭から順に1行に1文字ずつ表示する関数putvを作成せよ。
  void putv(const char*s)
[3]
 [3.1]Windows XP
 [3.3]C++
[4] 期限 5月20日の午後3時まで
[5] 特になし

よろしくお願いします
0159デフォルトの名無しさん2008/05/19(月) 22:21:12
>>158
void putv(const char*s)
{
for(int i = 0 ; s[i] != '\0' ; i++)
{
printf("%c\n",s[i]);
}
}
0160デフォルトの名無しさん 2008/05/19(月) 22:22:26
>>158
#include <stdio.h>
#include <string.h>
void putv(const char*s)
{
size_t len = strlen(s);
size_t i;
for(i = 0; i < len; i++){
putchar(s[i]);
putchar('\n');
}
}
0161デフォルトの名無しさん2008/05/19(月) 22:36:01

強烈に難しいです…できた人は神!

内容:
[1] 授業単元: プログラミング概論第二
[2] 問題文(含コード&リンク):
ANNという最近傍探索のアルゴリズムがある。
このアルゴリズムは以下のステップを用いる
1)n次元k個のデータ群からkd木を作成する
2)探したいあるn次元のクエリから、kd木に格納されている点を探す
3)クエリと探し出された点との距離をdとする
4)距離dの超球を書く
5)「超球に触れているすべてのkd木で作成されたbox」内にあるすべての点をリストアップする
6)リストアップされた点を元に最も距離の近い点を探す。
というものです。
1〜4までは作りましたが
5)がよくわかりません…解決できる方どうか助けてください!

[3.1] OS:windows
[3.2] visual studio 2007
[3.3] 言語: C
[4] 期限: 2008年5月20日まで]
[5] なし
01621612008/05/19(月) 22:40:18
補足です。
(nlogn)の計算量を極力スポイルしないよう、(5)のステップに注意し作成せよ
だそうです。
0163デフォルトの名無しさん2008/05/19(月) 22:54:15
とりあえず1〜4をうp
0164側近中の側近 ◆0351148456 2008/05/19(月) 22:57:25
(っ´▽`)っ

#include <stdio.h>
#include <stdlib.h>

#define  MATRIX_FACT(row, col)    a[(row) * rowLength + (col)]
#define  PART_MATRIX_FACT(row, col)  partMatrix[(row) * (rowLength - 1) + (col)]

double getDeterminant(double *a, int rowLength, int colLength);

int main(void){
  double  a[4][4] = {{1, 2, 3, 0}, {4, 5, 6, 0}, {7, 8, 9, 0}, {2, 4, 6, 8}};
  //double  a[4][4] = {{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}};
  int    rowLength = 4;
  int    colLength = 4;
  //double  a[3][3] = {{0, -2, 0}, {-1, 3, 1}, {4, 2, 1}};
  //int    rowLength = 3;
  //int    colLength = 3;
  double  determinant = (double)0;
  determinant = getDeterminant((double *)a, rowLength, colLength);
  printf("determinant=%f\n", determinant);
  return 0;
}

(続く)
0165側近中の側近 ◆0351148456 2008/05/19(月) 22:58:08
>>164の続き

double getDeterminant(double *a, int rowLength, int colLength)
{
  double  determinant = (double)0;
  double  minorDeterminant = (double)0;
  double  *partMatrix = NULL;
  int    i = 0;
  int    j = 0;
  int    k = 0;
  if(rowLength < 2 || colLength < 2 || rowLength != colLength){
    goto catch;
  }
  if(rowLength == 2){
    determinant = MATRIX_FACT(0, 0) * MATRIX_FACT(1, 1) - MATRIX_FACT(0, 1) * MATRIX_FACT(1, 0);
  }
  else{
    for(i = 0; i < rowLength; i++){
      partMatrix = (double *)malloc(sizeof(a[0]) * (rowLength - 1) * (colLength - 1));
      for(j = 0; j < i; j++){
        for(k = 0; k < colLength - 1; k++){
          PART_MATRIX_FACT(j, k) = MATRIX_FACT(j, k + 1);
        }
      }
      for(j = i; j < rowLength - 1; j++){
        for(k = 0; k < colLength - 1; k++){
          PART_MATRIX_FACT(j, k) = MATRIX_FACT(j + 1, k + 1);
        }
      }

(続く)
0166側近中の側近 ◆0351148456 2008/05/19(月) 22:58:48
>>165の続き

      printf("partMatrix={");
      for(j = 0; j < rowLength - 1; j++){
        printf("{");
        for(k = 0; k < colLength - 1; k++){
          printf("%f,", PART_MATRIX_FACT(j, k));
        }
        printf("\b},");
      }
      printf("\b}\n");
      minorDeterminant = getDeterminant(partMatrix, rowLength - 1, colLength - 1);
      printf("minorDeterminant=%f\n", minorDeterminant);
      free(partMatrix);
      determinant += minorDeterminant * (i % 2 == 0 ? 1 : -1) * MATRIX_FACT(i, 0);
    }
  }
catch:
  return determinant;
}
0167側近中の側近 ◆0351148456 2008/05/19(月) 22:59:56
>>156
(っ´▽`)っ
がんばりました☆
余因子展開により行列式を求める方法です
>>164-166
0168デフォルトの名無しさん2008/05/19(月) 23:29:04
いいかげんうpろだの使い方くらい覚えてくれ
0169側近中の側近 ◆0351148456 2008/05/19(月) 23:35:01
>>168
|▽`)っ ニヤニヤ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6613.txt
0170デフォルトの名無しさん2008/05/19(月) 23:35:03
ああ、ここまで長くなっていると書き込む前に分かっているなら
不必要にスレが流れるのを考慮して、マナーとして使うべきだろ
0171側近中の側近 ◆0351148456 2008/05/19(月) 23:36:07
>>170
(っ´ω`)っ いきててごめんね
0172デフォルトの名無しさん2008/05/20(火) 00:04:07
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク):
  作成した「画像表示」のプログラムを、同じ画像を横に並べて
  表示するように修正せよ(「画像表示」のボタンに対応するプログラムを修正)。
  作成したプログラムはこちらです。
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6615.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: visual studio 6.0
 [3.3] 言語:C++
[4] 期限:20日正午まで
[5] その他の制限:
  「画像表示」のボタンに対応するプログラムは下の通りです。
  CWnd* myPICT=GetDlgItem(IDC_PICT);
  CClientDC myDC(myPICT);
  CRect myRECT;
  my PICT->GetClientRect(myRECT);
  int x,y;
  for(y=0;y<height;y=y+1)
  for(x=0;x<width;x=x;1)
  myDC.SetPixel(x,y,RGB(r[y][x],g[y][x],b[y][x]));


よろしくお願いします。
 
  
0173デフォルトの名無しさん2008/05/20(火) 00:04:21
>>161
質問です。
今、最近傍探索を調べているのですが、意味がよくわからないところがありますので、教えていただけますでしょうか。
1) k次元(ユークリッド)空間R^k 内にデータが n個散らばっている。
2) ここに、点P がある。
3) 点P にもっとも「近い」データを探し出したい。
というのが最近傍探索で、問題のアルゴリズムは、
4) , 3) でもっとも近いデータを探すのに「n 個のデータすべてについて距離を求め、一番距離が小さいものを求める」のは計算量が多くて大変!
5) そこで、とりあえず適当なデータQ と P との距離dを求め、
6) 辺の長さが 2d, 中心がP, 辺は座標軸に平行である k次元立方体 S を考え、
7) 領域探索アルゴリズムにて S 内にあるデータをすべて列挙し、
8) S 内のデータすべてと P との距離をそれぞれ求めて、一番距離小さいものを求める
ということでしょうか。
そうすると、5) の Q をとりあえず探す、というのが、非常に大事で、まかりまちがって P から遠い Q を選んでしまうと計算量を少なくできないですが、Q の選び方はどうすればよろしいのでしょうか?
以上の解釈でいいのでしょうか。
0174デフォルトの名無しさん2008/05/20(火) 00:38:41
>>172
int x,y;
for(y=0;y<height;y=y+1)
for(x=0;x<width;x=x;1)
myDC.SetPixel(x,y,RGB(r[y][x],g[y][x],b[y][x]));
↓
int x,y,x2;
for(y=0,x2=0;y<height;y=y+1)
for(int i=0;i<2;i++)
for(x=0;x<width;x=x+1,x2++)
myDC.SetPixel(x2,y,RGB(r[y][x],g[y][x],b[y][x]));
0175デフォルトの名無しさん2008/05/20(火) 01:13:11
>>158
#include <stdio.h>
#define MAX 11
void putv(const char *s) {
do { putchar(*s++); printf("\n");
}while( *s != NULL && *s!='\n');
}
int main(void) {
char str[MAX];
fgets(str,MAX,stdin);
putv(str);
return 0;
}
0176151 ◆rGsyzf.Kp2 2008/05/20(火) 01:58:21
151ですがまだ終わってないぽいです・・・
やってくれるかたがいればおねがいします。
0177デフォルトの名無しさん2008/05/20(火) 02:12:50
>>174
ありがとうございました。
言い忘れたんですけど画像と画像の間を少し空けて表示させたいんですけど
どうなるでしょうか?
0178デフォルトの名無しさん2008/05/20(火) 02:37:37
>>158のポログラムが簡単そうだったから僕もつくてみたよー。

#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>

using namespace std;

void putv( const char* );

int main()
{
char s[] = "teststring";
putv( s );
}

void putv( const char* s )
{
string str( s );
copy( str.begin(), str.end(), ostream_iterator< char >( cout, "\n" ) );
}

どうすか、この華麗なるSTL。w
0179デフォルトの名無しさん2008/05/20(火) 02:49:07
もはやC++にこだわる意味すらない課題に・・・
0180デフォルトの名無しさん2008/05/20(火) 02:59:13
技巧に走るのは楽しいかもしれんが一人でやっててくれ
0181デフォルトの名無しさん2008/05/20(火) 03:23:57
何やってんだかわかりにくいコードはキモい。
0182デフォルトの名無しさん2008/05/20(火) 03:40:33
それはおまえだけ。
0183デフォルトの名無しさん2008/05/20(火) 03:45:32
短くもなきゃ効率言い訳でもない上見た目も悪くて最悪だろw
0184デフォルトの名無しさん2008/05/20(火) 03:48:49
お主ら、麻呂のクソースはいかがでおじゃる?1ソース100円でどうじゃ?
0185デフォルトの名無しさん2008/05/20(火) 04:00:19
STL を使ったプログラミングはこんなもんだぞ?
たとえばこの板でもおすすめの入門書
Accelareted C++ にもこういう構文が普通にでてくる。
「何やってんだかわかりにくい」ってのは STL の勉強不足だろ単に。
0186デフォルトの名無しさん2008/05/20(火) 04:01:20
いや、だからそれすら必要の無い単純なライブラリの自作で
面倒な、処理時間が掛かるようなことをして何がしたいんだと?
0187デフォルトの名無しさん2008/05/20(火) 04:06:56
Generic programming―STLによる汎用プログラミングでも似たようなコードがあったな。
しかし課題の趣旨にはあわんな。
0188デフォルトの名無しさん2008/05/20(火) 04:10:32
C++の課題に<stdio.h>とか使ってる人のいるスレですから。
Effective C++くらい読もうよ。
0189デフォルトの名無しさん2008/05/20(火) 04:17:28
void putv(const char *s) {
do { printf("%c\n",*s++);}while( *s != NULL); }
と比較したら、倍近く差が出るぞ?
0190デフォルトの名無しさん2008/05/20(火) 04:21:52
/* ここから宗教論争

課題がCではなくあえてC++だってところがミソだな。
Cライクなコードは書くなってことだから
型安全性と拡張性を持たないライブラリ関数は
いくら早くてもNGだろう。

ここまで */
0191デフォルトの名無しさん2008/05/20(火) 04:25:31
// Cライクなコメントを書くな。w
0192デフォルトの名無しさん2008/05/20(火) 04:53:43
どんな技術も使い手がヘボだと何の意味もないということがよくわかるな。
使いどころをわきまえてない。
0193デフォルトの名無しさん2008/05/20(火) 04:55:38
>>190
> いくら早くても
日本語でおk。C++だろうとwhileは特定の言語のものじゃないんで、あしからず。
あと、C++って結局Cの拡張。何か別物と勘違いする奴って笑われるぞw
0194側近中の側近 ◆0351148456 2008/05/20(火) 06:40:30
(っ´▽`)っ
>>169はどう?
0195デフォルトの名無しさん2008/05/20(火) 06:54:36
>>176
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6617.txt
0196デフォルトの名無しさん2008/05/20(火) 07:01:21
>>194
ちゃんとは見ていませんが、Cプログラムとしては
なかなか良い作品ではないかと思いまつ。
だけど一般次数の行列式の計算なんてC言語のプログラミング実習
の問題の適切な範疇を遥かに超えてしまった課題じゃないかと思います。
C言語の世界はシステム記述が中心で一般論を非常に重視する世界だと思
います。
数値計算は数学の教科書の一般論がなかなか適用できず、問題に応じて
適切な方法を選択(考案)しなければいけない世界です。相当、系統の
違う専門分野だと思います。(一般論は欲しいのですが...)
0197デフォルトの名無しさん2008/05/20(火) 07:29:36
>>196
これは・・・w
01981392008/05/20(火) 07:43:59
>>164-166 169
早速ありがとうございます。実行して出力した結果がどういうものか分からないんですが、
partMatrixとminorDeterminateがなにを表しているのか教えてください
あとプログラムの使い方も教えてほしいです。
たとえば3x3の行列式
4x+6y+2z=4000,2x+8y+6z=5000,6x+4y+4Z=4200
の場合と4x4の行列式
2w+1x+4y+3z=5,3w+2x+5y+0z=0,4w+3x+2y+1z=3,5w+0x+3y+2z=0
の場合の解を求めるには
このプログラムをどのようにすればいいのでしょうか?




0199デフォルトの名無しさん2008/05/20(火) 07:51:46
>>193
whileの話じゃない。詳しくはEffective C++参照。
02001732008/05/20(火) 07:56:47
>>161
時間切れです。残念です。
こっそり仕事中にやれるのならやりますので(苦笑)、16:00 以降 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm をチェックしてください。
k-d tree の多次元化ははじめてで、おもしろいのではありますが‥‥‥、こういうおもしろい問題は、もっとはやく投げてほしかったですね。
まだエラーがとれないものを、http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6618.txt においておきます。
眠い。
0201デフォルトの名無しさん2008/05/20(火) 07:58:16
喧嘩すんな。コーディングの仕方なんぞ所詮宗教。
<stdio.h>が<cstdio>になり、<iostream>を使うよう推奨されても
<stdio.h>を使う人間は使い続ける。
0202デフォルトの名無しさん2008/05/20(火) 08:03:41
宗教じゃなくて
流儀
変数の命名の方法とか、所有権とか...
デフォを決めとかないと、コードが大きくなってしまった
場合に急ぎの作業が入ったらキツクなるから
流儀が設定されることもある。
必要悪
0203デフォルトの名無しさん2008/05/20(火) 08:11:43
C++標準で<stdio.h>が<cstdio>になったのは1998年だから
C++プログラムで<stdio.h>を使う人は10年以上前にC++を習得した人。

つまりおっさんPG。
0204デフォルトの名無しさん2008/05/20(火) 08:14:08
Cは1999年にC++標準の中のCとは互換性のないC99に改定されたので
Cに関しても10年以上前に習得した人ってこと。

どう考えてもおっさんPG。
0205デフォルトの名無しさん2008/05/20(火) 08:19:02
keep it simple.
0206デフォルトの名無しさん2008/05/20(火) 08:22:50
新しきを学び、古きを捨てましょう。
「アジャイルプラクティス-達人プログラマに学ぶ現場開発者の習慣」より
0207デフォルトの名無しさん2008/05/20(火) 08:25:28
>>194
C プログラムとしての指摘:
> double a[4][4] = ...
> getDeterminant((double)*a, ...)
これは多くの処理系で動くけれど、
ANSI Cの規格には従っていないことに注意。

アルゴリズムとしての指摘:
余因子展開で行列式を計算するのは O(n!) かかるので、非常に遅い。
ガウスの消去法などを用いると O(n^3) で計算できる。
0208デフォルトの名無しさん2008/05/20(火) 08:26:54
新しい技術を学ぶときには、足を引っ張りかねない古い習慣を捨てなさい。

見出しだけだと誤解を招くよ
0209デフォルトの名無しさん2008/05/20(火) 08:29:37
>>139
「行列式 (determinant)」という言葉を調べてこい。

4x+6y+2z=4000,2x+8y+6z=5000,6x+4y+4Z=4200 みたいなのは
行列式とは言わない。せいぜい 3×3連立方程式。
0210デフォルトの名無しさん2008/05/20(火) 08:33:50
cstdioはしらねーよ iostreamは知ってる
ウェブも本もcstdioはなかなかないのでは
0211デフォルトの名無しさん2008/05/20(火) 08:36:06
それだけ馬鹿が多いと言うことでしょう。
0212デフォルトの名無しさん2008/05/20(火) 08:41:35
それをバカと評価するあんたは何者だよ?w
現代において、自分が知っていることだけがすべてだと思う
思い上がりの方がバカを通り越した井の中の蛙だろ
0213デフォルトの名無しさん2008/05/20(火) 08:46:53
かの相対性理論で有名なアインシュタイン、相対性理論と言えば
光に関しても関わってくる話ではあるが、光速度を知らなかったのだよ、
アインシュタインは。何が重要か?必要に応じて必要なものを
取り込む頭がない奴は、現代のような無駄な生活をしていても
その無駄さえも 必要 という勘違いを始めるから困る。
または、無駄を省かない、省けない。誰かに指摘されるまでそうしている。
0214デフォルトの名無しさん2008/05/20(火) 08:48:14
バカかどうかは別にして。

<cstdio>よりも<iostream>を使うことが推奨されているから
<cstdio>を使っているC++の本は少ないだろうけど
<stdio.h>を使っているC++の本は(多分もう)一冊もないだろうと思う。
古い本でも版を重ねると直しているくらいだし。
少なくともC++の宿題に今<stdio.h>を使ったら
歳の行った人に答えを聞きましたってばれちゃう。
学校でもC++の授業で<stdio.h>は教えないだろうから。
0215デフォルトの名無しさん2008/05/20(火) 08:54:10
>>213
それは間違いだ。
アインシュタインの相対性理論は、光速度一定と言う仮定の上に成り立っている。
と言うことは、実際の速度がどれくらいかは兎も角光速度を知らないということにはならないな。
処で、馬鹿といわれて過剰に反応するのは何故だろう。余程、自覚があるのだろうか。
0216デフォルトの名無しさん2008/05/20(火) 08:59:59
光の速度が時速100kmだろうと1000000kmだろうと一定は一定
0217デフォルトの名無しさん2008/05/20(火) 09:15:16
<stdio.h>なんざincludeしやがったら
チームメンバーから袋だろ。w
名前空間を汚染するなって。
0218デフォルトの名無しさん2008/05/20(火) 09:25:06
>>202
その流儀に宗教が紛れ込みやすい。
というか完全に除去するのは不可能。
宗教は流儀に強い信頼性を与えるから
だろうけど。
修羅場で無くなった状態で、流儀が伝統
になってしまうとそこに潜む宗教という強い
力が全体を緩慢かつ堅固に拘束していくと
やっかい。
0219デフォルトの名無しさん2008/05/20(火) 09:25:39
そんな話じゃないだろ
脱線すんな
0220デフォルトの名無しさん2008/05/20(火) 09:54:27
<stdio.h>が<cstdio>になったのと
C++標準にSTLが組み込まれたのは同時期だから
いまだに<stdio.h>を使う人が
STLを使ったコードを理解できなくても不思議はない。
0221デフォルトの名無しさん2008/05/20(火) 10:02:16
ドッグイヤーどころかマウスイヤーといわれるITの世界で
10年以上前の規格を使い続けるやつなんて存在価値なし。
0222デフォルトの名無しさん2008/05/20(火) 10:02:32
ttp://ja.wikipedia.org/wiki/Standard_Template_Library
さすがに知らないとか理解できないとか、うざい。
あのコードが 無駄 だと気づけw
0223デフォルトの名無しさん2008/05/20(火) 10:08:55
>>178
> どうすか、この華麗なるSTL。w
こいつだろ、さっきっから理解できない奴がいる、自分は知ってるみたいな
華麗とか、マジでそれ 糞 だからw
0224デフォルトの名無しさん2008/05/20(火) 10:14:22
>>178はあきらかに悪質なジョークだろ。
おまえら反応しすぎ。どこまでコンプレックスなんだ。
0225デフォルトの名無しさん2008/05/20(火) 10:17:31
ttp://e-words.jp/w/STL.html
ふぅ〜ん、もう10年以上前ってレベルじゃねーぞっ。んで、知っているからって何?
知らない奴を見つけて楽しんでいるわけ?ケツの穴が小せぇなぁ。性格悪ぅ〜〜。
知っている奴もいるが、何そんなに必死に知らない奴を探してんの?って思われるだけだぞw
0226デフォルトの名無しさん2008/05/20(火) 10:19:58
iostream に printf 相当の書式指定が欲しい
IOマニピュレータ面倒すぎ
0227デフォルトの名無しさん2008/05/20(火) 10:21:44
>>226
過去に(模擬)宿題として出てたような
0228デフォルトの名無しさん2008/05/20(火) 10:25:49
>>224
いつものやつっぽいからそっとしておいてやれ
0229デフォルトの名無しさん2008/05/20(火) 10:26:05
いちいち << とかめんどくさいよな . とかなら1回押すだけで良いのに
0230デフォルトの名無しさん2008/05/20(火) 12:15:45
>>214
うちはC++の講義すら無い件。
Cの講義のみでひたすら<stdio.h>
0231デフォルトの名無しさん2008/05/20(火) 12:46:13
[1] C++
[2] 体重と身長の値から算出される指数の1つに
Body Mass Index(BMI)がある。
体重[kg]を身長[m]の2乗で割って計算し,
標準値は22.0とされている。

【問題】
キーボードから身長と体重を入力すると,
BMIが画面に出力されるプログラムを作成しなさい。
[3] 環境
 [3.1]Windows
 [3.2]VC?(よくわかりません)
 [3.3]C++
[4]5月27日 17時まで
[5]特にありません。

よろしくお願いします!
0232デフォルトの名無しさん2008/05/20(火) 13:19:11
// >>231
// 「キーボードから入力」と「画面に出力」が標準入出力のことじゃないならしらね。
#include <iostream>
int main()
{
int height;
int weight;
std::cin >> height >> weight;
std::cout << weight / (height / 100.0 * height / 100.0);
return 0;
}
02331612008/05/20(火) 14:45:22
すいません、寝落ちしていました。
えっと、ここにc++版があります。
http://www.cs.umd.edu/~mount/ANN/
力不足なことに、私はc++を全く理解することができません。理解は時間があればできそうですが、時間が足りません(汗

>今、最近傍探索を調べているのですが、意味がよくわからないところがありますので、教えていただけますでしょうか。
>1) k次元(ユークリッド)空間R^k 内にデータが n個散らばっている。
>2) ここに、点P がある。
>3) 点P にもっとも「近い」データを探し出したい。
>というのが最近傍探索で、問題のアルゴリズムは、
>4) , 3) でもっとも近いデータを探すのに「n 個のデータすべてについて距離を求め、一番距離が小さいものを求める」のは計算量が多くて大変!
>5) そこで、とりあえず適当なデータQ と P との距離dを求め、
>6) 辺の長さが 2d, 中心がP, 辺は座標軸に平行である k次元立方体 S を考え、
>7) 領域探索アルゴリズムにて S 内にあるデータをすべて列挙し、
>8) S 内のデータすべてと P との距離をそれぞれ求めて、一番距離小さいものを求める
>ということでしょうか。
最近傍探索の考えはあっています。
ですが
5)まずkd木を探索して、点Pがどの立方体に所属するかどうかをさがし、その立方体の中に入っている点Q と P との距離dを求め超球を書く
6)超球に接している立方体、超球の中にある立方体をすべてリストアップする
7) 領域探索アルゴリズムにて 立方体群内にあるデータをすべて列挙し、
8) 立方体群内のデータすべてと P との距離をそれぞれ求めて、一番距離小さいものを求める
のうち領域探索アルゴリズムがわかりません。
どのようなアルゴリズムを組めば計算量が少なくて済むのか知恵を御借りしたいと考えて質問させていただきました。

0234デフォルトの名無しさん2008/05/20(火) 14:47:52
[1] C++
[2] 以下の処理を順に行うプログラムを作成しなさい。

>232 ありがとうございました!
まだ問題があったのでまたよろしくお願いします!
1. キーボードから整数を入力する。
2. 入力された整数が3の倍数のとき,
画面に「3の倍数です」と表示する。
[3] 環境
 [3.1]Windows
 [3.2]VC
 [3.3]C++
[4]5月27日 17時まで
[5]なし。
0235デフォルトの名無しさん2008/05/20(火) 14:55:48
>>234
if ( 入力 % 3 == 0 )
{
出力 3の倍数です
}

>>232 の内容と組み合わせて作りな
0236c言語素人 ◆K0sCe6ES.U 2008/05/20(火) 16:05:08


[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
各自で、カラー自然画像(出来れば画像中のオブジェクトが豊かな物)をみつけ、
kmeansによって画像中の要素を分類せよ。さらに、分類の数を変えながら、変化を観察せよ。(原文のまま)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限: 2008年5月23日 13:00まで
[5] その他の制限: 制限は特にありません。

ppmフォーマットの画像を読み込んで分類する(クラスター分析?)プログラムと言われたのですが、さっぱりわからないです・・・orz
どうかみなさんご協力おねがいしますm(_ _)m
02371612008/05/20(火) 16:05:14
>173
ちなみに、233で書いたやつがANNという手法です。

ちなみに
>4) , 3) でもっとも近いデータを探すのに「n 個のデータすべてについて距離を求め、一番距離が小さいものを求める」のは計算量が多くて大変!
>5) そこで、とりあえず適当なデータQ と P との距離dを求め、
>6) 辺の長さが 2d, 中心がP, 辺は座標軸に平行である k次元立方体 S を考え、
>7) 領域探索アルゴリズムにて S 内にあるデータをすべて列挙し、
>8) S 内のデータすべてと P との距離をそれぞれ求めて、一番距離小さいものを求める
にあるように、超球の中にある点すべてについて探索するというのでは、結局全点について距離を比較しないといけなくなるので、
結局n^2の話になってしまいます。
kd木のnlognをスポイルしたくないというのはここに絡んできます。
ANNのこの手法が理解できればいいのですが…
ちなみに期限が延びましてあと2日になりました。
最悪223に書いたサイトからソース引っ張ってきてcで書いた私のソースとc++で書かれているソースをドッキングして性能を確かめることを考えていますが…
0238デフォルトの名無しさん2008/05/20(火) 17:45:01
c++でお願いします。
このtxtに追加して提出するように言われました。
助けてくれる方お願いします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6619.txt
0239デフォルトの名無しさん2008/05/20(火) 17:54:20
>>238
何その頭の悪そうな日本語もまともに書けていない問題。
おまけに、C++でお願いされる内容がC言語理解度確認って何さ。
挙句の果てに、「文字列変数」ってstd::stringじゃないのかよ。
0240デフォルトの名無しさん2008/05/20(火) 17:55:25
Cには文字列変数はありません
0241デフォルトの名無しさん2008/05/20(火) 17:59:18
正の値である間ループし、負になったらループを抜けるって0になったらどうすんだよw
0242デフォルトの名無しさん2008/05/20(火) 18:23:06
正の0ならループして負の0ならループを抜けるんだろう。
0243デフォルトの名無しさん2008/05/20(火) 19:16:37
>>238
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6621.c
これで間違いなく優だぜb
0244デフォルトの名無しさん2008/05/20(火) 19:21:41
>>243
you 要修正
0245デフォルトの名無しさん2008/05/20(火) 19:36:23
>>243
問10の回答って再起呼び出し? LISP?
0246デフォルトの名無しさん2008/05/20(火) 19:37:08
[1] 授業単元:C言語2
[2] 問題文int型変数x,yをキーボードから値を入力し、その大小を判定する関数funcを作成せよ
[3] 環境
 [3.1] OS: xp
 [3.2] コンパイラ名とバージョン: VC 6.0だと思います
 [3.3] 言語: C
[4] 期限:今週中
[5] その他の制限: ポインタを使用する
お願いしますm(_ _)m
0247デフォルトの名無しさん2008/05/20(火) 19:40:36
その辺ってさすがに自分でやったほうがよくね?

包丁でたまねぎを半分に切るのはどうすれば?っていう、そんなかんじ。
0248デフォルトの名無しさん2008/05/20(火) 19:52:50
>>245
再帰
0249デフォルトの名無しさん2008/05/20(火) 19:53:55
>>246
int func(int* x, int* y){
if (*x > *y) {
return 1;
} else if (*x < *y) {
return -1;
}
return 0;
}

一応こんな感じで作ってみた。
まぁ>>247の言う通りこの位自分でやるべきだとは思ったけどもね
0250デフォルトの名無しさん2008/05/20(火) 19:55:11
ってかもうマクロの世界だよな

#define MAX_VAL(x,y) return(x>y?x:y)

初めて引数付きマクロ書いた
動くか分からん
0251デフォルトの名無しさん2008/05/20(火) 19:55:44
int func(int* x, int* y){
if (*x > *y) {
return 1;
} else if (*x < *y) {
return -1;
}
return 0;
}
0252デフォルトの名無しさん2008/05/20(火) 21:13:49
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):
入力された数値を\とカンマ区切りに編集する関数YenConvertを作成せよ。

int YenConvert(int kingaku,int mode,char *buffer,int result);

引数1:編集用の数値(4桁以上でかつint型の範囲内の入力のみと仮定)
引数2:編集モード
 1:引数1の先頭に\を付ける(1000→\1000)
 2:引数1の先頭に\を付け、カンマを挿入(1000→\1,000)
引数3:数値編集の格納領域アドレス
引数4:引数3のアドレス先の領域サイズ

戻り値は正常:0 モード誤り:-1 編集用領域不足:-2

[3] 環境
 [3.1] OS:XP(自宅) / Vista(実習室)
 [3.2] コンパイラ名とバージョン:VC6.0
 [3.3] 言語: C言語
[4] 期限:(0時を挟むので)明日 午前2時頃
[5] その他の制限:特にありません。

春季基本情報合格祝いという名目で、ポインタなんて名前しか知らないのに課題が出ました…。
無茶と失礼は承知の上で、寝るまでの期限でお願い致します。
■ このスレッドは過去ログ倉庫に格納されています