08/08/23 18:10:22
ありがとうございます
>>324
そうですねマジックナンバーはいただけませんね
>>326
それでいけますか?
あ、いけますね、やっぱりまだ少し勘違いがあるみたいです。
>>327
すみません、私の力不足の用で、途中までやってみましたが、
構造体に入れるところで、異常に長くなってしまうので諦めました。
メモリ上での構造体の配置を仮定すればループでいけますが
あまりにも処理系依存なので止めておきます、
誰かがすごい解答を出してくれるのを待ちましょう。
332:デフォルトの名無しさん
08/08/23 18:59:28
問題文
OSを作りなさい
333:デフォルトの名無しさん
08/08/23 19:05:22
>>332
#include <allornothing.h>
int main(void){
puts("The End");
}
334:デフォルトの名無しさん
08/08/23 19:30:32
>>332
Oh yes なんつって
335:デフォルトの名無しさん
08/08/23 21:20:28
>>330が何を言いたいのか理解できないんだが。
336:デフォルトの名無しさん
08/08/23 21:21:51
>>335
strlen(stail) > strlen(s)
の時に問題あるよ
337:デフォルトの名無しさん
08/08/23 21:25:16
330からそういう意味は読み取れないw
338:デフォルトの名無しさん
08/08/23 21:27:49
>>337
>>330 を実行してアレッ?と思って欲しかったが、回りくどかったようだ
339:デフォルトの名無しさん
08/08/23 21:30:50
お前本人かw
>p=s+20;
こんなこと書くアホが何言ってんだ。
340:デフォルトの名無しさん
08/08/23 21:32:05
>>339
p=&s[20]; が好みか?
341:デフォルトの名無しさん
08/08/23 21:32:39
どこ指してるか理解してんのかよw
342:デフォルトの名無しさん
08/08/23 21:34:22
あーなんてこった orz
343:デフォルトの名無しさん
08/08/24 17:45:45
アセンブラの宿題あるんだけど誰か助けて
344:デフォルトの名無しさん
08/08/24 17:57:45
スレ違い
死ね
345:デフォルトの名無しさん
08/08/24 18:46:54
暇だから宿題出して
346:デフォルトの名無しさん
08/08/24 19:37:12
>>343にきけ
347:デフォルトの名無しさん
08/08/24 20:09:39
≫345
[1]アルゴリズムとデータ構造
[2]
クラスカルの方法を用いて,最小木のアルゴリズムを作れ.
データファイル(data.txt)は
点の数 枝の数 (1行目のみ)
枝番号 始点 終点 枝の長さ
・・・・・・・・・・(これが枝の数だけ続く)
という形式.
グラフを各点に接続する枝を覚えるリスト形式で表現せよ.
↓data.txt
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[5]最小木の最短経路の問題へと発展する1stステップです。ま、解ければね・・・
348:デフォルトの名無しさん
08/08/24 21:15:23
>>347
もっと解いてうれしくなるような問題にしろよ。
349:デフォルトの名無しさん
08/08/24 21:30:21
>>344
>>348
いい加減、お前の方がうざいぞ
350:デフォルトの名無しさん
08/08/24 21:36:03
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク)
ファイルに以下のような数字の列があるとする。
32
82
11
19
90
24
58
48
これをプログラムで読み込んで数字の小さい順に並び替えるプログラムを作れ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:g77
[3.3] 言語:C
[4] 期限:2008年8月25日正午
[5] その他の制限:なし
よろしくおねがいします。
351:デフォルトの名無しさん
08/08/24 21:47:30
>>350
#include<stdio.h>
#include<stdlib.h>
int compare(const int *a, const int *b){
if(*a<*b) return -1;
if(*a>*b) return 1;
return 0;
}
int main(void){
char *filename="hoge.txt";
int *data=NULL, one_data, data_num=0, i;
FILE *fp;
fp=fopen(filename, "r");
if(fp==NULL){
fprintf(stderr, "\nError: %s file cannot open.\n", filename);
return 1;
}
while(fscanf(fp, "%d", &one_data)==1){
data=realloc(data, sizeof(int)*(data_num+1));
data[data_num++]=one_data;
}
fclose(fp);
qsort(data, data_num, sizeof(int), (int (*)(const void *, const void *))compare);
for(i=0;i<data_num;i++) printf("%d\n", data[i]);
free(data);
return 0;
}
352:デフォルトの名無しさん
08/08/24 21:53:20
>>351
ありがとうございます。
353:デフォルトの名無しさん
08/08/25 01:42:06
>>347
読み込んで記憶するだけでいいの?
それとも内部でグラフを作るの?
354:sage
08/08/25 02:09:56
>>353
グラフはアウトプットしなくてもよいのですが
まずリスト形式で作成すると同時に
枝情報をヒープに格納して(最大ヒープサイズは枝の数である50)
ヒープから短い枝順に順次データを取り出し
クラスカルのアルゴリズムに従って、最小全域木を求めます。
最終的には最小全域木の
ある任意の点Αから、点50までの最短経路を求める問題になります。
おそらく出題者は、グラフを先に作ったうえで
問題にしたっぽいです。
グラフはwinnyの開発画面みたいなやつです。
あぷりますね。
355:347
08/08/25 02:26:40
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
356:347
08/08/25 02:29:34
サーセン。拡張子ま違いました。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
357: ◆luuqrOhdZk
08/08/25 03:29:06
[1] 授業単元: 授業ではありません
[2] 問題文(含コード&リンク):
「苦しんで覚えるC言語」の第1部13(全ページリンクフリー)
URLリンク(homepage3.nifty.com)
の、「プログラム書き取り」の問題です。
「入力された10個の数値を最後から表示するプログラムを作成せよ。」
(簡単のため3個の数値にしました)
[3] 環境
[3.1] OS: Windows XP Home edition
[3.2] コンパイラ名とバージョン: (Cpad for C++ comiler ver2.31)
[3.3] 言語: C
[4] 期限: ( [無期限])
[5] その他の制限:まだ初心者なので高度な設定等は分かりません
プログラムの、
for(i = 0;i < 3; i++ ){
printf("%d番目を入力:",i);
scanf("%d\n",&array[i]); }
の部分で、実行画面で、
0番目を入力:11
1番目を入力:22
2番目を入力:33
(11、22、33は実行画面で入力する値です。)
としたいのに、なぜか
0番目を入力:11
22
1番目を入力:33
2番目を入力:44
となってしまいます。
よろしくお願いします。以下、プログラム全文と実行画面です。
358: ◆luuqrOhdZk
08/08/25 03:30:17
先の質問のプログラム全文と実行画面です。
#include <stdio.h>
int main(void)
{
int array[3];
int i;
for(i = 0;i < 3; i++ ){
printf("%d番目を入力:",i);
scanf("%d\n",&array[i]);
}
for(i = 2;i >= 0;i--){
printf("%d番目は%d\n",i,array[i]);
}
fflush(stdin);
getchar();
return 0;
}
――実行画面――
0番目を入力: 11
22
1番目を入力: 33
2番目を入力: 44
2番目は33
1番目は22
0番目は11
359:デフォルトの名無しさん
08/08/25 04:02:49
>>357
> scanf("%d\n",&array[i]);
scanf("%d",&array[i]);
360: ◆luuqrOhdZk
08/08/25 05:01:27
>358
お陰様で解決しました。
ありがとうございます。
361:234
08/08/25 09:09:51
>>234です。お返事の方遅れてすみません、今みなさんの書いてくれたコードを読みながら自分でコードつくっています。
また、ご協力お願いします。
362:デフォルトの名無しさん
08/08/25 11:01:55
>>347
言語は?
363:347
08/08/25 11:17:57
>>362
C言語でもC++でもOKです。
自分はVC++使ってたんですけど
引数のエラーが出て
関数がうまく扱えないので
C使ってBorlandでやってまス。
364: ◆O5wSDVhi7.
08/08/25 11:31:16
Cの問題について、ちょいと質問したいのですが、
ファイルの読み込み処理で、入力した名前のファイルがある場合はある、ない場合はないと
表示させるプログラムを作っていますが、自分が作成したコードではダメだしをくらいました。
以下、コードです。
char filename[20];
FILE *fp;
printf( ">" );
scanf("%s",&filename);
fp = fopen( filename, "r" );
if( fp == NULL )
{
printf( "%sは存在しません\n",filename );
}
else
{
printf( "%sは存在します\n", filename );
}
fclose( fp );
一応、動くことは動くのですが、余計な部分が多いというところと、もう一つ
問題があるといわれましたが、自分ではよくわかりません。
どなたか教えてください。
環境はVisual studi2005です。
365:デフォルトの名無しさん
08/08/25 11:37:53
>>364
filename がバッファオーバーフローする危険性がある
fclose(NULL) する危険性がある
scanf に渡す引数の型が一致していない
あとこのレベルだとどうでもいいことだが
排他処理をしている場合 fopen でファイルの存在を確定することはできない
366: ◆O5wSDVhi7.
08/08/25 11:59:28
>>364
自分でも、ちょっと調べてみたのですが、
どうやら、fclose(NULL)している模様です。
この場合の対策などはないのでしょうか?
367:デフォルトの名無しさん
08/08/25 12:10:24
>>366
fpがNULLかどうかチェックしてるだろ。
そのNULLじゃない方に入れたらいいべ。
368:デフォルトの名無しさん
08/08/25 12:52:58
>>364 通りすがりの初心者の意見↓
1.scanfのところの&がいらない。
2.ファイルがない場合はfcloseする必要がない。
369: ◆O5wSDVhi7.
08/08/25 13:39:34
>>367
そのとおりに変更して提出しました。
>>368
scanfを使用した場合どのような問題が起こるか説明しろといわれました。
上で言われた、バッファオーバーフロー云々でいいのだろうか?
いろいろ、調べてみたが解釈の仕方が様々でよくわからなかった・・・。
370:368
08/08/25 14:04:57
>>369
scanfの問題は空白がくると読み込みが終了するってことかな?
オーバーフローはgetsだった気がする。
371:デフォルトの名無しさん
08/08/25 14:21:56
オーバーフローは書式でどうにか出来るしな
372:デフォルトの名無しさん
08/08/25 14:26:00
>>370
scanf("%[^\n]", a);
これでよかった気がするがうるおぼえ。
373:デフォルトの名無しさん
08/08/25 14:37:45
>>372
こういうやり方があったのか知らんかった。
'\n'をスキャン対象から除外すればいいのか。
374:デフォルトの名無しさん
08/08/25 15:07:11
>>369
リターンキーが無視できない、バッファオーバーラン、空白が読み取れない
これらの問題を解決したすばらしいscanf
scanf("%19[^\n]%*[^\n]", filename);
375:デフォルトの名無しさん
08/08/25 15:24:28
>>370
getsは回避手段がないのでだめだめな関数
scanfも>>364の使い方だとgetsと変わらない
20文字以上入力されたらバッファーがあふれる
376:デフォルトの名無しさん
08/08/25 15:31:41
>>370
scanf(%20s,filename);とか
文字数制限しないとバッファオーバーランするみたいですね。
勉強不足でした・・・(´・ω・)
377:デフォルトの名無しさん
08/08/25 15:34:09
>>375
scanf(%20s,filename);とか
文字数制限しないとバッファオーバーランすんですね。
勉強不足でした。(´・ω・)
378:デフォルトの名無しさん
08/08/25 15:34:19
そして現実にはそこまでするくらいならfgets+sscanfで良くね?となるのであった……。
379:デフォルトの名無しさん
08/08/25 16:28:42
文字列一つだけ欲しいんだからsscanfもいらない気がするw
380:デフォルトの名無しさん
08/08/26 12:56:45
>>347
データをすべて読み込むところまでしかできてない
URLリンク(kansai2channeler.hp.infoseek.co.jp)
381:234
08/08/26 14:41:03
234ですみなさんおつかれさまです
URLリンク(kansai2channeler.hp.infoseek.co.jp)
と、無事完成させることができました(関数にしたほうがいいかも)
そして次の課題もご協力おねがいしたいのですがよろしいですか?
256、16、モノクロ対応
◆仕様
・各ビット数のビットマップも読み込めるようにする。
・<windows.h>は使用しない
◆ポイント
・読み込んだデータを24ビットに展開させる。
あと以前の色を文字で表示するのは
0x000000FF=青
0x0000FF00=緑
0x00FF0000=赤
0x00FFFFFF=白
0x00000000=黒
だったようです。失礼しました。
382:デフォルトの名無しさん
08/08/26 20:14:28
>>347
>>380 は有向グラフで書いてるけど、問題は無向グラフ?
383:347
08/08/26 20:46:46
>>380
すごく参考になりました。
ありがとうございます!
>>382
あくまでも、私個人の考えなのですが;
ある点A(これは学生の出席番号でした) から50までの最短経路の長さとその途中に通った点を求めるのが、
この問題の最終的な目標です。(奥行優先探索を使うといいと教師は言ってました。)
今回はグラフを書くこと自体が目的ではないので、有向、無向、どちらでも大丈夫です。
まぁ、最短経路なので、無向、有向どちらかといえば、一番近い距離を制約なしに
進める無向の方がいいかもしれません。
あと、データの各枝の長さがすべて異なっていれば、最小木が一意に定まりますが、
今回のデータは、そうでないので、作り方によっては、最小木が何本か作れるかもしれないです。
384:デフォルトの名無しさん
08/08/27 09:47:14
夏休みの宿題で c++で
「自分で考えた最高のクラスを創ってこい」
というのが出ました。
どんなのを作っていいか全く見当がつきません。
だれか知恵を貸してください。
385:384
08/08/27 10:01:33
すいません追記です
クラスの継承は必ず使えとの事です
386:デフォルトの名無しさん
08/08/27 10:43:43
総勢30名のクラス中女子が28名いて自分以外の男子1名はとんでもないブサイクのようなクラスだ。
387:デフォルトの名無しさん
08/08/27 10:54:19
>>386
夢のようなクラス(学級)ですね!
でもそっちのクラスじゃないです;;
class xxxx{
private:
int aa:
public;
xxxx();
とかのクラスです。
388:デフォルトの名無しさん
08/08/27 11:02:06
物凄く面倒くさい手順でHello, World!を表示するクラスとか
389:デフォルトの名無しさん
08/08/27 11:04:29
class Ninja{
private:
static const int lv = 99;
public:
int Attack(void){ return lv*100; }
};
こういうことか
390:デフォルトの名無しさん
08/08/27 11:14:46
NinjaはMonsterを継承しないと
391:デフォルトの名無しさん
08/08/27 11:15:33
って敵で出てくるほうの忍者じゃないか
392:デフォルトの名無しさん
08/08/27 16:42:00
[1] 授業単元: C言語実習
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: WindowsXP Professional
[3.2] コンパイラ名とバージョン: Borland C++ 5.6.4
[3.3] 言語: C
[4] 期限: 本日中
よろしくお願いします。
393:デフォルトの名無しさん
08/08/27 17:09:55
自分-1まで調べろと書いてあるのに
何故自分までadd配列に入った結果になってるんだ?
394:デフォルトの名無しさん
08/08/27 17:11:21
ああ、最後に自分を入れろと書いてるのか
395:デフォルトの名無しさん
08/08/27 17:24:19
>>392
#include<stdio.h>
int main(void){
int add[15], in=-1, i, j;
scanf("%d", &in);
if(in<2 || in>100) return 1;
for(i=0;i<15;i++) add[i]=0;
for(i=2,j=0;i<in;i++) if(in%i==0) add[j++]=i;
add[j++]=in;
for(i=0;add[i]!=0;i++) printf(" %d", add[i]);
return 0;
}
396:デフォルトの名無しさん
08/08/27 17:24:46
#include<stdio.h>
int main()
{
int add[15]={0};
int own=0,cownt=0;
do{
printf("2~100の値を入れてください\n");
scanf("%d",&own);
}while(own<2||100<own);
for(int i=1;i<own;i++)
if( !(own%i) )
add[cownt++]=i;
add[cownt]=own;
for(int i=0;add[i]!=0;i++)
printf("%d ",add[i]);
return 0;
}
397:396
08/08/27 17:26:44
しまった、変数名の指定呼んでなかったorz
398:デフォルトの名無しさん
08/08/27 17:34:04
>Q3.「バブル・ソート」という整列手順(アルゴリズム)があるが、ここで用いた基本ソートとの違い何か。
ソート使って無くね?
399:デフォルトの名無しさん
08/08/27 17:49:17
Q3だけ設問、浮いてるよなw
400:392
08/08/27 18:51:58
回答ありがとうございます。
>>395
returnを複数使うという事を習っていないのですが
return 1; の部分を使わないとすればどういう風になるのでしょうか?
お手数かけますがお願いします。
401:デフォルトの名無しさん
08/08/27 19:01:05
判定ひっくり返して中に入れちゃえばいいべ。
if(in>=2 && in<=100) {
//return 0の前の行まで
}
return 0;
402: ◆mM5kCiKYnA
08/08/27 21:49:48
[1] 授業単元: C言語(送信,受信)
[2]
UDPマルチキャストにて送信されたデータを受信するのですが....。
そのデータというのがアナログ64点,デジタル256点分が送られてきて、
それぞれアナログ256byte,デジタル32byteに格納して
残りの40byteはダミーで合計328byte分を用意して受け取り、
受信したデータをシュミレーターの受信バッファに書き込む作業ですが...
*注意事項としてはマルチキャストで送信されるデータはパルス信号がカウント値で送られ
てくるので受信したパルス信号時間に変換すること。
*パルス信号自体通常1が送信されるので2以上の値を受信した時点でバッファに書き込むようにする。
尚この処理自体湾ショットのみ行う。つまり通常1が送られて、2になった時点で受け取りまたしばらく
すると1になりその信号が3とか1以外になった時点で取り込むようなプログラムにする。
困っているので助けてください。よろしくお願いします。
[3] 環境
[3.1] OS:Solaris8,UNIX(viコマンド)
[3.2] コンパイラ名又はバージョン
[3.3] 言語: C言語
[4] 期限:2008年9月1日
403:デフォルトの名無しさん
08/08/27 22:11:47
>>402
あなろぐ?
404: ◆mM5kCiKYnA
08/08/27 22:59:12
>>アナログとデジタルのことです。
時計とかでもあると思うんですけど。
そこはあまり深く考えなくても大丈夫ですので。
405:デフォルトの名無しさん
08/08/28 01:07:23
[1] 演習課題: C++
[2]
配列等を使って料金算出システムを作るのですが・・・
給料を入力
等級⇒給料が~101100の場合"1"、101000~107000の場合"2"、107000~1014000の場合"3"
1014000~122000の場合"4"、122000~130000の場合"5"
健康保険⇒給料の8.2%
厚生年金⇒給料の14.642%
雇用保険⇒給料の0.02%
出力後
所得 ○○円
等級 ○
厚生年金 ○○円
健康保険 ○○円
雇用保険 ○○円
終了しますか?(y,n)
というようなプログラムにします。
本当に困っているのでどなたか助けてください。よろしくお願いしますm(__)m
[3] 環境
[3.1] OS:WindowsXp
[3.2] Visial C++
[3.3] 言語: C++
[4] 期限:2008年8月28日
406:392
08/08/28 01:15:02
>>401
遅くなりましたが解決しました。
ありがとうございました!
407:デフォルトの名無しさん
08/08/28 02:36:20
>>405
何をすればいいのかいまいちわからん。
それやるのに配列使わなく無いか?
それとも、表示するだけではなくて保存しておく必要があるのか?
408:デフォルトの名無しさん
08/08/28 02:41:40
>>405
数値を正確に書けよ。イミフだ
未満とか以下の表現も必要
409:デフォルトの名無しさん
08/08/28 06:18:35
>>405
こんなもんでいかがッスか?
URLリンク(kansai2channeler.hp.infoseek.co.jp)
410:デフォルトの名無しさん
08/08/28 07:58:36
OpenGLで球体を作りたいのですが、サンプル例を作っていただけませんか?
411:デフォルトの名無しさん
08/08/28 08:19:35
[1] 確率論
[2]
NxNの行列の逆行列を出すプログラムをつくれ。
Nは10以上30以下である。
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] 言語:C
[4] 期限:明日にかわるくらいまでには
412:デフォルトの名無しさん
08/08/28 09:00:58
>>410
glutでいいよね?
URLリンク(kansai2channeler.hp.infoseek.co.jp)
413:デフォルトの名無しさん
08/08/28 09:56:02
だが断る
414:デフォルトの名無しさん
08/08/28 10:13:16
>>402
シュミレーターの受信バッファに書き込む?
カウント値?
パルス信号?
問題の意味が分からない
415:デフォルトの名無しさん
08/08/28 10:15:15
>>411
Numerical Recipes in C でも読んでろ
416:デフォルトの名無しさん
08/08/28 11:16:29
5000円とかたかいよー。
417:デフォルトの名無しさん
08/08/28 19:02:35
>>411
LU分解,Gauss-Jordan法,特異値分解
好きなのでググれ
418:デフォルトの名無しさん
08/08/28 22:30:14
>>407
すいません。説明が言葉足らずでしたね。
>>408
たしかに。。。これからは気をつけよう。
>>409
おかげさまでどうにか期限までに課題を終わらせる事ができました。
本当に助かりました。ありがとうございました。
419:デフォルトの名無しさん
08/08/29 03:32:50
[1]C言語
[2]住所録の作成
名前・住所・年齢・メアドを一つのレコードとする住所録システム
レコードの登録・削除・レコード中の各項目の更新・レコード中の各項目によるレコード検索
ファイルへの書込みと読込の6機能
配列は使えない
[3]OS:Windows 言語:C
[4]08/08/31
420:デフォルトの名無しさん
08/08/29 03:57:29
> 配列は使えない
ちょっwwwwwww
421:デフォルトの名無しさん
08/08/29 03:59:37
ポインタと動的メモリ確保使ってことでは?
422:デフォルトの名無しさん
08/08/29 04:06:21
あんまり好みの設計じゃないなぁ。
固定長レコードな住所録の方が好きだ。
423:デフォルトの名無しさん
08/08/29 04:11:13
いや、まてよ?
1レコードは256Byte固定長にして、各レコードは区切り文字で区切ればいいのか。
ちょっとやってくる。
424:デフォルトの名無しさん
08/08/29 04:26:26
飽きたから放棄。
425:デフォルトの名無しさん
08/08/29 04:56:17
>>419
レコード検索は部分一致でやるの?
その場合、複数件の該当レコードがあったときどうすんの?
426:デフォルトの名無しさん
08/08/29 05:40:40
>>423
とりあえず登録と表示できるやつを作ってみた
#include "stdio.h"
#include "string.h"
typedef struct { int address,age,email, a,b,c,d, e,f,g,h, i,j,k,l, m,n,o,p ; } RECORD;
typedef struct { RECORD a,b,c,d,e, f,g,h,i,j, k,l,m,n,o, p,q,r,s,t, u,v,w,x,y,z ; } RECORDSET;
int main(void)
{
int i; char *p,*a,c; RECORDSET rs = {0}; RECORD *r = &rs.a,*t;
while( 1 ) { printf("i:touroku r:sakujo o:koushin h:kensaku a:kakikomi n:yomikomi 1:list 0:exit ?");
fflush(stdin); c = getchar();
switch(c) {
case 'i': p = (char*)&r->a;
printf("name :");scanf("%s",p);p+=r->address=strlen(p)+1;
printf("address :");scanf("%s",p);p+=r->age=strlen(p)+1;
printf("age :");scanf("%s",p);p+=r->email=strlen(p)+1;
printf("e-mail :");scanf("%s",p); r++; break;
case '1': t = &rs.a;c=0;
while(t->address>0) {
printf("\n[%c]",'a'+(t-&rs.a)/sizeof(RECORD));a=(char*)&t->a;
printf("\nname :%s\n",a);a+=t->address;printf("address :%s\n",a);a+=t->age;
printf("age :%s\n",a);a+=t->email;printf("e-mail :%s\n",a);
t++;c++;
}
printf("\ncount = %d\n", c ); break;
case '0':return 0; default :printf("not implimented.\n");
}
}
return 0;
}
427:デフォルトの名無しさん
08/08/29 08:18:44
>>420
住所録関係なら配列は使えないだろ?
勉強しなおせ
428:デフォルトの名無しさん
08/08/29 10:35:12
×使えない
○使わない
429:デフォルトの名無しさん
08/08/29 10:37:46
そうだよな、住所録関係なら配列は使えないのは常識だよな
430:デフォルトの名無しさん
08/08/29 13:00:39
>>427 (・∀・)ニヤニヤ
431:デフォルトの名無しさん
08/08/29 13:02:04
文字列は配列として扱ってはいけないんですね?
1文字づつメモリ上に領域を確保してポインタを繋げていかないといけないんですね?
432:デフォルトの名無しさん
08/08/29 13:02:57
>>431
しっ、知ったか初心者に障っちゃだめ、また屁理屈を言い出して
それでも配列じゃないって言い出すから。
433:デフォルトの名無しさん
08/08/29 13:49:00
struct string{
int size;
};
434:デフォルトの名無しさん
08/08/29 15:02:10
[1] 授業単元:C++
[2] 問題文(含コード&リンク): 多倍長整数の除算(100桁まで)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 出来れば明日中
[5] その他の制限: 形式としてclassは必ず使う。
よろしくお願いします。
435:デフォルトの名無しさん
08/08/29 21:51:05
>>434
その手の問題は未解決になる可能性大
ここのスレの住人は文字列を逆順にしたり、並べ替えたりする
なんの役にもたたないようなプログラムばかり書いてるからw
436:デフォルトの名無しさん
08/08/29 21:52:40
>>435
煽ればやってくれるとでもwww
記憶にある限り少なくともCの範囲では過去にやったよ
437:デフォルトの名無しさん
08/08/29 22:00:35
たばいちょうせいすうってなに?
438:デフォルトの名無しさん
08/08/29 22:03:25
>>437
ググレカス
439:デフォルトの名無しさん
08/08/29 23:16:29
URLリンク(ja.wikipedia.org)
440:419
08/08/30 02:03:26
>>421
そうですね。
>>425
部分一致でお願いいたします。
複数件あった場合は何件該当しましたという表記でお願いします。
441:デフォルトの名無しさん
08/08/30 02:09:15
やっぱりこの手の問題は無理かw
前にあったとか、wwwを探せとか・・・
やっぱり、”10個の整数の和を求めるプログラムを教えて下さい”位がちょうどいいかw
442:デフォルトの名無しさん
08/08/30 02:25:06
>>441
やり方じゃなくてタイプするのが面倒なだけのコードなんて、誰も興味ないだろ。
443:デフォルトの名無しさん
08/08/30 02:30:50
あたかも、余裕で書けるが面倒なんで書かないといいたいようですねw
444:デフォルトの名無しさん
08/08/30 02:36:57
余裕だなんて、よう言う わ
445:デフォルトの名無しさん
08/08/30 02:37:44
>>443
書けるかどうかじゃなくて、手持ちの教科書に載ってるしな・・・
446:デフォルトの名無しさん
08/08/30 02:39:38
>>445
んじゃ、それを丸々書けば良いだろwwww
447:デフォルトの名無しさん
08/08/30 02:41:55
多倍長整数ってだけで何処までやればいいのか分からないのは俺だけ?
メモリの許す限り無限長までやればいいの?
448:デフォルトの名無しさん
08/08/30 02:42:38
>>446
面白みがなくて、タイプするのが面倒。
最初から言ってるだろ?
449:デフォルトの名無しさん
08/08/30 02:43:05
>>434
何スレか前にintを10進数4桁とみなして計算するようなやつを見た気がするぞ。
加算だか除算だかは覚えてないが。
速度を度外視していいんなら、単純に減算を繰り返すやつを無理矢理クラスに押し込めれば完成。
はい、やる価値無し。次。
450:デフォルトの名無しさん
08/08/30 02:43:47
>>447
整数の除算って言ってるし、100桁とも書いてあるぞ?
451:デフォルトの名無しさん
08/08/30 02:44:12
100桁って書いてたということに今気付いた
正直すまんかった
452:デフォルトの名無しさん
08/08/30 02:44:26
>>447
適当に桁を決められるようにするとか、もちろん、それも
実行している環境が許す範囲内ということにはなるけどね。
>>448
ごちゃごちゃうるせーよ、答える気が無いなら失せろや
昼夜逆転生活の頭のイカれたひきこもり
453:デフォルトの名無しさん
08/08/30 02:44:58
なんか小学生が暴れてるようだな。
あぼーんしとこうぜ。
454:デフォルトの名無しさん
08/08/30 02:45:02
>>452
自己紹介乙
455:デフォルトの名無しさん
08/08/30 02:50:29
>>449
なんで自分の価値観を語ってるの?w
>>1読める?読めない?聖徳(ry
456:デフォルトの名無しさん
08/08/30 02:56:11
1000000000000000000/100000000000000000000とか
こういう計算をするってこと?
457:デフォルトの名無しさん
08/08/30 03:02:13
宿題スレの過去ログだと多倍長整数の四則演算は4回以上解かれてるようだ
オレもさすがに二度目は面倒だ
458:デフォルトの名無しさん
08/08/30 03:07:52
URLリンク(www5.airnet.ne.jp)
ググったら何かあったけど?
>>453
目の前の本を書き写すことも出来ない小学生は寝ろよw
459:デフォルトの名無しさん
08/08/30 03:12:04
>>452
問題文も読めないヤツが、ちゃちゃ入れてただけか・・・
460:デフォルトの名無しさん
08/08/30 03:12:59
ググのは面倒ではないんだW
461:デフォルトの名無しさん
08/08/30 03:16:12
やっぱこいつ、本を見ても理解できないからって
必死に自分がやらないことをアピールしてらw
お子ちゃま~~とっとと寝ろよ、難しい年頃の厨房w
462:デフォルトの名無しさん
08/08/30 03:38:29
> あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
463:デフォルトの名無しさん
08/08/30 04:41:54
>>440
>複数件あった場合は何件該当しましたという表記でお願いします。
件数だけでいいんですか?該当したレコードを選択して表示できたりしないでいいんですか?
もしそうなら、それって検索の意味が全く無いですね。
できるようにする必要があるなら該当レコードへのポインタを配列に入れて検索結果の保存を
したいんですが、配列は使ってはいけないんですよね?
配列を使ってはいけない、という制限は一体何のためにあるんですか?バグを増やすためですか?
464:デフォルトの名無しさん
08/08/30 08:02:11
「自分より出来ない奴」を探して馬鹿にしたいガキが迷い込んでたみたいだな。
はやく夏休み終わればいいのに。
465:デフォルトの名無しさん
08/08/30 10:19:25
>>463
多分リストとか二分木とかを使えってことじゃないかと
466:47
08/08/30 10:48:06
>>48,51
>>73
>>80
皆様方ありがとうございました。
参考にさせて頂いて取り敢えずプログラム作れました。
結果も16通りでました。解説も書けたところで、
これから提出します。
約1月振りに覗いてみたら、数時間で解答が出てたので
びっくりでした。
467:
08/08/30 11:59:13
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows vista
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C言語
[4] 期限:出来れば明日まで
[5] その他の制限:学校で習う程度にライブラリを使用してくれれば有難いです。
口頭で言ったものを文章にしたので上手く伝わっていなかったらすみません。
468:デフォルトの名無しさん
08/08/30 13:31:41
>>467
こんな感じでいかがでしょう?
URLリンク(kansai2channeler.hp.infoseek.co.jp)
469:
08/08/30 14:03:27
>>468
データを追加してファイルを上書きしたあとにsyouhin_1.txtというファイルに綺麗に出力するのですが・・・
そこの部分もお願いしたいのですが。。。
470:デフォルトの名無しさん
08/08/30 14:58:44
>>469
修正したよ
URLリンク(kansai2channeler.hp.infoseek.co.jp)
471:デフォルトの名無しさん
08/08/31 12:12:47
[1] 授業単元: マルチメディア・プログラミング
[2] 問題文(含コード&リンク): Windows上で動作するアクションゲームを製作せよ
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: 指定なし
[3.3] 言語: C++
[4] 期限:2009年4月1日
[5] その他の制限: OpenGL又はDirectXを使うこと
472:
08/08/31 14:17:14
>>470
ありがとうございました。
たすかりました。
473:デフォルトの名無しさん
08/09/01 08:55:56
>>471
プログラムよりモデルデータやモーションデータのほうがキモになるから無理
474:デフォルトの名無しさん
08/09/01 09:18:19
1日までってぎりぎりすぎると思ってよく見たら来年の4月か
期限長いな
475:デフォルトの名無しさん
08/09/01 13:10:01
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 多倍長演算
100桁以内の整数(10進数)を2つ入力し
その二つの足し算引き算の結果を表示せよ。
表示方法は4桁ごとにスペースを入れること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC++
[3.3] 言語: C
[4] 期限: 2008年9月4日まで
入力と表示だけは出来ましたが肝心の足し算引き算
の仕方がわかりません。どなたかお願いいたします。
入力と表示だけ書いたソースを一応はっときます。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
476:デフォルトの名無しさん
08/09/01 13:22:19
>>475
過去スレたどれよ
477:デフォルトの名無しさん
08/09/01 16:02:49
void _plus(char* a, char* b, int minus_flg){
char* ans = (strlen(a) > strlen(b)) ? a : b;
char* ans_p = ans + ((strlen(a) > strlen(b)) ? strlen(a) : strlen(b)) - 1;
int kuriagari = 0;
for (char *a_p = a + strlen(a) - 1, *b_p = b + strlen(b) - 1; ans_p >= ans; ans_p--){
if (a_p >= a) kuriagari += (*a_p-- - 0x30);
if (b_p >= b) kuriagari += (*b_p-- - 0x30);
*ans_p = 0x30 + kuriagari % 10;
kuriagari /= 10;
}
if (minus_flg) std::cout << '-';
if (kuriagari) std::cout << kuriagari << ans << std::endl;
else std::cout << ans << std::endl;
}
478:デフォルトの名無しさん
08/09/01 16:03:58
void _minus(char* a, char* b, int minus_flg){
char* ans = (strlen(a) > strlen(b)) ? a : b;
char* ans_p = ans + ((strlen(a) > strlen(b)) ? strlen(a) : strlen(b)) - 1;
int kuriagari = 0;
for (char *a_p = a + strlen(a) - 1, *b_p = b + strlen(b) - 1; ans_p >= ans; ans_p--){
if (a_p >= a) kuriagari += (*a_p-- - 0x30);
if (b_p >= b) kuriagari -= (*b_p-- - 0x30);
*ans_p = 0x30 + (kuriagari + 10) % 10;
if (kuriagari >= 0) kuriagari = 0;
else kuriagari = -1;
}
if (minus_flg) std::cout << '-';
if (!kuriagari) std::cout << ans << std::endl;
else std::cout << ans << std::endl;
}
479:デフォルトの名無しさん
08/09/01 16:05:02
void plus(char* a, char* b){
if (*b == '-') minus(a, b + 1);
else if (*a == '-') minus(b, a + 1);
else _plus(a, b);
}
void minus(char* a, char* b){
if (*b == '-') plus(a, b + 1);
else if (*a == '-') _plus(a + 1, b, 1);
else if (strlen(a) > strlen(b)) _minus(a, b);
else if (strlen(a) < strlen(b)) _minus(b, a, 1);
else if (strcmp(a, b) >= 0) _minus(a, b);
else _minus(b, a, 1);
}
480:デフォルトの名無しさん
08/09/01 16:46:30
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
10進数の-10を8進数・16進数に変換するプログラムを書きなさい
配列を使用する場合の要素数は16とする
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: 指定なし
[3.3] 言語: C
[4] 期限:2008年9月3日
[5] その他の制限: ポインタなどは少し話題に上がった程度の習得状況です
よろしく御願い致します。
481:デフォルトの名無しさん
08/09/01 16:56:19
int main(void){
char buf[16];
sprintf(buf, "%x", -10);
sprintf(buf, "%o", -10);
}
482:デフォルトの名無しさん
08/09/01 17:24:29
>>481
返信、ありがとうございます。
問題の書き方が言葉足らずだったようです。
URLリンク(www.orchid.co.jp) の
上のプログラムのような計算をし、かつ負数を取り扱えるような
ソースを書きたいのです。
483:デフォルトの名無しさん
08/09/01 17:38:28
int main(void){
int a = -10;
char buf16[16];
memset(buf16, 0x00, 16);
for (int i = 0; i < 15; i++){
buf16[14 - i] = "0123456789abcdef"[a & 0xF];
a >>= 4;
}
a = -10;
char buf8[16];
memset(buf8, 0x00, 16);
for (int i = 0; i < 15; i++){
buf8[14 - i] = "01234567"[a & 0x7];
a >>= 3;
}
}
484:ぱそこん
08/09/01 18:16:42
1授業単元;C言語
2問題文;抽選プログラム(定員、募集人数をキーボードから入力し、乱数を発生させて数値の重複のないように定員分のランダムな数値を求める。
そして、その発生した数値を昇順と、発生した順にそれぞれ出力する。)
3環境
4OS:widows xp またはLinuxでもok
5期限:できれば明日中(本当に急いでます!)
6その他;flg、do while文は必ず用いる。
C言語かなりの初心者です。
485:デフォルトの名無しさん
08/09/01 20:33:27
問題文:配列bufferの文字列の中にあるカンマを水平タブに変換して、配列strafterに
格納し表示させよ。
OS:Linux Fedora8
コンパイラ:gcc(バージョン失念。Fedora8のデフォルトのものです。
コメント:エラー吐きまくりで動作しません。助けて下さいorz
以下、現状のソース
-------------------
#include<stdio.h>
#include<string.h>
int main(void){
char buffer[512]="2000/01/01,9:00:00,AAA BBB CCC";
char repchar[1];
int i;
int buflen;
char strafter[512];
strafter[0]='\0';
repchar[0]='\t';
buflen = strlen(buffer);
printf("文字数 = %d\n",buflen);
printf("Before : %s\n",buffer);
for(i = 0; i < buflen ; i++){
i = i-1;
if(*(buffer+i) == ','){
strcat(strafter,repchar);
}
else{
strcat(strafter,(buffer +i));
}
}
printf("%s\n",strafter);
}
486: ◆O/vs7BIw1Y
08/09/01 20:50:30
[1] 授業単元:プログラミング
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008/09/15
[5] その他の制限: 標準ライブラリのみ使用
よろしくおねがいします。
487:デフォルトの名無しさん
08/09/01 20:58:08
>>485
repcharが文字列でないからじゃないかな
strcat(strafter,repchar);
面倒なのでこれでいいだろ
#include <stdio.h>
int
main()
{
char buffer[512] = "2000/01/01,9:00:00,AAA BBB CCC";
char strafter[sizeof(buffer)] = {0};
{ int i = 0;
while ( buffer[i] != '\0' ) {
strafter[i] = ( buffer[i] == ',' ) ? '\t' : buffer[i];
++i;
}}
printf("%s\n", strafter);
return 0;
}
488:485
08/09/01 21:43:21
>>487さん
ありがとうございます。
こんなやり方でいけるんですね。
C言語本格的に初めて5日目くらいですが,頑張らねばorz
489:
08/09/01 22:37:27
467のものです。
>>468
>>470
でやってもらったのですが、構造体を使えとさらに指示が出まして…
構造体を使ってやっていただきたいです。
ファイル処理はバイナリではなく、w,r,a,(a+)などでお願いします。
490:抽選プログラム
08/09/01 22:48:16
[1]授業単元;C言語
[2]問題文;抽選プログラム(定員、募集人数をキーボードから入力し、乱数を発生させて数値の重複のないように定員分のランダムな数値を求める。
そして、その発生した数値を昇順と、発生した順にそれぞれ出力する。)
[3]環境:gcc
[4]OS:widows xp またはLinuxでもok
[5]期限:できれば明日中(本当に急いでます!)
[6]その他;flg、do while文は必ず用いる。
C言語かなりの初心者です。
491:デフォルトの名無しさん
08/09/01 23:11:11
「ビンゴ プログラム C言語」くらいでググレ
492:デフォルトの名無しさん
08/09/01 23:42:48
>>490
URLリンク(kansai2channeler.hp.infoseek.co.jp)
鬱だ死
493:抽選プログラム
08/09/02 00:14:50
492さんありがとうございます!!
よかったらプログラムに書いてあるコメントを日本語で書いていただけないでしょうか汗
英語分からないんです涙
494:デフォルトの名無しさん
08/09/02 00:22:02
辞書引けよ・・・
495:ロベ
08/09/02 09:33:09
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
インテルHEX形式をモトローラSレコード形式に変換するプログラムを作成しなさい
~条件~
・通常の形式はS1レコードに変換する
・セグメントアドレスがあった場合はS2レコードに変換する
・拡張リニアアドレスがあった場合はS3レコードに変換する
・途中でセグメント/リニアアドレスが出てくる場合でも、最初からS2/S3レコードで出力すること(S1~S3の混合はNG)
・セグメント/リニアアドレス両方あった場合は、S3レコードとする
・スタートアドレスは考慮しなくてもよいものとする
・S0(スタートレコード)は出力しなくてもかまわない
・S4~S6は今回考慮しなくてもよい
・プログラム中でポインタを必ず使用すること
・ソース内にはコメントを表記すること
[3] 環境
[3.1] OS:Windows
[3.2] borland
[3.3] 言語:C言語
[4] 期限:9月4日0:00まで
[5] その他の制限:特になし
よろしくお願いします
496:デフォルトの名無しさん
08/09/02 10:02:19
あまりに難易度が高くてまったく分からない!
497:デフォルトの名無しさん
08/09/02 10:37:37
出てくる単語が分からないだけじゃない?
別に難易度高くないから調べてみたら?勉強になるし。
498:デフォルトの名無しさん
08/09/02 11:57:01
[1] 授業単元: 応用数学
[2] 問題文(含コード&リンク): 入力された関数を微分するプログラムを作れ
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年9月10日まで
---実行例(<>内は入力)--
enter equation> <3x^4 + sin(x)^2>
derivative is
12x^3 + sin(2x)
------------------
高次項・三角関数・合成関数に対応させるのが条件です
499:デフォルトの名無しさん
08/09/02 21:32:48
[1] テキストからファイル出力でログインの認証システムを作る課題です。
ログイン後はユーザの新規登録・削除・変更、一覧と紹介(絞込み)が可能なもの。
①ユーザID/パスワード入力
②ユーザテーブルチェック・エラー処理・メニュー処理へ
【出力画面】
Uidを入力してください
○○
Pwdを入力してください
○○
Uid: ○○
Pwd: ○○
担当者: ○○
会社コード: ○○
アクセス区分: ○○
e-mail: ○○
1.照会(絞込み) 2.一覧 3.新規、変更、削除 4.ログアウト
終了しますか? (y,n)
【テキストの内容】
会社コード 担当者 ユーザID アクセス区分 e-mail
001 山田 太郎 u001 1 yamada@co.jp
002 山田 花子 u002 2 hanako@co.jp
003 田中 次郎 u003 3 tanaka@co.jp
というようなプログラムにします。
頑張りましたがどうしても無理でした。。
申し訳ないですが、どうかよろしくお願いしますm(__)m
[2.1] OS:WindowsXp
[2.2] Visial C++
[2.3] 言語: C++
[3] 期限:2008年9月3日
500:デフォルトの名無しさん
08/09/03 00:23:04
>499
ひまなので
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace baka1
{
class Program
{
static string[,] users = {
{"uid1", "pwd1","諡�蠖楢�蜷�","莨夂、セ繧ウ繝シ繝牙錐","繧「繧ッ繧サ繧ケ蛹コ蛻�蜷�","繧√k縺ゅ←"},
{"uid1", "pwd1","諡�蠖楢�蜷�","莨夂、セ繧ウ繝シ繝牙錐","繧「繧ッ繧サ繧ケ蛹コ蛻�蜷�","繧√k縺ゅ←"},
};
static void Main(string[] args)
{
for (int i = 0; i < users.Length; i++)
{
if (users[i, 0] == args[0] && users[i, 1] == args[1])
{
Console.WriteLine("user驟榊�励�ョi逡ェ逶ョ繧偵�励Μ繝ウ繝�");
}
}
}
}
}
501:デフォルトの名無しさん
08/09/03 00:24:20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace baka1
{
class Program
{
static string[,] users = {
{"uid1", "pwd1","担当者名","会社コード名","アクセス区分名","めるあど"},
{"uid1", "pwd1","担当者名","会社コード名","アクセス区分名","めるあど"},
};
static void Main(string[] args)
{
for (int i = 0; i < users.Length; i++)
{
if (users[i, 0] == args[0] && users[i, 1] == args[1])
{
Console.WriteLine("user配列のi番目をプリント");
}
}
}
}
}
502:デフォルトの名無しさん
08/09/03 00:37:15
>>500>>501
コラw
503:デフォルトの名無しさん
08/09/03 09:51:54
そのままコピペするとUTF-8になっちゃうことあるよなw
504:デフォルトの名無しさん
08/09/03 17:34:53
ここってプログラムに関する質問じゃなくて、プログラムを作ってもらうのってありですか?
505:デフォルトの名無しさん
08/09/03 17:38:27
>>504
高いよ
506:デフォルトの名無しさん
08/09/03 17:43:19
宿題スレで聞いてるってことは宿題か?
このスレずっとさかのぼってみてみるといい。
507:デフォルトの名無しさん
08/09/03 17:56:44
誰か>>499を答えて下さる方いませんでしょうか?
他力本願で情けないのですが今の僕のレベルではお手上げ状態です(>_<)
508:デフォルトの名無しさん
08/09/03 18:42:40
お手上げなら正直に単位落とせばいいのに…
509:デフォルトの名無しさん
08/09/03 19:37:34
>>508
それはできません(>_<)どうか本当にお願いします(>_<)
510:デフォルトの名無しさん
08/09/03 20:12:17
>>509
マジレスすると、その機能を無料で作ってくださいとかありえない。
511:デフォルトの名無しさん
08/09/03 20:28:16
>>509
そうですか…。自力で作るしか方法は無いのですね。
わかりました、ご指摘いただいてありがとうございましたm(__)m
512:デフォルトの名無しさん
08/09/03 20:33:20
.
513:デフォルトの名無しさん
08/09/03 22:46:57
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:Borland
[3.3] 言語:C言語
[4] 期限:日付変更辺りまで
どうか宜しくお願いします。
514:デフォルトの名無しさん
08/09/03 23:02:30
>>513
#include <stdio.h>
#include <math.h>
int main(void)
{
FILE *fp_in, *fp_out;
char *filename_in="louise.dat", *filename_out="site.dat";
int x;
if((fp_in=fopen(filename_in, "r"))==NULL) return 1;
if((fp_out=fopen(filename_out, "w"))==NULL) return 2;
while(fscanf(fp_in, "%d", &x)==1)
{
fprintf(fp_out, "%f\n", sqrt(x));
}
fclose(fp_in);
fclose(fp_out);
return 0;
}
515:デフォルトの名無しさん
08/09/03 23:27:08
>>514
回答ありがとうございます。
ですが()を2重にしたり、NULLやreturn 0;以外のreturnの使い方を習っておりません・・・。
他にどんな書き方があるか聞いても良いでしょうか?
516:デフォルトの名無しさん
08/09/03 23:32:39
>>515
if((fp_in=fopen(filename_in, "r"))==NULL) return 1;
↓
fp_in=fopen(filename_in, "r");
if(fp_in==NULL) return 0;
517:デフォルトの名無しさん
08/09/03 23:44:50
>>516
ほう・・・カッコを外すと1が0になるのか・・・
518:デフォルトの名無しさん
08/09/03 23:52:07
return 0; 以外使えないなら仕方ない
519:デフォルトの名無しさん
08/09/04 01:48:04
>>517
揚げ足とることに必死で515をちゃんと読めてないw
520:デフォルトの名無しさん
08/09/04 07:47:02
if(fp_in==NULL) return 0;
↓
if(!fp_in) return 0;
521:デフォルトの名無しさん
08/09/04 09:52:49
>>520
なぜわざわざ可読性を下げる?
522:デフォルトの名無しさん
08/09/04 10:00:03
加毒性いうほどのもんじゃない
523:デフォルトの名無しさん
08/09/04 10:01:27
522は大規模な開発したことないんだな
524:デフォルトの名無しさん
08/09/04 11:50:53
慣用句とか知ってる?
525:デフォルトの名無しさん
08/09/04 12:05:34
それで可読性下がるなんて経験値低すぎる。
うちのコーディング規約でもif (!hoge)だし。
526:デフォルトの名無しさん
08/09/04 12:17:11
仕事なんかでは統一されていれば問題無いと思うが、
このスレは経験値低すぎる人が質問するスレだから不適切だな
527:520
08/09/04 12:18:41
>>521
>>515でNULLの使い方を習ってないと書いてたのでこうしました
528:デフォルトの名無しさん
08/09/04 12:22:51
次は!を習ってないと言われるわけですね
529:デフォルトの名無しさん
08/09/04 15:53:06
もう0で良いよ0で
530:デフォルトの名無しさん
08/09/04 17:38:15
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):URLの“第12回目”の中にある一番下(課題1)の
問題。 URL→URLリンク(al.cm.is.nagoya-u.ac.jp)
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 9月5日16時まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 関数とかは習っていません。
どうか宜しくお願いします(><)
531:デフォルトの名無しさん
08/09/04 17:42:39
>>530
面倒でも問題はテキストに起こそうぜ。
君の大学がばれるぞ。
で、JAVA???
532:530
08/09/04 18:00:18
>>531
分かりました。
533:530
08/09/04 18:16:59
連続スミマセン。
>>531
Javaです。
534:デフォルトの名無しさん
08/09/04 18:24:00
>>533
スレタイ読んで来ような。
ほしいのはこっちだろ?
スレリンク(tech板)
535:533
08/09/04 18:37:51
>>534
すみません。わざわざ誘導してもらって…失礼します
536:デフォルトの名無しさん
08/09/04 19:49:48
旧帝大でこれかよ…
537:デフォルトの名無しさん
08/09/04 23:32:13
七帝の中でも名古屋はおみそみたいなもんだからw
538:デフォルトの名無しさん
08/09/05 01:06:40
こんなアフォをみると日本の将来が本当に不安になるな。
教授に怒られることもできない。匿名の2CHでこそっと聞いて。ちなみにJava板で解答げっとしてたよ、こいつ
539:デフォルトの名無しさん
08/09/05 01:08:06
何騙されてんだ、そこはFランだ
540:504
08/09/05 01:16:42
>>506
亀レスすみません
宿題なんですけど、問題を解くのではなくてプログラムを作る宿題なんです…
ちょっと1から読んで来ます(;´Д`)
541:デフォルトの名無しさん
08/09/05 04:49:32
3問ありますがよろしくお願いします。
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: (Windows vista)
[3.2] コンパイラ名とバージョン: (Visual Studio 2005)
[3.3] 言語: C言語
[4] 期限: (来週まで)
[5] その他の制限: (ポインタの最初の段階まで習っています)
542:デフォルトの名無しさん
08/09/05 09:50:32
>>541 問1 こんな感じか?問2の意図がよくわからないが
#include <stdio.h>
void copy(char *from, char *to);
int main()
{
char a[8] = "America";
char b[8];
copy(a,b);
printf("a:%s\n",a);
printf("b:%s\n",b);
return 0;
}
void copy(char *from, char *to)
{
for(int i=0;*(from+i) != NULL;i++)
*(to+i) = *(from+i);
}
543:デフォルトの名無しさん
08/09/05 09:51:50
>>541
問1
#include <stdio.h>
int main(void)
{
char str1[7]="America";
char str2[7];
char *p1,*p2;
p1=str1;
p2=str2;
while(*p1)
*p2++=*p1++;
printf(str2);
return 0;
}
544:デフォルトの名無しさん
08/09/05 09:53:01
>>541
問2
#include <stdio.h>
int main(void)
{
char str[5]="abcde";
char *p;
p=str;
while(*p)
putchar(*p++);
return 0;
}
545:デフォルトの名無しさん
08/09/05 09:54:17
>>541
問3
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[6]="France";
char str2[6];
char *p1,*p2;
int i;
p1=str1;
p2=str2;
/* p1を'\0'の位置まで移動させる */
while(*p1)
p1++;
/* 今'\0'にいるため1つ前の'e'まで戻す */
p1--;
i=strlen(str1);
for(;i;i--)
*p2++ = *p1--;
printf(str2);
return 0;
}
546:543-545
08/09/05 10:02:47
'\0'のこと考えるの忘れてたぜ orz
547:デフォルトの名無しさん
08/09/05 10:14:30
>>546
よくあることだぜ。
むしろ、普通は数字直接入力なんてしないからな。
548:デフォルトの名無しさん
08/09/05 16:36:09
>>542
>>543
>>544
>>545
助かります♪
ありがとうございました。
549:デフォルトの名無しさん
08/09/08 13:10:28
[1] 授業単元:確率・統計
[2] 問題文(含コード&リンク):
AさんとBさんが順番にコインを投げる
ただし、AさんとBさんはそれぞれp, qの確率で表を出すことができるとする。
ここで、Aさんならm回、Bさんならn回先に表を出したら勝ちとする勝負をした場合
Aさんが勝つ確率を求める関数を作成しなさい。
ただし関数は以下のプロトタイプ宣言に従うこと。
double odds(double p, double q, int m, int n);
[3] 環境
[3.1] OS: Windows + Cygwin
[3.2] コンパイラ名とバージョン: gcc 3.4.4
[3.3] 言語: C
[4] 期限: 2008年09月08日11:59まで
[5] その他の制限:特にありませんが、アルゴリズムや考え方についての解説があると助かります。
よろしくお願いします。
550:デフォルトの名無しさん
08/09/08 14:52:44
>>549
数学の問題じゃねーか
数式よろ
551:デフォルトの名無しさん
08/09/08 15:27:46
#include <iostream>
#include <stdexception>
double odds(double p, double q, int m, int n) {
// Aが表を m 回出すまでの確率
double a = ( double )m / p;
// Bが表を n 回出すまでの確率
double b = ( double )n / q;
// AのBに対する勝率
// ただし、AはBよりも1回分余計に振るチャンスがある
return a / b + 1 / a; }
int main(){
using namespace std;
double p( 0 ), q( 0 );
int m( 0 ), n( 0 );
cout << "入力が必要です、例えばAとBが表を出す確率:";
cin >> p, q;
if ( p =< 0.0 || q =< 0.0 || p > 1.0 || q > 1.0 ) { throw domain_error( "ちょ、おまw" ); }
cout << "おまえが入力せよ、つまりAとBが表を出す回数:";
cin >> m, n;
if ( m =< 0 || n =< 0 ) { throw domain_error( "ちょ、おまw" ); }
cout << "AのBに対する勝率は・・・" << odds( m, n ) << endl;
return false; }
552:デフォルトの名無しさん
08/09/08 17:33:15
>>551
ちょ、おまw
553:デフォルトの名無しさん
08/09/08 18:04:00
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: WinXP SP3/Vista SP1
[3.2] コンパイラ名とバージョン: Borland
[3.3] 言語: C
[4] 期限: 明日9日 午前6時頃まで
[5] その他の制限:
課題番号の大きい順、6>5>4>3に優先して希望
出かけてる間に母親が親戚の子に勝手に俺のラップトップを貸した上、
明日の登校日に提出する課題の入ったUSBを吹っ飛ばされました…orz
復元作業とはいえ間に合うか不安なのでお願いします
554:デフォルトの名無しさん
08/09/08 18:45:22
まさに丸投げ
555:デフォルトの名無しさん
08/09/08 20:45:43
ハードディスクにないの?
556:デフォルトの名無しさん
08/09/08 20:51:10
>>553
やらせようとしている内容は察しがつくが
問題文が気持ち悪いな
表現のゆらぎが尋常じゃない。統一しろよと
557:デフォルトの名無しさん
08/09/08 20:52:58
>>551
脳が溶けた
558:デフォルトの名無しさん
08/09/08 21:35:46
>>553
親戚の子も母も許してやれよ?
その寛大な気持ちが、将来のお前の資産になる。
あぁ、母親はやらせくれるだろうし、親戚の子はお前を大切に育ててくれるのだから。
559:デフォルトの名無しさん
08/09/08 21:36:38
>>558
イミフ
560:デフォルトの名無しさん
08/09/08 21:41:33
IMF
読み:イミフ
561:553
08/09/08 22:11:40
>>554
URLリンク(kansai2channeler.hp.infoseek.co.jp)
1と2を終わらせて3に入ったものの、この有様で…。
USB吹っ飛ばされたショックで焦りすぎました、夜風にあたって頭冷やしてきます。
>>555
USB内で完結させてしまったのが敗因でした。
やり直しから大人しくHDDで作業→USBでコピー、の形を取ることにしました。
562:デフォルトの名無しさん
08/09/08 22:21:00
>>561
頑張ってコメントを書いているようだが内容が的外れ
最初は誰でもそんなもんだろうけど
563:デフォルトの名無しさん
08/09/08 22:23:57
そういえば、コメントってどういうことをどういう風に核のかっていう教則本みたいなのはみたことないな。
一応、先頭にプログラムの目的と製作日付、製作者の魔羅サイズは記入するようにしているけど・・・
564:デフォルトの名無しさん
08/09/08 22:30:24
>>563
標準時?最大時?現在時?
565:デフォルトの名無しさん
08/09/08 22:49:25
>>561
・ループから抜けるにはbreakを使うとよい
・一致文字列チェックでp[j]をみてるが、高頻度で見てはいけないところを
みるようになっている。それを防ぐために、配列pの各要素をNULLで初期化
しておいて、NULLじゃないところだけ一致チェックをするとよい
・一致した文字に対応する文字列件数を加算 の処理がcnt[n]++;
となっているが、cnt[j]++;では?
566:デフォルトの名無しさん
08/09/08 22:51:11
そんなことなかった。nで数チェックしてるのね。
みてはいけないとこはみてなさそうだった。ごめん。
567:デフォルトの名無しさん
08/09/08 22:57:21
printで状況を見る努力もしてるし、コメントもあながち的はずれではないし。
いい感じと思うけどなぁ。
丸投げして自分の考えと全く異なるコードを提出するより
可能ならばもう一回作って提出できる方がいいなと思う。
その途中で過去の自分のコードを改善できることもあるし。
別に丸投げが悪いといってるわけではなくて、時間があれば
そういうこと(作り直し)をしてみたらいいんじゃない?程度。
568:デフォルトの名無しさん
08/09/08 22:57:45
>>561
データ復旧させたほうが早いかも
がんばれ!
569:デフォルトの名無しさん
08/09/08 23:59:34
>>549
double odds(double p, double q, int m, int n)
{
if(m==0) return 1.0;
if(n==0) return 0.0;
return ( p*q*odds(p,q,m-1,n-1) + p*(1-q)*odds(p,q,m-1,n) + (1-p)*q*odds(p,q,m,n-1) ) / (p+q-p*q);
}
//
// F(m,n) = p*q*F(m-1,n-1) +p*(1-q)*F(m-1,n) +(1-p)*q*F(m-1,n) +(1-p)*(1-q)*F(m,n)
// 上の式を、F(m,n) について解く
//
570:デフォルトの名無しさん
08/09/09 01:39:52
>>553
課題6だけ。
出力と、main()のループを抜けるロジックがアレだけど、
眠いんでそっちで調整して。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
571:デフォルトの名無しさん
08/09/09 02:34:31
[1] 授業単元:ファイル出入力
[2] 問題文(含コード&リンク):
複数の人の名前と体重、身長を質問してローレル指数を計算して
「名前、体重、身長、ローレル指数、やせすぎ(または丁度良いなど)」
をファイルに保存しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限: 2008/09/9(am.7)
[5] その他の制限:特になし
自分でやってみたのですが分かりません。急ですみませんがよろしくお願いします。
#include <stdio.h>
int main(void)
{
int p,n,w,h,r;
FILE *fp1;
fp1 = fopen("c:\\file.dat","w");
printf("人数を入力してください。:");
scanf("%d",&p);
572:デフォルトの名無しさん
08/09/09 02:36:07
for(;p>0;p--){
printf("名前を入力してください。:");
scanf("%s",&n);
fprintf(fp1,"%d\n",n);
printf("体重を入力してください。(kg):");
scanf("%d",&w);
fprintf(fp1,"%d\n",w);
printf("身長を入力してください。(cm):");
scanf("%d",&h);
fprintf(fp1,"%d\n",h);
r=w/(h*h*h)*1.0E7;
fprintf(fp1,"%d\n",r);
if (r<100){
printf("やせすぎです。\n");
fprintf(fp1,"やせすぎ\n"); }
else if(r>=100 && r<115){
printf("やせている。\n");
fprintf(fp1,"やせている\n"); }
else if(r>=115 && r<145){
printf("丁度良いです。\n");
fprintf(fp1,"丁度良い\n"); }
else if(r>=145 && r<160){
printf("太っています。\n");
fprintf(fp1,"太っている\n"); }
else {
printf("太りすぎです。\n");
fprintf(fp1,"太りすぎ\n"); }
}
fclose(fp1);
return 0;
}
573:デフォルトの名無しさん
08/09/09 06:19:46
>>572
何が分からんのか分からんのだが。
> printf("名前を入力してください。:");
> scanf("%s",&n);
> fprintf(fp1,"%d\n",n);
↑の fprintf(fp1,"%d\n",n); は fprintf(fp1, "%s\n",n); だべ。
後、名前って文字列だよな?なんで int 型の変数に入れようとしてんの?だったら例えば
char s[64];
scanf("%s", s);
fprintf(fp1, "%d\n", s);
こうだな。
後、
> r=w/(h*h*h)*1.0E7;
もおかしい。r は float や double で定義せんと小数点使えん。
後、整数型を直接割り算しても0にしかならん。
ならば
身長、体重も小数点扱える型で定義するか、キャストしてから割り算せい。
574:デフォルトの名無しさん
08/09/09 06:29:06
まとめ
> int p,n,w,h,r;
char n[64];
int p;
float n, w, h, r;
> scanf("%s",&n);
> fprintf(fp1,"%d\n",n);
scanf("%s", n);
fprintf(fp1, "%s\n", n);
> scanf("%d", &w);
> fprintf(fp1, "%d\n", w);
scanf("%f",&w);
fprintf(fp1, "%f\n", w);
> scanf("%d",&h);
> fprintf(fp1,"%d\n",h);
scanf("%f", &h);
fprintf(fp1, "%f\n", h);
> r=w/(h*h*h)*1.0E7;
> fprintf(fp1,"%d\n",r);
r = w / (h * h * h ) * 1000000;
fprintf(fp1, "%f\n", r);
とりあえずこれで。
575:デフォルトの名無しさん
08/09/09 06:47:11
訂正
> 後、整数型を直接割り算しても0にしかならん。
整数の部分しか持って来ないってことね。
int i = 3 / 2;
ってやったら、i は 1 になる。
後、fprintf で小数点以下を書き込みたくないのなら、
> fprintf(fp1, "%f\n", w);
fprintf(fp1, "%0.0f\n", w);
にすると小数点以下を無くして書き込む。
576:デフォルトの名無しさん
08/09/09 14:00:24
いいかげん>>569に誰か突っ込めよ
577:デフォルトの名無しさん
08/09/09 15:04:48
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] Windows XP
[3.2] gcc
[3.3] C
[4] 期限:2008/9/12
[5] xlsファイルでシートごとに問題が分かれています。よろしくお願いします。
578:デフォルトの名無しさん
08/09/09 16:23:52
#include <stdio.h>
unsigned str_length(const char str[])
{
unsigned len = 0;
while (str[len])
len++;
return (len);
}
void str_rev(const char str[]){
unsigned i = str_length(str);
while(i>0)
printf("%c",str[--i]);
}
int main(void)
{
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
printf("入力した文字列は%sです。\n長さは%uです。\n", str, str_length(str));
printf("文字列を逆から表示→");
str_rev(str);
printf("\n");
return (0);
}
ポインタを使って文字列を逆から表示させる課題があるのですが、
上のプログラムのどこを変更すればポインタを使ったプログラムになるでしょうか?
よろしくお願いします。
579:デフォルトの名無しさん
08/09/09 16:38:12
>>578
>>541
過去スレ全部とは言わない。
せめてこのスレ位読んできて。
580:デフォルトの名無しさん
08/09/09 19:23:13
>>576
ツッコミの手本を見せてください><
581:デフォルトの名無しさん
08/09/09 22:41:15
>>577
丸投げかよ
582:デフォルトの名無しさん
08/09/09 23:17:10
>>577
問題1
#include <stdio.h>
#define CONST_NUM ( -2007110825 ) /*( 314159265 )*/
const int number = CONST_NUM;
char str_decimal[16];
char str_hex[16];
char str_octal[16];
char str_binary[40];
const char * bin_table[] = {
"0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111",
};
int main()
{
int i = 0;
int l = 0;
sprintf( str_decimal, "%d", number );
sprintf( str_hex, "0x%x", number );
sprintf( str_octal, "0%o", number );
l = sprintf( str_binary, "0b" );
for ( i = 28; i >= 0; i -= 4 ) {
l += sprintf( str_binary + l, "%s", bin_table[( number >> i ) & 0x0f] );
}
printf( "decimal:%s\n", str_decimal );
printf( " hex:%s\n", str_hex );
printf( " octal:%s\n", str_octal );
printf( " binary:%s\n", str_binary );
}
583:デフォルトの名無しさん
08/09/09 23:35:36
>>577
問題2
URLリンク(kansai2channeler.hp.infoseek.co.jp)
584:583
08/09/09 23:40:08
微妙に読み間違っていた。
・typedefを消去
・string1 s1を消去
・strign2 s2を消去
・s1,s2をそれぞれstring1、string2に置換
585:デフォルトの名無しさん
08/09/10 01:06:41
>>578
URLリンク(kansai2channeler.hp.infoseek.co.jp)
586:デフォルトの名無しさん
08/09/10 16:51:46
すいません。またお願いします。
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: (Windows vista)
[3.2] コンパイラ名とバージョン: (Visual Studio 2005)
[3.3] 言語: C言語
[4] 期限: (来週まで)
[5] その他の制限: (ポインタの最初の段階まで習っています)
587:デフォルトの名無しさん
08/09/10 17:26:11
>>586
>>542以下じゃないのか?
588:デフォルトの名無しさん
08/09/10 18:50:24
>>586
問1
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p="Japan";
int i;
i=strlen(p);
i-=1;
for(;i>=0;i--)
putchar(*(p+i));
return 0;
}
589:デフォルトの名無しさん
08/09/10 18:51:30
>>586
問2
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p="pointer test program";
char save[256];
strcpy(save,p);
printf(save);
return 0;
}
590:デフォルトの名無しさん
08/09/10 18:52:16
>>586
問3
#include <stdio.h>
int main(void)
{
char *day_p[ ]={
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Fraiday",
"Saturday",
NULL
};
int i;
for(i=0;day_p[i];i++)
printf("%s\n",day_p[i]);
return 0;
}
591:デフォルトの名無しさん
08/09/10 18:54:14
>>586
問4
#include <stdio.h>
int main(void)
{
char *day_p[ ]={
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Fraiday",
"Saturday",
NULL
};
int i;
for(i=0; *(day_p+i); i++)
printf("%s\n",*(day_p+i));
return 0;
}
592:デフォルトの名無しさん
08/09/10 23:33:43
>>586
問4別解
#include <stdio.h>
int main(void)
{
char *day_p[ ]={
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Fraiday",
"Saturday",
NULL
};
char **p;
for (p=day_p; *p; p++) {
printf("%s\n", *p);
}
return 0;
}
593:デフォルトの名無しさん
08/09/10 23:35:29
>>589
- printf(save);
+ printf("%s", save);
594:デフォルトの名無しさん
08/09/10 23:37:13
>>578
- unsigned str_length(const char str[])
+ unsigned str_length(const char *str)
- void str_rev(const char str[]){
+ void str_rev(const char *str){
595:デフォルトの名無しさん
08/09/11 05:17:31
[1] 授業単元:C/C++(最小ファイルサイズを目指せ!!)
[2] 問題文(含コード):
int型のsin,cosテーブルを"sincos.cpp"というファイル名で出力
コード:main.c<とりあえずココまで短くなりました>
float sin();f;i;main(){for(f=fopen("sincos.cpp","w");i<450;i++)fprintf(f,
"%c%6d,%s",i%10?32:9,(int)(sin(i*3.141592653589793/180)*65536),i%10<9?"":
"\n");fclose(f);}
これより短くせよ。但し、出力結果は同じになるように。
[3] 環境
[3.1] Windows
[3.2] VisualStudio2005
[3.3] C/C++どちらでも可
※スレ違いだったらゴメンなさい
596:デフォルトの名無しさん
08/09/11 05:36:16
7行スレでやるといいよ
597:デフォルトの名無しさん
08/09/11 12:59:59
とりあえずfcloseいらなくね?
598:y
08/09/11 14:51:28
文字列(数字のみ)で構成されているファイルを読み込んで
文字列を数値に変換して並び替えを行うプログラムを作っているんですけど
文字列を数値に変換をして並び替えを行った結果、
先頭の数字0がなくなった状態で並び替えがされていました。
先頭の数字0がなくならない状態で並び替えを行う方法を教えてください。
お願いします。
例)
先頭の数字0がなくならない並び替え
並び替え前 並び替え後
00159 0101
130 → 130
0101 00159
先頭数字0がなくなった並び替え
並び替え前 並び替え後
00159 101
130 → 130
0101 159
599:デフォルトの名無しさん
08/09/11 15:04:37
>>598
文字列と数値の構造体にして数値でソートして文字列を表示
600:y
08/09/11 15:19:06
文字列と数値の構造体にして数値でソートして文字列を表示
するとはなんですか?
プログラムにするとどうなりますか?
教えてください。
601:デフォルトの名無しさん
08/09/11 15:25:52
C言語なら俺に聞け(入門編)で詳しく解説されている。
602:デフォルトの名無しさん
08/09/11 15:30:30
>>600
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char moji[32];
int suu;
} NUM;
int compare(const NUM *a, const NUM *b)
{
return a->suu - b->suu;
}
int main(void)
{
NUM num[3] = {"00159", 0, "130", 0, "0101", 0};
int i;
for (i = 0; i < 3; i++) {
num[i].suu = atoi(num[i].moji);
}
qsort(num, 3, sizeof(NUM), (int (*)(const void*, const void*))compare);
for (i = 0; i < 3; i++) {
printf("num%d=%s\n", i, num[i].moji);
}
return 0;
}
603:デフォルトの名無しさん
08/09/11 19:55:20
>>595
う~ん、直値は見なかったことにしよう
URLリンク(kansai2channeler.hp.infoseek.co.jp)
604:デフォルトの名無しさん
08/09/12 11:54:51
>>598
URLリンク(kansai2channeler.hp.infoseek.co.jp)
605:604
08/09/12 12:02:29
fcloseすんの忘れてた。
あと、data.txtの内容は整数限定で
10桁以上の数値に関しては無しの方向で
606:デフォルトの名無しさん
08/09/12 12:10:08
>>604
ポインタの配列で出来るのに何でわざわざ構造体にしてんの?(numdataとか要らないし)
strotol(atoi)で出来るのに何でわざわざToNumDataとか作ってんの?
なんでそんなど素人の分際で人に教えようとしてんの?
607:604
08/09/12 12:12:55
>>606
文句言うならお前が手本を示せ。
ソースも書かずに何言ってるんだか。
608:デフォルトの名無しさん
08/09/12 12:14:52
まあでもこのくらいじゃないと、どっかで手本丸写ししたってバレちゃうかもしれんし。
609:604
08/09/12 12:16:23
607は俺じゃないよ
610:606
08/09/12 12:27:54
ほれ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
○2度読みする必要なし。
○構造体もイラネ。
○ToNumDataってatoiでいいじゃん。
○malloc+strcpyってstrdupでいいじゃん。
○比較関数はローカルなんだからstaticつけろよ。
○比較関数の引数宣言が変だったから直しといた。
○関数はトップダウン順に(main→cmp)書いた方が見やすい。プロトタイプ宣言を惜しむな。
○こういうツールはホントはstdinから読むべきなんだけど、data.txtから読みたいみたいだから尊重しといたぞw
611:604
08/09/12 13:46:18
>>610
strdupって知りませんでした
staticも付けるべきでした
その他何かと勉強になりました
猛省します
612:デフォルトの名無しさん
08/09/12 15:17:18
よーし>>610にイチャモンを付けまくるぞー
strdupはC言語標準の関数じゃないし。
いちいちC言語の規格を無視する理由になる程便利でもないし。
使わないほうがよくね?
あとreallocの結果がNULLの時にメモリリークしてるぜ。
printf(buffer[i])は文字列の中に%があると
破綻するからデータに%しかなくても使うのはよくないprintf("%s",...)にしなさい。
それに比較関数のポインタをキャストするのはよくない。
関数ポインタのキャストは動作するか保障されてない。
素直に比較関数の中でvoid*をキャストしろ。
比較関数で減算使ってるけど、
値がでかいとオーバーフローとかアンダーフローする可能性がある。
素直に比較しろ。
613:デフォルトの名無しさん
08/09/12 15:47:46
1] 授業単元: 情報
[2] 問題文(含コード&リンク): 2点の座標A(a,b),B(c,d)を与えたとき
1.ABの距離を求めよ
2. ABを通る直線の方程式を求めよ
3. 2で求めた方程式がx=1,y=1,y=xと交点を持つかどうか調べ持つならその交点の座標を
持たないならNoと返すプログラムを作成せよ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C
[4] 期限: 2008年9月12日23時59分
[5] その他の制限:特にないです。
よろしくお願いします。
614:デフォルトの名無しさん
08/09/12 15:52:49
>>612
こんなうるさい奴と仕事したくない・・・・
615:デフォルトの名無しさん
08/09/12 16:01:35
>>614
ていうか仕事だともっと細かく突付くよ。
潰せる問題点はできる限り早めに潰したほうが望ましいし。
イチャモン付けるだけもなんなので自分も書いてみた。
もう面倒だし、これでよくね?
色々と無視してるけど。
char s[256][256];
f(char*a,char*b){return atoi(b)-atoi(a);}
main(){
int i=0;
while(gets(s[i]))++i;
qsort(s,256,256,f);
while(i--)puts(s[i]);
}
よい子の皆はこのコードは悲惨なので真似しないでねー
616:デフォルトの名無しさん
08/09/12 18:22:02
>>613
URLリンク(kansai2channeler.hp.infoseek.co.jp)
座標は整数で入力するようにした。
3番目の問題はよくわかんなかったので解いてません。
617:デフォルトの名無しさん
08/09/12 18:35:09
[1] 授業単元: C言語基本
[2] 問題文(含コード&リンク):
文字判定でスペースが入力されたら 「空白です」 と表示させたい
[3] 環境
[3.1] OS: Windows
[3.2] VC6.0
[3.3] 言語: C
[4] 期限: 無期限
618:デフォルトの名無しさん
08/09/12 19:45:47
コンパイルするとエラーメッセージが出てきてしまいます><
手直ししていただけませんでしょうか?
[1] 授業単元: コンピュータープログラミングⅠ
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5
[3.3] 言語:C++
[4] 期限: 2008.9.12(24:00)
619:デフォルトの名無しさん
08/09/12 20:07:16
>>618
URLリンク(kansai2channeler.hp.infoseek.co.jp)
620:デフォルトの名無しさん
08/09/12 20:20:23
>>618
void You::Attack()をint You::Attack()に(宣言もint Attack()に訂正)
int You::Attack()の最後にreturn a;
void Shishou::Attacked(int SAttacked)内のaを全てSAttackedに
621:デフォルトの名無しさん
08/09/12 20:36:02
>>610
>>620
レスありがとです><
こんな簡単なことに時間を割いてもらって大変申し訳なかったです
でもおかげで助かりました!どうもありがとう!
622:デフォルトの名無しさん
08/09/12 20:42:17
ここって、シュミのプログラマーしかいないんじゃね?
Cなんてばぐったら致命的な損害及ぼすFA、医療、航空などにつかわれてっから
あめーもんじゃーねーぞ。
623:デフォルトの名無しさん
08/09/12 20:55:03
>>622
どこをみてそういったの?
624:613
08/09/12 21:07:53
>>616
お礼おくれてすみません
ありがとうござました!
どなたか3番も解ける方いないでしょうか・・・
625:デフォルトの名無しさん
08/09/12 21:34:02
>>624
puts("y=1と交点を持つか");
if (A.y == B.y) {
puts("No");
}
else {
printf("交点 %.3lf,1 \n", (1-h)/slop);
}
puts("x=1と交点を持つか");
if (A.x == B.x) {
puts("No");
}
else {
printf("交点 1,%.3lf \n", slop + h);
}
puts("y=xと交点を持つか");
if (slop == 1) {
puts("No");
}
else {
printf("交点 %.3lf,%.3lf \n", h/(1-slop), h/(1-slop));
}
626:デフォルトの名無しさん
08/09/12 21:59:38
質問です。
msg.data[0] = 0xE0;
msg.data[1] = 0x07;
msg.data[2] = 0x00;
msg.data[3] = 0x00;
msg.data[4] = 0x07;
msg.data[5] = 0xAD;
msg.data[6] = 0xA9;
msg.data[7] = 0xD7;
//msg.dataはUCHAR型配列です
このコードの0x○○の部分をchar型配列のIDという変数からmsg.dataに
格納するように変更したいです。
わかりにくいんですが、今IDにはE007000007ADA9D7というのが格納されています。
上記のコードを
msg.data[0] = ID[0];
msg.data[1] = ID[1];
msg.data[2] = ID[2];
msg.data[3] = ID[3];
msg.data[4] = ID[4];
msg.data[5] = ID[5];
msg.data[6] = ID[6];
msg.data[7] = ID[7];
で出来るのかな、と思いましたが余裕で無理でした。
どなたか方法を知っていればお願いします。
627:デフォルトの名無しさん
08/09/12 22:03:03
strtol様の出番だな。
というわけで後は誰か任せた。
628:626
08/09/12 22:04:36
>>627
strtol?
今調べてみます。
ありがとうございます。
629:デフォルトの名無しさん
08/09/12 22:12:51
>>627
strtolでもいいけどNUL文字を自分で入れないと駄目ジャン。
むしろsscanfのほうが使いやすいんじゃない?
630:626
08/09/12 22:18:31
今、試してるんですがいまいち要領がつかめません。
どなたかちょろっと書いてくださると助かるんですが・・・。
631:デフォルトの名無しさん
08/09/12 22:33:59
#include <string.h>
unsigned char ID[8] =
{
0xE0 , 0x07 , 0x00 , 0x00 , 0x07 , 0xAD , 0xA9 , 0xD7
};
struct msg_t
{
unsigned char data[8];
};
int main( int main , char **argv )
{
struct msg_t msg;
/*IDの配列サイズだけmsg.dataにコピー*/
memcpy( msg.data , ID , sizeof( ID ) );
return 0;
}
632:デフォルトの名無しさん
08/09/12 22:49:49
こう?
sscanf(ID, "%2x%2x%2x%2x%2x%2x%2x%2x"
, &data[0], &data[1], &data[2], &data[3]
, &data[4], &data[5], &data[6], &data[7]);
633:626
08/09/12 23:00:09
>>631
>>632
おお、助かりました!!
これでもう少しアプリ開発が進みそうです
634:デフォルトの名無しさん
08/09/12 23:07:04
う、うん。
>>631と>>632の何が違うか理解してから使ってね。。。
635:デフォルトの名無しさん
08/09/14 02:01:11
>>617
#include <stdio.h>
int main( void )
{
char ch;
puts( "1文字だけ入力してください。" );
ch = getc();
switch( ch ){
case ' ':
puts( "空白です" );
default:
break;
}
return( 0 );
}
636:あおい
08/09/14 17:52:30
改行コードとして"LF"が使われているテキストファイルを読み取り、
"LF"を"CR+LF"に変換できるようなソースを教えてください。
ロジックとしては、
1文字ずつ読み込み、"LF"じゃなかったらそのまま出力し、"LF"だったら"CR+LF"にして出力する
のようなものが思いつくのですが、C言語は経験が無くて・・・。
また処理時間がシビアに要求されていて、なるべく処理時間が早いソースができればと思っています。
637:あおい
08/09/14 17:57:58
(636の補足)
外部サーバ(OSは不明)から改行コード"LF"のテキストファイルが
HULFT6を使用して送られてきます。
こちら側はWindows2003サーバで受け取り、そのテキストファイルを読み込んで
データ異常チェック・複数ファイルの結合といった処理を行います。
その際、改行コード"LF"では不都合かと思い、"CRLF"に一度変換してから処理に回そうと考えているのです。
C言語に詳しい方どうか助けてください。
638:あおい
08/09/14 18:04:12
重ね重ねすいません。質問の仕方のルールがありましたね。
改めて書き直します。
【質問テンプレ】
[1] 授業単元: 改行コード変換
[2] 636&637参照
[3.2] VC 6.0
[3.3] 言語: C
[4] 期限: 2008年09月15日22:00まで
どうかお願いします。
639:デフォルトの名無しさん
08/09/14 18:06:21
そのロジックで良いんじゃないかな。
もう少し具体的には、一文字前をおぼえておいて、
現在書こうとしている文字がLFで、一文字前がCRで無ければ
CRも書く。
例えば、
int last = '¥0';
int ch;
while ((ch = getchar()) != EOF) {
if (last != '¥r') putchar('¥r');
putchar(ch);
last = ch;
}
こんな感じかな。
fgets, strlen, fputs 使った方が少しだけ速いかもしれないが
簡明さでは劣る。
640:デフォルトの名無しさん
08/09/14 18:14:48
ごめん、if(ch=='¥n')を追加しといて。
俺ってばか。
641:あおい
08/09/14 18:27:38
迅速な応対ありがとうございます。
とても助かりました。
もう一つだけ教えていただいていいでしょうか?
改行コード"LF"と"CR"ってC言語上では何になるのでしょうか?
"CR"は"\r"?
ホントに初心者で申し訳ないのですが、
教えていただいたソースに簡単なコメントを添えていただけると助かります。
642:デフォルトの名無しさん
08/09/14 18:32:51
速度ならバリなりで読み込めよ
643:デフォルトの名無しさん
08/09/14 18:36:58
ただし、Webでの受け渡しなら、届いた分ずつ処理すればいい。
ほとんど、ネットの転送時間に依存して書き換え速度は無視できる
644:デフォルトの名無しさん
08/09/14 18:40:00
全部読み込む->変換->書き込み
の方が早いんじゃないの?
645:あおい
08/09/14 18:43:52
受信方法はHULFT6というツールで行います。
ファイルを送ってくる相手は別会社なので、あまり柔軟な要求は聞いてくれません。。。
最大20ファイルほどを1ファイルずつ連続で送ってきます。
1ファイルにはデータレコードのみで4レコード入っています。
受け取ったファイルを5分ごとにまとめて編集し、1ファイルに集約します。
そんなシステムを要求されているのですが・・・。
仕組みは考えられてもCに詳しくないので困っているんです。
646:デフォルトの名無しさん
08/09/14 18:44:11
届いた分ずつの方が速いよ。 1Mで転送待ちで5秒掛かったとたら
そのあと処理に0.5秒掛かれば合計で5.5秒。
もし32Kbyte届いたとして、それを書き換える時間は次のデータが届くまでには終わっているだろう。
647:デフォルトの名無しさん
08/09/14 18:45:40
こんな簡単な要求で苦しんでる会社と仕事したくないな・・・・
648:デフォルトの名無しさん
08/09/14 18:50:24
HULFT6調べたら、独自形式で圧縮、復元してるみたいね。 順次の処理は無理みたいだ。
ローカルファイルを書き換えるという方法しかないね。
簡単な方法だと、
nkf.exe -Lw -c inputfile > outputfile
でいいのでは?
649:デフォルトの名無しさん
08/09/14 19:00:34
ただし、NKFは文字コードの自動判別がはいるから、処理には時間が掛かる。
間にあわなければ、C言語を使ったら
650:デフォルトの名無しさん
08/09/14 19:03:00
1Mから500Mのサイズで最も速く書き換えられるアルゴリズムを作ってみてください。
651:デフォルトの名無しさん
08/09/14 19:10:19
>>650
>最も速く書き換えられる
なにを?
652:デフォルトの名無しさん
08/09/14 19:11:53
考えたアルゴリズム。 500M=5M*100に分割して読み込む。
スレッドを用意して、5M+αのバッファを2~4個持つ。
空いているところへデータと分割位置を渡して処理をさせる。
処理後に出力ルーチンへ渡す。
出力ルーチンは0番から順に書き込み、バッファとスレッドを解放する。
653:デフォルトの名無しさん
08/09/14 19:13:07
>>651
500Mのテキストファイルの改行コードを最も高速で変換するプログラムです。
654:デフォルトの名無しさん
08/09/14 19:22:42
処理時間の大半がIOになると思うけど、そういう処理でもやっぱ、マルチスレッドにして処理が早くなったりするの?
655:デフォルトの名無しさん
08/09/14 19:24:43
スレッド生成時間とかが気になる。
656:デフォルトの名無しさん
08/09/14 19:25:22
>>641
基本的にLFは'\n'でCRが'\r'だと思って問題ない。
>>653
そういう次元の話だと、もはやアルゴリズムよりいかにCPUを使い倒すかって問題になる。
657:デフォルトの名無しさん
08/09/14 19:27:42
この単純な課題で誰が上級者なのかチャレンジしよう。いまくんでみているところ
658:あおい
08/09/14 20:12:02
みなさん、初心者でホントにすいません。。。
改行コード'LF'のテキストを'CR+LF'に変換する、
一番シンプルで処理速度が期待できるCのソースを教えてください。
よろしくお願いします。
659:デフォルトの名無しさん
08/09/14 20:15:27
シンプルで、そこそこ速いのは、512Kbyte位読み込んで、書き換えて書き出す。
というので良いと思う。スレッド使っても速くなるかは微妙。
660:デフォルトの名無しさん
08/09/14 20:39:27
>>658
変換する対象はファイルでいいの?
661:デフォルトの名無しさん
08/09/14 20:40:25
これで充分だろ。
てかnkf使うんじゃダメなのか?
#include <stdio.h>
int main(void)
{
int ch;
while((ch = getchar()) != EOF){
if(ch == '\n'){
putchar('\r');
}
putchar(ch);
}
return 0;
}
662:デフォルトの名無しさん
08/09/14 20:45:39
>>661
一文字ずつ読んだら鈍いし、それは間違えてないか?
663:デフォルトの名無しさん
08/09/14 20:51:01
作ってみた。何を対象にして時間計測すればいいの?
#include<stdio.h>
#include<stdlib.h>
#define BUF_SIZE (1<<20)
#define CHAR_LF 0x0A
#define CHAR_CR 0x0D
int lf2crlf(FILE *fp_in, FILE *fp_out){
char *buf_in, *buf_out;
size_t buf_size=BUF_SIZE, read_size, write_size, whole_size=0, i;
buf_in=malloc(buf_size);
buf_out=malloc(buf_size*2);
if(buf_in==NULL || buf_out==NULL) goto on_exit;
while((read_size=fread(buf_in, 1, buf_size, fp_in))){
for(i=0,write_size=0;i<read_size;i++){
if(buf_in[i]==CHAR_LF) buf_out[write_size++]=CHAR_CR;
buf_out[write_size++]=buf_in[i];
}
whole_size+=fwrite(buf_out, 1, write_size, fp_out);
}
on_exit:
free(buf_in);
free(buf_out);
return whole_size;
}
int main(void){
lf2crlf(stdin, stdout);
return 0;
}
664:661
08/09/14 20:51:30
>>662
一文字づつ読んだら遅い?オーケー、おまえが速いと思うプログラムを書いてみて、
オレのと速度比較してみ。そのうえで、おまえのプログラムのほうが速かったら、
そのとおりでしたと認めるよ。
あと、間違えてると思うんならその箇所を指摘してくれ。単に、「間違えてないか?」
と言われても「どこが?」と聞き返すしかないぞ。
665:デフォルトの名無しさん
08/09/14 20:59:29
ちょっとまってろ
666:デフォルトの名無しさん
08/09/14 21:07:40
1行読み込んで1番最後だけ確認するのが早いんじゃないの?
667:デフォルトの名無しさん
08/09/14 21:11:19
DOSのころ、setvbufでバッファを大きくしたらそれだけでファイルIOが速くなったけど、Windows95か98のころに、
確認してみたら、setvbufでバッファを大きくしても、ぜんぜん速くならなかったような記憶がある。
668:662
08/09/14 21:16:16
質問があります。
>>661でgetchar()っていうのは、ファイルも開いて無くて使えますか?
>>663でstdinて (ここ)にくるやつですか? ***.exe (ここ)