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

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

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

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

0002では質問どーぞ2011/07/20(水) 00:34:27.37
【質問テンプレ】
[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://s2.etowns.slyip.net/~c_cpp_homework/cgi-bin/joyful/joyful.cgi
http://codepad.org/ ←遅い時間は重い事があります
http://ideone.com/
http://pastebin.com/ ←たまにテンポるので上の2つが混んでいる時以外はなるべく使わないで下さい
【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++の宿題片付けます 150代目
http://hibari.2ch.net/test/read.cgi/tech/1308749241/
0003デフォルトの名無しさん2011/07/20(水) 01:10:43.76
スレたて乙。ところで、未解決問題あればよろしう。
0004デフォルトの名無しさん2011/07/20(水) 01:27:19.52
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):入力された特定の名前だけすべて削除する関数 void del_order(ORDER *node, char *name) を線形リストを用いて作成しなさい

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2008
 [3.3] 言語:C++
[4] 期限: 今週末15:00~

おねがいします
0005 ◆QZaw55cn4c 2011/07/20(水) 02:49:28.66
>>4
http://hibari.2ch.net/test/read.cgi/tech/1308749241/992
0006デフォルトの名無しさん2011/07/20(水) 07:53:32.65
>>5
ローカルルールを守れ。クズ。

>>1
> 【回答者へ】
> ・◆QZaw55cn4cは書き込み禁止。トリップを隠しても書き込み禁止です。
0007デフォルトの名無しさん2011/07/20(水) 08:39:33.76
前スレ >>971 http://hibari.2ch.net/test/read.cgi/tech/1308749241/971
> void del_order_by_name(ORDER **node, char *name)
> ではなく、
> void del_order_by_name(ORDER *node, char *name)
> としたいんですが、アドバイスをおねがいします
http://codepad.org/vcf5pd5h オレは一応とめたからな。

前スレに貼られたhttp://codepad.org/imsXD8tDはうんこが書いたバグ入りコードだから、
落第したくないなら使わない方が良い。
0008デフォルトの名無しさん2011/07/20(水) 09:26:52.31
前スレ >>999
> floatだけじゃなくて、doubleも使ったことが無いんだろ。ww 

技術計算を整数値だけで行う事が可能なら凄い技術だと思うよw
0009デフォルトの名無しさん2011/07/20(水) 09:38:21.65
前スレのどうでもいい話ひきずりすぎだろお前ら
0010デフォルトの名無しさん2011/07/20(水) 09:49:34.33
>>8
円の面積求めて

    技術計算10年やってる 霧

って言ってるんだね。そりゃすげー。ww
0011デフォルトの名無しさん2011/07/20(水) 10:48:46.48
三項だけで行う電卓を作ったのですが、文が長すぎたということで却下されました。
出来れば以下のソースを基に関数を作って簡略化したソースを作っていただけませんか?
宜しくお願いします。
http://codepad.org/qblj0aNR
0012デフォルトの名無しさん2011/07/20(水) 11:18:20.33
>>11
http://ideone.com/Ki9Ag
極力いじらずに、酷いコピペで処理してるswitchのとこだけ関数化しておいた
0013デフォルトの名無しさん2011/07/20(水) 12:07:09.72
>>10
涙拭けよ。顔真っ赤だぞw
0014デフォルトの名無しさん2011/07/20(水) 12:17:51.60
> 技術計算コードを10年以上書いてきたけど float を使った事は一度も無いな
floatを一度も使ったことが無い技術計算PG www
これを恥ずかしげもなく告白できる事が低レベルの証明。あー、哀れ。
0015デフォルトの名無しさん2011/07/20(水) 12:21:24.17
すみません。本当に助かりました。
http://ideone.com/Ki9Ag
を基に2以上10以下の項の四則演算の出来るプログラムを教えていただけますか?
ずうずうしくて本当に申し訳ありません。
0016デフォルトの名無しさん2011/07/20(水) 15:05:14.34
>>14
技術計算で float を使わない理由は算術関数のインターフェイスが double であるって事が大きいんだ
一部の処理系では tanf() の様な float系関数も用意されているけど、可搬性を考えると使うべきではない

もし、float を使うなら以下の二つの理由が考えられるだろう
・ファーム等で算術関数が float 系しか用意されていない環境での開発
 そんな環境には double は存在しないかも知れないけどね
・メモリ消費を意識しなければならないくらい膨大なデータを扱う処理または貧弱な環境

私はEWSやPC上での開発経験しかないし、膨大なデータを扱うような業務(地球シミュレータとか?)の
開発に携わった事がないから float を使った事はない
君がもし float を使った開発経験を持つなら、どういう業務か教えて欲しい
0017162011/07/20(水) 15:10:20.16
書き忘れたけど、算術関数を用いる時に float を使わない理由は

float a, b;
a = (float)tan( (double)b );

と書くと『有効精度が失われます』みたいな warning が出るから
warning が出るだけなら問題は無いんだけど、大量に出る問題が無い warning の中に
問題がある warning (整数の型によるオーバーフロー等)が埋もれるのが怖いんだよね
0018デフォルトの名無しさん2011/07/20(水) 15:49:53.24
[2] 問題文(含コード&リンク):
http://codepad.org/JJE3ZWnw

[3] 環境 OS:Windows gcc
[4] 期限:7月21日
[5] その他の制限: 特になし
0019デフォルトの名無しさん2011/07/20(水) 15:52:14.36
>>18です
リスト構造体のやり方がまるで分からないので説明してくださると嬉しいです
0020デフォルトの名無しさん2011/07/20(水) 16:22:50.16
[2] 問題文(含コード&リンク): 2項以上10項以下の計算が可能な電卓を作成せよ。
演算子は(+,-,*,/)だけとする。
例:式を入力してください
式:1+1*8/4*8+6/3*2+1 enterkey
答え:22
出来ればhttp://ideone.com/Ki9Ag を基に作成して頂けますか?
上記のソースは3項だけしか出来ません。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2011年07月21日09:00まで
[5] その他の制限: 処理は基本的にif、else if,else文、switch文、for文を使って頂けますか?
あと、文字入力はscanfでお願いします。宜しくお願いします。
0021デフォルトの名無しさん2011/07/20(水) 16:26:17.01
参考用
>>20
>>11,12,15

0022デフォルトの名無しさん2011/07/20(水) 16:45:07.32
>>20
>>11,12,15
上記は同じ投稿者です。皆様のお力添えを宜しくお願いします。
0023デフォルトの名無しさん2011/07/20(水) 17:05:45.61
>>19
リスト構造体のnextに次のデータのポインタ突っ込め
ってお前自分で書いてるんじゃん

いきなり5-1からはじめてるけどほかになんか前提があるんじゃないのか?
0024デフォルトの名無しさん2011/07/20(水) 17:17:52.51
>>23
前提は他にありません。このまま課題がでました
0025デフォルトの名無しさん2011/07/20(水) 17:40:37.25
テンプレ埋めないの流行りなん?
0026 ◆QZaw55cn4c 2011/07/20(水) 18:34:36.57
>>20
http://hibari.2ch.net/test/read.cgi/tech/1308749241/892
http://codepad.org/Qeismfmq
0027デフォルトの名無しさん2011/07/20(水) 19:15:05.43
>>20
http://codepad.org/1Qg8DRVA
0028デフォルトの名無しさん2011/07/20(水) 19:45:13.39
(1)c言語(2)問題:日数計算プログラムをベースに基ずいて「ここに処理が入る」というところに入力をお願いします
実行結果:数え始める西暦を入力してください   1967,8,7
数え終える西暦を入力してください        2009,6,12
1967,8,7から2009,6,12までの日数は15285日です
ベース
#include <stdio.h>
int uruu(int y);
int monthday(int y, int m);
int main(){
int year_a, month_a, day_a;
int year_b, month_b, day_b;
int days;
int i;
days = 0;
printf("日数計算プログラム\n");
printf("数え始める西暦年月日を入力してください\n");
scanf("%d,%d,%d",&year_a, &month_a, &day_a);
printf("終わりの西暦年月日を入力してください\n");
scanf("%d,%d,%d",&year_b, &month_b, &day_b);
ここに処理が入る
printf("%d年%d月%d日から%d年%d月%d日までの日数は%d日です。\n",year_a, month_a, day_a, year_b, month_b, day_b, days);
return 0;}
int uruu(int y){
int ret;
ここに処理が入る
return ret;
}
int monthday(int y, int m){
int d;
ここに処理が入る
return d;
}
0029デフォルトの名無しさん2011/07/20(水) 20:51:49.79
[2] 問題文(含コード&リンク):
http://codepad.org/ENQhWHkB

[3] 環境 OS:Windows
       gcc
      C言語
[4] 期限:7月21日
[5] その他の制限: 特になし

訂正させていただきました。それぞれの問題で/***プログラムをここに書くとする***/
の部分に複数行いれて問題に合ったプログラムにします。
リンク先のプログラムは25〜39行目で図の通りに動くと仮定してます。
0030デフォルトの名無しさん2011/07/20(水) 20:51:52.42
前スレのfloat厨に吹いた
0031デフォルトの名無しさん2011/07/20(水) 21:07:13.64
>>7がバグ入りなら、誰かバグ無しソート作ってやれよ
批判するだけしてプログラム作らないとかウ●コと同じだぞ
0032デフォルトの名無しさん2011/07/20(水) 21:07:59.24
QZのフォローするぐらいならスカトロプレイする方がましだよ
0033デフォルトの名無しさん2011/07/20(水) 21:26:05.49
>>26
ローカルルールを守れ。クズ。
>>1
> 【回答者へ】
> ・◆QZaw55cn4cは書き込み禁止。トリップを隠しても書き込み禁止です。

>>31
>>7に質問者の要望通りのインターフェースで、正しく動くの張っただろ。
http://codepad.org/vcf5pd5h
0034デフォルトの名無しさん2011/07/20(水) 21:56:33.01
>>16
C99ではfloat, double, long doubleな関数が三つ組で用意されてるけど、そうかC99は可搬性ないのか。
使うべきじゃないのか。

それじゃ、使うべきは、C90とかですか(float関数が無い事は知らないけど)? 20年以上前の規格ですな。
いやー、さすが数値計算歴10年のベテラン。www

>>17
> a = (float)tan( (double)b );
うわー、ヘボPGが得意なキャストfloodingにそっくりなのは気のせいでしょうか?
まさかね、数値計算歴10年のベテランがキャストfloodingなんか… まさかね。
0035デフォルトの名無しさん2011/07/20(水) 22:11:41.45
技術計算技術計算言う割りに精度の低いfloat使うとは
0036""2011/07/20(水) 22:28:07.66
[1] 授業単元:構造体の配列利用
[2] 問題文(含コード&リンク):
#include <stdio.h>
/* 配列arrayの要素数 */
#define ELENUM(array) (sizeof(array) / sizeof((array)[0]))
#define SIZE_DATA (10) /* データ数 */

struct Address_data{
char name[81];
char phone[20];
int age;
};
0037""2011/07/20(水) 22:28:28.04
int main(void)
{
struct Address_data data[SIZE_DATA], *p = data;
printf("Input end = Ctrl + D\n");
/* 配列初期化(入力プロンプトより前に置くべき?) */
for (p = data; p - data < ELENUM(data); p++) {
p->age = -1;
}
/* 入力処理 */
for (p = data; p - data < ELENUM(data); p++) {
printf("[%d]name phone age = ", p - data);
if (scanf("%s %s %d", p->name, p->phone, &p->age) != 3) {
break;
}
}
putchar('\n');
/* 表示 */
for (p = data; p->age >= 0; p++) {
printf("%s\t(%d)\t[%s]\n", p->name, p->age, p->phone);
}
return 0;
}
表示を行う際に、年齢順に表示するようにしたい。配列の並び替えを行なって表示するようにプログラムを拡張しなさい
[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン: Visual Studio 2008
[3.3] 言語:C
[4] 期限:金曜日まで
0038デフォルトの名無しさん2011/07/20(水) 22:30:55.81
>>35
それ昨晩から気付いてたけど敢えて突っ込まないでおいた
0039デフォルトの名無しさん2011/07/20(水) 22:30:58.03
>>35
ほっといてやれよ、どうみても引っ込みつかなくなってるだけだろ。
0040デフォルトの名無しさん2011/07/20(水) 22:33:51.89
>>35, >>38-39
低レベル過ぎる。10年修行してきなさい。
0041デフォルトの名無しさん2011/07/20(水) 22:58:12.75
>>40
はい、ご指導ありがとうございました。
0042デフォルトの名無しさん2011/07/20(水) 22:59:56.99
こういう系は14歳の負けず嫌いの女の子プログラマが一人で騒いでると思うことにしてる。
0043デフォルトの名無しさん2011/07/20(水) 23:02:31.72
>>34
> C99ではfloat, double, long doubleな関数が三つ組で用意されてるけど....

規格について始めると面倒な人が出てきそうだから触れないけど、float系が無い処理系は有るよ
規格うんぬん以前に必ず存在する double系を使うのが普通の考えだよ(先に書いた様に特殊な環境なら別)

キャストしなかったらどうやって書くの?
そもそも double 系の関数を float で処理するっていう『ヘボ』な書き方を示しただけなんだけど
0044 ◆QZaw55cn4c 2011/07/20(水) 23:02:58.01
>>18
5-1〜5-4
http://codepad.org/eQKEuAlc
0045デフォルトの名無しさん2011/07/20(水) 23:14:54.96
>>44
ごめんなさい、まるで分からないです。
自分では
http://codepad.org/lNU2hw2m
みたいに考えていたので,下手な書き方だとは思いますが、解説していただいてると嬉しいです
0046デフォルトの名無しさん2011/07/20(水) 23:23:59.11
>>28
http://codepad.org/7UVONvby

次は>>1のテンプレ使ってね。
期日が書いてないと誰もしないかも
0047デフォルトの名無しさん2011/07/20(水) 23:24:01.19
main関数に引数の型書かない記法は先生から教わったの?
どこの学校?
0048デフォルトの名無しさん2011/07/20(水) 23:24:31.32
x引数の型
o戻り値の型
0049デフォルトの名無しさん2011/07/20(水) 23:32:15.57
>>47
先生と学校はいえませんが、大学1年生です。最初はint main~return 0 をつかったり
戻り値をつかったりしてたのですが、リスト構造体の項目に入ってからは一切使わなくなりました。
ですが、課題の性質上、戻り値無しのやり方でやらないと点数はもらえなかったりします。
加えてその先生が課題と資料を出すだけ出して授業を終わる人です
0050デフォルトの名無しさん2011/07/20(水) 23:42:23.49
>>43
> 規格について始めると面倒な人が出てきそうだから触れないけど、float系が無い処理系は有るよ
具体的にどれだよ。w

> 規格うんぬん以前に必ず存在する double系を使うのが普通の考えだよ(先に書いた様に特殊な環境なら別)
それはお前が経験した狭い世界の「普通の考え」。

> キャストしなかったらどうやって書くの?
普通はfloat使うから
a = tanf(b);
どうしてもdoubleな関数使う場合でも
a = tan(b);

キャストは不要。
0051デフォルトの名無しさん2011/07/20(水) 23:42:28.88
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):片方向リストの最後に要素を追加するプログラムをさくせいしなさい。
ただし連結リストの最後の要素をさすポインタを持っている時と持ってないときについて作成すること。
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限:http://codepad.org/EhgsNjq1
一応つくってみたですが、問題自体の意味がイマイチわかりません。
これはどちらのプログラムになるのでしょうか。
また、このプログラムの計算量と実行効率について比較するにはどのようにすればいいか教えていただければありがたいです。
よろしくお願いします。
0052デフォルトの名無しさん2011/07/21(木) 00:00:05.84
>>51
前者の 最後の要素をさすポインタを持っている時 に該当

後者は head のみを保持した前提で末尾追加を記述するのを期待してるっぽい

リスト追加の際、毎回末尾を探す
 p=head p->next が NULL になるまで p を送っていく
ってことをやって見つけた末尾 p から追加分を連結すると
0053デフォルトの名無しさん2011/07/21(木) 00:01:04.75
>>50
> 具体的にどれだよ
手元に有った bcc++ Ver.5.5 (私の回答専用コンパイラ)には無いみたいだよ
0054デフォルトの名無しさん2011/07/21(木) 00:03:50.73
>>50
それより君が float を使わざる得なかったプロジェクトについて教えてはくれないか?

資源が乏しかった大昔なら『敢えて double を使う理由』をレビューで説明する必要が有ったと思うんだけど、
メモリもディスクも大容量の現在では『敢えて float を使い理由』を説明する必要が有ると思うんだ
0055 ◆QZaw55cn4c 2011/07/21(木) 00:08:47.06
>>51 = http://hibari.2ch.net/test/read.cgi/tech/1308749241/476 すでに秀逸な回答が上がっています。
http://hibari.2ch.net/test/read.cgi/tech/1308749241/478 ttp://codepad.org/qL7fTlqB
http://hibari.2ch.net/test/read.cgi/tech/1308749241/499 http://codepad.org/JrlFCyW2

>>50
>キャストは不要。
>>17
>『有効精度が失われます』みたいな warning が出るから
>warning が出るだけなら問題は無いんだけど、大量に出る問題が無い warning の中に
>問題がある warning (整数の型によるオーバーフロー等)が埋もれるのが怖いんだよね

float でインプリメントする環境があることは知っていますが(cuda, ati stream はさわってみたいなあ)、
http://hibari.2ch.net/test/read.cgi/tech/1308749241/906 で float を使う理由がない、というか
http://hibari.2ch.net/test/read.cgi/tech/1308749241/957
>floatを使うのは癖だ。
馬鹿としかいいようがない。
0056デフォルトの名無しさん2011/07/21(木) 00:13:58.24
>>18

割と愚直なコードにしてみた。

ttp://codepad.org/rvgcNi3K

>>44
宿題スレでもありますし、少し丁寧にコメントをいれたほうが
良いと思います。一行の箇条書きで構わないので、
関数のヘッダコメント位はあった方がありがたいです。
0057562011/07/21(木) 00:22:26.62
>>49
>課題の性質上、戻り値無しのやり方でやらないと点数はもらえなかったりします。
戻り値の型を省略したら暗黙にintになるけど、褒められたコーディングスタイルとは思えない。
課題に関しては無関係な部分と思うけど。int mainにしたら点数もらえないっていうのなら、焦点がぼやけている。

>>56は割と愚直なコードです。
もし説明が欲しいなら、その点を具体的に言ってください。
一応先に説明しておくと、
リストのノード連結操作が主題になっていると思いましたので、
ノードは静的に確保しています。
「静的に確保」っていうのは、mallocを使わないで,
staticでノードを宣言している事です。
0058デフォルトの名無しさん2011/07/21(木) 00:23:37.66
>>56
お前の臭いコメントなんていらねーよ
ばっかじゃないの
0059デフォルトの名無しさん2011/07/21(木) 00:27:34.35
>>56
俺もそう思います
>>44は馬鹿過ぎると思います
自分のテクに酔っていてこんなの提出したらまず質問攻めに遭って
答えられなくて単位を落とす事になりかねません
0060デフォルトの名無しさん2011/07/21(木) 00:31:23.18
>>55
うわぁ、教授「こいつら回答一緒だな・・・」フラグ・・・
まぁありがとうございます...
0061デフォルトの名無しさん2011/07/21(木) 00:33:07.48
>>59
うぜー
善意でやってるつもりかよ
0062デフォルトの名無しさん2011/07/21(木) 00:36:28.78
出さないよりまし
0063デフォルトの名無しさん2011/07/21(木) 00:44:11.97
>>61
これはQ本人か、はたまたQ化して人生終わっちゃった奴か・・・
0064デフォルトの名無しさん2011/07/21(木) 00:48:17.11
>>63
また宣伝してるつもりかクズ
0065デフォルトの名無しさん2011/07/21(木) 05:38:42.96
[1] 授業単元:遺伝的アルゴリズム
[2] 問題文(含コード&リンク):
世代数 平均適応度 最大適応度というフォーマットで、ooo.dat というファイル名で保存すれば、gnuplot で
plot ”ooo.dat”using 1:2 w l, ”result.dat”using 1:3 w l
とすることで、グラフが得られる。
グラフの例とプログラムと問題文は以下のURLです。
http://ux.getuploader.com/qwertykey/
パスはqqq3538です。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:[2011年7月22日まで]
[5] その他の制限: プログラムに詳しく書かれているので遺伝アルゴリズムに知識がなくてもできると思います。

前板で回答がなかったのでもう一度投稿しました。
よろしくお願いします。
0066デフォルトの名無しさん2011/07/21(木) 10:28:51.85
>>54
お前がdoubleを使うべきとしている根拠は「float系のライブラリが無い」の一点だけなんだから、先に
> float系が無い処理系は有るよ
これを明示しろよ。お前が>>53で10年間やってる技術計算が2ch宿題スレでの回答者というのなら説明不要だが。
0067デフォルトの名無しさん2011/07/21(木) 12:22:19.48
>>66
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.4.4.html
0068デフォルトの名無しさん2011/07/21(木) 13:42:28.26
>>66
> float系が無い処理系は有るよ
これを問うてるんだが。池沼?
0069682011/07/21(木) 13:43:13.01
アンカー間違い。

>>67
> float系が無い処理系は有るよ
これを問うてるんだが。池沼?
0070デフォルトの名無しさん2011/07/21(木) 14:22:46.87
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
  1〜N(N >= 1)までの、1ずつ増加する等差数列が与えられる、この時のNの階乗通り存在する組み合わせをすべて表示せよ
  例)
    Nの値: 3
    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 1 2
    3 2 1
  ※なお、例のような表示順序で無くても良い、すべて表示されているならその表示順序は問わない。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今週末 2011年7月22日 13:00 まで
[5] その他の制限: 再帰かループどちらかの方法で解くこと
0071デフォルトの名無しさん2011/07/21(木) 14:25:22.50
>>67
ところで、自虐ネタ? w

> 第4章 キャストが好き
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.4.2.html
> リスト4个ア1に元のプログラム(に近いもの)を示します。とにかく「キャスト」が異常に多い のが目立ちますね。
0072デフォルトの名無しさん2011/07/21(木) 15:45:37.55
>>66
意味がよく判らないな
少なくとも『手元に有った bcc には float 系は無いよ』っていうのを読んだでしょ、示した事にならないのかな?
私が使ってきた処理系は主に Solaris 系だけど業務で float 系なんて使った事が無いから、
そこにそれが存在したか否かは知らないよ
0073デフォルトの名無しさん2011/07/21(木) 16:01:07.54
http://codepad.org/n47BkpXa
上記のプログラムを実行すると8/3*3=6となります。
このソースを正常に8/3*3=8となるようにif文で前の演算子に'÷'次の演算子に'*'が来た時に
乗算を優先的に行うようにプログラムを付け加えていただけますか?
あえてint型で型を宣言していますので、そこは変更しないで下さい。
宜しくお願いします。
0074デフォルトの名無しさん2011/07/21(木) 16:04:44.87
>>72
> 少なくとも『手元に有った bcc には float 系は無いよ』っていうのを読んだでしょ、示した事にならないのかな?
おまえは、10年間やっている技術計算での仕事でfloatを使わない理由として、
floatな関数は可搬性が悪いという事をあげたんだろ。

そして、その処理系を問うと2chの宿題スレ専用のbcc32だと答える。
おまえの「技術計算経験10年」とは2chの宿題スレで回答の事か? ww

> 私が使ってきた処理系は主に Solaris 系だけど業務で float 系なんて使った事が無いから、
Solarisの純正コンパイラにはある。
0075デフォルトの名無しさん2011/07/21(木) 16:08:32.08
>>73
int型で8/3*3を計算したら6になるのが「正常」でしょうよ。
0076デフォルトの名無しさん2011/07/21(木) 16:13:55.52
>>75
8*3/3に並べ替えして計算したいってことだろ
テンプレ無視だし俺はやらんけど
0077デフォルトの名無しさん2011/07/21(木) 16:16:02.66
[1] 授業単元: プログラミング論
[2] 問題文:http://codepad.org/kRpsBNJPを参考にして
          累計
  50 49 48 47 46 240
  45 44 43 42 41 455
(長すぎて書き込めないため中略)
累計 275 540 795 1040 1275
↑(1から50までの整数を5つずつ50から表示して行きます。)
�@上のように横と縦の累計を計算して表示するプログラムを作成せよ。
ただし配列は使ってはならない。。
�A次に一次元配列を用いて上図のように縦と横の類計を計算して
表すプログラムを作成せよ。
�B次に縦と横の累計の計算をする部分を関数を使って
表すプログラムを作成せよ。
[3] [3.1] OS:windows7[3.2] visualstdio[3.3] 言語: C言語
[4] 2011年7月23日の11時59分まで
問題が多くて申し訳ありません。どうかよろしくお願いいたします。
0078デフォルトの名無しさん2011/07/21(木) 16:46:42.37
>>74
まず、bcc が業務では使えないコンパイラであるという認識をしているので有ればそれは失礼だろう
あくまで私の手元に有る float 系を持たないコンパイラとして例示したに過ぎないから

現在の Solaris には有ってもおかしくない、C99の規格に float 系が定義されているなら当然だろう
しかし、BSD4.3あたりでは?
これは私が最初に Sun の業務を行った頃のOSだが今となっては確認するのは困難だろう

私は可搬性に関して触れたが float 系が無い処理系を業務で扱ったと断言した覚えは無い
だって float を使わないんだから、そんな事はどうでも良い話だ
float 系が無い処理系で業務を行う可能性が有るか否かは可搬性を考慮する際には関係ないんだよ
絶対に存在する double 系で構築すればどんな環境にでも対応できる(先に書いた様に例外は有るかもしれないが)
敢えて float を使うメリットが何も無いのだから double で統一すべきと教育されたし、それを遵守してきた

君にどんな業務で float を使ったかを問うたのは float を使うメリット、又は double を使えない制約に
どんなモノが有るのか知りたかったからだ
どうやら君は脳内プログラマらしいからこれ以上の追及は無意味だろう
0079デフォルトの名無しさん2011/07/21(木) 16:55:12.35
ゲームとかGPU使うようなプログラムはfloat使うよ
0080デフォルトの名無しさん2011/07/21(木) 17:07:19.64

[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク): http://codepad.org/n47BkpXa
上記のプログラムを実行すると8/3*3=6となります。
このソースを正常に8/3*3=8となるようにif文で前の演算子に'÷'次の演算子に'*'が来た時に
乗算を優先的に行うようにプログラムを付け加えていただけますか?
あえてint型で型を宣言していますので、そこは変更しないで下さい。
宜しくお願いします。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: [2011年07月22日09:00まで]
[5] その他の制限: 変数は変えない。関数は出来れば増やさない。
0081デフォルトの名無しさん2011/07/21(木) 17:09:53.80
>>78
> 敢えて float を使うメリットが何も無いのだから double で統一すべきと教育されたし、それを遵守してきた
つまり、盲目的に押し付けられた作法を守ってきただけだね。その作法の根拠が藤原本?

藤原本は藤原自身が書いているように
> プログラミング言語の本は、コンピュータ関連の本の中では寿命の長い方 ですが、
> それでも出版されてから5年程度が寿命です。いつ出版された本かは 必ず確認して買いましょう。
http://www.pro.or.jp/~fuji/mybooks/cdiag/appendix.b.html

> float を使うメリット
省メモリ、高速
省メモリは言うまでもない。
高速であることのデータは(業務上の)出せないけど、公開されてるデータ(Fortranの倍精度、単精度比較)
http://www.softek.co.jp/SPG/Pgi/TIPS/public/general/multicore-para.html
doubleが速いは時代遅れ。
0082デフォルトの名無しさん2011/07/21(木) 17:53:17.49
>>79
大昔に DreamCast を弄った経験が有るんだけど、普通の算術関数が float 系だった様な気もする
先に述べた通り、特殊な環境ならありえるだろうね

>>81
藤原本が何かは知らない
最初にこの教育を受けたのは大学の研究室

float が速いってのは一般的に認知されてるの?環境依存ならありそうだけど
省メモリに関しては前から言っている様に現在ではメリットとならないよ

一度だけ省メモリの観点で float を使った事を思い出した
但し、環境が MS-DOS でしかも言語は N88-BASIC だ
大きな表計算みたいなプログラムだったんだけど、double を使うと行が稼げないから敢えて float を使った
EWSやWindows環境で省メモリなんて考慮しなければならない業務に当たった経験は無い
君は省メモリの観点で float を使うような仕事をしてるの?
0083デフォルトの名無しさん2011/07/21(木) 18:24:15.95
GPUを使う環境が特殊とか言われちゃうと、
どんな用途でも「特殊」の一言で切り捨てられる気がする
0084デフォルトの名無しさん2011/07/21(木) 18:24:45.82
>>81
floatって今時C#の座標系位にしか使わなくないか?
doubleと比べると有効桁数が少なすぎて積み残し誤差がハンパないぞ
0085デフォルトの名無しさん2011/07/21(木) 18:28:03.33
>>82
> 先に述べた通り、特殊な環境ならありえるだろうね
SSEを特殊な環境と主張するつもりかい? floatならdoubleの倍突っ込める。

>藤原本が何かは知らない
>>67は別人? 別人格?

> float が速いってのは一般的に認知されてるの?環境依存ならありそうだけど
さあね、でも、10年前?にsparcが抜き去られた時からは「doubleが速い」は迷信。

> 省メモリに関しては前から言っている様に現在ではメリットとならないよ
それはキミがそういう領域しか扱ってないから。無尽蔵なメモリ使えるなら疎行列扱うテクニックとかいらないだろ。
技術計算やってると言ってて「疎行列」聞いたことないとかいうなよ。

> 君は省メモリの観点で float を使うような仕事をしてるの?
1000万×1000万のマトリックスが相手だよ。
0086デフォルトの名無しさん2011/07/21(木) 18:28:59.57
>>83
GPUを使って計算する方法が、
汎用的かつ一般的で、
環境に依存せずに動くなら、
特殊でないと言ってもいいんじゃない?
0087デフォルトの名無しさん2011/07/21(木) 18:35:01.60
Intelは次のCPUをクアッドチャンネルメモリにしないと目玉がないよな
0088デフォルトの名無しさん2011/07/21(木) 18:36:05.75
>>85
疎行列くらい知っとるわアホ
0089デフォルトの名無しさん2011/07/21(木) 18:40:08.37
ここ何のスレだっけ?
0090デフォルトの名無しさん2011/07/21(木) 18:40:32.29
>>88
なら、↓こんな意味不明な反論すんなよ。
> 省メモリに関しては前から言っている様に現在ではメリットとならないよ
0091デフォルトの名無しさん2011/07/21(木) 18:43:45.79
>>82
おまえSSEとか使わんのか
あとキャッシュメモリ考えたことないだろ
で、なんで宿題と関係ないことでスレ荒らすん?
0092デフォルトの名無しさん2011/07/21(木) 18:45:22.72
>>86
一般的ならそりゃ特殊じゃないだろ
言葉くらいちゃんと使おうぜ

(何の話題か知らんけど)
0093デフォルトの名無しさん2011/07/21(木) 18:47:23.12
>>81
そのリンク先は、あきらかに SSE/CUDA/GPGPU 等の float をターゲットにしたハードウェア相手にコードを記述する場合の話。
CPU/FPU 相手にプログラムを組むのであれば float/double に差はない。

で、発端となった、http://hibari.2ch.net/test/read.cgi/tech/1308749241/906 は float をターゲットにしたハードウェア相手のコードなのか?
float の演算が多量に存在するのか?現状のコンパイラははこのコードに対して SSE命令を生成するのか?

このコードを float で書くメリットはなにか?
0094デフォルトの名無しさん2011/07/21(木) 18:47:49.55
>>83
私の認識が古いのかもしれないね、コンピュータグラフィックスはほとんどやった事が無いので
先に書いた DreamCast はバイトだ

>>85
> SSEを特殊な環境と主張するつもりかい? floatならdoubleの倍突っ込める
上と同じレベルの話だよ、認識の違いだ

標準的な算術関数が double 系であるという事に間違いは無いだろう
float 系が主体である処理系はこの考えに基づくと『特殊』と考えても良いんじゃないのか?
将来は逆転するかも知れないが、私の世代を含めたプログラマ全体の平均を取れば誤った認識とは思わない

>別人? 別人格? 
>「doubleが速い」は迷信。 
別人だよ、私は double が速いなんて主張はしていない
敢えて float を使うのに速さを主張するのはいかがなものかと言っている

>それはキミがそういう領域しか扱ってないから
1000万x1000万のマトリックス?具体的な対象については教えてくれないのw
0095デフォルトの名無しさん2011/07/21(木) 18:51:12.40
バグ無の回答作れないうんこが、完璧な回答に言いがかりつけようとfloatに突っ込んだのが発端だから。

おい、うんこ。バグなおせよ。www
http://codepad.org/imsXD8tD
0096デフォルトの名無しさん2011/07/21(木) 18:51:16.12
>>86
そりゃGPUを搭載しててDirectXやOpenGLなどが動くとかある程度環境に依存するけど
わりと一般的な構成じゃね?
0097デフォルトの名無しさん2011/07/21(木) 18:54:44.16
>>93
> そのリンク先は、あきらかに SSE/CUDA/GPGPU 等の float をターゲットにしたハードウェア相手にコードを記述する場合の話。
実数計算の世界では今はこれがスタンダード。

> このコードを float で書くメリットはなにか?
doubleにするメリットは何もないな。
0098デフォルトの名無しさん2011/07/21(木) 18:57:44.49
>>94
> 別人だよ、私は double が速いなんて主張はしていない
それではデフォルトがdoubleであるべきとする根拠はなんだよ。
「先輩に教えられたから?」www

ライブラリ説→否定された
メモリ使用量→完全に負け
速度→負け
0099デフォルトの名無しさん2011/07/21(木) 18:58:04.57
SSEなんて10年前のPCですら使えるし
なんで特殊なマシン扱いするのか分からない
0100デフォルトの名無しさん2011/07/21(木) 18:59:52.72
>>86
gpgpu は汎用的でもなければ一般的でもない。
cuda は nvidia の提供する拡張されたコンパイラしか対応しない(ライブラリをリンクする程度の拡張ではない)。
ati stream も c/c++ベースの拡張言語 brook+ を使う。
C で GPGPU アプリケーションは記述できないゆえ、少なくともこのスレ的には、汎用的でも一般的でもない。
0101デフォルトの名無しさん2011/07/21(木) 19:00:08.47
>>94
> 標準的な算術関数が double 系であるという事に間違いは無いだろう
根拠も示せず盲信するジジイ。もしくはそういうジジイに洗脳されているメクラ。
■ このスレッドは過去ログ倉庫に格納されています