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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/09/21(木) 22:21:52
あなたが解けない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

【前スレ】
C/C++の宿題を片付けます 73代目
http://pc8.2ch.net/test/read.cgi/tech/1155355501/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0232デフォルトの名無しさん2006/09/28(木) 13:57:29
>>229
プログラムの勉強だけをやる→専門学校
主にプログラムの勉強をする(他にも勉強する)→情報系の大学
あとはあれだ、勉強する期間の違いとか、学士が貰えるとかそこらへんじゃない?

まぁ人として終わってるのは同意だけど、いまさらそれを言ったところで意味無いわけで。
0233デフォルトの名無しさん2006/09/28(木) 14:01:04
>>230
アメリカではパクリに対する認識が厳しくて(アカデミックな提出物でパクリと見なされると、犯罪になることもある)、パクリの傾向を統計的に集めている機関もある。
そういう統計に基づいてるから、けっこう当たるみたいよ。
0234デフォルトの名無しさん2006/09/28(木) 14:06:28
>>233
それ面白いな。
日本もやればいいのに・・・。あほ学生があほのまま卒業して、
はりぼての学歴振りかざして社会に出てこられてもね・・・。
0235デフォルトの名無しさん2006/09/28(木) 14:11:29
ようするに高卒プログラマの無能高学歴に対するひがみかwwwwwwwwwwww
0236デフォルトの名無しさん2006/09/28(木) 14:17:35
>>231
C言語が大事とか関係ないし。
授業の一つもまともにこなせない事に問題があるって話だ。

>>235
プログラマに学歴なんて関係ない
0237デフォルトの名無しさん2006/09/28(木) 14:23:53
まぁ大学出るだけで給料変わってくるし少しはひがみたくもなるわな
0238デフォルトの名無しさん2006/09/28(木) 14:26:52
高卒が紛れ込んでる、とかあり得ない予想はよそう。
0239デフォルトの名無しさん2006/09/28(木) 14:29:27
>>230
普通にdiff取ったら、関数まるごとレベル…
いや、全ソース、改行位置すら同じだったりするんじゃないか?w
0240デフォルトの名無しさん2006/09/28(木) 14:31:20
吐き気がする
0241デフォルトの名無しさん2006/09/28(木) 14:33:36
学歴コンプレックスのニートが相変わらず多いようだな。
0242デフォルトの名無しさん2006/09/28(木) 14:59:07
>>223
もう、回答があるようだけど、もうちょいすっきり書けそうな気もするんで
とりあえず�@の方だけ参考程度に別解。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2708.txt
02432422006/09/28(木) 15:03:34
>>242補記
上のプログラムじゃ、dataファイルと出力ファイルを DATA フォルダに纏めてるけど、
それだと問題あったらそこは自分で変えちくれ。
0244デフォルトの名無しさん2006/09/28(木) 15:49:41
筋が悪いにもほどがある。
02452422006/09/28(木) 19:22:43
fclose(sum_file); と fclose(ave_file); を忘れてるんで、
while ループの後にこの fclose() を入れといて。
0246デフォルトの名無しさん2006/09/28(木) 20:00:31
>>230
遅レスだが世の中にはこういう物もある

ttp://sel.ist.osaka-u.ac.jp/cdtools/ccfinder.html
>プログラミング言語の構文に応じた処理を行い、変数名が書き換えられたりしていても、正しくコードクローンを検出する

こういった物を利用すれば同じ処理をしている限り、変数名を変えたりインデント変えたりしたところで無意味
0247デフォルトの名無しさん2006/09/28(木) 20:07:04
つか、宿題レベルのコードなんて目でみりゃわかるだろ。
0248デフォルトの名無しさん2006/09/28(木) 22:12:03
100人くらいの規模となると目だけはつらい
0249デフォルトの名無しさん2006/09/28(木) 22:20:15
問題を使い回すと、先輩から貰った過去の解答をそのまま提出する奴とかもいるしな
0250 ◆sUfWYz9MSA 2006/09/29(金) 00:45:21
>>213 >>217 >>222
遅くなりました。
どうもありがとうございます!
参考にさせていただきます。
0251デフォルトの名無しさん2006/09/29(金) 02:31:49
>215

度々申し訳ございませんが、よく分かりません。。。
私が考えたプログラムは下の通りですが、エラーばっかりです。
具体的にプログラムを教えて頂ければ大変大変うれしいです。
どうぞ宜しくお願いいたします。

#include <stdio.h>

int main( char argc, char* argv[] ){
char URL[256];
scanf("%s",URL);
ShellExecute(NULL, _T("open"), _T(URL), NULL, NULL, SW_SHOWNORMAL);
return 0;
}

  203 :デフォルトの名無しさん :2006/09/28(木) 01:47:19
  複雑で申し訳ございませんが、Cで以下のことが出来るでしょうか?

  Cで作成したexeファイルをURLを引数に実行したら、
  そのURLがインターネットエクスプローラーで開く。

  イメージはtest.exeという名前のCのexeファイルを作って
  test.exe http://www.yahoo.co.jp
  を実行したら、インターネットエクスプローラーで
  http://www.yahoo.co.jpのページが開くということです。

  難しいですが、どうぞ宜しくお願いいたします。
0252デフォルトの名無しさん2006/09/29(金) 03:40:42
オレコウソツナンダヨナ
│ω・`))))))
0253デフォルトの名無しさん2006/09/29(金) 03:45:42
↑
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
251です。

申し訳ございませんが、スレ違い(私は宿題ではなく、
個人的に勉強をしております)でしたので、
【ANSI-C】 C言語なら俺に聞け!  Part 129)
の804番目のスレに改めて書かせて頂きます。
また、そちらのスレにも、最初ここに書き込んで、
ShellExecuteを使用すれば良い旨を聞いていることを
お伝えさせて頂こうと思います。
お手数をお掛けして誠に申し訳ございませんが、
204様、215様、【ANSI-C】 C言語なら俺に聞け!  Part 129)
の804に回答を頂ければ嬉しいです。

どうぞ宜しくお願いいたします。
0254デフォルトの名無しさん2006/09/29(金) 04:00:43
>>253
コンナジカンマデベンキョウカ、モマエ、エライナ
タスケテヤリタイガ、モレコウコウチュウタイノニートデ、プログラムノコトハワカランガ
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpshell/html/_win32_shellexecute.asp
ハサンコウニナラナイノカ?
│ω・`)))
イマワモレノカツドウジカンデ、アッチコッチハイカイシテクルヨ
ベンキョウ、ガンバレ
0255デフォルトの名無しさん2006/09/29(金) 04:35:32
>>253
ニートノモレガ、モマエノタメニネットハイカイシテキタヨ

/*---- NEET.C ----*/
/* usege: NEET http://www.neet.org /*
#include <windows.h>
int main( char argc, char* argv[] ){

ShellExecute(NULL, "open", argv[1], NULL, NULL, SW_SHOWNORMAL);
return 0;
}
/*---- END OF NEET.C ----*/
0256デフォルトの名無しさん2006/09/29(金) 06:55:14
>>255
惜しいな、それを書くなら"usage"だ。失せ毛ではなく兎毛と覚えておくといいぞ。
0257デフォルトの名無しさん2006/09/29(金) 12:00:04
usuge: 禿進行中の方へ
0258デフォルトの名無しさん2006/09/29(金) 12:35:51
usoge:もう禿げ散らかっちゃってかぶりものを常用してる人へ
0259デフォルトの名無しさん2006/09/29(金) 13:41:55
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2713.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio C++ 2005
 [3.3] 言語: C++
[4] 期限: 2006年10月01日00:00まで
[5] その他の制限: 特にありません。

文系なもので、知識が不足しており困っています。どうにか助けていただけないでしょうか。
よろしくお願い致します。
0260デフォルトの名無しさん2006/09/29(金) 13:57:19
>>259
完全にスレ違い。くだ質スレにでも池
0261デフォルトの名無しさん2006/09/29(金) 14:05:39
>>259
ファイルが足りないので不可能。
0262デフォルトの名無しさん2006/09/29(金) 14:28:15
>>259
宿題に見えないから、リンクに必要なコードだけな。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2714.txt
0263デフォルトの名無しさん2006/09/29(金) 16:53:48
文系とかいう以前に学生として終わってる。
0264(^-^) ◆MONSOON/qo 2006/09/29(金) 17:05:00
宿題


50メガ超の改行区切り一行1000文字以下のテキストファイルが2つのあります
一方に存在しない行をできる限り速く抽出するプログラムを作ってください
0265デフォルトの名無しさん2006/09/29(金) 17:06:15
テンプレ使え。
0266デフォルトの名無しさん2006/09/29(金) 17:13:27
>>264

<?php
$diff = array_diff(file("file1.txt"), file("file2.txt"));
foreach ($diff as $line)
echo $line;
?>
0267(^-^) ◆MONSOON/qo 2006/09/29(金) 17:23:49
速いやつないですか?
0268デフォルトの名無しさん2006/09/29(金) 17:34:49
テンプレ書け
0269デフォルトの名無しさん2006/09/29(金) 17:47:24
>>267お前ネットワークの質問スレでしったかぶりで適当な回答してたやつだろ。
サイテーだな。
0270デフォルトの名無しさん2006/09/29(金) 17:57:29
>>264
50M超の改行区切り一行1000文字のテキストファイルを二つ用意したらつくってやらんでもない
0271デフォルトの名無しさん2006/09/29(金) 18:09:56
>>264
#include <stdlib.h>
int main(void) { system("diff file1 file2"); return 0; }
0272デフォルトの名無しさん2006/09/29(金) 18:57:47
50M程度なら全部メモリに乗せちゃえば?
0273デフォルトの名無しさん2006/09/29(金) 19:05:34
アンカー使ってくれよ
0274デフォルトの名無しさん2006/09/29(金) 19:23:22
>>272
そんな贅沢な環境はツマラン。
フリーエリア48KB以下の環境で考えようぜ。
0275デフォルトの名無しさん2006/09/29(金) 19:27:10
>>274
ファイルシステム存在できないでFA
0276デフォルトの名無しさん2006/09/29(金) 19:37:28
ファイルシステムはCDFSと仮定してみようぜ
0277(^-^) ◆MONSOON/qo 2006/09/29(金) 19:45:19
いま50M超のファイルを生成してますから待っててくださいね
0278お願いします!2006/09/29(金) 22:36:56
前に質問させていただきましたが・・・。出したら却下されました。
【質問テンプレ】
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2694.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2695.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2696.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2697.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2698.txt
data01〜05までの5つのデータテキストがある。(上のリンク)このテキストを読み込み、
同じ位置のデータそれぞれのの和を取り結果をsum.txtに書き出し、さらに
それぞれ位置のデータを5で割ったものを平均値としてAverage.txtに出力するプログラムを
つくりなさい。
�AAverage.txtのデータからbe1.txtのデータを引きDivision.txtに出力しなさい。
be01はhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2699.txt
(ろだにあります。)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 9/30
[5] その他の制限: 二重配列を使用すること

for (i = 0;i < LOW; i++){
 for (j = 0;j < COLUMN;j++){
fscanf(fp, "%d",&a[i][j]);}
}
for (i = 0;i < LOW; i++){
for (j = 0;j < COLUMN;j++) {
fscanf(fp1,"%d",&b[i][j]); }
}
0279お願いします!2006/09/29(金) 22:39:06
上のようにして#defineで指定してまわせばいいのでしょうけど、
どうもファイルのオープン書き込みなどがうまく行きません。
どなたかお願いいたします。
0280デフォルトの名無しさん2006/09/29(金) 22:39:41
>>278
>[5] その他の制限: 二重配列を使用すること

こういう必須条件は最初から書いてくれ><
0281お願いします!2006/09/29(金) 22:43:29
ごめんなさい!
本当にすみません。
0282デフォルトの名無しさん2006/09/29(金) 22:47:04
>>278
二重配列って変な言葉だな。
これって規格でもこの用語を使ってんのかね。
面倒なんで自分では調べないけど。
0283デフォルトの名無しさん2006/09/29(金) 22:49:07
>>278
アレだろ、100要素くらいの配列へ生の値与えて演算してたやつだろ?
forでくくるなり別のファイルに隠蔽するなりすればいいんじゃね?
特に動かないわけでもないし、用件も満たしていたようだし。
0284デフォルトの名無しさん2006/09/29(金) 22:54:07
>>278
出したら却下って、提出したら教官に却下されたってことか?
それなら担当教官もこのスレみてるんじゃね。それと
> 二重配列を使用すること
って後付されるとすげーはらたつ。


0285デフォルトの名無しさん2006/09/29(金) 22:55:57
>>277
はやくしろよカス
0286お願いします!2006/09/29(金) 23:01:34
>>284
提出したら、、
「もっと簡単な方法あるでしょ」
ごちゃごちゃごちゃと言った後、
「二重配列使ってやってこい」
とつき返されました。。。。。。。
0287デフォルトの名無しさん2006/09/29(金) 23:06:02
>>286
なるほど。
別に、おまいが条件を書き忘れてたわけじゃなく、駄目出しの改善策として
二次元配列を使うよう指示されたわけね。
0288デフォルトの名無しさん2006/09/29(金) 23:19:03
>>278
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2721.txt

これは三重配列(w)を使っているので、適宜二重配列に直したって
ください。どうして二重配列で作ってくれないかって?すぐ直せるから。
0289デフォルトの名無しさん2006/09/29(金) 23:47:24
>>278
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2722.txt

やっぱ無責任かもしれんので、二重配列(ww)を使ったプログラムを
うpしとくから、動作を確認の上提出してみてくれ。

必ず動作の確認を行ってくれ。検証してないので。多分大丈夫だと
思うけど。
0290デフォルトの名無しさん2006/09/29(金) 23:48:20
[1] 授業単元: データ構造とアルゴリズム
[2] 問題文: 1からNまでの整数の和を求める以下のプログラムを(i)for文(ii)while文(iii)do while文を用いて書き改める。
指定されたとおりに書き直していることがわかる部分さえあればいちいち全文書き直さなくてよい。
#include<stdio.h>
#include<stdlib.h>
#define N (100)
int main(void){
int i;
int sum;
sum = 0;
i = 1;
loop1:if(!(i <= N))goto loop1end;
sum = sum + i;
i = i + 1;
goto loop1;
loop1end;
fprintf(stdout,”sum=%d\n”,sum);
return(EXIT_SUCCESS)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:C言語
[4] 期限: 2006年10月2日まで
[5] その他の制限: 授業に向けてのC言語の復習らしいのですが,
前段階の科目より難易度が大幅に上がっていてさっぱりです。よろしくお願いします
0291デフォルトの名無しさん2006/09/29(金) 23:48:58
講義内容にあわせたコーディングをするために
課題が出された時の講義風景をちゃんと聞き取れる音声付きで
まるごと動画を併せてうpすることが望ましい。

講義内容の理解度を把握するための課題なんだから
そこからかけ離れてちゃダメだろう。
0292デフォルトの名無しさん2006/09/29(金) 23:55:31
>>290
> 前段階の科目より難易度が大幅に上がっていてさっぱりです。よろしくお願いします
釣りだよな?
これが出来ないって、漢字で自分の名前書けません、九九が全部言えませんってレベルだぞ?
前段階の科目ではfor文もwhile文もdo while文も扱わなかったってか?
02932902006/09/30(土) 00:01:37
[1] 授業単元: データ構造とアルゴリズム
[2] 問題文:以下のプログラム中のfor文で示される部分を関数を用いて書き改めよ。
ただし、関数名はsetvalueとし、引数として配列と配列サイズの2つをとるものとする。
#include<stdlib.h>
#define N(100)
int main(void){
int A[N];
int i;
for(i=0;i<N;i++){
a[i]=i;
}
return (EXIT_SUCCESS);

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:C言語
[4] 期限: 2006年10月2日まで
[5] その他の制限: 290の2問目です。

0294デフォルトの名無しさん2006/09/30(土) 00:01:55
int main(void){ 
  int i; 
  int sum = 0;
  for(i=1;i<=N;i++) sum += i; 
  fprintf(stdout,"sum=%d\n",sum); 
  return(EXIT_SUCCESS); 
}

int main(void){ 
  int i; 
  int sum = 0; 
  i = 1;
  while(i<=N) sum += i++; 
  fprintf(stdout,"sum=%d\n",sum); 
  return(EXIT_SUCCESS); 
}

int main(void){ 
  int i; 
  int sum = 0; 
  i = 1;
  do sum += i++; 
  while(i<=N);
  fprintf(stdout,"sum=%d\n",sum); 
  return(EXIT_SUCCESS); 
}
0295デフォルトの名無しさん2006/09/30(土) 00:10:34
お前らニートはごちゃごちゃ言わずに宿題解いてりゃいいんだよ
02962902006/09/30(土) 00:11:55
クラス全体の理解度はかるためのテスト問題で、テスト終了後に
そのまま宿題としてだされたんです。
この授業は1個目、2個目ときて3個目の段階の授業なのですが、
1個目を再履修したため2個目を今受けている最中なんです。そしてそれと平行して3個目を
受けているので状況なんです。クラスには受かった人と、落とした人の混同クラスで
再履修組みとそうでない者と、どれだけわかるのかを測るために作った問題らしく、
上の人たちにあわせて作られているのでさっぱりわからないんです。
290の問題だと
loop1:if(!(i <= N))goto loop1end;
sum = sum + i;
i = i + 1;
goto loop1;
loop1end;
fprintf(stdout,”sum=%d\n”,sum);
return(EXIT_SUCCESS)
の部分が直していいのか全くわからないんです。
決してつりではないです。よろしくおねがいします
0297デフォルトの名無しさん2006/09/30(土) 00:12:21
>for (i = 0;i < LOW; i++){
> for (j = 0;j < COLUMN;j++){
>fscanf(fp, "%d",&a[i][j]);}
>}
>for (i = 0;i < LOW; i++){
>for (j = 0;j < COLUMN;j++) {
>fscanf(fp1,"%d",&b[i][j]); }
>}

余計なお世話ですが、LOW(低い) は ROW(行数)の方が普通かと。
ROWとCOLUMNは良くペアで使われます。
0298お願いします!2006/09/30(土) 00:14:39
>>288>>289
ありがとうございます!
288の3重配列は無事に動きました。
これから289を試してみます。
どうもありがとうございました!!
0299デフォルトの名無しさん2006/09/30(土) 00:23:40
>>293
#include<stdio.h>
#include<stdlib.h>
#define N (100)

void setvalue(int*, int);

int main(void)
{
int A[N];
int i;

setvalue(A, N);

return (EXIT_SUCCESS);
}

void setvalue(int *a, int n)
{
if(n)
{
n--;
a[n] = n ;
setvalue(a, n);
}
return;
}
何というのか、理解力を見たいというだけの課題なら習ってなくて分からない部分は
素直にそう申告した方がいい話しな気がするが。
0300デフォルトの名無しさん2006/09/30(土) 00:24:23
>>210のやつはコピペ+置換でがんばってかいたのになー
03012902006/09/30(土) 01:02:45
>>294ありがとうございます。292の人が言ってたことがわかりました。
こんなに初歩的なことだったんですね・・・。
それでも解いてくれて本当にありがとうございました。
03022902006/09/30(土) 01:06:57
>>299理解力を見るのはテストで終わりで、この宿題はテスト問題の正解答を
しらべるなりなんなりしてかいていかないといけなくて・・・。
こっちを間違えると減点されてしまうんです。

ところで
void setvalue(int*, int);
の
int*
の部分は何を表しているんですか?せっかく教えていただいたのに
知識不足ですみません・・・
0303デフォルトの名無しさん2006/09/30(土) 01:10:20
>>302
int型のポインタ。
0304デフォルトの名無しさん2006/09/30(土) 01:16:31
ポインタ習ってないから駄目ということなら、こっちで。

#include<stdio.h>
#include<stdlib.h>
#define N (100)

void setvalue(int[], int);

int main(void)
{
int A[N];

setvalue(A, N);

return (EXIT_SUCCESS);
}

void setvalue(int a[], int n)
{
if(n)
{
n--;
a[n] = n ;
setvalue(a, n);
}
return;
}
0305 ◆OfTCUJgvL6 2006/10/01(日) 00:27:31
C++もCもド素人なもので、下記の宿題が全くわかりません。
どなたか、お手数をおかけしますが
どうかよろしくお願いします。

[1] 授業単元: ソフトウェア

[2] 問題文(含コード&リンク): ランジサーチング(range searching)はマウスによる
ディスプレイ操作のときに使われる基本ルーチンの一つである。
平面上で多数の点を与えられ、指定された長方形領域に含まれる点のみを出力する問題である。
二分探索法やヒープ法などによるソーティング法を利用して、
Cプログラムを作成し、実行結果を出力する。

[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio.NET2003
 [3.3] 言語:CでもC++でも可

[4] 期限:10月3日
[5] その他の制限:ソーティングと探索については高速アルゴリズムを
用いたプログラムにする。
ソーティング−クイックソート
探索−二分探索法
0306デフォルトの名無しさん2006/10/01(日) 00:52:34
>>305
何がしたいかわからん。
出された問題って、本当にこれが全文?
0307デフォルトの名無しさん2006/10/01(日) 01:07:49
そろそろ、報酬は?ってのを復活させた方がいいんじゃない?
0308(^-^) ◆MONSOON/qo 2006/10/01(日) 01:08:57
>>306
点 z(1)=(x(1), y(1)), ・・・, z(n)=(x(n), y(n))が与えられているとする

長方形領域 p(i)=(a(i), b(i)) i=1,2,3,4が入力されたとき
その内部にある点z(k)をすべて出力せよ
0309デフォルトの名無しさん2006/10/01(日) 01:11:01
>>308
換言しただけじゃないか
やっぱりまだ行間読むことは出来ないんだねMONSOON
0310デフォルトの名無しさん2006/10/01(日) 01:19:33
>>304ポインタ習ってないです、ありがとうございます。
これならなんとか大体理解できます。

そしてまた質問なのですが
#include<stdlib.h>
はどこでつかわれているんですか?
何度も何度もすみません。
0311デフォルトの名無しさん2006/10/01(日) 01:23:43
stdlib.hでEXIT_SUCCESSが定義されてる 
0312(^-^) ◆MONSOON/qo 2006/10/01(日) 01:30:47
>>305を途中までやったあとは頼んだ

#include <stdio.h>
#define N 1000
#define range 100000


int rnd(int m) {return (1664525*m+1013904223)%range;}//乱数生成ルーチン


main(){
int *x=new int[N];
int *y=new int[N];
int i,m=8;
int p[4],q[4];

for(i=0;i<N;i++){x[i]=m=rnd(m);y[i]=m=rnd(m);}//N点を与える
for(i=0;i<4;i++){p[i]=m=rnd(m);q[i]=m=rnd(m);}//長方形領域の入力

//続きをよろしく

}
0313(^-^) ◆MONSOON/qo 2006/10/01(日) 01:33:43
>>305のヒントはここです
最適化問題は興味のあるところだが...誰もやらないと速いのかどうかがわからない
http://www.msc.cs.gunma-u.ac.jp/~nakano/Algo/tech6.html
0314 ◆OfTCUJgvL6 2006/10/01(日) 01:34:00
>>306
それで全文です;
ソーティングして範囲内の点を切り出すだけ
らしいですが・・・;
0315 ◆OfTCUJgvL6 2006/10/01(日) 01:40:11
ちなみに↓が単純アルゴリズムです

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

void sort(int f1[], int f2[], int fa[], int min, int max);
void search(int f[], int *min, int*max, int fmin, int fmax);

int main(void)
{
int i, range, a[50000], x[50000], y[50000];
int min, max;
int left, right;
int down, up;
FILE *fp;
clock_t start, end; //時間を保持する変数を定義

fp=fopen("output.txt","w"); //結果出力用のファイルをオープン
printf("座標の数を入力してください:");
scanf("%d", &range);
printf("xの範囲についての最小値を入力してください:");
scanf("%d", &left);
printf("yの範囲についての最大値を入力してください:");
scanf("%d", &right);
printf("yの範囲についての最小値を入力してください:");
scanf("%d", &down);
printf("yの範囲についての最大値を入力してください:");
scanf("%d", &up);
start=clock(); //時間の計測を開始
0316デフォルトの名無しさん2006/10/01(日) 01:41:15
fprintf(fp, "%d個の座標をランダムに設定\n\n", range);
srand((unsigned)time(NULL)); //乱数を初期化
for(i=0;i<range;i++){
x[i]=rand() % range;
a[i]=i;
}
for(i=0;i<range;i++){
y[i]=rand() % range;
}
//↓ランダムに設定したファイルの出力
for(i=0;i<range;i++){
fprintf(fp, "%5d(x,y)=%5d %5d\n", a[i], x[i], y[i]);
}

fprintf(fp, "\nについてソート\n\n");
min=0;
max=range-1;
sort(x,y,a,min,max);
for(i=0;i<range;i++){
fprintf(fp, "%5d(x,y)=%5d %5d\n", a[i], x[i], y[i]);
0317 ◆OfTCUJgvL6 2006/10/01(日) 01:41:46
}
fprintf(fp, "\nXについて検索\n\n");
fprintf(fp, "(left, right)= (%d,%d)\n", left, right);
search(x, &min, &max, left, right);
for(i=min;i<=max;i++){
fprintf(fp, "%5d(x,y)=%5d %5d\n", a[i], x[i], y[i]);
}
fprintf(fp, "\nYについてのソート\n\n");
sort(y,x,a,min,max);
for(i=min; i<=max; i++){
fprintf(fp, "%5d(x,y)=%5d %5d\n", a[i], x[i], y[i]);
}
fprintf(fp, "\nYについて検索\n\n");
fprintf(fp, "(down, up)=(%d,%d)\n", down, up);
search(y, &min, &max, down, up);
for(i=min;i<=max;i++){
fprintf(fp, "%5d(x,y)=%5d %5d\n", a[i], x[i], y[i]);
}
end=clock(); //時間の計測の終了
//↓実行時間[sec]をファイルに出力
fprintf(fp, "\ntime=%f\n", (double)(end - start) / CLOCKS_PER_SEC);
fclose(fp); //結果出力用のファイルをクローズ
return 0;
}
0318デフォルトの名無しさん2006/10/01(日) 01:42:16
void sort(int f1[], int f2[], int fa[], int fmin, int fmax)
{
int i, j, temp;
for(i=fmin;i<=fmax;i++){
for(j=i+1;j<=fmax;j++){
if(f1[i]>f1[j]){
temp=f1[i];
f1[i]=f1[j];
f1[j]=temp;
temp=f2[i];
f2[i]=f2[j];
f2[j]=temp;
temp=fa[i];
fa[i]=fa[j];
fa[j]=temp;
}
}
}
}
void search(int f[], int *min, int *max, int fmin, int fmax)
{
int i;
for(i=*min;f[i]<fmin;i++){
*min=i+1;
}
for(i=*max;f[i]>fmax;i--){
*max=i-1;
}
}
0319デフォルトの名無しさん2006/10/01(日) 01:42:36
おk、やっぱりバックグラウンドが大量にあるんだな…

俺は降りる
0320 ◆OfTCUJgvL6 2006/10/01(日) 01:44:39
>>315-318
高速アルゴリズムにしたら、この単純アルゴリズムの処理時間が
どうなるか

が問題みたいです;

いろいろとすいません;
0321デフォルトの名無しさん2006/10/01(日) 01:45:28
>>320
それを最初に書いてくれ><
0322 ◆OfTCUJgvL6 2006/10/01(日) 01:49:50
>>321
ごめんなさい;
0323デフォルトの名無しさん2006/10/01(日) 01:55:15
>>322
もう宿題出した教官に「日本語でおk」とでも言っとけ
条件が少なすぎる
0324(^-^) ◆MONSOON/qo 2006/10/01(日) 01:58:40
>>322
すべての点に対して長方形領域内にあるかどうかをチェックする方がはやいかもしれないよ
ソートするのは再利用をする目的があるためだろうし
0325デフォルトの名無しさん2006/10/01(日) 02:12:47
条件は不足なく出てると思うけど。
0326デフォルトの名無しさん2006/10/01(日) 02:23:34
>>323
儂は口頭ではきちんと説明したぞ。
0327デフォルトの名無しさん2006/10/01(日) 02:41:32
>>325
いや不足ありまくり
「長方形」とか「座標」とかソースに落とすにはちと曖昧

高速化するのならバイナリサーチで全数検索するんじゃなくて、
まずはスクリーンを16×16大のタイルが敷き詰められたものとみなして、
「どのタイルに属するのか」という値を先ず作っちゃう。
長方形というか矩形領域が与えられたら、その領域を含むか未満で最大となるのタイル群を選択し、
選択されたタイル群の点を列挙すれば結構速い
と経験で語ってみる俺

まぁバケツソート使ってるわけだが…

0328(^-^) ◆MONSOON/qo 2006/10/01(日) 02:45:34
>>327
ソースもてでるよ
0329デフォルトの名無しさん2006/10/01(日) 02:51:23
>>328ホントにめでたい奴だな
有名なヒキニートとかいう奴か?それともただのガキ?
ソースが出てるのがそんなに嬉しいか?
0330デフォルトの名無しさん2006/10/01(日) 02:57:07
>>327
[5] その他の制限:ソーティングと探索につゐては高速アルゴリズムを
>ソーティング−クイックソート
>探索−二分探索法

これを見る限り、点入力と探索の処理は別々で、
まぁ大体、x, yが入った配列それぞれをソートして二分検索で挟んで(ry みたいなことやれって事だろ。
見方によっちゃアルゴリズムも指定してるわけだし、そういう小細工を仕込む余地はないのでは。
0331デフォルトの名無しさん2006/10/01(日) 03:01:18
>>330
んだね

いまさら何書いても遅いけど、>>324とかにいいt(ry
うわぁ、俺もMONSOONと同類だぁwww
エヘヘ       |門|λ,,....

<rem>
ああ、座標の点を表す型をTにしてtemplate使えばいいのか…
さらにいえばCのqsort()使えば(ryry
</rem>
■ このスレッドは過去ログ倉庫に格納されています