どこかで誰かがC/C++の宿題を片付けます 38代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
見知らぬ誰かが、あなたのわからない宿題を片づけます。たぶん。
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:
【アップローダー】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【歴代スレは>>1-10辺り】
37代目: http://pc5.2ch.net/test/read.cgi/tech/1103913840/
36代目: http://pc5.2ch.net/test/read.cgi/tech/1102753497/
35代目: http://pc5.2ch.net/test/read.cgi/tech/1101568895/
34代目: http://pc5.2ch.net/test/read.cgi/tech/1100530682/
33代目: http://pc5.2ch.net/test/read.cgi/tech/1097932699/
32代目: http://pc5.2ch.net/test/read.cgi/tech/1097592876/
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
29代目: http://pc5.2ch.net/test/read.cgi/tech/1090765027/
2デフォルトの名無しさん:05/01/12 23:53:13
28代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
1代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
3デフォルトの名無しさん:05/01/12 23:55:30
>>1
4デフォルトの名無しさん:05/01/13 00:04:11
あっしには、 かかわりのねえこって…
5デフォルトの名無しさん:05/01/13 00:15:01
もうすぐ春ですね
6デフォルトの名無しさん:05/01/13 00:57:13
デンジマン
7デフォルトの名無しさん:05/01/13 14:31:46
>>1
立てたら前スレに報告しろよボケ
8デフォルトの名無しさん:05/01/13 15:53:34
>>1
9デフォルトの名無しさん:05/01/13 21:05:32
エクセルでボタン作って、そこを押すとランダムに数字がでるプログラムをつくってもらえないですか
10デフォルトの名無しさん:05/01/13 21:37:53
Excelスレ行け
11デフォルトの名無しさん:05/01/13 22:29:01
[1] 授業単元: Computer Architecture
[2] 問題文(含コード&リンク): アセンブラを作成せよ。
  もしソースファイル(アセンブリ言語で書かれた)にエラーが
  あればエラーを表示する。規格はISO-C89
[3] 環境
 [3.1] OS: Vine Linux
 [3.2] コンパイラ(バージョン): gcc 3.3.2
 [3.3] 言語:C
[4] 期限:2005年01月18日まで
[5] その他の制限:どのように書いたら良いかわかりません。コーディング
の方針を示して頂けるだけでもうれしいです。
12デフォルトの名無しさん:05/01/13 22:33:31
ISO-C89ってC言語の規格じゃないの?
13デフォルトの名無しさん:05/01/13 22:40:32
>>12
C言語でアセンブラの構文チェッカ作れって事だろ?
14デフォルトの名無しさん:05/01/13 22:43:49
[1] 授業単元:c言語基礎1
[2] 問題文(含コード&リンク): スロットマシーンを作るプログラムです。
・数字+Enterキーの入力をきっかけに乱数を発生し、0 から 9 までの数値を形成する
・これを三回繰り返し、得られた数字の並び方で点数を付ける
・三回とも同じなら 10 点、二個同じなら 2 点、並び順なら 5 点を与える
・これを十回繰り返して、合計を表示する
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ(バージョン): 大学のコンピュータのため分かりません
 [3.3] 言語:C言語
[4] 期限:2005年1月14日15:00まで
[5] その他の制限: 大学でヒントが出たので書きます。

#include<stdlib.h>
#include<time.h>
#include<stdio.h>
void main (void)
{ /* rand()は0〜32767 の乱数を発生 */
srand((unsigned)time(NULL) % RAND_MAX); /* 時刻を基に乱数の初期値を設定 */
int intRandomNumber = rand() % 10 ; /* 10で割った余り:0〜9の整数を決定 */
printf(" intRandomNumber= %d \n",intRandomNumber);
}

15デフォルトの名無しさん:05/01/13 23:00:31
ま た ス ロ ッ ト か
16デフォルトの名無しさん:05/01/13 23:14:31
<<14
ごめんなさい。
提出明日までなので何とかお願いします。
17デフォルトの名無しさん:05/01/13 23:15:45
>>14
その〆切時刻に大学に入れるのか?
センター試験の準備でもやってるんじゃないの?

午前中に出しとけよ。
18デフォルトの名無しさん:05/01/13 23:20:28
>>11
アセンブラ、とだけ言われても作りようがないよ…
命令セットとレジスタの構成がないと。
19デフォルトの名無しさん:05/01/13 23:21:00
>>大丈夫です。6時まで授業やってますから。
20デフォルトの名無しさん:05/01/14 00:22:26
#include <map>
class a{ static map<char,char> m; };

map<char,char> a::m;
a::m.insert(map<char,char>::value_type('a','b'));

a::mに前もって('a','b')を入れておきたいのですが、
上のようにするとエラーが出てしまいます。
どうすればよいか教えてください。お願いします。
21デフォルトの名無しさん:05/01/14 00:24:00
libcをつかうasの出力を
gccではなくldでほげして
実行ファイルにするには
どうほげるといいでsか??

$ cc -S test2.c -o test2.S
$ as test2.S -o test2.o
$ ld -o test2 test2.o /usr/lib/crt1.o /usr/lib/crti.o -lc
$ ./test2
bash: ./test2: No such file or directory

test2 ↓
00000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 03 00 01 00 00 00 c4 82 04 08 34 00 00 00 |............4...|
00000020 f8 1a 00 00 00 00 00 00 34 00 20 00 07 00 28 00 |........4. ...(.|
00000030 1d 00 1a 00 06 00 00 00 34 00 00 00 34 80 04 08 |........4...4...|
00000040 34 80 04 08 e0 00 00 00 e0 00 00 00 05 00 00 00 |4...............|
22デフォルトの名無しさん:05/01/14 00:45:43
>>1
おつ && おめ
23デフォルトの名無しさん:05/01/14 00:49:19
>>14
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/68.txt
素人がつくったので参考にでもなれば幸いです。
24デフォルトの名無しさん:05/01/14 01:56:28
[1] 授業単元:プログラミングc
[2] 問題文:個人情報を表示させる構造文です。
[3] 言語:C言語
[4] 期限:2005年1月15日

名前と住所欄が上手く表示されなくて困っています。
何処を修正すれば良いか教えてもらえれば幸いです。

#include<stdio.h>
main()
{
    struct person{
char name[20];
int birth;
char add[50];
char tel[12];
};
    struct person *ps = {"GIKO",20050114,"2ch","012-345-6789"};
ps=prsn_data;
printf("名前>誕生日>住所>電話番号>\n");
scanf("%s %ld %s %s", &prsn_data.name, &prsn_data.birth, &prsn_data.add, &prsn_data.tel);
printf("\n 名前     誕生日  住所          住所\n");
printf("%10.10s %11.8ld %-30.30s %-10.10s %3c",prsn_data.name, prsn_data.birth,prsn_data.add, prsn_data.tel);
printf("\n");
}
25デフォルトの名無しさん:05/01/14 04:08:00
>>24
どうしたいのか分からん。
26デフォルトの名無しさん:05/01/14 05:12:19
>>24
表示される以前にエラーだらけだろが。
27デフォルトの名無しさん:05/01/14 05:21:13
>>24
struct person *ps = {"GIKO",20050114,"2ch","012-345-6789"};
だとpsが指すのは定数。値の変更した場合の動作は不定。
28デフォルトの名無しさん:05/01/14 06:26:22
[1] 授業単元: プログラミングC言語
[2] 問題文(含コード&リンク): 構造体を使った単方向リスト構造で、リストをソートする関数を作りソートする。
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ(バージョン): windowsのC/C++両方使えるソフトだったかと・・・
 [3.3] 言語:C言語
[4] 期限:2005年1月15日の昼間でです。

構造体のメンバは自由で、それぞれのメンバを乱数で入力し、ユーザがレコード数を入力して
その数だけレコード作ってリスト化します。で、動的にメモリを確保するのではなく、あらかじめメモリを作っておいて、
それを使うやつです。で、リストを昇順か降順にソートするための関数を作ります。ソート方法はなんでもいいらしいです。
で、そのソート関数を使って、ソートして、あとはそれらを表示するだけです。
29デフォルトの名無しさん:05/01/14 11:29:37
[1] 授業単元: 科学計算演習
[2] 問題文(含コード&リンク): 化学反応のサンプリング(反応量の平均と分散を求める)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ(バージョン): GCC
 [3.3] 言語:C言語
[4] 期限:2005年1月20日

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=25
お願いします。
30デフォルトの名無しさん:05/01/14 11:37:03
>>24
struct person prsn_data;が抜けてるんじゃないか
.name, .add, .telはアドレスだからscanfに&をつけて渡すのは変だぞ
31デフォルトの名無しさん:05/01/14 12:41:55
>>28
なんか意味わかんない課題だなあ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/70.txt
32デフォルトの名無しさん:05/01/14 13:00:28
>>29
やってることが不明瞭なので平均・分散を求める部分だけ
double m=0,m2=0,sigma;
for(i=0;i<maxCount;i++){
C=g(x,y,z);// for(0<j<loop){〜}の部分を関数化したもの
m+=C;
m2+=C*C;
}
m/=maxCount;
sigma=m2/n-m*m;
printf("平均 = %f , 分散 = %f\n",m,sigma);

この辺は習ってる?
平均 : Σ(x[i]-m) /n
分散 : Σ(x[i]-m)^2 /n
    =Σ(x[i]^2-2mx[i]+m^2) /n
    =Σ(x[i]^2) /n-m^2
33デフォルトの名無しさん:05/01/14 13:03:19
あらら
平均m=(Σx[i])/n
分散σ=[Σ(x[i]-m)^2]/n
   =[Σ(x[i]^2-2mx[i]+m^2)]/n
   =[Σ(x[i]^2)]/n-m^2
34デフォルトの名無しさん:05/01/14 13:25:32
>>31

単方向リストですよ。課題は。(知ってて作ってたらスマン)
まあ、俺も、構造体のリストを作っておきながら、静的確保する点と、
単方向リストでソートが嫌になったクチなのですが。
35デフォルトの名無しさん:05/01/14 14:35:28
それならe1,e2,tのそれぞれ一つ前のポインタを保存しとけばいいのでは
36デフォルトの名無しさん:05/01/14 15:06:07
>>20
class a{};
map<char,char> a::m;
はグローバルスコープで宣言してるか?
あと、mはpublicメンバじゃないと外からアクセスできない
3720:05/01/14 15:17:18
>>36

>class a{};
>map<char,char> a::m;
>はグローバルスコープで宣言してるか?

はい。

class a{static int i;};
int a::i = 10;
例えばintだったら、上のようにして前もって10を入れておくことが
できるようなのですが、なぜmapではうまくいかないのでしょうか?
38デフォルトの名無しさん:05/01/14 15:28:27
>>20
class a{
public: // これ
static map<char,char> m;
};
39デフォルトの名無しさん:05/01/14 15:33:21
>>38
できればprivateのままにしておきたいのですが・・。
40デフォルトの名無しさん:05/01/14 15:35:38
>>20
クラス内固定ならできるけど?
#include <map>
using namespace std;
class a{
static map<char,char> m;
public:
a(){
a::m.insert(map<char,char>::value_type('a','b'));
}
};
map<char,char> a::m;
int main()
{
return 0;
}
41デフォルトの名無しさん:05/01/14 16:01:06
>>36,38,40
ありがとうございました。40の方法を使わせていただきます。
42デフォルトの名無しさん:05/01/14 16:02:11
[1] 授業単元: C言語

[2] 問題文(含コード&リンク): 
二分探索木への追加と表示をおこなうプログラム(tree.c)を配布しています。
rfileA.txt にあるデータを順番に読み込んで,
二分探索木を作成し,rfileB.txt にあるデータを削除した結果を
ファイル(result.txt)に出力するプログラムを作成しなさい。
その際,削除をおこなう関数を作成すること。

注意点 : rfileB.txt のデータを rfileA.txt から削除するのではなく,
rfileA.txt のデータで木構造を作成してから rfileB.txt のデータを
木構造から削除するようにすること。

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ(バージョン): わかりませんけど、VS.net2003使ってます
 [3.3] 言語:C
[4] 期限:1月25日

3つのファイル詰め合わせです
ttp://hibinoccc.s7.x-beat.com/up/img/1081.zip

よろしくおねがいします
4342:05/01/14 16:04:23
すいません追記です
tree.cはrfileAを読みこんで表示までは完了しています
44デフォルトの名無しさん:05/01/14 16:53:14
>>20
関数の外には式文(この場合a::m.insert()の呼び出し)は書けないから直接コンストラクタで初期化しろ。
#include <map>
#include <utility>
namespace {
  std::map<char, char>::value_type m_initializer[] = {
    std::make_pair('a', 'b'),
  };
}
std::map<char, char> a::m(m_initializer, m_initializer + sizeof m_initializer / sizeof m_initializer[0]);
45デフォルトの名無しさん:05/01/14 21:42:54
合計、平均および最大値、最小値のプログラムの課題が出ました
たすえkて
46デフォルトの名無しさん:05/01/14 21:45:39
>>45
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
47デフォルトの名無しさん:05/01/14 22:02:53
>>45
int main(void)
{
int a;
fscanf(stdin,"数字を入れろ\n",&a);
printf("合計:%d 最大:%d 最小:%d 平均:%d\n",a,a,a,a)
return 0;
}
指定が全然ないみたいだし、数値が1個の場合しか考えないものでもいいんだよな
48デフォルトの名無しさん:05/01/14 22:10:48
>>47
gcc -Wall hoge.c
hoge.c: 関数 `main' 内:
hoge.c:4: 警告: implicit declaration of function `fscanf'
hoge.c:4: error: `stdin' undeclared (first use in this function)
hoge.c:4: error: (Each undeclared identifier is reported only once
hoge.c:4: error: for each function it appears in.)
hoge.c:4: 警告: フォーマットへの引数が多すぎます
hoge.c:5: 警告: implicit declaration of function `printf'
hoge.c:6: error: 文法エラー before "return"
49デフォルトの名無しさん:05/01/14 22:14:39
#include<stdio.h>
int main(void)
{
int a;
printf(,"数字を入れろ\n");
fscanf(stdin,&a);
printf("合計:%d 最大:%d 最小:%d 平均:%d\n",a,a,a,a);
return 0;
}
50デフォルトの名無しさん:05/01/14 22:31:27
>>49
% gcc -Wall hoge.c
hoge.c: 関数 `main' 内:
hoge.c:5: error: 文法エラー before ',' token
hoge.c:6: 警告: 互換性のないポインタ型からの引数 2 個の `fscanf' を渡しますです
51デフォルトの名無しさん:05/01/14 22:35:41
#include<stdio.h>
int main(void)
{
int a;
printf(,"数字を入れろ\n");
fscanf(stdin,"%d",&a);
printf("合計:%d 最大:%d 最小:%d 平均:%d\n",a,a,a,a);
return 0;
52デフォルトの名無しさん:05/01/14 22:36:20
}
53デフォルトの名無しさん:05/01/14 22:38:25
どこからどこまでが自演なんだ?
54デフォルトの名無しさん:05/01/15 00:09:33
#include <stdio.h>
int main(void)
{
struct seiseki {
int bango;
int kokugo;
int suugaku;
int eigo;
};

struct seiseki a={101,85,92,79,0.0,' '};
struct seiseki b;

printf("bango=");
scanf("%d",&b.bango);
printf("kokugo=");
scanf("%d",&b.kokugo);
printf("suugaku=");
scanf("%d",&b.suugaku);
printf("eigo=");
scanf("%d",&b.eigo);

a.heikin=(a.kokugo+a.suugaku+a.eigo)/3.0;
b.heikin=(b.kokugo+b.suugaku+b.eigo)/3.0;

printf("bango heikin\n");
printf(" %3d %6.2f\n",a.bango,a.heikin);
printf(" %3d 6.2f\n",b.bango,b.heikin);
}
5554:05/01/15 00:10:24
このプログラムを
・構造体のメンバに char hyouka;を追加し、平均点が80点以上なら'G',80点未満なら'F'を入れる
結果の表示にこれを追加する
・2人のデータa,bは初期値を設定し(hyoukaには' 'を入れておく)、3人目のデータ c はデータ b と番号
だけが異なるようにする(b全体をcに代入した後で、bangoのメンバだけべつのもとする)
bの点数は自由に決める
実行例
bango heikin hyouka
101 56.78 G
102 87.67 F
103 87.67 F

おねがいします
56デフォルトの名無しさん:05/01/15 01:22:31
>>54
コンパイルできないし突込みどころ満載だぞ。
つーかほんとにこれを元にするのか?
57前すれの962:05/01/15 07:00:49
Atoi と Scanfを利用するということで、色々調べてみたのですが
いまいち使い方がわかりません。一例として、String a=”B0070” (16進法での表示です。)
をInt bにバイナリー形式で保存する手順を教えていただけませんか?
58デフォルトの名無しさん:05/01/15 11:23:18
>>57
2バイト文字からだと難しいと思うが、1バイト文字の16進文字列からならstrtol()がこの場合ベストかな。
>Atoi と Scanf
そんなもんねぇぞ。
59デフォルトの名無しさん:05/01/15 12:11:12
[2] 問題 挿入法でリストを整列するins_sort()の作成
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C言語
[4] 期限:2005年1月19日正午
アルゴリズムは以下のようにしたいです。お願いします。
1.c1をリストの一番目のセルを示すポインタとする。
2.c2をリストの0番目のセルを示すポインタとする。
3.c2=c1 となるか、c2の次のセルの値>c1の次のセルの値となるまでc2を次のセルへと移動
4.c2=c1ならc1をひとつ右に移動、c2=c1でなければc1の次のセルをc2の後ろに挿入
5.c1 リスト末尾となるまで2.3.4.を繰り返す。
60前すれの962:05/01/15 13:55:51
>58さん

1バイト文字で大丈夫です。
Strtol()を使って、16進法の文字列を10進法のLongに変換できる
という事はわかったのですが、10進法のLongを さらに2進法に
変換するには どうしたらよいのでしょうか? 出来れば、Long値で
得たいのですが。
61デフォルトの名無しさん:05/01/15 14:25:06
>>60
Longに2進法も10進法もない。
数値を文字列で表そうとするときに「N進法で表す」ということになるんだから。
62前すれの962:05/01/15 14:48:37
>60さん

何から何まで聞いてしまって お恥ずかしいのですが、
Longについていくら調べても詳しいスペックが全然見つからないので、
特性や、それに関するファンクション等を(もしくは、そういった内容のサイト)
教えていただけませんか?

すいませんが、よろしくおねがいします。。
63デフォルトの名無しさん:05/01/15 14:51:51
そもそもIntだのLongだのという型は標準C(++)には含まれないわけだが。
intとlongの間違いだろう?
64デフォルトの名無しさん:05/01/15 15:02:06
#define HASANYBITS(num,bits) (((num)&(bits))!=0)
#define HASALLBITS(num,bits) (((num)&(bits))==(bits))
#define HASBITAT(num,i) (((num)>>(i))&1)
65デフォルトの名無しさん:05/01/15 15:07:41
Cの関数で

void Hoge(char*) {


}

のような関数があったのですが、引数に型はあるのに、変数がないんです。
これはどういう意味なんでしょうか?
どのような目的があるのでしょうか?
66前すれの962:05/01/15 15:10:07
うーん 正直よくわかっていませんが、要するに 
String a=”C3”(16進法) を Int b=11000011 (2進法) 
に変換したいのです。これをするのに、手順としては どのようにしたらよいのでしょうか。。。
67デフォルトの名無しさん:05/01/15 15:15:53
そもそもint型に10進数で格納されているとか考えていることが、おかしい。
コンピュータなんだから全部2進数に決まってるだろう。それを表示するときに、
コンピュータが10進数として表示しているだけのこと。
68デフォルトの名無しさん:05/01/15 15:17:48
>65
仮引数を省略すると、コンパイラは仮引数未使用の警告を出さない。
69デフォルトの名無しさん:05/01/15 15:19:22
よーするに表示したいってだけじゃねーの?
マスク使って素直に1ビットずつ調べれ。
70デフォルトの名無しさん:05/01/15 15:26:03
>>62
聞くことも恥ずかしいなら、指摘されたことを直そうとしないことはもっと恥ずかしい。
いい加減、頭字化するのやめろよ。
71デフォルトの名無しさん:05/01/15 15:33:25
>>62
全角と半角を混ぜて書くのは止めましょう。
プログラマや特にここの住人にとっては、頭がくらくらしてきます。
なのでまともに相手してもらえなくなりますよ。

ところであなたは頭の中身がC言語していないようです。
つまりこんぴゅーたというものがわかってないようです。
アセンブラでも少し勉強するとよいかもしれません。
72デフォルトの名無しさん:05/01/15 15:43:06
>>65
効果は>>68のとおり
要らないものがなぜ書いてあるかというと、
C++のtemplateで型を解決するためにダミーとして渡してる。とか
歴史的経緯、つまり昔使ってたが要らなくなった。とか
あたりかな?
73デフォルトの名無しさん:05/01/15 15:44:19
//nの下cnt桁を二進表示
void print_bits(long n, int cnt)
{
if(cnt>=0)while(--cnt){
putchar('0'+((n>>cnt)&1));
}
}
74デフォルトの名無しさん:05/01/15 15:48:14
>73
誤)cnt>=0
正)cnt>0
75ハニワ:05/01/15 17:17:51
[1] 授業単元: 幾何とグラフィックス
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm にハニワで載せています。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): Windowsのc++
 [3.3] 言語:C++でお願いします。
[4] 期限:2005年1月17日8:00までで、お願いします。
7642:05/01/15 18:17:44
77デフォルトの名無しさん:05/01/15 19:00:56
>>75
GDIで幾何とかやりたくね。OpenGLじゃダメなのか?
78デフォルトの名無しさん:05/01/15 19:19:46
>>66
intやlongには「数値」が入っている。数値は数値であり、それ以上でもそれ以下でもない。
それを人間が理解するために文字で表すときに初めてN進法という考えが出てくる。
N進法というのは文字で数値を表すための存在だから、当然文字や文字列を格納する型(char*やstring)の中にしか存在しない。

んで答え。例えばこんな感じ。
#include <bitset>
#include <climits>
#include <cstdlib>
#include <string>
using std::string;
string hex = "C3";
string bin = std::bitset<sizeof (unsigned long) * CHAR_BITS>(std::strtoul(hex.c_str(), NULL, 16)).to_string();
79デフォルトの名無しさん:05/01/15 21:20:43
8042:05/01/15 21:47:39
>>79
感動した
8154:05/01/15 23:27:47
#include <stdio.h>
int main(void)
{
struct seiseki {
int bango;
int kokugo;
int suugaku;
int eigo;
float heikin;
};
struct seiseki a={101,85,92,79,0.0,};
struct seiseki b;
printf("bango=");
scanf("%d",&b.bango);
printf("kokugo=");
scanf("%d",&b.kokugo);
printf("suugaku=");
scanf("%d",&b.suugaku);
printf("eigo=");
scanf("%d",&b.eigo);
a.heikin=(a.kokugo+a.suugaku+a.eigo)/3.0;
b.heikin=(b.kokugo+b.suugaku+b.eigo)/3.0;
printf("bango heikin\n");
printf(" %3d %6.2f\n",a.bango,a.heikin);
printf(" %3d %6.2f\n",b.bango,b.heikin);
}
これです。おねがいします
82デフォルトの名無しさん:05/01/15 23:49:59
なんかprintfとscanfが縦にずらーっとしててムラムラしてくる
83>>54様へ:05/01/16 00:05:44
>>81題意を満たすようには作ってみたが
#include <stdio.h>
int main(void)
{
struct seiseki {
int bango;
int kokugo;
int suugaku;
int eigo;
double heikin;
char hyouka; /*評価*/
};
struct seiseki a={101,85,92,79,0.0,};
struct seiseki b,c;
printf("bango="); scanf("%d",&b.bango);
printf("kokugo=");scanf("%d",&b.kokugo);
printf("suugaku=");scanf("%d",&b.suugaku);
printf("eigo=");scanf("%d",&b.eigo);
a.heikin=((double)a.kokugo + (double)a.suugaku + (double)a.eigo)/3.0;
b.heikin=((double)b.kokugo + (double)b.suugaku + (double)b.eigo)/3.0;
if(a.heikin >= 80.0) a.hyouka = 'G';
else a.hyouka = 'F';
if(b.heikin >= 80.0)b.hyouka = 'G';
else b.hyouka = 'F';
c.bango = b.bango+1; c.kokugo = b.kokugo; c.suugaku = b.suugaku;
c.eigo = b.eigo; c.heikin = b.heikin; c.hyouka = b.hyouka;
printf("bango heikin hyouka\n");
printf(" %3d %6.2lf %c\n",a.bango,a.heikin, a.hyouka);
printf(" %3d %6.2lf %c\n",b.bango,b.heikin, b.hyouka);
printf(" %3d %6.2lf %c\n",c.bango,c.heikin, c.hyouka);
return 0;
}
84デフォルトの名無しさん:05/01/16 02:25:21
char ss[8][20]
ss[0] = "hoge1\thoge1\n";
の時って
ss[0][4]
には
"\t"(タブ文字?)
が入ってるんですよね?
これを
","(カンマ)
"\0"(NULL)
などに変更したいときってどうやるんですか?
sprintfを使って入れ替えれるつもりだったんですが
コンパイルしたら、32 bitがどうとかの
ワーニングが返ってきたんですが…
(学校でやったので、今エラーメッセージが分からないです。すみません)

よろしくお願いします。
85前すれの962:05/01/16 02:31:14
なるほど! 根本から考え方が間違っていたようですね。勉強になりました。

となると、longをintに変換する必要がでてくるのですが(C++です)、
調べてみたところlongを decimalやfloat等に変換はできるようなのですが、
intへの変換法が見あたりません。 変換は可能なのでしょうか?
86デフォルトの名無しさん:05/01/16 02:32:02
>>84
とりあえず>>1のテンプレ読みなされ。
87デフォルトの名無しさん:05/01/16 02:34:45
>>85
お前はまだ勘違いをしている
もうちょっと勉強しなおしてこい
88前すれの962:05/01/16 02:41:29
えと、intは32ビットまでの整数を扱う型で、longは64ビットまでの整数を
扱う型という認識だけでは間違いでしょうか?たとえば 
intをパラメーターに取るファンクションにlong値は渡せませんよね?
となると、こういった場合、longからintへの変換は必要ないのでしょうか?
89デフォルトの名無しさん:05/01/16 02:50:42
intとlongが実際に何bitかは処理系依存
ただしint <= longは保証されてるんじゃなかったかな
90デフォルトの名無しさん:05/01/16 02:51:19
[1] 授業単元:プレ卒研
[2] 問題文(含コード&リンク):
csvファイル(タブ区切り)からfgetsを使って1行読込み、
先頭から「一文字づつ」"\t"を検索していって\tじゃなければ、
変数1に格納。\tだったら、その次の文字から変数2に格納していき、
最後の改行コード"\n"が来たら次の行をfgetsしていく処理キボンヌ。
"hoge1\thoge2\n"
という文字列があったら
hoge1は変数1へ、hoge2は変数2へ格納したいのです。
strtokは使わないと言う事になってます…
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ(バージョン): 今わかんね。
 [3.3] 言語:C
[4] 期限:明日の午後に1回目の打ち合わせがあるので…
[5] その他の制限: ないっす。
91デフォルトの名無しさん:05/01/16 02:52:24
>>88
仕様ではintは16ビット以上、longは32ビット以上としか決められてない。
あと数値型は基本的に勝手に変換されるが、切り詰められても文句は言えない。
つーか、おまいさん教科書よく読みなおした方がいいと思うぞ。
92デフォルトの名無しさん:05/01/16 02:57:55
どういう内容なんだろう
卒研なのに制限もあるのか…
93デフォルトの名無しさん:05/01/16 03:03:06
>>84
ソースを見せてもらえれば分かるんだが
9490っす:05/01/16 03:10:06
内容…ですか。書いていいのかな。

文献の発行年数と作者が、タブ区切りで1行づつまとめてある
最低でも5行以上あるcsvファイルをいくつも読み込んで
入力した作者名と一致する行の発行年数を取得してきて
別のカンマ区切りのcsvファイルを作るプログラムを
卒研で使用するため、プレ卒研(3年)で作ろうという事になりました。

自分、心理学を専攻してまして、パソコンとかプログラムとかサパーリで…
ポインタとか2次元配列とかムリポ。
9590っす:05/01/16 03:12:56
>>93
あ、ですよねw
いまフロッピー取ってきます。
96デフォルトの名無しさん:05/01/16 03:17:37
>>90
おらおらまだかー!!
ねむいぜっ
97デフォルトの名無しさん:05/01/16 03:18:09
>>84
うーん、なにをしたいのかよくわからんけど、こんな感じ?

p = ss[0];
while (p = strchr(p, '\t'))
 *p = '\0';
98デフォルトの名無しさん:05/01/16 03:20:41
おお、臨戦態勢になってきたな。
イイヨイイヨー
99デフォルトの名無しさん:05/01/16 03:28:06
>>90
読み込むファイルはどうやって指定するのじゃ?
コマンドラインでスペース区切り指定した複数ファイルを開くようにするぞ?
100デフォルトの名無しさん:05/01/16 03:37:04
ようわからんが、その程度ならスクリプト使った方が早いぞ。
Cじゃなきゃまずい理由でもあるのか?
10190っす:05/01/16 03:40:58
そうじゃなきゃ先生に怒られます
102デフォルトの名無しさん:05/01/16 03:41:39
つーか、タブ区切りはcsv(CommaSeparatedValues)じゃねぇよ。
103デフォルトの名無しさん:05/01/16 03:42:03
>>100
宿題だから、「Cで作れ」って問題にPerlとかで書いていったら0点だろう。
104前すれの962:05/01/16 03:42:13
再度、教科書よんでみたけど 答えがみつからないいいいいいいす
結局longはintの代わりとして変換なしで使えるということですか?
切りつめられるリスクを背負うなら。そうだとしたら、普通に
longをintの代わりにパラメーターとしてファンクションに渡しても
オッケーということですよね?

105デフォルトの名無しさん:05/01/16 03:44:17
>>90
もうおまえおこられてろよ
106デフォルトの名無しさん:05/01/16 03:44:52
(int)
107デフォルトの名無しさん:05/01/16 03:46:15
>>90
お得意の心理学で、なんとか切り抜けろよ
108デフォルトの名無しさん:05/01/16 03:49:10
一般人より心理学に詳しい>>90がすでに嫌われております。
109デフォルトの名無しさん:05/01/16 03:50:07
みんなひでえな。メンバが足りなかったら適当に継ぎ足せ
main(){
struct bunken{ char nensu[10]; char sakusya[40]; }a[20], *p=a;
char buf[256];
FILE *fp;
if( !(fp=fopen("file", "r")) ) return 0;
for(;fgets(buf,256,fp)!=NULL;p++) sscanf(buf,"%s\t%s",p->nensu,p->sakusya);
fclose(fp);
return !0;
}
110前すれの962:05/01/16 03:56:18
long a; int b=(int)a; でいいんですか? 
C#を参考にしてしまいましたが。。
111デフォルトの名無しさん:05/01/16 04:18:27
前スレのキャッシュ誰か持ってない?700番台のところでいいんだけど
112デフォルトの名無しさん:05/01/16 04:56:26
113デフォ:05/01/16 06:30:20
すいません、
パラレルポートのピン毎の信号読み込みって、
どうすればできますでしょうか?
[OS]Redhat Linux 8
[言語]C
11454:05/01/16 06:43:58
>>83
20行目 使用できない文字が現れました
ってでました
115デフォルトの名無しさん:05/01/16 07:04:28
>>114
全角スペースがある
116デフォルトの名無しさん:05/01/16 07:05:16
>>114
全角空白が入ってる
117デフォルトの名無しさん:05/01/16 07:08:49
20行目 使用できない文字が現れました
    ↑
    ここ
118デフォルトの名無しさん:05/01/16 09:43:38
>>104
キャストするのが正解。
ただしなくてもコンパイラが適当にやってくれる。
long n = 12345678901234567890L;
static_cast<int>(n)
119デフォルトの名無しさん:05/01/16 11:39:11
>>112
ありがとう!!スレ落ちしてたので助かりました。
120デフォルトの名無しさん:05/01/16 11:59:47
分数の計算を行うためにクラスRationalを作り、
そのクラスをテストするメインプログラムを書け。
このクラスのprivateデータ:分子と分母は整数型の変数にする。
このクラスのオブジェクトが宣言されたときに初期化されるよう、
コンストラクタ関数を用意する。
初期値が与えられない場合はデフォルト値をセットすること。
コンストラクタは、分数を通分した形で格納しなければならない。
例えば、分数2/4の場合、分子は1、分母は2としてオブジェクト内に格納する。
また、次の2項演算子を多重定義すること。

(a)+演算子で2つの分数の加算を行う。結果は通分した形で保存すること。
(b)-演算子で2つの分数の減算を行う。結果は通分した形で保存すること。
(c)*演算子で2つの分数の乗算を行う。結果は通分した形で保存すること。
(d)/演算子で2つの分数の除算を行う。結果は通分した形で保存すること。
また、次のようなメンバ関数を定義すること。

(e)分数をa/bの形式でプリントする。ここでaは分子、bは分母。
(f)分数を浮動小数点形式でプリントする。

121デフォルトの名無しさん:05/01/16 12:01:21
>>120
君、1年生でしょ。1年生のうちから2chで解答もらっているようじゃ、先が大変だよ。
がんばって自分で解いてみな。
122デフォルトの名無しさん:05/01/16 12:11:16
boost::rational をまるっきりコピーして提出すれば?
12354:05/01/16 12:35:32
bの成績はこれです。
struct seiseki b={102,45,67,89,0.0,};
初期値を設定するときに''が入ってないんですけどどこにいれればいいんですか?
12490っす:05/01/16 13:03:23
昨日の夜フロッピー探してたら、学校に忘れてて、
頑張って思い出しながら打ってたら、寝落ちしてました。
すみません。

一応、ツッコミどころ満載だとは思いますが
C言語全く知らない集団が1週間頑張って作ったものなので
「一週間でこの程度かよ」
って皆様のネタにしていただければ(゚д゚)ウマーです。

で、暇だったらついでに助けて。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/74.txt
125デフォルトの名無しさん:05/01/16 13:05:15
>>124
名前欄に大文字の数字禁止。レス番号以外の文字禁止。リンクがたどりにくい。
126デフォルトの名無しさん:05/01/16 13:39:11
>>120
C++は分からない。Cならできるが。
127デフォルトの名無しさん:05/01/16 14:06:00
[1] 授業単元:プログラム演習 
[2] 問題文:野球で打席数・安打数・四球数を入力し打率を求めるプログラムを作れ。
               簡単のため四球・犠打・打撃妨害は無いものとし打率=安打数÷(打席数-四球数)で求まるものとする。
[3] 環境 
 [3.1] OS:Windows
 [3.2] 言語:C
[4] 期限:2004/01/18まで 
[5] その他の制限: 

(1)打席数・安打数・四球数を入力して打率を返す。次の仕様の関数を作成せよ。
double ba(int ab , int h , int bb)
※BA:打率・AB:打数・H:安打・BB:四球
(2)ファイルから選手名・打席数・安打数・四球数を含むデータを読み込み、打率を加えたデータを出力するプログラムを作成せよ。
【動作例】
a.out input.txt

---input.txt---
Godzilla 672 174 88
Little 500 125 40
Ichiro 753 262 49


---出力---
Godzilla 672 174 88 0.298
Little 500 125 40 0.272
Ichiro 753 262 49 0.372
128デフォルトの名無しさん:05/01/16 14:11:20
age
129デフォルトの名無しさん:05/01/16 14:18:42
野球嫌い
130デフォルトの名無しさん:05/01/16 14:23:59
>>124
>>109にあるやつでいいじゃん
131デフォルトの名無しさん:05/01/16 14:48:43
みんな割りと締め切りギリで来るのな
132デフォルトの名無しさん:05/01/16 15:53:30
>>127
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
struct CData {
std::string name ;
int ab, h, bb ;
} ;
double ba( int ab, int h, int bb )
{ return static_cast<double>( h ) / ( ab - bb ) ;}
std::istream& operator>>( std::istream& istr, CData& data )
{ return istr >> data.name >> data.ab >> data.h >> data.bb ;}
std::ostream& operator<<( std::ostream& ostr, const CData& data )
{
return ostr << data.name << " " << data.ab << " " << data.h << " "
<< data.bb << " " << ba( data.ab, data.h, data.bb ) ;
}

int main( int argc, const char* argv[] )
{
std::vector<CData> data ;
std::ifstream istr( argv[1] ) ;
data.assign( std::istream_iterator<CData>( istr ),std::istream_iterator<CData>() ) ;
std::copy( data.begin(), data.end(),
std::ostream_iterator<CData>( std::cout, "\n" ) ) ;
return 0 ;
}
133132:05/01/16 15:54:39
C言語だった…すまん
134デフォルトの名無しさん:05/01/16 16:03:58
( ・3・)ぼるしちが宿題片付けますYO!!
135132:05/01/16 16:06:14
>>127
そのままではかっこ悪いので久しぶりにC言語してみました。

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

struct CData {
char name[256] ;//適当
int ab, h, bb ;
} ;
double ba( int ab, int h, int bb )
{ return (double)( h ) / ( ab - bb ) ;}
int read( FILE* ifile, struct CData* data )
{
return fscanf( ifile, "%s %d %d %d", data->name, &data->ab, &data->h, &data->bb ) == 4 ;
}
void write( FILE* ofile, struct CData* data )
{
fprintf( ofile, "%s %d %d %d %f\n", data->name, data->ab, data->h, data->bb, ba( data->ab, data->h, data->bb ) ) ;
}

int main( int argc, const char* argv[] )
{
struct CData data[256] ;//適当
FILE* ifile = fopen( argv[1], "r" ) ;
int num, i ;
for( num = 0 ; read( ifile, &data[num] ) ; num++ ) ;
for( i = 0 ; i < num ; i ++ ) write( stdout, &data[i] ) ;
return 0 ;
}
136デフォルトの名無しさん:05/01/16 16:30:32
1] 授業単元:C言語
[2] 問題文:
(0,1)で一様分布する 変数xi から
標準正規分布する 変数yj をつくるには
次の式を用いる。
yj=Σ(i=1→12)xi-6.0

上の式を下に rand()を用いて
xiを 12000個発生させて 作成した
yjの分布を *を用いた棒グラフにせよ。ただし範囲は-5<y<5

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ(バージョン): wedit(LCC)
 [3.3] 言語:C言語
[4] 期限:2005年 1月17日
[5] その他の制限:特にありません
137127:05/01/16 16:42:52
>>132氏(135氏)
ありがとうございます!これで何とか首が繋がりました…
(;つД`)
自分でも解けるように、もっと精進してきます。
(  `・ω・)ノ
138デフォルトの名無しさん:05/01/16 17:20:08
0<x<1で
yj=Σ(i=1→12)xi-6.0
ということは
-6<yj<6ってことで
範囲が-5<y<5なら
カウントしないものもでてくるのかな?

それとxiを 12000ってことはyjの個数は1000個ってことかな?
139136:05/01/16 17:25:33
≪138
あ、すみません。
カウントはすべてします。
-5<y<5 ではなく
y<-5,-5≦y<4 のようにするんでした。すみません。

そして、xiは12000 なので yjは 1000個です。
140デフォルトの名無しさん:05/01/16 17:42:56
>>120
手抜きRational。ただし君の要望はすべて満たしてある。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/75.txt
141デフォルトの名無しさん:05/01/16 17:50:02
>>120
先を越された…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/76.txt

せっかく作ったので。というか、いつもJava書いてるので、C++はいまいちだな…
(じゃあ解くなといわんでくれ)
142デフォルトの名無しさん:05/01/16 18:12:39
[1]授業単元:プログラム演習
[2]問題文:コンピュータと5回じゃんけんをして、何勝何敗何分か表示しろ
できれば勝率も表示
[3]環境
 [3.1]OS:linux
[3.2]言語:C
[4]期限:2005/01/18
[5]その他の制限:特にありません
143デフォルトの名無しさん:05/01/16 18:21:31
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク):二枚の画像(PGM,binary形式)を合わせた合成画像を作るプログラムを作成しなさい。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C言語
[4] 期限:2005年1月17日
[5] その他の制限:特にありません
144デフォルトの名無しさん:05/01/16 18:24:18
>142
「じゃんけんしましょ」
1:グー、2:チョキ、3:パー
どれにする?>2
COM:グー あなた:チョキ
★あなたの負け

145デフォルトの名無しさん:05/01/16 18:24:21
>>143
合成といっても色々あるのだが。
146デフォルトの名無しさん:05/01/16 18:30:57
>>145
すいません。説明不足で。pgmになっている二枚の画像のデータがとりあえず
足せて出力できれば最低限の課題になります。
リモートセンシングの講義の一端なので、二枚の画像データを使って
植生指数(NIR-RED)/(NIR+RED)の出力などを将来的にはするんだと思います。
147ハニワ:05/01/16 18:43:34
75です。
なんとかGDIでお願いできないでしょうか?
148ハニワ:05/01/16 18:47:45
75です。
誰か助けていただけないでしょうか?
明日までの提出なので。。
149デフォルトの名無しさん:05/01/16 18:49:03
>>142
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int cnt;int myHand,enemyHand;int winNum=0,loseNum=0,drawNum=0;srand((unsigned)time(NULL));
for(cnt=0;cnt<5;cnt++){
printf("グー:1 チョキ:2 パー:3\n");scanf("%d",&myHand);
enemyHand=(int)((double)((double)rand()/(double)RAND_MAX)*3.0)+1;
switch(myHand){
case 1:printf("(あなた)グー対");
switch(enemyHand){
case 1:printf("グー(敵)\n引き分け\n");drawNum++;break;
case 2:printf("チョキ(敵)\n勝ち\n");winNum++;break;
case 3:printf("パー(敵)\n負け\n");loseNum++;break;
}break;
case 2:printf("(あなた)チョキ対");
switch(enemyHand){
case 1:printf("グー(敵)\n負け\n");loseNum++;break;
case 2:printf("チョキ(敵)\n引き分け\n");drawNum++;break;
case 3:printf("パー(敵)\n勝ち\n");winNum++;break;
}break;
case 3:printf("(あなた)パー対");
switch(enemyHand){
case 1:printf("グー(敵)\n勝ち\n");winNum++;break;
case 2:printf("チョキ(敵)\n負け\n");loseNum++;break;
case 3: printf("パー(敵)\n引き分け\n");drawNum++;break;
}break;
default:cnt--;}}
if(winNum+loseNum!=0)printf("結果:勝ち%d,負け%d,分け%d,勝率%f\n",winNum,loseNum,drawNum,(double)winNum/(double)(winNum+loseNum));
else printf("結果:勝ち%d,負け%d,分け%d,勝率err\n",winNum,loseNum,drawNum);return 0;
}
150デフォルトの名無しさん:05/01/16 18:49:19
WindowsのGDIで書けと言う指定なのか?
151デフォルトの名無しさん:05/01/16 19:17:56
152151:05/01/16 19:20:29
ちなみにグラフ表示は
# が一個で100カウント
$ が一個で50カウント
? が一個で10カウント
* が一個で1カウント
です。
153デフォルトの名無しさん:05/01/16 19:26:40
>>142
こっちの方が簡単だよ〜(^^)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
    int i,m,e,w[3]={0},j;
    char h[][9] = {"グー","チョキ","パー","勝ち","負け","引き分け"};
    srand((unsigned)time(0));
    for(i=0;i<5;i++){
        printf("%s:0 %s:1 %s:2\n",h,h+1,h+2);scanf("%d",&m);
        ++w[j=(m==(e=(double)rand()/RAND_MAX*3)?2:(m+1)%3==e?0:1)];
        printf("YOU:%s,PC:%s,%s\n\n",h+m,h+e,h+j+3);
    }
    printf("%s:%d,%s:%d,%s:%d,勝率:%d%%",h+3,*w,h+4,w[1],h+5,w[2],*w*100/5);
    return 0;
}
154デフォルトの名無しさん:05/01/16 19:30:04
>>149 >>153
ありがとうございますm(._.*)m
おかげで助かりました
155デフォルトの名無しさん:05/01/16 19:33:36
[1]授業単元:プログラム演習
[2]問題文:リスト構造へのレコード追加(構成、挿入)関数をもとに、レコードが昇順になるように登録される関数のプログラム
[3]環境
[3.1]OS:linux
[3.2]言語:C
[4]期限:2005/01/18
[5]その他の制限:構造体のメンバ構成や昇順機能の項目(メンバ)などは自由
156デフォルトの名無しさん:05/01/16 19:38:12
>>155
頑張れ!
157136:05/01/16 19:44:14
>>151
本当にありがとうございます!!!!(T▽T)♪
でも…
あの…ひらけません…
あれ、、、なんでだ?
158デフォルトの名無しさん:05/01/16 19:46:27
宿題がある奴らっていいなぁ
俺の所は、課題発表されてから3時間以内にできなければ評価してもらえなかった
できなかった奴は次週までに提出で、未提出が2回あると不可確定
その分易しめの課題が多かったし、時間内に仕上げれば評価は緩かったけどな
159デフォルトの名無しさん:05/01/16 19:47:25
IEか・・
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
宿題はここに書けのスレの22番目のレスです。
160159:05/01/16 19:49:36
アンカーわすれ(^^;
>>159>>157へのレスです。
161157:05/01/16 20:00:03
>>159
ありました!
こんなに丁寧にありがとうございます^^♪
これで 宿題が終わります。
ホントにありがとうございました!!
162デフォルトの名無しさん:05/01/16 20:00:56
[1]授業単元:プログラム演習
[2]問題文:疎行列を求めるプログラム及びそのプログラムに入力する疎行列を作成するプログラム
[3]環境
[3.1]OS:Solaris
[3.2]コンパイラ:GCC(バージョン不明)
[3.3]言語:C
[4]期限:2005/01/19
[5]その他の制限:データの入出力はファイルから(mallocを使用)。双方向リスト(線形探索、ソート)を使用。

3 3
1 0 0 入力するファイルの内容は左のようにする。
0 1 0
0 0 1

どうかよろしくお願いしますm(_ _)m
163デフォルトの名無しさん:05/01/16 20:17:36
>>155
そのプログラムならここで聞くよりググったりアルゴリズムとデータ構造についての本を見た方が早いのでは?
すぐに見つかるし。
164ハニワ:05/01/16 20:33:52
[1]授業単元:幾何とグラフィックス
[2]問題文:立方体の描画(陰線処理)
[3]環境
[3.1]OS:Windos
[3.2]コンパイラ:
[3.3]言語:C++
[4]期限:2005/01/17
[5]その他の制限: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=71
のピラミッドの陰線処理のプログラムを書き換えて立方体を描画する。

16554:05/01/16 23:53:06
どうもありがとうございました。
すいませんがもう一問おねがいします
>>54のプログラムを
・構造体のメンバから float heikin;を削除し、構造体の配列に5人分のデータを初期値として設定する。
・個人ごとの平均ではなく、科目ごとの平均をint型で求めて(小数部分切り捨て)個人データ
と同じ型の構造体に格納し(bangoは未使用)表示する
おねがいします
16654:05/01/16 23:54:15
すいません>>54じゃなくて>>81です
167デフォルトの名無しさん:05/01/16 23:58:20
>>155
前に作ったやつ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct field_tag{
    char name[16];
    struct field_tag *next;
} field;
void search_and_insert(field *dest, const field *src){
    field *temp;
    if (dest->next == NULL) {
        dest->next = (field*)malloc(sizeof(field));
        memcpy(dest->next, src, sizeof(field));
    }
    else if (!(strcmp(dest->next->name, src->name) < 0)) {
        temp = (field*)malloc(sizeof(field));
        memcpy(temp, src, sizeof(field));
        temp->next = dest->next; dest->next = temp;
    }
    else search_and_insert(dest->next, src);
}
void free_all(field *ptr){if (ptr->next != NULL) free_all(ptr->next); free(ptr);}
int main(void){
    field *root= (field*)malloc(sizeof(field)), *cur = root, temp;
    memset(root, 0, sizeof(field)); temp.next = NULL;
    while(scanf("%s", temp.name) != EOF){search_and_insert(cur, &temp); memset(&temp, 0, sizeof(field));}
    cur = root;
    while (cur != NULL){printf("%15s\n", cur->name); cur = cur->next;}
    if (root != NULL) free_all(root);
    return 0;
}
168デフォルトの名無しさん:05/01/17 00:10:32
int i,j,k;
double age;

for(0<j<10){
 age=(100/j);
 sage=100;
 for(0<i<10){
  age=(100/j)*drand48();
  sage=100*drand48();
  func(x, y, z) //x,y,zの計算結果を返す関数
  printf("%f, %f, %f\n", x, y, x); // x, y, zの値を表示
 }
}

上記のプログラムはx,y,zをi回計算し、それをj組表示するプログラムなのですが、

iが1の時x1,y1,z1
iが2の時x2,y2,z1

iが9の時x9,y9,z9とし、x,y,zのそれぞれの平均
((x1+x2+…+x9)/j)
((y1+y2+…+y9)/j)
((z1+z2+…+z9)/j)
を求めるにはどうすればいいのですか?お願いします。
169デフォルトの名無しさん:05/01/17 00:26:22
配列にして回すか、switch
170デフォルトの名無しさん:05/01/17 00:35:08
>>169
配列にして回すにはどうすればいいのですか?
171デフォルトの名無しさん:05/01/17 00:41:57
>>168
これじゃダメかい?
int mean_x = 0, mean_y = 0, mean_z = 0;
for (int i = 1; i < 10; ++i)
{
    func(x, y, z);
    mean_x += x;
    mean_y += y;
    mean_z += z;
}
mean_x /= 9;
mean_y /= 9;
mean_z /= 9;
172デフォルトの名無しさん:05/01/17 00:47:47
>>171
内側のforでdrand48()を使ってランダムに計算し、それを外側のfor
で十分な回数サンプリングしているのです。
ですので>>168の仕様で平均値を求めたいのです。
173デフォルトの名無しさん:05/01/17 00:54:14
>>172
だからこうしてはダメなのかと言ってるんだが。
int i, j, k;
double age, sage, mean_x = 0, mean_y = 0, mean_z = 0;

for(j = 1; j < 10; j++){
    age = 100 / j;
    sage = 100;
    mean_x = 0; mean_y = 0; mean_z = 0;
    for(i = 1; i < 10; i++){
        age = (100 / j) * drand48();
        sage = 100 * drand48();
        func(x, y, z) //x,y,zの計算結果を返す関数
        mean_x += x; mean_y += y; mean_z += z;
        printf("%f, %f, %f\n", x, y, x); // x, y, zの値を表示
    }
    mean_x /= 9; mean_y /= 9; mean_z /= 9;
    printf("%f, %f, %f\n", mean_x, mean_y, mean_z); // mean_x, mean_y, mean_zの値を表示
}
174デフォルトの名無しさん:05/01/17 01:08:24
>>173
できました。ありがとうござした。
175デフォルトの名無しさん:05/01/17 01:36:05
整数型配列n[ ]を宣言した後、for文を用いて配列nに
0から200までの数字を書き込み、その結果を出力せよ。

オネガイシマスk
176デフォルトの名無しさん:05/01/17 01:49:50
#include<stdio.h>
int main(void)
{
int i,n[];

for(i=0;i<=200;i**)
n[i]=i;

for(i=0;i<=200;i**)
printf("n[%d] = %d\n",i,i);

return 0;
}
177デフォルトの名無しさん:05/01/17 01:57:09
>>176 ありがとうございます。
#include<stdio.h>
main()
{
int i,n[200];
for(i=0;i<=200;i++)
n[i]=i;
for(i=0;i<=200;i++)
printf("n[%d] = %d\n",i,i);
}
178デフォルトの名無しさん:05/01/17 02:05:36
>>177
それじゃまともに動かんだろう
せっかく書いてもらったものを改悪するな
179デフォルトの名無しさん:05/01/17 02:16:24
配列に一文字一文字入っているものを一つに繋げて
1要素にするにはどうすればよろしいでしょうか?
180デフォルトの名無しさん:05/01/17 02:18:09
>>179
strcat
181>>177:05/01/17 02:42:00
n[201]にしないとエラーでるよ
182デフォルトの名無しさん:05/01/17 02:49:46
テキストファイルを読み込み行数の短い順に並びかえてファイルを出力しなさい。
一行が80字を超えた場合以下の文章は切り捨て、空行は出力しない。

この問題お願いしますorz
183デフォルトの名無しさん:05/01/17 03:17:48
まったく同じものが過去ログにある。
184デフォルトの名無しさん:05/01/17 03:20:22
どなたかこの問題お願いします。

(問)ガウス法のプログラムを作成し、次の方程式を解け。
  3X1 + 2X2 + X3 = 10
  2X1 + 5X2 + 2X3 = 18
  X1 + 4X2 + X3 = 12

#include <stdio.h>
#define n 3

main()
{
int i,j,k;
double a[n][n+1]={{3,2,1,10},{2,5,2,18},{1,4,1,12}};
double d;

この続きをお願いします。言語はCです。
185デフォルトの名無しさん:05/01/17 03:22:19
186デフォルトの名無しさん:05/01/17 03:29:26
>>182
あったあった。こんな感じ。
#include <algorithm>
#include <fstream>
#include <iostream>
#include <set>
#include <string>
struct pred{
    bool operator()(const std::string& x, const std::string& y)
        {return x.length() < y.length();}
};
int main(){
    std::ifstream input("data.txt");
    std::multiset<std::string> s;
    std::string line;
    while (std::getline(input, line))
        if (!line.empty())
            s.insert(line.length() > 80 ? line.substr(0, 80) : line);
    for (std::multiset<std::string>::const_iterator first = s.begin(), last = s.end(); first != last; ++first)
        std::cout << *first << std::endl;
}
187182:05/01/17 03:35:56
>>186
わざわざありがとうございます
ソース見るとかなり難解ですね…
自分でも一応書いたんですがサッパリ動きません

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char mojis[80];
int mojin;
} MOJI;
int sort(int *a,int *b) {
if(*a < *b){
return(1);
}else if(*a>*b){
return(-1);
}else{
return(0);
}
}
188182:05/01/17 03:36:19
int main(void)
{int len,nx;
inti=0;
char a[80];
char filename[]="input.txt";
FILE *fh;
MOJI *x;
x=(MOJI*)malloc(sizeof(MOJI)*100);
if((fh=fopen(filename,"r"))!=NULL){
while(fgets(a,81,fh)!=NULL){
len=strlen(a);
if(len != 0){
x[i].mojin=len;
strcpy(x[i].mojis,a);
i++;
}
}
nx = sizeof(x) / sizeof(x[0]);
qsort(x, nx, sizeof(MOJI), (int(*)(const void*, const void*))sort);
fclose(fh);
}else{
fprintf(stderr,"ファイル %s を開けませんでした\n",filename);
}
free(MOJI);
return 0;
}
189186:05/01/17 03:43:51
>>187
難解と言うか意味不明だろうね。なぜなら君はC言語で書きたいんだろう?
最初にそう書かないからC++でレスが付いたりするんだよ。ちゃんと>>1
テンプレ使おうね。
190182:05/01/17 04:00:58
>>189
すみません、明日までだったのであまりよく読まずに
焦って書き込んでしまいました…
つーか上のソース書き途中のやつコピペしてて意味不明ですねorz
OSはXP、コンパイラはMicrosoftVisualC++6.0を使っています。
191182:05/01/17 05:03:53
上の書く途中ソースのちゃんとしたやつです
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/81.txt
どこを直せば動くでしょうか?
192デフォルトの名無しさん:05/01/17 05:05:27
【質問テンプレ】
[1] 授業単元:文字列と配列
[2] 問題文(含コード&リンク):
とある文字列の中に指定の文字列があるかどうか繰り返しを使って調べる
とある文字列は入力したもの。指定の文字列「efg」「cde」
指定の文字列があった場合は「ありました」ない場合は「ありません」と表示
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): Windowsのc++
 [3.3] 言語:c++
[4] 期限:2005年01月17日09:00まで
[5] その他の制限:ifなどを複数使ってなるべく短く書く

char型がイマイチ理解できません…
193デフォルトの名無しさん:05/01/17 05:34:42
>>192
#include <iostream>
#include <string>

using namespace std;

int main()
{
string input;
getline(cin, input);
const string A = "efg", B = "cde";

if (input.find(A) != string::npos || input.find(B) != string::npos) { cout << "ありました" << endl; }
else { cout << "ありません" << endl; }

return 0;
}
194デフォルトの名無しさん:05/01/17 08:45:43
>char型がイマイチ理解できません…

何がどう理解できないのか聞きたいな
課題の難易度から察するに、まだ「文字を使うときはintではなくcharを使う」とか言われるだけじゃないの?
195デフォルトの名無しさん:05/01/17 12:48:57
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
PGMの画像ファイルを配列を使って読み込んで任意の閾値で2値化し、出力する
プログラムを作れ。(出力画像もPGMで)

[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ(バージョン): Cygwin
 [3.3] 言語:C/C++/どちらでも可 のいずれか :C
[4] [4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか 2005年01月24日19:00
[5] その他の制限:

どうかよろしくお願いします。
196デフォルトの名無しさん:05/01/17 14:00:05
PGMの入出力はめんどいから省略。検索すればいくらでも出てくるし
>>143
2つの画像は同じサイズ(w,h)としてやってる
画像a += 画像bを行う関数
void add_effect(unsigned char** a,unsigned char** b,int w,int h)
{
int d;
int x,y;
for(y=0;y<h;y++){
for(x=0;x<w;x++){
d=(unsigned int)a[y][x]+b[y][x];
a[y][x]=(d>255)?255:(unsigned char)d;
}
}

>>195
画像aを閾値thで2値化(0と255)する
void thr(unsigned char** a,int w,int h,unsigned char th)
{
int x,y;
for(y=0;y<h;y++){
for(x=0;x<w;x++){
a[y][x]=(a[y][x]>=th)?255:0;
}
}
197デフォルトの名無しさん:05/01/17 16:50:45
>>182
なんかめちゃくちゃだな
体重ってなんだよ
・fgetsには81じゃなくて80を渡す
・x[i].mojin=len-1 なんで-1してるの?
・sort関数にはMOJI構造体が渡される
int sort(const void* x,const void* y)
{
return (*(MOJI*)x).mojin - (*(MOJI*)y).mojin;
}

198デフォルトの名無しさん:05/01/17 16:55:12
[1] 授業単元:計算機学演習

よくわからないけどパスカルです。スレ違いだったらごめんなさい。。。
(課題)
入力されたn個の数を大きい順に並び替えるプログラムを作れ。
(他のスレにも書き込んだけどまだわからなかったので)

199デフォルトの名無しさん:05/01/17 17:14:04
int a; int *b; int c;

これを使って、
1.aに100を代入する
2.ポインタ変数bにaのアドレスを代入する
3.bの値をcに代入して、cを表示させて下さい。
(100が表示されればOKです。)
A アドレス(&c)を使う方法:変数のアドレスを代入する方法
B ポインタ(*b)を使う方法:値を代入する方法
注:c=a と代入した場合は100と表示されても認めません!

200デフォルトの名無しさん:05/01/17 17:23:00
DLLに格納されている文字列を取得する場合は
どうやって取得したらよいのでしょうか?
exeとDLLの両方の書き方がわかりません。

わかる方どうかよろしくお願いします。
201デフォルトの名無しさん:05/01/17 17:26:23
>200
GetModuleHandle,LoadLibrary,LoadStringを見よ
202デフォルトの名無しさん:05/01/17 17:31:39
>>201
thx 早速見てみます。
203デフォルトの名無しさん:05/01/17 17:34:26
>>198
スレタイにPascalは入っていないのでスレ違いですね。
204192:05/01/17 17:44:15
>>193-194
ありがとうございました。
理解できないところっていうのはなぜ"\0"で必ず終わらないといけないかと言うことです
深く考えないでそういうものだと思っておけばいいのでしょうか?
それとついでにもう一つ質問ですが

#include <iostream>
#include <string>
↑この二つはなんでしょう?まだ<stdio.h>ってのしか使ったことないのですが…
できればさっき教えて頂いたものに//で注釈いれてもらえるとありがたいです
205デフォルトの名無しさん:05/01/17 17:46:00
>>204
本当に「C++で」という指定で宿題が出ているのかい?stdio.hしか
使った事が無いと言うのは怪しいのだが。
206192:05/01/17 17:47:00
というかこのコードをヒントにして考えてと言われてました
#include <stdio.h>

int main(void)
{
char str[100];
int i, c;

printf("文字列を入力してください。\n");
scanf("%s", str);

c = 0;

for(i=0; str[i]!='\0'; i++){
if(str[i] == 'a'){
c++;}
}

printf("%sの中にaは%d個あります。\n", str, c);

return 0;
}
207デフォルトの名無しさん:05/01/17 17:50:27
Cじゃねーか
208デフォルトの名無しさん:05/01/17 17:50:32
>>192
int strsrch(char*s,char*w){return *w=='\0'?1:(*s=='\0'?0:(*s==*w?strsrch(&s[1],&w[1]):strsrch(&s[1],w)));}

ここまで書いたら面倒になったんでmainは勝手に書いといて。
209デフォルトの名無しさん:05/01/17 17:50:40
>>206
>>1
>・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
210デフォルトの名無しさん:05/01/17 17:51:32
>204
速度やメモリ効率を無視すれば、長さをintに格納することも可能…、だが、現在では私のように本当に低レベルのプログラマー…、いやスーパープログラマーしか気にしないだろう。
211デフォルトの名無しさん:05/01/17 17:57:48
>210は昔話だ。気に砂
212デフォルトの名無しさん:05/01/17 18:02:10
>>199
その手順は3の表現が悪い。
「ポインタbが指す位置に格納されている値をcに代入」
とすべきだと思う。

int main(void)
{
int a;
int *b;
int c;
a=100;
b=&a;
c=*b;
printf("%d",c);
}
213デフォルトの名無しさん:05/01/17 18:55:35
>>212
ありがとうございます。
214デフォルトの名無しさん:05/01/17 19:01:46
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int ran_num,key,count=0;
int a[3],i,point=0;
char s[80];

srand((unsigned)time(NULL));

while(1){
printf("\n...Input Number...\n0 to exit\nother number to
start\n");
printf("....................\n");
fgets(s,sizeof(s),stdin);
sscanf(s,"%d",&key);


エラーがわかりませんん。ご教授ください。
"slot.c", line 14.71: 1506-186 (S) ストリング・リテラルは、行末よりも前で終わらなければなりません。
"slot.c", line 15.6: 1506-191 (E) 文字 \ は有効な C ソース文字ではありません。
"slot.c", line 15.11: 1506-186 (S) ストリング・リテラルは、行末よりも前で終わらなければなりません。
"slot.c", line 15.1: 1506-276 (S) 構文エラー: ')' が欠落している可能性があります
215デフォルトの名無しさん:05/01/17 19:08:36
>214
string literalは、曲訳すれば定数文字列の意。文字列の途中でEnter押したか、勝手に改行してるのかも
216デフォルトの名無しさん:05/01/17 19:16:46
>>215
できました。本当にありがとうございました。
217デフォルトの名無しさん:05/01/17 19:48:01 ,
>>196
ありがとうございます。参考にして自分なりに組んでみたのですが
fopen ではPGMファイルは開けないんでしょうか?
どうもファイルを読み込んでないみたいなので

ちなみにこんな感じで組みました
FILE *fp_in,*fp_out;
  if( (fp_in=fopen("sample.pgm","r")) == NULL )
  perror("Can't file open!\n");
exit(1);

”r”を”rb”に変えても同じでした
218デフォルトの名無しさん:05/01/17 19:50:56 ,
FILE *fp_in,*fp_out;
if( (fp_in=fopen("sample.pgm","r")) == NULL ) {
perror("Can't file open!\n");
exit(1);
}
219デフォルトの名無しさん:05/01/17 19:51:05 ,
>217
開けない原因は多分SAMPLE.PGMとEXEが別々の場所にあるからじゃないか?
220デフォルトの名無しさん:05/01/17 19:54:27 ,
>>219
一応、同じ場所にありますよ
221デフォルトの名無しさん:05/01/17 19:58:38 ,
>220
ファイルかアプリの閉じ忘れの共有ロックかな?
222デフォルトの名無しさん:05/01/17 19:59:25 ,
223デフォルトの名無しさん:05/01/17 20:03:55 ,
>221
画像データの数値を読み込んでない状態です。
試しに読み込んでテキストファイルに書き込むようにプログラムしてみても
まったくの白紙でした
224デフォルトの名無しさん:05/01/17 20:31:46
[1] 授業単元:ネットワークプログラミング
[2] 問題文(というかやりたいこと)
英文を単語ごと(空白ごと)にわけて配列に格納する
(上記のソースは、そのままではできなかったため、クライアント側にて入力した英文を、
サーバー側にて単語毎(空白毎)にわけて、単語毎に改行したものをLINES.txtに出力する
という方法をとろうとしたものです)
[3] 環境
 [3.1] OS:Redhut Ver7
 [3.2] コンパイラ(バージョン):gcc3(?)、すいませんちょっとわからないです
 [3.3] 言語:C
[4] 期限:申し訳ありません、明日の午後五時までなんです

ソース(サーバー側):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/83.txt
ソース(クライアント側):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/82.txt

クライアント側はともかく、サーバー側で形態素(単語)ごとに切り分けようとしても
どうやら空白を空白と認識してくれないようで、思ったように単語ごとに切って、LINE.txt
に出力できません。
もともとは英文を単語ごとにわけて、配列に格納することが目的だったんですが、うまくいかなくて
上記のようにやってみようとしたんですが、それでもうまくいかず。
もしもっと簡単に単語ごとにわけて、配列に格納できる方法がありましたら、そちらでもかまいません。
どうかお知恵をお貸し下さいますよう、お願い致します。

225デフォルトの名無しさん:05/01/17 20:34:04
典型的なタコ関数だが我慢してstetokでも使ったらどうだね?
226デフォルトの名無しさん:05/01/17 20:34:56
stetok
stetok
stetok
stetok
stetok
stetok
227デフォルトの名無しさん:05/01/17 20:39:18
すいません、stetokを検索してもほとんどヒットせず、見てもわからないのですが。
Cの関数なんでしょうか?

228デフォルトの名無しさん:05/01/17 20:41:14
225:デフォルトの名無しさん:05/01/17 20:34:04
典型的なタコ関数だが我慢してstetokでも使ったらどうだね?
229224:05/01/17 20:41:15
あ、失礼、227は私です。
やっぱりネスケはいまいち見にくいです;;
230デフォルトの名無しさん:05/01/17 20:42:58
231デフォルトの名無しさん:05/01/17 20:45:14
Redhut
232デフォルトの名無しさん:05/01/17 20:46:00
以下の関数を作って、計算するプログラム。
ここの dataMax や dataMinという関数は 自分で定義して利用すること。

  配列の中で最大値を返す関数  int dataMax(int a[ ], int b) { }
  配列の中で最小値を返す関数  int dataMin(int a[ ], int b) { }

プログラム参考例 (これを拡張して完成させて下さい)
#include<stdio.h>

void main(void){
int i; float a[5];
dataSet( a, 5);
printf( “Max= %d”, dataMax( a , 5) );
printf( “Min= %d”, dataMin( a , 5) );
}
233230:05/01/17 20:47:14
>>227
あと、FreeBSDのソースも参考に。
http://www.freebsd.org/cgi/cvsweb.cgi/src/
234デフォルトの名無しさん:05/01/17 20:47:54
>223
タスクマネジャを見て疑わしいプログラムを終了。それでもダメなら再帰どう?
235デフォルトの名無しさん:05/01/17 20:48:23
int a; int *b; int c;

これを使って、
1.aに100を代入する
2.ポインタ変数bにaのアドレスを代入する
3.bの値をcに代入して、cを表示させて下さい。
(100が表示されればOKです。)
A アドレス(&c)を使う方法:変数のアドレスを代入する方法
B ポインタ(*b)を使う方法:値を代入する方法
注:c=a と代入した場合は100と表示されても認めません!

#include<stdio.h>

int main(void){
int a; int *b; int c;
a = 100;
printf(" a[%x, %d], b[%x] \n",&a, a, b);
b = &a;
printf(" a[%x, %d], b[%x, %d] \n", &a, a, b, *b);
c = *b;
printf(" a[%x, %d], b[%x, %d] \n", &a, a, b, *b);
}

Aは解決しました。
Bのほうわかる方いませんか。
236デフォルトの名無しさん:05/01/17 20:49:47
>>235

間違えました。Aがわかる方お願いします。
237デフォルトの名無しさん:05/01/17 20:54:09
>235-236
1.が難し過ぎてここでは解きようがない。どうやって100を代入するの?
238デフォルトの名無しさん:05/01/17 20:59:00
1)複素数の加算(実部r,虚部i同士の加算)
2)複素数の絶対値(sqrt(r*r+i*i))
3)複素数の出力

以下のプログラムでかけているクラスの定義部分を書け

int main(){
double x,y;
Complex c;
scanf("%lf",&x);
Complex c1(x);
scanf("%lf%lf",&x,&y);
Complex x2(x,y);
c=add(c1,c2);
c.abs();
c.out();
return 0;
}

C++です。お願いします。
239デフォルトの名無しさん:05/01/17 21:04:23
>>238
ぐぐればいくらでも出てくるだろ
240デフォルトの名無しさん:05/01/17 21:06:59
Complex::Complex(double re,double im)
:m_real(re),m_imaginary(im)
{}
241デフォルトの名無しさん:05/01/17 21:08:31
>>238
C++使っているのだから、operatorを定義して
Complex a(1,1);// 1+jで初期化
Complex b(2,3);// 2+3jで初期化
Complex c(0,0);// 0で初期化 ここで、jはj=sqrt(-1)を満たす数
c=a+b;
c=a*b;
c=a/b;
c=a-b;
などのように使えるようにした方が汎用性があるでしょ?
242デフォルトの名無しさん:05/01/17 22:01:15
Cなんだが
テキストファイル(HPのソース等)の入力に対して、
各行50文字までを出力する(50文字以上は切り捨て、空行は出力しない)方法教えて
243デフォルトの名無しさん:05/01/17 22:06:19
>>242
man fgets
244デフォルトの名無しさん:05/01/17 22:06:48
fgetsで読んだうちの50文字だけfprintfで出力する
245デフォルトの名無しさん:05/01/17 22:09:29
>>244
それやるとfgetsで呼んだ後、その行のつづき(50文字以降)が次の行として処理されちゃう
246デフォルトの名無しさん:05/01/17 22:11:51
ああ、ちがう、ごめん
50文字関係ない
fgetsで指定した読み込みの最大文字数以降が次の行として処理されちゃう、だ
247デフォルトの名無しさん:05/01/17 22:12:30
1行を文字数に関わらずまるまるfgetsする方法とかってある?
248デフォルトの名無しさん:05/01/17 22:15:08
>>247
'\n'あるか調べて、表示するか捨てるか判断すればいいだろーが。
文字数関わらずにってのはCにゃねーよ。
249デフォルトの名無しさん:05/01/17 22:16:48
一旦fgetsでバッファに読み込んで、
指定文字数のとこにヌル文字入れてfprintfで出力じゃダメなの?

(と思った通りすがりC初心者、間違ってたら教えて
250デフォルトの名無しさん:05/01/17 22:18:30
>>249
バッファを256文字指定していて256文字以上の行があったら?
251デフォルトの名無しさん:05/01/17 22:22:11
改行文字が含まれているかチェックしてないとバグになr・・_no
252192:05/01/17 22:23:31
>>208
難しすぎてわかりません…
もっと簡単にできませんか?
253デフォルトの名無しさん:05/01/17 22:32:57
>テキストファイル(HPのソース等)の入力に対して、各行50文字までを出力する(50文字以上は切り捨て、空行は出力しない)方法

素直に1文字づつ嫁!
254デフォルトの名無しさん:05/01/17 22:33:31
>>249
それいいね
fgetsの読み込み文字数を51にして
配列[50]の部分に\0を代入すればいいってことでしょ?

でもやりかたがわからん・・・・
255デフォルトの名無しさん:05/01/17 22:34:33
>254

>246 の意味わかってる?
256デフォルトの名無しさん:05/01/17 22:34:49
>>242
素直に1文字ずつ読む方法。
#include <stdio.h>
#include <string.h>

int main(void)
{
    FILE *fp = fopen("data.txt", "r");
    int c, count = 0;
    for (; ; ) {
        c = getc(fp);
        switch(c)
        {
        case '\n':
            if (count != 0) printf("\n");
            count = 0;
            break;
        case EOF:
            fclose(fp);
            return 0;
        default:
            if (count++ < 50)
                printf("%c", c);
            else {
                printf("\n");
                while ((c = getc(fp)) != '\n' && c != EOF);
                ungetc(c, fp);
                count = 0;
            }
        }
    }
}
257デフォルトの名無しさん:05/01/17 22:36:34
構造体を使用しn角形(n>=10)の頂点データを反時計回りの順で与えて
図心と面積を求めるプログラムを作成せよ。

よろしくお願いします
258242:05/01/17 22:40:17
>>256
おお!
すばらしい!
さっそく組み込んでみる!
本当にありがとう!!
259デフォルトの名無しさん:05/01/17 22:40:31
行が長かったらreallocでバッファを長くして読み込めばいいじゃん(下手に書くと遅くなるけど)。
260242:05/01/17 22:46:24
>>259
realloc?知らない
ちょっとリファレンス見てみるわ
261デフォルトの名無しさん:05/01/17 22:49:16
>257
一辺の長さは0cmとすると、面積0、図心も0…(冗談)。

n角形を中心から頂点を通るように半直線n本でn等分すればn個の三角形ができる。さてこの三角形の性質は?
262165:05/01/17 22:52:13
すいませんどなたか165お願いできませんか?
263デフォルトの名無しさん:05/01/17 22:53:21
>261
飲酒運転で間違えたorz...
264デフォルトの名無しさん:05/01/17 22:58:15
typedef struct {
int x,y;
}MYPOINT;
MYPOINT*p=(MYPOINT*)malloc(n*sizeof(MYPOINT));
p->x=0;
265デフォルトの名無しさん:05/01/17 23:00:26
神様が暴言吐くだけで100万円くれると言っています
http://hobby5.2ch.net/test/read.cgi/watch/1075518601/854
854 :エンペラ ◆utvPnTXM56 :05/01/17 15:25:55
>>851
頭悪そう
>>852
CL600からCL55AMGに乗り換えたから。V12よりもV8の方がフィーリングが良いです。
>>853
カードキー??????知りません!キーレスゴーはA8ではそうなっています。

>>粘着貧乏キモヲタ共へ
口の利き方に気をつけなさい。甲斐性も根性もない癖に顔が見えないから
言いたい放題ですね?

もしよろしければ、来週25日に大阪の中ノ島にあるロイヤルホテルにまた出張で
宿泊しますので、ホテル1Fにあるコルベーユと言う店に25日の午後6時30分に
来て「大文字さんのお席は何処ですか?」と尋ねてきなさい、そしたら私の席まで案内して
くれますから、そして面と向かってよのようなタメ口が言えたら、ご褒美に即金
で100万恵んでやりますよ!ただし覚悟して言いなさいね!

参加される方は↑の必ずスレの>>500から最新レスまで目を通しておいてね
http://www.rihga.co.jp/osaka/restaurant/restaurant/corbeille/index.html
リーガロイヤルホテル大阪 1Fコルベール
時計・小物板 http://hobby5.2ch.net/test/read.cgi/watch/1075518601/
266デフォルトの名無しさん:05/01/17 23:06:58
>>165 これでいいのか?
#include <stdio.h>
int main(void)
{
struct seiseki {
int bango,kokugo,suugaku,eigo;
char hyouka; /*評価*/
};
struct seiseki array[5]={{101,85,92,79,},
{102,76,35,89,},
{103,76,35,89,},
{104,76,35,89,},
{105,76,35,89,}};
struct seiseki average = {106, 0, 0, 0,};
int kokugo_sum = 0,suugaku_sum = 0, eigo_sum = 0;
int i;
for(i=0; i<5; i++) {
kokugo_sum = kokugo_sum + array[i].kokugo;
suugaku_sum = suugaku_sum + array[i].suugaku;
eigo_sum = eigo_sum + array[i].eigo;
}
average.kokugo = kokugo_sum/5; average.suugaku=suugaku_sum/5; average.eigo=eigo_sum/5;
printf("国語の平均 = %d\n", average.kokugo);
printf("数学の平均 = %d\n", average.suugaku);
printf("英語の平均 = %d\n", average.eigo);
return 0;
}
267258:05/01/17 23:10:44
>>267
すいません、詳細をお願いできますか?
268デフォルトの名無しさん:05/01/17 23:10:47
>257
中心の求め方は公式から明らか。頂点の座標の平均が中心。凸図形を仮定すれば中心から三角形分解できて、面積も求められる。
269デフォルトの名無しさん:05/01/17 23:18:47
分かる人がいないのは寂しいな、先生。
270デフォルトの名無しさん:05/01/17 23:22:45
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char array[1000][81];

int main(){
FILE *fp;
char str[1024];
int n,i;

for(n=0; n<1000; n++) array[n][0] = '\0';

if ((fp = fopen("input.txt", "r")) == NULL) {exit(2);}
n=0;
while (fgets(str, 1024, fp) != NULL) {
if (strlen(str) >= 80) {
str[79] = '\n';
str[80] = '\0';
}
strcpy(array[n], str);
n++;
}
fclose(fp);

for(i=0; i<n; i++) printf("%s", array[i]);
return 0;
}
271デフォルトの名無しさん:05/01/17 23:23:38
[1] 授業単元: プログラミング演習

[2] 問題文

0〜1の間で一様に分布する変数Xから、標準正規分布する変数Yを作るには
次の式を用いる
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/84.zip
rand()を用いて、Xを12000個発生させ、作成したYの分布を*を用いた棒グラフとして表せ

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): lcc-win
 [3.3] 言語:C
[4] 期限: 明日まで




画像のようなグラフにしなければならないんですが、
Yのランク分けと、縦型のグラフの作り方がわかりませbb
よろしくお願いします
272デフォルトの名無しさん:05/01/17 23:25:34
>>271
縦型じゃなくてもいいじゃん。
273271:05/01/17 23:26:24
>>272
縦型という課題なので・・・
274デフォルトの名無しさん:05/01/17 23:29:09
>273
文字の二次配列で仮想画面を作るって言えば分かるかな。
275デフォルトの名無しさん:05/01/17 23:29:37
2次元配列をつくって、それに横型グラフを入れていって、
縦型グラフになるように、最後に出力すればいい
276257:05/01/17 23:36:10
中心から隣接する頂点二つへ線を引き
三角形を作って面積を求めるということでしょうか?
ヘロンの公式を使えば上手くいきそうです
ありがとうございました。
277デフォルトの名無しさん:05/01/17 23:37:41
問題:文字列Sの長さを返す関数を書け。ただしライブラリは使わない。

int len(char s[])
{
int i=0;
while(s[i]!='\0')
{
i++;
}
return i;
}

回答は↑であっていますか?
あと、 3/6*2.0 と 3/6.0*2 の値はそれぞれ0.0000 1.0000で合っていますか?
278デフォルトの名無しさん:05/01/17 23:43:09
>277
アラビア語の場合はどうなる。
簡単な計算は自分でコンパイルして確かめれ
279271:05/01/17 23:47:36
>>274
>>275
二次元配列を使うところまでは思いついたんですが、どう出力していいのか
わかりません
280デフォルトの名無しさん:05/01/17 23:53:27
>279
最初は空白で初期化しておく。
座標から二次配列の要素への対応を考える時、座標に*を描く事は対応する要素に'*'を代入することだ。
281165:05/01/17 23:56:58
>>266
どうもありがとうございました。
明日提出日なので間に合ってよかった。
282デフォルトの名無しさん:05/01/17 23:59:40
文字の並びは文字列そのもの。0終端になるように調節すれば、printfを使って出力できる。
283271:05/01/18 00:03:57
>>280
自力で挑戦してみます
thx!
284デフォルトの名無しさん:05/01/18 00:06:47
>>283
当然だヴォケ。ただで人に正解を教えてもらおうなんて甘い考えは捨てる事だな。
285224:05/01/18 00:43:53
>>230
書き込んだ直後に計算室追い出されてカキコできませんでした、失礼しました(´・ω・`)
このへん参考にさせてもらってもうちょい考えてみます、今日は徹夜覚悟で頑張りますヽ(`Д´)ノ



でもやっぱり空白文字は嫌い(´・ω・`)
286271:05/01/18 00:49:26
すみません、やっぱよく解りません
ここまでしか出来ませんでした・・・




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

void main(void)
{
int x,y,z,i,j,g[][12];
for(i=0;i<1000;i++){
for(j=0;j<12,j++){
x=(double)rand()/32767.0
z=z+x
}
y=z-6.0

(???)

}
}

287162:05/01/18 01:55:52
どうかお願いします。
ググったり、図書館で数値計算の本を調べたりしましたが載っていなくて全然分かりません。
288デフォルトの名無しさん:05/01/18 01:57:45
>>286
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/85.txt
こんなんでいいのか?Y軸方向の目盛りは表示してないよ。環境によって変わるし。
289デフォルトの名無しさん:05/01/18 01:58:43
>>287
>・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
290デフォルトの名無しさん:05/01/18 02:05:19
疎行列ってのは、要素の値がほとんど0の行列の事だよね。
だから、データの表現を、0以外の値を持つ値の添え字と値のみで表現する事により
ワークエリアを圧縮する技法だ。

しかしその代償として、任意の要素へのアクセスは通常の配列に比べかなり低速になる。
実用的なライブラリはハッシュテーブルを使うけど、今回の課題は双方向リストと線形探索
という単純でより低速なデータ構造を使えと言っているわけだ。

その発生する疎行列は今回は単位行列のようだね。くそ・・・C++なら、添え字演算子の
オーバーロードを使えばスマートに表現できるのに、Cだと汚くなるなあ・・・・
291デフォルトの名無しさん:05/01/18 02:12:33
>>290
C++なら、boost::ublasを使えばプログラム不要なのにな。
292271:05/01/18 02:14:19
>>288
ありがとうございます
細部がよくわかりませんが、参考にやってみます
293デフォルトの名無しさん:05/01/18 02:18:50
>>287
疎行列(sparse matrix)をリストで表現するには、グラフ理論で言う所の隣接リスト表現
というのをよく使うようだ。この表現は行方向のみポインタ配列で決定でき、列方向を
線形探索により走査する事になる。

今晩は暇だからちまちま作ってみるよ。でも何時になるかわからないのでそのつもりで。
発生する疎行列は単位行列という事で。
294162:05/01/18 02:22:17
すみませんでした。
この数式で疎行列の解を求めるということしか言われてなくてよく分かりません。

j-1
lij = aij - Σ lik ukj lik=0 →lik ukj=0
k=0

lij=aij-(li0 u0j+li1 u1j+li2 u2j) ←構造体に格納


0

>>290
あくまでその単位行列は入力ファイルの形式の例です。
その形式で入力する疎行列を作成するプログラムも自分で作れと言われました。
295162:05/01/18 02:27:06
>>293
ありがとうございます。今週中に出来れば何とかなるので

294の上の式のj-1とk=0はΣのところで、下の式の0はli0のところです。

296のりこ:05/01/18 02:36:49
学校の課題です。ちんぷんかんぷん。プログラミングで評価つけるなんてシラバスには書いてないのに。。。困ってます。
問題
「正規分布で平均値 S:0.3 L:0.7 
分布3σ=0.2のとき マルコフ確立分布で表せるときのプログラムを組み出力せよ。」
どなたかわかる方いらっしゃいますか?

297192:05/01/18 02:44:51
>>208
つけたししちゃってすいません。ありがとうございました

>>211
気にしないようにします。
298デフォルトの名無しさん:05/01/18 02:49:30
>>294
その解法はもしかして疎行列の直接解法って奴か?LU分解を用いる方法だが。
もう少し詳しく書いてくれ。このままではデータファイルを読んでメモリに格納して
終わりになってしまうぞ。
299162:05/01/18 03:02:19
>>298
すみません。この式しか与えられていないので詳しく書けません。
この課題と一緒にクラウト法で解く課題も出されましたが参考になるでしょうか?
300デフォルトの名無しさん:05/01/18 03:12:44
>>299
クラウト法ってのは、LU分解を行うためのアルゴリズムの一つで、直接解法と関係がある。
そうしたら>>294の解法は、ガウス=ザイデル法による反復解法だろう。

どうすっかな・・・・入出力ルーチンと要素へのアクセス関数までプログラムしてみるから、
後は自分でやってみてもらえると助かる。それか、他の人がそれを見てアレンジしてくれる
と助かるんだが。今週末まででいいという事だし、今晩中でなくてもいいなら考えてみる。
301162:05/01/18 03:16:13
>>300
よろしくお願いします。
302デフォルトの名無しさん:05/01/18 04:17:37
取り敢えず入出力ルーチンと、単位行列ファイル作成プログラムだ。
要素へのアクセスは線形探索を用いてvalofNode()で行える。

今日はこれで寝る。後は誰か適当にこいつに直接解法と反復解法のアレンジを
してくれるか、誰もしてなかったら明日俺が見てみる。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/87.txt
303初心者:05/01/18 11:01:11
C++を使用してコマンドラインベースのプログラムを作成する。(Windowsベースでない。)
課題として一つ目はテキストファイルの中の奇数番目の行と偶数番目の行とを分けて、それぞれを別々のファイルに書き出す。
二つ目はテキストファイルの各行の先頭に#の文字をつけて、新たなファイルに書き出す。
以上の二つです。
ちなみに期限は今日いっぱいです。
お願いします。
304デフォルトの名無しさん:05/01/18 11:04:25
>>303
> C++を使用してコマンドラインベースのプログラムを作成する。

そうですか。手を出さないから、生温かく見守ってあげましょう。
305デフォルトの名無しさん:05/01/18 11:18:09
>303
ファイルストリームを開いて一行ずつgetsだぜ! ピカ!
306デフォルトの名無しさん:05/01/18 12:03:27
>>305
gets使うなんて正気?
307デフォルトの名無しさん:05/01/18 13:12:26
学習範囲:関数
問題:「1からnまでの整数の総和を求める関数」sumを定義し、それをつかって
「適当な正の整数nを入力させ、sumを呼び出して総和を返させ、それを出力するプログラム」を書きなさい。
ヒント)1からnまでの総和=n(n+1)/2

環境:C言語

コンパイルできる環境がないので添削お願いします。


#include<stdio.h>
int sum(int a);
main()
{
int n,x;
x=1;
printf("整数を入力してください。\n");
scanf("%d,&x");
for(n=1;n<=x;n++)
x=sum(x);
printf("入力した整数の総和は%d\n",x);
return 0;
}

int sum(int a)
{
int n,ans;
ans=n*(n+1)/2;
return ans;
}
308デフォルトの名無しさん:05/01/18 13:33:56
PGMファイルを二値化して出力するプログラムを色々なサイトを参考に作ったのですが
なぜか出力ファイルにうまく書き込めていません。ソースを貼るのでご指摘、間違いに
気づいた方は教えてください。おねがいします。

#include <stdio.h>
#include <stdlib.h>
#define XSIZE 640/*画像の大きさ*/
#define YSIZE 480
#define HIGH 255 /*濃度値 255=HIGH=白*/
#define LOW 0 /*濃度値 255=LOW=黒*/

main(){
FILE *fp,*fg; /*入出力ファイル操作用ポインタの宣言*/
char input[XSIZE][YSIZE]; /*入力2次元配列の型宣言*/
char out[XSIZE][YSIZE]; /*出力用2次元配列の型宣言*/
int i,j,ikiti;
printf("input IKITI *** "); /*閾値の入力*/
scanf("%d",&ikiti);
for(j = 0;j < YSIZE;j++){
for(i=0;i<XSIZE;i++) {input[i][j]=out[i][j]=0; /*配列の初期化*/
}}
309308:05/01/18 13:34:32
fp=fopen("sample.pgm","rb"); /*入力ファイルのオープン*/
if(fp==NULL){
printf("open error"); /*ファイルのエラー処理*/
exit(1);}
for(j=0;j<YSIZE;j++){
for(i=0;i<XSIZE;i++) {
input[i][j]=fgetc(fp); /*配列への画像データの代入*/
} }
for (j=0;j<YSIZE;j++){/*2値化,閾値以上の濃度値ならば*/
for(i=0;i<XSIZE;i++){
if((int)input[i][j]>=ikiti){
out[i][j]=HIGH;}
else{
out[i][j]=LOW; } } }

fg=fopen("sanple2.pgm","w"); /*出力ファイルのオープン*/
for(j=0;j<XSIZE;j++){
for(i=0;i<YSIZE;i++) {
fprintf(fg,"%c",out[i][j]); /*配列からディスクへの書き込み*/
} }
fclose(fp); /*入力ファイルのクローズ*/
fclose(fg); /*出力ファイルのクローズ*/
}
310308:05/01/18 13:38:15
訂正:
fg=fopen("sanple2.pgm","wb"); /*出力ファイルのオープン*/

でした。よろしくおねがいします。
311デフォルトの名無しさん:05/01/18 13:42:41
>309
XSIZEとYSIZEが逆。
sampleのつづり。
312デフォルトの名無しさん:05/01/18 13:55:55
313デフォルトの名無しさん:05/01/18 14:07:55
>>312
ありがとうございます。
314308:05/01/18 14:09:00
>311
XSIZEとYSIZEを逆にすると一応ファイルへの書き込みは
できました!ありがとうございます!!
でもまだ画像として扱われていなくて、二値化もできていません。
引き続き間違いや指摘がありましたらよろしくお願いします。
315デフォルトの名無しさん:05/01/18 15:12:01
>314
二値化は別関数に分けろ。
'\n'変換が起きてしまうので、バイナリ入出力にfprintfなどの文字や文字列を対象とした関数は使うな。fread/fwriteを使え。バイナリエディタを使え。
316デフォルトの名無しさん:05/01/18 15:16:41
>>308
iとjも逆
普通画像は[y][x]で格納する(スキャンライン(x)がメモリ上で連続になるように)
あとpgmヘッダを読み書きしてない
バイナリpgmなら
P5
xsize ysize
maxgray
pixeldata
になってる
317デフォルトの名無しさん:05/01/18 15:23:05
ダメだこりゃ!
318デフォルトの名無しさん:05/01/18 15:27:57
次逝ってみよー!
319デフォルトの名無しさん:05/01/18 15:29:01
[1] 授業単元:棒グラフの作成
[2] 問題

(1) 標準入力からデータを読み込んで,以下のような棒グラフを標準出力に書くプログラムを作りなさい。

******************************
********************************
**********************

(2) 以下のようにスケールを入れなさい。データが40を超えたら,表示しないようにしなさい。グラフのどこかにデータの数値を表示しなさい。

+----+----1----+----2----+----3----+----4
23 |***********************
45 |***************************************+
35 |*********************************

[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): Windowsのc++
[3.3] 言語:c++
320デフォルトの名無しさん:05/01/18 15:33:05
コンパイラすら書けないような無能無才は素直に単位落とせ
321デフォルトの名無しさん:05/01/18 15:59:08
[1] プログラミング実習
[2] 実行ファイル名 [オプション][ファイル名]
       −nファイルの末尾n行を表示(n>20)
    −r   逆順表示
       −v   ファイル名表示
       −a   行表示
で動作するプログラムをリングバッファ(動的確保)を使って作る。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ(バージョン): Microsoft Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:2005年01月22日まで
322デフォルトの名無しさん:05/01/18 16:00:46
>316
すいません
「maxgray pixeldata になってる」これどういうことでしょう?
くわしくおしえてください。おねがいします。
323デフォルトの名無しさん:05/01/18 16:21:33
>>307
フリーコンパイラ使えば?


#include<stdio.h>

int sum(int n) { return n*(n+1)/2; }

int main(void)
{
int x;

printf("整数を入力してください。\n");
scanf("%d", &x);
printf("入力した整数の総和は%d\n",sum(x));
return 0;
}
324デフォルトの名無しさん:05/01/18 17:02:31
>>303誰も手つけないね。
325デフォルトの名無しさん:05/01/18 17:21:09
>324
ヒント過剰
326デフォルトの名無しさん:05/01/18 17:53:40
1〜10までの数字がランダムに置かれている。
大きい方から順に表示するプログラムを作成せよ。

お願いします
327デフォルトの名無しさん:05/01/18 17:55:27
>322
Googleでpgm形式を検索したら発見
http://www.openspc2.org/format/PGM/
328デフォルトの名無しさん:05/01/18 17:56:51
>326
qsort関数でソート
329デフォルトの名無しさん:05/01/18 17:58:36
>>326
>>1のテンプレも読まない貴様に誰が返信するかぼけっ!
330デフォルトの名無しさん:05/01/18 17:58:53
>>301
一応完成した。疎行列は正しく引数を与えないとガウス・ザイデル法が途中で
0による除算で異常終了してしまうため、ランダム配列は疎行列でない行列を
生成するようにした。0.でない値の発生確率はgenerateSparseMatrix()の
最後の引数をいじればよい。

クラウト法はこれを参考に自分で考えてくれ。今日は時間がない。LU分解法
とか直接解法でぐぐればいくらでもプログラムが出てくるから、それを参考にして
考えて欲しい。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/89.txt
331162:05/01/18 18:07:30
>>330
ありがとうございます。
後は頑張って自分でやってみます。
332デフォルトの名無しさん:05/01/18 18:36:44
>>326
ほらよ馬鹿

#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <boost/lambda/lambda.hpp>

int main(){
 std::vector<int> v;
 int i(0);
 std::generate_n(std::back_inserter(v), 10, ++boost::lambda::var(i));
 std::random_shuffle(v.begin(), v.end());
 std::sort(v.begin(), v.end(), std::greater<int>());
 std::for_each(v.begin(), v.end(), std::cout << boost::lambda::_1);
}
333デフォルトの名無しさん:05/01/18 18:37:46
>>303
1問目
#include <iostream>
#include <fstream>
#include <string>

int main(int argc, char* argv[])
{
    if (argc != 4)
        std::cout << "使い方: 実行ファイル名 入力ファイル名 奇数行出力ファイル名 偶数行出力ファイル名" << std::endl;
    else
    {
        std::ifstream in(argv[1]);
        std::ofstream out_odd(argv[2]), out_even(argv[3]);
        std::string line;
        bool is_even = false;
        while (std::getline(in, line))
        {
            if (is_even) out_even << line << std::endl;
            else out_odd << line << std::endl;
            is_even = !is_even;
        }
    }
    return 0;
}
334デフォルトの名無しさん:05/01/18 18:39:28
>>303
2問目
#include <iostream>
#include <fstream>
#include <string>

int main(int argc, char* argv[])
{
    if (argc != 3)
        std::cout << "使い方: 実行ファイル名 入力ファイル名 出力ファイル名" << std::endl;
    else
    {
        std::ifstream in(argv[1]);
        std::ofstream out(argv[2]);
        std::string line;
        while (std::getline(in, line)) out << '#' << line << std::endl;
    }
    return 0;
}
335326:05/01/18 18:50:07
>>329
スイマセンスイマセンスイマセンorz

[1] プログラミング実習
[2] 1〜10までの数字がランダムに置かれている。
  大きい方から順に表示するプログラムを作成せよ。
[3] OS: windows2000
言語:C
[4] 期限:2005年1月20日まで
[5]二重のfor文を使用しろとのこと。
336デフォルトの名無しさん:05/01/18 19:05:27
>335
ほらよ、レベルの低い問題だから俺が答えてやるよ

#include<stdio.h>
#define MAX 10
int main( void ) {
int test[] = { 1, 10, 9, 8, 7, 5, 4, 3, 2, 6 } ;
intcnt, idx ;

for( idx = 0 ; idx < MAX - 1 ; idx ++ )
for( cnt = 0 ; cnt < MAX - 1 ; cnt ++ )
if( test[cnt] > test[cnt + 1] )
test[cnt] ^= test[cnt + 1] ^= test[cnt] ^= test[cnt + 1] ;

return 0 ;
}
337デフォルトの名無しさん:05/01/18 19:10:28
>>336
数字がint型でなくてfloatとかdoubleだったらどうするんだ?
338デフォルトの名無しさん:05/01/18 19:12:04
いまはそこまで求めないでしょ
339デフォルトの名無しさん:05/01/18 19:19:28
>>335
バブルソートで。そこそこ柔軟性のあるコードだと思うけど。

#include <stdio.h>

int main(void)
{
    int a[] = {6, 3, 5, 7, 10, 1, 9, 8, 4, 2};
    int i, n, j, temp, *first = a, *last = a + sizeof(a) / sizeof(a[0]);
    for (i = 0, n = last - first; i < n - 1; ++i)
        for (j = 0; j < n - 1 - i; ++j)
            if (*(first + j) < *(first + j + 1))
            {
                temp = *(first + j);
                *(first + j) = *(first + j + 1);
                *(first + j + 1) = temp;
            }
    for (i = 0; i < sizeof(a) / sizeof(a[0]); ++i)
        printf("%3d", a[i]);
}
340デフォルトの名無しさん:05/01/18 19:22:48
まだint型しか習ってないに決まってるさ!
341デフォルトの名無しさん:05/01/18 19:35:48
>>336,>>339
ありがとうございます
>>339さんのやり方でやってみます
…が、sizeofってのが分かりませんorz

>>340
folatとかは習いました
342デフォルトの名無しさん:05/01/18 19:37:35
>341
文字通りデータのサイズ
343デフォルトの名無しさん:05/01/18 19:58:03
>test[cnt] ^= test[cnt + 1] ^= test[cnt] ^= test[cnt + 1];
これだと副作用が複数の個所で発生するから、規格上動作が未定義になるぞ
344339:05/01/18 20:09:41
>>341
sizeof(a)はaのサイズ(10×intの大きさ)でsizeof(a[0])はa[0]のサイズ(intの大きさ)。
だからsizeof(a) / sizeof(a[0])は10になる。これでaの要素数を求められる。
こうしておけば、aの要素数を変更したくなったときにあちこちで数字を書き換える
必要がない。「柔軟性」ってそういうこと。#define MAX 10とかしてもいいけど、
マクロは色々副作用があるから避けられるなら避けた方がよい。ほとんどの場合、
コンパイル時にsizeof(a) / sizeof(a[0])は定数に置き換えられるから、一回一回
計算するオーバーヘッドもないと考えてよい。
345デフォルトの名無しさん:05/01/18 20:13:43
>>343
知ってやってるんだと思うよ
346336:05/01/18 20:20:55
知らなかったょ
347デフォルトの名無しさん:05/01/18 20:28:43
簡単なswapを書かずにわざわざこんな未定義な動作を書く意味が分からない。
格好いいとか思って書いてるのか?
348デフォルトの名無しさん:05/01/18 20:29:31
//配列の要素数を求めるマクロ。
//ポインタは不可。
#define ARRAYLEN(a) (sizeof(a)/sizeof((a)[0]))
349デフォルトの名無しさん:05/01/18 20:35:36
むか〜し、話題になったやつじゃねーの?
Cでテンポラリ変数使わずにスワップできるとかって。
なんかで読んでホラだと知らずに使ったんだろ、きっと。
350デフォルトの名無しさん:05/01/18 20:47:20
教祖は今海外出張中だけどはっておくね
http://www.dd.iij4u.or.jp/~okuyamak/Information/xor_fixed_swapping.html
351デフォルトの名無しさん:05/01/18 20:57:43
>>350
>最近の CPU はレジスターリネーミング機構というものが入っています。
>ニーモニック上32個のレジスターが使えるとするなら、 内部的には40 個ぐらい
>レジスターを持っておいて、 必要に応じてその 40 個の中の適切なレジスターを、
>ニーモニック上のレジスターに割り振るのです。

これ知らなかった。勉強になった。
352デフォルトの名無しさん:05/01/18 21:21:12
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
スキャンした画像を固めてあります。約20K
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/90.zip
問題は5問あります。1番のみやったのですがあとは手に負えず…
よろしくお願いしますm(__)m
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): VisualC++ Ver6.0
 [3.3] 言語:C
[4] 期限:2005年01月26日まで
[5] その他の制限: 特になし
353デフォルトの名無しさん:05/01/18 21:50:57
>>352
俺の持ってる本に載ってるソースなんだがこれをちょっと書き換えれば3の1)と2)は出来る。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/91.txt
354初心者:05/01/18 23:28:33
>>333
>>334
どうもありがとうございました。
とっても助かります。
ほんとに感謝してます。
では失礼します。
355デフォルトの名無しさん:05/01/19 00:15:18
>>352
[III]-(3)、ちと怪しいのでよろしく
#include <stdio.h>
#include <string.h>
double convSei( const char* p ){
double d = 0 ;
for(;;){
if( *p == '1' ) d += 1 ;
if( !*(++p) ) break ;
d *= 2 ;
}
return d ;
}
double convSyou( const char* top ){
double d = 0 ;
const char* p = top + strlen( top ) ;
for(; p != top ; --p ){
if( *(p-1) == '1' ) d += 1 ;
d /= 2 ;
}
return d ;
}
int main( int argc, char* argv[] ){
double d ;
d = convSei( strtok( argv[1], "." ) ) ;
d += convSyou( strtok( NULL, "." ) ) ;
printf( "%0.5f\n", d ) ;
return 0 ;
}
356デフォルトの名無しさん:05/01/19 00:42:12
/* >>325 5*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define BUF_MAX 256

struct Node{int element;struct Node *next;};

void main(){
int x,ans,diff,minDiff,mode;
char buf[BUF_MAX];
struct Node *startNode,*nowNode,*newNode;
startNode=(struct Node*)malloc(sizeof(struct Node));

fprintf(stdout,"input List element >");
fgets(buf,BUF_MAX,stdin);
startNode->element=atoi(buf);
startNode->next=NULL;
nowNode=startNode;

while(1){
fprintf(stdout,"input List element (* end)>");
fgets(buf,BUF_MAX,stdin);
if(buf[0]=='*')break;
newNode=(struct Node*)malloc(sizeof(struct Node));
nowNode->next=newNode;
newNode->element=atoi(buf);
newNode->next=NULL;
nowNode=newNode;
}
357デフォルトの名無しさん:05/01/19 00:42:50
/*356続き*/
while(1){
fprintf(stdout,"input x (* end)>");
fgets(buf,BUF_MAX,stdin);if(buf[0]=='*')break;x=atoi(buf);
fprintf(stdout,"1: most near\n2: most near but less than x\n, 3 most near but more than x >");
fgets(buf,BUF_MAX,stdin);mode=atoi(buf);
minDiff=INT_MAX;
for(nowNode=startNode;nowNode!=NULL;nowNode=nowNode->next){
diff=nowNode->element-x;
switch(mode){
case 1:if(minDiff>abs(diff)){minDiff=abs(diff);ans=nowNode->element;}break;
case 2:if(minDiff>abs(diff)&&x>=nowNode->element){minDiff=abs(diff);ans=nowNode->element;}break;
case 3:if(minDiff>abs(diff)&&x<=nowNode->element){minDiff=abs(diff);ans=nowNode->element;}break;
default:ans=0;/*これはまずいかも*/
}
}
fprintf(stdout ,"ans=%d",ans);
}
}
358デフォルトの名無しさん:05/01/19 00:45:01
>356-357は>>352だ。間違えた。
リストと書いてあったのでリストで作ってしまったが、配列でも良いと思う。
359デフォルトの名無しさん:05/01/19 00:49:38
>>352
IIIの(4)、またまた怪しいがよろしく
#include <stdio.h>
#include <string.h>
void convSei( int i ){
int mask = 0x40000000 ;
for( ; mask > 0 ; mask /= 2 ){
if( ( mask <= i ) ) putchar( ( mask & i ) ? '1' : '0' ) ;
}
}
void convSyou( double d ){
putchar( '.' ) ;
int i ;
d -= (int)d;
for( i = 0 ; i < 5 ; i++ ){
d *= 2 ;
putchar( ( (int)d & 1 ) ? '1' : '0' ) ;
if( d - (int)d <= 0.0 ) break ;
}
}

int main( int argc, char* argv[] ){
double d ;
sscanf( argv[1], "%lf", &d ) ;
convSei( (int)d ) ;
convSyou( d ) ;
return 0 ;
}
360352:05/01/19 00:54:58
皆様ありがとうございます。

>>356さん
確か配列でやれと言ってたような気がします。
恥ずかしながら正直私のレベルで356さんが書いたプログラムは何がなんだか
分かりません(^_^;)凄いですね。
361デフォルトの名無しさん:05/01/19 00:59:46
野球選手に野球が上手ですねと言ってるようなものだな
362352:05/01/19 01:02:19
>>361
確かに(^_^;)

引き続きよろしくお願い致しますm(__)m
363デフォルトの名無しさん:05/01/19 01:13:34
/*静的配列版(あふれ判定してません)
 条件・先生からのヒントはは先に言ってね*/

#define BUF_MAX 256
#define LIST_SIZE 256
void main(){
int x,ans,diff,minDiff,mode,listSize,cnt;
char buf[BUF_MAX];
int list[LIST_SIZE];
cnt=0;
fprintf(stdout,"input List element >");
fgets(buf,BUF_MAX,stdin); /*1行読み込む(最大BUF_MAX)*/
list[cnt]=atoi(buf);/*bufの内容をint型にしてlist[cnt]に格納*/
cnt++;

while(1){
fprintf(stdout,"input List element (* end)>");
fgets(buf,BUF_MAX,stdin);
if(buf[0]=='*')break;
list[cnt]=atoi(buf);
cnt++;
}
listSize=cnt;
364デフォルトの名無しさん:05/01/19 01:14:36
/*続き
fgetsは習ってないなら、scanfでもいいかも。バグがあったら申し訳ない*/
while(1){
fprintf(stdout,"input x (* end)>");
fgets(buf,BUF_MAX,stdin);if(buf[0]=='*')break;x=atoi(buf);
fprintf(stdout,"1: most near\n2: most near but less than x\n, 3 most near but more than x >");
fgets(buf,BUF_MAX,stdin);mode=atoi(buf);
minDiff=INT_MAX;
for(cnt=0;cnt<listSize;cnt++){
diff=list[cnt]-x;
switch(mode){
case 1:if(minDiff>abs(diff)){minDiff=abs(diff);ans=list[cnt];}break;
case 2:if(minDiff>abs(diff)&&x>=list[cnt]){minDiff=abs(diff);ans=list[cnt];}break;
case 3:if(minDiff>abs(diff)&&x<=list[cnt]){minDiff=abs(diff);ans=list[cnt];}break;
default:ans=0;/*これはまずいかも*/
}
}
fprintf(stdout ,"ans=%d",ans);
}
}
365352:05/01/19 01:17:09
失礼しましたm(__)m
一応fgetsも習ってるんですが…(というか独習ですが)よく失敗します(^_^;)
366デフォルトの名無しさん:05/01/19 01:28:32
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):.(ドット)以降の空白をけす削除するプログラムを作ってます。
i love you.
me too.__  ←このアンダーバーの部分です。
[3] 環境 学校のUNIXです。
[4] 言語 C言語
[5] 期限 1/20 08:00
すみませんが、おねがいします。
#include<stdio.h>
int
main(int argc,char **argv)
{
int i,no,a;
char c, s[1000], t[1000];
i=0;
while((c=getchar())!='\n') {
s[i] = c;
i++;
if(i >= 999){
break;
}
}
367デフォルトの名無しさん:05/01/19 01:31:41
/*続きです*/
for(a=0;a<1001;a++){
if(s[a]=='.'){
if(s[a+1]=' '){
no++;
}
}
else if (s[a]==' '){
if(s[a+1]==' ') s[a+1] = '\0';
}
else
printf("%s", s[a]);
}
return 0;
}
368デフォルトの名無しさん:05/01/19 01:38:17
>>366
#include <stdio.h>
int main(void)
{
int c;
while ((c = getchar()) != EOF) {
int is_put;
if (c == '.') is_put = 0;
if (c == '\n') is_put = 1;
if (is_put) putchar(c);
}
return 0;
}
369368:05/01/19 01:40:54
なにやってんだ漏れ
#include <stdio.h>
int main(void)
{
int c, is_put = 1;
while ((c = getchar()) != EOF) {
if (c == '.') is_put = 0;
if (c == '\n') is_put = 1;
if (is_put) putchar(c);
}
return 0;
}
370デフォルトの名無しさん:05/01/19 01:42:44
putcharとかはじめてみました><
むずかしいですね
ありがとうございます。
371デフォルトの名無しさん:05/01/19 01:56:44
>>368
「.(ピリオド)」が消えちゃわん?
372デフォルトの名無しさん:05/01/19 02:01:59
#include <stdio.h>

struct student{
char name[20];
int english;
int math;
int japanese;
double ave;
};

int main(void)
{
struct student s = {"A", 82, 72, 58};
struct student *ps;
ps = &s;

******

printf("%s: 英語=%3d 数学=%3d 国語=%3d : 平均=%2.2f\n", *****);

return 0;
}

ここの****の部分を補う問題なんですが・・・
お願いします。
373372:05/01/19 02:05:28
あ、最初の****は psを使って平均点を求める。
2つめは psを使って成績を表示。

での場合です。
374デフォルトの名無しさん:05/01/19 02:09:01
*****-1
ps->ave = ( ps->english + ps->math + ps->japanease ) / 3.0;
*****-2
ps->name, ps->english, ps->math, ps->japanease, ps->ave
375372:05/01/19 02:15:17
>>374
ありがとうございましたm(__)m
376372:05/01/19 02:35:28
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):372を改良し、
構造体のポインタ変数s(struct student *s)を宣言し
メモリを確保した後、そこに値を代入し、結果を出力せよ。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ(バージョン): Borland C++ 5.5.1
 [3.3] 言語:C
[4] 期限:1月19日朝7時半

377372:05/01/19 02:37:47
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void print_data(struct student s);

struct student{
char name[20];
int english;
int math;
int japanese;
double ave;
};

int main(void)
{
struct student *s;

s = (struct person *)calloc(1, sizeof(struct student));
378372:05/01/19 02:39:22
続き

strcpy(s->name, "A");
s->english = 82;
s->math = 72;
s->japanese = 58;
print_data(*s);

struct student *ps;

ps = &s;

ps->ave = ( ps->english + ps->math + ps->japanese ) / 3.0;

free(s);
return 0;
}

void print_data(struct student s){
printf("%s: 英語=%3d 数学=%3d 国語=%3d : 平均=%2.2f\n",
s.name, s.english, s.math, s.japanese, s.ave);
}
379デフォルトの名無しさん:05/01/19 02:53:06
>>376
すまんが(^^;;
>>377-378
このコードは元にしなくていいのだよね?
380デフォルトの名無しさん:05/01/19 02:58:38
>>372
*psとかは別にいらねえんじゃねえの?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void print_data(struct student s);
typedef struct student{
char name[20];
int english;
int math;
int japanese;
double ave;
}Student;

int main(void)
{
Student *s;
s = (Student *)malloc(sizeof(Student));
strcpy(s->name, "A");
s->english = 82;
s->math = 72;
s->japanese = 58;
s->ave = (s->english + s->math + s->japanese ) / 3.0;
print_data(*s);
free(s);
return 0;
}

void print_data(struct student s){
printf("%s: 英語=%3d 数学=%3d 国語=%3d : 平均=%2.2f\n",s.name, s.english, s.math, s.japanese, s.ave);
}
381デフォルトの名無しさん:05/01/19 03:03:59
いるかいらないかではなく、問題の通りに作るのが宿題だろ
382デフォルトの名無しさん:05/01/19 03:26:41
画像ファイルを読み込んで出力するプログラム組んでるんですが途中で画像が
途切れて表示されます
unsigned char in[Y][X];      /*入力2次元配列の型宣言*/
unsigned char out[Y][X];       /*出力用2次元配列の型宣言*/

こんなふうに配列を宣言してるんですけど配列って取り込める数値の制限って
あるんですか?
ちなみに画像は640×480です。
383デフォルトの名無しさん:05/01/19 03:32:55
>>382
それだけでは何とも言えんが、
原因はあなたが想像している事とは関係無い。
384デフォルトの名無しさん:05/01/19 03:33:42
そりゃYやらXが小さきゃ入らないわな。
素直に動的確保するが吉。
385デフォルトの名無しさん:05/01/19 03:52:31
>383
こんな感じなんですがご指摘ありましたらよろしくおねがいます。
include <stdio.h>
#include <stdlib.h>
#define Y 480/*画像の大きさ*/
#define X    640

main(){
FILE *fp,*fg;
unsigned char in[Y][X];
unsigned char out[Y][X];
int x,y;
for(y= 0;y < Y;y++){
for(x=0;x<X;x++) {
input[y][x]=out[y][x]=0; /*配列の初期化*/
}}
fp=fopen("samlpe.pgm","rb"); /*入力ファイルのオープン*/
if(fp==NULL){
printf("open error");
exit(1);}
386385:05/01/19 03:53:55
続き
for(y=0;y<Y;y++){
for(x=0;x<X;x++) {
input[y][x]=fgetc(fp); /*配列への画像データの代入*/
}}
fg=fopen("sample2.pgm","wb"); /*出力ファイルのオープン*/
for (y=0;y<Y;y++){
for(x=0;x<X;x++){
out[y][x]=input[y][x];}}

for(y=0;y<Y;y++){
for(x=0;x<X;x++) {
       fprintf(fg,"%c",out[y][x]);
}}
fclose(fp); /*入力ファイルのクローズ*/
fclose(fg); /*出力ファイルのクローズ*/
}
387デフォルトの名無しさん:05/01/19 04:01:13
>>385
開口。ダメダメじゃん・・・
PGMの読み込みがちゃんとできていない
388デフォルトの名無しさん:05/01/19 04:01:45
ヘッダの分も確保するか、読み捨てるかすれ。
389385:05/01/19 04:04:52
>387、388
そうなんですか?どうかけばいいんでしょう?

ちなみにこのプログラムは>308からつくりました
390デフォルトの名無しさん:05/01/19 04:07:28
>>389
PGMのファイルフォーマットを調べてからにしてくれ。
391デフォルトの名無しさん:05/01/19 04:19:01
sample.pgmのマジックナンバーは
P2
640 480
255
なってました
392のりこ:05/01/19 05:12:45
学校の課題です。ちんぷんかんぷん。プログラミングで評価つけるなんてシラバスには書いてないのに。。。困ってます。
問題
「正規分布で平均値 S:0.3 L:0.7 
分布3σ=0.2のとき マルコフ確立分布で表せるときのプログラムを組み出力せよ。」
どなたかわかる方いらっしゃいますか?
393デフォルトの名無しさん:05/01/19 05:14:02
>>388
>>ヘッダの分も確保するか、読み捨てるかすれ。

具体的にどうすればこれをできるのか詳しく書いてるサイトご存知の方or説明の
できる方いませんか?
394デフォルトの名無しさん:05/01/19 05:18:30
誰かマジで助けて。
http://www.math.ucla.edu/~yan/10b.1.05w/projects/project1.html
fileから読み込んで、どこにStorageすればいいんでしょう?
やばい、わかんない。。。
395デフォルトの名無しさん:05/01/19 05:18:51
396のりこさんへ:05/01/19 05:53:33
>>392
>>1 のテンプレをお読み下さい。
397デフォルトの名無しさん:05/01/19 07:34:24
>>352 はい、[II]ね。
#include <stdio.h>
#include <string.h>

int main() {
struct data{
char str[100];
int turn;
};
int i=0,j,k;
char buf[100];
struct data d_array[100],tmp;
while(1) {
scanf("%s", buf);
if(buf[0] == '*') break;
else {strcpy(d_array[i].str, buf);d_array[i].turn = i; i++}
}
printf("Number of Data : %d\n", i);
for(j=0; j<i; j++)
for(k=j+1; k<i; k++)
if(strcmp(d_array[j].str,d_array[k].str) > 0) {
tmp = d_array[j];
d_array[j] = d_array[k];
d_array[k] = tmp;
}
for(j=0; j<i; j++) printf("Data(%d) %s \n",d_array[j].turn+1, d_array[j].str);
return 0;
}
398397:05/01/19 07:38:10
>>352 ごめんなさい、ミスりましたのでもう一度。
#include <stdio.h>
#include <string.h>

int main() {
struct data{
char str[100];
int turn;
};
int i=0,j,k;
char buf[100];
struct data d_array[100],tmp;
while(1) {
scanf("%s", buf);
if(buf[0] == '*') break;
else {strcpy(d_array[i].str, buf);d_array[i].turn = i; i++;}
}
printf("Number of Data : %d\n", i);
for(j=0; j<i; j++)
for(k=j+1; k<i; k++)
if(strcmp(d_array[j].str,d_array[k].str) > 0) {
tmp = d_array[j];
d_array[j] = d_array[k];
d_array[k] = tmp;
}
for(j=0; j<i; j++) printf("Data(%d) %s \n",d_array[j].turn+1, d_array[j].str);
return 0;
}
399372:05/01/19 08:11:26
>>380
ありがとうございました。
400デフォルトの名無しさん:05/01/19 08:30:00
[1] 授業単元:C++
[2] 問題文://
例:価格が$100のセーターが20%割引で売られている。 そのセーターを持っている30%割引のクーポンで更に割引した場合、合計金額は支払はなければならないのか?
User inputは以下のように表示されるようにしなければならない。
Example:

What is the price of the item? 100
What is the first percentage to be taken off? 20
What is the second percentage to be taken off? 30

Using the incorrect strategy, you would pay $50
In reality, the correct price is $56
This results in a difference of $6
上記の様に、二回割引されるようにしなければならず、例の様に20%割引された商品を更に30%割引することに加えて、30%と20%を足してしまい合計50%割引にするようにもしなければなりません。
間違った結果、正しい結果両方が表示される様にしなければならない。
Floatを使うこと。
どんな数値でも計算される様にしなければならない。

C++この学期から始めました。 
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ(バージョン): BCC 5.5.1
 [3.3] 言語:C++
[4] 期限:一月二十一日
401385:05/01/19 08:44:54
>>388の指摘を受けて自分なりに調べてプログラムを組みなおして見たので
間違い、指摘ありましたらよろしくおねがいます。ちなみに実行して見たところ
やっぱり途中で画像が途切れて表示されます

#include <stdio.h>
#include <stdlib.h>
#define YSIZE 480/*画像の大きさ*/
#define XSIZE 640
#define HIGH 255 /*濃度値 255=HIGH=白*/
#define LOW 0 /*濃度値 255=LOW=黒*/

main(){
FILE *fp,*fg; /*入出力ファイル操作用ポインタの宣言*/
unsigned char input[YSIZE][XSIZE]; /*入力2次元配列の型宣言*/
unsigned char out[YSIZE][XSIZE]; /*出力用2次元配列の型宣言*/
char str[1000];
int x,y,th;
int w,h; /* 画像の大きさ */
int d; /* 画像の階調 */

for(y= 0;y < YSIZE;y++){
for(x=0;x<XSIZE;x++) {
input[y][x]=out[y][x]=0; /*配列の初期化*/
}}
402385:05/01/19 08:45:36
fp=fopen("sample.pgm","r"); /*入力ファイルのオープン*/
if(fp==NULL){
printf("open error"); /*ファイルのエラー処理*/
exit(1); }

fscanf(fp,"%s",str); /* マジックナンバーの読込み */
fscanf(fp,"%d %d",&w,&h); /* 画像の大きさの読み込み */
fscanf(fp,"%d",&d); /* 画像の階調の読み込み */

for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++) {
input[y][x]=fgetc(fp); /*配列への画像データの代入*/
} }

fg=fopen("sample2.pgm","w"); /*出力ファイルのオープン*/

fprintf(fg, "P2\n%d% d\n%d",XSIZE , YSIZE, 255);
fwrite(input, sizeof(unsigned char), YSIZE*XSIZE, fg);

for (y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++){
out[y][x]=input[y][x];} }

for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++) {
fputc(out[y][x],fg); /*配列からディスクへの書き込み*/
}}
fclose(fp); /*入力ファイルのクローズ*/
fclose(fg); /*出力ファイルのクローズ*/
}
403デフォルトの名無しさん:05/01/19 08:48:08
A nervous taxpayer was unhappily conversing with the IRS Tax auditor
who had come to review his records.

At one point the auditor exclaimed,
"Mr. Carr, we feel it is a great privilege to be allowed to
live and work in the USA. As a citizen you have an obligation to pay taxes,
and we expect you to eagerly pay them with a smile."

"Thank goodness,"
returned Mr. Carr, with a giant grin on his face,
"I thought you were going to want me to pay with cash."
404デフォルトの名無しさん:05/01/19 08:50:38
>>402
fgetcじゃうまくいかない。
fscanf(fp,"%d" のほうがまだマシだ
405385:05/01/19 09:04:22
fgetcの代わりにfscanf(fp,"%d")を入れたら文字化けた文字が永遠続けて表示
されましたが・・・・・。
fscanfにするのならば
fscanf(fp,"%d",&○) ○の部分は何を入れればよいのでしょう?
406デフォルトの名無しさん:05/01/19 09:09:47
>>405
inputという配列に入れたいのだろう?
407385:05/01/19 09:21:14
input[y][x]にsample.pgmの画像データを入れたいんです。

for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++) {
fscanf(fp,"%d",&input[y][x]); /*配列への画像データの代入*/

こういう事でしょうか?
408デフォルトの名無しさん:05/01/19 09:32:43
>>385
マニュアルすら読めない知恵遅れの方ですか?
409デフォルトの名無しさん:05/01/19 09:33:56
>>407
いつまでの期限の宿題なのだ?
あなたは基礎が全然できていないから、答えのソースを貼っても
意味が無さそうだなあ
入門書からやり直してほしい
410デフォルトの名無しさん:05/01/19 09:40:57
>>409
3日後です。すいません基礎からやり直すので、できれば模範ソース貼ってください
411デフォルトの名無しさん:05/01/19 09:42:45
int main(){
FILE *fp,*fg; /*入出力ファイル操作用ポインタの宣言*/
unsigned char input[YSIZE][XSIZE]; /*入力2次元配列の型宣言*/
unsigned char out[YSIZE][XSIZE]; /*出力用2次元配列の型宣言*/
char str[1000];
int x,y,th;
int w,h; /* 画像の大きさ */
int d; /* 画像の階調 */

for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++){
input[y][x]=out[y][x]=0; /*配列の初期化*/
}}

fp=fopen("sample.pgm","r"); /*入力ファイルのオープン*/
if(fp==NULL){
printf("open error"); /*ファイルのエラー処理*/
exit(1); }
412デフォルトの名無しさん:05/01/19 09:43:19
fscanf(fp,"%s",str); /* マジックナンバーの読込み */
fscanf(fp,"%d %d",&w,&h); /* 画像の大きさの読み込み */
fscanf(fp,"%d",&d); /* 画像の階調の読み込み */

for(y=0;y<h;y++){
for(x=0;x<w;x++) {
fscanf(fp,"%d",&input[y][x]);
} }

fg=fopen("sample2.pgm","w"); /*出力ファイルのオープン*/

fprintf(fg, "P2\n%d% d\n%d\n",XSIZE , YSIZE, 255);

for (y=0;y<h;y++){
for(x=0;x<w;x++){
out[y][x]=input[y][x];} }

for(y=0;y<h;y++){
for(x=0;x<w;x++) {
fprintf(fg," %3d",out[y][x]); /*配列からディスクへの書き込み*/
}fprintf(fg,"\n");}
fclose(fp); /*入力ファイルのクローズ*/
fclose(fg); /*出力ファイルのクローズ*/
return 0;
}
これでも15点くらいだがな。
413デフォルトの名無しさん:05/01/19 09:44:46
>>409
>できれば模範ソース貼ってください
こういう奴はほぼ間違いなくやりなおす気などない
414413:05/01/19 09:45:27
みすった
>>410
415デフォルトの名無しさん:05/01/19 09:52:08
>410
頑張ってね!
416デフォルトの名無しさん:05/01/19 09:52:09
うむ、マジックナンバーがP2ということはテキストファイルだね。
一度ファイルを覗いてご覧>>407
417デフォルトの名無しさん:05/01/19 09:52:58
>>413
できればそうしたいのだがこれからさらに、二値化にするプログラムを作らなきゃ
いけないのですよ。だからどうしても模範ソースを理解しないとダメなんですよ。

>>411
ありがとうございます!!
これで自分のがどこが悪いのか分かりました。感謝します!
418デフォルトの名無しさん:05/01/19 09:54:15
>>412
・pgmフォーマットには(一応)行辺りカラム数制限があるわけだが。
・読み込み完了後、クローズまで引っ張っているのには何か理由があるのかな?
#自称15点ということで、意図的なのだとは思うが。
419デフォルトの名無しさん:05/01/19 09:56:22
>>418
もちろん意図的だ。親心だよ。
420デフォルトの名無しさん:05/01/19 09:56:59
>>417
2値化についての要検索キーワード。
・諧調数
256諧調(最大255)のままでやるのか諧調数制御もするのか。
・閾値
いきなりディザはないだろうから2値化するのに閾値が必要。
421デフォルトの名無しさん:05/01/19 10:01:23
>>420
ありがとうございます。二値化の理論だけはなんとなく分かるのでこんな感じで
プログラム使用かと思ってるんですけどね。

for (y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++){
if(input[y][x]>=ikiti){ /*2値化,閾値以上の濃度値ならば*/
out[y][x]=255;
}
else{
out[y][x]=0;
}
}
}
422デフォルトの名無しさん:05/01/19 10:47:40
>>400

#include <iostream>
#include <cstdlib>
int main(){
float price,first,second,incorrect,correct;
std::cout<<"What is the price of the item? ";
std::cin>>price;

std::cout<<"What is the first percentage to be taken off? ";
std::cin>>first;
std::cout<<"What is the second percentage to be taken off? ";
std::cin>>second;

incorrect=price*(100-(first+second))/100;
correct=price*(100-first)*(100-second)/10000;
std::cout<<"Using the incorrect strategy, you would pay $"<<incorrect<<std::endl;
std::cout<<"In reality, the correct price is $"<<correct<<std::endl;
std::cout<<"This results in a difference of $"<<fabs(incorrect-correct)<<std::endl;
return 0;
}
423デフォルトの名無しさん:05/01/19 10:59:25
>421
頑張って二次配列とファイル入出力を調べてね。
424お願いします:05/01/19 11:02:40
論理式eが与えられた時、eと等価なCNFを求める述語cnf/2を定義せよ。
という問題がわかりません。
誰か教えてくれませんか?
425デフォルトの名無しさん:05/01/19 11:10:32
【質問テンプレ】
[1] 授業単元:暗号化
[2] 問題文(含コード&リンク):

以下のグローバル変数CODEを使って,負でない整数を暗号・復号化する。

/* 0 1 2 3 4 5 6 7 8 9 */
int CODE[] ={0,7,8,9,3,4,5,2,1,6};

負でない整数を暗号にする関数[int encode(int data)],復号する(元に戻す)関数[int decode(int code)]を作りなさい。

[3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ(バージョン): VisualC++ Ver6.0
[3.3] 言語:C
[4] 期限:2005年01月31日まで

よろしくお願いします。
426デフォルトの名無しさん:05/01/19 11:20:12
int encode(int data) {
x ++ ;
}
int decode(int code) {
code -- ;
}
main() {
int i,n = sizeof(CODE)/sizeof(CODE[0]) ;
for(i=0; i<n ;i++) {
CODE[i]=encode(CODE[i]) ;
}
for(i=0; i<n ;i++) {
CODE[i]=decode(CODE[i]) ;
} } // ・・・・・・・
427デフォルトの名無しさん:05/01/19 11:21:56
>425
十進表示の各桁をCODE[]で撹拌しろ。nを10で割った余りはn%10
428デフォルトの名無しさん:05/01/19 11:23:22
>426
全くダメ。使えない
429デフォルトの名無しさん:05/01/19 11:24:36
撹拌の意味を述べよ
430デフォルトの名無しさん:05/01/19 11:29:23
>429
かき混ぜるの意
431デフォルトの名無しさん:05/01/19 11:38:35
[1] 授業単元: 科学計算演習
[2] 問題文(含コード&リンク): 化学反応のサンプリング(反応量の平均と分散を求める)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ(バージョン): GCC
 [3.3] 言語:C言語
[4] 期限:2005年1月20日

A+B=Cとなるような化学反応式があり、Aを可変、Bを一定の時の計算をする
int i,j,k;
nstep=30;
loop=20;

for(0<j<loop){
 A=(100/j);
 B=100;
 for(0<i<nstep){
  A=(100/j)*drand48();
  B=100*drand48();
  func(x, y, z)// 結果を返す関数
result_A;
  result_B;
 }
 ave_A = result_A / nsteps; // result_Aの平均値を求める
 ave_B = result_B / nsteps; // result_Bの平均値を求める
 printf("%f, %f\n", ave_A, ave_B);
}

2重ループの外にfor文を加えて3重ループ(for(0<k<20))にし、
平均値(ave_A、ave_B)の平均値を求めるにはどうすればいいのですか?
お願いします。
432デフォルトの名無しさん:05/01/19 11:50:20
>431
平均値=合計値÷個数
433デフォルトの名無しさん:05/01/19 11:51:01
ローパスフィルターの書き方、もしくはそれが載っているホームページを教えてください。
434デフォルトの名無しさん:05/01/19 11:58:55
>>432
ソースお願いします
435デフォルトの名無しさん:05/01/19 12:01:59
>434
もーれつに頑張って合計しろ
436デフォルトの名無しさん:05/01/19 12:22:28
>>427==>>432
言うだけでなにも出来ない人
437デフォルトの名無しさん:05/01/19 12:26:46
事故解決しました。有難う。
438デフォルトの名無しさん:05/01/19 12:27:54
>>436
俺はなんでもできるぜ!!!
439デフォルトの名無しさん:05/01/19 12:31:15
>438
>431を解決してください。
440デフォルトの名無しさん:05/01/19 12:42:12
「データ入力及びデータの表示を行なうプログラムを作りなさい。一件分の入力処理は
input_data()で、表示はdisplay_data()と処理を関数で分けて行ないなさい」
という問題があるのですが、「一件分の入力処理はinput_data()で、表示はすべてdisplay_data()で
処理しなさい」ということですか??
441400:05/01/19 12:43:00
>>422
どうもありがとうございます!!わかりやすくて参考になりました。
C++面白いので取ってよかったなと思います。
442デフォルトの名無しさん:05/01/19 12:46:43
>>431
前スレで俺答えた気がする
443デフォルトの名無しさん:05/01/19 12:50:33
>>440
それは先生に聞きなさい
444デフォルトの名無しさん:05/01/19 12:52:06
シェルソートって何?
445デフォルトの名無しさん:05/01/19 12:55:42
>>425
#define decode(a,n) encode(a,n)
void encode(unsigned int a,int n)
{
int i;
unsigned int c,d;
for(i=0;i<n;i++){
c=a[i];
d=0;
while(c){
d*=10;
d+=CODE[i%10]c%10;
c/=10;
}
}
}
446デフォルトの名無しさん:05/01/19 12:56:38
訂正
d+=CODE[i%10]^(c%10);
447デフォルトの名無しさん:05/01/19 13:04:07
さっすが!
448352:05/01/19 13:27:26
>>363さん
なぜかコンパイルしても動きません。
エラーはないのですがプログラムが実行出来ませんと出ます。
よろしくお願いします。
449352:05/01/19 13:30:35
というか、
error C2065: 'INT_MAX' : 定義されていない識別子です。
と出てビルドできません。
何か読み込む特殊なライブラリとかあるんでしょうか?
450デフォルトの名無しさん:05/01/19 13:45:47
とりあえず
stdio.h
stdlib.h
をインクルードしてみ
それでもINT_MAXが未解決なら
#define INT_MAX (0x7FFFFFFF)
451デフォルトの名無しさん:05/01/19 13:47:03
<limits.h>
452デフォルトの名無しさん:05/01/19 13:49:27
stddef.hかとおもてた
そだねlimits.hだね
453352:05/01/19 13:54:22
ありがとうございました。
stdio.h
stdlib.h
この二つは入れてたんですが、<limits.h> でいけました。
454352:05/01/19 14:05:03
>>355さん
IIIの(3)、(4)ともに動作しませんでした。
3の方はビルドできるが実行するとエラー落ち
4のほうはビルドも出来ません。
455デフォルトの名無しさん:05/01/19 19:06:05
>>454=352
俺は355じゃないが、ともにビルドできて、動作もするぞ。
動作は、
./hoge.exe 101.01
と引数を与えなければ駄目だ。
標準入力からやりたい場合は、mainのd =の行を以下の3行に書き換え。
char temp[256];
fgets(temp,256,stdin);
d = convSei( strtok( temp , "." ) ) ;
(4)の方も同様に ./hoge 205.25 などの引数が必要。
これもsscanfの行をscanf("%lf",&d);に書き換え。

コンパイルが通らないなら、エラーメッセージくらいは書いてくれ。
456デフォルトの名無しさん:05/01/19 19:21:28
環境 
OS: WindowsXP 
言語:C 

問題文

問1
かけ算の九九の表には、全部で81種類のかけ算(1x1から9x9まで)が出てくる。
これらの積の総和を求めたい。
(1)関数を用いないで積の総和を求める。
(2)各段の積の総和は関数danで求め、それらの総和はmain関数で求める。
(3)個々の掛け算の積は関数sekiで求め、それらの総和はmain関数で求める。

問2
異なるn個のものからr個とって1列に並べる順列の数(nPr)と異なるn個のものか
らr個とる組み合わせの数(nCr)を求める。n!は関数factorialで求める。

どなたかよろしくお願いします。問2が全くわかりません・・・
457デフォルトの名無しさん:05/01/19 19:38:07
>>456 問2 あんまり大きい数を入れるとintがあふれるよ。

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

int factorial(int a){
if(a==0)return 1;
else return a*(factorial(a-1));
}

int permutation(int n,int r){
return factorial(n)/factorial(n-r);
}

int combination(int n,int r){
return factorial(n)/factorial(n-r)/factorial(r);
}

int main(){
printf("5P3=%d\n",permutation(5,3));
printf("5C3=%d\n",combination(5,3));
return 0;
}
458デフォルトの名無しさん:05/01/19 19:38:27
>>456
問2
factorialを作ってそれを使うならば、二項係数の関数c_factorialは次の通り。
int factorial(int n){return n == 1 ? 1 : n * factorial(n - 1);}
int c_factorial(int n, int r){return factorial(n) / factorial(n - r) / factorial(r);}
factorialを使わなくてもよいならば、パスカルの三角形の公式から
int c_pascal(int n, int r){return n == r || r == 0 ? 1 : c_pascal(n - 1, r - 1) + c_pascal(n - 1, r);}
と書くこともできる。

追加点(゚д゚)ウマー
459デフォルトの名無しさん:05/01/19 19:46:36
>>456 問1
#include <stdio.h>
#include <string.h>

int dan(int a){
int i,sum=0;
for(i=1;i<=9;i++){sum+=i*a;/*sum=sum+i*/}
return sum;
}

int seki(int a,int b){return a*b;}

int main(){
int i,j,sum;
sum=0;/*(1)*/
for(i=1;i<=9;i++){for(j=1;j<=9;j++){sum+=i*j;}}
printf("(1)=%d\n",sum);
sum=0;/*(2)*/
for(i=1;i<=9;i++){sum+=dan(i);}
printf("(2)=%d\n",sum);
sum=0;/*(3)*/
for(i=1;i<=9;i++){for(j=1;j<=9;j++){sum+=seki(i,j);}}
printf("(3)=%d\n",sum);
return 0;
}
460デフォルトの名無しさん:05/01/19 19:52:53
>>456
たくさんレスつくなんてモテモテだな!
461デフォルトの名無しさん:05/01/19 19:54:09
>>457
>>458
>>459
ありがとうございます!助かりました!
これからやってみます。
462デフォルトの名無しさん:05/01/19 20:00:10
>>460
問題が簡単だと厨でも解けるからな。
463デフォルトの名無しさん:05/01/19 20:02:44
わざわざ再帰使ってるし解いてるのは厨房だろうな
464デフォルトの名無しさん:05/01/19 20:11:27
環境
OS: WindowsXP
言語:C++
長い文字列と短い文字列(単語みたいなもの)を入力して
長い文字列の中に短い文字列がいくつ入ってるか数を出力するプログラムはどうすればいいですか?
465デフォルトの名無しさん:05/01/19 20:50:26
>>464
AAAAAA のなかに AA はいくつ入ってると考えるの?

466デフォルトの名無しさん:05/01/19 21:55:07
>>465
そうです〜長い英文の中にappleという文字列はいくつ入ってるかとかです
検索エンジンとかに使われてるやつらしいんですが
467デフォルトの名無しさん:05/01/19 21:57:41
>>465
5個だと簡単だね。
468デフォルトの名無しさん:05/01/19 21:57:43
>>465が言ってるのは
AA AA AAと数えて3個なのか、重なり許して5個と数えるのかってことさね。
469デフォルトの名無しさん:05/01/19 21:58:36
1個という数えかたもあるね。
470デフォルトの名無しさん:05/01/19 22:12:37
[1] 授業単元: 情報処理
 [3.1] OS: windows
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C言語
[4] 期限:明日の昼までです
問題文(含コード&リンク):
課題1
main関数のみで5人の学生の偏差値を求めるプログラムを作れ。
(関数goukei,goukei2を使うこと。)
公式
 分散(D)=二乗和の平均 − 平均の二乗
標準偏差=√D ,プログラムではsqrt(D)
偏差値=50.0+10.0*(点数−平均)/ 標準偏差

課題2
課題1の偏差値の求め方を関数 hensatiを使って人数分の偏差値を求めよ。
注意 最初にプロトタイプ型で関数を3つ宣言する。

すいません、お願いします
471デフォルトの名無しさん:05/01/19 22:21:25
>>470
点数の入力はどーすんねん
472デフォルトの名無しさん:05/01/19 22:30:23
>>471
何も書いてないので恐らくscanfでキー入力かと思います
473デフォルトの名無しさん:05/01/19 23:01:30
>>464
>>468と、大文字小文字とかは区別するのかくらい書いとけ
474デフォルトの名無しさん:05/01/19 23:14:46
age
475デフォルトの名無しさん:05/01/19 23:15:48
>>470
> main関数のみで5人の学生の偏差値を求めるプログラムを作れ。
> (関数goukei,goukei2を使うこと。)

は?
476デフォルトの名無しさん:05/01/19 23:21:14
#include <stdio.h>
int kaijo(int a)
{
int b,c;
c=1;
for(b=1;b<a+1;b++)
{
c=c*b;
}
return c;
}
main()
{
int x,y,z,nPr,nCr,n,r;
scanf("%d %d",&n,&r);
x=kaijo(n);
y=kaijo(n-r);
z=kaijo(r);
nPr=x/y;
nCr=x/(y*z);
printf("nPr=%d nCr=%d",nPr,nCr);
return 0;
}

nとrを入力してnPrとnCrを求めるプログラムを考えたのですが
あってますでしょうか?ちなみにscanfのところ2ついっぺんにしたんですが、
こんな書式あるんですか?
477デフォルトの名無しさん:05/01/19 23:23:06
>>470
「windows」って問題に書いてあるのか? 「windows」なら分かるがw
「main関数のみ」なのに「関数goukei,goukei2を使う」って矛盾してるだろ(藁
478デフォルトの名無しさん:05/01/19 23:45:31
[1] 授業単元:プログラム1
[2] 問題文:配列の問題(Nを使う)で、素数の表を作ります。その際、エラトステネスのふるい
(まず2の倍数を消して、次に3の倍数、4,5、・・の倍数を消していく)という方法を使う。
nの値は2以上100000以下とする。それ以外の値が入力されたら、「不適切です!」と表示させる。
実行結果は
2 3 5 7 11 ・・・・・
・・・・・・・・・・  
nまでの個数は〜個です。   と表示させ、かつ、10個で改行する。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):確かVisual Basicだったかと・・
 [3.3] 言語:C++
[4] 期限:2005年1月18日まで
[5] その他の制限:この授業では return を使わないので、それでお願いします。
479デフォルトの名無しさん:05/01/19 23:46:52
間違えました。1月25日までです・・
480デフォルトの名無しさん:05/01/19 23:51:15
書き込むスレもお間違えですよ。
481デフォルトの名無しさん:05/01/19 23:54:04
>>478
効率悪くて良かったら5行ぐらいで作れるよ。
482デフォルトの名無しさん:05/01/19 23:54:47
>>478
> [3.2] コンパイラ(バージョン):確かVisual Basicだったかと・・
違う。VisualC++だ。
483デフォルトの名無しさん:05/01/19 23:58:32
コンパイラすら分からん香具師はマジで氏ね
で、VBなの?C++なの?
484478:05/01/19 23:59:10
本当に申し訳ありませんが5行は短すぎです!「苦労して作りました。」感を見せないと・・
そうです。VisualC++でした。わがまま申し訳ないです
485デフォルトの名無しさん:05/01/20 00:04:45
>>478
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
int main()
{
int N;
cin >> N;
if (N < 2 || 100000 < N) { cerr << "不適切です!" << endl; exit(1); }

vector<bool> prime;
prime.resize(N + 1, true);

for (int i = 2; i <= N; i++) { if (prime[i]) { for (int j = 2; i * j <= N; j++) { prime[i * j] = false; } } }
int count = 0;
for (int i = 2; i <= N; i++) {
if (prime[i]) {
cout << i;
if (++count % 10 == 0) { cout << endl; }
else { cout << " "; }
}
}
if (count % 10 != 0) { cout << endl; }
cout << N << "までの個数は" << count << "個です。" << endl;

exit(0);
}
486デフォルトの名無しさん:05/01/20 00:06:52
何この糞プログラム
487デフォルトの名無しさん:05/01/20 00:10:33
>>484
金払え
488478:05/01/20 00:14:08
prime って何すか?vector とかも・・
printf とか scanf とかは使わないんですか?
489デフォルトの名無しさん:05/01/20 00:17:53
>>488
お前、自分で書いたろう。
>[3.3] 言語:C++
文句言うな。
490デフォルトの名無しさん:05/01/20 00:21:16
こいつは言語の区別すらつかないのか?
終わってるな
491デフォルトの名無しさん:05/01/20 00:29:17
>>488
「すみません、C++ではなくて、C言語でお願いします」って言え。
492478:05/01/20 00:31:38
すみません、C++ではなくて、C言語でお願いします・・
いや、本当に今謝ろうかずっと迷ってたとこです・・m( )m
ごめんなさい!
493デフォルトの名無しさん:05/01/20 00:32:02
>>488
えと、あの、ごめんなさいー!

printfもscanfもC++でも使えるんですよー^^
でもでも、それってレガシーでしょう?
494デフォルトの名無しさん:05/01/20 00:32:49
[1] 授業単元:組み合わせ論
[2] 問題文(含コード&リンク):
与えられたグラフGに対しKruskalの算法をもちい最小木を求めるプログラムを作りなさい(言語は何でもよい)。
[3] 環境
 [3.1] OS: ?
 [3.2] コンパイラ(バージョン):?
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:2005年1月31日17:00まで
[5] その他の制限:
条件1・採用した辺からできる部分グラフの連結成分を保持するデータ構造において、
linkを行う際にunion by rank だけ取り入れたものとunion by rank と path compression を
併用したものの両方を作成。
条件2・四則演算、比較、代入の総数を計測し、最小木とともにその総数を出力すること

また、Gの入力は以下の形式で記述されたテキストファイルによるものとする
Gの頂点数Gの辺数
Gの各辺に対する以下のようなリスト
端点 端点 辺の重み

たとえば、次の頂点数が5、辺数が7のグラフの例である
5 7
1 2 3
1 3 5
1 5 20
2 4 10
2 5 7
3 4 19
4 5 5
495デフォルトの名無しさん:05/01/20 00:51:37
>>491
ワロタ
496ぷ ◆wbKIYOMIZU :05/01/20 00:51:37
コンパイル通してないけどどっか間違ってるとこある?VBなのにC++ってのが間違いだと思うけど。
#include <iostream>
#include <vector>
void main(void) {
int sievesize;
do {
std::cout << "素数を求める範囲(2-100000) > " ;
std::cin >> sievesize;
}while( (sievesize < 2 || sievesize > 100000)
&& (std::cout << "不適切です!" << std::endl, true));
std::vector<bool> sieve(sievesize, true);
for (size_type i = 2; i * i < sievesize; i++) {
if (sieve[i] == true) {
for (size_type j = i * 2; j < sievesize; j += i) {
sieve[j] = false;
}
}
}
int numOfPrime = 0, row = 0;
for (size_type j = 2; j < sievesize; j++) {
if (sieve[j] == true) {
std::cout << j << " ";
numOfPrime++, row++;
if (row > 9) {
std::cout << std::endl;
row = 0;
}
}
}
std::cout << std::endl;
std::cout << sievesize << "までの個数は" << numOfPrime << "個です。\n" ;
}
497デフォルトの名無しさん:05/01/20 00:53:55
>>496
間違いあるよ!
>>492を読んだらわかるよ!
498ぷ ◆wbKIYOMIZU :05/01/20 00:54:25
リロードせずに投稿してしまったorz
499デフォルトの名無しさん:05/01/20 00:55:16
>>498
ドンマイ
500デフォルトの名無しさん:05/01/20 00:58:49
>>496
> if (sieve[i] == true) {
なんで (sieve[i] == true) が true であることを
if ((sieve[i] == true) == true) って調べないの?
501ぷ ◆wbKIYOMIZU :05/01/20 01:07:32
>>500
じゃあ
if ((sieve[i] == true) == true) がtrueであることを
if (((sieve[i] == true) == true) == true) って調べて下さい。
502デフォルトの名無しさん:05/01/20 01:08:45
>>494
union by rank と pass compression について手持ちの資料になんかあるなら追記してくれ。
英語サイトで解説してるのみつけたが、いまいちわからん。
503494:05/01/20 01:34:14
>>502
英語サイトまで読んでくれるなんて;;

> union by rank と pass compression について
手持ちのプリント2枚分あるんですが、プリンターで取り込んだんですが、
どうやったらアップできるのか…_| ̄|○
504デフォルトの名無しさん:05/01/20 01:58:13
>>503
スキャナとかで画像ファイルつくって
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
でUPすりゃいい
505デフォルトの名無しさん:05/01/20 02:04:21
> union by rank と pass compression について
アルゴリズムイントロダクション第2巻にのってるよ
506デフォルトの名無しさん:05/01/20 02:11:58
>>505
そんな情報じゃ、その本を持ってる人しかわからんじゃん。独りよがりな書き込みスンナ。
507デフォルトの名無しさん:05/01/20 02:15:05
本買えよ。金出して。
508デフォルトの名無しさん:05/01/20 02:16:47
>>507
ここは宿題スレだぞ。ブルジョアな書き込みスンナ。
509デフォルトの名無しさん:05/01/20 02:22:58
>>507
うっせハゲ。宿題に答える気がないなら失せろ。
510デフォルトの名無しさん:05/01/20 02:23:11
(・∀・)ニヤニヤ
511デフォルトの名無しさん:05/01/20 02:24:58
>>501
if ((sieve[i] == true) == true) がtrueであることをしらべられるんですか?
512デフォルトの名無しさん:05/01/20 02:26:02
この殺伐とした空気が大好き^^
投下された問題を先に解くか解かれるかたまんないね
513デフォルトの名無しさん:05/01/20 02:28:26
>>511
文は値をもたない。君の言明は意味がない。
514デフォルトの名無しさん:05/01/20 02:38:27
void main()void
515デフォルトの名無しさん:05/01/20 02:38:36
>>470 1な。
#include <stdio.h>
#include <math.h>
int main() {
int i, score[5];
double heikin, bunsan,sum=0.0,hyohen,hensati[5];
printf("成績を入力してください\n"); for(i=0; i<5; i++) scanf("%d", &score[i]);
heikin = ((double)score[0]+(double)score[1]+(double)score[2]+(double)score[3]+(double)score[4])/5.0;
for(i=0; i<5; i++) sum = sum + (double)score[i]*(double)score[i];
bunsan = sum/5.0 - heikin*heikin; hyohen = sqrt(bunsan);
for(i=0; i<5; i++) hensati[i] = 50.0+10.0*((double)score[i]-heikin)/hyohen;
printf("偏差値は、%lf %lf %lf %lf %lf\n",hensati[0],hensati[1],hensati[2],hensati[3],hensati[4]);
return 0;
}
516515:05/01/20 02:39:49
>>470 2な。
#include <stdio.h>
#include <math.h>
double hensati(double hyohen, int tensu, double heikin);
int goukei(int score[], int j);
int goukei2(int score[], int j);
int main() {
int i, score[5];
double heikin,bunsan,hyohen;
printf("成績を入力してください\n"); for(i=0; i<5; i++) scanf("%d", &score[i]);
heikin = (double)goukei(score, 5)/5.0;
printf("%lf", heikin);
bunsan = (double)goukei2(score, 5)/5.0 - heikin*heikin;
hyohen = sqrt(bunsan);
for(i=0; i<5; i++) printf("%lf \n", hensati(hyohen, score[i], heikin));
return 0;
}

int goukei(int score[], int j) {
int i,sum=0;
for(i=0; i<j; i++) sum = sum + score[i];
return sum;
}
int goukei2(int score[], int j) {
int i, sum=0;
for(i=0; i<j; i++) sum = sum + score[i]*score[i];
return sum;
}
double hensati(double hyohen, int tensu, double heikin){
return 50.0+10.0*((double)tensu-heikin)/hyohen;
}
517デフォルトの名無しさん:05/01/20 02:49:47
>>478
はい、C言語で。
#include <stdio.h>

int main(void) {
    int i, j, n, sieve[100001], notprime;
    scanf("%d", &n);
    if (n < 2 || 100000 < n)
        printf("不適切です!");
    else {
        for (i = 2; i <= n; i++) sieve[i] = 1;
        sieve[0] = sieve[1] = 0;
        for (i = 2; i <= n / 2; i++) {
            notprime = i;
            while ((notprime += i) <= n) sieve[notprime] = 0;
        }
        for (i = 2, j = 0; i <= n; i++) {
            if (sieve[i]) {
                printf("%d ", i);
                if (++j % 10 == 0) printf("\n");
            }
        }
    }
}
518494:05/01/20 03:02:07
>>502
>>503
ここにアップ出来てるのかどうか…
ttp://up.isp.2ch.net/upload/c=01owarai/index.cgi

ちなみにタイトルは「union by rank と pass compression 」
519デフォルトの名無しさん:05/01/20 03:11:22
/*>>366 もう(みてない || 自己解決)したかもしれないけど…。ちなみにVC++でしか試してない。*/
#include <stdio.h>
#define MAX 1000
int main(){
char strBuf[MAX];
int i, length, c;
do{
i = 0;
while(((c = getchar()) != '\n')){
if(i < MAX-1){
strBuf[i++] = c;
}
}
strBuf[i] = '\0';
length = 0; i= 0;
while( strBuf[i] != '\0' ){
if( strBuf[i] == '.' ){
length = ++i;
while( strBuf[i] == ' ' )++i;
}else{
length = ++i;
}
}
strBuf[length] = '\0';
/*わかりやすいようにスラッシュを入れた*/
printf( "%s/\n", strBuf );
}while(strBuf[0] != '\0');
}/*何も入力せずにエンターで終了*/
520デフォルトの名無しさん:05/01/20 04:32:39
C言語で線形リストのクイックソートはどうやればいいでしょうか?
521デフォルトの名無しさん:05/01/20 04:40:13
各リスト要素のポインタを配列に入れて
配列のクイックソートをするだけでいいじゃん
522デフォルトの名無しさん:05/01/20 09:04:30
[2] 二分法、ニュートン法、割線法を実行するプログラムをつくり、それを利用して以下の式の、0から10の間にあるルートを求めよ。
f(x)=cos(x-1)+log(x/4 +1)-1;
f(x)=ln(x)-(1.5)^x/4; <--1.5のx/4乗
f(x)=tan(4+x/2)+3;

[3] OS: Unix Solaris
C++
[5] 倍精度計算、10の-12乗以下の絶対誤差、最高100回までの反復を用いる事。

正直、全然分からないまま 数日が過ぎてしまいました・・・
よろしく御願いします。
523522:05/01/20 09:16:43
追加です、すいません。

[5] ・二分法には、0 <= i <= 9 の [i, i+1] 間隔 (f(i)と、f(i+1)の+、−サインは一致する事はない)を利用する事。

・ニュートン法の、反復開始地点は 0から10の間である。
・割線法は、 (i, i+1)で開始する。 (0 <= i <= 9)
・xが 求めたルートの10の-12乗内であるか確認し、もし違えば その開始条件ではルートを
見つける事は無理だということをPrintする。
・ニュートン法と割線法の場合、Convergeしない場合があることに注意。もし、Xiが [-10の5乗, +10の5乗]の範囲を超えたら、プログラムは停止する。
・gethrtime()を使って、式の時間を計る事。

以上が、書き忘れていた条件です。
524デフォルトの名無しさん:05/01/20 09:41:19
>>520
1.リストの先頭の要素をとりだす。
2.ふたつの線形リストL,Rを用意して、1.でとりだした要素より小さい要素は
Lに、それ以外はRにつなぐ。
3.LとRをそれぞれソートしてから連結する。

じつは配列でやるより簡単。

525464:05/01/20 12:48:14
>>465 468
返事おくれてすいません
AAAAAAの中にAAは3個と考えるほうです
526352:05/01/20 13:19:47
>>455さん
すみません。
とりあえず3-4のエラーメッセージなんですが、
error C2143: 構文エラー : ';' が 'type' の前に必要です。
と出ます。
527デフォルトの名無しさん:05/01/20 13:25:16
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1024
int main()
{
char l[MAX_LEN],s[MAX_LEN];
char* p=l;
int i;
int n=0;
printf("対象文字列>");scanf("%256s",l);
printf("検索文字列>");scanf("%256s",s);
while(p){
p=strstr(p,s);
n++;
}
printf("%d個\n",n-1);
return 0;
}
528デフォルトの名無しさん:05/01/20 13:31:08
あ、間違えた
sの長さ足してない
俺落ちるから誰かフォローよろしく
529デフォルトの名無しさん:05/01/20 13:48:13
[1] 授業単元:棒グラフの作成
[2] 問題
(1)標準入力からデータを読み込んで,棒グラフを標準出力に書くプログラムを作りなさい。
(2)以下のようにスケールを入れなさい。データが40を超えたら,表示しないようにしなさい。グラフのどこかにデータの数値を表示しなさい。

+----+----1----+----2----+----3----+----4
23 |***********************
45 |***************************************+

[3] 環境
[3.1] OS:Windows2000
[3.2] コンパイラ(バージョン): VisualC++ Ver6.0
[3.3] 言語:c
[4] 期限:2005年1月21日まで

(1)は例題を見ながらやってみたんですがうまくいきません。修正するところがあったら教えてください。
よろしくお願いします。
530529:05/01/20 13:50:42
#include <stdio.h>
#include <stdlib.h>
#define LMT 512
int read2iary(int data[], int num);
int draw_bar(int d);
main()
{
int i, data[LMT], num;
num = read2iary(data, LMT);
for (i = 0; i < num; i++)
{
draw_bar(data[i]);
}
}
int read2iary(int data[], int max)
{
int i, d;
for(i=0; i<max; i++)
{
printf("[%d]> ", i);
scanf("%d", &d);
if(d < 0)
return(i);
data[i]=d;
}
return(i);
}
531529:05/01/20 13:51:23
int draw_bar(int d)
{
int i;
for(i=0; i<d; i++)
{
printf("*");
}
printf("\n");
return(i);
}
532デフォルトの名無しさん:05/01/20 13:51:38
printf("%s","棒グラフ");
533デフォルトの名無しさん:05/01/20 14:24:45
「ファイルの書き出し」の部分を再起呼び出しで取り出したいのですが、どうしたらいいんでしょうか?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main( int argc, char *argv[] ){
FILE *fp_r,*fp_w;
int iBox,iStr,x;
char cFileName_r[1024],cFileName_w[1024],cNum[10][4];
memset(cFileName_r, 0x00, sizeof(cFileName_r));
memset(cFileName_w, 0x00, sizeof(cFileName_w));
memset(cNum, 0x00, sizeof(cNum));
if ( argc == 1 ) {
printf("ファイルを指定してください。\n");
return;}
strcpy(cFileName_r, argv[1]);
if ( (fp_r = fopen(cFileName_r, "r")) == NULL ){
printf("ファイル[%s]がオープンできません。\n", cFileName_r);
exit(0);}
534デフォルトの名無しさん:05/01/20 14:25:35
つづきです
while ( fgets(cNum[0], sizeof(cNum[0]), fp_r) != NULL ) {
for( x = 1; x < 9; x++ ){
for( iBox = 0; iBox < 8; iBox++ ){
iStr=strcmp(cNum[iBox], cNum[iBox+1]);
if( iStr > 0 ){
strcpy(cNum[9], cNum[iBox]);
strcpy(cNum[iBox], cNum[iBox+1]);
strcpy(cNum[iBox+1], cNum[9]);}
}
}
}
printf("ファイル名を記入してください。(文字の最後に.txtを記入要)\n");
scanf("%s",cFileName_w);
printf("ファイルを書き換えます\n");
if ( (fp_w = fopen(cFileName_w, "w") ) ==NULL ){
printf("ファイル[%s]がオープンできません。\n", cFileName_w);
exit(0);}
for(iBox = 0; iBox < 9 ; iBox++){
fprintf(fp_w, "%s", cNum[iBox]);
fprintf(stdout, "%s", cNum[iBox]);}
printf("[%s]を並べ替えたものを", cFileName_r );
printf("[%s]に書込みしました。", cFileName_w );
memset(cFileName_r, 0x00, sizeof(cFileName_r));
memset(cFileName_w, 0x00, sizeof(cFileName_w));
memset(cNum, 0x00, sizeof(cNum));
fclose(fp_r);
fclose(fp_w);
}
535デフォルトの名無しさん:05/01/20 14:29:04
>>527-528( ゚Д゚)ノフォラァヨ!! ---===≡≡≡ω シュッ!
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1024
int main()
{

char l[MAX_LEN],s[MAX_LEN];
char* p;
int n;
do{
n=0;p=l;
printf("対象文字列>");scanf("%256s",l);
printf("検索文字列>");scanf("%256s",s);
while(p=strstr(p,s)){
p+=strlen(s);
n++;
}
printf("%d個\n",n);

}while(strcmp(l,"nullpo"));
return 0;
}
536デフォルトの名無しさん:05/01/20 14:36:22
>>529
#include <stdio.h>
void put_line(unsigned n)
{
unsigned i;
if (n > 40) n = 40;
for (i = 0; i < n; ++i) {
putchar('*');
}
putchar('\n');
}
int main(void)
{
unsigned n, data[256], i;
for (n = 0; n < 256 && scanf("%d", &data[n]) == 1; ++n)
;
puts(" +----+----1----+----2----+----3----+----4");
for (i = 0; i < n; ++i) {
printf("%3u|", data[i]);
put_line(data[i]);
}
return 0;
}
537デフォルトの名無しさん:05/01/20 15:10:06
>>529
どこもおかしくないみたいだよ。タダ単にLMTがでかすぎるだけってオチじゃない?
ちゃんとグラフ出力されたよ。
538デフォルトの名無しさん:05/01/20 15:25:29
>>529あ、ごめん、マイナス値で入力終了なのね
とにかくどこもおかしくないよ。
539デフォルトの名無しさん:05/01/20 19:14:21
問題1:スタック push.popを関数で記述せよ (overflow,underflowを入れる)
問題2待ち行列 関数in.outを記述せよ
OS:WindowsXP
言語:C++
期限21日の昼12時まで
お願いします
540デフォルトの名無しさん:05/01/20 19:46:55
const size_t STACK_MAX=10;
typedef int STACK_T;
void push(STACK_T* p,size_t n,STACK_T i){if(n<STACK_MAX-2)p[n++]=i;
else puts("overflow");}
541デフォルトの名無しさん:05/01/20 19:49:23
STACK_T pop(STACK_T* p,size_t n){if(n>0)return p[--n];
puts("underflow");return 0;}
542デフォルトの名無しさん:05/01/20 19:59:38
>540-541
size_t nはsize_t&nの間違い
543デフォルトの名無しさん:05/01/20 20:15:36
点1:p1(x1,y1)が与えられた時
式1:y=4/3*x
式2:y=-4/3*x
に挟まれた上下左右領域のどこに含まれるかをC(C++)言語で示せ
これを教えてください。
544543:05/01/20 20:16:51
訂正:点1がどこに含まれるか
545デフォルトの名無しさん:05/01/20 20:19:51
>543-544
x,y座標それぞれの場合を検証して、場合分けの木を書けばよかろう
546デフォルトの名無しさん:05/01/20 20:43:11
http://www.ehime-u.ac.jp/ICPC/problems/domestic/d2004/C.jp/C.html
だれかこのプログラムをCに直してくれませんか?問題は↑
#include <iostream>
using namespace std;
int solve(int p, int q, int a, int n, int d, int cp, int cq){
int cnt = 0;
for (int x = d; cq * x <= a; ++x) {
int cp2 = cp * x + cq;
int cq2 = cq * x;
// p/q == cp2/cq2 <=> p * cq2 == q * cp2
if (p * cq2 == q * cp2) { ++cnt; }
if (n > 1) {
cnt += solve(p, q, a, n - 1, x, cp2, cq2);
}
}
return cnt;
}
int main(void){
int p, q, a, n;
while (cin >> p >> q >> a >> n, (p || q || a || n)) {
cout << solve(p, q, a, n, 1, 0, 1) << endl;
}
}
547355:05/01/20 20:51:56
>>526
エラーメッセージはすべて書きましょう。
特に行数は大切です。
また、切り貼りで行数がずれてしまうこともあるので、
該当行も示しましょう。

ちなみにgccでコンパイルしたからVCじゃむりかもな

>>455
あんがと
548デフォルトの名無しさん:05/01/20 20:52:41
>546
cin>>はscanfに、cout<<はprintfに、endlは\nに相当する。地道に置き換えればいい。
whileの中の,の後の式は、いずれかが0かどうかを調べている。
なお、一般に直前に関数名のない式(a,b)はa,bの順に評価されbの値を返す。
549デフォルトの名無しさん:05/01/20 21:02:06
>>546
1.#include <iostream>を#include <stdio.h>にする。
2using namespace std;を削除する。
3.while (cin >> p >> q >> a >> n, (p || q || a || n)) {を
 while( ( scanf("%d %d %d %d", &p, &q, &a, &n ) == 4 ) &&
( p || q || a || n ) ){
にする。
4.cout << solve(p, q, a, n, 1, 0, 1) << endl;を
printf( "%d\n", solve( p,q,a,n,1,0,1) );
にする。
5.ファイルの拡張子をcにする。
6.コンパイラの意見に従って、変数宣言を関数の先頭に持っていく
7.一切試してないのでうまくいかなくても漏れを恨まない
550546:05/01/20 21:04:40
>>548
どうもありがとうございます…といいたいところですが
まだプログラミング初心者なので意味がよく分かりません(´・ω・`)
ソース載せてくれると嬉しいな
551デフォルトの名無しさん:05/01/20 21:09:00
>>550
やめてしまえ
552550:05/01/20 21:10:47
がんばってみよう…
553デフォルトの名無しさん:05/01/20 21:22:41
>>543ほい。
#include <stdio.h>

int main() {
double x,y;
printf("x座標を入力\n"); scanf("%f", &x);
printf("y座標を入力\n"); scanf("%f", &y);
if(y>4/3*x && y>-4/3*x) printf("上\n");
if(y<4/3*x && y>-4/3*x) printf("右\n");
if(y<4/3*x && y<-4/3*x) printf("下\n");
if(y>4/3*x && y<-4/3*x) printf("左\n");
if(y==4/3*x || y==-4/3*x) printf("線上\n");
return 0;
}
/*余談 問題にy=3/4xとか書いてあるもんだから掛け算記号の「*」の存在忘れて
デバッグに相当悩んだっす*/
554543:05/01/20 22:15:00
>>553
有難うございましたっ!
555デフォルトの名無しさん:05/01/20 23:13:36
>>553
double → float にするか
%f → %lf にしないと正常に値が入らないと思われ
556デフォルトの名無しさん:05/01/20 23:56:52
>>555
そのへんよく分からないんだけど正確にはどうなってるの
教えてエロイ人
557デフォルトの名無しさん:05/01/20 23:59:25
printf -> float, double ともに %f
scanf -> float は %f, double は %lf
558デフォルトの名無しさん:05/01/21 00:56:41
過去にあったな、%f %lfとprintf, scanfの対照表。
559デフォルトの名無しさん:05/01/21 01:03:27
文字列の中にkanbunという文字があったらkobunに直すプログラムが解けません・・・
すみませんが、お願いします。

#include<stdio.h>
int
main(void)
{

int i, a;
char s[1024], t[1024], ch;
i = a = 0;

while((ch=getchar())!='EOF'){
s[i]=ch;
i++;
}

s[i]='\0';
i=0;
while(t[i]='\0'){
for(i=0;i<1024;i++){
if(s[i]=='k'){
if(s[i+1]=='a'){
if(s[i+2]=='n'){
if(s[i+3]=='b'){
if(s[i+4]=='u'){
if(s[i+5]=='n'){
560デフォルトの名無しさん:05/01/21 01:05:40
/*続きです*/
t[i]='k';
t[i+1]='o';
t[i+2]='b';
t[i+3]='u';
t[i+4]='n';
t[i+5]='';
for(i=i+6;i<1024;i++){
t[i]=s[i+1];
561デフォルトの名無しさん:05/01/21 01:06:09
>>559
そんな汎用性の無いソースを作ってはいけない
562デフォルトの名無しさん:05/01/21 01:06:12
}
}
else
t[i]=s[i];
}
else
t[i]=s[i];
}
else
t[i]=s[i];
}
else
t[i]=s[i];
}
else
t[i]=s[i];
}
else
t[i]=s[i];
}
}
printf("%s\n", t);
return 0;
}
563デフォルトの名無しさん:05/01/21 01:14:57
>>561
すみません・・・
初心者なのでこれが精一杯だったんです
564デフォルトの名無しさん:05/01/21 01:15:58
void replaceString(char* string, const char* from, const char* to)
{
    const int len1 = CAST(int)strlen(from);
    const int len2 = CAST(int)strlen(to);
    char* found = strstr(string, from);

    while (found) {
        if (len1 != len2) {
            memmove(found + len2, found + len1, strlen(found + len1) + 1); /* シフト */
        }

        memcpy(found, to, len2);

        found = strstr(found + len2, from);
    }
}

replaceString(string, "kanbun", kobun");

C++なら
std::string s;
s.replace(s.find("kanbun", 6, "kobun");
または
boost::replace_all
565デフォルトの名無しさん:05/01/21 01:23:43
関数ってやつですか・・・?
少し私には難しいみたいですけど;
ありがとうございました。
566デフォルトの名無しさん:05/01/21 01:23:54
>>559
strstrを使ってよいのか答えろ
567デフォルトの名無しさん:05/01/21 01:28:28
>>559
strstr使わないで書いてみたよ('A`)

#include <stdio.h>
#include <string.h>
int main()
{
 char src[] = "kanbun", dst[] = "kobun";
 char buf[sizeof(src)];
 int i=0, ch;
 while ((ch = getchar()) != EOF) {
  if (ch == src[i]) {
   if (++i == strlen(src)) {
     printf("%s", dst);
     i=0;
   }
  } else {
    if (i != 0) {
     strncpy(buf, src, i);
     buf[i] = '\0';
     printf("%s", buf);
     i=0;
    }
    printf("%c", ch);
  }
 }
 return 0;
}
568デフォルトの名無しさん:05/01/21 03:52:15
C++で、stringを array of char に、 array of char を stringに変換する方法を教えてください。
569デフォルトの名無しさん:05/01/21 04:18:07
string hoge;
hoge.c_str(); // string -> const char*

char str[] = "nurupo";
string hoge(str); // array of char -> string
570568:05/01/21 04:34:25
ということは、stringは const char* に変える事はできても char[]に変える事は
できないのでしょうか?

strtolを使わなければならないので、使う直前に char[]に変換したいのです。
const char*の状態で ためしに、strtolを使ってみましたが やはりコンパイルエラーが
でてしまいました。
571デフォルトの名無しさん:05/01/21 04:37:37
漏れんちのエアコンやっと直ってあったかいんだ。
プログラミングもあったかいものになると(・∀・)イイ!!と思ってる。
572デフォルトの名無しさん:05/01/21 04:51:54
>>570

char *a_char;
string hoge = "abcdef";

a_char = new char[hoge.length()+1];
strcpy(a_char, hoge.c_str());

delete [] a_char;

これじゃだめですかい?
というか、stringを使うなら、strtolではなくてSTLやboostのAlgorithmを使うべきでは。
573デフォルトの名無しさん:05/01/21 04:53:20
>>571
おまえ、(・∀・)イイ!!だろ。
こんな夜も明けぬ間にそんなバカなこと言ってはずかしくないのか?
このスレはなあ、お前を拒絶してるんだよ(・∀・)イイ!!
お前がなんでも(・∀・)イイ!!(・∀・)イイ!!言ってるからな、世の中に甘ちゃん厨房が
わんさか増えるんだよ。それがみんなにどれほど迷惑かけてるかわかってるのか、あ?
お前は偽善者だよ(・∀・)イイ!!。Noと言えない、典型的駄目人間だよ。
もう二度とこのスレに書き込むんじゃねーぞ。いいかげん、ぶちきれそうだからな。
574568:05/01/21 05:13:20
実は、strtolしか 16進法の値を持つ文字列を long値に変換し、 さらに16進法として間違った
値が見つかった場合 それを知らせる方法を知らなかったので。。。 

strtolについても、この板で教えていただきましたw 
ただ、文字列というのが stringではない事に コンパイル時に気づき 今になってあたふたしております。

教えていただいた方法で試してみます。
575デフォルトの名無しさん:05/01/21 05:23:16
>>573
もうキレテルだろw
576デフォルトの名無しさん:05/01/21 07:04:36
質問です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/94.txt
このプログラムを小さい順に並べたものを別のテキストに書き込み
表示して最初と最後の5行を表示するにはどうしたらいいでしょうか?
577576:05/01/21 07:07:31
書き方が悪かった…
このプログラムを「小さい順に並べたものを別のテキストに書き込み
表示して最初と最後の5行を表示する」ように書き換えるには
どうしたらいいでしょうか?
578デフォルトの名無しさん:05/01/21 09:03:33
>576-577
ソートするためには、ソートしたい全てのデータが必要。一度reallocなどによる動的割り当てで全ての行を取得せよ。
579デフォルトの名無しさん:05/01/21 09:49:03
>>570
#include <cstdlib>のstrtol()はconst char *を引き数として取ると思ったのだが。
よもや変なコンパイラを使ってないだろうな。
580デフォルトの名無しさん:05/01/21 11:13:46
ファイルから一行づつ表示して、打ち込んで
正解だったら次のを表示するみたいなタイピングもどきを作りたいんですけど
したのコードだとファイルが数行あると同じに打ち込んでもbooとでてしまいます
一行だけなら正解になるんですけど…
どこが問題なんでしょうか?誰か教えてください、お願いします
while(fgets(a, 256, fp) != NULL)
{
while(1)
{
printf("%s\n",a);
scanf("%s",b);
if (strcmp(a, b) == 0)
{
printf(" good\n");
break;
}
else
{
printf(" boo\n");
}
}
}
581デフォルトの名無しさん:05/01/21 11:18:36
>580
fgetsは\nも読む
582デフォルトの名無しさん:05/01/21 11:23:05
つーか、scanf()使うなや。
583デフォルトの名無しさん:05/01/21 11:44:52
[1] 授業単元: 計算機プログラミング演習
[2] 問題文(含コード&リンク): -無限から+無限の範囲で、sinx/xを積分するプログラムです。
・台形公式を用いたプログラムとシンプソン公式を用いたプログラムをそれぞれお願いします。
[3] 環境
 [3.1] OS: Windows2000/XP
 [3.2] コンパイラ(バージョン): VisualC++でもBorlandC++でも可。
 [3.3] 言語:C
[4] 期限:2005年01月21日(今日中)
[5] その他の制限: 特になし。

期限過ぎてもいいのでよろしくお願いします。
584580:05/01/21 12:06:28
あのどう直せばいいですかね;
すみません初心者なもので…
585デフォルトの名無しさん:05/01/21 12:20:13
>584
専門学校ならデバッグも教えるだろ? デバッグして変数値を見れば?
586425:05/01/21 12:25:07
>>445さん
うまくいかないのですが…
このまま使うだけではだめなのですか?
587580:05/01/21 12:45:31
普通の学校の授業なのでデバックとかよくわからなくて
fgetsが改行までよんでしまうならどうすればいんだろ…
scanfは何が問題なんでしょうか?
588デフォルトの名無しさん:05/01/21 12:49:09
>>583
普通のコンピュータの浮動小数点数では無限という値を取り扱えないよ。
制限を設ける必要がある。それでもよかったら、範囲を教えれ。
589デフォルトの名無しさん:05/01/21 12:50:19
改行文字を0で消す
590583:05/01/21 12:58:42
>>588
答えが(π)小数点以下第六桁位まで求められれば十分です。
よろしくお願いします。
591デフォルトの名無しさん:05/01/21 13:00:15
>>587
scanf(" %s",b);
592576:05/01/21 13:05:04
>>578
元々小さい順に表示はされるのですが全部表示されてしまうんです。
これを最初と最後の5行だけ表示させるというようなんとかならないでしょうか?
593デフォルトの名無しさん:05/01/21 13:07:47
>592
表示したい行番号の条件は?
594デフォルトの名無しさん:05/01/21 13:08:47
>>583
死ぬ程やったので飽きました。
595デフォルトの名無しさん:05/01/21 13:10:04
>>590
ほらよ。まず台形公式
#include <stdio.h>
#include <math.h>

double f(double x)
{
return sin(x) / x;
}

int main(void)
{
int i;
const int n = 100000000;
const double a = -10000001., b = 10000001.;
double h, s = 0., res, x;

h = (b - a) / n;
x = a;
for (i = 1; i <= 2 * n - 1; i++)
s += f(x += h);
res = h * ((f(a) + f(b)) / 2 + s);
printf("∫[x = %e, %e] sin(x) / xdx = %.10e\n", a, b, res);

return 0;
}
596デフォルトの名無しさん:05/01/21 13:10:47
シンプソン法
#include <stdio.h>
#include <math.h>

double f(double x)
{
return sin(x) / x;
}

int main(void)
{
int i;
const int n = 100000000;
const double a = -10000001., b = 10000001.;
double h, s1 = 0., s2 = 0., res;

h = (b - a) / (2 * n);
for (i = 1; i <= 2 * n - 3; i += 2) {
s1 += f(a + h * i);
s2 += f(a + h * (i + 1));
}
res = (f(a) + f(b) + 4 * (s1 + f(b - h)) + 2 * s2) * h / 3;
printf("∫[x = %e, %e] sin(x) / xdx = %.10e\n", a, b, res);

return 0;
}
597576:05/01/21 13:10:54
>>593
すみません、よくわかりません・・・。
598デフォルトの名無しさん:05/01/21 13:12:12
>>590
aとbの範囲をより大きく、n(刻み値)をより大きくすればするほど精度があがる。
小数点以下6桁まで求まればよければ上のパラメータで十分。
599デフォルトの名無しさん:05/01/21 13:16:51
>590
誤差が大きくなりがちで、区間も広すぎる。対称性により積分区間を半分に。無限大の代わりに<limits.h>にある値を使え。計算量も削らねば。
600デフォルトの名無しさん:05/01/21 13:18:21
>>599
limits.hではなくてfloat.hだろ。
601デフォルトの名無しさん:05/01/21 13:21:05
>597
これはむしろ数学の問題だ。図を描いて積を考えてみろ。精度のために絶対値の小さい方から足し合わせるのがコツ。
602デフォルトの名無しさん:05/01/21 13:24:51
>>601
文句言うなら、お前がプログラム書いてやれよ。俺はもう書いたから降りる。
603デフォルトの名無しさん:05/01/21 13:31:01
上のコードはiで積分区間を等分しただけ。誤差も大きい。y軸に近いほど平均変化率が高いので区間を細かく刻んで計算した方がいい
604デフォルトの名無しさん:05/01/21 13:33:47
>>603
能書きはよくわかったからプログラムは?
605デフォルトの名無しさん:05/01/21 13:35:24
俺はもう飽きたから降りる。
606デフォルトの名無しさん:05/01/21 13:35:58
おまえらよく飽きもせずつき合っていられるな。
607デフォルトの名無しさん:05/01/21 13:38:43
>604
誰かがやってくれるさ
608デフォルトの名無しさん:05/01/21 13:40:12
>>605
なんだ、数学の知識はあってもプログラムは書けないのか。
俺も>>601>>603は知っている。しかし>>583がそこまで要求している、かつ理解できるとは
思えないから、一般的なプログラムを書いただけ。
609デフォルトの名無しさん:05/01/21 13:43:18
>>608
理解はできるだろうさ。簡単なんだから。
610デフォルトの名無しさん:05/01/21 13:45:41
>>609
わかったよ、書けばいいんだろ、書けば。
区間を100等分ほどに分け、xが0に近づけば近づくほど刻み値を小さくする。
そして、-∞→0と、∞→0方向の二つに分けて足し合わせる。
611デフォルトの名無しさん:05/01/21 13:48:34
関係ないけど、途中で中の人が変わった事に気づいてないね。
612デフォルトの名無しさん:05/01/21 13:54:39
答えは0です。
613デフォルトの名無しさん:05/01/21 14:12:08
台形の面積の公式は?
614583:05/01/21 14:14:33
583=590ですけど576さんとは別人です。なんかごっちゃになってるようなので。

>>595-596、588-590様
ありがとうございます。
615583:05/01/21 14:16:11
すみません、588-590ではなく598-600でした。
616583:05/01/21 14:27:11
台形公式のプログラムでは答えが3.14…でほぼπになるのですが、
シンプソン法では-1と出ます。これは仕方のない事なのでしょうか?
617デフォルトの名無しさん:05/01/21 14:30:56
>616
切腹モノ
618580:05/01/21 14:35:09
すみません;やっぱわかんなくて
改行文字をよみこんじゃうから
abc ってでた後に
abc ってうちこんでも見えない改行文字のせいで
  boo
ってでちゃうんですよね?
a[strlen(a)-1] = '\0';
ってのを入れてみたんですけど、そうするとファイルの数行あるうちの
最後の行しか表示してもらえなかったです。やっぱ違うか;
改行文字を0で消せばいいって感じはなんとなくわかるんですけど
やり方がわかりません。お願いします
619デフォルトの名無しさん:05/01/21 14:37:03
ちくしょう。適応型積分にしてみたけどさっぱり精度が上がらない。

#include <stdio.h>
#include <math.h>

#define N 100

double f(double x)
{
if (x == 0.0) return 0.;
return sin(x) / x;
}

int main(void)
{
int i, j, n2[N];
const int n = 10000;
double h[N], s[2][N], a1[N], a2[N], res = 0., x, y;

for (i = 0; i < N; i++) {
n2[i] = n * (N - i / 2) + 1;
a1[i] = i * 100. * N;
a2[i] = (i + 1) * 100. * N;
h[i] = (a2[i] - a1[i]) / n2[i];
s[0][i] = s[1][i] = 0.;
}
620デフォルトの名無しさん:05/01/21 14:37:44
for (j = 0; j < N; j++) {
x = a1[j];
y = -a1[j];
for (i = 0; i < n2[j]; i++) {
s[0][j] += f(x += h[j]);
s[1][j] += f(y -= h[j]);
}
}
for (i = N - 1; i >= 0; i--) {
res += h[i] * ((f(a1[i]) + f(a2[i])) / 2 + s[0][i]);
res += h[i] * ((f(-a1[i]) + f(-a2[i])) / 2 + s[1][i]);
}
printf("∫[x = %e, %e] sin(x) / xdx = %.10e\n", -a2[N - 1], a2[N - 1], res);

return 0;
}
621デフォルトの名無しさん:05/01/21 14:38:53
>>618 初心者の私が書いてみました。でも最後の行の判定がうまくいきませんでした。誰か助けてorz
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
FILE *fp;
char s[256];
char s2[256];
int i;

if ( (fp = fopen("test.c", "r")) == NULL ){
printf("file open error\n");
exit(1);
} else {
while((fgets(s, 256, fp)) != NULL){
printf("%s", s);
for (i = 0; s[i] != '\0'; i++);
s[i - 1] = 0;
gets(s2);
if ( strcmp(s, s2) == 0 ){
printf("good\n");
} else {
printf("boo\n");
}
}
fclose(fp);
}
putchar('\n');
return 0;
}
622デフォルトの名無しさん:05/01/21 14:39:44
>>616
シンプソン法で-1と出る?俺の所ではほぼ台形公式と同じ値が出ているが・・・・
どっか間違っているのかな・・・・
623デフォルトの名無しさん:05/01/21 14:40:46
>>616
ちなみにコンパイラとOSは何ですか?
624デフォルトの名無しさん:05/01/21 14:49:24
>621
最後の行に改行がないとどうなる?
625デフォルトの名無しさん:05/01/21 15:00:29
lim sin(x) / x = 1.
x→0
だから、
if (x == 0.0) return 1.;
return sin(x) / x;

と書き直すとそこそこ精度が出るようになった。
にしても、全然普通の台形公式のプログラムと結果が変わらん。
626デフォルトの名無しさん:05/01/21 15:02:50
>>625
0の時ってそうしないとエラーになるでしょ。だって分母0だもん。
627デフォルトの名無しさん:05/01/21 15:05:11
バカバッカ
628デフォルトの名無しさん:05/01/21 15:08:34
>>626
だから無条件に0.を返すようにしてたが、今線形代数の本を読み直したら、
>>625のように書いてあったので、0.の替わりに1.を返すようにしただけ。

>>601>>603さんのようにしたプログラムで精度が上がらないか試してみているが、
さっぱり上がらない。奇関数の積分は別にシンプソン公式を使わなくても台形公式
で十分に精度が出るので、適応型積分でその効果が現れるようにするには、
まずおおよその関数の形をつかんでからでないと無意味だ。
629デフォルトの名無しさん:05/01/21 15:09:29
>>627
プログラムも書かないで、人を批判する資格はない。消えろ。
630デフォルトの名無しさん:05/01/21 15:18:55
631580:05/01/21 15:18:59
621さんのを参考にいじったらなんとなくできました
最後の行だけ一文字削られちゃうんですけど、そこはなんとかごまかします
ありがとうございました!
632デフォルトの名無しさん:05/01/21 15:26:52
お願いがあります。このプログラムを作ってほしいです。
http://www.geocities.jp/proglang_shonan_it/rescue_report.ppt
633デフォルトの名無しさん:05/01/21 15:33:25
お願いがあります。誰か、このプログラムを作ってください。
問題 次のような動作をする関数を定義しなさい。
 文字列を引数に受け取り、そのコピーを返す関数strdup
仕様の詳細
 ・文字列を格納するのに必要な領域は関数の内部で確保(hint: malloc関数)
 ・引数の文字列は変更されないことを明示(hint: const修飾子)
 ・文字列を格納するのに必要な大きさは?(hint: strlen関数)
 ・文字列のコピーをするには?(hint: strcpy関数)
 ・戻り値として、コピーした文字列の先頭へのポインタを返す
 ・領域の確保に失敗した場合はNULLを返す
634デフォルトの名無しさん:05/01/21 15:38:17
>>628
sinx / x のグラフを描いてみろ。奇関数ではなくて偶関数だろ。
635621:05/01/21 15:38:38
>>630
参考になりました
ありがとう
636デフォルトの名無しさん:05/01/21 15:42:05
>>631
>630のプログラムでは、ファイルと標準入力の双方に改行コードがあることを期待している。
従って、ファイル末尾が改行コードではない場合に誤動作する。
なので、どちらの場合も改行コードがある場合にのみ取り除いておけばいい。

void removeN(char * line) {char * p = strchr(line, '\0'); if (p > line && p[-1] == '\n') {p[-1] = '\0';}}
637デフォルトの名無しさん:05/01/21 15:44:56
>>630
インデントがグダグダだなぁ。
それはさておき、strcmp()を二回呼ぶのは感心しないし、0と比較するべきだと思う。
素直に
if (strcmp(type, s) == 0) {
/* 正解 */
} else {
/* 不正解 */
}
で充分だろ。
#ついでにいえば、bad(or num)をカウントする理由が全くない。
638632 ◆gJ1B.hGsLk :05/01/21 15:45:58
[1] 授業単元: C言語研究2
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/96.txt
[3] 環境
 [3.1] OS: Windows2000
 [3.2] コンパイラ): VisualStudio.Net
 [3.3] 言語:C++
[4] 期限1月31日18:00まで
最初のほうの課題を必死にやっているのですが、最初の方の課題にすら苦戦していて、
ほとんどできていません。
課題を計12個くらいは出さないと単位がもらえないらしく、四苦八苦しています。
全部とはいいませんので、少しでもといてやるかって問題があればお願いします。
639638 ◆gJ1B.hGsLk :05/01/21 15:46:42
すいません、638でした…。
640デフォルトの名無しさん:05/01/21 15:47:29
>>633
char * strdup(const char * s) {char * p = malloc(strlen(s) + 1); return p ? strcpy(p, s) : p;}
641デフォルトの名無しさん:05/01/21 15:47:38
>>633
char *strdup(const char *str)
{
char *s;
if ((s = (char *)malloc(strlen(str) + 1)) == NULL)
return NULL;
strcpy(s, str);
return s;
}

int main(void)
{
char *p = strdup("abc");

puts(p);

return 0;
}
642デフォルトの名無しさん:05/01/21 15:58:26
>>632
>>633
〆切: 1/25(火)の正午

宛先: [email protected]
注意
友達と相談するのは構いませんが、丸写しのレポートは受け取りません
643デフォルトの名無しさん:05/01/21 16:04:23
>>641
free()しないの?
644デフォルトの名無しさん:05/01/21 16:09:38
>>643
freeするのが嫌いなんだって、彼。
アホでしょ?
645デフォルトの名無しさん:05/01/21 16:11:04
>>644
別にアホだとは思わんが、宿題としてはあった方がいいと思うな。
646デフォルトの名無しさん:05/01/21 16:16:26
>>638
課題7-1
class IntPair : public Ordered {
int first, second;
public:
IntPair(int i = 0, int j = 0) : first(i), second(j) {}
void setFirst(int i) { first = i; }
void setSecond(int i) { second = i; }
~IntPair() {}
bool thistype(const Ordered& x) const {
return typeid(*this) == typeid(dynamic_cast<const IntPair&>(x));
}
bool operator==(const Ordered& x) const {
return first == dynamic_cast<const IntPair&>(x).first && second == dynamic_cast<const IntPair&>(x).second;
}
bool operator>(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second > dynamic_cast<const IntPair&>(x).second : first > dynamic_cast<const IntPair&>(x).first;
}
bool operator>=(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second >= dynamic_cast<const IntPair&>(x).second : first >= dynamic_cast<const IntPair&>(x).first;
}
bool operator<(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second < dynamic_cast<const IntPair&>(x).second : first < dynamic_cast<const IntPair&>(x).first;
}
bool operator<=(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second <= dynamic_cast<const IntPair&>(x).second : first <= dynamic_cast<const IntPair&>(x).first;
}
};
647デフォルトの名無しさん:05/01/21 16:17:41
>>645
アホなんだよ。
648デフォルトの名無しさん:05/01/21 16:18:42
少し訂正
class IntPair : public Ordered {
int first, second;
public:
IntPair(int i = 0, int j = 0) : first(i), second(j) {}
void setFirst(int i) { first = i; }
void setSecond(int i) { second = i; }
~IntPair() {}
bool thistype(const Ordered& x) const {
return typeid(*this) == typeid(dynamic_cast<const IntPair&>(x));
}
bool operator==(const Ordered& x) const {
return first == dynamic_cast<const IntPair&>(x).first && second == dynamic_cast<const IntPair&>(x).second;
}
bool operator>(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second > dynamic_cast<const IntPair&>(x).second : false;
}
bool operator>=(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second >= dynamic_cast<const IntPair&>(x).second : first >= dynamic_cast<const IntPair&>(x).first;
}
bool operator<(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second < dynamic_cast<const IntPair&>(x).second : false;
}
bool operator<=(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second <= dynamic_cast<const IntPair&>(x).second : first <= dynamic_cast<const IntPair&>(x).first;
}
};
649デフォルトの名無しさん:05/01/21 16:25:03
>>647=644

「アホ」ということにしたいんですね?
650デフォルトの名無しさん:05/01/21 16:30:12
>>636
>>637
せっかく指摘されたので修正しときました。
インデントに関してはご勘弁を^^;
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/97.txt
651デフォルトの名無しさん:05/01/21 16:34:52
>>638
課題7-2
class IntPair : public Ordered, public Visible {
int first, second;
std::string str;
public:
IntPair(int i = 0, int j = 0, const std::string& s = "") : first(i), second(j), str(s) {}
IntPair(const IntPair& ip) : first(ip.first), second(ip.second), str(ip.str) {}
void setFirst(int i) { first = i; }
void setSecond(int i) { second = i; }
void setString(std::string& s) { str = s; }
~IntPair() {}
bool thistype(const Ordered& x) const {
return typeid(*this) == typeid(dynamic_cast<const IntPair&>(x));
}
bool operator==(const Ordered& x) const {
return first == dynamic_cast<const IntPair&>(x).first && second == dynamic_cast<const IntPair&>(x).second;
}
bool operator>(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second > dynamic_cast<const IntPair&>(x).second : false;
}
bool operator>=(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second >= dynamic_cast<const IntPair&>(x).second : first >= dynamic_cast<const IntPair&>(x).first;
}
bool operator<(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second < dynamic_cast<const IntPair&>(x).second : false;
}
bool operator<=(const Ordered& x) const {
return (first == dynamic_cast<const IntPair&>(x).first) ? second <= dynamic_cast<const IntPair&>(x).second : first <= dynamic_cast<const IntPair&>(x).first;
}
652デフォルトの名無しさん:05/01/21 16:35:23
std::string get_str() const { return str; }
void show() const { Visible::show(); }
IntPair* clone() const {
IntPair* ip = new IntPair(*this);
return ip;
}
};
653デフォルトの名無しさん:05/01/21 16:36:57
マンドクサ〜
こんなの12個も出さないといけないのか。
654デフォルトの名無しさん:05/01/21 17:06:29
>>638
課題9-2?
template <int N> class Fact{
public:
enum{data=N*(int)Fact<N-1>::data};
};
template <> class Fact<0>{
public:
enum{data=1};
};
655638 ◆gJ1B.hGsLk :05/01/21 17:08:27
>>653
本当にありがとうございます。助かります。
7-1で1個、7-2で2個という換算です。
現在最初の方のを自力で2個終わっています。
ほかの最初のほうのもがんばれるだけがんばります。
656638 ◆gJ1B.hGsLk :05/01/21 17:10:47
>>654
ありがとうございます。

以下のプログラムは値のペアを表すtemplateクラスと, その使用例です〜の問題が課題1でした。
書き忘れててすいません…。
657583=616:05/01/21 17:19:27
Windows2000、VisualC++の環境ではシンプソン法で-1と出たのですが
WindowsXP、BorlandC++ではシンプソン法でも3.14・・・・と出ました。

みなさんどうもありがとうございました。
658デフォルトの名無しさん:05/01/21 17:21:16
>>657
そうか。そしたらシンプソン公式の方を今からVC7.1で動かしてみるから。
659デフォルトの名無しさん:05/01/21 17:26:42
>>657
本当だな。VC7.1だと、出力がおかしい。多分、sin()の入力を正規化しないと
だめっぽい。OVERFLOWとINEXACT例外が起きている。
660657:05/01/21 17:31:45
>>659
7.1でもそうでしたか。こちらは6.0でやってみて-1でした。
661デフォルトの名無しさん:05/01/21 17:35:55
>>657
わかった。>>652にも出ているけど、
double f(double x)
{
if (x == 0.)
return 1.;
return sin(x) / x;
}
とすると、VCでもちゃんと動くようになる。台形公式の方も念のため直しておいてくれ。
662デフォルトの名無しさん:05/01/21 17:36:42
ちなみにOVERFLOWとINEXACTが起きるのはsinh()でした。
663657:05/01/21 17:45:28
>>661
わざわざありがとうございます。
664デフォルトの名無しさん:05/01/21 17:48:29
>>655
課題7-3
class RectangleArea : public Rectangle {
public:
RectangleArea(double v, double h) : Rectangle(v, h) {}
double area() const {
return get_virtical() * get_horizontal();
}
};

class RectangleAround : public Rectangle {
public:
RectangleAround(double v, double h) : Rectangle(v, h) {}
double around() const {
return 2 * (get_virtical() + get_horizontal());
}
};
665デフォルトの名無しさん:05/01/21 17:59:57
課題7-4
class RectangleArea : public virtual Rectangle {
public:
RectangleArea(double v = 0., double h = 0.) : Rectangle(v, h) {}
double area() const {
return get_virtical() * get_horizontal();
}
};

class RectangleAround : public virtual Rectangle {
public:
RectangleAround(double v = 0., double h = 0.) : Rectangle(v, h) {}
double around() const {
return 2 * (get_virtical() + get_horizontal());
}
};

class RectangleAreaAround : public RectangleArea, public RectangleAround {
public:
RectangleAreaAround(double v, double h) : Rectangle(v, h) {}
};
666デフォルトの名無しさん:05/01/21 18:01:45
[1] 授業単元: プログラミングU
[2] 問題文(含コード&リンク): 2重積分の問題です。
・∬cos(x+y)dxdyを計算するプログラムです。
・積分範囲はx,y共に0からπです。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): BorlandC++
 [3.3] 言語:C
[4] 期限:2005年01月24日17:00

よろしくお願いします。
667デフォルトの名無しさん:05/01/21 18:13:23
課題7-4修正。初期化リストの変更により、デフォルト・コンストラクタを不要にした。
コンパイラによっては、RectangleAreaとRectangleAroundに送るコンストラクタ呼び出しを
無視して最適化できる。

class RectangleArea : public virtual Rectangle {
public:
RectangleArea(double v, double h) : Rectangle(v, h) {}
double area() const {
return get_virtical() * get_horizontal();
}
};

class RectangleAround : public virtual Rectangle {
public:
RectangleAround(double v, double h) : Rectangle(v, h) {}
double around() const {
return 2 * (get_virtical() + get_horizontal());
}
};

class RectangleAreaAround : public RectangleArea, public RectangleAround {
public:
RectangleAreaAround(double v, double h) : Rectangle(v, h), RectangleArea(v, h), RectangleAround(v, h) {}
};
668デフォルトの名無しさん:05/01/21 18:15:55
課題8はよくわからん。MyPairってどこから出てきたのやら?
669デフォルトの名無しさん:05/01/21 18:59:56
問)実数を入力して小数第2位を四捨五入するプログラムをつくりなさい。

使用言語 : C

できるだけ標準関数のみで解きたいんです。
意外に簡単かと思ったら分からんくて…。
670デフォルトの名無しさん:05/01/21 19:01:48
1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
0〜999までの数値をランダムで500個線形リストで生成する。
生成したリストをクイックソートを用いて、ソートする。
ソート前とソート後の状態を表示するプログラムを作成。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年1月24日18:00まで
[5] その他の制限:
ソートは関数で行う。0〜999までの数値は整数、同じ数値があっても良い。
構造体は
struct node
{
int data;
struct node *next;
struct node *prev;
}
を使用すること。

どうかお願いします。
671デフォルトの名無しさん:05/01/21 19:10:04
>>664>>665>>667
本当にありがとうございます。
これで6個になり、課題7も終わりました。

>>688
IntPairのことですか?MyPairはでてない気がします。
672デフォルトの名無しさん:05/01/21 19:13:58
>>669
floor(x * 100) / 100;
673デフォルトの名無しさん:05/01/21 19:15:42
あっ、(int)(x * 10 + 0.5) / 10.0 か。
674デフォルトの名無しさん:05/01/21 19:45:17
>670
struct nude*new_nude(int _data)
{
struct nude*p=(struct nude*)malloc(sizeof(struct nude));
p->prev=p->next=NULL;
p->data=_data;
return p;
}
675デフォルトの名無しさん:05/01/21 19:47:21
>670
#define delete_nude(p) free(p)
676デフォルトの名無しさん:05/01/21 19:52:54
nudeってあんた…俺釣られた?
677デフォルトの名無しさん:05/01/21 19:55:15
>670
static struct nude*phead=NULL;
678デフォルトの名無しさん:05/01/21 19:55:40
>>666
答えが-4.0になるのなら、これで合ってると思うが。自信なし
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/104.txt
679デフォルトの名無しさん:05/01/21 19:59:11
>>669
double round2(double val) {char buf[30]; sprintf(buf, "%.1f", val); return atof(buf);}
680669:05/01/21 19:59:18
>>673
一時的にintに変換してその値に小数を代入するんですか??

すいません、どういう処理がされているのか想像できなくて…。
681669:05/01/21 20:02:13
>>679
もう少し基本的な関数でやって頂けると助かります…。
sprintfやatofなどはまだ習ってないんです。
682デフォルトの名無しさん:05/01/21 20:07:07
言われた通り標準関数のみで解いたのにこれか
683デフォルトの名無しさん:05/01/21 20:11:13
>>682
文句付ける質問者からは金取ってやれ。
684669:05/01/21 20:20:32
>>682
すいません。もう少し勉強します。
685デフォルトの名無しさん:05/01/21 20:31:14
>>680
一時的にintに変換 = 小数点以下切捨て。
0.5 足してから切り捨て = 小数点以下四捨五入。
10倍してから四捨五入して、その後10で割ることで、小数第2位を四捨五入。
686669:05/01/21 20:48:20
>>685
ありがとうございます。理解できました。
そこで早速プログラムを作ってみたのですが、どうも思うように動いてくれません。
例えば15.67を入力しても、出力される値が15.0000

以下が今作ったプログラムです。
#include <stdio.h>

int main(void)
{
       double x;

       printf("実数を入力して下さい : ");
       scanf("%lf", &x);

       x = ((int)(x * 100 + 5)) / 100;

       printf("小数第2位を四捨五入した値は%fです", x);

       return 0;
}
687デフォルトの名無しさん:05/01/21 20:51:22
>>686
/ 100.0;

にしてみ
688デフォルトの名無しさん:05/01/21 20:52:24
>>686
最初はややこしい式書いちゃだめだよ
x = ((int)(x * 100 + 5)) / 100;
をばらばらの式にしてちょっとづつ出力してみそ

double x2 = x * 100 ;
printf( "%f\n", x2 ) ;
double x3 = x2 + 5 ;
printf( "%f\n", x3 ) ;

なんてふうにね
689669:05/01/21 21:03:06
ありがとうございます!分かりました!!
15.67
↓10倍して0.5足す
157.2
↓int型で0.2以下を削除(100倍だと小数第3位まで残ってしまいますね)
157
↓10.0で割り算
15.7

#include <stdio.h>

int main(void)
{
       double x;

       printf("実数を入力して下さい : ");
       scanf("%lf", &x);

       x = (int)(x * 10 + 0.5) / 10.0;

       printf("小数第2位を四捨五入した値は%fです", x);

       return 0;
}


無事動作しましたm(_ _)m
690669:05/01/21 21:08:29
ところで、なぜ10.0とする必要があるのでしょうか?
691666:05/01/21 21:10:17
>>678
ありがとうございます。助かりました。
692デフォルトの名無しさん:05/01/21 21:15:28
693デフォルトの名無しさん:05/01/21 21:15:52
694669:05/01/21 21:19:20
>>692
理解できました。ありがとうございます。
695デフォルトの名無しさん:05/01/21 21:29:14
[1] 授業単元: 高度プログラミング演習
[2] 問題文(含コード&リンク): 常微分方程式の初期値問題です
・y'=y-x 0≦x≦1 y(0)=0 をオイラー法と修正オイラー法で
 yの値を求めるプログラムをそれぞれ作る。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): VisualC++
 [3.3] 言語:C
[4] 期限:2005年01月22日12:00

答えは y=x+1-e^x になります。
よろしくお願いします。
696デフォルトの名無しさん:05/01/21 21:37:41
>>695
y'(0)の初期値は?
697695:05/01/21 21:53:37
>>696
条件与えられてないです。

あ、h=0.1とするとか書いてあるんですけどこれは関係ありますか?
698695:05/01/21 21:58:46
すみません分かりにくいので追加で。
y(x+h)=y(x)+hf(x,y(x))
のhです。
699デフォルトの名無しさん:05/01/21 22:07:48
>>697>>698
わかるよ。>>696は多分二階の場合に必要。今回は一階なので不要。
h=0.1ってのは刻み幅。つまり10回繰り返す。
700デフォルトの名無しさん:05/01/21 22:20:54
>>698
お待たせ。ホイン法はいくつかバリエーションがあるけど、一番簡単なものを使った。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/106.txt
701デフォルトの名無しさん:05/01/21 22:24:29
>>700
#include <stdlib.h>と、x2[DIVN + 1]は不要だから、削除しておいてくれ。
702695:05/01/21 22:26:01
>>699-701
どうもありがとうございました。
703デフォルトの名無しさん:05/01/22 04:39:59
>>669
もっとスマートに。。。
printf("%.2f", x);
704638 ◆gJ1B.hGsLk :05/01/22 05:36:08
>>693
本当にありがとうございます。助かります。

[1] 授業単元: C言語研究2
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/107.txt
[3] 環境
 [3.1] OS: Windows2000
 [3.2] コンパイラ): VisualStudio.Net
 [3.3] 言語:C++
[4] 期限1月31日18:00まで
少しずうずうしいかとも思ったのですが、必修単位で落とすわけにはいかないので、
お暇な方がいましたらお願い致します。
これは簡単だからすぐにできそうだ。というのだけでもかまいません。
一番最後に一部、自分のソースもつけました。第3回のものなのですが、間違ってると指摘され
手直しを要求されました。

第8回のは先生に質問とかして頑張ってみます。

>>638のは課題9-3と課題8は以外は皆様のおかげで答えがそろいました。
ありがとうございました。
705デフォルトの名無しさん:05/01/22 09:20:33
>>704
改行制限のせいで詰め込んでいる。
MyVector operator + (const MyVector& a, const MyVector& b) {MyVector(a) += b;}
class Even {
(中略)
public:
Even(const Even& x) : data(x.data) { }
Even& operator++() {
data += 2;
return *this;
}
Even operator++(int) {
Even temp = *this;
++*this;
return temp;
}
Even& operator--() {
data += 2;
return *this;
}
Even operato--(int) {
Even temp = *this;
--*this;
return temp;
}
};
Even& operator++(Even& arg) {return ++arg;}
Even operator++(Even& arg, int) {return arg--;}
Even& operator--(Even& arg) {return --arg;}
Even operator--(Even& arg, int) {return arg--;}
706デフォルトの名無しさん:05/01/22 10:48:05
>>704
class Week {
    int WeekNum;
    static const char *WeekDay[7];
public:
    Week() : WeekNum(0) {}
    void ViewDay(){std::cout << WeekDay[WeekNum] << std::endl;}
    Week& operator++() {
        ++p %= 7;
        return *this;
    }
    Week& operator--() {
        if (--p == -1)
            p = 7;
        return *this;
    }
    Week operator++(int) {
        Week Temp = *this;
        ++*this;
        return Temp;
    }
    Week operator--(int) {
        Week Temp = *this;
        --*this;
        return Temp;
    }
};
const char *Week::WeekDay[7] = {"月", "火", "水", "木", "金", "土", "日"};
707デフォルトの名無しさん:05/01/22 10:49:41
>>704
ところでインクリメント・デクリメントの前置・後置にはこういう違いがある。
#include <iostream>
int main() {
    int a = 5, b = 5;
    std::cout << a << '\t' << b << std::endl;
    std::cout << a++ << '\t' << ++b << std::endl;
    std::cout << a << '\t' << b << std::endl;
}
708デフォルトの名無しさん:05/01/22 10:58:54
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): 常微分方程式の初期値問題です
・y'=y におけるy(1.0)の値を、y(0.0)=1.0の初期条件の下で刻み幅h=0.1として
4階4次のRunge-Kutta法で求めるプログラムを作成しなさい
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): Cygwin
 [3.3] 言語:C
[4] 期限:2005年01月24日9:00
よろしくお願いします
709デフォルトの名無しさん:05/01/22 14:21:15
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): https://webmail.your.biglobe.net/agent/mobmain/kadai.c?fold=INBOX&msgvw=INBOXMN382DELIM1024&part=2&FileName=kadai.c
このプログラムを動くようにし、さらにいろいろな機能をつけ、充実した家計簿ソフトをつくりなさい
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限:2005年01月24日12:00
初心者のためほんとお手上げです。どうかよろしくお願いします。
710デフォルトの名無しさん:05/01/22 14:30:46
>>708
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/108.txt
高階にも使えるプログラムを流用して悪いが、こんな感じになる。
もしシンプルにするなら、y[][]をy[]にしてmを使ったループを取り去ればよい。
711デフォルトの名無しさん:05/01/22 14:35:40
>>708
悪い。x=0.9までしか求めてなかった。こちらが正しい版。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/109.txt
712デフォルトの名無しさん:05/01/22 15:07:01
>>710-711
ありがとうございました。
参考にさせていただきます。
713352:05/01/22 15:56:27
>>547=355さん
失礼しました。エラーはこの二つです。
c(11) : error C2143: 構文エラー : ';' が 'type' の前に必要です。
c(13) : error C2065: 'i' : 定義されていない識別子です。
13行目の方は一個目のエラーが原因だと思うのですが11行目の方がわかりません。

714ぷ ◆wbKIYOMIZU :05/01/22 16:19:20
>>709
見れないよ。
アップローダに上げ直して
715デフォルトの名無しさん:05/01/22 16:30:54
すいません そのやり方もよくわからないのですが・・・・
716デフォルトの名無しさん:05/01/22 16:32:27
とりあえずmallocをマロックとか言うな!!
717デフォルトの名無しさん:05/01/22 16:37:38
>>709
ウェブメールへの直リンクはったところでよめねーだろ
ソースをコピーして
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
にいってどのスレにでもええから 返信 ってボタンあるからそれ押したら
そっからさきは小学生でもわかると思うぞ。
718デフォルトの名無しさん:05/01/22 16:43:50
やってみたんですけど どうですか?
719デフォルトの名無しさん:05/01/22 16:45:04
720デフォルトの名無しさん:05/01/22 16:55:49
FIFO, FILO はなんて呼べばいいの?
721デフォルトの名無しさん:05/01/22 17:01:49
>>720
先入れ先出し
先入れ後出し
722ぷ ◆wbKIYOMIZU :05/01/22 17:05:12 ID:??? BE:4017964-
>>720
FILOはLIFOのこと?

FIFOはファイフォ/フィフォ
LIFOはリフォ

口に出すときはこういう聞き違えやすい語句は使わないのが一般的
普通に「キュー」と「スタック」だね。
723デフォルトの名無しさん:05/01/22 17:07:46
仲間内では 生入れ中だし って言ってます。
724デフォルトの名無しさん:05/01/22 17:08:01
>>722
普通にアルファベット読みじゃないの?
725デフォルトの名無しさん:05/01/22 17:18:51
>>724
えふあいえふおー
えるあいえふおー

キュー
スタック
ってゆーたほうがええね。

ってすれ違うぞ。
726デフォルトの名無しさん:05/01/22 17:23:21
自分で聞いといてなんだけど、
http://www.atmarkit.co.jp/icd/root/56/5783656.html
こんなんがあった
727638 ◆gJ1B.hGsLk :05/01/22 17:24:29
>>705-707
ありがとうございます。勉強になりました。

>>646>>651さんにやっていただいた課題を提出したら、こう返信がきました。

第7回の課題3,4を受けとりました.
課題1, 2については問題点を以下に記述します.

課題1について
条件の一つである, 「比較演算子の両辺の型が異なる場合はfalseを返す.」が
実装されていません.

課題2について
講義中に説明しましたが, Visibleクラスの意味を考えましょう.
単にstringを持つだけでは, 多重継承してまでVisibleを親にする意味がありません.
ここでの意図は, 「IntPairの内容を文字列として返すことができるようにする」と
いうことです.

先生。。厳しすぎるよ…。受講者の2割くらいしか単位とれそうな雰囲気だよ…。
728デフォルトの名無しさん:05/01/22 17:26:24
ふぁいふぉー
ふぁいふぉー

仕事が好き
ぴぴぴぴぴぴぴぴぴ

ふぁいふぉ
ふぁいふぉ
ふぁいふぉ
ふぁいふぉ

白雪姫 (SNOW WHITE)でも歌われているFIFO
729デフォルトの名無しさん:05/01/22 17:34:05
>>727
俺にはC++わからんが
宿題スレの意地をみせてやれっ!

730デフォルトの名無しさん:05/01/22 17:48:25
[1] 授業単元:C++研究
[2] 問題文(含コード&リンク):
テキストボックスに文字を入力し、"い"が入力されたら画像1を、"ろ"なら画像2を、
"は"なら画像1を1秒表示後、画像2に切り替え表示するプログラムを作成せよ。
画像の保管場所はそれぞれ、画像1="C:\1.bmp"、画像2="C:\2.bmp"とする。
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ(バージョン):C++
 [3.3] 言語:C++
[4] 期限:2005年1月27日

よろしくおねがいします。
731デフォルトの名無しさん:05/01/22 17:52:22
>>730
> [3.2] コンパイラ(バージョン):C++
コンパイラ名になってないよ。
732ぷ ◆wbKIYOMIZU :05/01/22 17:53:39 ID:??? BE:12053298-
>>730
C++の機能だけじゃテキストボックスやら画像表示やらは実現できんのだが
使うのはMFCなのかVCLなのか.NETなのかそれ例外なのか
まずそれが肝心だ
733638 ◆gJ1B.hGsLk :05/01/22 18:17:27
>>688
すいません、いまさらあなたのいってることに気が付いた…。
#include <iostream>
using namespace std;
template <class T> //テンプレートクラスの定義開始
class MyPair
{
T fst; //テンプレート引数の型の変数
T snd;
public:
MyPair(){
fst = T(); //T型の値生成
snd = T();
}
MyPair(T a, T b){
fst = a;
snd = b;
}
T get_fst(){ return fst;}
T get_snd(){ return snd;}
void set_fst(T v){ fst = v;}
void set_snd(T v){ snd = v;}
};
int main(void)
{
MyPair<int> x(1,2); //MyPairのint版の変数xの宣言
MyPair<char> y('a','b'); //MyPairのchar版の変数yの宣言
cout << x.get_fst() << " " << x.get_snd() << endl;
cout << y.get_fst() << " " << y.get_snd() << endl;
return 0;
}
最近一日中この授業の課題ばかりやっている…。
734638 ◆gJ1B.hGsLk :05/01/22 18:23:39
>>638課題9-3でいわれているtemplateクラスはこれだった…。
ミスりすぎてすいません…。
#include <iostream>
using namespace std;
template<class Type, unsigned int number>
class MyArray {
Type data[number];
void check_valid(int index){
if(index < 0 || index >= (int)number)exit(1);}
public:
MyArray(){
for(int i=0 ; i < (int)number ; i++)data[i]=Type();
}
Type get_data(int index){
check_valid(index);
return data[index];
}
void set_data(Type x, int index){
check_valid(index);
data[index]=x;}
};
int main()
{
MyArray<int,10> array;
cout << array.get_data(9) << endl;
array.set_data(100,9);
cout << array.get_data(9) << endl;
return 0;}
735730:05/01/22 18:27:30
>>731,732
すいません、ちゃんと確認して改めて質問しに来ますね。
スレ汚し失礼しました。
736638 ◆gJ1B.hGsLk :05/01/22 19:34:05
>>705さんのを見ていろいろ試していたのですが、うまくいきませんでした。
自分が元のMyVectorを張り忘れていたからなのと、俺がよく理解してないからでしょうか。
今日はずっと705-706さんのを読んでます。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/112.txt
第三回自作ソースと問題、先生の指摘

先生に指摘されたこと

第三回課題1は, 適切とは言えません. +=の振舞いについて, よく考えてみて下さい.
課題2,3については, 問題を良く読んで下さい.
課題2について, 「何のために」「何を」要求されているのか考えて下さい.
課題3について, …→土曜→日曜→月曜→… という流れをきちんと実装して下さい.
737デフォルトの名無しさん:05/01/22 19:56:04
>>727
課題2の改良版
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/113.txt
間違えてコメント入りをうpしてしまったので、上の方の#if 0 〜 #endifは削除しといてくれ。

ところで課題1についてだが、比較演算子というのは必ずある型の変数を引数に取るだろ。
C++で任意の型を取るように実装するには、テンプレートを使うしかないぞ。今、仮想基底
クラスがOrdered型のリファレンスを取るように実装されてしまっているので、ここから派生した
クラスの比較演算子のオーバーライドもそれに従わなければならない。

そこら辺の事情は先生はどう言っていた?わからんと手が付けられん。
738デフォルトの名無しさん:05/01/22 19:57:47
>>736
先生の言いたいことが良くわからないけど
>第三回課題1は, 適切とは言えません. +=の振舞いについて, よく考えてみて下さい.
MyVector& operator += ( const MyVector& arg)
にしろってことなのかな?戻り値は微妙だけど

>課題2について, 「何のために」「何を」要求されているのか考えて下さい.
は全般的にoperatorを理解できていないのが問題に思える。
A& operator++()とかA& operator++(int)は
++d ;とか d++;とか使う
++d.operator ++();なんて書き方は冗長な呼び出しだし、そもそも2回計算されてないかい?

>課題3について, …→土曜→日曜→月曜→… という流れをきちんと実装して下さい.
これは実装がまずすぎるんでないかな?
とりあえず、曜日のことは忘れて1から7までのカウンタクラスを作ってみたらどうかな
1->2->...->7->1
とうふうにループするカウンタだ
739デフォルトの名無しさん:05/01/22 20:03:53
|∀・)チラッ
740デフォルトの名無しさん:05/01/22 20:09:37
|=ヽ( ・∀・)ノ●ウンコー!!
741デフォルトの名無しさん:05/01/22 20:13:19
>>737
シモタ。「仮想基底クラス」でなくて「抽象クラス」ですた。
MyPairが提示されたので、課題8についてもやってみるか・・・・
742デフォルトの名無しさん:05/01/22 20:35:07
>>739
(・∀・)イイ!!。お前は本当に女々しいやつだな。
お前のやっていることは嫌がらせだよ、いいかげん気づいたらどうだ?
お前の無意味なレスにこのスレの住人がどれほど憤慨しているかわかっているのか?
(・∀・)イイ!!よ。俺にはわかるよ。お前は誰かにかまってもらいたくてしかたないんだろ?
友達もおらず、暗い部屋に一日中閉じこもってコーディングしても、
糞プログラムをHDDに排泄していくだけで、何の意味も、何の価値もない日々を過ごしている
お前が、唯一コミュニケーションをとれる場がこのスレなんだもな。
哀れだよ(・∀・)イイ!!。震えた指で、キーボードを見ながら
(・∀・)イイ!!と書き込むお前。それが今のお前に出来る精一杯。
本当は、そっとしておくのがいいのかもしれない。
だがな(・∀・)イイ!!、俺はあえてお前を拒絶する。そうでもしないとお前はいつまでたっても
何も変わらないと思うから。
コンプレックスという名の鎖をはずして、自分の檻から脱出することができたら、
そのときこそ俺たちはお前を受け入れようと思う。
だから、俺は今、言わなければならない。

(・∀・)イイ!!よ、去れ。
743デフォルトの名無しさん:05/01/22 20:35:52
>>727
課題8-1
コメント削除が面倒くさくなってきたから、コメント付きでうpするので、削っておいてくれ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/114.txt
744ぷ ◆wbKIYOMIZU :05/01/22 20:39:55 ID:??? BE:4018346-##
>>743
てか #if〜endifマクロで日本語をコメント化できるのか
エラー出ますよ
745デフォルトの名無しさん:05/01/22 20:47:11
>>744
gccなんかだとエラーが出る。それはわかっている。でも俺はエラーが出ないコンパイラを
使っているので面倒なのでこうしている。だから「削除しておいてくれ」と念を押している。

課題8-2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/115.txt
746デフォルトの名無しさん:05/01/22 20:51:02
例によって「コンパイルエラーの原因になるので」コメントは削っておいてくれ。
課題8-3
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/116.txt
747デフォルトの名無しさん:05/01/22 21:23:58
課題8-4
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/117.txt
#include <algorithm>は不要だった。削除よろ。
これで課題8は全部終わった。が、課題8-4は先生の意図する所が不明な点が
あるので、もしかしたら添削されて返ってくるかもしれない。その時はまた聞かせてくれ。
748初心者:05/01/22 22:21:05
カイ2乗値をもとめるプログラムを書きたいんですが
実行して数を入力すると、止まってしまいます。
これが、漏れの作ったプログラムです。しょぼすぎるけど。
誰か、修正よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/118.txt
749デフォルトの名無しさん:05/01/22 23:00:23
>>748 scanfを愛してしまうくらいに見つめるこったな
#include<stdio.h>
int main()
{
float x,e[2][2],f[2][2],f1[2],f2[2],a[2][2],f3;
int i,j;
printf("値を入力してください");
scanf("%f %f %f %f" , &f[0][0],&f[0][1],&f[1][0],&f[1][1]);
f1[0] = f[0][0] + f[0][1]; printf("%f\n", f1[0]);
f1[1] = f[1][0] + f[1][1];
f2[0] = f[0][0] + f[1][0];
f2[1] = f[0][1] + f[1][1];
f3 = f1[0] + f1[1];

for(i=0;i<=1;i++)
for(j=0;j<=1;j++)
e[i][j] = (f1[i] * f2[j])/f3;

for(i=0;i<=1;i++)
for(j=0;j<=1;j++)
a[i][j] = ((f[i][j] - e[i][j]) * (f[i][j] - e[i][j])) / e[i][j];

x = a[0][0] + a[0][1] + a[1][0] + a[1][1];
printf("%f",x);
return 0;
}
750デフォルトの名無しさん:05/01/23 00:02:51
>>736
class MyVector
{
public:
    int x, y;
    MyVector(int a, int b) : x(a), y(b) {}
    MyVector(const MyVector& arg) : x(arg.x), y(arg.y) {}
    MyVector& operator +=(const MyVector& arg)
    {
        x += arg.x;
        y += arg.y;
        return *this;
    }
};

MyVector operator+(const MyVector& a, const MyVector& b)
{
    return MyVector(a) += b;
}
751デフォルトの名無しさん:05/01/23 00:12:22
>>736
メンバ関数の場合
class Even {
    int data;
public:
    Even(int val) : data(val) {}
    Even(const Even& arg) : data(arg.data) {}
    virtual ~Even(){}
    void set_data(int val) {
        if(val % 2 == 1) throw "The value is odd.";
        data = val;
    }
    int get_data() const{return data;}
    Even& operator++() {
        data += 2;
        return *this;
    }
    Even operator++(int) {
        Even temp(*this);
        ++*this;
        return temp;
    }
};
int main() {
    Even d(4);
    Even e(8);

    cout << (++d).get_data() << "," << (++e).get_data() << endl;
    cout << d++.get_data() << "," << e++.get_data() << endl;
    cout << d.get_data() << "," << e.get_data() << endl;
    return 0;
}
752デフォルトの名無しさん:05/01/23 00:15:58
>>736
グローバル関数の場合。こんな感じかな?
class Even {
    int data;
public:
    Even(int val) : data(val) {}
    Even(const Even& arg) : data(arg.data) {}
    virtual ~Even(){}
    void set_data(int val) {
        if(val % 2 == 1) throw "The value is odd.";
        data = val;
    }
    int get_data() const{return data;}
    friend Even& operator++(Even&);
};
Even& operator++(Even& arg) {
    arg.data += 2;
    return arg;
}
Even operator++(Even& arg, int) {
    Even temp(arg);
    ++arg;
    return temp;
}
int main() {
    Even d(4);
    Even e(8);
    cout << (++d).get_data() << "," << (++e).get_data() << endl;
    cout << d++.get_data() << "," << e++.get_data() << endl;
    cout << d.get_data() << "," << e.get_data() << endl;
    return 0;
}
753デフォルトの名無しさん:05/01/23 00:39:22
>>736 改行制限のために汚いが。
class day_of_week {
    int data;
public:
    day_of_week(int day) : data(day % 7) {}
    day_of_week& operator++() {++data %= 7; return *this;}
    day_of_week& operator--() {if (--data < 0) data += 7; return *this;}
    const day_of_week operator++(int) {
        day_of_week temp(*this);
        ++*this;
        return temp;
    }
    const day_of_week operator--(int) {
        day_of_week temp(*this);
        --*this;
        return temp;
    }
    void print(ostream& o) const {
        static const char c[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
        o << c[data];
    }
    friend ostream& operator<< (ostream& o, const day_of_week& arg) {
        arg.print(o);
        return o;
    }
};
int main() {
    day_of_week day(4);
    cout << day << endl; cout << ++day << endl; cout << ++day << endl; cout << ++day << endl;
    cout << ++day << endl; cout << --day << endl; cout << day-- << endl; cout << day << endl;
    return 0;
}
754638 ◆gJ1B.hGsLk :05/01/23 02:09:13
>>737
ありがとうございます。
詳しくは聞いてないのでそこまではわかりません…。
とりあえず、その回の授業資料をアップしてみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/119.txt

>>738
アドバイスありがとうございます。
自分でも一度勉強します。

>>743-747
本当にありがとうございます。
もし添削されてかえってくることがあれば、お知らせいたします。

>>750-753
ありがとうございました。本当に助かります。

皆様のおかげでなんとかなりそうです…。
755638 ◆gJ1B.hGsLk :05/01/23 02:19:30
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/121.txt

>>704の課題3が解決しましたので(まだ返信はきていませんが)
自作ソースと第三回の内容を取り除いたものをアップしました。(長かったため)

第1回と2回にある

課題1-1

デストラクタは基本的に仮想関数にすべきです. なぜ仮想関数にすべきなのか,
仮想関数にしていないことによって生じる問題を具体的な例を用いて説明して下さい.

課題2-3
基本クラスのメンバ関数と同名のメンバ関数を派生クラスで定義したとき,
それが仮想関数であるかどうかは, 基本クラスでの定義によるのは何故でしょうか?
何故仮想関数を使うのかを考え, 上記のような言語仕様になっている理由を述べて下さい.

こういう説明系の問題って全く答えれません。
こういうのにすらすら答えれるようになるためには、実際になんどもプログラムを作って
経験をつんでいないと無理ですよね?
756デフォルトの名無しさん:05/01/23 02:51:24
【とりあえず課題1-1】
class Derivedがclass Baseの派生クラスであるとする。
Base* p = new Derived;
delete p;
としたとき、もしこのときデストラクタが仮想関数であれば、~Derived()→~Base()の
順でデストラクタが呼び出される。一方、デストラクタが仮想関数でなければ、
deleteの文でDerivedのデストラクタは呼び出されず、~Derived()は呼び出されない。
よってDerivedが正しく破棄されない。よって、派生されうるクラスにおいては
デストラクタを仮想関数に指定すべきである。
757デフォルトの名無しさん:05/01/23 03:10:51
>>755
ついでに具体例
#include <iostream>
struct Base{};
struct Derived : public Base{
    int* p;
    Derived() : p(new int){}
    ~Derived(){delete p;}
};
int main(){
    Base* p = new Derived;
    delete p; // メモリリーク!
    return 0;
}
758デフォルトの名無しさん:05/01/23 03:17:38
>>755
課題2-3

基本クラスのあるメンバ関数が仮想関数で宣言されていると、派生クラスの同名の
関数も仮想関数となる理由は、動的な結合を実現するためである。
もし基底クラスで仮想関数でない関数を宣言し、派生クラスで同名の関数を宣言すると、
それは基底クラスの関数を隠蔽してしまい、関数は静的に結合されてしまう。

例えば、
class Base {
void f() {}
};

class Derived : public Base {
void f() {}
};

ここで Base* pbが存在し、それがDerived型のインスタンスを指しているとすると、
pb->f(); はBase::f()を呼び出してしまう事になる。仮想関数を用いると、つまりBase側
で virtual void f() と宣言しておくと、
pb->f(); はちゃんとDerived::f()を呼び出してくれるようになる。

−−−−−以降は先生に出さないでね−−−−−
Effective C++の37項に詳しい説明があります。もしよかったらこれも読んでね。
759デフォルトの名無しさん:05/01/23 03:36:49
>>755
ちょっとヒマなので手伝ってみました。
人とかぶると嫌なので下の方にある課題です。


#include <utility>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <functional>

using namespace std;

// 11回課題1
template <int SIZE>
class ShowArray : public unary_function<const int*, void>
{
public:
 void operator () (const int* array) const
 {
  copy(array, array+SIZE, ostream_iterator<int>(cout, "\n"));
 }
};
760デフォルトの名無しさん:05/01/23 03:38:22
int main()
{
 int** array = newArray<3,5>()();
 // 11回課題2
 for_each(array, array+3, ShowArray<5>());
 deleteArray<3>()(array);
 return 0;
}

// 11回課題3
template <class T>
T f_11_3(T* first, T* last)
{
 sort(first, last);

 size_t maxCount = 0;
 T result;

 while (first != last)
 {
  const pair<T*, T*> range = equal_range(first, last, *first);
  const size_t count = distance(range.first, range.second);
  if (count > maxCount)
  {
   maxCount = count;
   result = *range.first;
  }
  first = range.second;
 }

 return result;
}
761アルペン:05/01/23 05:35:42
[1] 授業単元:C++入門

[2] 問題文(含コード&リンク):
A: 整数の配列dataを5個用意し、次の数値(12345,6789,9876,6543,4321)にて初期化を行い、テキストファイル(ファイル名はlist1.txt)に書き込む。
B: ファイルに書き込みが出来ているのを確認の後、再度list1.txtを開き、書き込まれた数値を配列yを作成し読み込む。また、その時に配列yの全ての要素の表示ができるソースコードの作成

[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ(バージョン):MicroSoft Visual Studio.Net2003
 [3.3] 言語:C++

[4] 期限:2005年01月26日00:00まで

[5] その他の制限:C++を習ってまだ日が浅いので、なるべくシンプルなソースであれば助かります。
 入院していた為内容についていけず、困っています。
 どうぞよろしくお願いします。
762デフォルトの名無しさん:05/01/23 06:28:19
>>761
C++とあるが、ofstreamやifstreamを使ってもいいのか?
それとも、fscanf()/fprintf()系を使うのか?

こいつは次スレでテンプレに入れた方がいいな。
763デフォルトの名無しさん:05/01/23 07:22:30
>>761 間違ってたらごめん
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int array1[5] = {12345,6789,9876,6543,4321};
ofstream fout("list1.txt");
if (!fout){
cout << "file open error\n";
return 1;
} else {
for (int i = 0; i < 5; i++){
fout << array1[i] << "\n";
}
fout.close();
cout << "list1.txtに書き込みました\n\n";
}
ifstream fin("list1.txt");
if (!fin){
cout << "file open error\n";
return 1;
} else {
int array2[5][16];
for (int i = 0; i < 5; i++){
fin >> array2[i][16];
cout << "[" << i << "] = " << array2[i][16] << "\n";
}
fin.close(); cout << "list1.txtから読み込みました\n";
}
return 0;
}
764デフォルトの名無しさん:05/01/23 08:23:18
>>761
シンプルなソースなんていうと、C++では初心者にとってはとんでもないものに
なるから、初心者向けのソースと書いた方がいいぞ?でないと次のようになる。(w
【A】(←多分AとBは個別にプログラムを作れということだと思うが)
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
int main() {
    int a[] = {12345, 6789, 9876, 6543, 4321};
    std::ofstream f("list1.txt");
    std::copy(a, a + sizeof(a) / sizeof(a[0]), std::ostream_iterator<int>(f, "\n"));
    return 0;
}
【B】
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
int main() {
    int a[5] = {0};
    std::ifstream f("list1.txt");
    std::copy(std::istream_iterator<int>(f), std::istream_iterator<int>(), a);
    std::copy(a, a + sizeof(a) / sizeof(a[0]), std::ostream_iterator<int>(std::cout, "\n"));
    return 0;
}
765デフォルトの名無しさん:05/01/23 08:33:39
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/110.txt
               いろいろな機能をつけて家計簿をつくれ
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ(バージョン):Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限:2005年1月24日 12:00

初心者のためほんとわからず、単位をとりたいのでどうかお願いします。
766デフォルトの名無しさん:05/01/23 09:20:53
よりによってconio.hか・・・
767デフォルトの名無しさん:05/01/23 10:12:38
>>766
お願いします
768デフォルトの名無しさん:05/01/23 11:32:37
どんな機能が欲しい? conioの使い方調べた?
769デフォルトの名無しさん:05/01/23 11:48:18
>>768
conioはなんか色を表示できるんですよね?微妙に、貼り付けたtxtは自分で
手を加えたがそれ以上はできなかった・・
機能的には、表で表示したり、全収支を計算、表示したりしたいんですよね。
あとは黒字とか赤字も出せたら家計簿みたいですよね。すいませんわがままで。
770デフォルトの名無しさん:05/01/23 12:05:28
>769
conioは背景色や表示位置も設定できるし、ウィンドウシステムも作れる。
ともかく、以下のような関数を作ってみよ。
入力を要求する関数。
金額を表示する関数。
罫線などで表や箱を描く関数。
771デフォルトの名無しさん:05/01/23 12:16:36
よくわかんないけど、入力と金額は、すでにtxt でできてませんか?
772デフォルトの名無しさん:05/01/23 12:17:51
文字列を逆順に帰る関数なのですが、
下の関数部にmain文をつけて1つのプログラムにして頂けませんか?
よろしくお願いします。
void strrev(char s[])
{
int i;
int n = strlen(s);
char c;
for(i=0;i<=n/2;i++){
c = s[i];
s[i] = s[n-1-i];
s[n-1-i] = c;
}
}
773デフォルトの名無しさん:05/01/23 12:22:04
>771
conio使えば、もっと付加価値が付けられるだろ? それに動作を共通化したい意図もある。
774デフォルトの名無しさん:05/01/23 12:28:51
>772
n-1-iの区間チェックができていない。
仮引数の配列型はできればポインタ型に直す。
mainでは、scanfで読み込んだ文字列を使え。
775ぷ ◆wbKIYOMIZU :05/01/23 12:36:41
NT/2000/XPで動かす分にはconioは地雷以外の何でもない
776デフォルトの名無しさん:05/01/23 12:37:26
>>773
すいません Cをぜんぜん理解してないのでわからないので
具体的に示してもらってもよいですか?
777デフォルトの名無しさん:05/01/23 12:41:44
>775
おまいらが低レベルコンソール入出力API使って、NT系でも動くconioを作ればいいだろう?
778デフォルトの名無しさん:05/01/23 12:48:09
>>777
777オメ
てことでオマイに任せた
779デフォルトの名無しさん:05/01/23 13:01:07
>>772
#include <stdio.h>
#include <string.h>
int main()
{
int len,i;
char temp,str[100];
scanf("%s",str);
len=strlen(str);
for(i=0;i<len/2;i++)
{
temp=str[i];
str[i]=str[len-1-i];
str[len-1-i]=temp;
}
printf("%s\n",str);
return 0;
}
780デフォルトの名無しさん:05/01/23 13:19:06
win2k以降ならconioは、アプリ互換性の設定で使えるかもな?独自拡張部分はしらんが
http://www.monyo.com/technical/windows/25.html
http://www.google.co.jp/search?hl=ja&c2coff=1&q=conio.h+-%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90+%28%22windows+nt%22+OR+%22windows+
781デフォルトの名無しさん:05/01/23 13:34:55
#include <stdio.h>
#include <string.h>
void rev(char *s)
{
int i,n;
char c;
n = strlen(s);
for(i=0;i<n/2;i++)
{
c = s[i];
s[i] = s[n-1-i];
s[n-1-i] = c;
}
}
int main()
{
char str[100];
scanf("%s",str);
rev(str);
printf("%s\n",str);
return 0;
}
782デフォルトの名無しさん:05/01/23 13:47:41
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/122.txt
>>765のを修正した物
誰か続きよろしく
783デフォルトの名無しさん:05/01/23 13:52:33
>>779,781
ありがとうございました。
784デフォルトの名無しさん:05/01/23 14:36:03
#include
int
main() {
char str[]="123456789abcdef";
int i;
for(i=0;str[i]!='\0';i++){
};
printf("String length is %d\n",i);
}

これの文字をカウントする部分を別関数に分離して、
同じ結果を得られるようにしたいのですが、うまくいきません。
どなたか教えてください。よろしくお願いします。
785デフォルトの名無しさん:05/01/23 14:41:47
#include <stdio.h>

int my_strlen(const char* str)
{
int i;
for (i=0;str[i]!='\0';i++);
return i;
}

int main()
{
char str[]="123456789abcdef";
printf("String length is %d\n", my_strlen(str));
return 0;
}
786デフォルトの名無しさん:05/01/23 14:44:55
#include<stdio.h>
int strength(char *);

int main(void) {
char str[]="123456789abcdef";

printf("String length is %d\n"strlength(str));
return 0;
}

int strlength(char* str){
int i=0;
for(i=0;str[i]!='\0';i++)
;
return i;
}
787デフォルトの名無しさん:05/01/23 15:02:14
レス感謝です。
>>785
constで読み取りを追加しているのは、どういう意味があるのですか?

>>786
2行目で(char *)ってなってますけど、これってアリなんですか?

さらに質問すいません。
char* str == char *str なんですか?
788デフォルトの名無しさん:05/01/23 15:07:19
関数は内容を書き換えないと宣言している。C++では少し速くなるかも。
あり。
あり。
789デフォルトの名無しさん:05/01/23 15:19:37
ありがとうございます。
やっぱり本よりリアルな返答の方がタメになります。
これからもよろしくお願いします。
790デフォルトの名無しさん:05/01/23 15:21:26
>>789
ここは幼稚園や小学校じゃ無いんだ
人に聞く前に自力で学ぶ努力しろ
791638 ◆gJ1B.hGsLk :05/01/23 16:07:39
先生の返信がかえってきました。

第三回課題1〜3を受けとりました.

第八回の課題1〜4, 第九回の課題1,2を受けとりました.
第七回の課題はもう少し問題をしっかり読んで理解して下さい.
↑どこまで要求するんだこの先生は・・・。
>>747
添削されてかえってくることはありませんでした。
ありがとうございます!

>>756-758
なんかすごい勉強になりますね…。
ありがとうございます。
Effective C++は有名な本ですよね。
お金に余裕ができたら買って読んでみますね。
無理そうなら友達のを…。

>>759-760
本当にありがとうございます。
みなさんのソースをみていると勉強になります。
792デフォルトの名無しさん:05/01/23 16:16:55
>>765
結構長くなりそうだから、ファイル分割してよい?
後、カーソル移動や文字色変化にwindows.hも使ってよい?
793デフォルトの名無しさん:05/01/23 16:24:41
>>792
お願いします
794デフォルトの名無しさん:05/01/23 16:33:42
>795
分割コンパイルだろ?いいよ。機能ごとにソースを分け。
出題者にconioとかwinとか使えって言われた?あまり無理しなくてもいいよ
795デフォルトの名無しさん:05/01/23 16:45:11
え?俺?
796792:05/01/23 16:45:40
>>765
後、ポインタ、構造体、ファイル入出力とか使っても大丈夫?
難しい使い方はしないけど。

>>794
自分、小学生の時に3日ぐらい使った以来、家計簿を使っていなかったけど、
自分が使う場合にどういう機能があると使いやすいかなと思って考えると、
設計の形が見えてきて、カーソル移動は描画の速度を出すために、
色は単純に見やすくなるかなと思って使いたいと思った。
797デフォルトの名無しさん:05/01/23 16:52:23
すいません あまり難しくなくお願いします。conioはOKですが、winは習いませんでした
ポインタ、構造体、ファイル入出力は大丈夫です。お願いします。
798792:05/01/23 17:07:18
>>797
windos.h使わない方法を考えてみる。
ただ、winのカーソル移動の方は使わないと、表示の更新がかなり遅くなる。
799デフォルトの名無しさん:05/01/23 17:10:03
>797
ひとまず、次のような関数を作りなさい。まだconioのような飾りは不要です。

"何やらを入力〉"と表示して金額や文字列の入力を促し、入力が終わったら入力内容を返す関数。

金額をきれいに表示する関数(\を付け、','で区切り、負を考慮する)。
800デフォルトの名無しさん:05/01/23 17:13:28
>>798
遅くても大丈夫です すいません

801792:05/01/23 17:30:19
>>800
了解。
802デフォルトの名無しさん:05/01/23 17:37:19
C言語ってPS2かPSどっちのゲームですか?
803デフォルトの名無しさん:05/01/23 17:38:21
>>802
質問の意図が不明です。
804デフォルトの名無しさん:05/01/23 18:37:14
で、どこまでできた?
805792:05/01/23 18:51:22
>>804
僕?
今は大まかな流れをイメージする所まで。ちゃんと間に合わす。

>>765
conio.hは必ず使わないといけない訳ではないよね?
カーソル移動、色変えを使わない場合は、
直接コンソール入力(Enterを押さない入力)のメリットが殆どない。
806デフォルトの名無しさん:05/01/23 19:17:17
>>791
そうか、そりゃあよかったな。
ここのスレでややディープなC++の課題が出たのはほとんどなかったから。
後はその課題7の同じ型か違う型かを判別するoperator==だけか。
もう少しちゃんと読んでみるよ。
807デフォルトの名無しさん:05/01/23 19:57:08
>>791
先生は多分メンバ関数thistype()を使って欲しかったのではないかと気づいた。
こんな感じになるかな。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/123.txt

課題7-2も同じように変更しといてね。

あ、それとmain()関数にoperator==をテストする行を付け加えた方がいいかも。
int main()
{
IntPair ip1(1, 1), ip2(1, 2);

std::cout << std::boolalpha << ip1.thistype(ip2) << std::endl;
std::cout << (ip1 == ip2) << std::endl;
std::cout << (ip1 > ip2) << std::endl;
std::cout << (ip1 >= ip2) << std::endl;
std::cout << (ip1 < ip2) << std::endl;
std::cout << (ip1 <= ip2) << std::endl;
}
808デフォルトの名無しさん:05/01/23 20:18:12
科目:プログラミング言語論
以下のプログラムをクラスを使って書き換えよ。
・ 構造体ではなくクラスを用いること。(データメンバは全てプライベートとすること。)
・ initShukujitsu()ではなく、コンストラクタを用いてデータメンバの値を設定すること。
・ dispShukujitsu()ではなく、メンバ関数disp()によって内容を表示すること。
よろしくお願いします・・。
#include <iostream>
#include <cstring>
using namespace std;
class Shukujitsu {
private:
int tsuki;
int hi;
char meishou[20];
public:
void initShukujitsu(Shukujitsu *s)
{
s->tsuki = 1;
s->hi = 1;
strcpy(s->meishou, "元旦");
}
void dispShukujitsu(Shukujitsu *s)
{
cout << s->tsuki << "月" << s->hi << "日" << s->meishou << endl;
}
int main()
{
Shukujitsu shuku;
initShukujitsu(&shuku);
dispShukujitsu(&shuku);
return(0);
}
809デフォルトの名無しさん:05/01/23 20:23:10
>>791
更に課題7-1を改良。
>>807だと、IntPairから派生したクラスを型が異なると判別できないので、
そこを直した。こういう時typeof演算子があればいいのにと思う。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/124.txt
810デフォルトの名無しさん:05/01/23 21:05:19
#include <iostream>
#include <cstring>
using namespace std;
class Shukujitsu {
private:
    int tsuki;
    int hi;
    char meishou[20];
public:
    Shukujitsu() : tsuki(1), hi(1)
    {
        strcpy(meishou, "元旦");
    }
    void disp()
    {
        cout << tsuki << "月" << hi << "日" << meishou << endl;
    }
}

int main()
{
    Shukujitsu shuku;
    shuku.disp();
    return 0;
}
811デフォルトの名無しさん:05/01/23 21:31:05
>>810
ありがとうございます。
なんか、ヒントに
private:
int tsuki;
int hi;
char meishou[20];
public:
Shukujitsu() ; Shukujitsu::Shukujitsu(){}
void Shukujitsu::disp(){}

とか書いてあるんですが、サッパリわからんです…。
812デフォルトの名無しさん:05/01/23 21:49:37
[1] 授業単元: プログラミング演習I
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:Cのみ
[4] 期限:2004年1月24日13:00まで/無期限 のいずれか
[5] その他の制限:
円周率をマチンの公式と級数展開を使って出来るだけ多くの桁数を
計算し表示させる問題でひとつの桁をひとつの配列に格納し作成せよ。
なんですが桁が格納されている配列を足すときの繰上げ、繰り下げがうまくいきません
813812:05/01/23 21:54:46
マチンの公式と級数展開の式は
/* arctan(1/p) = 1/p - 1/(3p^3) + 1/(5p^5) - 1/(7p^7)... */
/* pi/4 = 4arctan(1/5) - arctan(1/239) */
です。
814デフォルトの名無しさん:05/01/23 22:50:06
>>811
そのヒントの通りにした。メンバ関数をクラス宣言内にまとめて書くか別に書くかの違い。
#include <iostream>
#include <cstring>
using namespace std;
class Shukujitsu {
private:
    int tsuki;
    int hi;
    char meishou[20];
public:
    Shukujitsu();
    void disp();
};

Shukujitsu::Shukujitsu() : tsuki(1), hi(1)
{
    strcpy(meishou, "元旦");
}

void Shukujitsu::disp()
{
    cout << tsuki << "月" << hi << "日" << meishou << endl;
}

int main()
{
    Shukujitsu shuku;
    shuku.disp();
    return 0;
}
815811:05/01/23 23:33:09
>>814
ありがとうございます。
816デフォルトの名無しさん:05/01/24 00:41:37
>>800
conioはつかわなくてもよいのかな?なんかもともと先生がくれた参考にするプログラムでは、
使われてるんですよね

817アルペン:05/01/24 00:41:51
<a href="http://pc5.2ch.net/test/read.cgi/tech/1105541524/762">>>762</a>
<a href="http://pc5.2ch.net/test/read.cgi/tech/1105541524/763">>>763</a>
<a href="http://pc5.2ch.net/test/read.cgi/tech/1105541524/764">>>764</a>

ご回答、アドバイスを頂いた皆さん、どうもありがとうございました。

fstream、ifstreamを使うなどの詳細を書き忘れてしまって、すいません。
時間があるときに自分でも作ってみます。

またお世話になるかも知れませんが、どうぞよろしくお願いします。
818& ◆TuixUkOm82 :05/01/24 00:45:35
すいません、リンクはタグだと思ってました・・・(2ch初心者です)
819デフォルトの名無しさん:05/01/24 01:05:14
初めて見たw
ドンマイ
820764:05/01/24 01:13:46
>>817
ま、真面目さが伝わっていいじゃないか(w
821デフォルトの名無しさん:05/01/24 01:29:08
> を &gt; にしてたら俺泣いたよ。
822638 ◆gJ1B.hGsLk :05/01/24 03:26:37
>>806-807>>809
結構深い内容ですよね。
こんな内容の授業やってる割には、Cの二次元配列もわからないくらいのヒトが多数います。
正直ついていけてるヒトは2割くらいの世界です。

ありがとうございます。
今度こそ、受け取ってくれればいいのですが…。
823_:05/01/24 03:48:02
環境Mac OS]
言語 C
100*100のテンプレートを640*480の画像に走査させて
テンプレートマッチングを行えという問題がわかりません。
どなたか教えていただけないでしょうか?
ちなみにテンプレート及び画像は.rawです
824デフォルトの名無しさん:05/01/24 06:09:44
閾値とか適当でいいのか?
825792:05/01/24 07:01:10
やばい、後5時間か・・。
まだ、日データの読み書きの後半の所。
間に合うかどうか。
826デフォルトの名無しさん:05/01/24 09:43:41
どうかお願いします
827792:05/01/24 11:40:04
>>765
全然進まなかったorz。すいまそん。余り寝ないでやったんだけど。
http://kansai2channeler.hp.infoseek.co.jp - 125.lzh
828792:05/01/24 11:42:46
>>827
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
の38番ね。日モードのみで、入力と削除が出来るだけ・・。
829デフォルトの名無しさん:05/01/24 11:57:08
>>828
ほんとありがとうございました。
830デフォルトの名無しさん:05/01/24 12:42:20
>>680
超遅レスだけど
lim[x->0]sinx/x
=lim[x->0](d(sinx)/dx)/(d(x)/dx)
=lim[x->0]cosx/1
=1 _
831デフォルトの名無しさん:05/01/24 12:43:47
>>830
受験生ですか?
832デフォルトの名無しさん:05/01/24 12:51:39
最近の高校生はロピタルの定理を習うのか?
833デフォルトの名無しさん:05/01/24 12:57:59
教科書じゃ習わないが(平均以上の)普通の高校生なら知ってる
834デフォルトの名無しさん:05/01/24 12:58:06
>>832
は?簡単なんだからそれくらい習うだろ。
っていうか、君、三流私大出身じゃね?
835デフォルトの名無しさん:05/01/24 12:58:20
漏れが高校生のときは習ったよ
836デフォルトの名無しさん:05/01/24 13:00:15
>>834が、何がそんな気に入らなくて煽り口調なのか理解できない。
837デフォルトの名無しさん:05/01/24 13:00:38
>>830
フォロー先628の間違いじゃないか
838デフォルトの名無しさん:05/01/24 13:01:21
>>836
暇なんだろ
839デフォルトの名無しさん:05/01/24 13:01:56
>>834は学歴コンプレックスかなんかだろ
>>832のから完全にずれてるし
ハゲ気にしてる香具師がハの発音を聞いて怒り狂うようなもんだろ
840デフォルトの名無しさん:05/01/24 13:06:42
あはは、何釣られてんの?ばかばっかだな。
841デフォルトの名無しさん:05/01/24 13:07:35
こういう展開のときっていつも一人だけageてるんだよね
842デフォルトの名無しさん:05/01/24 13:21:10
>>834=>>840
で合点して頂けたでしょうか?
843デフォルトの名無しさん:05/01/24 13:26:37
判ってて突っ込まないだけだろうと(ry
844デフォルトの名無しさん:05/01/24 13:44:08
ageとくか(謎)
845352:05/01/24 14:52:20
誰か答えていただけないでしょうか?
まだ解決していない問題が3-4と4と二つあるのですが。
846デフォルトの名無しさん:05/01/24 15:22:00
>>845
IVやってみたけど、こんなんでいいの?
#include <stdio.h>
int main()
{
 double h = 1, x, y=0;
 printf("x = ");
 scanf("%lf", &x);
 while (h >= 0.00001) {
  y += h;
  if ((y+1)*(y+1) > x) {
   y-=h;
   h/=10;
  }
 }
 y++;
 printf("√x = %1.5lf\n", y);
 return 0;
}
847デフォルトの名無しさん:05/01/24 15:22:16
>845
誰か=自分。
ほとほどに頑張れよ
848352:05/01/24 15:33:36
考えてもさっぱりわからないので。
自分の手に負えるところはすでに終わってるんですが…
849352:05/01/24 15:37:01
>>846さん
ビルドしてみたらエラーが40個ぐらい出ました。
error C2018: 文字 '0x81' は認識できません
error C2018: 文字 '0x40' は認識できません。
この二つが三行目から毎行続きます。
850352:05/01/24 15:39:43
>>846さん
整形しなおしたら動きました。ありがとうございました。
851デフォルトの名無しさん:05/01/24 15:48:35
>>352
3-3ができて何で3-4ができないんだ
852デフォルトの名無しさん:05/01/24 16:25:24
>>352
>>359にあるだろ。>>359にあやまれスルーしてごめんなさいってあやまれ!!
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/126.txt
853852:05/01/24 16:31:58
リンク先のソース
訂正前:fprintf(stderr,"Usage:%s  2進数小数\n",argv[0]);
訂正後:fprintf(stderr,"Usage:%s 10進数小数\n",argv[0]);
854デフォルトの名無しさん:05/01/24 16:50:30
>359さん、先ほどは失礼致しました。大変参考になりました。有難うございました。
855デフォルトの名無しさん:05/01/24 17:40:29
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Borland
 [3.3] C言語
[4] 期限:2005年2月1日まで

10以下の配列に入力された数値を
ポインタを使って最大値と最小値を出力しなさい。
データの終わりは-100が入力された時とする。

<出力>
---------------
15
21
7
38
12
54
-100

Min = 7
Max = 54


よろしくお願いします。
856デフォルトの名無しさん:05/01/24 17:53:25
char MacAdress[6];
これのなかに16進数で、
[A1][A2][A3][A4][A5][A6][X0]
と値があるのですが、
これをそのまま文字列として
[A1][A2][A3][A4][A5][A6][X0]
と取り出すことは可能でしょうか?
こういう感じで、文字型に変換しようとしてもうまくいきません。
sprintf(a,"%s",MacAdress[0]);
857デフォルトの名無しさん:05/01/24 18:02:19
>>856
パンツ
858デフォルトの名無しさん:05/01/24 18:03:20
>856
%02xか%02Xを並べて使え。
859デフォルトの名無しさん:05/01/24 18:06:28
表示させたいだけなら%X使えばいい
860デフォルトの名無しさん:05/01/24 18:16:21
>855 てきとー
#include<stdlib.h>
#include<stdio.h>
int compare( const void* elem1, const void* elem2 ) ;

int main(void){
int cnt = 0 ;
char buf[255] ;
int ans[11] ;
while( cnt != 10 && ans[cnt-1] != -100 ) {
fgets( buf, sizeof buf,stdin ) ;
ans[cnt] = atoi( buf ) ;
cnt ++ ;
}
qsort( (void*)ans, cnt, sizeof(int), compare ) ;

printf("最小:%d\n" ,ans[0]) ;
printf("最大:%d\n" ,ans[cnt - 1]) ;

return 0 ;
}
int compare( const void* elem1, const void* elem2 ){
return ( (*(int*)elem1) ) > (*(int*)elem2) ? 1 : -1 ;
}
861352:05/01/24 18:39:52
>>852さん
スルーしてませんよ。
途中の流れ見てもらえば分かるかと思いますが、動作しなかったというかビルド出来なかったんです
862デフォルトの名無しさん:05/01/24 19:22:18
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://www.geocities.jp/paid_to_chobits/
[3] 環境
 [3.1] OS:windowsまたはLinux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:2005年01月25日15:00
[5] その他の制限:入力サンプルがきちんと動く(特に値が大きいとき)
大体はできるんですが値が大きくなると動きません。お願いします。
863デフォルトの名無しさん:05/01/24 19:43:41
>>856 はどのようにすればいいですか? 自分なりに考えて、やってうまいのが思いつきません。
わからないです

void hoge(int unko, char str[] ){
int cnt = 0 ;
int temp, max, loop ;
char wrk ;

while(( temp = ( unko >> ( 4 * cnt )) & 0xf )) {
if( temp >= 0xa )
str[cnt] = temp + 0x37 ;
else
str[cnt] = temp + '0' ;

cnt ++ ;
}
for( max = cnt, loop = ( max / 2 ) ; loop > max - cnt ; cnt -- ) {
wrk = str[cnt - 1] ;
str[cnt - 1] = str[max - cnt] ;
str[max - cnt] = wrk ;
}
str[max] = '\0';
}
864デフォルトの名無しさん:05/01/24 19:47:43
>860
ポインタ使ってない
865デフォルトの名無しさん:05/01/24 19:50:45
>10以下の配列に入力された数値を

int だよな? tbl[] に入ってるとする。

int i,min,max,minP,maxP;
min=max=tbl[0];
minP=maxP=0;
for(i=1; i<numOfItem; ++i){
if(min>tbl[i]){min=tbl[i];minP=i;}
if(max<tbl[i]){max=tbl[i];maxP=i;}
}

printf("最小:%d\n" ,tbl[minP]) ;
printf("最大:%d\n" ,tbl[maxP]) ;
866デフォルトの名無しさん:05/01/24 19:51:03
>863
unkoをhogeする関数って何だよ?
867デフォルトの名無しさん:05/01/24 19:53:00
>865
ポインタ使ってない
868865:05/01/24 19:53:36
>867
869865:05/01/24 19:55:35
int i,*min,*max;;
min=max=&tbl[0];
for(i=1; i<numOfItem; ++i){
if(*min>tbl[i])min=&tbl[i];
if(*max<tbl[i])max=&tbl[i];
}

printf("最小:%d\n" ,*minP) ;
printf("最大:%d\n" ,*maxP) ;
870865:05/01/24 19:57:34
うつだ...

>printf("最小:%d\n" ,*minP) ;
>printf("最大:%d\n" ,*maxP) ;

そんな変数使ってねーし
871863:05/01/24 19:59:00
入力はこのようにしました。とにかくなんかもっと良いやり方なかですか?
int main(void) {
char str[255] ;
int data ;
scanf("%x" ,&data) ;
hoge( data, str ) ;
printf( "%s\n" ,str ) ;
return 0 ;
}
872デフォルトの名無しさん:05/01/24 20:01:16
まぁ、そういう日もあるさ!!!!!!
873デフォルトの名無しさん:05/01/24 20:02:00
>871
>858
874デフォルトの名無しさん:05/01/24 20:05:20
そのやり方がわかりません。
875デフォルトの名無しさん:05/01/24 20:09:25
scanfはやめとけ
876デフォルトの名無しさん:05/01/24 20:11:06
>>856
>これのなかに16進数で、
>[A1][A2][A3][A4][A5][A6][X0]
>と値があるのですが、

X0 ってなんだ?
877デフォルトの名無しさん:05/01/24 20:11:07
「scanfはやめとけ」って書くのはやめとけ
878デフォルトの名無しさん:05/01/24 20:11:51
はいはい。
879デフォルトの名無しさん:05/01/24 20:12:05
>876

酒だろ?
880デフォルトの名無しさん:05/01/24 20:13:23
>>878>>875に対して。

>>876
A B C D E F の文字のどれか、という意味かと。
881863:05/01/24 20:25:02
雑談してるヒマあったら答えろよ
882デフォルトの名無しさん:05/01/24 20:25:20
>>856
#include <stdio.h>
#include <string.h>

char* hoge(const char* input, int n, char* output)
{
    int i;
    char temp[3] = {};
    for (i = 0; i < n; i++)
    {
        sprintf(temp, "%02X", *(input + i));
        strcat(output, temp);
    }
    return output;
}

int main(void)
{
    const char input[] = "Hello!";
    char output[128] = {0};
    printf("%s", hoge(input, strlen(input), output));
    return 0;
}
883デフォルトの名無しさん:05/01/24 20:37:17
>scanf("%x" ,&data) ;
>printf( "%s\n" ,str ) ;

...つりか?つりだな
884デフォルトの名無しさん:05/01/24 20:41:07
885デフォルトの名無しさん:05/01/24 20:59:51
>>830
超遅レスだし板違いだけど
高校レベルでは三角関数の微分の定義に
lim[x->0]sinx/x = 0
を使ってるからこれを示すためにロピタルの定理(の中で三角関数の微分)を使うのはおかしい
886デフォルトの名無しさん:05/01/24 21:11:20
>char temp[3] = {};

>return output;
!?
887デフォルトの名無しさん:05/01/24 21:21:42
char temp[3] = {};は間違い。" = {}"を消して。
return output;は作った文字列を利用しやすいようにと思って。
888デフォルトの名無しさん:05/01/24 21:24:50
実行結果
48656C6C6F21
889デフォルトの名無しさん:05/01/24 22:19:24
>>885
ありえなーい。
サインカーブの原点付近の傾斜はどう見たって45度。
890デフォルトの名無しさん:05/01/24 22:20:08
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
a.キーボードから20個の数字を配列に入力し、その最大値・最小値を表示
b.          〃               、大きい順に並べ替え、それを表示
c.二次元配列のデータを表示し、各行・各列の和を求める
 (↓のように表示。4列目・4行目が和)
 1  2  3   6
 4  5  6  15
 7  8  9  24
12 15 18

[3] 環境 
 [3.1] OS:Windows XP Professional
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:Borland C++ Builder
[4] 期限:2005年1月25日18:00まで
[5] その他の制限:ありません

すいません、お願いします
891デフォルトの名無しさん:05/01/24 22:27:27
どこかで誰かが”C/C++の宿題”を片付けます 38代目

俺の一流大学にはそんなもの無いんだが(w
892デフォルトの名無しさん:05/01/24 22:28:05
それでJava厨だったら±0だが。
893デフォルトの名無しさん:05/01/24 22:38:07
Java"厨"なら-な気がする
894デフォルトの名無しさん:05/01/24 22:56:41
d *= 2
とか
a /= 2
とかってどういう意味なんですか?
895デフォルトの名無しさん:05/01/24 22:58:56
>>890
CなのかC++なのかどっちだ

>>894
d*=2 d=d*2
a/=2 a=a/2

=や*や/の意味すらわからないとか言わないよな
896デフォルトの名無しさん:05/01/24 23:29:10
【質問テンプレ】
[1] 授業単元:C言語入門

[2] 問題文:
自宅から学校までの道のりは片道190円です(往復380円)
sdddd年smm月sdd日〜syyyy年emm月sdd日まで、毎日学校に通う(休日、休日は考えなくてよい)と、運賃はいくらになるか求めるソースコードを作りなさい

[3] 環境
 [3.1] OS:WindowsXP 
 [3.2] コンパイラ(バージョン): Microsoft VisualStdio.NET2003
 [3.3] 言語:C++
[4] 期限:2005年01月30日00:00まで
[5] その他の制限:
◆#include<iostream>と#include<string>程度しか習っていません。

◆総日数を扱う部分と運賃の計算を行う部分は関数化を行います。
(ex int get_day(開始年、開始月、開始日、終了年、終了月、終了日)といった風に)


12ヶ月の日付最大値を格納する部分は、自分では下記のように考えました(たぶん間違っていると思いますが・・。)
int season[12]={31,28,31,30,31,30,31,31,30,31,30,31};
とにかく初心者なので、どうにも作っていく流れが分からず、途方にくれています。

どうぞよろしくお願い致します。
897デフォルトの名無しさん:05/01/24 23:32:02
>896
なかなかおもろい出題するじゃないか。感心したゾ
898デフォルトの名無しさん:05/01/25 00:18:59
休日を考えないというのは、土日や夏休みも学校に行き続けるんだね?
899デフォルトの名無しさん:05/01/25 00:21:10
うるう年は?
900デフォルトの名無しさん:05/01/25 00:46:30
>>890
1.
#include <algorithm>
#include <iostream>
int main()
{
    int input[20];
    for (int i = 0; i < sizeof(input) / sizeof(input[0]); ++i) std::cin >> input[i];
    std::cout << "Min:" << *std::min_element(input, input + 20) << "Max:" << *std::max_element(input, input + 20);
    return 0;
}
2.
#include <algorithm>
#include <functional>
#include <iostream>
int main()
{
    int input[20];
    for (int i = 0; i < sizeof(input) / sizeof(input[0]); ++i) std::cin >> input[i];
    std::sort(input, input + sizeof(input) / sizeof(input[0]), std::greater<int>());
    std::cout << "sorted:\n";
    for (int i = 0; i < sizeof(input) / sizeof(input[0]); ++i) std::cout << input[i] << std::endl;
    return 0;
}
901デフォルトの名無しさん:05/01/25 00:47:01
>>890
3.
#include <iomanip>
#include <iostream>
#include <iterator>
int main()
{
    int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    static const int row = sizeof(a[0]) / sizeof(a[0][0]), col = sizeof(a) / sizeof(a[0]);
    int sum_row[row] = {0}, sum_col[col] = {0};
    for (int i = 0; i < col; ++i)
        for (int j = 0; j < row; ++j)
            sum_row[i] += a[i][j];
    for (int i = 0; i < col; ++i)
        for (int j = 0; j < row; ++j)
            sum_col[j] += a[i][j];
    for (int i = 0; i < col; ++i)
    {
        for (int j = 0; j < row; ++j)
            std::cout << std::setw(3) << a[i][j];
        std::cout << std::setw(3) << sum_row[i] << std::endl;
    }
    for (int i = 0; i < row; ++i)
        std::cout << std::setw(3) << sum_col[i];
}
以上。
902デフォルトの名無しさん:05/01/25 00:55:00
むしろ
>[1] 授業単元:C言語入門
> [3.3] 言語:C++
ってことに感心した
903デフォルトの名無しさん:05/01/25 00:59:50
反抗的だなw
904デフォルトの名無しさん:05/01/25 01:06:46
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ:Borland
 [3.3] 言語:C言語
[4] 期限:2005年1月30日まで

2次元配列に野球の得点をそれぞれ格納し、
ポインタを使ってそれぞれの合計得点を出力しなさい。
後攻の点数が9回表を終わって
先攻より上回る場合は9回裏は入力させないこと。

<入力>
1,0,0,0,1,0,0,2,0
0,0,0,1,0,0,2,0,2
<出力>

1回表 = 1
1回裏 = 0
2回表 = 0
2回裏 = 0

--- 省略 ---

9回裏 = 1
先攻の得点 = 4
後攻の得点 = 5


よろしくお願い致します。
905904:05/01/25 01:09:00
9回裏 = 2

でした。

よろしくお願い致します。
906デフォルトの名無しさん:05/01/25 01:19:55
>>902
すいません、C++入門です。
自分で書いたのを見て凹みました・・。

閏年も設定しなくていいと書いてあります。
休日も来い、というのは最初「土日」は休み、という設定が難しかったので変更されたものです。
907890:05/01/25 01:20:44
>>900-901
ご協力いただき、ありがとうございます
今日の試験に使わせていただきます
908デフォルトの名無しさん:05/01/25 01:22:09
[1] 授業単元: c言語
[2] 問題文
1、多角形を構成している頂点列を、自己参照構造体を使って線形リストで表現し
頂点データの入出力をせよ

2、1のプログラムを基にして多角形の各辺を二等分する位置に新しい頂点を生成し
それをリスト構造に追加する関数を作成せよ

3、元の頂点をリスト構造から削除する関数を作成せよ。

1は解けましたが2と3がわかりません、よろしくお願いします。
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ(バージョン): 大学のコンピュータなのでわかりません
 [3.3] 言語:C言語
[4] 期限:2005年1月25日13:00まで
[5] その他の制限:
909900-901:05/01/25 01:22:36
>>907 GoodLuck
910デフォルトの名無しさん:05/01/25 01:30:41
int main(void){
int cnt,sc[2][9+1]={0};
scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d",
&sc[0][1],&sc[0][2],&sc[0][3],&sc[0][4],&sc[0][5],&sc[0][6],&sc[0][7],&sc[0][8],&sc[0][9]);
scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d",
&sc[1][1],&sc[1][2],&sc[1][3],&sc[1][4],&sc[1][5],&sc[1][6],&sc[1][7],&sc[1][8],&sc[1][9]);
for(cnt=1; cnt<=9; ++cnt){
sc[0][0]+=sc[0][cnt];
printf("%d回表 = %d\n", cnt, sc[0][cnt]);
if(sc[1][0]<=sc[0][0]){
sc[1][0]+=sc[1][cnt];
printf("%d回裏 = %d\n", cnt, sc[1][cnt]);
}
}
printf("先攻の得点 = %d\n", sc[0][0]);
printf("後攻の得点 = %d\n", sc[1][0]);
return 0;
}
911デフォルトの名無しさん:05/01/25 01:32:29
>>906
何故問題文を省略する?
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
字も読めないのか?
912デフォルトの名無しさん:05/01/25 01:55:32
>910

問題文が正確だとすると
>先攻より上回る場合は9回裏は入力させないこと。
であって「出力させない」こと、ではない。
よってもまえ間違ってるぞw
913デフォルトの名無しさん:05/01/25 02:30:56
>>890 aとbな。
#include <stdio.h>
int main() {
int array[20];
int i,j,tmp, max=0, min=0;
printf("数字を入力してたもれ\n");
for(i=0; i<20; i++) {
scanf("%d", &array[i]);
if(max < array[i]) max = array[i];
if(min > array[i]) min = array[i];
}
/*並べ替え*/
for(i=0; i<20; i++)
for(j=i+1; j<20; j++)
if(array[i] <array[j]) {tmp = array[j]; array[j] = array[i]; array[i] = tmp;}

printf("最大値は %d 最小値は %d\n",max, min);
printf("並べると\n");
for(i=0; i<20; i++) printf("%d ", array[i]);
printf("\n");

return 0;
}
914デフォルトの名無しさん:05/01/25 02:32:45
>for(i=0; i<20; i++)
>for(j=i+1; j<20; j++)

ダメだろw
915デフォルトの名無しさん:05/01/25 02:35:32
どこが?
916デフォルトの名無しさん:05/01/25 02:37:13
1のループが1回多いだろ?
917デフォルトの名無しさん:05/01/25 02:37:42
なるほど
918デフォルトの名無しさん:05/01/25 02:44:12
[1] 授業単元: C言語
[2] 問題文:
  名前の頭文字を読み込み、それに該当するもののデータのみプリントせよ

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/129.txt 
ここまでやったんですが、最後の構造体へのポインタの渡し方?がよくわかりません

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ:lcc-win
 [3.3] C言語
[4] 明日昼まで
919デフォルトの名無しさん:05/01/25 02:47:24
>918
問題がわかりません
920918:05/01/25 02:52:26
>>919
頭文字を1文字読み込み、構造体データのa[].nameの頭文字がそれと同じならその構造体データを表示せよ
という問題です
わかりにくくてすみません・・・
921デフォルトの名無しさん:05/01/25 02:57:37
>>918
 printf("input initial\n");
 c=getchar();

 printf("%5s%5s%5s%5s%5s\n",t[0].name,t[0].sex,t[0].age,t[0].tel,t[0].mail);

 i=0;
 while(pa->name!=NULL){
  if (pa->name[0] == c) {
   printf("%10s%5s%3d%20s%30s\n",pa->name,pa->sex,pa->age,pa->tel,pa->mail);
  }
  pa++;
 }
922デフォルトの名無しさん:05/01/25 02:59:03
i=0;余計だった('A`)
923デフォルトの名無しさん:05/01/25 03:00:29
> i=0;
プ
924デフォルトの名無しさん:05/01/25 03:01:54
エラーが出るんですが・・・
925デフォルトの名無しさん:05/01/25 03:02:59
エラーの内容を書けと
926デフォルトの名無しさん:05/01/25 03:03:04
どんな
927デフォルトの名無しさん:05/01/25 03:04:37
メッセージが英語?なのでよくわかりません
928デフォルトの名無しさん:05/01/25 03:05:15
張れ
929918:05/01/25 03:10:41
>>921
助かりました!ありがとうございます
どうもポインタがイマイチ理解できてなくて・・・
930デフォルトの名無しさん:05/01/25 03:15:04
>>927
・・・
931アルペン:05/01/25 03:31:52
先日はどうもありがとうございました。
申し訳ありませんが、今回もお世話になります。


[1] 授業単元:C++入門

[2] 問題文(含コード&リンク):

次の条件でタクシーの料金を計算するプログラムを作りなさい
◆最初の1500mは630円、それ以後は311mごとに+90円していく
◆料金が5000円以上なら1割引をする
◆走行距離は整数で、cin関数にて入力
◆料金表示は整数で、cout関数にて出力

以上が全文です。

[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ(バージョン):VISUAL STUDIO.NET
 [3.3] 言語:C++

[4] 期限:2005年01月27日
(時間は書いていなかったので、27日中かと思います)

[5]
5000円以上の金額で1割引を行うところが分からず、困っています。
その他の制限:C++を習ってまだ日が浅いので、なるべく初心者向けのソースであれば助かります。
 
どうぞよろしくお願いします。

932デフォルトの名無しさん:05/01/25 03:33:32
>5000円以上の金額で1割引を行うところが分からず、困っています。

0.9かけろ
933764:05/01/25 03:57:48
>>931
#include <iostream>
int main()
{
    int distance, fare;
    std::cout << "お客さん、何m走りますかい?:";
    std::cin >> distance;
    fare = 630;
    distance -= 1500;
    if (distance > 0)
        while (distance > 0)
        {
            fare += 90;
            distance -= 311;
        }
    std::cout << "着きましたよ。";
    if (fare >= 5000)
    {
        std::cout << "あんたいい女だから今回はまけとくよ。";
        fare *= 0.9;
    }
    std::cout << "運賃は" << fare << "円になりまさぁ";
}
934& ◆TuixUkOm82 :05/01/25 04:37:32
>>932
言われてから気が付きました・・orz。
ありがとうございます。

>>933
コメント部分も使わせて頂きます。
迅速に回答頂いてありがとうございます。
935デフォルトの名無しさん:05/01/25 05:07:10
while文を使用したプログラム
while文のループカウンターのみ使用
九九の表作成・行番号列番号あり

OS:XP
borlandやらbcc32やら書いてます。

課題は今日の10時40分に提出・・・・いくらやってもできません
936935:05/01/25 05:08:21
これは自分が作ったものです。できません・・・
#include<stdio.h>
main()
{
int x,y;
printf(" 1 2 3 4 5 6 7 8 9\n");
x=1;
y=1;
while(x<=9,y<=9)
{
printf("\n%3d",x);
printf("%3d",x*y);
printf("\n");
x++;
y++;
}
}
937デフォルトの名無しさん:05/01/25 05:18:56
[1] 授業単元:C++入門

[2] 問題文(含コード&リンク):

二次元配列を用いて九九の表を作成してください

(以下の条件を満たす様に指示されています)

●動的メモリを確保しておくこと
●データ(九九のことです)はコンソールに出力したあと、最後にメモリを解放しておくこと

[3] 環境
 [3.1] OS:Windows xp Home
 [3.2] コンパイラ(バージョン):VisualStudio.Net2003
 [3.3] 言語:C++
[4] 期限:2005年01月30日
[5]
二次元配列で九九は作れたのですが、動的メモリというのが何なのかがわからず挫折しました。
どうぞよろしくお願いします。
938デフォルトの名無しさん:05/01/25 05:21:41
>>935
#include <stdio.h>
int main(void)
{
int i, j;
printf(" | 1 2 3 4 5 6 7 8 9\n");
printf("-----------------------------\n");
i = 1;
while (i <= 9) {
j = 1;
printf("%d|", i);
while (j <= 9) {
printf("%3d", i * j);
j++;
}
printf("\n");
i++;
}
return 0;
}
939デフォルトの名無しさん:05/01/25 05:33:23
>>937
#include <iostream>
using namespace std;
int main()
{
const int SIZE = 9;
int** A = new int*[SIZE];
for (int i = 0; i < SIZE; i++) {
A[i] = new int[SIZE];
}
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
A[i][j] = (i + 1) * (j +1);
}
}
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
cout << A[i][j] << " ";
}
cout << endl;
}
for (int i = 0; i < SIZE; i++) {
delete[] A[i];
}
delete A;
return 0;
}
940935:05/01/25 05:37:49
>>938
ありがとうございます。
なるほど・・・while二つ使ってる・・・
なんとなく理解できて来ました
941935:05/01/25 05:47:42
申し訳ないですが、もうひとつお願いしたいのですが。
二次元配列を使用したプログラム
81個分の値をまず計算し、9X9の二次元配列に格納する。
その後、81個分の値を表示する。for文を使用する。

これも行番号・列番号の表示が必要です。
OS:XP
borland bcc32を使用しています。
942935:05/01/25 05:48:15
何度やってもうまくできません。
#include<stdio.h>
main()
{
intm[9][9]={
{1,2,3,4,5,6,7,8,9},
{2,4,6,8,10,12,14,16,18},
{3,6,9,12,15,18,21,24,27},
{4,8,12,16,20,24,28,32,36},
{5,10,15,20,25,30,35,40,45},
{6,12,18,24,30,36,42,48,54},
{7,14,21,28,35,42,49,56,63},
{8,16,24,32,40,48,56,64,72},
{9,18,27,36,45,54,63,72,81}
};
int x,y;
printf(" 1 2 3 4 5 6 7 8 9\n");
for(y=0;y<=8;y++)
{
printf("%d",y);
for(x=0;x<=8;x++)
printf("%3d",m[x][y]);
printf("\n");
}
}
943デフォルトの名無しさん:05/01/25 06:08:53
>>942
はじめっから配列に入れるんじゃなくて、計算して配列に入れるんじゃないの?
#include <stdio.h>
int main(void) {
  int i, j, table[9][9];
  
  for (i = 0; i < 9; i++)
    for (j = 0; j < 9; j++)
      table[i][j] = (i + 1) * (j + 1);
  printf(" |");
  for (i = 0; i < 9; i++)
    printf("%3d", i + 1);
  printf("\n-+");
  for (i = 0; i < 9; i++)
    printf("---");
  for (i = 0; i < 9; i++) {
    printf("\n%d|", i + 1);
    for (j = 0; j < 9; j++)
      printf("%3d", table[i][j]);
  }
  printf("\n");
  return 0;
}
944935:05/01/25 06:24:56
>>943
あ・・・なるほど。そうか・・・。
不眠でやってたら頭がパンクしそう。
ありがとうございます。

もう一度確認してできるようにします。
945デフォルトの名無しさん:05/01/25 08:28:42
コンパイラが何かわからん奴はともかく、
自分のやっているのがCかC++かすらわからん(書かない)奴はどうかと思う
946デフォルトの名無しさん:05/01/25 09:12:32
[1] 授業単元:関数
[2] 問題文:関数checknumを使い、与えられた変数(整数)が、
50または100の場合のみ真(true)を返し、それ以外の場合は偽(false)を返す
プログラムの作成。
[3] 環境:C言語
[4] 期限:1月26日まで
よろしくお願いします。
947デフォルトの名無しさん:05/01/25 09:51:25
>>946

int checknum(int num)
{
if(num == 50 || num == 100) return true;
else return false;
}
948デフォルトの名無しさん:05/01/25 10:18:53
int checknum(int num) {return num == 50 || num == 100;}
949デフォルトの名無しさん:05/01/25 11:37:29
int checknum(int num)
{
switch(num){
case 50:
case 100:
return true;
default:
return false;
}
}
950デフォルトの名無しさん:05/01/25 11:41:13
int checksum(int num)
{ return num == 50 || num == 100; }
これでいいだろ
951デフォルトの名無しさん:05/01/25 11:56:57
952デフォルトの名無しさん:05/01/25 12:07:23
int checknum(int num)
{
if(num -= 50)
if(num -= 50)
return false;
return true;
}
953デフォルトの名無しさん:05/01/25 14:14:38
>950
>948
どう定義しているかわからないからちゃんとtrue,falseを返しとけw

int checknum(int num) {
return (num == 50 || num == 100)?true:false;
}
954デフォルトの名無しさん:05/01/25 14:15:17
int checksum(int num) { return !(num - 50 && num - 100); }
955946:05/01/25 15:04:14
>>947-954
皆様本当にありがとうございます。
これで無事に課題が出せます。
956デフォルトの名無しさん:05/01/25 15:11:32
>>953
>どう定義しているかわからないからちゃんとtrue,falseを返しとけw
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
C99、C++なら大丈夫。
957デフォルトの名無しさん:05/01/25 15:19:31
>956

>[3] 環境:C言語
ここからどうやってそれがわかるんだ?
958デフォルトの名無しさん:05/01/25 15:27:59
まぁ神いわゆるゴッドなんだろ
959デフォルトの名無しさん:05/01/25 15:37:32
[1] 授業単元: プログラム実習入門
[2] 問題文(含コード&リンク):
  貯金を500万円している。年利0.9%とすると10年でいくらになるか。
  6ヶ月ごとの額を表示する。
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:1月末日まで
[5] その他の制限:
1年目 6月 
    12月
2年目 6月
    12月
このように表示したいと思っているのですが、うまくできません。
年利は12で割って0.075で計算してよいとのことです。

よろしくお願いします。
960デフォルトの名無しさん:05/01/25 15:51:14
>>959
単利? 複利?
利子が掛かるのは一月目から? 二月目から?
一月目は1月?
961デフォルトの名無しさん:05/01/25 16:13:39
>>960
そのへんの説明が無かったんですが、
複利で1月から初めて一月目から利子をかけるということでやろうと思ってます。



説明無かったのに、この設定でやって文句言われたら・・・('A`)
962デフォルトの名無しさん:05/01/25 16:53:07
参照渡しした構造体の初期化をしたいのですが、
やり方がわかりません。
こんなかんじでやりたいと思っています。
main(){
A a;
_kansu(&a);

}
_kansu(A *a){
memset(a,0,(ここがわからない))
}
sizeofだと構造体のポインタのサイズしか返ってこないので…
よろしくお願いします。
963デフォルトの名無しさん:05/01/25 16:56:27
>962
sizeof A
964デフォルトの名無しさん:05/01/25 16:56:35
>>962
sizeof(*a)もしくはsizeof(A)
それから、自作関数は'_'で始めちゃダメ。
965デフォルトの名無しさん:05/01/25 17:00:48
あああ
いいい
ううう
えええ
 ・
 ・
 ・

といったテキストファイルがある時に,

あああ
いいい
あああ
ううう
あああ
えええ
いいい
ううう
いいい
えええ
ううう
えええ
 ・
 ・
 ・

というふうに全組み合わせを出力させるプログラムは
どのようにして作ったらよろしいでしょうか…
よろしくお願いします.
966デフォルトの名無しさん:05/01/25 17:07:03
>>962
それは参照渡しとは呼ばない。
967デフォルトの名無しさん:05/01/25 17:37:43
>>963
>>964
構造体の定義でサイズをとればいいわけですね!
ありがとうございます。
968デフォルトの名無しさん:05/01/25 18:32:09
>というふうに全組み合わせを出力させる

どういうふう?
それでは全組み合わせがわからんのだ
969デフォルトの名無しさん:05/01/25 19:15:31
タイピングもどき作ってます。ファイルからランダムに一行よみこむ
ってのを作りたくて、皆さんの意見を参考に
int r;
char *str;
r = (int)((double)11*((double)rand()/RAND_MAX));
str = malloc(sizeof(char)*256);
while(fgets(str,1024,fp)!=NULL)
while(){
pritnf(%s,str[r]);
というのを作ったんですけど、やっぱりファイルの中身の上から順に
しか表示されません。どう直すべきなのかお願いします
970デフォルトの名無しさん:05/01/25 19:29:16
>969
考えろ。丸投げするな。
それじゃコンパイルできるわけない。ごまかすな。ばーか
971デフォルトの名無しさん:05/01/25 19:47:40
sizeof(char)は常に1。
whileの用途と使い方が駄目。
変数rを使ってない
972デフォルトの名無しさん:05/01/25 19:49:18
>>969
#include <algorithm>
#include <cstdio>
#include <ctime>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>

int main()
{
    std::srand(unsigned(std::time(0)));
    std::vector<std::string> vec;
    std::string line;
    std::ifstream input("words.txt");
    while (getline(input, line)) vec.push_back(line);
    std::random_shuffle(vec.begin(), vec.end());
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
973969:05/01/25 19:52:08
そこそこ考えたんですけどすみません…;
コンパイルはできましたよ
int r;
char *str;
r = (int)((double)11*((double)rand()/RAND_MAX));
str = malloc(sizeof(char)*256);
while(fgets(str,1024,fp)!=NULL){}
while(タイムリミットまで){
pritnf("%s",str[r]);
ちょびっと直しました。charにファイルのものを全部いれてるんですよね
それをstr[r]で引き出すってものだと思うんですけど、
これじゃ行指定みたいになってないんですかね?
974デフォルトの名無しさん:05/01/25 19:54:11
pritnfがコンパイルできただと?
ほざけ
975デフォルトの名無しさん:05/01/25 19:56:29
次スレ立てました。
ぼるじょあがC/C++の宿題を片付けますYO! 39代目
http://pc5.2ch.net/test/read.cgi/tech/1106650397/
976デフォルトの名無しさん:05/01/25 20:10:20
>>973
テキトーに作ってみた。こんなんでどう?

char *rand_line(FILE *fp, char *buf, size_t bufsize, int numline) {
  int i, x = (int)(numline * ((double)rand() / RAND_MAX));
  rewind(fp);
  for (i = 0; i < x; i++) {
    if (!fgets(buf, bufsize, fp)) {
      break;
    }
  }
  return buf;
}
977969:05/01/25 20:11:38
あぁ本当だ;すみませんprintf()でした。
cしか勉強してなくて…すみません972さん。ありがとうございます
978デフォルトの名無しさん:05/01/25 20:13:00
使い方を忘れてたw

printf("%s", rand_line(fp, buf, 256, 11);

こんなかんじ。
979デフォルトの名無しさん:05/01/25 20:15:16
>973
ああ、それじゃ文字指定だし、一行しか確保できていない。ヒントだ:char**plns=NULL;
plns=realloc(plns,n*sizeof(char*));
plns[i]=malloc...
980デフォルトの名無しさん:05/01/25 21:40:47
ほんと思う。
ハードの勉強で、電子回路とかやってんのに、関係ないプログラミングが必修なのは非常にウザイ
981お願いします・・・!:05/01/25 21:41:17
[1] 授業単元: プログラミング入門
[2] 問題文(含コード&リンク):
csvファイルを読み込んで何らかの処理をするアプリケーションを作成する
[3] 環境
 [3.1] OS: WIN2000
 [3.2] コンパイラ(バージョン):visual c++
 [3.3] 言語:C++/
[4] 期限:2005年1月25日つまりあと数時間でス・・・。
超ど初心者でス・・・.
プログラの授業なんかとったのが間違いだったのかもしれません。
お暇な方、神になってくださらないでしょうか・・・
982デフォルトの名無しさん:05/01/25 21:48:48
>981
カンマをタブ\tにするプログラムはどうだ?
これなら一行ずつ処理するだけさ。

頑張れよw
983デフォルトの名無しさん:05/01/25 21:57:31
>>980
ん?HDLとか使わないの?
984デフォルトの名無しさん:05/01/25 22:07:02
JHDLなんてのもある。
完全に「ソフトウェア」の感覚。
985デフォルトの名無しさん:05/01/25 22:10:32
>980
短い間だったが、台湾工場でも頑張れよ。うんうん。達者でな
986デフォルトの名無しさん:05/01/25 22:11:44
LabviewとかもMatLabとかも何も使わないんだね。
楽しいなぁ
987969:05/01/25 22:26:17
976さん、979さん、ありがとうございます
わざわざ書いていただいたんですけど悩んでもわかりません;;
976さんのでやってみたんですけど文字化けみたいになってしまって。
979さんのヒントでreallocがでてくるんですけどこれってサイズを拡張したり
するものですよね?これがどう一行確保につながっていくのかわからなくて…
自分の書いてるやつがおかしいってなんとなくわかるんですけど
なおせません;;何度もすみませんけど、ご指導のほどを…
988デフォルトの名無しさん:05/01/25 22:34:06
あのreallocは行の数nだけ複数のポインタを用意してる。これはポインタの配列に近い。各ポインタの先は文字列として使うためにmallocで確保。
989デフォルトの名無しさん:05/01/25 22:34:33
>>980
俺は電子回路のほうがうざかった
990デフォルトの名無しさん:05/01/25 22:34:44
>>987
979は要するにいったんファイルの中身を全てメモリに行単位で読み込めと言うわけだ。
991デフォルトの名無しさん:05/01/25 22:36:15
電子回路って、いったい何するの?
992デフォルトの名無しさん:05/01/25 22:49:51
もうすぐ終了
993デフォルトの名無しさん:05/01/25 22:50:52
あけましておめでとうございます
994デフォルトの名無しさん:05/01/25 22:51:31
次スレ立ててくる
995994:05/01/25 22:52:06
996デフォルトの名無しさん:05/01/25 22:52:43
次スレ
ぼるじょあがC/C++の宿題を片付けますYO!39代目
http://pc5.2ch.net/test/read.cgi/tech/1106650397/
997デフォルトの名無しさん:05/01/25 22:55:50
うめうめ!
998デフォルトの名無しさん:05/01/25 22:55:56
今年もよろしく
999デフォルトの名無しさん:05/01/25 22:56:21
>>998
こちらこそ
1000デフォルトの名無しさん:05/01/25 22:56:27
お願いします。乾燥者より。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。