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

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2006/10/19(木) 00:20:05
>>951
今の規格ではNULLは整数の0と等価にみなせるんじゃなかったか?
C99だったかC++のどこからかだったかは覚えてないんだが…
953デフォルトの名無しさん:2006/10/19(木) 00:28:16
>>944
その問題、何度か尋ねてるようだけど、とりあえず出力例を出してくれ。
あと指数部の基数は幾つだ?下駄は?
仮数部の正規化の形式は?
954デフォルトの名無しさん:2006/10/19(木) 00:35:47
>>944
入力フォーマット {-},[0-9]+{.[0-9]+}|{-}.[0-9]+
のうち|の前の {-} につづく , カンマが入ってるのは間違いだよな?
955954:2006/10/19(木) 00:50:20
>>944
受け取れる数値のフォーマットは
1.125
-1.125
.125
-.125

だと思いたいわけだが、問題の通りだとカンマがあるせいで
,1.125
-,1.125
.125
-.125

こんなものを処理しないといけなくなってしまうぞ
956デフォルトの名無しさん:2006/10/19(木) 01:29:03
>>955
すいません,は.の間違いです
957デフォルトの名無しさん:2006/10/19(木) 01:31:04
>>955
>>956で訂正されてしまったので身もふたもないが…

おそらく適正を見ているのだろう。

勝手に解釈して , を抜かす奴→不可
間違いではないかと質問に来る奴→不可
書いてあるとおりに実装する奴→可
どちらの場合にも対応できるように実装する奴→良
このスレに丸投げしてねらーが答えないのが悪いと責任転嫁する奴→優
958デフォルトの名無しさん:2006/10/19(木) 01:38:29
>>950
最近はNULLは#defineで0設定されてたと思う。
959デフォルトの名無しさん:2006/10/19(木) 01:44:02
>>956 もしカンマをピリオドに変えると更にわけわかめ
1.1.25
-1.1.25
これは一体どんな数値に変換すれば…
960デフォルトの名無しさん:2006/10/19(木) 01:47:30
>>959
955の通りです
961デフォルトの名無しさん:2006/10/19(木) 02:12:35
>>959 チョット違う
.1.25
-.1.25
だろ?あげあし取りスマソ

>>944 の解き方としては
1.整数部分だけを二進数に変換
2.少数点以下を二進数に変換
3.1.2.の結果を合わせて初めてビットが1になる次のビットを仮数部の最上位ビットにする
で一応できるけど、無限大の表現と 0 の表現が未定義だな
962デフォルトの名無しさん:2006/10/19(木) 08:29:59
>>961
指数部はどうするの?
963デフォルトの名無しさん:2006/10/19(木) 09:45:26
区切り文字をわざわざ小数点とかぶせる神経が分からない
964デフォルトの名無しさん:2006/10/19(木) 10:15:59
1.1.25
-1.1
.25 (0.25)
と解釈できるけど?
965デフォルトの名無しさん:2006/10/19(木) 10:20:26
あるぇ〜〜、まだぽまいらC言語なんてやってんのぉ〜〜〜〜〜?
966デフォルトの名無しさん:2006/10/19(木) 10:21:36
>>961
世にあるIEEE以外の多くの実装では、最上位ビットも記録するわけだが。
967デフォルトの名無しさん:2006/10/19(木) 10:38:52
素直にatofのソースまるパクリでよくね。
いっそのこと、atofで変換して基数部を指定ビット数で切り捨てるとか。
968デフォルトの名無しさん:2006/10/19(木) 10:58:19
.-.1.25なんて馬鹿だろ
969デフォルトの名無しさん:2006/10/19(木) 11:16:54
仮数部はどうするのかな。(1+x)?それともx?
970デフォルトの名無しさん:2006/10/19(木) 11:55:00
まぁまて文字での表現形式とビットでの表現形式が一致しなければならないなんてどこにも書いてないぞ
971デフォルトの名無しさん:2006/10/19(木) 12:21:13
もうこのネタは飽きた。
972デフォルトの名無しさん:2006/10/19(木) 13:09:38
なら出てくんな
973デフォルトの名無しさん:2006/10/19(木) 14:35:40
質問者の態度が悪いなー
974デフォルトの名無しさん:2006/10/19(木) 15:13:40
>>969
1+xです
975デフォルトの名無しさん:2006/10/19(木) 15:56:32
>>952>>958
C++では0だし、Cでも0になっていることはある。
でも、だからと言って文字列の終端にNULLを使ってよいという理由にはならない。
976デフォルトの名無しさん:2006/10/19(木) 16:05:44
>>944
うっとうしいからさっさとやっちゃおうぜ
977デフォルトの名無しさん:2006/10/19(木) 16:14:53
やれと言われても、>>944は解くための情報が決定的に不足しとるんだわな。
とりあえず、基数は2。バイアスは無し。正規化は小数第1位に有効ビットを
持ってくる。入力フォーマットのカンマは無視ってことでいいのか?
978デフォルトの名無しさん:2006/10/19(木) 16:41:29
>>977
それでいいと思うよ
979デフォルトの名無しさん:2006/10/19(木) 17:05:19
どうせ他人の宿題なんだし、適当に解釈してそれっぽく見繕えばいいんじゃね?
980941:2006/10/19(木) 17:09:26
ググったのですが解説されている所はありませんでした。
マジで誰か分かる方いませんか?
981デフォルトの名無しさん :2006/10/19(木) 17:22:30
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>
#define Bs 10 //底を10とする
typedef struct{
unsigned int flug: 1;//フラグ
unsigned int index: 8;//指数
unsigned int mantissa: 32;//仮数
}BitSet;
BitSet *ChngF(char *Num, unsigned int size);double ToDubF(BitSet *Bz);
BitSet *ChngF(char *Num, unsigned int size){unsigned int i = 0,j = 0;unsigned int Bn = 0;
BitSet *Bi = (BitSet *)malloc(sizeof(BitSet));Bi->flug = 0;Bi->index = 0;Bi->mantissa = 0;
if(Bi == NULL){fprintf(stderr,"メモリ割り当て失敗\n");exit(1);}for(i = 0; isspace(Num[i]); i++)
;if(Num[i] == '-'){Bi->flug = 1;}else if(Num[i] == '+'){Bi->flug = 0;}else{Bi->flug = 0;}i++;
for(Bn = 0, j = 0;isdigit(Num[i]);i++, j++)Bn = 10 * Bn + (Num[i] - '0');Bi->index = j;
if(Num[i] == '.')i++;elseexit(1);for(;i < size; i++)Bn = 10 * Bn + (Num[i] - '0');Bi->mantissa = Bn;
return Bi;}double ToDubF(BitSet *Bz){double dm = (double)Bz->mantissa ,rd;unsigned int i;
double Ind = Bs ;for(i = 0; i < Bz->index; i++)Ind *= Bs;rd = (double)Bz->mantissa / Ind;if(Bz->flug == 1)
rd *= -1;return rd;}int main()
{char Num[] = "-13.653";unsigned int size = (unsigned int)strlen(Num);BitSet *B1;double Resl;
B1 = ChngF(Num, size);Resl = ToDubF(B1);printf("%s : %f \n",Num, Resl);return 0;}
>>944の問題って
入力規則ってのがわかんないんっすけど
こんな感じっすかね。問題の意図が違いますかね?
982デフォルトの名無しさん:2006/10/19(木) 17:42:20
>>981
955のような入力規則です
983デフォルトの名無しさん:2006/10/19(木) 17:46:38
>>981
955のような入力規則です
984デフォルトの名無しさん:2006/10/19(木) 18:01:50
>>981
Bnはuintじゃたりなくね。
985デフォルトの名無しさん:2006/10/19(木) 18:18:54
[1] 授業単元: プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2790.txt
        【】の中を埋めなさい
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C


授業始まって2回目の宿題でつまづいてしまいました。お願いします。
986デフォルトの名無しさん:2006/10/19(木) 18:31:05
>>985
1scanf("%lf %lf %lf", &w, &h, &d);
2:v=w*h*d;
3:s=w*h*2+h*d*2+d*w*2;
4:w, h, d
5:printf("taiseki %f, menseki %f\n", v, s);
987985:2006/10/19(木) 18:46:01
>>986
できました!ありがとうございました。
988デフォルトの名無しさん:2006/10/19(木) 19:06:51
>>980
その邪悪な糞コードをこう書き換えれば少しは分かり易いだろう。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2791.txt

要は最終的に 4.0 * 201 / -16 / 16 という式を作ってるだけだ。
円周率に近い値をプリントするだけのプログラムで別に円周率を
計算してるわけじゃない。それを技巧を凝らしてわざわざ分かり難く書いてる。

てか、これ学校の宿題じゃないだろ。
まっとうな学校の授業で、分かり難いCコードコンテスト(Obfuscated C Code Contest)の
作品なんかを読ませるとは思えない。
http://www0.us.ioccc.org/1988/westley.c
http://www0.us.ioccc.org/1988/westley.fix.c
http://www0.us.ioccc.org/
989デフォルトの名無しさん:2006/10/19(木) 19:49:47
[1] 授業単元:システム学
[2] 問題文:行列の積を用いた性能評価プログラムを作成しなさい
      計算に何秒かかったのか表示し、行列の大きさは任意で変更が出来るように組むこと
[3] 環境  
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 2006年10月20日14時
[5] その他の制限: コンパイルオプションには最適化を指示する。
倍精度浮動小数点を用いること
よろしくお願いします
990デフォルトの名無しさん:2006/10/19(木) 19:53:22
[1] 授業単元:構造体のポインタ
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2793.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語: C
[4] 期限:20日まで
[5] その他の制限:
991デフォルトの名無しさん:2006/10/19(木) 20:27:59
次の人お願い

あなたが解けない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++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
【過去スレ一覧】
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
992デフォルトの名無しさん:2006/10/19(木) 20:39:36
>>981
うまくいかないんですが
993デフォルトの名無しさん:2006/10/19(木) 20:39:57
スレでも立てるか
994デフォルトの名無しさん:2006/10/19(木) 20:40:36
995デフォルトの名無しさん:2006/10/19(木) 21:07:23
>>990
問題文に問題があるんだが、変更していいのはあくまでも
struct nibun *add_nibun(struct nibun *x,int k)
って関数だけなの?
996デフォルトの名無しさん:2006/10/19(木) 21:14:39
>>995
そうです
問題に書いてある部分は変更しちゃいけないみたいです
997デフォルトの名無しさん:2006/10/19(木) 21:15:06
埋め
998デフォルトの名無しさん:2006/10/19(木) 21:28:39
dispがこうなっていれば俺にも解けるんだが。

void disp(struct nibun *x)
{
    if(x->small!=NULL)
        disp(x->small);
    
    printf("%d-(",x->num);

    if(x->small!=NULL)
        printf("%d,",(x->small)->num);
    else
        printf("*");
    if(x->big!=NULL)
        printf("%d)\n",(x->big)->num);
    else
        printf("*)\n");
    
    if(x->big!=NULL)
        disp(x->big);
}

つーか2分木リスト構造って何だ?
999デフォルトの名無しさん:2006/10/19(木) 21:31:55
999
1000デフォルトの名無しさん:2006/10/19(木) 21:36:54
>>990
struct nibun *add_nibun(struct nibun *x,int k)
{
struct nibun *member, *parent, **parent_next;


member=malloc(sizeof(struct nibun));
member->num=k;
member->small=NULL;
member->big=NULL;

parent=x;
while(parent!=NULL)
{
if(k<parent->num)
parent_next=&(parent->small);
else
parent_next=&(parent->big);

if(*parent_next==NULL)
break;

parent=*parent_next;
}
*parent_next=member;

return x;
}
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。