ぼるじょあがC/C++の宿題を片づけますYO! 42代目

このエントリーをはてなブックマークに追加
1ぼるじょあ代理
(・3・)アルェー 一回おきに登場することにしたC++房のぼるじょあですYO!
わからない宿題を片づけますYO!

――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑な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

【歴代スレは>>2-13
2デフォルトの名無しさん:2005/04/18(月) 17:47:38
>>1
一回おきじゃねぇじゃん。
3デフォルトの名無しさん:2005/04/18(月) 18:30:24
どなたかご指南お願い致します。
[1] 授業単元: ソフトウェア製作実習T
[2] 問題文(含コード&リンク): X,Y,Zに整数を入れ、Xに小さな値、Yに中間の値、Zに大きな値を
格納するプログラムを作成する。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ(バージョン):CPad for LSI C-86
 [3.3] 言語:C
[4] 期限:2005年4月19日まで
ちなみに、基礎的な↓の部分までしかわかりませんでした。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=313
4デフォルトの名無しさん:2005/04/18(月) 18:53:15
>>1
氏ねよ
5ぼるじょあ ◆yBEncckFOU :2005/04/18(月) 18:53:49
6ぼるじょあ ◆yBEncckFOU :2005/04/18(月) 18:54:30
7ぼるじょあ ◆yBEncckFOU :2005/04/18(月) 18:56:21
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
ぼるじょあ◆yBEncckFOU は共同体で連続体で群生体だから無限の知識と
無尽蔵の体力を持ってるんだYO!
24時間365日、いつでも質問かかって来いYO!
(・3・) アルェー こっちが嫌になるほど質問しろYO!
ぼるじょあ◆yBEncckFOU はコテハンじゃないYO!
名前欄に「ぼるじょあ#ぶるじょあ」でキミも今日から「ぼるじょあ◆yBEncckFOU」だYO!
8デフォルトの名無しさん:2005/04/18(月) 18:57:18
>>7
まともなレスつけないぼるじょあなんて必要とされていません。
9デフォルトの名無しさん:2005/04/18(月) 19:03:32
>>3
はいyp
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=313
にレスしといた。かなりやっつけ
103:2005/04/18(月) 19:08:31
>>9さん

素早い回答、ありがとうございました。
if文で作るとこまではわかったんですが、中身がどうしたら良いかわからなくて…。

本当に助かりました。
どうもありがとうございました。
11デフォルトの名無しさん:2005/04/18(月) 22:10:48
[1] 授業単元:C言語演習
[2] 問題文:
適当な文字列が10行書き込んであるsample.txtがある。
文字列1
文字列2

文字列10
問1:適当な構造体を作成し、sample.txtを開き、データ郡を格納し、DOS窓に
構造体のデータとして
01 文字列1
02 文字列2

10 文字列10  と表示せよ
問2:DOS窓でiを入力したら「何行目に文字列を挿入しますか?」と表示し、
適当な行を数値入力後、文字列を挿入する。
問3:文字列挿入後、sample.txtを上書きする。
問4:DOS窓でqを入力すると終了する。
[3] 環境
 [3.1] OS:win xp
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年04月20日
[5] その他の制限:
12前スレ975:2005/04/18(月) 23:28:34
前スレ976さん、978さん、979さん助言ありがとうございました。

とりあえず、形にしたつもりですがファイルへの出力で
ソートした最後の値だけがファイルに保存されてしまいます。

1.0 2.0 3.0 4.0 ・・・ 10.0

というふうにソートした場合、

10.0だけでなく、

1.0 2.0 3.0 4.0 ・・・ 10.0

という風にファイルに保存したいのですが、どのように変えれば出来るでしょうか?

度々申し訳ありませんがアドバイスお願いいたします。
1312:2005/04/18(月) 23:41:10
もうしわけないです。
ファイルはこちらにアップさせていただきました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/315.txt
14デフォルトの名無しさん:2005/04/18(月) 23:51:56
>>13
ソースを見せてもらったが、表示と同時に保存している。
完全にロジックがおかしいから、表示が終わってから、改めてfopen()して
書き込むが良い。fopen()は"w"で開く度に、前の同名ファイルが存在しても
削除して上書きしてしまう。
15デフォルトの名無しさん:2005/04/19(火) 00:11:15
>>1-14




















氏ね
16デフォルトの名無しさん:2005/04/19(火) 00:13:38
>>14

おおおお!出来ました!

皆さんどうもありがとうございました!
17デフォルトの名無しさん:2005/04/19(火) 00:23:30
>>13
fopen()の引数を "w" から "a" に変えるとかね。

でも、前スレ見てないから>>13が、どんな奴かは知らんが
ソースを見た感じファイル操作なんて早すぎる。
配列は正しく初期化されてるかな?
N個の要素を持つ配列を宣言しておいて、N-1個しか使っていないよ。
それでいてソート処理ではN個全てを対象としている。

それらが、ある程度動くようになってからファイルに出力しようよ。
せっかく配列に保持してるんだから、表示と保存処理は別にした方が良い。
ファイルに出力できれば、それで良いって考えは良くないよ。
ソフトウェア開発の仕事をすると、涙を呑んでそんなことをすることもあるが・・・
18デフォルトの名無しさん:2005/04/19(火) 02:11:08
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):0以上1以下の実数pをキーボードから入力し、ランダムにN人を集め、
誕生日別に分類したとき、生まれた人が一人もいないような日が存在しない確率を考える。
このような確率がp以上であるようなNの最小値を出力するプログラムをお願いします。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか C
19デフォルトの名無しさん:2005/04/19(火) 02:23:50
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):n個の文字列をキーボードから入力し、昇順
に並び替えて出力するプログラムを作成しなさい。ただし、文字列の文字数は
30文字以下とし、n<=50とする。
[3] 環境
 [3.1] OS: UNIX/Solaris 
[3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年4月21日まで
お願いします。
20cen ◆Pm9xOTJuM. :2005/04/19(火) 02:44:02 BE:20628858-#
>>18
こんな感じ?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int i,N,min=365;
double p,tmp;
srand((unsigned)time(NULL));
printf("Please input p\n");
scanf("%lf",&p);
i=0;
while(i<10000){
N=rand()%365+1;
tmp=1-(double)N/365;
if(tmp<p && N<min){min=N;}
i++;
}
printf("%d\n",min);
return 0;
}
21デフォルトの名無しさん:2005/04/19(火) 02:47:39
>>18
誕生日というものが1年のうちの各日に均等に生じるという保証がないので、
この問題は回答不可能じゃないかな。
例えば2/29日生まれってのをどうするとか、盆と正月の9ヶ月後の誕生日が多いとか。
22デフォルトの名無しさん:2005/04/19(火) 03:19:04
つか、
このスレも昔みたいにテンプレ無くせよ
23デフォルトの名無しさん:2005/04/19(火) 04:47:28
>>22
テンプレ無くすと無駄なやり取りが増えるだけで、スレの無駄。
24デフォルトの名無しさん:2005/04/19(火) 06:46:02
>>22-23
おまいら寝とけ
25デフォルトの名無しさん:2005/04/19(火) 07:29:24
>>23
昔はなかったぞ。

誰だよ、このスレにテンプレつけた奴は?
26デフォルトの名無しさん:2005/04/19(火) 09:28:42
過去ログほとんど持ってないがテンプレ付いたのは31以降40以前

・Cでお願いします(文中にない場合もある)と言ってるのに C++の"//"のコメント使うのをはじめ
 C,C++の記述が混合してたり
・期限が●日だったのにとあとから追加してくるので期限がわからず過ぎてから解答だしたり
・授業単元の趣旨と外れた解答をして「これじゃダメです」ってレス付いたり
・解答もらったけどこっちではコンパイル通りませんとか
いろいろあったから初めの出題の段階でできる限りの情報を引き出すためのテンプレかと

>・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
>・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。

テンプレをなくした時のメリットって何ですか?
教えていただけると今後の参考になりますのでお願いします。
27デフォルトの名無しさん:2005/04/19(火) 09:30:37
初心者すぎますが、C++ってなんて読むんですか
シープラスプラス??激しくアレな人教えてください
28デフォルトの名無しさん:2005/04/19(火) 09:37:26
>>27
マルチ氏ね
29デフォルトの名無しさん:2005/04/19(火) 09:40:28
>>28
はじめからこっちで聞くべきでしたねってあっちに
付け加えてんだろうがなんでもかんでも一緒にする房うざすぎ お前がまず氏ね
30デフォルトの名無しさん:2005/04/19(火) 09:47:15
>>28
マルチの意味わかってんのかね このクソガキは
ビビってひっこんでんじゃねーぞこら でてこいやキチガイ
31デフォルトの名無しさん:2005/04/19(火) 09:58:40
もういいや
>>28は消防からやり直して氏ねよ
2chのルールだけ気にしすぎて通常の人間の会話が理解できない房決定
2chやりすぎて脳腐ってんじゃないの?w 氏ね
32デフォルトの名無しさん:2005/04/19(火) 10:04:00
29 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/19(火) 09:40:28
>>28
はじめからこっちで聞くべきでしたねってあっちに
付け加えてんだろうがなんでもかんでも一緒にする房うざすぎ お前がまず氏ね

30 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/19(火) 09:47:15
>>28
マルチの意味わかってんのかね このクソガキは
ビビってひっこんでんじゃねーぞこら でてこいやキチガイ

31 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/19(火) 09:58:40
もういいや
>>28は消防からやり直して氏ねよ
2chのルールだけ気にしすぎて通常の人間の会話が理解できない房決定
2chやりすぎて脳腐ってんじゃないの?w 氏ね

190 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/19(火) 09:42:40
>>189
どこがマルチなんだ?wキチガイか 氏ね房うざすぎ おまえが氏ね

191 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/19(火) 09:57:38
もういいや
>>189は消防からやり直して氏ねよ
2chのルールだけ気にしすぎて通常の人間の会話が理解できない房決定
33デフォルトの名無しさん:2005/04/19(火) 10:07:29
>>30
マルチの意味を教えてくれないかwwww
34デフォルトの名無しさん:2005/04/19(火) 10:08:49
35デフォルトの名無しさん:2005/04/19(火) 10:15:12
>>27はもう遁走か?
口と逃げ足だけは一人前だなw
36デフォルトの名無しさん:2005/04/19(火) 10:16:00
>>35
バカすぎ乙w
37デフォルトの名無しさん:2005/04/19(火) 10:24:31
>>35
釣られてんじゃねーよwwwっぅうえwwww
38デフォルトの名無しさん:2005/04/19(火) 13:29:44
>>19
#include <stdio.h>
main(){
char cStrings[50][30];
char cWork[30];
int num,i,j;

memset(cStrings,0,sizeof(cStrings));
printf("文字列を入力して下さい。[Enterのみで終了]\n");
for(num=0;num<50;num++){
if (fgets(cStrings[num],30,stdin) == NULL) break;
if (cStrings[num][0] == '\n') break;
}
for(i=0;i<num-1;i++){
for(j=i+1;j<num;j++){
if (strcmp(cStrings[i],cStrings[j]) > 0){
memcpy(cWork,cStrings[i],sizeof(cWork));
memcpy(cStrings[i],cStrings[j],sizeof(cWork));
memcpy(cStrings[j],cWork,sizeof(cWork));
}
}
}
printf("ソート結果\n");
for(i=0;i<num;i++) printf("%s",cStrings[i]);
}
39デフォルトの名無しさん:2005/04/19(火) 15:23:13
[1] 授業単元:情報処理T
[2] 問題文(含コード&リンク):x^3+x-2=0の解を[0,3]区間で求めよ。ただし
ε=0.0001の場合とε=0.1の場合を求め結果を考察せよ(二分法)
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン):?
 [3.3] 言語:C++
[4] 期限:
[5] その他の制限: ソースプログラムε=0.1の時
          結果ファイル2個(x=1,-2 ?)
40デフォルトの名無しさん:2005/04/19(火) 16:33:50
>>38さん
実行できました。助かりました。ありがとうございました。
41デフォルトの名無しさん:2005/04/19(火) 18:04:55
>>39
εってなんですか。大体解かるが、変数には説明が必要。
42デフォルトの名無しさん:2005/04/19(火) 18:07:18
使ってるコンパイラが?ってどういうことだよ
4339:2005/04/19(火) 18:09:43
>>41
すいません
イプシロンです。
EPSでお願いいたします。
4439:2005/04/19(火) 18:12:41
>>42
ほんとごめんなさい
Microsoft Visual C++ 6.0
です。
45デフォルトの名無しさん:2005/04/19(火) 18:13:52
>>43
そんなこと聞いていないが…
質問者いじめはもうやめよう…
46Addicted to C++ ◆nrBjarne.g :2005/04/19(火) 19:36:27
>>25
私です。
ダディクールがC/C++の宿題を片づけます 32代目
http://pc5.2ch.net/test/read.cgi/tech/1097592876/330
47デフォルトの名無しさん:2005/04/19(火) 19:44:19
前スレから。
http://pc8.2ch.net/test/read.cgi/tech/1109542053/955

だいたい出来て、やっとエラーがほぼ無くなりました。
size_typeに関するもの以外は。

template<typename Element> reference Vec<Element>::front()
のように、referenceなどのものに関するエラーは出ないんだけど、
template<typename Element> size_type Vec<Element>::max_size(void) const
とかになると、エラーが出ます。
size_typeをsize_tと書き換えると、エラーがなくなります。
これって、コンパイラーかなんかのせい?
ちなみに、visual studioβ版使ってます。

コードは、これ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/319.txt
48デフォルトの名無しさん:2005/04/19(火) 21:03:51
>>39
#include <stdio.h>
#include <math.h>
float func (float x) { return x*x*x+x-2.0; }
float bisec (float (*f)(float), float l, float r, float e) {
float m = (l+r)*0.5, fm = (*f) (m);
if (fabs (r-l) < e || fm == 0) return m;
else if ((*f) (l) * fm < 0) return bisec (f, l, m, e);
else return bisec (f, m, r, e);
}

int main () {
printf ("ε=0.0001: %f\nε=0.1: %f\n",
bisec (func, 0.0, 3.0, 0.0001),
bisec (func, 0.0, 3.0, 0.1));

return 0;
}
49デフォルトの名無しさん:2005/04/19(火) 21:30:27
思うんだけど、テンプレの環境の項目は要らないんじゃない?環境依存は禁止でしょ?
50デフォルトの名無しさん:2005/04/19(火) 21:38:11
>>49
精神科病院にでも行ってきたら?
51デフォルトの名無しさん:2005/04/19(火) 21:45:49
>>50
その必要もない。
52デフォルトの名無しさん:2005/04/19(火) 21:47:54
メ几
木又
53デフォルトの名無しさん:2005/04/19(火) 22:04:19
too haw sim *
54デフォルトの名無しさん:2005/04/19(火) 22:47:39
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
***********
*********
*******
*****
***
*
上から左右2個ずつ*が減る逆三角形を作りたいのですが、for文の条件がわかりません。
*を増やすのを2個ずつ減らせばいいのは分かるのですが、m=m+2にすると、
平行四辺形になります。どうかヒントだけでもいただけないでしょうか
#include <stdio.h>
void main(void){
int k,l,m;
for(k=1;k<=6;k++){
for(l=1;l<=k;l++){
printf(" ");
}
for(m=1;m<12;m=m+2){
printf("*");
}
printf("\n");
}
}

[3] 環境
 [3.1] OS:win2000
 [3.2] コンパイラ(バージョン):わかりませんがMicrosoftVisualC++使ってます
 [3.3] 言語:どちらでも可
[4] 期限:特になし
5554:2005/04/19(火) 22:51:40
左側の空白が消えてしまいました。本当はVの形になります。
56cen ◆Pm9xOTJuM. :2005/04/19(火) 23:01:00 BE:37130898-#
>>54
こんな感じ?
#include <stdio.h>
void main(void){
int k,l,m;
m=0;
for(k=0;k<6;k++){
for(l=0;l<m;l++){
printf(" ");
}
printf("*");
for(l=0;l<20-m*2;l++){
printf("*");
}
printf("\n");
m=m+2;
}
return 0;
}
5754:2005/04/19(火) 23:02:45
こちらのスレの方が適切といわれてこちらに書き込みましたが、元のスレで答えていただきました。
マルチっぽくなってしまってすみませんでした。
58デフォルトの名無しさん:2005/04/19(火) 23:06:10
#include <stdio.h>

#define N 11

int main()
{
  int n, i, offset = 0;
  for( n = N; n > 0; n -= 2, offset++ ){
    for( i = 0; i < offset; i++ ) putchar(' ');
    for( i = 0; i < n; i++ ) putchar('*');
    putchar('\n');
  }
  return 0;
}
59デフォルトの名無しさん:2005/04/19(火) 23:56:33
>>49
template習ったから、使わせたいんだと思う。
6047:2005/04/20(水) 00:00:31
というか、この課題ってそんなに難しいものなの?
自称C++のexpertと名乗ってる人達が、自分が想像してた以上にでかい課題だとか言って、
みんな。ひいていくんだけど・・・。
締め切りまで、もう少しだから、馬鹿なりに頑張ってみる。
61デフォルトの名無しさん:2005/04/20(水) 00:05:12
単に面倒くさいだけなんじゃ…
6247:2005/04/20(水) 00:08:14
いや、面倒くさいのは、今までにあって対応してくれたから、そうでもないと思う。
6347:2005/04/20(水) 00:12:07
というか、C++のコード直しを商売にしてる専門のところの人だから・・・。
6447:2005/04/20(水) 00:18:55
vusual studio 2003で出来ることって、visual studio 2005β版で出来ますよね?
コンパイラーとかのせいでは、ないんですよね?
65デフォルトの名無しさん:2005/04/20(水) 00:27:31
連続投稿なんてうざい事やってるから見放されるんだろうな
66デフォルトの名無しさん:2005/04/20(水) 01:01:24
質問です。
Solaris環境でC++を使っています。
C++で、Unixシステムコマンドを呼び出す方法を教えてください。
%hostname というコマンドを使いたいのです。

よろしくご教授願いします。
67デフォルトの名無しさん:2005/04/20(水) 01:02:36
system("hostname")
68デフォルトの名無しさん:2005/04/20(水) 01:02:59
>>47
referenceはエラーでないの?出そうな気がするけど。
とりあえずsize_typeに関しては
template<typename Element>
typename Vec<Element>::size_type Vec<Element>::max_size() const
にすれば大丈夫だと思う。
69デフォルトの名無しさん:2005/04/20(水) 04:47:40
z:\project\se.cpp(368): fatal error C1075: end of file found before the left brace '{' at 'z:\project\se.cpp(28)' was matched
これどうすれば??
70デフォルトの名無しさん:2005/04/20(水) 12:14:07
すみません。お助けください。
以下のコードはEUCをUNIコード変換する関数なのですが
逆にUNIコードをEUCに変換するように改造するには
どこを触ればいいのでしょうか?基本的にマイナスプラスの世界に
なるかと思われますが、よろしくお願いします。
EXPORT BOOL __stdcall ChengeEucToUni(char *File_in){
unsigned char*str_in,*str_out,*p;//文字列変換入出力
unsigned charstr_in_work[MAX_PATH];//入力ワーク
unsigned charstr_out_work[MAX_PATH];//出力ワーク
unsigned intHighAsc;//上位コード
unsigned intLowAsc;//下位コード
inti,strLen;//処理カウント/文字列長
chartmpfile[255];//テンポラリファイル名
ifstreamfiled;//出力ストリーム宣言
ofstreamfout;//入力ストリーム宣言
//変数の初期化
memset( str_out_work,'\0',MAX_PATH);
memset( str_in_work,'\0',MAX_PATH);
str_out= &str_out_work[0];
str_in= &str_in_work[0];
//変換後テンポラリファイル名作成
memset( tmpfile,'\0',MAX_PATH);
strcpy(tmpfile,File_in);
strcat(tmpfile,"tmp");
//変換元のファイルを開く
filed.open(File_in);
if(filed.fail()){
AfxMessageBox("変換元ファイル読込失敗");
return FALSE;
}
71デフォルトの名無しさん:2005/04/20(水) 12:15:39
//変換後の書込みファイルを開く
fout.open(tmpfile);
if(fout.fail()){
AfxMessageBox("変換先ファイル読込失敗");
return FALSE;
}
int fi = 0;
//変換元ファイルの終端までループする
while(!filed.eof()){
//変換元文字列の取得
filed.getline(str_in,MAX_PATH);
/* 文字バイト数取得 */
strLen=strlen((const char *) str_in);
/* 先頭位置コピー */
p = str_out;
for(i=0;i<strLen;i++){
/* 上位・下位コード取得 */
HighAsc = *(str_in+i);
LowAsc = *(str_in+(i+1));
/* 2バイト文字である */
if(HighAsc > 0x7F){
if(HighAsc == 0x8E){
/* 半角カタカナである */
*str_out = LowAsc;
/* 1文字分進める */
str_out++;
}
72デフォルトの名無しさん:2005/04/20(水) 12:17:16
else{
/* 1バイト目変換 */
/* 偶数である */
if((HighAsc % 2) == 0){
if(HighAsc < 0xDF)
*str_out = (unsigned char)(0.5 * HighAsc + 48);
else if(0xE0 <= HighAsc && HighAsc <= 0xFE)
*str_out = unsigned char(0.5 * HighAsc + 112);
}
/* 奇数である */
else{
if(HighAsc < 0xDF){
*str_out = unsigned char(0.5 * HighAsc + 48.5);
else if(0xDF <= HighAsc && HighAsc <= 0xFD)
*str_out = unsigned char(0.5 * HighAsc + 112.5);
}
/* 2バイト目変換 */
/* 1バイト目が偶数である*/
if((HighAsc % 2) == 0)
*(str_out+1) = LowAsc - 0x2;
/* 1バイト目が奇数である */
else{
*(str_out+1) = LowAsc - 0x61;
if(*(str_out+1) > 0x7E)
*(str_out+1) = *(str_out+1) +1;
}
str_out+=2;
73デフォルトの名無しさん:2005/04/20(水) 12:18:08
}
/* 1バイト分すすめる */
i++;
}
/* 1バイト文字である */
else{
*str_out = HighAsc;
str_out = str_out + 1;
}
}

*str_out = '\0';

/* 先頭位置に戻す */
str_out = p;
//ファイルに変換データを出力
fout << str_out << endl;
//fout.write(str_out,strLen);//改行失敗の為、上記コードに変更
fi++;
}

filed.close();//変換元ファイルのクローズ
fout.close();//変換ファイルのクローズ
DeleteFile(File_in);//変換元ファイルの削除
MoveFile(tmpfile,File_in);//変換ファイルを変換元ファイル名にリネーム

return TRUE;

}//長文すみません
74デフォルトの名無しさん:2005/04/20(水) 12:35:41
氏ねそしておっ割れえれえええうえぇうぇええうぇうえうええぅえぅぅえぇえwwwwwwwwwwwww
75デフォルトの名無しさん:2005/04/20(水) 12:55:01
しつこくてごめんなさい。
もうお手上げ状態です。
まじで、助けてください。
これ、本当に必要なんです。

typedef 取りました。
簡単になったと思います。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/320.txt
76デフォルトの名無しさん:2005/04/20(水) 13:29:26
>>75
えーと、取り敢えず今までの経過をまとめてくれない?
もう、何がなんだか。
77デフォルトの名無しさん:2005/04/20(水) 13:30:32
[1] 授業単元:C言語
[2] 問題文:
問題1:
サイコロを1000回振る。1の目がでた回数を整数型変数oneに憶えさせ、2の目が出た回数を変数twoに憶えさせ、….、6の目が出た回数を変数sixに憶えさせる。サイコロを振り終わってから、どの目が何回でたかを画面に書かせる。
(中級者は、整数型配列 kaisu[6]を宣言し、1の目の出た回数をkaisu[1]に、2の目の出た回数をkaisu[2]に憶えさせる,……のようにすること。
問題2:
問題1で、サイコロを100回振る。どの目が何回でたかを、星の数で表現するようにせよ。
[3] 環境
 [3.1] OS: winxp
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C言語
[4] 期限:今日の20時
お願いします。
78デフォルトの名無しさん:2005/04/20(水) 13:42:01
>>77
>(中級者は、整数型配列 kaisu[6]を宣言し、1の目の出た回数をkaisu[1]に、2の目の出た回数をkaisu[2]に憶えさせる,……のようにすること。
有り得ない。
79デフォルトの名無しさん:2005/04/20(水) 13:48:33
>>76

stlにあるvector.hを書き換えるという課題です。
簡単なのは、これです。
http://www5c.biglobe.ne.jp/~ecb/cpp/07_20.html

member function等の英語版の詳しい説明だと、これです。
http://developers.sun.com/tools/cc/documentation/ss8_docs/man3c++/vector.3.html
ただし、Iterator等は今回ないです。
だいたいは、自分で書いて、あってると思います。
でも、動かないんです。

もう、まる2日馬鹿みたいに、費やしました。
ぐるぐるメリーゴーランド的に繰り返したり。

本当、まじで、お願いします。
80デフォルトの名無しさん:2005/04/20(水) 13:56:03
>>77
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define numof(array) (sizeof(array)/sizeof(array[0]))

void roll_dice (int* dice, int dn, int n) {
if (n <= 0) return;
else {
dice[(int) ((float)dn*rand()/(RAND_MAX+1.0))]++;
roll_dice (dice, dn, n-1);
}
}

int main () {
int i;
int dice[6] = {0};
srand (time(NULL));
roll_dice (dice, numof (dice), 1000);
for (i = 0; i < numof (dice); ++i) printf ("%d: %d\n", i+1, dice[i]);
return 0;
}
81デフォルトの名無しさん:2005/04/20(水) 14:00:25
>>77
#include <stdio.h>
#include <stdlib.h>
/* 精度の悪い乱数を使用しているので、必要なら適宜書き換えること */
int diceThrow(void) {return rand() % 6;}
/* count回数ダイスを投げてdice配列に出現回数を記録 */
void l1(unsigned count, int * dice) {int ic; for (ic = 0; ic < count; ++ic) {++dice[diceThrow()];}}
/* arrayからarraySize分をその値の数の星グラフに */
void l2(unsigned arraySize, const int * array)
{
int ic;
for (ic = 0; ic < arraySize; ++ic) {
int cc;
printf("No.%d:%d\t", ic + 1, array[ic]);
for (cc = 0; cc < array[ic]; ++cc) {printf("星");}
printf("\n");
}
}
int main()
{
int kaisu[6]; int ic;
for (ic = 0; ic < sizeof(kaisu) / sizeof(*kaisu); ++ic) {kaisu[ic] = 0;}
l1(1000, kaisu);
for (ic = 0; ic < sizeof(kaisu) / sizeof(*kaisu); ++ic) {printf("No.%d\t%d\n", ic + 1, kaisu[ic]);}
for (ic = 0; ic < sizeof(kaisu) / sizeof(*kaisu); ++ic) {kaisu[ic] = 0;}
l1(100, kaisu);
l2(sizeof(kaisu) / sizeof(*kaisu), kaisu);
return EXIT_SUCCESS;
}
82デフォルトの名無しさん:2005/04/20(水) 14:16:01
>>80-81
お早い回答ありがとうございます。
走らせてみた所、問題なく動きました。
ただ、ちょっと気になったのが>>81の方は何度実行しても星の数が固定なんですが
これは精度が悪い関数を使っているためでしょうか…。
83デフォルトの名無しさん:2005/04/20(水) 14:16:29
>>79
ケアレスミス多過ぎ。
単純な文法エラーばかりで、動く云々以前にコンパイラが全部エラーだしたぞ。
--- got/vec.cpp 2005-04-20 14:13:01.500000000 +0900
+++ vec.cpp 2005-04-20 14:12:53.140625000 +0900
@@ -82,2 +82,3 @@
throw(std::out_of_range("Vec at: n has to be larger than 0 and less than curSize"));
+ }
return varray[n];
@@ -86,3 +87,3 @@
template<typename Element>
-Element & Vec<Element>::at(size_t n) const
+const Element & Vec<Element>::at(size_t n) const
{
@@ -94,3 +95,4 @@
//operator
-template<typename Element> Vec<Element>::operator[](size_t n){
+template<typename Element>
+Element & Vec<Element>::operator[](size_t n){
return varray[n];
@@ -99,3 +101,3 @@
template<typename Element>
-const Element & Vec<Element>::operator[](size_t n) const;{
+const Element & Vec<Element>::operator[](size_t n) const {
return varray[n];
@@ -139,3 +141,3 @@
template<typename Element>
-void Vec<Element>::resize(size_t newSize, Element x = Element())
+void Vec<Element>::resize(size_t newSize, Element x)
{
84デフォルトの名無しさん:2005/04/20(水) 14:17:22
>>82
乱数系列を初期化していないため。必要ならsrand()関数を呼べ。
85デフォルトの名無しさん:2005/04/20(水) 14:22:45
>>77
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define numof(array) (sizeof(array)/sizeof(array[0]))

void roll_dice (int* dice, int dn, int n) {
if (n <= 0) return;
else {
dice[(int) ((float)dn*rand()/(RAND_MAX+1.0))]++;
roll_dice (dice, dn, n-1);
}
}

void ps (int n) {if (n <= 0) return; else {printf ("*"); ps (n-1);}}

int main () {
int i;
int dice[6] = {0};
srand (time(NULL));
roll_dice (dice, numof (dice), 100);
for (i = 0; i < numof (dice); ++i) {
printf ("%d: ", i+1);
ps (dice[i]);
printf ("\n");
}
return 0;
}
86デフォルトの名無しさん:2005/04/20(水) 14:23:45
>>84
感謝です。サイト見ていけました。
87デフォルトの名無しさん:2005/04/20(水) 14:30:50
83さんはどのコンパイラー使ってますか?
私はvisual studio 2005β版ですが、
function template has already been defined
っていうエラーが7つと、
fatal error C1075: end of file found before the left brace '{' at 'c:\documents and setting\....\vec.cpp(28)' was matched
Generating Code...
っていうエラーしか出なくて、何がなんだか、よくわかりません。
88デフォルトの名無しさん:2005/04/20(水) 14:45:06
>>87
もしかして、Vec.cppをコンパイルしようとしてね?
んなもん、できるわけねぇじゃん。
例えば、
#include "vec.h"

void func()
{
P10C::Vec<int> foo;
}
こんなソースを用意してそれをコンパイルしてみ。
            _
それで判らなきゃ、タヒね。
89デフォルトの名無しさん:2005/04/20(水) 14:46:47
しねとかいいやがっておめえがしね!!!!!!!!!!!!!!!!!!!!!!!!!
90デフォルトの名無しさん:2005/04/20(水) 14:48:00
>>89
どこに「しね」と?
91デフォルトの名無しさん:2005/04/20(水) 14:50:40
>>90
_
タヒね。
↑これは様々な文字を組み合わせて作った巧妙な「死ね」という文字だ!!!
なんて陰険な奴なんだ!!!!!!!!!!!!!!
92デフォルトの名無しさん:2005/04/20(水) 15:02:04
>>88
いや、一応、main.cpp作ってやってるんですけど・・・。
ちなみに、しねとか、言ってるの私じゃないです。
93デフォルトの名無しさん:2005/04/20(水) 15:02:48
>>92
あんただれですか
94デフォルトの名無しさん:2005/04/20(水) 15:04:51
87です。すいません。
95デフォルトの名無しさん:2005/04/20(水) 15:09:25
>>92
Vec.cppをコンパイルしちゃいけないというのは理解できた?
96デフォルトの名無しさん:2005/04/20(水) 15:13:02
つーか、>83の差分のパッチは当てたんだろうか。
97デフォルトの名無しさん:2005/04/20(水) 15:27:36
98デフォルトの名無しさん:2005/04/20(水) 15:28:24
>>95
main.cppをコンパイルしてると思います。
9997:2005/04/20(水) 15:43:40
ひどいバグがあったので修正
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/322.txt
やっつけなので品質には期待しないでくれ
100デフォルトの名無しさん:2005/04/20(水) 15:48:41
>>99
ありがとうございます。
凄い。
これは、今の自分には作れませんわ。
ちょっとやってみます。
10183:2005/04/20(水) 15:52:29
無視されるんならもういいや。
102デフォルトの名無しさん:2005/04/20(水) 15:58:40
>>83
いや、無視してないです。
そこに書いてあるエラーをさっきまで見直してました。
87に書いた通りです。
10370:2005/04/20(水) 16:15:08
>>97
わたくしの課題の何卒よろしくお願いいたします。
104デフォルトの名無しさん:2005/04/20(水) 16:17:10
>>102
>83はエラーじゃないよ。修正した箇所をあんたのソースと比較した差分だね。
行頭の-があんたのソースから削除した行で、+が追加した行だ。
105デフォルトの名無しさん:2005/04/20(水) 16:23:07
>>70
それ、ホントにUniCodeに変換している?
私にはShiftJisに変換しているように見えるのだけど。
それと、先ずはファイル入出力と漢字コード変換ロジックを分離してくれ。
そこまでできていれば、ShiftJis→EUCを実装するのは簡単だ。
106デフォルトの名無しさん:2005/04/20(水) 16:24:57
>>104
ちょっと見てみます。
たぶん、typedefやるときに、find&replaceで一気に直したんだけど、そのとき、少しドジたので、
それも、少し入ってると思います。
107デフォルトの名無しさん:2005/04/20(水) 16:33:13
>>97
再度ありがとうございます。

私は、いつもcompileってのでやってるのではなくて、
build solutionっていうのcompileしてるんですが、やはり
function template has already been defined
ってのが、出てきます。
いつもこういうタイプのを、やる手法でやってるのですが・・・。
βからβ2版に昨日変えたのが、何か関係してるんでしょうか。

97さんだと、これ正常に動きますか?
10897:2005/04/20(水) 16:40:36
もしかしてソリューションにVec.cpp入ってない?
入ってたら抜くこと。
109デフォルトの名無しさん:2005/04/20(水) 16:44:28
なんで>107の段階で>97に返事しているのだろう……
しかも指摘済みのことを全然理解しないで先に進もうとしているし。
だんだんみんなが相手にしなくなったのが理解できるね。
110デフォルトの名無しさん:2005/04/20(水) 16:55:07
>>108
compiler変えてみたら、出来ました。
ありがとうございます。
erase, insert functionは、pointerを返すんだけど、thisで良いんでしょうか?
111デフォルトの名無しさん:2005/04/20(水) 16:56:52
>compiler変えてみたら、出来ました。
ホントに判ってるのかね。
11270:2005/04/20(水) 16:56:58
>>105 失礼しました。おっしゃる通りunicodeではなくsjisでした。
分離しましたのでお助けくださいませ。お願いします。
EXPORT BOOL __stdcall chgLineEucToSjis(LPCSTR strin,LPSTR strout){
unsigned char*str_in,*str_out,*p;//文字列変換入出力
unsigned charstr_in_work[MAX_PATH];//入力ワーク
unsigned charstr_out_work[MAX_PATH];//出力ワーク
unsigned intHighAsc;//上位コード
unsigned intLowAsc;//下位コード
inti,strLen;//処理カウント/文字列長
memset( str_out_work,'\0',MAX_PATH);//変数の初期化
memset( str_in_work,'\0',MAX_PATH);
str_out= &str_out_work[0];
str_in= &str_in_work[0];
strcpy((char *)str_in,strin);
strLen=strlen((const char *) str_in);/* 文字バイト数取得 */
p = str_out;/* 先頭位置コピー */
11370:2005/04/20(水) 16:57:42
for(i=0;i<strLen;i++){
HighAsc = *(str_in+i); /* 上位・下位コード取得 */
LowAsc = *(str_in+(i+1));
if(HighAsc > 0x7F){ /* 2バイト文字である */
if(HighAsc == 0x8E){
*str_out = LowAsc;/* 半角カタカナである */
str_out++;/* 1文字分進める */
}
else{/* 1バイト目変換 */
if((HighAsc % 2) == 0){/* 偶数である */
if(HighAsc < 0xDF)
*str_out = (unsigned char)(0.5 * HighAsc + 48);
else if(0xE0 <= HighAsc && HighAsc <= 0xFE)
*str_out = unsigned char(0.5 * HighAsc + 112);
}
else{/* 奇数である */
if(HighAsc < 0xDF)
*str_out = unsigned char(0.5 * HighAsc + 48.5);
else if(0xDF <= HighAsc && HighAsc <= 0xFD)
*str_out = unsigned char(0.5 * HighAsc + 112.5);
}
if((HighAsc % 2) == 0) /* 2バイト目変換 */
*(str_out+1) = LowAsc - 0x2;/* 1バイト目が偶数である*/
else{ /* 1バイト目が奇数である */
*(str_out+1) = LowAsc - 0x61;
if(*(str_out+1) > 0x7E)
*(str_out+1) = *(str_out+1) +1;
}
str_out+=2;
}
11470:2005/04/20(水) 16:58:16
i++;/* 1バイト分すすめる */
}
else{/* 1バイト文字である */
*str_out = HighAsc;
str_out = str_out + 1;
}
}
*str_out = '\0';
str_out = p;/* 先頭位置に戻す */
strcpy(strout,(const char *)str_out);
return TRUE;
}

それではご教授お願いいたします。m(_ _)m
11597:2005/04/20(水) 16:58:52
116デフォルトの名無しさん:2005/04/20(水) 17:03:04
>>110
insert()は挿入されたデータを指すポインタを返すべき。
erase()は削除したデータの次のデータ(或いはend())を指すポインタを返すべき。

つーか、stlの実装見ろって言われてなかったか?
117デフォルトの名無しさん:2005/04/20(水) 17:14:27
>>116
返す値については、何にも言われなかったです。
stlの実装見ろとかは、今のところ言われてないです。
これ、STLのクラスの一番最初の課題なんですが、
C++の段階を100で例えると、どのくらいのレベルのものなんでしょうか?
118デフォルトの名無しさん:2005/04/20(水) 17:15:16
>>70
//文字列の変換はめんどくさいから漢字一文字分(戻り値は変換済みバイト数)
int sjis2euc(unsigned char * dest, unsigned char * src)
{
unsigned code1 = src[0];
code1 = code1 * 2 - 0xe1;
code1 &= 0x7f;// 1バイトカナの隙間
unsigned code2 = src[1];
code2 -= 0x1f;
if (code2 > 0x7f - 0x1f) {// 0x7fの穴
--code2;
}
if (code2 >= 0x7f) {// 偶数ブロック
code2 -= 0x5e;
++code1;
}
dest[0] = code1 | 0x80;
dest[1] = code2 | 0x80;
return 2;
}
//一バイトカナはこれ(戻り値は上と同じ)
int sjis2eucKana(unsigned char * dest, unsigned char * src)
{
dest[0] = 0x8e;
dest[1] = str[0];
return 2;
}
//後はコードの判断ロジック(暇があったら後でね)
119117:2005/04/20(水) 18:24:15
>>116
いろいろありがとうございました。
120デフォルトの名無しさん:2005/04/20(水) 18:39:04
>>115
at()内のifはif (n >= curSize)だけで十分。
std::size_tは符合無し整数型と決まっているから。
121118:2005/04/20(水) 18:49:30
//残り(あ、微妙に仕様が違う気がする)
static inline bool isSjisKana(unsigned char src) {return src >= 0xa1 && src <= 0xdf;}
static inline bool isSjisKanji1(unsigned char src){return src >= 0x81 && src <= 0x9f || src >= 0xe0 && src <= 0xfc;}
static inline bool isSjisKanji2(unsigned char src){return src >= 0x40 && src <= 0x7e || src >= 0x80 && src <= 0xec;}
static inline bool isSjisKanji(const unsigned char * src){return isSjisKanji1(src[0]) && isSjisKanji2(src[1]);}
//変換の本体
std::string sjis2euc(const char * str)
{
const unsigned char * src = reinterpret_cast<const unsigned char *>(str);
unsigned char * buf = new unsigned char[strlen(str) * 2];
unsigned ic = 0;
for (; src[0] != '\0'; ++src) {
if (isSjisKana(src[0])) {
ic += sjis2eucKana(& buf[ic], src);
} else if (isSjisKanji(src)) {
ic += sjis2euc(& buf[ic], src);
++src;
} else {
buf[ic++] = src[0];
}
}
buf[ic] = '\0';
std::string tmp = reinterpret_cast<const char *>(buf);
delete[] buf;
return tmp;
}
122& ◆E0RpANzUA2 :2005/04/20(水) 19:03:05
>>120

typedefまで直しました。
皆様、ありがとうございました。

あと、一応、それが動くかどうかのテストをするために、
main.cppを含め、大掛かりなファイルをもらいました。
このリンクの一番下の、zipファイルです。
ファイル上にエラーは、一つもないのですが、linkingでエラーがでるのですが。。。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi
123デフォルトの名無しさん:2005/04/20(水) 19:13:07
おいおい…… リンク位ちゃんと貼れや。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/325.zip
124デフォルトの名無しさん:2005/04/20(水) 19:23:44
>>110
コンパイルの手順の問題ではない

コンパイルエラーなのだから質問の最初から87のエラーを提示すべき
75のソース
://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/320.txt

//===========================================================================
template<typename Element>
Element & Vec<Element>::at(size_t n)
{
if(n < 0 || n >= curSize){ //<<----ここで{ 使用
throw(std::out_of_range("Vec at: n has to be larger than 0 and less than curSize"));
return varray[n];
} //----ifの最後に}がないのでここがif文の終わり
.cppの最後の}でこのメソッド終了 }が不足しているので
fatal error C1075: end of file found before the left brace '{' at 'c:\documents and setting\....\vec.cpp

12570:2005/04/20(水) 19:25:08
>>121
先生!ありがとうございます。
ですがしかし、技が高度すぎて当方には発生するコンパイルエラーの意味すら
理解できません。inline初めてみました!
126121:2005/04/20(水) 19:30:37
>>70
あ、肝腎のことを書き忘れてた。
元のソース追っかけるの諦めたから、C++で適当に書いた。
static inline はなくても取り敢えずはいいとして、new/deleteはmalloc()/free()で、
reinterpret_castはCスタイルキャストで、std::stringはchar *でなんとか誤魔化してくれw
127デフォルトの名無しさん:2005/04/20(水) 19:30:47
>>124
83さんが掲示してくれたのを、見直してるときに、それは見つけました。
言うべきでした。すいません。
128デフォルトの名無しさん:2005/04/20(水) 19:31:30
>>122
リンクエラーならどんなエラーか書けよ。
ついでに言えば、人の指摘を無視するならもう来なくていいよ。
129デフォルトの名無しさん:2005/04/20(水) 19:32:21
ttp://www.js.yamanashi.ac.jp/~koba/prog2005/function.html

ここのページにある課題3と課題4分かりませんか〜?
よろしくお願いします。
13070:2005/04/20(水) 19:35:17
>>126
ヒントありがとうございます。
では何とか努力してみます。ありがとうございました!
131デフォルトの名無しさん:2005/04/20(水) 19:37:00
>>129
通報しました。
132デフォルトの名無しさん:2005/04/20(水) 19:37:23
>>128
エラーは
Linking...
Main.obj : error LNK2019: unresolved external symbol "void __cdecl SJC::fillRandomly(void * const,unsigned int)"
(?fillRandomly@SJC@@YAXQAXI@Z) referenced in function "void __cdecl SJC::randomizeAllObjectBits<unsigned int>(unsigned int &)" (??$randomizeAllObjectBits@I@SJC@@YAXAAI@Z)
Debug/Project 1.exe : fatal error LNK1120: 1 unresolved externals
無視はしてないです。
たまに、指摘の内容を調べてて返事が遅れたりしてました。
すいません。
133デフォルトの名無しさん:2005/04/20(水) 19:40:21
>>132
BlumBlumShub.cpp とやらはコンパイルしてるの?
134133:2005/04/20(水) 19:42:25
>>132
BlumBlumShub.cpp の
namespace /*anonymous*/ {
と、この { に対応する } をコメントアウトすればうまくいく
135デフォルトの名無しさん:2005/04/20(水) 19:43:38
>>132
指摘した点を修正せずに先に進むことを無視したと言うのでは?
で、>133の指摘にもあるがMain.objとBlumBlumShub.objがリンクされていない。
IDEの使い方くらいきちんと抑えておきなさい。
136133:2005/04/20(水) 19:46:03
ごめん、うそついた。
137デフォルトの名無しさん:2005/04/20(水) 19:48:40
>>133
あ、出来ました!!!!!!!
assert が出て、

typename Vec<Element>::pointer Vec<Element>::erase(pointer from, pointer to)
{
assert(from<to);
const std::ptrdiff_t offset = from - begin();
resize(std::copy(to, end(), from) - begin());
return begin() + offset;
}
この部分のassert(from<to);にです。from==toになってるみたいです。
assert(from<=to);にしてみたら、assertは出なくなったのですが、
Message: [bad allocation]
The type reported may not be most-derived.
ってのが、出てきます。

本当、出来そこないで、すいません。
138デフォルトの名無しさん:2005/04/20(水) 19:50:21
>>135
改めます。
139デフォルトの名無しさん:2005/04/20(水) 19:51:30
>>137
if (from == to) return from;
140デフォルトの名無しさん:2005/04/20(水) 19:53:23
>>129
テンプレに従わないと宿題として認めない
141デフォルトの名無しさん:2005/04/20(水) 19:58:01
>>137
それ、付け加えたんですけど、同じassertが出ます。
from<toになってるから、assertが出るんですよね。
でも、from<=toにすると、出なくなるんですよね。
142デフォルトの名無しさん:2005/04/20(水) 20:24:21
もう少し頭使おうよ。
>139はassertionを起こさない修正ではなくbad allocationしない修正。
from == to のときの処理を追加するなら、当然assert()も修正する必要がある。
143デフォルトの名無しさん:2005/04/20(水) 20:50:17
ノータリンのボケに頭使えっつっても無理な話
144デフォルトの名無しさん:2005/04/20(水) 20:51:39
>>142
assertが出るってことは、from<toってことですよね?
ってことは、それより以前にeraseが呼びだされる前にエラーがあるってことですか?
145デフォルトの名無しさん:2005/04/20(水) 20:56:28
ヒントを与えて答えさせようなんて無理な話。
146デフォルトの名無しさん:2005/04/20(水) 21:01:38
こいつ調べることすら出来ないみたいだな
何から何まで教えてくれると思ってるから
ここで何でもかんでも聞くんだろうな
147デフォルトの名無しさん:2005/04/20(水) 21:07:25
それがゆとり教育というものだよ
148デフォルトの名無しさん:2005/04/20(水) 21:16:23
ゆとり教育と調べることと関係が有るのだろうか…
149デフォルトの名無しさん:2005/04/20(水) 21:21:31
ゆとり教育用の教科書を見るとその片鱗が覗ける。
150デフォルトの名無しさん:2005/04/20(水) 21:21:41
これだから無知な奴は。
151デフォルトの名無しさん:2005/04/20(水) 21:22:32
>>139のを一番最初にくっつけとけばいいんだって。
152デフォルトの名無しさん:2005/04/20(水) 21:31:20
>>149
その教科書を毎日見てきた世代ですが。
153デフォルトの名無しさん:2005/04/20(水) 21:37:56
>>152
それは、残念だったな。
154デフォルトの名無しさん:2005/04/20(水) 22:15:37
結局使わなければ忘れるから、内容が薄くなっても…。
155sage:2005/04/20(水) 22:20:33
[1] 授業単元: 情報処理入門
[2] 問題文(含コード&リンク):
---hoge.txt---
商品名aaaa
商品名bbbb
商品名cccc
商品名dddd
商品名eeee
---hoge.txt---
問1:hoge.txtから文字列を読み込み、構造体に格納せよ。malloc()を用い
動的に確保し、双方向リストを作成し、DOS窓に行番号付きで表示せよ。
---DOS窓---
01 商品名aaaa
02 商品名bbbb

05 商品名eeee
---DOS窓---
問2:問1で作成した双方向リストを用い、「i」を入力したら任意の行に
適当な商品名を追加し、「d」を入力したら任意の行を削除せよ。
問3:問2のコマンド入力後の状態をDOS窓に表示せよ。また、その状態をhoge.txt
に反映し上書きせよ。
[3] 環境
 [3.1] OS: windows xp
 [3.2] コンパイラ(バージョン):gcc3.2.3
 [3.3] 言語:C
[4] 期限:できるだけ早く
[5] その他の制限:初心者なので双方向リストのアドレス取得方法が分かりません。
ぼるじょあ様よろしくお願いします。
156デフォルトの名無しさん:2005/04/20(水) 22:24:49
できるだけはやくっていつだよ
157デフォルトの名無しさん:2005/04/20(水) 22:25:58
>>156
ぼるじょあに聞いてるんだから、他の奴はだまってろ
158ぼるじょあ ◆yBEncckFOU :2005/04/20(水) 22:27:29
できるだけはやくっていつだよ(・3・)
159デフォルトの名無しさん:2005/04/20(水) 22:28:28
[1] 授業単元: C言語
[2] # 「Boyer-Moore法」を用いる.
# 探索を行う関数名は bm_search2 とする.

* 引数として以下の3つを受け取る:
1. ファイル中の文字列 haystack
2. 検索対象の文字列 needle
3. 連結リスト(needle のすべての出現位置を格納するため)
* 戻り値は,一致した文字列の総数.

# プログラムは一致した文字列と前後 10 文字を表示する.
# プログラムは一致したすべての文字列を表示する.

* 関数 bm_search2 の中で一致した文字列を表示することは禁止する.

# プログラムはコマンドライン引数としてファイル名と検索文字列を指定できること.

[3] 環境
 [3.1] OS:Linux
 [3.2] わからないです
 [3.3] C言語
[4] 4月22日までです

よろしくお願いします
160デフォルトの名無しさん:2005/04/20(水) 22:31:05
自分が使ってるコンパイラすら分からないような
無能・無才は素直に単位落としとけよ
161155:2005/04/20(水) 22:34:16
>>156-158
ぼるじょあ様へ
できるだけ早くとは2005年4月22日です。
よろしくお願いします。
162デフォルトの名無しさん:2005/04/20(水) 23:54:19
保守
163デフォルトの名無しさん:2005/04/20(水) 23:55:13
C言語でコンパイラはボーランドCです。
あるファイル、例えば

2 6 -7 0 0 6 48
4 5 3 -1 0 8 12
9 0 -7 5 1 9 -2

があった場合に何行何列かを表示するプログラムを
作って欲しいです。ちなみに行数によって列数は変わり
ません。条件としてはmalloc関数を使ってほしいです。
だれかお願いしますm(__)m


164デフォルトの名無しさん:2005/04/21(木) 00:09:39
2問あるのですが・・・初心者でわかりません。

3値の中央値(2番目に大きい数)をもとめるアルゴリズムを
C言語で実装せよ。(if文を使うこと)

以下を参考にして3×3のマスにおける○×ゲームの表示プログラムを
作成したい。とりあえず以下のように出力させるには?
どこに×をおきますか?:2 2
○○○
○×○
○○○
165デフォルトの名無しさん:2005/04/21(木) 00:10:23
上の続きです
#include <stdio.h>

int main(void)
{
int i, j, n,m;

printf("どこに×を置きますか?:");
scanf("%d %d", &n,&m);
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {

ここを考えること。


}
putchar('\n');
}

return (0);
}

となっています。
明日提出なので、できればよろしくお願いします。
166デフォルトの名無しさん:2005/04/21(木) 00:15:30
int middle(int a, int b, int c)
{
if(b <= a && a <= c || c <= a && a <= b) return a;
if(a <= b && b <= c || c <= b && b <= a) return b;
return c;
}

2問目
if(i == n && j == m) printf("×");
else printf("○");

入力に時間がかかったせいで3分もかけてしまった。
167デフォルトの名無しさん:2005/04/21(木) 00:20:22
>>151
それをやったらbad allocationになるんですよ。
168デフォルトの名無しさん:2005/04/21(木) 00:20:38
163もやっていただけませんか?
明日提出でやばいです・・・。
お願いします。
169デフォルトの名無しさん:2005/04/21(木) 00:40:44
>>155
ぼるじょあじゃないけど問1と問2答えといたよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/327.c
170デフォルトの名無しさん:2005/04/21(木) 00:44:18
>163
具体的に例題ファイルの場合にはどうなればいいのか説明できますか?
例題ファイルの場合、
3行7列と 画面に表示すればいいということでしょうか?
それだとmalloc関数を使う必要がないので違いますよね 
171デフォルトの名無しさん:2005/04/21(木) 00:47:17
>>168
163の問題の意味が全然わからない
172デフォルトの名無しさん:2005/04/21(木) 01:00:23
>170
作りたいプログラムはファイルの中身を表示するのが目的です。
下のプログラムで3行7列は#defineによって定義してますよね。
自分ででもファイルの中は実際はわからないわけですから何行何列
かはプログラム自体がファイルを開いたときに認識するように
したいのです。つまり例題ファイルを開いたときに下のプログラム自体が
3行7列を認識して2次元行列ma[][]を表示したいようにしたいのです。
プログラムさえできればmalloc関数は使わなくても大丈夫です。
説明不足があったらすみません。お願いします。

#include <stdio.h>
#define COL 7
#define ROW 3
int main(void)
{
FILE * f;
int data[ROW][COL], i, j, is_error = 0;
if ((f = fopen("data.txt", "r")) == NULL) return 1;
for (i = 0; !is_error && i < ROW; ++i)
for (j = 0; !is_error && j < COL; ++j)
if (fscanf(f, "%d", &data[i][j]) != 1) is_error = 1;
fclose(f);
if (is_error) return 1;
printf("%d行%d列\n", ROW, COL);
return 0;
}
173155:2005/04/21(木) 01:00:49
>>169
ありがとうございました

ぼるじょあ様、なにとぞ問3をお願いします。
17497:2005/04/21(木) 01:10:06
>>167
ちょっとやってみたけどそのエラーは別な場所で起きてるみたい。
直しといたんであげとくよ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/328.txt
175169:2005/04/21(木) 01:11:38
>>173
問3もファイルに書く以外の事はやってあるよ。
じゃあ後はぼるじょあ様にまかせよう。
176デフォルトの名無しさん:2005/04/21(木) 01:55:39
172ですが説明不足でしたかね?
それとも説明がわかりにくかったですかね?
177デフォルトの名無しさん:2005/04/21(木) 02:01:14
>172
>2次元行列ma[][]を表示したいようにしたいのです
>printf("%d行%d列\n", ROW, COL);
だから、どっちなんだと…

>条件としてはmalloc関数を使ってほしいです
>プログラムさえできればmalloc関数は使わなくても大丈夫です
これも矛盾してるしな。

行と列の数が分かればそれでいいのか?
それとも、配列の中身のデータが必要なのか?
と>170は聞いているんだ。質問に答えろよ。
読み込む前には行や列の数が分からん、なんて分かってる。

例として、>163を読み込んだときにはどういう結果が出力されるべきなのかを書け。
課題に「ただし、mallocを使う事」とか「ただし、データは一度配列に読み込む事とする」みたいな条件がついてるならそれもな。
178デフォルトの名無しさん:2005/04/21(木) 02:17:43
>177
>だから、どっちなんだと…
>行と列の数が分かればそれでいいのか?
>それとも、配列の中身のデータが必要なのか?
両方表示していただきたいです。

>これも矛盾してるしな。
malloc関数はどうでもいいです。
個人的に使わないと無理かなと思っただけなんで。

>例として、>163を読み込んだときにはどういう結果が出力されるべきなのかを書け。

2 6 -7 0 0 6 48
4 5 3 -1 0 8 12
9 0 -7 5 1 9 -2
3行7列の行列です。

>課題に「ただし、mallocを使う事」とか「ただし、データは一度配列に
>読み込む事とする」みたいな条件がついてるならそれもな。
mallocはどうでもいいです。配列ma[][]をあとで計算に使うので
ma[][]に格納して欲しいです。

これで大丈夫ですか?
179デフォルトの名無しさん:2005/04/21(木) 02:20:51
178の続き。
ma[][]じゃなくてdata[][]でした。どちらでもいいです。
すみません。
180デフォルトの名無しさん:2005/04/21(木) 05:49:18
>>163
つくってみたよ。動いたからあげてみる。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/329.txt

読み込んだデータをまたつかうんならデータ構造に問題あるぽい。
テスト環境はLinuxのgccね。
181デフォルトの名無しさん:2005/04/21(木) 08:22:42
>>97=174
ありがとうございます。うれしいかぎりです。
でも、またassertionが出るようになったのですが・・・。

Debug Assertion Failed!
C:...\Microsoft Visual Studio 8\...\VC\include\vector
Line:223
Expression'vector literators incompatible
182デフォルトの名無しさん:2005/04/21(木) 08:36:15
>>181
そのassertionってSTLのvectorからでてる様に見えるんだが。俺の気のせいかなぁ。
183デフォルトの名無しさん:2005/04/21(木) 08:42:09
>>182
そうそう。
その通りだと思います。
それって、STLのVectorが違うってこと?
でも、今までも、他のSTLから出てるエラーはあって、
自分のプログラムを治したら、出なくなったっていうのは、あるんですけど・・・。
184デフォルトの名無しさん:2005/04/21(木) 09:16:42
>>163はマルチです。
>>170 は私が作ったへぼソースw
まるで自分が作ったかのように質問してるし。
良識を疑うよw

>>180 乙です。
185184:2005/04/21(木) 09:17:54
>>170>>172の間違い
186デフォルトの名無しさん:2005/04/21(木) 09:20:15
>>これも矛盾してるしな。 
>malloc関数はどうでもいいです。 
>個人的に使わないと無理かなと思っただけなんで。 
 ^^^^^^^^^^
嘘を付くな嘘を。
187デフォルトの名無しさん:2005/04/21(木) 09:26:16
>>183
そういうことではなくて、
このソースそのものがvectorに取って代わるものなんではないの?ってこと
なのに、vectorのassertionを出すっていうのは、おかしくないのかなと思っただけ。

どっちもincludeしてたりするのなら、やめた方がいいと思うんだけど。
俺の認識がおかしいならスルーしてくださいな。
188デフォルトの名無しさん:2005/04/21(木) 09:36:05
↑で説明足らずだったから、追記。
両方のvectorクラスをincludeしてると予想して書くけど、
名前空間が違うから、基本的には両方includeしてても、
おかしいことにはならないと思う。

けど、同様の機能を提供するものをincludeしてるという状況の為、
意識しないミスによって、例えば自作vectorクラス側のオブジェクトを
STL::vectorとして扱ってしまっている場所が出てしまう可能性がある。
上記のassertionもその手のバグじゃないかと疑っているということです。
18970:2005/04/21(木) 10:19:46
>>118様 お助けください
作成していただいたソースをなんとかVCでコンパイル可能になったのですが
デバッグ時に←個所でエラーが発生してしまいました。
原因がわかりません。ヒントお願いします。


int sjis2euc(unsigned char *dest, unsigned char *src) {
unsigned code1 = src[0];
unsigned code2 = src[1];
code1 = code1 * 2 - 0xe1;
code1 &= 0x7f;// 1バイトカナの隙間
code2 -= 0x1f;
if (code2 > 0x7f - 0x1f) --code2; // 0x7fの穴
if (code2 >= 0x7f) {// 偶数ブロック
code2 -= 0x5e;
++code1;
}
dest[0] = code1 | 0x80;
dest[1] = code2 | 0x80; //← 最初にここを通過させるとメモリ参照系エラーになります。
return 2;
}
int sjis2eucKana(unsigned char * dest, unsigned char * src) { //一バイトカナはこれ(戻り値は上と同じ)
char * str;
dest[0] = 0x8e;
dest[1] = str[0];
return 2;
}
19070:2005/04/21(木) 10:20:08
static BOOL isSjisKanji1(unsigned char src){return src >= 0x81 && src <= 0x9f || src >= 0xe0 && src <= 0xfc;}
static BOOL isSjisKanji2(unsigned char src){return src >= 0x40 && src <= 0x7e || src >= 0x80 && src <= 0xec;}
static BOOL isSjisKana(unsigned char src) {return src >= 0xa1 && src <= 0xdf;}
static BOOL isSjisKanji(const unsigned char * src){return isSjisKanji1(src[0]) && isSjisKanji2(src[1]);}
EXPORT __stdcall sjis2eucMain(char * str) { //変換の本体
char tmp;
unsigned char * src = reinterpret_cast<unsigned char *>(str);
unsigned char * buf;/// = malloc((char)strlen(str) * 2);
unsigned ic = 0;
for (; src[0] != '\0'; ++src) {
if (isSjisKana(src[0])) ic += sjis2eucKana(& buf[ic], src);
else if (isSjisKanji(src)) {
ic += sjis2euc(&buf[ic], src);
++src;
}
else buf[ic++] = src[0];
}
buf[ic] = '\0';
free(buf);
return tmp;
}
19170:2005/04/21(木) 10:22:09
追記ですが、外部宣言している本体のsjis2eucMain(char * str)
のstrには試験的に作ったVBからの呼出し元で
明示的に「あいうえおかきくけこさしすせそ」を格納しており
パラメタとしては正常に引き継がれておるようです。
192デフォルトの名無しさん:2005/04/21(木) 10:25:26
>>183
テストコードが悪い(多分)
>>182
テストコードを見たら、STLのvectorと独自のvector両方に対してテストしてる模様。
193デフォルトの名無しさん:2005/04/21(木) 10:27:44
>>182,183,192
確かにSTLのvectorをincludeしてる。
19470:2005/04/21(木) 10:34:04
失礼しました。
unsigned char * buf;/// = malloc((char)strlen(str) * 2);
コンパイル通す為にお馬鹿な事をしていました。
ここを直したらうまく動きました。お騒がせしました。
195デフォルトの名無しさん:2005/04/21(木) 10:34:04
erase function でreserve, operator=,assign とかを使うことって可能ですかね?
196デフォルトの名無しさん:2005/04/21(木) 10:49:18
>>195
ごめんなさい。言うの忘れてました。
もし、capacityがなくなったら、そのたびに、2倍にするそうです。
だから、bad reallocationってメッセージが出てるのでしょうか?
197デフォルトの名無しさん:2005/04/21(木) 10:52:09
>>196
まず何が起きてるのか言ってくれ。
はっきりいってわけがわからない。
198デフォルトの名無しさん:2005/04/21(木) 11:03:19
>>197 196の訂正。
さっきのvector関連のassertは出なくなって、また
=== A std::bad_alloc EXCEPTION REACHED main() ===
Message: [bad allocation]
The type reported may not be most-derived.
っていうメッセージが出るんです。
つまり、bad allocationなんだと・・・。
これって、capacity==sizeになったとき、
またvectorを増やすけれど、その時の大きさをcapacity*2にするってことなんだけど、
そこから来てる、エラーなのかなって思ったのです。
199デフォルトの名無しさん:2005/04/21(木) 11:15:14
>>198
>>174のやつ使ってる?
200デフォルトの名無しさん:2005/04/21(木) 11:16:26
教授の助手に聞いたところ、
reallocationはcapacityを2倍にしようとするんだけど、
その2倍のcapacityがmax_sizeを超えていたら、max_sizeは新しいcapacityを
取られるべきだそうです。
defaultによって、メモリーがなくなったときに、new[],delete[],がthrowする。
size_type max_size(void) constに関して、throw std::length_errorが必要だそうです。

本当、手間取らせちゃってごめんなさい。
201デフォルトの名無しさん:2005/04/21(木) 11:22:32
>>199
はい。
そうすると、198で言った風になります。
202デフォルトの名無しさん:2005/04/21(木) 11:28:38
つけたし。
defaultによって、メモリーがなくなったときに、
new[],delete[],がstd::bad_allocをthrowする。
私の日本語表現、おかしくて、読みずらいかもしれません・・・・。
203デフォルトの名無しさん:2005/04/21(木) 11:29:51
>>201
おれは問題なくテスト通ってるけどな。
今使ってるソース見せてよ。
204デフォルトの名無しさん:2005/04/21(木) 11:34:12
205デフォルトの名無しさん:2005/04/21(木) 11:37:05
>>204
insert(pointer before, size_type howMany, const_reference x)
が直ってない
206デフォルトの名無しさん:2005/04/21(木) 11:40:25
size_type max_size() const{ return size_type(-1);}
これじゃ、不十分なんでしょうか?
207デフォルトの名無しさん:2005/04/21(木) 11:55:46
むずかしいです。

[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):
任意の文字列を検索し、指定文字列に置換える関数を作りなさい。
なお、置換文字列は任意の文字列と同じ長さとは限らない。
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年4月22日まで
[5] その他の制限: 23日の授業で提出なので御願いします;
208デフォルトの名無しさん:2005/04/21(木) 12:02:43
英語ですいません。
某サイトによると、

size_type max_size() const;
Returns size() of the largest possible vector.

size_type capacity() const;
Returns the size of the allocated storage, as the number of elements
that can be stored.

今まで、ネットで、こういう系統のcppファイルをたくさん集めて研究してたんですけど、
これより、簡単で、size_type max_size() const っていう関数は使ってないんですよね。
なので、ないがしろにしてたけど、これのせいの気がするんですが・・・。
209デフォルトの名無しさん:2005/04/21(木) 12:05:11
>>205
あ、それを直しても、198でいうようなのが出てきます。
assertとかは出ないんですけど・・・。
210デフォルトの名無しさん:2005/04/21(木) 12:06:17
int main(){
int pid;
pid=fork();
if(pid==0){
cout<<"a";
}
else{
cout<<"b";
}
}

上記のコードだと、実行後 aa と出力されてしまいます。
forkから、親側pidにはプロセスID、子側pidには0が返るはずなので、
親はbを、子はaを出力すると思うのですが、私は何か勘違いを
しているのでしょうか?
211デフォルトの名無しさん:2005/04/21(木) 12:06:56
>>207
void replaceString(char* string, const char* from, const char* to)
{
   const int len1 = (int)strlen(from);
   const int len2 = (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);
   }
}
212デフォルトの名無しさん:2005/04/21(木) 12:07:43
>>209
じゃあ、もう一回直したやつをアップしてみて。
213デフォルトの名無しさん:2005/04/21(木) 12:12:01
>>212
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/331.cpp
なんでも、すいません。
本当、助かります。
214デフォルトの名無しさん:2005/04/21(木) 12:13:57
>>212
すいませんが、212さんのoutputかexe fileアップしてもらっていいですか?
215デフォルトの名無しさん:2005/04/21(木) 12:15:47
>>213
const_refernce copy(x)
->
const value_type copy(x)
216デフォルトの名無しさん:2005/04/21(木) 12:16:09
また池沼がこのスレに這いつくばってるのか
217デフォルトの名無しさん:2005/04/21(木) 12:22:39
>>215
そうするとassertが出るので、const_referenceであってると思います。

>>216
そうですよね。
自分でも、嫌になってるから、皆さんには、もっと迷惑かけてると思います。
すいません。
218デフォルトの名無しさん:2005/04/21(木) 12:36:04
>>217
const_referenceだったら何も修正されないじゃん。
そのassertの内容は?
219デフォルトの名無しさん:2005/04/21(木) 12:56:20
>>218
template<typename Element>
void Vec<Element>::insert(pointer before, size_type howMany, const_reference x){
const size_type prev = size();
const difference_type offset = before - begin();
const_reference copy(x);
copy とか習ってなかったので、よく分からなかったのですが、
const_reference x なので、const_referenceかなと思って。
value_typeにすると、またさっき言ったように、
STLのVectorからのエラーになります。
220デフォルトの名無しさん:2005/04/21(木) 13:06:30
落ち着け。思いつきであれこれいじっても事態は悪くなるばかりだ。
221デフォルトの名無しさん:2005/04/21(木) 13:09:58
>>219
それでいい。
STLのvectorがassertするのは多分>>192
22270:2005/04/21(木) 13:17:00
118様!!
「結果」という漢字が正常に変換されません。
223210:2005/04/21(木) 13:18:23
どなたか、お助けくださいいいいい
224207:2005/04/21(木) 13:19:49
>>211

void replaceString(char* string, const char* from, const char* to);

main(){
char *string1 ="good mornig america!";
char *string2 ="good";
char *string3 ="bad";
replaceString(string1,string2, string3);
printf("%s\n",sting1);
}
void replaceString(char* string, const char* from, const char* to)
{
const int len1 = (int)strlen(from);
const int len2 = (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);
}
}

ってやったらコアダンプしちゃいました;;
どこが悪いんでしょうか・・・
225デフォルトの名無しさん:2005/04/21(木) 13:31:14
char string1[] ="good mornig america!";
char string2[] ="good";
char string3[] ="bad";
226デフォルトの名無しさん:2005/04/21(木) 13:47:49
>>Vector classでお世話になったみなさん。

長い間付き合っていただいて、ありがとうございました。
なんか悪いので、締め切りまであと15時間あるので、
自分なりにやってみます。
本当にありがとうございました。
227207:2005/04/21(木) 13:53:31
すみません・・ついでといっちゃあなんですが・・??
224はだめで225はOK
↓もOKな理由がわかりません・・・なぜなんでしょうか;
main(){
char *string1 ="good mornig america!";
char *string2 ="good";
char *string3 ="bad";
printf("%s\n",string1);
printf("%s\n",string2);
printf("%s\n",string3);
}
228デフォルトの名無しさん:2005/04/21(木) 13:57:16
>>223
動かしてみた
baと表示された
229>>226:2005/04/21(木) 14:01:40
VC8のvectorを見てみたが、Debugモードでvectorのiteratorとポインタを比較するとassertに失敗するようになっている。
VC8を使わないか、Releaseモードにすれば大丈夫。
230デフォルトの名無しさん:2005/04/21(木) 14:26:25
>180
ありがとうございました。

>>170 は私が作ったへぼソースw
>まるで自分が作ったかのように質問してるし。
>良識を疑うよw
自分が作ったなんて一言も書いてないです。
もしそのように感じたらすみませんでした。

>>malloc関数はどうでもいいです。
>>個人的に使わないと無理かなと思っただけなんで。
^^^^^^^^^
>嘘を付くな嘘を。
嘘ではないです。宿題を出された日に大学で教授にmalloc関数を
使えばできるよ。と言われたので個人的に解釈してmalloc関数を
使わなければできないと思ったのでそのように書いたのです。
------------------------------------------------------------
言い訳みたいな文になってしまってすみません。
本当にありがとうございました。
231デフォルトの名無しさん:2005/04/21(木) 14:47:22
>>227
それは、宿題の範疇を超えるんだが(^^;;
簡単に説明すると、

・文字列トークンは普通、(書換えできない)文字列へのポインタとして扱われる。
・例外として文字列配列の初期子として書かれたときは、その文字列配列の初期値を決める。
・配列の名前だけ書く([]を着けない)と、最初の要素へのポインタとして扱われる。

わからんよーなら、丁寧な教科書なら図解つきで載ってるんで、読んでおくれ。
232118辺り:2005/04/21(木) 15:17:04
>>70
なんだよ、C++でいいならそのまま使えよ。
Cかと思ってmalloc()辺りの説明したけど、文字列の扱い慣れてないみたいだから
>190みたいな阿呆なコード書いてるんだろうし。
233デフォルトの名無しさん:2005/04/21(木) 15:50:28
>>229
明日学校行って、他のコンパイラーでやってみます。
本当ありがとうございました。
234デフォルトの名無しさん:2005/04/21(木) 15:51:48
>>233
>229を理解してその台詞? いくらなんでも酷すぎるなぁ。
235デフォルトの名無しさん:2005/04/21(木) 16:46:05
>>234
>>Releaseモードにすれば
マジであほなんで、その仕方がよく分からなかったけど、また聞くと悪いから、
VC8以外のコンパイラーで一度試してみようかなって思っただけです。
236デフォルトの名無しさん:2005/04/21(木) 16:49:14
>>234
今ままでずっと書いてもらったコードを理解するために、色々調べてて
返事おくれました。
STLの授業始まったばかりで、まだ定かではないことがたくさんあって・・・。
ほんと、ありがとうございました。
237デフォルトの名無しさん:2005/04/21(木) 16:50:24
>>236
前にもIDEの使い方くらい勉強しとけって書かれてたよなぁ。
レスがその場凌ぎ以外のなんにも役に立ってないわけだ。
238デフォルトの名無しさん:2005/04/21(木) 17:33:14
>>237
ちゃんと勉強するやつがここに来るわけないだろw
239デフォルトの名無しさん:2005/04/21(木) 17:38:04
>>237
マジレスすると、私事なのですが、学校が進むの早いんですよ。
去年の10月にC++の最初、basic classから始まって、
data structure,STL&SLと、とんとんと。
その場凌ぎ以外のなんにも役に立ってないわけじゃなくて、
進むの学校が進むの早すぎて、あれもこれもとやること多すぎで、
消化不良起こしてるんです。
まだC++初めて6ヶ月しか経ってないので。
もちろん、このクラスの以外にも3クラス取ってるわけで・・・。
でも、コンパイラーのこと、書かれていた基礎知識が抜けていて、
マズイのは、ご指摘どうり、自分でも承知しているので、
週末にでも時間作れるように努力して、勉強します。
24070:2005/04/21(木) 18:03:49
>>232
レスありがとうございます。
AHOなソースにしてしまい申し訳ありません。
何故か当環境でコンパイルすると、ズラーとエラーが出てきてしまいました。
『結果』という文字がなぜうまくいかないのかヒントお願いいたします。
241デフォルトの名無しさん:2005/04/21(木) 18:23:55
半年もあれば……
242232らしい:2005/04/21(木) 18:26:05
>>240
文字列は、char変数には入らない。
stringでエラーを起こしているなら、
#include <string>
すればいい。
教えるの面倒だから、元の方でエラーをなくす努力をしてくれ。
243デフォルトの名無しさん:2005/04/21(木) 18:51:17
漏れはC++初めて二ヶ月でEffectiveシリーズ三冊やらExceptionalやら
ModenやらFAQやら禿本やらboostやらと読んだが…
自分が適当にやってるのを他のせいにするなと言いたい
やる気さえあれば誰だって出来る。よっぽどアホでない限りな
244デフォルトの名無しさん:2005/04/21(木) 19:01:52
的外れな意見だな
245デフォルトの名無しさん:2005/04/21(木) 19:09:39
Ψ1s=1/sqrt(PI)*γ1^(3/2)*e^(-γ1*r)
Ψ2p=1/sqrt(PI)*γ2^(5/2)*r*e^(-γ2*r)*cosθ

という式で|Ψ(x,y,z)|^2を、数値的に求め
その結果から|Ψ(x,0,z)|^2のグラフを
gnuplotでえがくプログラムを組む課題です。
どのようなプログラムを組めばよいでしょうか。
246デフォルトの名無しさん:2005/04/21(木) 19:20:52
[1] 授業単元:プログラム技術
[2] 問題文(含コード&リンク):3つの商品を買うとき会員券がある場合2割引 無ければ定価で売るプログラムを作りなさい。消費税も5%ととして計算すること
[3] 環境
 [3.1] OS:Win2k
 [3.2] コンパイラ(バージョン):Borland C++ Compiler 5.5
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:無し
for文からおかしいので治してみたりしたのですが
forを無視する、1つしか入力できない、数を入力してもループが終わらないといったバグがでます。
(型指定)の練習問題で初めて使用したのですが表示がおかしいのもわかりません。
お願いします
int pr[2];
int a,b,goke,sin;
printf("品物の値段を入力してください\n");
for(a=0;a<=2;a++){
scanf("%d",&a);
goke=pr[a]+goke;
}
printf("会員券があるなら1、ないなら0を入力してください\n");
scanf("%d",&b);
if(b==1){
sin=(float)goke*0.8;
sin=(float)sin*1.05;
}
else if(b==0){
sin=(float)goke*1.05;
}
else{
printf("エラー\n");
}
printf("\\%d",sin);
return 0;
247デフォルトの名無しさん:2005/04/21(木) 19:42:11
>>245
LinuxかMacかwindowsかそのほかのUNIXか。
248デフォルトの名無しさん:2005/04/21(木) 19:50:06
>>245
テンプレに従え。C++なのかCなのかも分らないので宿題として正答はできない。
249デフォルトの名無しさん:2005/04/21(木) 20:04:14
>>246
3つの商品なのにpr[2]ではおかしいでしょ。
prは品物の値段を入れる変数でaは添え字でしょ。
入力された品物の値段をどこに入れるの。
考えてね。

250デフォルトの名無しさん:2005/04/21(木) 20:14:11
>forを無視する、1つしか入力できない、数を入力してもループが終わらないといったバグがでます。

for(a=0;a<=2;a++){
scanf("%d",&a);

ループに使ってる a で scanf するな!
っていうか pr[] に scanf に汁!


>(型指定)の練習問題で初めて使用したのですが表示がおかしいのもわかりません。

goke 初期化汁!

251245:2005/04/21(木) 20:29:26
失礼いたしました。

[1] 授業単元:なし
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:fedora core
 [3.2] コンパイラ(バージョン):不明
 [3.3] 言語:C
[4] 期限:4月末日
252デフォルトの名無しさん:2005/04/21(木) 20:41:02
ファイルの入出力のフローチャートがわかりません
253デフォルトの名無しさん:2005/04/21(木) 20:43:45
>フローチャート

オhル
254デフォルトの名無しさん:2005/04/21(木) 20:44:05
そうですか。
255デフォルトの名無しさん:2005/04/21(木) 20:58:29
3つ数を入れてもらって合計数を表示するプログラムですが、
どうも合計数がきちんと表示されません。
以下のどこかだと思いますが、どこがおかしいのでしょうか?

do{
printf("No%d: = ",++y);
scanf("%d",&z);
sum += z;
putchar('\n');}
while(y < 3);

printf("合計値は… : %d です!\n\n",sum);
256デフォルトの名無しさん:2005/04/21(木) 21:02:08
[1] 授業単元:プログラミングC言語
[2] 問題文(含コード&リンク):
1.キーボードから整数を入力させ、奇数か偶数かを判定するプログラムを作りなさい。
2.同じく整数を入力させ、素数であるかどうかを判定するプログラムを作りなさい。
[3] 環境
 [3.1] OS:Win2000
 [3.2] コンパイラ(バージョン):Visual C++
 [3.3] 言語:C
[4] 期限:明日朝まで

よろしくお願いします
257デフォルトの名無しさん:2005/04/21(木) 21:02:33
>どこがおかしいのでしょうか?

たいていは初期化
258デフォルトの名無しさん:2005/04/21(木) 21:04:24
>奇数か偶数かを判定する

if( 数 % 2 )
259デフォルトの名無しさん:2005/04/21(木) 21:06:19
>>257
神様!!!できました!!!
=0って宣言しなくても勝手に0が入ると思ってたorz
260デフォルトの名無しさん:2005/04/21(木) 21:17:44
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):int string_to_number(char *p):引数として与えられた文字列pの先頭から整数値を取り出して返す関数。ただし先頭が符号でも数字でもなければ0を返す。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ(バージョン):分かれません
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:特になし
261デフォルトの名無しさん:2005/04/21(木) 21:34:07
>ただし先頭が符号でも数字でもなければ

先頭以外に数字以外の別の文字があった場合はどうする?
262デフォルトの名無しさん:2005/04/21(木) 21:38:59
>>261
未定義なんだから、別に鼻の穴から悪魔が出てきても(ry
263デフォルトの名無しさん:2005/04/21(木) 22:05:41
int string_to_number(char *p){
return atoi(p);
}
264207:2005/04/21(木) 22:22:53
>>231

いまポインター関係の本を読んでみてます;
理解するのにちょっと時間がかかりそうですが頑張ります;
ご丁寧にありがとうございました♪
265デフォルトの名無しさん:2005/04/22(金) 00:14:59
>>260
#include <ctype.h>

int string_to_number(char *p)
{
  int n = 0, sig = 1;
  
  switch( *p )
  {
    case '+': p++; break;
    case '-': sig = -1; p++; break;
  }
  
  while( isdigit(*p) ){
    n *= 10;
    n += *p - '0';
    p++;
  }

  return n * sig;
}
266デフォルトの名無しさん:2005/04/22(金) 00:25:49
>265

intの桁あふれとかは考慮しなくてもいいですか、まぁ宿題レベルだからいいのか
267デフォルトの名無しさん:2005/04/22(金) 00:33:16
桁あふれ対策は最初にstrcmpしたらよかろ。
268デフォルトの名無しさん:2005/04/22(金) 00:44:52
>267
ハァ?

265 でなら while() で判断、だろ?
269デフォルトの名無しさん:2005/04/22(金) 00:59:58
>268
いや、むしろ漏れは 267 の strcmp での対策とやらが知りたい
おながい教えて
270デフォルトの名無しさん:2005/04/22(金) 02:45:37
[1] 授業単元:繰り返し処理 for文
[2] 問題文(含コード&リンク): nを与えてn!を計算するプログラムを作成せよ
[3] 環境
 [3.1] OS:windous
 [3.2] コンパイラ(バージョン):VisualC++
 [3.3] 言語:C++
[4] 期限:無期限

お願いします
271デフォルトの名無しさん:2005/04/22(金) 02:54:10
>>270
nはいくつまで?
272デフォルトの名無しさん:2005/04/22(金) 02:55:39
int aaa(int i) { int ret = 1; for (; i>1; --i) ret*=i; return ret; }
273デフォルトの名無しさん:2005/04/22(金) 02:57:39
>>272
unsignedの方がいい
274デフォルトの名無しさん:2005/04/22(金) 03:17:19
>>270

#include <iostream>

// 階乗計算関数
template <typename T> T fact(T n)
{
  if( n <= 0 ) return 0;
  T a = 1;
  for( ; n > 0; n-- )
    a *= n;
  return a;
}

// テスト用main
// コマンドライン引数でnを指定
int main(int argc, char **argv)
{
  if( argc < 2 ) return 0;
  int n = atoi( argv[1] );
  std::cout << fact( n )          << std::endl;
  std::cout << fact( (long) n )   << std::endl;
  std::cout << fact( (double) n ) << std::endl;
  return 0;
}
275デフォルトの名無しさん:2005/04/22(金) 03:24:36
VCじゃlongもintも同じだ。
276デフォルトの名無しさん:2005/04/22(金) 08:18:30
コンパイラ泣かせ
template<unsigned n> inline unsigned f()
{
if (n > 1) {
return n * f<n ? n - 1 : 1>(); //テンプレート引き数がn-1だとダメなのなんで?
}
return 1;
}
277デフォルトの名無しさん:2005/04/22(金) 08:23:40
template<unsigned n> inline unsigned f() {return n ? n * f<n ? n - 1 : 1>() : 1;}
書き直したから貼っておこう
278デフォルトの名無しさん:2005/04/22(金) 16:26:09
[1] 授業単元: C言語プログラミング
[2] 問題文  標準入力で指定されたファイルからテキストを入力、
       そして標準出力に出力せよ。
       *同じ文字が連続して2回入力されたときには1文字消去して出力せよ。
[3] 環境    
 [3.1] OS: linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:今月中
です。
「同じ文字が連続して2回入力されたときには1文字消去して出力せよ」
というところがなかなか出来ません。よろしくお願いします。
279デフォルトの名無しさん:2005/04/22(金) 16:28:29
>>278
今月中までなら、もうすこし自分で考えれ。
280デフォルトの名無しさん:2005/04/22(金) 16:31:46
>>263
ありがとうございます。そんな簡単な方法があったんだなんて盲点でした。

>>265
まだ習ってない内容も含んでいますが理解できるようがんばりたいです。
281デフォルトの名無しさん:2005/04/22(金) 16:41:32
>「同じ文字が連続して2回入力されたときには1文字消去して出力せよ」

3回以上連続している場合はどう解釈すればいい?
a.あくまでも2回ごとに1文字消去 つまり3,4回連続なら2文字になる
b.最初の1文字だけ表示2文字目以降は消去 つまり3,4回連続でも1文字
282デフォルトの名無しさん:2005/04/22(金) 17:24:33
[1] 授業単元: わかりません
[2] 問題文(含コード&リンク): わかりません
[3] 環境
 [3.1] OS: わかりません
 [3.2] コンパイラ(バージョン): わかりません
 [3.3] 言語:C/C++/どちらでも可 のいずれか わかりません
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか わかりません
[5] その他の制限: わかりません

よろしくお願いします。
283デフォルトの名無しさん:2005/04/22(金) 17:30:25
>>282
よろしくお願いします。
284ぼるじょあ ◆yBEncckFOU :2005/04/22(金) 17:35:57
>>282
(・3・)アルェー ボクにもわからないYO!
285デフォルトの名無しさん:2005/04/22(金) 17:44:03
>>284
じゃあそれ以外の未解決分お願いします。
286デフォルトの名無しさん:2005/04/22(金) 18:20:10
>>274
おーい、factorialは整数のみで定義できる関数だからfloatなどの場合は定義すべきじゃないよ。それは糖だよ。
287デフォルトの名無しさん:2005/04/22(金) 18:46:36
>>278
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void output_text (FILE* fin) {
int lc = 0, c = 0;
while ((c = fgetc (fin)) != EOF) if (c != lc) {putchar ((char)c); lc = c;}
}

int main () {
FILE* fin;
char filename[256]; scanf ("%s", filename);
if ((fin = fopen (filename, "r")) == NULL) return EXIT_FAILURE;
else {
output_text (fin);
fclose (fin);
return EXIT_SUCCESS;
}
}
288デフォルトの名無しさん:2005/04/22(金) 18:58:58
>>287
> #include <stdlib.h>
> #include <string.h>

イラネ
289デフォルトの名無しさん:2005/04/22(金) 19:00:25
>>288
うるせー
290デフォルトの名無しさん:2005/04/22(金) 19:01:25
既出問題のまとめサイトってあった方がいいと思う?>ALL
291デフォルトの名無しさん:2005/04/22(金) 19:09:02
>>290
約42290レスの中からまとめるの?ご苦労様。
質問する奴らはそんなもの見ないけどな。
292デフォルトの名無しさん:2005/04/22(金) 19:10:06
計算間違えたじゃねえか。
293デフォルトの名無しさん:2005/04/22(金) 19:26:07
>>291
問題をまとめるとせいぜい1000題以内だと思う。
294デフォルトの名無しさん:2005/04/22(金) 19:28:52
>>291
その中から問題と解答だけを抽出するならそれほど時間が掛からないと思う。
295デフォルトの名無しさん:2005/04/22(金) 19:32:40
>>294
がんばってくれ。
296デフォルトの名無しさん:2005/04/22(金) 19:41:11
>>286
それはわかっているけどね。
ただ巨数になりやすいから、結果をdoubleでも出せるようにしたかっただけ。
n = 10.5 とかでも計算しちゃうけど、それはやらないでねw

あと、テンプレート引数にはしかるべき演算子を定義した巨大数クラスも取れるので、いいじゃん。
297デフォルトの名無しさん:2005/04/22(金) 19:48:49
>>296
誤差で13! != 13.0!になったが。
298297:2005/04/22(金) 19:52:04
勘違いでした。
299デフォルトの名無しさん:2005/04/22(金) 19:54:03
templateでHaskellのクラスのようなものってできないかなぁ。例えば、int,long,char,その他の整数型のみを許す型定義みたいな。
300>>299:2005/04/22(金) 19:57:01
SFINAEとかboostのstatic_assertとかでいいんじゃない?
301デフォルトの名無しさん:2005/04/22(金) 20:22:37
>>300
SFINAEを使えば継承もできるようですね。おおよそHaskellと似たような事もできることが分りました。
ありがとうございます。
302デフォルトの名無しさん:2005/04/22(金) 20:27:25
機能を完全に再現とはいきませんが。
303デフォルトの名無しさん:2005/04/22(金) 21:19:48
まとめるのは非常に良いことだが
質問あるたびに誘導ばかりしていると新しいものが生まれないからほどほどに
304278:2005/04/22(金) 22:16:00
>>281さん
b.最初の1文字だけ表示2文字目以降は消去 つまり3,4回連続でも1文字
のほうでお願いします。
305278:2005/04/22(金) 22:19:54
すいません!287さんのレスを見落としていました。
ありがとうございます!
頭が悪いのでパット見分からないのですが、考えてみます!
306デフォルトの名無しさん:2005/04/22(金) 22:37:20
>>290
俺みたいにこのスレをみて実力ためしに問題といてる人間にとっては
勉強になります。ぜひまとめサイト御願いします。m(_ _)m
307デフォルトの名無しさん:2005/04/22(金) 23:04:29
漏れも疑問に思ったんだが、>276は何故?
308デフォルトの名無しさん:2005/04/22(金) 23:17:46
>>307
f<0>が実体化された時点で、f<(unsigned)-1>も実体化されるから
309デフォルトの名無しさん:2005/04/22(金) 23:26:21
>>308
_gadad `ifdjd
310デフォルトの名無しさん:2005/04/22(金) 23:37:26
#include <iostream>

template <int n> struct factorial
{
    enum {value = n * factorial<n-1>::value};
};
template <> struct factorial<0>
{
    enum {value = 1};
};

int main()
{
    std::cout << factorial<6>::value;
}
311デフォルトの名無しさん:2005/04/23(土) 01:18:02
戻り値無しかよ
312デフォルトの名無しさん:2005/04/23(土) 01:19:19
すてき
313デフォルトの名無しさん:2005/04/23(土) 01:24:46
>>311
ISO/IEC 14882:1998 3.6.1 Main function -5
... If control reaches the end of main without encountering a return
statement, the effect is that of executing "return 0;"
314デフォルトの名無しさん:2005/04/23(土) 01:32:31
>>308
さらに f<(unsigned)-2>, f<(unsigned)-3> ...
と実体化されてゆき、コンパイルが破綻するから。
もしくはコンパイルを破綻させないために設定してある
テンプレートの深さの制限を超えるから。
315デフォルトの名無しさん:2005/04/23(土) 01:40:00
#include<iostream.h>

template< unsigned n > unsigned
f() {
return n * f< n - 1 >();
}

template<> unsigned
f< 0 >() {
return 1;
}

int main() {
std::cout << f< 6 >();
}
316307:2005/04/23(土) 01:44:50
>>308
THX!
評価の前に実体化しなきゃならんってことかな。
317デフォルトの名無しさん:2005/04/23(土) 01:45:58
>>316
そういうこと
評価はランタイム、実体化はコンパイルタイム
318307:2005/04/23(土) 01:46:10
>>314
そっちはgccでコンパイルすると一目瞭然だった。
319デフォルトの名無しさん:2005/04/23(土) 11:12:46
>>314
へー、それは新たに追加されたってこと?
320278:2005/04/23(土) 13:15:44
>>287さんのプログラムを実行させてもらいましたが、
入力後何も表示されないのですが、何か足りない部分とかありますか?
321デフォルトの名無しさん:2005/04/23(土) 15:06:21
>>320
あんたの頭。
それはさておき、入力後すぐにプログラムが終了しているなら入力したファイル名をフルパスにして再挑戦してみよ。
322デフォルトの名無しさん:2005/04/23(土) 15:07:12
>>319
何が何に追加されたと思って質問しているのかね。
323デフォルトの名無しさん:2005/04/23(土) 16:05:29
[1] 授業単元: 数値計算プログラミング
[2] 問題文(含コード&リンク):
1.正の整数を素数の積に分解する、素因数分解のプログラムを作成。
  負の整数を入れると終了するようにする。
2.二次方程式ax^2+bx+cの解を求めるプログラムを作成。(a≠0)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年4月23日23:59
[5] その他の制限: 特にありません。

他の問題は何とかできましたが、この2題がわかりません。
知恵を貸してください。よろしくお願いします。
324デフォルトの名無しさん:2005/04/23(土) 16:58:29
#include <stdio.h>

void print_factors(int n)
{
  int i = 2;
  while(1)
  {
    if(n % i == 0)
    {
      printf("%d", i);
      if((n /= i) <= 1)
        break;
      i = 2;
      printf("*");
    }
    else
      i++;
  }
  printf("\n");
}

int main()
{
  int n;
  while(scanf("%d", &n) > 0 && n > 0)
    print_factors(n);
}
325324:2005/04/23(土) 17:03:24
訂正
int main() -> int main(void)
326デフォルトの名無しさん:2005/04/23(土) 17:15:40
>>322
すまんまちがえた>>314じゃなくて>>313ですた
んで、これは>>313はこの版のCからそうなったの?それともずいぶん前から?
327デフォルトの名無しさん:2005/04/23(土) 17:18:33
#include <math.h>
#include <errno.h>
#include <stdio.h>

int main(void)
{
  double a, b, c, det;
  printf("a:");
  scanf("%lf", &a);
  printf("b:");
  scanf("%lf", &b);
  printf("c:");
  scanf("%lf", &c);

  det = b * b - 4 * a * c;
  if(det > 0)
    printf("%f, %f", (- b + sqrt(det)) / (2 * a), (- b - sqrt(det)) / (2 * a));
  else
    printf("%f+%fi, %f-%fi", - b / (2 * a), sqrt(-det) / (2 * a), - b / (2 * a), sqrt(-det) / (2 * a));
  if(errno)
  {
    fprintf(stderr, "An error ocurred.");
    return 1;
  }
}
328デフォルトの名無しさん:2005/04/23(土) 17:20:05
>>326
>>313はc++。
c99にも同様の規定がある。
329デフォルトの名無しさん:2005/04/23(土) 17:28:01
>>326
>313はC++。
330デフォルトの名無しさん:2005/04/23(土) 17:46:40
>>324さん

素早い回答ありがとうございます。
すみません、質問なのですが

while(scanf("%d", &n) > 0 && n > 0)

のscanfの部分をnに変えてしまってはマズイでしょうか?
whileの条件の中にscanfというのは使った事がなくわかりません。

プリント文で値は?と質問した後に、入力させる方式にしたいと思っています。
331デフォルトの名無しさん:2005/04/23(土) 17:54:56
>>330
少しは自分でやったり考える心は無いのか
332デフォルトの名無しさん:2005/04/23(土) 17:55:11
>>330
その部分は、
「まずscanfを実行し、エラーがなく、且つnが正の場合に…」と読む。
書き換えたいなら、新しい入力関数
int input(void)
{
int n;
printf("?");
scanf("%d", &n);
return n;
}
を用意して
while((n = input()) > 0) ...
とするか、breakを使って、
while(1)
{
int n;
printf("?");
scanf("%d", &n);
if(n < 0) break;
print_factors(n);
}
とすれば良い。(scanfのエラーチェックは省いた)
333デフォルトの名無しさん:2005/04/23(土) 17:58:27
>>331
スミマセン、考えても分からなかったもので…。

>>332
丁寧にありがとうございます。
break文を用いた方法でやってみたいと思います。
>>327もそうですよね?
本当にありがとうございました。
334デフォルトの名無しさん:2005/04/23(土) 23:30:20
すいません、どなたかお願いいたします。

fh=CreateFile(szFn,GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL); // ファイルオープン

lpBuf=GlobalAlloc(GPTR,GetFileSize(fh,NULL)); // バッファ確保

ReadFile(fh,lpBuf,GetFileSize(fh,NULL),&dummy,NULL);

lpInfo=(LPBITMAPINFO)(lpBuf+sizeof(BITMAPFILEHEADER));

offset=*(LPDWORD)(lpBuf+10); // ビットマップまでのオフセット
lpBMP=lpBuf+offset; // ビットマップバッファのポインタ

CloseHandle(fh);

これでビットマップを二つ読み込んで重ねてマスク部分を透過させているのですが
横幅が奇数などになるとうまく透過させることができません。
重ね方は3バイト見ていって0xff 0x00 0xffだったら描画しないとしています。
4の倍数じゃないとうまく表示されないのはわかっているのでがうまくできないのです。

どなたかいいサイト、参考書、やり方などご教授お願いします;;
335デフォルトの名無しさん:2005/04/24(日) 00:08:23
>>334
宿題なのか?
336デフォルトの名無しさん:2005/04/24(日) 00:30:43
>>335
宿題なんです つwT
337デフォルトの名無しさん:2005/04/24(日) 07:41:24
> ――【注意点】―――――――――――――――――――――――――
> ・質問は必ず【質問テンプレ】に従ってください。
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
> ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
> ・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
> ・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
> ―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:
338デフォルトの名無しさん:2005/04/24(日) 12:45:53
>>328-329
ありがと
339デフォルトの名無しさん:2005/04/24(日) 20:45:24
>>337
テンプレ厨は邪魔だから氏ねよ
340デフォルトの名無しさん:2005/04/24(日) 20:53:43
>>339-340
とりあえずこの書き込みも邪魔
341デフォルトの名無しさん:2005/04/24(日) 21:04:40
>>339の方がよっぽど邪魔で死んで欲しい
342デフォルトの名無しさん:2005/04/24(日) 21:06:54
>>341
pgr
                  こんちは〜、「最強かつ最狂の浮動票集団」ニュー速VIPです。
  / ̄ ̄ ̄ ̄ ̄\      承知のとおり、5/8(日)はJr板と対戦することになりました。
 ノ´          `ヽ    対戦日は、素晴らしい豪脚でν速を叩きのめした競馬板をも超える
ノ     /'''ヽヽ    ヽ    強力で激しいラシの嵐でJr板を沈める所存であります。
|     /    ヽヽヽ  ヽ   そういうわけで、皆さんの変わらぬご愛顧のほどよろしくお願いします。
|     /   `ヽ| |´ヽ ヽ    なお、支援物資(特におっぱい)がありましたら、いつでもうpして下さい。
|  |  ‐‐―¬ ー―‖
|  ⊂        」    ||     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 |ノ  \    <^> / |   <  こんなところにいてなんだけど、VIPクオリティってなに?
 | ∧ \ _____^_//レ      \________________________
 レ´| ノ\;;;;;;;;;∀;ヽ
   |_  \;JPN;;|ア     ●2ちゃんねる全板人気トーナメントinVIP●
 .  | |\ |;;12;;/||      http://ex10.2ch.net/test/read.cgi/news4vip/1114265328/

★ 全ての板にVIPクオリティを in ニュー速VIP ★
ご無沙汰しております、「最強かつ最狂の浮動票集団」ニュー速VIPです。
他の組の対戦を見て、いよいよ我々も悠長に構えていられなくなりました。
対戦日は、競馬板が豪脚でν速を差しきってしまったので、
我々は「韋駄天」ことサイレンススズカのような怒涛の逃げでJr板を沈める所存であります。

そういう訳で、皆さんの変わらぬご愛顧のほどよろしくお願いします。
支援物資(特におっぱい)がありましたら、いつでもうpして下さい。
あなたのおっぱいが、ひょっとしたら勝ちぬけの突破口になるかもしれません。

      ∧_∧   ∧_∧     ┌──────────────
    (゙゙ヽ ´∀`)')('(´∀` /゙゙) )) < グローバルVIPクオリティ!!!
  ((  \    / ヽ    /    .└──────────────
     ((⌒)  (   )  (⌒))
      ``ヽ_,)  (,__,ノ゙

● 2ch全板人気トーナメント in VIP ●
http://ex10.2ch.net/test/read.cgi/news4vip/1114348627/

★ 全ての板にVIPクオリティを in ニュー速VIP ★
345デフォルトの名無しさん:2005/04/24(日) 22:36:53
[1] C言語
[2] BM法のアルゴリズムを説明せよ
[4] 4/25

    よろしくお願いします
346デフォルトの名無しさん:2005/04/24(日) 22:43:18
>>345
却下
347デフォルトの名無しさん:2005/04/24(日) 23:39:36
[1] 授業単元: ―
[2] 問題文(含コード&リンク): 日本経済を立て直せ
[3] 環境
 [3.1] OS: 代議制
 [3.2] コンパイラ(バージョン): ―
 [3.3] 言語: 日本語
[4] 期限: 早急
[5] その他の制限: 右傾・左傾は不可
348デフォルトの名無しさん:2005/04/24(日) 23:41:08
>>347
今が日本の実力。
バブルが異常だっただけだ。
349デフォルトの名無しさん:2005/04/25(月) 00:33:52
糞みたいな問題ですみません。
1行3列の行列Aと3行7列のBを掛けて1行3列のCを出力したいんですけど、
C=AB 550 462 480になったんですけど、結果違いますよね。
どこが違うか教えてくれますか? C++です
#include <stdio.h>

#define L 1
#define M 3
#define N 7
350デフォルトの名無しさん:2005/04/25(月) 00:34:22
int main(void)
{
int i, j, k;
int ma[L][M] = {55,42,30};
int mb[M][N] = {{1,0,1,0,2,3,3},{1,0,0,1,3,2,4},{0,1,1,1,4,3,6}};
int mc[L][M] = {0};

for(i = 0;i < L;i++){
for(j = 0;j < M;j++){
for(k = 0;k < N;k++)
mc[i][j] += ma[i][j] * mb[j][k];
}
}
351デフォルトの名無しさん:2005/04/25(月) 00:35:00
puts("A=");
for (i = 0; i < L; i++){
for (j = 0; j < M; j++)
printf("%6d ", ma[i][j]);
putchar('\n');
}
puts("B=");
for (j = 0; j < M; j++){
for (k = 0; k < N; k++)
printf("%6d ", mb[j][k]);
putchar('\n');
}
puts("C=AB");
for (i = 0; i < L; i++){
for (j = 0; j < M; j++)
printf("%6d ", mc[i][j]);
putchar('\n');
}
return(0);
}
352デフォルトの名無しさん:2005/04/25(月) 00:42:57
>>349
1行3列と3行7列をかけたら1行7列じゃねえの?
353デフォルトの名無しさん:2005/04/25(月) 01:44:51
[1] 授業単元: 秘密
[2] 問題文(含コード&リンク): 40桁の数を素因数分解するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語: C
[4] 期限: 秘密
[5] その他の制限: 任意の多倍長整数演算ライブラリを使用しても良い。自作もOK。
354デフォルトの名無しさん:2005/04/25(月) 01:58:14
>>353
氏ね
355デフォルトの名無しさん:2005/04/25(月) 02:02:12
>>354
どうかお願いします
356デフォルトの名無しさん:2005/04/25(月) 02:05:55
>>353
UBASICでも入れてリストをそのまま多倍長クラスにでも移せ。

UBASIC
ttp://www.rkmath.rikkyo.ac.jp/~kida/ubasic.htm
ここにいろいろな素因数分解プログラムがあるから、せっせと移植すれ。
357デフォルトの名無しさん:2005/04/25(月) 02:06:58
>>356
どうかCのプログラムとして完成させてください。
358デフォルトの名無しさん:2005/04/25(月) 08:40:12
>>353
随分秘密が多いな。

任意の多倍長整数演算ライブラリを使用していいんだろ?
だったらそれを使えば後はどっかで素因数分解のソースを探せばいいだけじゃん。
359353:2005/04/25(月) 17:38:20
多倍長整数演算については自分でなんとかしますので、
int型を使った整数演算で数体ふるい法を使った素因数分解のプログラムを教えてくださいませんか?
360353:2005/04/25(月) 17:39:56
取り合えず、本屋で素因数分解と素数判定という本を買って勉強していますが…
361デフォルトの名無しさん:2005/04/25(月) 17:40:56
素因数分解のソースも>>356に貼っておいたのに・・・・
仕事に使うんだったら、金払って誰か他の人に頼めよ。
362デフォルトの名無しさん:2005/04/25(月) 17:56:32
>>361
仕事ではありません。
大学の課題です。
363デフォルトの名無しさん:2005/04/25(月) 18:24:09
そういえば、まとめページの話はどーなったのだらう。
期待しているのだが。
364デフォルトの名無しさん:2005/04/25(月) 18:28:24
>>362
この当たりのソースはどうだ?C言語で書かれていて、一般数なら120桁まで
求められそうだが。
http://www.math.ttu.edu/~cmonico/software/ggnfs/

General Number Field Sieve source code でぐぐれば無数に見つかるぞ。
上のは一番最初に出てきたやつ。
365デフォルトの名無しさん:2005/04/25(月) 18:49:35
>>363
まとめ中。
忙しいので後回しにしているが、需要があったんだな。
Wikiでいいよね。

ところで、WEBページ用にどの無料鯖を使えばいいだろうか。オススメってある?
366デフォルトの名無しさん:2005/04/25(月) 19:34:32
1] 授業単元: プログラミング技術
[2] 問題文:
@フィナボッチ数を20番まで求め、配列に格納し、その後に印字するプログラムを作成せよ。なお、出力は10個ごとに改行せよ。
A40以下入力データを引き数にして、フィナボッチ数を求める部分を関数とするプログラムを作成せよ。
[3] 環境
 [3.1] OS: Win Xp
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年4月28日まで/無期限
[5] その他の制限: 特になし
高校の宿題なのですが自分にはさっぱりで困っています・・
こんなへたれな自分に救いの手をおねがいします・


367デフォルトの名無しさん:2005/04/25(月) 20:13:49
>>366
#include <stdio.h>
#define K0 0
#define K1 1

void fib(int n, int buf[], int size)
{
  int end = n < size ? n : size;
  int i = 0;
  if( n > 1 ) buf[ i++ ] = K0; else return;
  if( n > 2 ) buf[ i++ ] = K1; else return;
  for( ; i < end; i++ )
    buf[ i ] = buf[ i - 1 ] + buf[ i - 2 ];
}

void print(int buf[], int size)
{
  int i;
  for( i= 0; i < size; i++ )
    printf("%d%c", buf[i], i % 10 == 9 ? '\n' : ' ');
}

#define N 40
int main()
{
  int buf[N];
  fib( N, buf, N );
  print( buf, N );
  return 0;
}
368367:2005/04/25(月) 20:17:12
しまった、出題にちゃんと答えてないや。
369367:2005/04/25(月) 20:19:08
ん、まてよ。

Aは >> 367 の fib でいいよな。
@はどうだろうな。 >> 367 のNを20にすれば一応望みの出力結果は出るが。
370367:2005/04/25(月) 20:34:42
そして、訂正


> if( n > 1 ) buf[ i++ ] = K0; else return;
> if( n > 2 ) buf[ i++ ] = K1; else return;


> if( end > 1 ) buf[ i++ ] = K0; else return;
> if( end > 2 ) buf[ i++ ] = K1; else return;
371デフォルトの名無しさん:2005/04/25(月) 20:55:51
>>365
さんくす&おつされさま。
一応、答える側だったりするんで・・・まとめページのどこそこ参照とかやれるといいなと。
それに、良い問題&良い回答って勉強になる。

Wikiでいいんじゃないかしらん。
Wikiの使えるよさげな無料鯖はわからん。(すまん)
372デフォルトの名無しさん:2005/04/25(月) 21:00:45
>>366
void fibStep (int* u, int* v) {int tmp; tmp=*u; *u=*v; *v=tmp+*v;}
int* fibAux (int* m, int* u, int* v, int n) {
if (n == 0) {*u = 0; *v = 1; *m=*u; return m+1;}
else {int* tmp; tmp = fibAux (m+1, u, v, n-1); fibStep (u, v); *m = *u; return tmp;}}
int* fib (int* m, int n) {int u, v; return fibAux (m, &u, &v, n);}

int main () {
int a[100], *iter, *endp;
endp = fib (a, 6);
for (iter = a; iter != endp; ++iter) printf ("%d ", *iter);
//for (iter = endp-1; iter != a-1; --iter) printf ("%d ", *iter);
return 0;
}
373デフォルトの名無しさん:2005/04/25(月) 21:29:26
>>367
同じ計算を何度もするから効率悪い。
>>372は改善している
374デフォルトの名無しさん:2005/04/25(月) 21:37:08
>>373
どの部分?
375デフォルトの名無しさん:2005/04/25(月) 21:40:45
(●´ー`●)*20
376デフォルトの名無しさん:2005/04/25(月) 21:47:52
#include <stdio.h>

void *for_each(void *begin, void *end, void*(*f)(void*))
{
  while(begin < end) begin = (*f)(begin);
  return begin;
}

void *fib_int(void *n)
{
  int *p = n;
  *p = *(p-1) + *(p-2);
  return ++p;
}

void *print(void *n)
{
  int *p = n;
  printf("%d ", *p);
  return ++p;
}

#define N 40
int main()
{
  int a[N], *it;
  a[0]=0; a[1]=1;
  for_each(a+2, a+N, fib_int);
  for(it=a; it<a+N; it=for_each(it, it+10, print), putchar('\n'));
  return 0;
}
377デフォルトの名無しさん:2005/04/25(月) 22:04:10
>>373
372のほうが、再起コールでオーバーヘッドあるように見える。
378デフォルトの名無しさん:2005/04/25(月) 22:13:22
実測しました。
>>367 > >>372
その差2倍
379デフォルトの名無しさん:2005/04/25(月) 22:16:12
>>365
乙+期待している
380377:2005/04/25(月) 22:16:46
あー、そういうことか、わかった。
kn-1 と kn-2 のとり方ね。
381デフォルトの名無しさん:2005/04/25(月) 23:45:13
>>378
それほんと?
計ってみたら>>372の方が10倍くらい時間かかってるんだけど。
382デフォルトの名無しさん:2005/04/25(月) 23:53:06
>>381
コンパイル環境によるんだろうな。
383デフォルトの名無しさん:2005/04/26(火) 00:28:18
最適化…
384デフォルトの名無しさん:2005/04/26(火) 00:40:04
まあ、>>378>>381 の結果はどうなのかよくわからんが
>>372は最適化よりも関数呼び出しのオーバーヘッドの方が大きいと思う。
385デフォルトの名無しさん:2005/04/26(火) 00:41:49
Cに末尾再帰が実装されるのはいつですか
386デフォルトの名無しさん:2005/04/26(火) 00:53:00
>>353
MathematicaでMathLinkを使うのが早い。
387デフォルトの名無しさん:2005/04/26(火) 01:37:19
もまいら、つっこみ所はそこぢゃない
>フィナボッチ

>フィナボッチ の検索結果のうち 日本語のページ 約 672 件中 1 - 20 件目 (0.11 秒)

...orz
388デフォルトの名無しさん:2005/04/26(火) 02:01:42
>>387
>>367が見逃した時点で皆スルーやね

>>366
現在、コンパイル出来る環境でないので、通るか分からんが…

#include <stdio.h>
#include <stdlib.h>
#define COUNT 20
#define LIMIT 40
typedef unsigned int Fibonacci;
typedef Fibonacci *FibTable;

void Ans002sub(FibTable Table,size_t Size){Fibonacci i,j;
  for(i=j=1,*Table=0;Table++,--Size;j+=i,i=*Table)*Table=j;return;}

FibTable Ans002(size_t Size){FibTable Table=NULL;
  if(Size&&Size<=LIMIT&&(Table=malloc(sizeof(*Table)*Size)))
    Ans002sub(Table,Size);return Table;}

void Ans001sub(FibTable Table,size_t n){size_t Index;
  for(Index=0;Index<n;Index++)
    printf("%d%s",Table[Index],(Index%10!=9)?", ":"\n");return;}

void Ans001(){FibTable Table;size_t Count=COUNT;
  if((Table=Ans002(Count))){
    Ans001sub(Table,Count);free(Table);}else printf("error\n");return;}

int main(){Ans001();return 0;}
389デフォルトの名無しさん:2005/04/26(火) 02:18:46
@
int n,f[20+1];
f[1]=f[2]=1;
for(n=3; n<=20; ++n) f[n]=f[n-2]+f[n-1];
for(n=1; n<=20; ++n) printf(" %4d%s", f[n], (n%10)?"":"\n");


A
#define LIMIT 40
unsigned long fib(int n)
{
static unsigned long f[LIMIT+1]={0};
if(n>LIMIT) return 0;
if(n<=2) return f[2]=f[1]=1;
return (f[n])?f[n]:(f[n]=fib(n-2)+fib(n-1));
}
390デフォルトの名無しさん:2005/04/26(火) 03:06:31
>>388
>void Ans002sub(FibTable Table,size_t Size){Fibonacci i,j;
>  for(i=j=1,*Table=0;Table++,--Size;j+=i,i=*Table)*Table=j;return;}

何かおかしいような気がして見直してみたら、ミスってた…という訳で
void Ans002sub(FibTable Table,size_t Size){Fibonacci i,j;
  for(j=1,*Table=i=0;Table++,--Size;j+=i,i=*Table)*Table=j;return;}

で、多分こうした方が早そうな気も…と言っても殆ど変わらないと思うけど…
void Ans002sub(FibTable Table,size_t Size){Fibonacci i;
  for(i=1,*Table=0;Table++,--Size;i+=*(Table-1))*Table=i;return;}
391デフォルトの名無しさん:2005/04/26(火) 03:16:23
良くあるネタとして
#include <stdio.h>
#define N01 0
#define N02 1
#define N03 N01 + N02
#define N04 N02 + N03
#define N05 N03 + N04
#define N06 N04 + N05
#define N07 N05 + N06
#define N08 N06 + N07
#define N09 N07 + N08
#define N10 N08 + N09
#define N11 N09 + N10
#define N12 N10 + N11
#define N13 N11 + N12
#define N14 N12 + N13
#define N15 N13 + N14
#define N16 N14 + N15
#define N17 N15 + N16
#define N18 N16 + N17
#define N19 N17 + N18
#define N20 N18 + N19
int main(){
printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",N01,
N02,N03,N04,N05,N06,N07,N08,N09,N10,N11,N12,N13,N14,N15,N16,N17,N18,N19,N20);
return;}
392デフォルトの名無しさん:2005/04/26(火) 03:25:40
template< unsigned n > unsigned
f() {
return f< n - 1 >() + f< n - 2 >();
}
template<> unsigned
f< 1 >() {
return 1;
}
template<> unsigned
f< 2 >() {
return 2;
}

C++ なのが難点
393デフォルトの名無しさん:2005/04/26(火) 08:43:51
横槍入れるけどごめん。
くだ質に書こうと思ったけど、ココの方が確実な気がしたので質問させて下さい。

C++で多次元配列を引数にする方法って何かありますか?
多次元と言うか、2次でいいんですが。
int *A[] ってポインタ化しないと無理ですかね?
394デフォルトの名無しさん:2005/04/26(火) 08:53:34
>>393
構造体やクラスのメンバに配列を持てばできる
ただしオーバーヘッドはでかくなると思うぞ
395デフォルトの名無しさん:2005/04/26(火) 09:34:27
>>393
vectorのvectorにしたら?

>>394
とは言え、でかいか?
396デフォルトの名無しさん:2005/04/26(火) 10:38:48
>>393
void foo(const int (&array)[5][8])
{
}
397393:2005/04/26(火) 10:55:00
>>394,395,396
レスさんくすこ。
とりあえずstructで作り始めてみましたが、あんまりよくないかな。
作るだけなら楽な道だと思いますが。一度出来たらいろいろ試してみます。
ありがとうございました。
398デフォルトの名無しさん:2005/04/26(火) 11:42:24
>>353
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/333.c
やっつけ。atoiさえ何とかすればstdio.hのみでいける。

2,3,5,7,9,11,13,15,17…
と2と3以降の奇数で割り切れているかどうかで調べているので
効率が悪い。20桁近くの2つの素数からなる合成数とかまず_
あとエラー処理は全く考えてない。
399デフォルトの名無しさん:2005/04/26(火) 16:56:44
>>394
そこでconst参照ですよ。
400デフォルトの名無しさん:2005/04/26(火) 17:21:36
>>398
決定性アルゴリズムではまず無理だ。
20桁以上だと確率的なアルゴリズムを考えないとダメ。
401デフォルトの名無しさん:2005/04/26(火) 18:48:18
402デフォルトの名無しさん:2005/04/26(火) 21:06:01
[1] 授業単元: 離散数学
[2] 問題文(含コード&リンク): 最大公約数を求める関数を作成せよ
[3] 環境
 [3.1] OS: Vine linux 3.0
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語: C
[4] 期限: 4/27
[5] その他の制限: 特にありません。
403デフォルトの名無しさん:2005/04/26(火) 21:11:19
>>402
int GCD(int a,int b){
return a?f(b%a,a):b;
}
404デフォルトの名無しさん:2005/04/26(火) 21:12:29
ユークリッドハァハァ
405デフォルトの名無しさん:2005/04/26(火) 21:18:05
f()?
406デフォルトの名無しさん:2005/04/26(火) 21:22:42
きっとfは関数ポインタでGCDが入ってるんだよ!な?な?
407デフォルトの名無しさん:2005/04/26(火) 21:26:57
>>402
int gcd (int a, int b) {
int g, c, e = 0;
while (a&1 + b&1 == 0) {a = a>>1; b = b>>1; e++;}
while (a&1 == 0) a = a>>1;
while (b&1 == 0) b = b>>1;
while (b != 0 && b != 1) {
c = (a-b); c = c>=0?c:-c;
a = a>=b?b:a;
b = c; while (b&1 == 0) b = b>>1;
}
if (b == 0) g = a * power (2, e);
if (b == 1) g = power (2, e);
return g;
}
408407:2005/04/26(火) 21:28:28
int power (int a, int b) {
int n = 1;
while (b) {if (b&1) n = n*a; b = b >> 1; a = a*a;}
return n;
}
409403:2005/04/26(火) 21:28:34
ごめwww

int GCD(int a,int b){
return a?GCD(b%a,a):b;
}

(/ω\)ハズカシーィ
410デフォルトの名無しさん:2005/04/26(火) 21:31:01
40桁くらいならρ法か2次篩法を勧める。
411デフォルトの名無しさん:2005/04/26(火) 22:57:30
>>365がアルゴリズム集を作ってくれる件について
412デフォルトの名無しさん:2005/04/26(火) 23:10:46
>>385
末尾再帰自体は昔からCでできますが何か?
413デフォルトの名無しさん:2005/04/26(火) 23:16:41
[1] 授業単元: アルゴリズム論演習
[2] 問題文(含コード&リンク): 1+1/2^2+1/3^2+・・・+1/1000^2
を計算せよ。


[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年4月27日
[5] その他の制限: 特になし。

どなたかご教授下さい。

414デフォルトの名無しさん:2005/04/26(火) 23:36:40
>>413
double f (int n) {
if (n <= 1) return 1.0;
else {return 1.0/((double)(n*n))+f (n-1);}
}
int main () {
printf ("%lf\n", f (1000));
return 0;
}
415デフォルトの名無しさん:2005/04/26(火) 23:37:28
>>412
Cに末尾再帰最適化が実装されるのはいつですか
416413:2005/04/26(火) 23:42:42
>>414 
ご回答ありがとうございます。
初心的な質問ですが、プログラムの頭に
#include <stdio.h>
は必要ないのですか?
417デフォルトの名無しさん:2005/04/26(火) 23:46:02
>>416
必要
418デフォルトの名無しさん:2005/04/26(火) 23:49:19
>>416
必要だと思えばつけよ。
ここの回答が、常に完全な形で与えられると思うな。
419デフォルトの名無しさん:2005/04/26(火) 23:50:20
%lfは間違い。
420デフォルトの名無しさん:2005/04/27(水) 00:06:06
419 晒し age
421デフォルトの名無しさん:2005/04/27(水) 00:50:42
#include<stdio.h>
double f1(int);
double f2(int);

int main(int argc,char **argv){
double a=f1(1000),b=f2(1000);
printf("%.16f\n%.16f\n%.16e\n",a,b,a-b);
return 0;
}

double f1(int n){/* 大きい方から足す */
double sum=0;
int i;
for(i=1;i<n+1;i++)
sum=sum+1.0/((double)i*(double)i);
return sum;
}

double f2(int n){/* 小さい方から足す */
double sum=0;
int i;
for(i=n;i>0;i--)
sum=sum+1.0/((double)i*(double)i);
return sum;
}
ふと気になって書いてみたけど1.5e-15程度の誤差しか出なかった。
>>413の出題者がこれをねらいにしてるわけじゃなさそうだから
他ので大丈夫だとは思うが
422デフォルトの名無しさん:2005/04/27(水) 01:06:03
> sum=sum+1.0/((double)i*(double)i);

sum=sum+1.0/((double)i*i); でいいべ
423デフォルトの名無しさん:2005/04/27(水) 01:37:39
[1] 授業単元: 情報工学実験2
[2] 問題文(含コード&リンク): ポインタを使い動的に配列を確保する方法を利用して、
  プログラム実行時に頂点数を柔軟に指定できるようにプログラムを改良せよ。
  ヒント n*n個の値を格納するためには、int graph[n*n]として宣言された配列があれがよい
      無向グラフであればn*nの配列の約半分は不要である。
      ループした辺を認めないのであれば、対角成分は常に偽となる。
[3] 環境
 [3.1] OS: WINXP
 [3.2] コンパイラ(バージョン):Borland C++ Compiler 5.5.1
 [3.3] 言語:Cでお願いします。
[4] 期限:4月27日17時
424423:2005/04/27(水) 01:38:20
プログラム
#include <stdio.h>
#include <stdlib.h>
#define NMAX 10
#define FALSE 0
#define TRUE 1
void inputgraph(int *n1, int graph[NMAX+1][NMAX+1])
{
int i, j, n,k;
puts ("input the number of vertices:");
if (scanf("%d%*[^\n]", &n) != 1 || n > NMAX)
{
n = 0;
*n1 = n;
return;
}
*n1 = n;
for(i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
graph[i][j] = FALSE;
puts("input the numbers of two vertices connected by a side:");
while (scanf("%d%d%d%*[^\n]", &i, &j, &k) == 3)
{
graph[i][j] = k;
graph[j][i] = k;
}
}
425423:2005/04/27(水) 01:39:01
/*
print the graph data
*/
void print_graphdata(int n, int graph[NMAX+1][NMAX+1])
{
int i, j;
puts("graph data: graph(i,j)=F/T");
for (i = 1; i <= n; i++) {
printf("%3d",i);
for (j = 1; j <= i; j++) {
if (graph[i][j])
fputs(" T",stdout);
else
fputs(" F",stdout);
}
puts("");
}
fputs(" ",stdout);
for (i = 1; i <= n; i++) printf("%3d",i);
puts("");
}
426423:2005/04/27(水) 01:40:46
/*
main program
*/
int main()
{
int graph[NMAX + 1][NMAX + 1];
/*
graph[i][j] = 1 if the vertices i, j are connected and
graph[i][j] = 0 otherwise
*/
int n; /* number of vertices */

inputgraph(&n, graph); /* input "n" and "graph[i][j]" */
/* printf("n = %d\n", n);*/
print_graphdata(n, graph);

return EXIT_SUCCESS;
}
長文失礼しました。
よろしくお願いします。
427デフォルトの名無しさん:2005/04/27(水) 02:52:26
[1] C言語
[2] N*Nの魔法陣を作成せよ。(ただし、Nは奇数とする
[3] 環境
 [3.1] Unix
 [3.2] gcc
 [3.3] C
[4] 期限:できるだけ早く

2次元配列に斜めに代入していき、配列がblankならその下の配列に移動して、、、というやり方
らしいのですが、さっぱりです。ソースを書いていただけるとうれしいです。
428デフォルトの名無しさん:2005/04/27(水) 03:15:23
#include<stdio.h>
#define N 3

int main(int argc,char **argv){
int a[N][N],b=N/2,c=N/2+1,d=1,i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
a[b++][c++]=d++;
b%=N;c%=N;
}
c=(c+1)%N;b=(b+N-1)%N;
}
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%3d ",a[j][i]);
printf("\n");
}
return 0;
}
429427:2005/04/27(水) 03:27:37
>> 428 激しく、超感謝です。まじで、本当にありがとうございました。
430デフォルトの名無しさん:2005/04/27(水) 03:56:32
>>423
何をしたいのか意味が分からんので
ヒントは無視して、ソースから適当に判断したから
検討違いだったらスマソ
あと、コンパイル&実行してないからミスってるかも知れんので
エラーが出たら自分で直してね

#include <stdio.h>
#include <stdlib.h>
#define NMAX 10

int *inputgraph(){
  int i,j,k,n,*p=NULL;
  puts("input the number of vertices:");
  if((scanf("%d%*[^\n]",&n)==1)&&n<=NMAX){
    if((p=calloc(n*n+1,sizeof(*p)))){
      *p=n;
      puts("input the numbers of two vertices connected by a side:");
      while(scanf("%d%d%d%*[^\n]",&i,&j,&k)==3)
        if(--i<NMAX&&--j<NMAX)p[i*n+j+1]=k,p[j*n+i+1]=k;}}
  return p;}
431デフォルトの名無しさん:2005/04/27(水) 03:57:23
void print_graphdata(int *p){
  int i,j,n;
  n=*p;
  puts("graph data: graph(i,j)=F/T");
  for(i=0;i<n;i++){
    printf("%3d",i+1);
    for(j=0;j<i;j++)fputs(p[i*n+j+1]?" T":" F",stdout);
    puts("");}
  fputs(" ",stdout);
  for(i=0;i<n;i++)printf("%3d",i+1);
  puts("");
  return;}

int main(){
  int n,*p;
  n=-1;
  if((p=inputgraph()))print_graphdata(p);
  if(p){
    n=EXIT_SUCCESS;
    free(p);}
  return n ; }
432デフォルトの名無しさん:2005/04/27(水) 04:46:24
>>423
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/336.txt

無向グラフ対応済み。
インデックスが0からになってる。
433423:2005/04/27(水) 05:44:23
>>430
>>432
ありがとうございます。
自分的にはmallocとsizeofをつかって頂点を制限なく取れるように
しようとしていたのですがどれくらいの領域を確保すればよいかよく分からなくて困ってました。
やっぱり素直にNMAXを増やしたほうがよかったんですね。
ありがとうございました。
434デフォルトの名無しさん:2005/04/27(水) 11:05:21
[1] 授業単元: プログラミング2
[2] 問題文(含コード&リンク): ポインタ 構造体
(1) 配列を用いず、ポインタのみを用いて、入力した文字列の並びを反転し大文字と小文字を入れ替える関数を作成してください.
    ただし、この関数の外(つまり、外部やmainで文字列を格納するとき)では、配列を用いてもかまいません.
(例)abc12CDE と入力すると、edc21CBA と出力する.
(2) さらに、構造体を用いて、入力したそれぞれの文字の頻度を出力する関数を作成してください.
(例)abc12CDE と入力すると、
a = 1 b = 1 c = 2 1 = 1 2 = 1 d = 1 e = 1
と出力する.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語: C
[4] 期限: 4月28日
[5] その他の制限: なし

よろしくお願いします。
435デフォルトの名無しさん:2005/04/27(水) 11:20:55
436デフォルトの名無しさん:2005/04/27(水) 11:35:58
>>435
>>401
ほんとうにありがとうございます。
ソース見て勉強します。
437デフォルトの名無しさん:2005/04/27(水) 11:49:29
(1)
void string_reverse(const char *src , char *buf){
  const size_t length = strlen(src);
  buf += length;
  *buf = '\0';
  while(*src != '\0') {
    buf--;
    if(*src >= 'a') *buf = toupper(*src);
    else *buf = tolower(*src);
    src++;
  }
}
438デフォルトの名無しさん:2005/04/27(水) 11:51:36
更新するの忘れたorz
439デフォルトの名無しさん:2005/04/27(水) 12:00:17
>>434
void swap (char* a, char* b) {char tmp = *a; *a = *b; *b = tmp;}
char* reverse (char* str) {
char *p, *ep; p = ep = str; while (*ep++); ep -= 2;
while (p < ep) {swap (p, ep); p++; ep--;}
return str;
}
int main () {
char str[] = "abcdef";
printf ("%s\n", reverse (str));
return 0;
}
440デフォルトの名無しさん:2005/04/27(水) 12:28:34
>>437
EBCDIC の呪いにかかって死んでしまえ
441デフォルトの名無しさん:2005/04/27(水) 14:03:28
>>434
#include <stdio.h>

typedef struct Cell_tag {
char val_char;
int val_int;
struct Cell_tag* next;
} Cell;

Cell* new_cell (char val_char, int val_int, Cell* cell) {
Cell* cp = (Cell*) malloc (sizeof (Cell));
if (cp == NULL) return NULL;
cp->val_char = val_char; cp->val_int = val_int; cp->next = cell;
return cp;
}

void free_cell_all (Cell* cell) {
if (cell != NULL) {
Cell* next = cell->next;
free (cell);
free_cell_all (next);
}
}
442デフォルトの名無しさん:2005/04/27(水) 14:03:54
>>434
Cell* push_list (char val_char, int val_int, Cell** place) {
Cell* cp = new_cell (val_char, val_int, *place); *place = cp; return cp;}

Cell* append (char val_char, Cell** cell) {
if (*cell == NULL) return push_list (val_char, 1, cell);
else if ((*cell)->val_char == val_char) {(*cell)->val_int++; return *cell;}
else return append (val_char, &((*cell)->next));
}

void print_list (Cell* cell) {
if (cell == NULL) return;
else {printf ("%c = %d ", cell->val_char, cell->val_int); print_list (cell->next);}
}

void print_freq (char* str) {
Cell* cell = NULL;
while (*str) {append (*str, &cell); str++;}
print_list (cell);
free_cell_all (cell);
}

int main () {
print_freq ("abbcccdddd");
return 0;
}
443デフォルトの名無しさん:2005/04/27(水) 16:59:19
>>440
ASCIIコード表見て書きました
すみません…
444デフォルトの名無しさん:2005/04/27(水) 17:04:16
>>443
素直に islower() 使えばいいのに
445デフォルトの名無しさん:2005/04/27(水) 17:05:35
だな、
446443:2005/04/27(水) 17:07:34
ってto系ってASCII以外で動かないか…
>>444
islowerってあったんですね
勉強になりました
447デフォルトの名無しさん:2005/04/27(水) 17:17:05
ASCII以外でも動きますね
ごめんなさい
448デフォルトの名無しさん:2005/04/27(水) 18:45:33
>>427
#include <stdio.h>
#include <stdlib.h>
int mod (int a, int b) {int t = a % b; return t < 0 ? b+t : t;}
int** magic_square (int** square, int n, int x, int y, int m) {
if (!square[y][x]) {
square[y][x] = m;
return magic_square (square, n, mod (x-1, n), mod (y+1, n), m+1);
} else {
int ty = mod (y-2, n), tx = mod (x+1, n);
if (!square[ty][tx]) return magic_square (square, n, tx, ty, m);
else return square;
}
}
int** alloc_matrix (int n) {
int **matrix, i;
matrix = (int**) malloc (n * sizeof (int*));
for (i = 0; i < n; ++i) matrix[i] = (int*) malloc (n * sizeof (int));
return matrix;
}
int** init_matrix (int** matrix, int n) {
int i, j;
for (i = 0; i < n; ++i)for (j = 0; j < n; ++j) matrix[i][j] = 0;
return matrix;
}
449デフォルトの名無しさん:2005/04/27(水) 18:47:05
void print_matrix (int** matrix, int n) {
int i, j;
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) printf ("%3d", matrix[i][j]);
printf ("\n");
}
fflush (stdout);
}

int main () {
int n=3;
print_matrix (magic_square (init_matrix (alloc_matrix (n), n), n, n/2, n-1, 1), n);
return 0;
}
450デフォルトの名無しさん:2005/04/27(水) 21:35:38
初期状態を□として、○×を交互に表示していきたい。
プロの皆さん。初心者に一分で教えてください。

# ./a.out

どこに×を置きますか?:2 2
□□□
□×□
□□□・

どこに○を置きますか?:3 1
□□□
□×□
○□□

451デフォルトの名無しさん:2005/04/27(水) 21:37:48
続きです。
これの、空いてるところをうめてください。

#include <stdio.h>

int main(void)
{
 int i, j, n,m,k=0;
 int map[4][4]={0,0,0,0,0,0,0,0,0};
 int mark=1;//初期状態は×
 char* str="×";//初期状態は×から開始
 while(k<9){
  printf("どこに%sを置きますか?:",str);
  scanf("%d %d", &n,&m);
  

452デフォルトの名無しさん:2005/04/27(水) 21:37:57
>>450
テンプレに従え。
453デフォルトの名無しさん:2005/04/27(水) 21:38:11
後半

  //指定された位置の○×情報を代入


  //表示の部分
  for (i = 1; i <= 3; i++) {
   for (j = 1; j <= 3; j++){
  
   }

  }
  putchar('\n');
  }
  k++;


 //以下は,○と×を入れ替える処理

  if(mark==1){
   mark=2;
   str="○";
  }else{
   mark=1;
   str="×";
  }

 }

return (0);
}
454デフォルトの名無しさん:2005/04/27(水) 21:40:44
455デフォルトの名無しさん:2005/04/27(水) 21:43:07
[1] 授業単元: アルゴリズムとデータ構造
[2] 問題文(含コード&リンク): 上に貼り付けちゃいました。
[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年4月28日
[5] その他の制限: なし
お願いします。
456デフォルトの名無しさん:2005/04/27(水) 21:51:30
>>415
gccとかなら古くから実装されてるが。
多分O2以上の最適化オプションで末尾再帰最適化もする。
457デフォルトの名無しさん:2005/04/27(水) 21:54:29
>>456
それじゃ再帰を使った方がきれいで速いコードが書けちゃうんですか?!
まだ学校でも再帰って習ってないです
458デフォルトの名無しさん:2005/04/27(水) 22:06:31
>>457
常にそうとは限らない。
ループを使った方が良い場合も多い。
459デフォルトの名無しさん:2005/04/27(水) 22:19:33
>>450
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
ここの67に張っておいた。

このウプロダはじめてでよくわからん。
460デフォルトの名無しさん:2005/04/27(水) 22:44:09
>>459
ありがとうございます!
・・・が、451と453にうめてほしかったんです。
461デフォルトの名無しさん:2005/04/27(水) 22:47:53
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):
アメリカ本土への国際ダイヤル通話料金システムは次のようになっている。
@昼間料金(月曜日〜金曜日の午前7時から午後7時まで)
最初の1分まで 300円 
1分経過後 6秒ごと 15円
A夜間・休日割引料金(月曜日〜金曜日の午後7時から午後11時まで、および休日(土日祝日、正月三が日)の午前8時から午後11時まで)
最初の1分まで 240円
1分経過後6秒ごと 12円
B深夜料金割引(日曜日〜土曜日の午後11時から翌朝の午後8時まで)
最初の1分まで 180円
1分経過6秒ごと 9円
通話料金と料金システムの区分番号を入力して、それに該当する通話料金を計算して。出力するプログラムを作りなさい。

[3] 環境
 [3.1] OS: WINDOWS XP
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年4月28日
[5]明日までなんでかなりあせってます・・
こんなヘタレに教えてください!お願いします!
462デフォルトの名無しさん:2005/04/27(水) 22:58:31
> 通話料金と料金システムの区分番号を入力して、それに該当する通話料金を計算して。出力するプログラムを作りなさい。

入力された通話料金をそのまま出力すればいいのか?
463デフォルトの名無しさん:2005/04/27(水) 23:03:46
通話時間と料金システムじゃないのか

しかしそれだと簡単杉か…
464デフォルトの名無しさん:2005/04/27(水) 23:04:52
いいじゃないか簡単なほうが
465デフォルトの名無しさん:2005/04/27(水) 23:06:06
普通に出題するなら入力は通話開始時刻と通話時間だと思うが
466デフォルトの名無しさん:2005/04/27(水) 23:08:17
深夜料金時間帯と昼間料金時間帯がかぶってる
467ゆう:2005/04/27(水) 23:22:25
[1] 授業単元:数値シミュレーション 高速フーリエ変換
[2] 問題文(含コード&リンク):50Hzの正弦波に一様乱数を重ねた信号のフーリエ変換をするプログラムを作る。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):?
 [3.3] 言語:C
[4] 期限:2005年05月11日
[5] その他の制限:問題の意味がチンプンカンプンです。
         高速フーリエ変換と一様乱数発生のプログラムはわかります。
468デフォルトの名無しさん:2005/04/27(水) 23:29:10
>>467
女ならまずおっぱいうpだ
469デフォルトの名無しさん:2005/04/27(水) 23:35:21
>>467
double pi = 3.14159;
double f = 50;
double rate = /* サンプリングレートがワカラン */;
1)50Hzのデータを用意する。(a[t] = sin(2 * pi * t / f / rate);
2)それに乱数を加える(a[t] = rand() - 0.5 );
3)フーリエ変換
4)出力。
50ヘルツのところだけ突出し、のこりは一様乱数の影響で各周波数がほぼ一定の値になると思うよ。
470デフォルトの名無しさん:2005/04/27(水) 23:36:42
かわいそうな>>468
471デフォルトの名無しさん:2005/04/27(水) 23:53:57
>>461
とりあえず、通話時間と区分を入力して計算するプログラム。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/338.txt
472461:2005/04/28(木) 00:11:07
>>471さん まじでありがとうございました!
473デフォルトの名無しさん:2005/04/28(木) 00:18:51
474メモリダイヤル名無しさん:2005/04/28(木) 02:09:10
1] 授業単元:ソートアルゴリズム
[2] 問題文(含コード&リンク):電話帳の作成
 @電話帳の作成、編集が可能であり、その結果をファイルに保存、読み出しができる事。
  また、データの検索、およびソートが可能である事。
  メモリダイヤルは1件ごとに追加、編集、削除が行える事。
  全件表示の時に名前、電話番号による昇順、降順ソートが可能な事。
  メモリダイヤルの登録件数は最大1000件。
  許容する文字は
  電話番号が'0'〜'9','*','#','-','P'で32桁まで
  名前がひらがな英数(シフトJIS)でASCIIで32桁まで
 Aソート条件
  名前は、英字、数字、ひらがなの順番に並び替える事。
  電話番号は'P'および'-'を無視した結果を
  '*'<'#'<'0'......'9'の順番で並び替える事。
  名前、電話番号とも昇順、降順でのソートが可能な事。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン):Visual C++ 6.0
 [3.3] 言語:C言語
[4] 期限:2005年5月2日まで
[5] その他の制限:
475474の続きです:2005/04/28(木) 02:14:59
B検索条件
 名前の場合は前方一致、電話番号は'P'および'-'を無視した結果を表示。
 条件に一致したメモリダイヤルを抜きだして表示すう事。
Cファイルはテキストフォーマットとする
 一行目にメモリダイヤルを10進数表記で
 二行目以降にそれぞれのメモリダイヤルをTABで区切って
 電話番号 TAB 名前 で保存できる事。
 ファイルからの読み込みが行える事。

途中まで作成したんですが、もうお手上げです。
どなたかご教授お願いします。
下記URLにメモリダイヤルという名前でアプロダしてます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?
よろしくお願いします!
476475の続きです:2005/04/28(木) 02:17:22
電話帳の編集時に、
許容外の文字が入力されたらエラーで返したいです。

つーか、これ課題にしてはむずかしすぎないですか??
477デフォルトの名無しさん:2005/04/28(木) 02:50:32
>474

もまえの説明がまずいのでよくわかんないな
問題文はオリジナルか?
"メモリダイヤル"ってなんだ? 配列でいうところのインデックスか?

とりあえず struct Data が最大1000件、ってことでいいのか?
478メモリダイヤル名無しさん
>477

説明悪くてすいません。
メモリダイヤルは電話帳です。
配列でいうインデックスです。

struct Dataが最大1000件です。
この電話帳に最大で1000件登録できるという事です。

よろしくお願いします。