C/C++の宿題片付けます 122代目at TECH
C/C++の宿題片付けます 122代目 - 暇つぶし2ch149:デフォルトの名無しさん
09/02/02 15:47:11
>>144,148
課題2
#include<stdio.h>
void put_n(char c,int n){
while(n--)printf("%c",c);
printf("\n");
}
int main(void){
int i,n;
scanf("%d",&n);
while(n<=0){
printf("正の整数を入力してください。\n");
scanf("%d",&n);
}
for(i=1;i<=n;i++)put_n('*',i);
printf("\n");
for(i=n;i;i--)put_n('*',i);
return 0;
}

150:デフォルトの名無しさん
09/02/02 16:24:03
課題3.コメントアウトつけなかったけど、ま分かるだろう。
#include <stdio.h>
#include <string.h>

int count_char(const char* s, char c){
int i,length,count=0;
length = strlen(s)-1;
for(i=0;i<length;i++) if( s[i] == c) count++;
return count;
}

int main(void){
int Size,i,tmpCount;
char strBuff[5][256];

for(i=0;i<5;i++){
printf("Input String (%d) ?? ",i);
scanf("%s",strBuff[i]);
}

for(i=0;i<5;i++){
tmpCount = count_char(strBuff[i],'a');
if(tmpCount == 0) continue;
printf("文字列[%s]に含まれる'a'の個数は%2dです\n",strBuff[i],tmpCount);
}
return 0;
}

151:デフォルトの名無しさん
09/02/02 16:25:28
>>149
課題提出に問題ないと思うけど
問題文の解釈は自分ではこうなるけど、、、
while(n<=0){
printf("Input n ?? ");
scanf("%d",&n);
if(n>0) break;
printf("正の整数を入力してください。\n"); //問題文から警告と読み取るとこの位置
}
for文と条件演算子使うと1行で(簡単なんだか難解なんだか)
// for(Size=0;Size<1;Size<1?puts("正の値を入力してください"):0 ) scanf("%d",&Size);



152:デフォルトの名無しさん
09/02/02 16:37:51
>>151
scanf("%d",&n);
while(n<=0){
printf("正の整数を入力してください。\n");
scanf("%d",&n);
}

入力部はこれでひと塊なんだ

153:デフォルトの名無しさん
09/02/02 16:48:57
>>144 です

>>150 を試してみましたが
色々入力してみて結果をみると
a が含まれてるのに表示されないのがあります
どう改善すればいいでしょうか;;;

154:デフォルトの名無しさん
09/02/02 16:51:16
>>153
fgets を使う

155:デフォルトの名無しさん
09/02/02 17:03:33
>>154
fgets って言うのは習ってないので
どこに組み込めばいいか分からないです…。

156:150-151
09/02/02 17:11:59
>>152
自分でコンパイルしてなかった。すまん。

>>153>>155
strlenが改行コード含むと思ってプログラムしてたから、自作関数の-1を消してもらえば大丈夫だと思う。

157:デフォルトの名無しさん
09/02/02 17:14:29
>>156
-1を消したらうまくできました!ありがとうございます^^

>>147,149,150,151,152,154,156
いい人が沢山居て本当に助かりました☆
皆さんありがとうございました!!!

158:デフォルトの名無しさん
09/02/02 18:50:58
>>143
読んでないけど、>>115で不満なのか?


159:デフォルトの名無しさん
09/02/02 20:53:12
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++Compiler 5.5
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: 2月5日まで
[5] その他の制限:C言語は一通り習ってます。

(1)がさっぱりわかりません・・・・。よろしくお願いします。

160:デフォルトの名無しさん
09/02/02 21:01:55
(x^n) mod m

161:デフォルトの名無しさん
09/02/02 21:04:48
>>160
はええな
マジで?
おれより速い奴がいるなんて興奮して勃起しちゃった

162:デフォルトの名無しさん
09/02/02 21:10:20
>>160
すごいですね!ありがとうございます。

163:デフォルトの名無しさん
09/02/02 21:20:28
>>160
質問者じゃないんだけど
y=1;z=x;
for(i=n;i>0;i>>=1){  ←i>>=1これどういう意味ですか?
if(i%2) y=(y*z)%m;  ←これなんでiが偶数のときは処理しないんですか?
z=(z*z)%m;
}
return y;

164:デフォルトの名無しさん
09/02/02 21:31:18
>>163
URLリンク(www2.cc.niigata-u.ac.jp)

165:デフォルトの名無しさん
09/02/02 21:36:58
>>163
>for(i=n;i>0;i>>=1){  ←i>>=1これどういう意味ですか?
iを右に一つシフトした結果をiに代入する。
結果、iが二分の一になる。


166:デフォルトの名無しさん
09/02/02 21:38:49
>>165
>結果、iが二分の一になる。
端数切捨てね。
5(101)→2(10)

167:デフォルトの名無しさん
09/02/02 22:01:27
[1] 授業単元:DirectX研究2
[2] 問題文(含コード&リンク):
サイコロを転がして目を決める。
 ・テーブルとサイコロを作成する。
 ・キー操作でサイコロを投げ下ろすように振る。
 ・落下してきて,1つの目を上にして止まる。
 ・何度でも遊べる

 ◎テーブルにサイコロの影がある
 ◎回転しながら落下してくる
 ◎自由な方向から見ることができる
 ◎テーブルの上でサイコロは跳ね,転がる。
 ◎サイコロとして正しい
URLリンク(pub.idisk-just.com)
を参考にしてよい。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC8 or VC9
 [3.3] 言語:C/C++どちらでも可
[4] 期限: 2月10日まで
[5] その他の制限:DirectXの課題ですがよろしくお願いいたします。

168:デフォルトの名無しさん
09/02/02 22:37:41
ここって宿題じゃなくて単発の質問はいいのかな?

169:デフォルトの名無しさん
09/02/02 22:41:33
スレを勃てるまでもないC/C++の質問はここで 7
スレリンク(tech板)

170:デフォルトの名無しさん
09/02/02 22:41:35
>>168
答えはNO
スレ違い

171:デフォルトの名無しさん
09/02/02 22:43:50
>>169-170
こっちか。ありがとう

172:デフォルトの名無しさん
09/02/02 22:48:04
内容:[1] 授業単元: プログラミング
[2] 問題文:Visual c++を使って大富豪を作りなさい。
      ルールは、8切りのみです。ペア、階段等は無しにします。 CPUは1名とします。
カード枚数は10枚ずつで、ジョーカーは無しです。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:Visual c++
[4] 期限: できれば早めに・・・・
[5] その他の制限: まだ基礎段階なので、なるべく簡単なプログラムがいいです。         画像の取り込みとかはせずに、文章で表示すればいいらしいです。 Visual c++がよくわからないので、よろしくお願いします

173:デフォルトの名無しさん
09/02/02 22:49:49
>>166
スレ違いなのに質問に答えてくれてありがとうございます

174:デフォルトの名無しさん
09/02/02 23:14:27
>>172
CPUとの1対1でいいのか?
ペアなしっていうのは、常に1枚ずつしかカード出せないってことでいい?

ていうかCPUの思考ルーチン作るのって基礎段階を大幅に超える気がするんだが


175:デフォルトの名無しさん
09/02/02 23:21:42
どなたか>>134をお願いいたします。

176:デフォルトの名無しさん
09/02/02 23:29:56
>>175
お願いされるWORDが無い

177:105
09/02/02 23:33:50
問2をここまでやったのですが、どうも何かが違うようで7桁の数字を入力しても学番は7桁~のほうがでてしまうんです。

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

void main(){

char x[100];
int y,z;

printf("学番を入力:");
gets(x);

y=strlen(x);
     z=atoi(x);

if(y==7 && z==7){
printf("g%s@yahho\n",x);
}
else{
printf("学番は7桁の数字で入力して下さい\n");
}


}


どこがいけないのでしょうか?
何度も住みませんが、よろしくお願いします。

178:デフォルトの名無しさん
09/02/02 23:37:27
>>175
バブルソート フローチャート
でググれ

179:デフォルトの名無しさん
09/02/02 23:40:46
>>177
Z==7がまずい
というかそれ、問3じゃないのか?

180:デフォルトの名無しさん
09/02/02 23:44:31
>>179
あ、ごめんなさい。問3でした

z==7がいけない、ということは
y==7 か z==7  どちらかしか使用してはいけないということなのでしょうか
文字数が7、尚且つ数字であるとき、という風にしたいのですが・・・

181:デフォルトの名無しさん
09/02/02 23:57:45
>>172
仕様を、常に自分からで敵は出せる最小を必ず出す、とすれば楽になる。
が、10行20行で分かりやすく纏めるのやファイルうpはめんどい。

流れの案だけ、書いとく。

全体 [シャッフル]->[配布]->[スタート(自分の番)]->[ループ&終了判定]->[終了時コメント]->end
ループ部分
自分の番:自分のカードを printf("%d:%d ",i%10,ME[i]);とかで表示
scanfでキーボードの1,2,3,...,9,0を選択。フラグ処理などしないと、同じカード捨てる事になる。
相手の番:場に出ている番号(初めは0)より大きい最小のカードのインデックスを計算
あればそのインデックス。無ければ自分の番に。
細かいシステム管理(枚数チェックとか、場のカードの数・切るとか)も必要だし、
[シャッフル]7行 [配布]2~5行 [ループ&終了判定]30行位[終了時コメント]3行
整理して、こんなもんかな?

182:デフォルトの名無しさん
09/02/02 23:57:45
>>180
言ってることとやってることがめちゃくちゃだぞ

数字かどうか判断するにはxに格納された文字が
'0'と'9'の間にあるかどうかを判断すべき

それと宿題程度ならいいと思うが
getsはなるべく使わない方がいい

183:デフォルトの名無しさん
09/02/03 00:00:57
>>182
よく使ってるscanfも曲者と聞きますし、fgets&sscanfが良いと聞きますが
宿題レベルでもでしょうか?実感ないのですが。

184:デフォルトの名無しさん
09/02/03 00:01:39
z = atoi(x) だから
z==7だと zが7かどうかを判定してることになってしまう。
ほしいのは7桁かどうかだから、これはまずい。

あとはzが7桁の数字かどうか判定すればいいだけだよ。

それとgets()は使わない方がいい。
この辺参考に
URLリンク(www.linux.or.jp)



185:デフォルトの名無しさん
09/02/03 00:05:49
>>183
オーバーフローするような値を
敢えて入力するやつはいないと思うから
宿題レベルでとやかく言われることはないんじゃね?
でもリスクは少なくしておくべき

186:デフォルトの名無しさん
09/02/03 00:05:57
y=strlen(x);

bool b = true;
int i;
for( i = 0; i < 7; ++i ){
if( x[i] < '0' || x[i] > '9' ) b = false;
}
if(y==7 && b ){
printf("g%s@yahho\n",x);
}
else{
printf("学番は7桁の数字で入力して下さい\n");
}

187:デフォルトの名無しさん
09/02/03 00:06:50
>>174
出せるカードの中で一番弱いカードを出す程度で十分。
商用ゲームですらこれのことあるし。

188:デフォルトの名無しさん
09/02/03 00:07:33
>>174
常に1枚だすので大丈夫です。よろしくお願いします。

189:デフォルトの名無しさん
09/02/03 00:17:01
C言語、プログラミング基礎の問題です。

整数型変数xに値16を代入文で直接代入する代わりに、ポインタ変数を用いて
間接的に行う方法を与えよ。

とても簡単だと思うのですがわからなくて。。。
お願いします

190:デフォルトの名無しさん
09/02/03 00:21:08
>>189
int x;
int *px;
px = &x;
*px = 16;

こういうことかな?

191:デフォルトの名無しさん
09/02/03 00:23:53
もしくは px[0] = 16 も。ポインタ理解できると→*(&px[1]-1)=16 でもできる事がわかる。

192:デフォルトの名無しさん
09/02/03 00:24:34
>>182
>>184
ありがとうございます。おかげさまで無事できました!

授業ではgets()しか習っていませんでしたが使わないほうがいいのですね。勉強になります。

193:181
09/02/03 00:40:07
シャッフルだけ。
大富豪以外にもカードゲームボードゲームでも同じ事するはずだから、良いソース持ってる人いるだろうケド
山のシャッフルは、短絡的に実装しました。
バグさえなければ、大雑把にCARD_NUMの2乗オーダーの計算だと思うので
10000枚とかでなければ気にする事無いと思います。

#define CARD_NUM (13*4)
int main(){
int cards[CARD_NUM];// カード番号とカードの数字を対応
int yama[CARD_NUM];// カードをシャッフルして代入
int i,j,ran;
srand((unsigned) time(NULL));

for(i=0;i<CARD_NUM;i++){ cards[i]=i; yama[i]=-1; }
for(i=0;i<CARD_NUM;i++){
ran = rand()%(CARD_NUM);
if(yama[ran]==-1) yama[ran]=i; //トランプの数字にするには yama[ran] = i/4;
else i--; //やり直し
}
/* シャッフル検査 */
for(i=0;i<4;i++){
for(j=0;j<13;j++) printf("%2d/",yama[i*13+j]);
puts("");
}
return 0;
}

194:デフォルトの名無しさん
09/02/03 00:49:48
>>190 >>191
ありがとうございます!!

あと、while(条件){作業}
を、if文とdo-while文を使って表現すると、どうなるのでしょうか・・・

195:デフォルトの名無しさん
09/02/03 00:57:24
マルチポスト

224 名前:デフォルトの名無しさん[] 投稿日:2009/02/02(月) 22:46:51
while文をif文とdo-while文を使って表現せよ

という問題なんですが…ifも使わなきゃいけないというところがわかりません
どうすればよいのですか??


196:デフォルトの名無しさん
09/02/03 01:00:04
>>195
イタチといわれたので

197:デフォルトの名無しさん
09/02/03 01:02:24
それでも前のスレで答えてくれている人がいるだろ。
チェックしてないのかよ。

198:デフォルトの名無しさん
09/02/03 01:03:38
見たけどあってるかわからなかったんで

199:デフォルトの名無しさん
09/02/03 01:05:39
じゃあこのスレで答えても同じことになるだろ。

200:デフォルトの名無しさん
09/02/03 01:08:58
答え2つあったんですけど、どっちがあってるかわかりますか
このスレは答え教えてくれるんで

201:デフォルトの名無しさん
09/02/03 01:15:05
じゃあもう一個増やしてやるよ。

do{
if(!x){ break; }
/*処理*/
}while(x);



202:デフォルトの名無しさん
09/02/03 01:27:04
暇人・・・ww

203:デフォルトの名無しさん
09/02/03 01:55:24
do {
if(!x) break;
/*処理*/
}while(1);
でもよくね?

204:デフォルトの名無しさん
09/02/03 01:58:34
do {
loop:
    if (!x)
        break;
    /* 処理 */
    goto loop;
} while (0);

205:デフォルトの名無しさん
09/02/03 01:59:27
あ~あ夜は暇だなっと。マジレスでもするか
while(cnd){
/* ○処理 */
}
if(cnd?"GO"[0|0]:0x0)do{
/* ○処理 */
}while("yoru"['-'-'-']?cnd:69);

206:デフォルトの名無しさん
09/02/03 06:08:15
[1] 授業単元:(復習課題) 分岐 繰り返し 一次元配列 2重ループ 2次元配列 文字列(これらどれかを使って解け)
[2] URLリンク(www.pref.fukushima.jp) 問6 問7
[3] 環境
 [3.1] OS:Windows
 [3.2]visual C++
 [3.3] 言語:C++
[4] 期限: 2009年2月4日まで
[5] main関数を使いそれ以外にもユーザ定義関数を1つ以上作成すること。

入力はscanf 出力はprintfでお願いします。
>>46の時は、ほんと助かりました。
今回もお願いします。



207:デフォルトの名無しさん
09/02/03 06:57:53
>>158
実行できなかったもので・・・

208:デフォルトの名無しさん
09/02/03 07:38:52
>>206
問6
URLリンク(kansai2channeler.hp.infoseek.co.jp)

209:デフォルトの名無しさん
09/02/03 07:48:04
>>208
>入力はscanf 出力はprintfでお願いします。
ってかいてあるべ
URLリンク(kansai2channeler.hp.infoseek.co.jp)

210:デフォルトの名無しさん
09/02/03 08:16:43
>>206
問7
#include <stdio.h>
#define COUNT_OHAJIKI 32
#define MAX_JIRO 25
int main(){
int n;
scanf("%d",&n);
while(n!=0){
int i,rest=COUNT_OHAJIKI,jiro[MAX_JIRO];
for(i=0;i<n;i++)scanf("%d", jiro+i);
i=0;
while(rest!=0){
rest-=(rest-1)%5;
printf("%d\n", rest);
rest-=jiro[i];
if(rest<0)rest=0;
printf("%d\n", rest);
i=(i+1)%n;
}
scanf("%d",&n);
}
return 0;
}

211:デフォルトの名無しさん
09/02/03 10:13:29
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
   ・2つの分数の分子と分母を入力すると,それらの和・差・積・商を
    出力する.データは構造体で表現すること.
   ・分数計算では通分・約分には最大公約数が必要になる.通分には分母の最小公倍数が,
約分には最第公約数が必要である.したがってこれらを計算する関数をそれぞれ作る.
   ・最大公約数を求めるには,次のアルゴリズムを使うとよい(ユークリッドの互除法).
    ① mをnで割る (ただしm>n).
    ② ①の割る数を①の余りで割る.
    ③ ②の割る数を②の余りで割る.
    ④ 以下同様に,余りが0になるまで繰り返し,そのときの「割る数」が最大公約数になる.
   ・2つの数,m,nの最小公倍数は,m*n/(mとnの最大公約数)で求めることができる.


   (実行例)
    1つめの分数の分子・分母の入力―>3  4
    2つめの分数の分子・分母の入力―>1  6
    和:11 / 12
    差: 7 / 12
    積: 1 / 8
    商: 9 / 2

[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 今週中ぐらい
[5] その他の制限: 繰り返し文、条件判断文、構造体を勉強しました。
初心者なので、初心者にもわかるようなプログラムをお願いします。

212:デフォルトの名無しさん
09/02/03 11:25:26
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows Vista 
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月04日17:00まで]
[5] その他の制限:

213:デフォルトの名無しさん
09/02/03 11:28:51
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows Vista 
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月04日17:00まで]
[5] その他の制限:

214:デフォルトの名無しさん
09/02/03 11:36:27
>>149
これ見てから考えな。あと、これくらい一つのファイルにまとめろ。

215:デフォルトの名無しさん
09/02/03 11:40:08
>>212
#include <stdio.h>
int main(void) {
int i, j, n;
printf("段数を入力してください: ");
scanf("%d", &n);
for(i = 0; i < n; i++) {
for(j = 0; j < i + 1; j++) printf("*");
printf("\n");
}
return 0;
}

216:デフォルトの名無しさん
09/02/03 11:41:04
>>211
構造体はどういう形で作ればいいんだ?
指定なし?
なしなら授業で作った構造体を1つ晒してくれ

217:デフォルトの名無しさん
09/02/03 11:42:41
>>213
#include <stdio.h>
int main(void) {
int i, j, n;
printf("段数を入力してください: ");
scanf("%d", &n);
for(i = 0; i < n; i++) {
for(j = 0; j < i; j++) printf(" ");
for(j = 0; j < (n - i) * 2 - 1; j++) printf("*");
printf("\n");
}
return 0;
}

218:デフォルトの名無しさん
09/02/03 12:48:06
>>211
どう?
#include <stdio.h>
typedef struct bunsu{int bunshi,bunbo;} BUNSU;
int main(){
BUNSU bunsu1,bunsu2;
printf("1つめの分数の分子・分母の入力->\n");scanf("%d%d",&(bunsu1.bunshi),&(bunsu1.bunbo));
printf("2つめの分数の分子・分母の入力->\n");scanf("%d%d",&(bunsu2.bunshi),&(bunsu2.bunbo));
int bunbo=bunsu1.bunbo*bunsu2.bunbo;int bunshi=bunsu1.bunshi*bunsu2.bunbo+bunsu2.bunshi*bunsu1.bunbo;
int GCD = gcd(bunshi,bunbo);
printf("和:%d / %d\n",bunshi/GCD,bunbo/GCD);
//
bunshi=bunshi=bunsu1.bunshi*bunsu2.bunbo-bunsu2.bunshi*bunsu1.bunbo;
GCD = gcd(bunshi,bunbo);
printf("差:%d / %d\n",bunshi/GCD,bunbo/GCD);
//
bunshi=bunshi=bunsu1.bunshi*bunsu2.bunshi;
GCD = gcd(bunshi,bunbo);
printf("積:%d / %d\n",bunshi/GCD,bunbo/GCD);
//
bunshi=bunshi=bunsu1.bunshi*bunsu2.bunbo;
bunbo=bunsu1.bunbo*bunsu2.bunshi;
GCD = gcd(bunshi,bunbo);
printf("商:%d / %d\n",bunshi/GCD,bunbo/GCD);
return 0;
}
int gcd(int m,int n){
if(m<n){int temp=m;m=n; n=temp;}
int amari;
while((amari=m%n)!=0){m=n;n=amari;}
return n;
}

219:デフォルトの名無しさん
09/02/03 13:18:18
全部bunではじめるなよ。 bunsu とbunsu1じゃ大違いだろ。int int1;と同じ。
編集してみた。
#include <stdio.h>
typedef struct bunsu{int son,mom;} BUNSU;

int main(){
BUNSU A,B;
int new_mom,GCD;
printf("1つめの分数の分子・分母の入力-> \t"); scanf("%d %d",&(A.son), &(A.mom));
printf("2つめの分数の分子・分母の入力-> \t"); scanf("%d %d",&(B.son), &(B.mom));

GCD = gcd(A.mom,B,mom); new_mom = (A.mom*B.mom)/GCD; // 通分
GCD = gcd(new_mom,A.son+B.son);
printf("和:%d / %d\n",(A.son+B.son)/GCD,new_mom/GCD);
GCD = gcd(new_mom,A.son-B.son);
printf("差:%d / %d\n",(A.son-B.son)/GCD,new_mom/GCD);
GCD = gcd(A.son*B.son,A.mom*B.mom);
printf("積:%d / %d\n",(A.son*B.son)/GCD,(A.mom*B.mom)/GCD);
GCD = gcd(A.son*B.mom,A.mom*B.son);
printf("商:%d / %d\n",(A.son*B.mom)/GCD,(A.mom*B.son)/GCD);
return 0;
}
int gcd(int m,int n){
if(m<n){int temp=m;m=n; n=temp;}
int amari;
while((amari=m%n)!=0){m=n;n=amari;}
return n;

220:デフォルトの名無しさん
09/02/03 13:28:11
>>219
そんなのを気にするくらいなら
BUNSU bunsu_add(BUNSU a, BUNSU b);
的なのを作ったほうがよくないか?

221:デフォルトの名無しさん
09/02/03 13:32:37
>>220
ツッコミドコロは、そこじゃないな。

222:デフォルトの名無しさん
09/02/03 13:39:36
>>218をbun -> "空白"にWORDで置換してみると
文字数 896 -> 680。実にソースの24%がbun成分です。もはやネタソースだろ。

223:デフォルトの名無しさん
09/02/03 13:39:52
大文字の変数とかやめてよ。
しかも一文字

224:デフォルトの名無しさん
09/02/03 13:47:10
分子が息子で分母がお母さんかw

225:デフォルトの名無しさん
09/02/03 13:49:17
>>222
一文字変数にしてご満悦って、70年代の世界からでも来たのかよ?

226:デフォルトの名無しさん
09/02/03 13:50:00
>>219
通分が分からないって、ありえないだろ。
いじらなくても変数名だけ変えられたし。

227:219
09/02/03 13:50:29
小さいプログラムや、ローカルな変数の場合、無駄に長い変数は望ましくないと考えるが。
a,c,i,xは基本の型で、行列や構造体等A,Ary,Array場合によるが大文字も使う。

特にVBとか別言語触れてからは、使い分けるようになった。
>>224 ソースコードで変な想像したら負け組(new_mom?A.mom*B.son:A.son*B.momとか)

228:デフォルトの名無しさん
09/02/03 13:50:52
>>227
ばかか

229:デフォルトの名無しさん
09/02/03 13:52:31
>>227
バカだから、テストどころかコンパイルもしないで貼ってみたわけね・・・

230:デフォルトの名無しさん
09/02/03 13:52:55
>>227
小学校からやり直せよ

231:デフォルトの名無しさん
09/02/03 13:54:02
>>227
そもそも>>219は計算が間違ってるwww

232:デフォルトの名無しさん
09/02/03 14:09:51
計算しなければどうということはない

233:デフォルトの名無しさん
09/02/03 14:18:21
[1] 授業単元: アルゴリズムと数値計算
[2] ニュートン法とオイラー法で√2の近似値を計算するプログラムを作れ
ただし、計算は50ステップ行い、それぞれの初期値とsqrt(2)との差を表示する事。
初期値は各々が定めてよい
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VC2005EE
 [3.3] 言語:C
[4] 期限:09/02/04迄
[5] その他の制限:
文字表示・繰り返し文・条件判断とオイラー法の計算は分かります


234:デフォルトの名無しさん
09/02/03 14:58:41
>>233
オイラー法ってこんなか?
#include <stdio.h>
#include <math.h>
double newton(){
double x=1.0;
int i;
for(i=0;i<50;i++){
x=x-(x*x-2)/(2*x);
}
return x;
}
double euler(){
int n=50;
double x=1.0,h=(double)(2-1)/n;
int i;
for(i=0;i<n;i++){
x=x+h/(2*x);
}
return x;
}
int main(){
double temp=newton();
printf("sqrt(2):%f,newton:%f,差:%f\n",sqrt(2),temp,sqrt(2)-temp);
temp=euler();
printf("sqrt(2):%f,euler:%f,差:%f\n",sqrt(2),temp,sqrt(2)-temp);
return 0;
}


235:デフォルトの名無しさん
09/02/03 15:19:50
>>227
VBに触れたから呪われたんだな

236:デフォルトの名無しさん
09/02/03 16:04:45
>>234
ありがとうございます!
for文の中身1行で表せるんですね。
初期値表示と(double)(2-1)を2.0-1.0など軽く置き換えて完成しました。

237:デフォルトの名無しさん
09/02/03 19:48:11
>>193
O(N^2)じゃなくO(NlgN)だ

238:デフォルトの名無しさん
09/02/03 20:41:50
だいたい、プログラム入れてみるとxln(x)が定数なしで自己相関関数に一致してるくらいだな。
つまり、O(NlnN)だな。でも、NlogNだと思ってて、N^2だったってよりよくない?

239:デフォルトの名無しさん
09/02/03 20:51:59
うん。

240:デフォルトの名無しさん
09/02/03 21:18:36
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
 角度はラジアン単位(rad),度単位(degree)【°】で表される.さらに 度単位は 32.4°と10進小数表示する場合と
32度24分と度分秒で表示する場合がある.(60秒で1分, 60分で1度)

①2つの角度(度単位)を10進小数点2桁 でキーボードから入力し(例  69.21° と 33.73° ) 
 それらを度分秒単位で 表示させるプログラムを作成しなさい.

②さらに度分秒単位で表示された2つの角度の差を求め,度分秒単位で表示しなさい.
 計算は度分秒単位のまま引き算すること(60進法の引き算アルゴリズムを作成すること).

[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年2月4日 13:00
[5] その他の制限: よろしくお願いします

241:デフォルトの名無しさん
09/02/03 21:25:50
キーボードから入力し(例  69.21° と 33.73° )
2バイト文字か?まずその入力ができるかが問題だ。
Alt+半角で全角打てるけど、(例 69.21 と 33.73)の間違えだと言ってくれ。

242:デフォルトの名無しさん
09/02/03 21:37:58
>>241
すみません
半角です

243:デフォルトの名無しさん
09/02/03 22:03:28
>>211のものですが、>>219をコンパイルしたら
和と差が計算できなかったのですが、どうすれば
いいでしょうか?

どなたか教えてください。

244:デフォルトの名無しさん
09/02/03 22:18:25
A.son *= B.mom; B.son *= A.mom; A.mom=B.mom=(A.mom*B.mom); // 通分(約分せず)
GCD = gcd(A.mom,A.son+B.son);
printf("和:%d / %d\n",(A.son+B.son)/GCD,A.mom/GCD);
GCD = gcd(A.mom,A.son-B.son);
printf("差:%d / %d\n",(A.son-B.son)/GCD,A.mom/GCD);

245:デフォルトの名無しさん
09/02/03 22:23:43
分母: mom
分子: son
っていうネーミングセンスが素敵だ

246:デフォルトの名無しさん
09/02/03 22:36:37
辞書片手に英語にしまくったら単語の意味を忘れて自分で読めないというのは聞かなくもないけれど、
日本語の一部を切り出して英語にするっていうのは新しい。

247:デフォルトの名無しさん
09/02/03 22:40:47
>>240
誤差がぁぁぁ
URLリンク(kansai2channeler.hp.infoseek.co.jp)

248:デフォルトの名無しさん
09/02/03 22:42:30
>>240
#include<stdio.h>
#include<math.h>
typedef struct { int deg, min, sec; } Degree;
void rad2deg(Degree *pdeg, double rad) {
pdeg->deg = (int)rad;
rad = (fabs(rad) - fabs(pdeg->deg)) * 60;
pdeg->min = (int)rad;
rad = (rad - pdeg->min) * 60;
pdeg->sec = (int)rad;
}
void print_deg(const Degree *pdeg) {
printf("%d度%02d分%02d秒\n", pdeg->deg, pdeg->min, pdeg->sec);
}
void degsub(Degree *pdiff, const Degree *pdeg1, const Degree *pdeg2) {
pdiff->sec = pdeg1->sec - pdeg2->sec;
pdiff->min = pdeg1->min - pdeg2->min;
pdiff->deg = pdeg1->deg - pdeg2->deg;
if (pdiff->sec < 0) { pdiff->sec += 60; pdiff->min --; }
if (pdiff->min < 0) { pdiff->min += 60; pdiff->deg --; }
}
int main() {
double rad1, rad2;
Degree deg1, deg2, degdiff;
printf("radian1="); scanf("%lf", &rad1);
printf("radian2="); scanf("%lf", &rad2);
rad2deg(°1, rad1); printf("degree1="); print_deg(°1);
rad2deg(°2, rad2); printf("degree2="); print_deg(°2);
degsub(°diff, °1, °2); printf("degree1-degree2="); print_deg(°diff);
return 0;
}

249:デフォルトの名無しさん
09/02/03 22:55:09
>>240の人気に嫉妬
#include <stdio.h>
#include <math.h>
struct ds_t { int d; int m; int s;};
struct ds_t dec2ds(double dd){
  struct ds_t ds;
  ds.d = floor(dd);
  ds.m = floor(60*(dd - ds.d) + 0.5/60);
  ds.s = floor(3600*(dd - ds.d) - 60*ds.m + 0.5);
  return ds;
}
void print_ds(struct ds_t *ds){
  printf("%d.%d\'%d\"\n", ds->d, ds->m, ds->s);
}
struct ds_t sub_ds(struct ds_t *ds1, struct ds_t *ds2){
  struct ds_t ds3;
  ds3.d = ds1->d - ds2->d;
  ds3.m = ds1->m - ds2->m;
  ds3.s = ds1->s - ds2->s;
  if(ds3.s < 0) ds3.s += 60, ds3.m--;
  if(ds3.m < 0) ds3.m += 60, ds3.d--;
  return ds3;
}
int main(void){
  double dd1, dd2;
  struct ds_t ds1, ds2, ds3;
  scanf("%lf%lf", &dd1, &dd2);
  ds1 = dec2ds(dd1); ds2 = dec2ds(dd2);
  print_ds(&ds1); print_ds(&ds2);
  ds3 = sub_ds(&ds1, &ds2);
  return 0;
}

250:248
09/02/03 22:57:35
degsubの符号の扱いが全然だめだった。>>248は取り下げます。

251:デフォルトの名無しさん
09/02/03 22:58:00
>>243
そのコードはクズだ。捨てろ。

252:デフォルトの名無しさん
09/02/03 23:00:11
[1] 授業単元:ループ
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:WindowsXP
 [3.2]コンパイラ名とバージョン:C++ Compiler 5.5/Turbo Debugger
 [3.3] 言語:C
[4] 期限:一ヶ月以内
[5] その他の制限:2重ループを使うらしいですが使わなくてもいいそうです。

253:デフォルトの名無しさん
09/02/03 23:01:15
>>244
そこで上書きして残りの積と商をどうするツモリだ。

254:デフォルトの名無しさん
09/02/03 23:03:53
>>253
分母と分子に同じ数掛けてるから大丈夫

255:デフォルトの名無しさん
09/02/03 23:16:22
そうだよね。>>253は2/4拍子と3/6拍子の違いが分かってらっしゃる。
#include<stdio.h>
int main(){
int i,j,tmp,data[5+1];
for(i=0;i<10;i++){
printf("%d人目",i);
scanf("%d",&tmp);
data[tmp]++;
}
for(i=1;i<=5;i++){
printf("\n%d",i);
for(j=0;j<data[i];j++) printf("*");
}
return 0;
}

256:デフォルトの名無しさん
09/02/03 23:16:46
どなたか>>134をお願いいたします。ググってもわかりません。。。

257:デフォルトの名無しさん
09/02/03 23:21:21
>>256
一番上に書く名前が分かりません><

マジレスはお断りしておきます

258:デフォルトの名無しさん
09/02/03 23:23:35
>>247
degree[i][1] = (int)((input[i] - (int)input[i]) * 10) * 6;
degree[i][2] = (int)((input[i] * 10 - (int)(input[i] * 10)) * 10) * 6;
この計算式は何なのか、後でAAで提出するように。


259:デフォルトの名無しさん
09/02/03 23:23:40
5秒で答えにたどり着いたけど
134は馬鹿なの?死ぬの?

260:240
09/02/03 23:28:32
>>247-249
ありがとうございました

261:デフォルトの名無しさん
09/02/03 23:34:09
>>256
フローチャートは詳しくないが日本語にそれらしく訳してくと
開始
ファイルをfpiに読み込む
ファイルの先頭からデータ数をnへ代入
ループ iをn回 配列xのi番目にi番目のデータを代入
ループ iをn-1回 (中身jループ)
/* */ ループ jをi+1からnまで
/* */ /* */ 分岐 x[i]>x[j] --YES--> x[i]とx[j]を交換 -->jループへ
/* */ /* */ --NO-->jループへ
ループ iをn回 iとx[i]を表示
終了

262:デフォルトの名無しさん
09/02/03 23:50:17
>>134
オフィスを入れてなかった。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

263:デフォルトの名無しさん
09/02/03 23:55:15
>>262
力作乙
だが、extention error だ
名前と実体が異なっている

264:デフォルトの名無しさん
09/02/04 00:01:47
>>263
そんな突っ込みは想定していない。

OpenOfficeの操作覚えようかな……。

265:デフォルトの名無しさん
09/02/04 00:25:25
>>252
#include <stdio.h>

int main(void)
{
int a[10], c[5], i, j;
for (i = 0; i < 9; ++i) scanf("%d,", &a[i]); scanf("%d", &a[9]);
for (i = 0; i < 5; ++i) c[i] = 0;
for (i = 0; i < 10; ++i) c[a[i] - 1]++;
for (i = 0; i < 5; ++i) {
printf("%d", 5 - i);
for (j = 0; j < c[4 - i]; ++j) printf("*");
printf("\n");
}
return 0;
}

266:デフォルトの名無しさん
09/02/04 00:56:37
>>172
コンソールアプリでいいんだよね?
言語はCとC++どっち?

267:デフォルトの名無しさん
09/02/04 02:13:27
>>266
>[5] その他の制限: まだ基礎段階なので、なるべく簡単なプログラムがいいです。         画像の取り込みとかはせずに、文章で表示すればいいらしいです。 Visual c++がよくわからないので、よろしくお願いします
C++のWindowアプリケーションを望んでいるようには見えない。
求めてるのは”なるべく簡単”でしょ。

268:デフォルトの名無しさん
09/02/04 14:27:20
[1] 授業単元: プロムラミング演習2
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
 [3.1] OS: Windows
 [3.3] 言語:C言語
[4] 期限:2月5日まで

[5] その他の制限:すみません自力ではわかりません.ご指導お願いします

269:デフォルトの名無しさん
09/02/04 14:46:26
void bitpart(int x)
{
char str[33]="";
for(b=31;b>=0;b--){
sprintf(str,"%s%d",(x>>b)&1);
return str;
}
> jprintf(bit pattern=%s\n",bitpart(x,bit));
なんかちがう

270:897です
09/02/04 14:51:10
すみません...
打ち間違いでした
printf("bit pattern =%s\n", bitpart(x,bit));
です.すみません

271:デフォルトの名無しさん
09/02/04 14:51:44
>>268
char*bitpart(int x,char *bit)
{
int b;
bit[32] = '\0';
for(b=31;b>=0;b--){
sprintf(&bit[31-b],"%d",(x>>b)&1);
}
return bit;
}

272:デフォルトの名無しさん
09/02/04 15:00:15
>>271
早い返事ありがとうございます
助かりました

273:897
09/02/04 17:01:19
[1] 授業単元: C言語
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
 [3.1] OS: Windows
 [3.3] 言語:C言語
[4] 期限:2月5日まで

[5] その他:お願いします

274:デフォルトの名無しさん
09/02/04 17:17:20
>>273
void insert(int num, struct node *p)
{
struct node *n;

while (p->next != NULL && p->next->key < num) {
p = p->next;
}

n = (struct node *)malloc(sizeof *n);
n->key = num;
n->next = p->next;
p->next = n;
}

275:デフォルトの名無しさん
09/02/04 17:27:54
>>274
ありがとうございます!!
なんとかいけそうです

276:デフォルトの名無しさん
09/02/04 17:46:14
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月05日12:00まで]
[5] その他の制限:

よろしくお願いします。

277:デフォルトの名無しさん
09/02/04 18:01:53
>>276
#include <stdio.h>

int main(void)
{
int kinshu[10] = { 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1 };
int i, j, c, n;
printf("金額を入力してください: "); scanf("%d", &n);

for (i = 0; i < 10; ++i) {
for (c = 0; n / kinshu[i]; ++c) n -= kinshu[i];
printf("%5d円: %d枚\n", kinshu[i], c);
}
return 0;
}


278:デフォルトの名無しさん
09/02/04 18:10:45
> for (c = 0; n / kinshu[i]; ++c) n -= kinshu[i];
c=n/kinshu[i]; n-= c*kinsyu[i];

279:デフォルトの名無しさん
09/02/04 18:37:30
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows XP
 [3.3] 言語: C
[4] 期限: 2009年02月05日まで
問題多いですがよろしくお願いします。

280:デフォルトの名無しさん
09/02/04 18:38:16
[1] 授業単元: C言語
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
 [3.3] 言語:C言語
[4] 期限:2月5日まで
[5] その他: 違うところで同様の質問をして,いろいろヒントをもらった
 のですが,いまいちわかりません.その時こちらを紹介されたので,
 どうかお願いします

281:デフォルトの名無しさん
09/02/04 18:52:39
>>280
int pop(void)
{
struct node *n = TOP.next;

if (n == NULL) {
fprintf(stderr, "no stack\n");
return 0;
}
else {
int num = n->key;
TOP.next = n->next;
free(n);
return num;
}
}

int main(void)
{
TOP.next = NULL;

push(21);
push(42);

printf("%d\n", pop());
printf("%d\n", pop());

return 0;
}

282:デフォルトの名無しさん
09/02/04 19:29:50
>>279
どんだけ丸投げだよ。

283:デフォルトの名無しさん
09/02/04 19:37:05
丸投げスレなんだから当然だろ?


ってこれは・・・w

284:280
09/02/04 19:46:00
>>281
ありがとうございます
助かりました!!

285:Rm
09/02/05 00:09:41
[1] 計算システム(C言語)
[2] N×Nの行列A,Bに大して、次のようなプログラムを作成せよ。
・A+B、A-B、A×Bを出力するプログラム

・Aの逆行列を出力するプログラム(ピボット選択法)

ただし
・Nはdefineで4と定義する。
・A,Bそれぞれの成分データはdouble型配列に保存する。
・行列A,Bの各成分のデータは時間に依存した種から与えられる疑似関数により自動生成する。

URLリンク(mathweb.sc.niigata-u.ac.jp)

実際ほかの課題もわかりません。1は出来ましたが。

[3] 環境
 [3.1] OS:Windows
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 5日


よろしくお願いいたします。



286:デフォルトの名無しさん
09/02/05 00:52:15
>>273
URLリンク(kansai2channeler.hp.infoseek.co.jp)

287:280 です
09/02/05 02:14:54
>>281 さんの方から解答をいただいたのですが
main関数の所がいまいちわかりません
できたらもう一度お願いします.

288:デフォルトの名無しさん
09/02/05 02:24:30
>>287
わかりませんもなにも見たまんまpushしてpopしてるだけだと思うが
もう一度といわれてもこれ以外書きようがないと思うべ?
どこがどうわからないか考え直してきなさい

289:280 です
09/02/05 02:39:14
push(21);
push(42);
これがよくわかりません
コンパイルしてもこれしかでないのですが・・・

mainは、任意個数の数字を入力させてそれをpushし、
EOFになったら逆にpopで値を取り出して画面に表示する
みたいな感じにしたいのですが・・

290:デフォルトの名無しさん
09/02/05 02:57:53
>>289
>pushとpopが正常に動作をしているか確かめられるプログラムを作成してください
といわれて>>289の下半分の内容を読み取れなんてエスパーじゃない限り無理
int main(void)
{
TOP.next = NULL;

int d;
while(scanf("%d", &d)!=EOF) push(d);
while(TOP.next) printf("%d\n", pop());
return 0;
}

291:280 です
09/02/05 03:03:11
>>290
言葉足らずですみません
夜遅くわざわざありがとうございます


292:デフォルトの名無しさん
09/02/05 03:06:14
十分テストコードになってると思うんだけどな。

293:デフォルトの名無しさん
09/02/05 03:23:22
while(1)
{         
     wakeup;
     static int day;
     int time = wakeuptime();
     while(1)
     {
          2ch;
          if(time == Daytime())
          {
              lunch;
          };
          if(time == nighttime())
          {
              supper;
          };
          if( time == sleeptime();)
          {
              break;
          }
          time++;
     }
      day++;
     sleep;
}

こんな毎日、無限ループって怖いよな;;




294:デフォルトの名無しさん
09/02/05 03:48:10
>>285
和、差、積のやつ
URLリンク(kansai2channeler.hp.infoseek.co.jp)

295:285
09/02/05 04:09:48
>>294

ありがとうございます。よろしければ逆行列プログラムもお願いします。

296:デフォルトの名無しさん
09/02/05 04:54:22
>>295
URLリンク(kansai2channeler.hp.infoseek.co.jp)

297:285
09/02/05 05:24:02
>>296

このような時間帯にわざわざありがとうございます。
おかげ様で助かりました。

298:279
09/02/05 06:58:42
>>282
>>283
確かにこれはひどいですよね…
1問でもいいのでお願いしたいです。
一応自分でもやっていますが、数学が苦手なもので…

299:デフォルトの名無しさん
09/02/05 12:42:16
>>167です。
自己解決したので取り下げます。スレ汚し失礼しました。

300:デフォルトの名無しさん
09/02/05 13:13:46
1] 授業単元: C言語
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
 [3.1] OS: Windows
 [3.3] 言語:C言語
[4] 期限:2月6日まで

[5] その他:お願いします

301:デフォルトの名無しさん
09/02/05 14:25:46
[1] 授業単元:C言語プログラミング
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:明日まで
[5] その他の制限:与えられたプログラムを改造(付け足し)する

302:デフォルトの名無しさん
09/02/05 15:16:54
>>301
#include <stdio.h>

int main(void)
{
int i, j, c;
char seq[] = "tion";

i = 0;
while ((c = getchar()) != EOF) {
if (c == seq[i]) {
i++;
if (i == sizeof(seq) - 1) {
break;
}
}
else {
for (j = 0; j < i; j++) {
putchar(seq[j]);
}
i = 0;
putchar(c);
}
}

return 0;
}

303:デフォルトの名無しさん
09/02/05 15:18:39
300 の問題って リダイレクトじゃだめなのか?

304:デフォルトの名無しさん
09/02/05 15:26:50
>>300
#define INPUT_FILE_NAME "foo.in"
#define OUTPUT_FILE_NAME "bar.out"
int main(void)
{
struct student A[Nmax];
double avg=0;
int i;
FILE *fin, *fout;
fin = fopen(INPUT_FILE_NAME, "r");
if (fin == NULL) { perror(INPUT_FILE_NAME); return 1; }
for( i=0; i<Nmax; i++){
fscanf (fin, "%d %d %d %s", &A[i].sc1,&A[i].sc2,&A[i].sc3,A[i].name);
}
fclose(fin);
fout = fopen(OUTPUT_FILE_NAME, "w");
if (fout == NULL) { perror(OUTPUT_FILE_NAME); return 1; }
fprintf(fout, "Score Name\n");
fprintf(fout, "-------------------------------------------\n");
for(i = 0;i <Nmax; i++){
A[i].total =(A[i].sc1+A[i].sc2)*0.4+A[i].sc3;
A[i].res =(A[i].total>=60)?"A": "F";
avg += A[i].total;
fprintf(fout, "%6.1f %s %s\n", A[i].total,A[i].res, A[i].name);
}
fprintf(fout, "---------------------------------------------\n");
fprintf(fout, "%6.1f (Avg)\n",avg/Nmax);
fclose(fout);
return 0;
}

305:デフォルトの名無しさん
09/02/05 16:09:19
>>302 "ttion"
>>301
URLリンク(kansai2channeler.hp.infoseek.co.jp)

306: ◆g8eVFLrbyk
09/02/05 16:49:09
[1] 授業単元:C++言語プログラミング
[2] 問題文:URLリンク(www.s.kyushu-u.ac.jp)
問題2と3をおねがいします。
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++言語
[4] 期限:明日まで
[5] その他の制限:与えられたプログラムを改造(付け足し)する


307:suzuki
09/02/05 16:59:16
君は不可だ!
調査した上で厳正に処理するから首を洗っとれ

308:302
09/02/05 17:09:27
>>305
あ、ホントだ。俺の間違ってたね。

309:デフォルトの名無しさん
09/02/05 17:27:29
スレチですいません。
今日面接でプログラミングの手書きのテストをやってきました。
テスト終わって家に帰ってから効率のいいコードの書き方を思い出しました。
テスト中は時間のことが気になって思い出せずとりあえず動くコードで書きました。

テストの場合は白紙や書き途中で提出するくらいなら、
とりあえず動くコードで書いておけば特に問題はないですよね?

310:デフォルトの名無しさん
09/02/05 17:30:05
宿題やテストの採点思想次第だわな

311:デフォルトの名無しさん
09/02/05 19:25:48
>>309
「動かないよりマシ」って言って欲しいんだろうけど、
採点者が何を見ているか次第なんじゃね?

Fizz-Buzz問題って日本でも実施してるのかな?

ナベアツ問題は、このスレでも何度か回答されてるよね。

プログラマーなら「FizzBuzz問題」解けるよな?
スレリンク(prog板)
Fizz Buzz(ウィキペディア)
URLリンク(ja.wikipedia.org)
どうしてプログラマに・・・プログラムが書けないのか?
URLリンク(www.aoky.net)

312:301
09/02/05 20:15:18
>>305
すみません。問題が間違ってました
正しくはURLリンク(kansai2channeler.hp.infoseek.co.jp)でした

313:デフォルトの名無しさん
09/02/05 20:23:27
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
データファイル(URLリンク(kansai2channeler.hp.infoseek.co.jp)) には,1000 人の「学籍番号,科目A,科目B,科目C の各点数」が学籍番号順に並んでいる.
そのデータファイルを元に,キーボードから入力された学籍番号の学生の成績(含:3科目の合計点の順位)を表示するプログラムを作れ.
探索は二分探索を使い,ソートにはクイックソートを使うこと.
合計点が同じになる学生はいないということは既知とせよ.
学籍番号が存在しない場合は,”No data ”と表示するようにせよ.
表示は以下のようにせよ.

Input A Student Number: 14【Enter】

Ranking : #269 /*最高得点は1位とせよ.*/
Subject A : 86
Subject B : 59.1
Subject C : 220.42
Total : 365.52
[3] 環境
 [3.1] OS:Win
 [3.2] gcc
 [3.3] C
[4] 2月6日23:59

おねがいします。

314:デフォルトの名無しさん
09/02/05 21:03:57
>>312
#include<stdio.h>
#include<string.h>

int main(void){
int c, i;
char history[4*2]="";

for(i=0;(c=getchar())!=EOF;i++){
history[i%4]=history[(i%4)+4]=c;
printf("%c", c);
if(strncmp(&history[(i+1)%4], "tion", 4)==0) break;
}
return 0;
}

315:305
09/02/05 21:07:49
上のプログラムに、入力列としてt、i、o、nの並びが与えられた場合にも入力を終了する機能を追加せよ
例 This is important information for me! の場合 This is important informaと出力
This scene is romantic の場合 This scene is romantic (tionの並びでないのでそのまま出力)

上のプログラムに、入力列としてt、i、o、nの並びが与えられた場合にも入力を終了する機能を追加せよ
例 This is important information for me! の場合 This is important informationと出力
This scene is romantic の場合 This scene is romantic (tionの並びでないのでそのまま出力)

316:305
09/02/05 23:50:36
>>314 その手があったか。参ったのでソース貼り付け。
#include<stdio.h>

#define LEN 4
char tion[LEN + 1] = "tion";

int main(void)
{
  int c = '\0', k = 0;

  while ((c = getchar()) != EOF && k < LEN) {
    if (c == tion[0])
      k = 1;
    else if (k > 0) {
      if (c == tion[k])
        k++;
      else
        k = 0;
    }
    putchar(c);
  }
  return 0;
}

317:301
09/02/06 00:46:55
皆さんありがとうございました

318:デフォルトの名無しさん
09/02/06 02:48:49
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
ニュートン法と二分法の両方を用いて,直線y = x + 1/2 と単位円
x2 + y2 = 1 の交点の座標の近似解(小数点以下第6位まで)を求めよ.
1つのプログラムに書くこと(ニュートン法と二分法に関する箇所はmain
関数から独立させよ)
ニュートン法も二分法もともに何回で収束したかが分かるようせよ.
関数へのポインタは必ず使うこと.
表記は例えば以下のようにすること:

Newton method:
Lower part: count : ????
sol :( ?????, ????? )
Upper part: count : ????
sol :( ?????, ????? )

二分法で用いる初期値は[a,b]= [-1,1]とせよ
ニュートン法で用いる初期値は2つとも0とせよ。その際,1つの関数は
収束しない.収束しない場合は,求められないと分かった時点で計算を終了
するように工夫せよ.また,そのときは以下のように表記せよ.
sol : Not converge
収束しない場合は,なぜ収束しないのかをコメントとして書くこと.
[3] 環境
 [3.1] OS: windows
 [3.2]gcc
 [3.3] 言語: C
[4] 2月6日の夜まで

期限がせまっていて申し訳ありませんが自分でできなかったためよろしくおねがいします><

319:デフォルトの名無しさん
09/02/06 03:27:02
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *crypt(const char *key, const char *salt);
#define MAXLEN 16
#define TRIPLEN 10
#define PATH "trip.out"
typedef unsigned char uchar;
int get_saltc_old(uchar c){
if(c < '.' || c > 'z') return '.';
if(c >= ':' && c <= '@') return c - ':' + 'A'; // :;<=>?@ - ABCDEFG
if(c >= '[' && c <= '`') return c - '[' + 'a'; // [\]^_` - abcdef
return c;
}
int gen_trip(uchar *o, int n, uchar *w){
uchar sal[3];
uchar *t;
sal[0] = get_saltc_old(n > 1 ? w[1] : 'H');
sal[1] = get_saltc_old(n > 2 ? w[2] : '.');
sal[2] = '\0';
t = crypt(w, sal);
strncpy(o, t + strlen(t) - TRIPLEN, TRIPLEN);
return 0;
}


320:デフォルトの名無しさん
09/02/06 03:34:04
int gen_combination(uchar *o, int n, int m, uchar *pos){
int i;
for(i = 0; i < n; i++) o[i] = pos[i];
for(i = n - 1; i >= 0; i--){
if(pos[i] < m - 1){
pos[i]++;
return 1;
}else{
pos[i] = 0;
}
}
return 0;
}
int gen_word_list(uchar *w, int n, int m, uchar *s){
static uchar *pos = NULL;
int i;
if(!pos){
pos = (uchar *)malloc(sizeof(uchar) * n);
for(i = 0; i < n; i++) pos[i] = 0;
}
if(gen_combination(w, n, m, pos)){
for(i = 0; i < n; i++) w[i] = s[w[i]];
w[n] = '\0';
return 1;
}
if(pos){
free(pos);
pos = NULL;
}
w[0] = '\0';
return 0;
}

321:デフォルトの名無しさん
09/02/06 03:34:39
int sout(char *path, char *s, int f){
FILE *fp;
if(f)
if((fp = fopen(path, "ab+")) != NULL){
fprintf(fp, "%s\n", s);
fclose(fp);
}
fprintf(stdout, "%s\n", s);
return 0;
}
int scantrip(int n, int m, uchar *s, uchar *f){
uchar *w, *t;
char buf[4096];
w = (uchar *)malloc(sizeof(uchar) * n + 1); w[n] = '\0';
t = (uchar *)malloc(sizeof(uchar) * TRIPLEN + 1); t[TRIPLEN] = '\0';
sprintf(buf, "'%s' in len %d", f, n); sout(PATH, buf, 1);
while(gen_word_list(w, n, m, s)){
gen_trip(t, n, w);
int b = n - 2;
if(w[n - 1] == '.' && (w[b] == '.' || w[b] == 'U')){ sprintf(buf, "%4d #%s %s %s", n, w, "----------------------------------------", t); sout(PATH, buf, 0); }
if(strstr(t, f)){ sprintf(buf, "%4d #%s %s", n, w, t); sout(PATH, buf, 1); }
}
if(t) free(t);
if(w) free(w);
return 0;
}

322:デフォルトの名無しさん
09/02/06 03:35:06
int main(int ac, char *av[]){
uchar *s="./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
uchar *f="Linux";
int i;
for(i = 1; i < MAXLEN; i++) scantrip(i, strlen(s), s, f);
return 0;
}

323:デフォルトの名無しさん
09/02/06 05:07:28
>>318
> 二分法で用いる初期値は[a,b]= [-1,1]とせよ
その間に、解が二つある気がする。

> ニュートン法で用いる初期値は2つとも0とせよ。その際,1つの関数は
> 収束しない.収束しない場合は,求められないと分かった時点で計算を終了
> するように工夫せよ.また,そのときは以下のように表記せよ.
> sol : Not converge
> 収束しない場合は,なぜ収束しないのかをコメントとして書くこと.
オレの知らないニュートン法?

324:デフォルトの名無しさん
09/02/06 05:54:45
>>313をやってみたんだけど
gccだと動作がおかしい
VCだと正常に動く
誰か原因を教えてくれ・・・・orz

gcc
URLリンク(kansai2channeler.hp.infoseek.co.jp)

VC
URLリンク(kansai2channeler.hp.infoseek.co.jp)

325:デフォルトの名無しさん
09/02/06 08:25:43
8828.c をVCに掛けてみたらどうなる。

326:デフォルトの名無しさん
09/02/06 08:39:11
>>325
そのままかけてみたが正常に動作した

gccだと標準入力を促すところまで行くが
直後のsscanfでプログラムが終了してしまう
一応OSはXPです

327:318
09/02/06 08:44:17
>>323
交差する点2つありますよね。両方とも求めるんだと思います。
二分法のアルゴリズムは
Step 1
f (a) < 0 かつf (b) > 0(または, f (a) > 0 かつf (b) < 0)を満たす
ような変数a, b の値を設定し,十分小さい正数ε を設定する.
Step 2
c = (a + b)/2 とし,
f (c) = 0 であれば,【Step 3】に移る.
f (c) > 0 であれば,b をc で置き換える.
f (c) < 0 であれば,a をc で置き換える.
|a-b| < 2ε であれば,【Step 3】に移る.
Step 3
c を解とする.

という感じらしいです。ニュートン法は反復の限界値を決めて(100回くらいに)
反復回数がそれを超えたら停止してほしいのですが・・。

328:デフォルトの名無しさん
09/02/06 11:30:38
>>324
sscanf(buf, "%d%lf%lf%lf",&(st[i].number),&(st[i].ascore),&(st[i].bscore),&(st[i].cscore));

"%d,%lf,%lf,%lf" に

329:デフォルトの名無しさん
09/02/06 12:48:40
>>327
> 二分法のアルゴリズムは
つまり、1セットの初期値からは、一つの解しか見つからないし・・・
xの式、f(x)=0になるxを探すワケだけど、f(a)とf(b)の符号が逆じゃなきゃいけないんだよね。
区間に二つ解があるということは、つまり、f(1)とf(-1)の符号はおんなじなわけだけど・・・?

> という感じらしいです。ニュートン法は反復の限界値を決めて(100回くらいに)
> 反復回数がそれを超えたら停止してほしいのですが・・。
初期値が二つといっているのだから、解の一つごとに初期値をおくように思うが、両方0にしろと言う。
オレの知っているニュートン法ではないようだ。

330:デフォルトの名無しさん
09/02/06 13:28:17
にぶんほう?

331:デフォルトの名無しさん
09/02/06 14:24:29
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): URLリンク(www.logos.ic.i.u-tokyo.ac.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2009年2月10日13:00まで
[5] その他の制限:特になし
ACM国際大学対抗プログラミングコンテスト国内予選2007問題Bです
既出だったらすまん
お頼みもうします

332:デフォルトの名無しさん
09/02/06 14:59:00
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月07日20:00まで]
[5] その他の制限:

333:デフォルトの名無しさん
09/02/06 15:08:21
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月07日20:00まで]
[5] その他の制限:

334:デフォルトの名無しさん
09/02/06 15:15:00
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク)
(1)区間演算ライブラリを作れ。(加減乗除のみでもOK)
(2)Gaussの消去法のプログラムを作り、それを区間演算化せよ

以上ですが、ソースコードのみでもかまいません

[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限:明日20時まで
[5] その他の制限: 特になし


335:デフォルトの名無しさん
09/02/06 15:25:11
>>334
> 以上ですが、ソースコードのみでもかまいません
ソースコード以外だと、何が付くの?

336:デフォルトの名無しさん
09/02/06 15:41:34
>>335 それだけじゃない
> [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
『等』・・・・こいつ相当のマニアか。
開発環境が書ききれないほど。ドンと来い。

> [3.3] 言語: (C/C++/どちらでも可 のいずれか)
pu-w

337:デフォルトの名無しさん
09/02/06 15:51:08
>>332
URLリンク(kansai2channeler.hp.infoseek.co.jp)

338:デフォルトの名無しさん
09/02/06 15:58:57
>>337
どうしようもない時以外に、goto使う奴は
どうしようもない奴だと思うぞ。

elseで全部つなげば解決じゃないですか。

339:デフォルトの名無しさん
09/02/06 16:13:48
>>331
素数を出すアルゴリズムがアレなのでめっちゃ遅いけど。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

340:デフォルトの名無しさん
09/02/06 16:23:22
>>338
>>332
URLリンク(kansai2channeler.hp.infoseek.co.jp)

341:デフォルトの名無しさん
09/02/06 16:24:18
>>338
しーっ・・・

342:338
09/02/06 16:30:32
>>341
これだけは言わせてくれ。>>340ネタ乙。

343:339
09/02/06 16:31:29
問題勘違いした…。
アジア地区予選の問題やってたorz

344:デフォルトの名無しさん
09/02/06 16:40:36
>>333
URLリンク(kansai2channeler.hp.infoseek.co.jp)

345:デフォルトの名無しさん
09/02/06 17:31:56
ちょっと漏れがあったようなので;;

[1] 授業単元:数値解析
[2] 問題文(含コード&リンク)
(1)区間演算ライブラリを作れ。(加減乗除のみでもOK)
(2)Gaussの消去法のプログラムを作り、それを区間演算化せよ

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:どちらでも可
[4] 期限:明日20時まで
[5] その他の制限: 特になし

346:313
09/02/06 20:57:11
>>324
>>328
324さんのプログラムを328さんの言うように修正してみたところ
データを読み込み、表示されるところまではいくのですが全ての数値が0になってしまいます。
どうすればいいでしょうか。。。

347:デフォルトの名無しさん
09/02/06 22:06:23
>>327
ニュートン法で100回も反復するとか時間の無駄だからな
初期値が悪くてもせいぜい10回だ

348:デフォルトの名無しさん
09/02/06 23:45:25
>>331
なんとなく、計算できているような気がする。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

349:デフォルトの名無しさん
09/02/07 04:11:05
>>348
関数とか要らないことに気づいたので、大分、短くなった。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

350:325
09/02/07 04:18:57
>>326
double total(Student st){
// return (st.ascore + st.bscore + st.cscore);
double a = (st.ascore + st.bscore + st.cscore);
return a;
}

>>346
// printf("%d%lf%lf%lf",&(st[i].number),&(st[i].ascore),&(st[i].bscore),&(st[i].cscore));
printf("%d%lf%lf%lf", (st[i].number), (st[i].ascore), (st[i].bscore), (st[i].cscore));

351:デフォルトの名無しさん
09/02/07 04:21:55
>>349
すごい短縮だな。(2階層くらいで関数化したら、もっと打ちやすかったんじゃ)
でも、元ファイルc++だろ? >>331はC指定かかってるよ。

352:デフォルトの名無しさん
09/02/07 04:33:39
>>351
C++ではないよ。-std=c99つけないとコンパイルできないけど。

353:デフォルトの名無しさん
09/02/07 04:48:34
>>352
「-std=c99つければ、gccでもコンパイルできるよ」かな?

354:325
09/02/07 04:54:11
>>326
double a;

do{
while((a=total(st[pl])) > x) pl++;
while((a=total(st[pr])) < x) pr--;

>>346 悪い、間違えた。君の言うとおりだ。

355:325
09/02/07 05:01:10
>>326
double a;

do{
pc = (pl + pr) / 2;
if((a=total(st[pc])) == key)
return pc;
else if((a=total(st[pc])) > key)

356:デフォルトの名無しさん
09/02/07 13:01:57
>>339>>343
>>348>>349
>>351->>353
有難うございます
アジア地区のもやってみたかったので助かりました
なんかテストいけそうな気がする

357:デフォルトの名無しさん
09/02/07 13:17:05
wwwwwwwwwwwwwwwwww

358:デフォルトの名無しさん
09/02/07 13:24:44
>>356
> なんかテストいけそうな気がする
ありえねー・・・

359:325
09/02/07 14:50:36
>>326
gcc -O3 8828.c -o 8828.exe

360:デフォルトの名無しさん
09/02/07 16:34:38
>>356
あるとおもいます。

361:デフォルトの名無しさん
09/02/07 16:48:39
??

362:デフォルトの名無しさん
09/02/07 17:06:55
説明しよう!
>起 >>356 いけそうな気が!
>承 >>358 ありえねー・・
>転 >>360 あると思います。
>結 >>361 ??
??に入る言葉を(ry

363:デフォルトの名無しさん
09/02/07 17:11:40
詩吟?

364:326
09/02/07 18:31:45
>>325
ありがとうございます。
Rankingの表示が出ないんですが簡単に治せますでしょうか。

365:326
09/02/07 18:42:21
return plにしたらできました!ありがとうございます。

366:325
09/02/07 18:55:07
え?return pl; って、何行目?参考までに。

367:326
09/02/07 19:58:10
50行目ですかね。。あれ違いますか><

368:325
09/02/07 20:17:42
Ranking#の値が、合ってれば良いけれど。
> Input A Student Number: 14【Enter】
> Ranking : #269 /*最高得点は1位とせよ.*/

尚こちらでは、>>350 上)の修正で直った。

369:324
09/02/07 20:24:17
こちらでも>>350の上の修正で
正常に動作することが確認できました

ちなみにどうして修正前では
正常に動作しなかったのか
理由は分かりますか?

370:325
09/02/07 20:26:57
わからない。回避方法は、ステップ実行してて見つけた。

371:324
09/02/07 20:32:53
そうですか
お手数おかけしました
ありがとうございました

372:326
09/02/07 21:28:36
URLリンク(kansai2channeler.hp.infoseek.co.jp)
このようにして実行するとRankingがすべて0になるんで、52行目のreturn -1;を
return -pr;に変えたところRankingが表示されました。(14のとき269位)
これで正常動作かなーと思ったんですが
例えば生徒番号1の動作みたところ表示される数値間違ってませんか?

373:デフォルトの名無しさん
09/02/07 21:38:07
return pl;を入れてなくて終了してたのは、
スタック領域のオーバーフローでセグメンテーション違反。

374:デフォルトの名無しさん
09/02/07 21:47:02
>>372
修正したソースを見せて。


375:326
09/02/07 21:52:26
URLリンク(kansai2channeler.hp.infoseek.co.jp)
これです。

376:デフォルトの名無しさん
09/02/07 23:22:19
>>375
mark_sortが変。
クイックソートやりたいんだろうけどできてない。
xを基準にして大小をわけてるけど
xがその境界にきてないから変なことになる。

mark_sortやめてqsort使ったら


377:デフォルトの名無しさん
09/02/07 23:36:39
>>376
こっちでは上手く動くようなのだけど、>>375のソースとの違いってあるかな?
URLリンク(www1.cts.ne.jp)

378:324
09/02/07 23:54:41
>>376
pivotの選び方に欠陥があることは承知しているが
最も単純な方法でクイックソートを作ったつもり

qsortを使わなかったのは問題にクイックソートを
使うよう指定されていたのでアルゴリズムを理解していることを
示す必要があると思ったから
その必要がなかったら確かにqsort関数を使った方が
高速にできると思う

379:デフォルトの名無しさん
09/02/08 00:26:38
>>377
double total(Student st); で3個の数値を合計している所が違う(追加)。

380:デフォルトの名無しさん
09/02/08 01:22:08
>>378 バグ取りの報酬として、cmp_doubleを使わなくては駄目な理由を調べて教えてくれ(取れてなかったらゴメンナサイ…)。

int cmp_double(double x, double y)
{
  return x > y ? 1 : x < y ? -1 : 0;
}

void mark_sort(Student *st, int left, int right){
  int pl = left;
  int pr = right;
  double x = total(st[(pl + pr) / 2]);
  while(1){
    while(cmp_double(total(st[pl]), x) > 0) pl++;
    while(cmp_double(total(st[pr]), x) < 0) pr--;
    if(pl >= pr){
      break;
    }
    swap(st, pl, pr);
    pl++;
    pr--;
  }

  if(left < pl - 1) mark_sort(st, left, pl -1);
  if(pr + 1 < right) mark_sort(st, pr + 1, right);
}

>>379
( ´_ゝ`)

381:379
09/02/08 02:08:20
>>380
while(1) はそのままにした。めんどうなので。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

382:379
09/02/08 02:18:25
報酬忘れてた。ヒント:
// while(total(st[pl]) > x) pl++;
while((total(st[pl]) > x) != ((a=total(st[pl])) > x)?printf("%d ",pl):printf(","),
((a=total(st[pl])) > x)) pl++;


383:デフォルトの名無しさん
09/02/08 02:27:13
>>381
一回呼び出し側の領域に入れると問題なしなのか!

384:326
09/02/08 03:09:16
できました!
色々とみなさんありがとうございました。

385:デフォルトの名無しさん
09/02/08 03:25:16
>>382
よく分からんが、ebpレジスタ同士の比較じゃないと上手く動作しないってこと?

386:385
09/02/08 03:35:07
これか……
URLリンク(0xcc.net)
ほとんどバグじゃねーか

387:デフォルトの名無しさん
09/02/08 10:40:59
このサイト前半おかしくね?
53*100=5299.9999999..になることだってあるだろ

388:デフォルトの名無しさん
09/02/08 11:42:07
>x86 特有のちょっとおもしろい現象


389:デフォルトの名無しさん
09/02/08 12:09:34
>>387
もう一度読んできて。

390:デフォルトの名無しさん
09/02/08 13:02:12
>>381
xに従ってplとprを移動しているループは、与えられた
st[left,right]を飛び出す可能性があるがその問題は放置?

391:デフォルトの名無しさん
09/02/08 13:18:07
ショートカットして、>>380 が正しいと?

392:sage
09/02/08 16:25:06
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):星型5角形(★)の面積を求めるプログラムを作成せよ。ただし、入力は*.txtファイルから行い、入力、計算は関数化すること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:cygwin1.5.25-15
 [3.3] 言語:C
[4] 期限: ([2009年2月9日10:00まで]
[5] その他の制限:特にありませんが、動的メモリ確保(malloc関数)の勉強をしていました。

393:デフォルトの名無しさん
09/02/08 16:38:32
392です。
口頭で問題を言われただけなので問題文がなく、自分で書いたため、少し問題文にミスがありましたため、補足させてもらいます。
入力のtxtファイルには、時計回りに5つ(もしくは、6つ[6つ目は開始地点と同じ座標])の座標を入力することが条件となっております。


394:デフォルトの名無しさん
09/02/08 16:43:14
以下の問題についてですが、どうやって解いたらいいのでしょうか?

C言語

(問題)
ファイル xy2data.dat には,カンマで区切られた2つの整数データ(値は0以上5以下)が並んだ行が
何行か格納されている.
各行の最初の整数値をx,次の整数値をyとしてx-y座標上の点(x.y)をファイルの行数個考える.
これらの点と、点(4,4)との距離の2乗の値の度数分布を求め,頻度が3以上となる距離の2乗の値
をその値が小さいものから順にカンマで区切って出力するプログラムを作成せよ.


ファイルは
FILE *in_file;
in_file = fopen("xy2data.dat","r");

としてopenし,このファイルからデータを読み出す時は,

fscanf(in_file,"%d,%d",&x,&y);
として読み出せばよい.(xとyは整数型変数とする)
また,読み出しが終わったら,
fclose(in_file);
としてクローズすること.

395:デフォルトの名無しさん
09/02/08 17:04:39
>>392
星型の条件が分からん。
正確な五芒星なの?

396:デフォルトの名無しさん
09/02/08 17:27:59
正確な五芒星なら最初の2点分だけで面積判る罠

397:デフォルトの名無しさん
09/02/08 17:46:19
座標はこれでおねがいします
URLリンク(maps.google.co.jp)


398:デフォルトの名無しさん
09/02/08 17:49:00
392です。
星型の条件とはどういうことでしょう?><;
頂点5つの座標は
4.00000 0.00000
-3.23607 -2.35114
1.23607 3.80423
1.23607 -3.80423
-3.23607 2.35114
です。
答えになっているでしょうか・・・?

399:デフォルトの名無しさん
09/02/08 17:54:40
>>394 解いた
URLリンク(kansai2channeler.hp.infoseek.co.jp)

400:デフォルトの名無しさん
09/02/08 20:37:04
以下の文で教えて欲しいです。
memcpy(&byteData ,pTimData ,2 ); /* pTimDataからbyteDataへコピー */

byteData = byteData & 0x7c00; /*15bit分のマスクを掛ける。*/

byteData = byteData >> 12; /*12bit移動*/

read(byteData, bmpData, sizeof(short));/*処理後のデータを格納*/

/*次の2byeを格納するためループ。全て格納し終えたらループから抜け出す*/

memcpyでpTimDataからbyteDataへ2byte分切り出した後
論理積でマスクをかけビットシフトしたあと、bmpDataに格納するというものなのですが
このままだと2byte分だけbmpDataに格納して処理を終了してしまいます。
処理後の全pTimDataのデータをbmpDataを入れたいのですが、どのようなループ文を書いたらいいのでしょうか?

URLリンク(kansai2channeler.hp.infoseek.co.jp)

401:デフォルトの名無しさん
09/02/08 20:44:44
>>400
スレちがい。
どこぞ、質問スレへ行け

402:デフォルトの名無しさん
09/02/08 20:57:03
>>401
申し訳ない。
まんま丸投げじゃないと駄目なんですね。
失礼しました。

403:デフォルトの名無しさん
09/02/08 21:01:55
>399さん

記載ありがとうございます。
大変もうしわけありませんが、アップしていただいたURLにアクセスできないので、
本文中に記載していただけないでしょうか?

404:デフォルトの名無しさん
09/02/08 21:21:26
>>398
ごちゃごちゃしてるけど。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
#pragma warning(disable : 4996)の部分は消して使ってね

405:399
09/02/08 21:53:01
URLリンク(kansai2channeler.hp.infoseek.co.jp)

406:デフォルトの名無しさん
09/02/08 22:01:23
392です。
404さんありがとうございます!
ですが、コンパイルできるのですが、実行ができません><;

& gcc ファイル名.c
& a.exe input.txt

でコンパイル&実行をしたのですが、これではだめなのでしょうか?

↓input.txtの中身
4.00000 0.00000
-3.23607 -2.35114
1.23607 3.80423
1.23607 -3.80423
-3.23607 2.35114


407:デフォルトの名無しさん
09/02/08 22:03:19
連投すみません。392です。
実行は
& ./a.exe input.txt
の間違いです。
「./」を書き入れるのを忘れました^^;

408:デフォルトの名無しさん
09/02/08 22:14:55
>>406
プログラムで指定されているファイル名は、in.txtだからねえ・・・

409:デフォルトの名無しさん
09/02/08 22:15:27
int main(){

int main(int argc, char* argv){

read_points("in.txt",point);

read_points(argv[1],point);
でいくと思う

410:デフォルトの名無しさん
09/02/08 22:23:49
int main(int argc, char* argv[]){
か。ごめん!


411:デフォルトの名無しさん
09/02/08 22:28:49
408さんありがとうございます><助かりました。

412:デフォルトの名無しさん
09/02/08 22:42:10
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows XP
 [3.3] 言語: C
[4] 期限: 2月9日12:00まで

よろしくお願いします。

413:デフォルトの名無しさん
09/02/08 22:46:32
>>412
「重複数」の定義は?

414:デフォルトの名無しさん
09/02/08 22:52:00
>>412
クソな課題だな。

int a[x]をmallocで確保してa[ key % x]++して
全部終わったらa[k]が2以上の数を数えてxを掛ける
これの繰り返し?上限は「入力されたうちの最大値+1」か?

415:デフォルトの名無しさん
09/02/08 23:02:27
>>414
それだとx=1が常に最適になるので、本当のクソになる。
a[k]の大きさも加味すべきだろう。

416:デフォルトの名無しさん
09/02/08 23:09:18
>>413>>414
何も言われてないので分からないです。

417:デフォルトの名無しさん
09/02/08 23:59:23
>>412
keyは一意でいいんだよね?

418:デフォルトの名無しさん
09/02/09 00:15:55
>>412
URLリンク(kansai2channeler.hp.infoseek.co.jp)
バケットの要素数count[i]が2以上であるバケットiについて、Σcount[i]!/2を「要素数」とした。count[i]!/2は、バケットから2要素を選ぶ組み合わせ数。
また、バケット数の上限は、(最大のkey)+1とした。

419:418
09/02/09 00:23:02
ごめん、思いっきり勘違いを書いた。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
バケットから2要素を選ぶ組み合わせ数はcount[i]*(count[i]-1)/2だね。

420:デフォルトの名無しさん
09/02/09 02:24:55
[1]C言語中級
[2]問題文:
UNIXなどのオペレーティングシステムで使用されているファイル名称慣用表示を正式表示に変換する。
標準入力から慣用表示を含む表記を正式表記に変換して標準出力に出力すること
先頭文字が.の場合はカレントディレクトリ下のファイル名とすること
例:カレントディレクトリ=/home/test
/usr/bin/ls ===> /usr/bin/ls
/usr/bin/local/sbin/tmp/../localls ==> /usr/bin/local/sbin/localls
/usr/./tmp==>/usr/tmp
./program/source ==>/home/test/program/source
../../home/sample ==>/home/sample
../../../home/sample==>/home/sample
.../test==>/test
./sample/test/...../test==>/test
./bin/../../../.. ==>/
[3]
linux gcc (Windowsでも可)
C言語
[4] ★木曜日の正午までに提出
★標準的な書式(行内マルチステートメント禁止)で250行以内
★再帰呼び出しは使用禁止
★グローバル変数使用禁止
★パス名の長さは制限無しとする
初級コースが満杯なので、中級コースをとって
しまったら、課題レポートが自分には激ムズでした。
自分でやってみたら収拾がつかなくなってしまいました。
期限までわずかに時間はありますが、できれば一両日中に何と
かお願いします。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch