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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

前スレ
C/C++の宿題を片付けます 114代目
http://pc11.2ch.net/test/read.cgi/tech/1216746971/
2デフォルトの名無しさん:2008/08/04(月) 07:46:14
只今全スレが稼働中です。
3デフォルトの名無しさん:2008/08/04(月) 12:51:53
2chは今日も元気だってこと?
4デフォルトの名無しさん:2008/08/04(月) 14:42:57
暇な奴が多いってことでしょ。
5デフォルトの名無しさん:2008/08/04(月) 17:14:56
6 ◆7W9NT64xD6 :2008/08/04(月) 17:31:05
[1]C言語応用
[2]2chの掲示板のdatファイルを解析して、レスストリーム(後述)に分解し、
フレーム付きのページで、ストリーム単位に閲覧することができるような
HTMLファイルを生成する。Windows/Linux/MacOS共に対応し、コマンドラインで
スレURLを与えれば、カレントディレクトリに、取得した時点のYYYYMMDDHHMMSS形式の
名称のディレクトリを作り、そこにフレーム付きページを生成する。
☆レスストリーム
(1)同一スレの別のレスへのアンカーを含まないレスは単一のストリームに含まれる、その
ストリームの代表レスとなる。
(3)同一スレの別のレスへのアンカーを含むレスは、指しているレスが所属するストリーム
のすべてに含まれる。
※一つのレスが複数のストリームに含まれることはあり得る。
[3] Windows/Linux /MacOS/gcc/C言語が望ましいがC++でも可
[4] 7月中でしたが8月中に変更
7デフォルトの名無しさん:2008/08/04(月) 19:44:01
>>6
どこの学校の何年の課題だよ
8デフォルトの名無しさん:2008/08/04(月) 19:50:19
自分がやりたいことを課題風に書いてアウトソースと予想
9デフォルトの名無しさん:2008/08/04(月) 22:04:00
>>1
10デフォルトの名無しさん:2008/08/04(月) 22:14:03
11デフォルトの名無しさん:2008/08/04(月) 22:20:28
>>6
サンプルの dat とそれに対する出力例うp!
12デフォルトの名無しさん:2008/08/04(月) 23:07:23
[1]C言語
[2]
3次元ベクトルの外積を計算するプログラムを作れ。(以下の要求に従え。)
􀂉2つの3次元ベクトルa, b の成分はそれぞれテキストファイルa.txt, b.txtに作っておく。各行は1つの成分とする。
􀂉プログラムの中で、ファイルa.txt, b.txtからベクトルa, b の成分を読み込むようにする。
􀂉a=(a1,a2,a3), b=(b1,b2,b3) に対して、a とb の外積は(a2b3-a3b2, a3b1-a1b3, a1b2-a2b1)
􀂉a とb の外積をファイルaxb.txtに書き出せ
[3]OS:Windows  言語:C
[4]2008/08/5(pm.6)
よろしくお願いします
13デフォルトの名無しさん:2008/08/04(月) 23:11:56
>>12
a.txtとb.txtをアップしろ
14こんなんかな?:2008/08/04(月) 23:16:31
[a.txt]
1.1 2.1 3.1
1.2 2.2 3.2
: : :
[b.txt]
3.1 3.2 3.3
4.1 4.2 4.3
: : :
15デフォルトの名無しさん:2008/08/04(月) 23:17:01
>>13
たぶん適当でいいんだと思います


a.txt

1
2
3

b.txt

4
5
6

よろしくお願いします
16デフォルトの名無しさん:2008/08/04(月) 23:22:23
>>15
どう考えても>>14さんの形だろ
ってことで>>14さんのファイルでやってみる
17デフォルトの名無しさん:2008/08/04(月) 23:39:49
3次元ベクトルで各行に一成分なら>>15じゃね?
18デフォルトの名無しさん:2008/08/04(月) 23:50:32
>>15
すみません、ひょっとしたらこうかも。
たぶん>>14さんのような高度な事はこの問題は求めてないと思うので。


a.txt

a1
a2
a3

b.txt

b1
b2
b3
19名無しさん:2008/08/05(火) 07:28:40
#include <stdio.h>
#define N 3
int main()
{
double a[N], b[N], axb[N];
FILE *fpA = fopen("a.txt", "r");;
FILE *fpB = fopen("b.txt", "r");;
FILE *fpAXB = fopen("axb.txt", "w");;
long i;
for(i=0L; i<N; i++)
{
fscanf(fpA, "%lf", &a[i]);
fscanf(fpB, "%lf", &b[i]);
}
fclose(fpA); fclose(fpB);
axb[0] = a[2] * b[3] - a[3] * b[2];
axb[1] = a[3] * b[1] - a[1] * b[3];
axb[2] = a[1] * b[2] - a[2] * b[1];
for(i=0L; i<N; i++)
{
fprintf(fpAXB, "%lf\n", axb[i]);
}
fclose(fpAXB);
return 0;
}
20名無しさん:2008/08/05(火) 07:34:28
違ってるね。aとbの添え字。
21名無しさん:2008/08/05(火) 07:45:34

axb[0] = a[2] * b[3] - a[3] * b[2];
axb[1] = a[3] * b[1] - a[1] * b[3];
axb[2] = a[1] * b[2] - a[2] * b[1];

axb[0] = a[1] * b[2] - a[2] * b[1];
axb[1] = a[2] * b[0] - a[0] * b[2];
axb[2] = a[0] * b[1] - a[1] * b[0];

axb = |a| * |b| * sin(theta)
直交ベクトルどうしのベクトル積は|a| * |b| * 符号
(1, 0, 0) x (0, 0, 1) ===> (0, -1, 0)
平行ベクトルどうしのベクトル積はゼロベクトル
(1, 2, 3) x (1, 2, 3) ===> (0, 0, 0)
22デフォルトの名無しさん:2008/08/05(火) 10:39:44
>>21
ありがとうございました!
とても助かりました!
23デフォルトの名無しさん:2008/08/05(火) 11:25:19
struct{
float _11, _12, _13, _14;
float _21, _22, _23, _24;
float _31, _32, _33, _34;
float _41, _42, _43, _44;
};
上記のようなマトリックスのクラスで、
m[1][2]のようにアクセスできるように演算子[]を多重定義せよ
という課題です。よろしくお願いします。
24デフォルトの名無しさん:2008/08/05(火) 11:50:00
>>23
>>1くらい読め
25デフォルトの名無しさん:2008/08/05(火) 16:39:16
2階線形常微分方程式、(d^2 y)/(dx^2 )=A(Aは任意の実数),dy/dx(x=0のとき)=0,y(x=0のとき)=0
をオイラー法で解くと、具体的にどのようなC言語のプログラムになるのでしょうか。
(刻み幅10の場合)

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

26デフォルトの名無しさん:2008/08/05(火) 16:43:31
27デフォルトの名無しさん:2008/08/05(火) 16:45:59
>>24 >>26
あんたも>>1を読もうな?読める?読めない?聖徳太(ry
28デフォルトの名無しさん:2008/08/05(火) 16:47:27
> 気に入らない質問やその他や発言はスルーの方向で。
これね。読める?読めない?聖徳(ry
29デフォルトの名無しさん:2008/08/05(火) 17:00:47
>>28
おまえがいうな
30デフォルトの名無しさん:2008/08/05(火) 17:10:23
別に、テンプレを無視しているからって気に入らないとは限らないじゃんか

テンプレ通りじゃないから回答はしないけど、
スルーするほど気に入らないわけじゃないから
テンプレに則って質問すれば回答しますよっていう
意思表示でしょ?

もしくは、もっと単純に、このスレでは質問はテンプレ通りにしてくれよ
ていうアドバイスかもしれないし
31デフォルトの名無しさん:2008/08/05(火) 21:39:59
お願いします

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
●トランプめくり
・好きなカードを入力する。
・好きなカードの柄を選択する。
・好きな数字を入力する。
・入力された好きなカードを表示して、指定したもので良ければ、
 トランプカードめくりを行う。

・トランプめくりの実行
・Enterキーにて、トランプを1枚表示する。
・入力された好きなカードが登場するまで繰返す。
 カードを何枚めくったか表示する。
・途中で終了したい場合は、'E' or 'e' + Enterキーで終了する。
[3] 環境
 [3.1] OS:Windows
 [3.2] VC
 [3.3] 言語:C
[4] 期限: [無期限]
[5] その他の制限:
32デフォルトの名無しさん:2008/08/05(火) 22:02:22
【質問テンプレ】
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク):
LU分解による連立一次方程式について、その精度を計算するプログラムを作成せよ。過程がわかるようにコメントを添えること。
[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: Cのみ
[4] 期限: 8月8日17時
[5] その他の制限 とくになし
精度計算の方法からすでに僕ではわかりません。
4次元くらいの方程式で大丈夫だと思います、よろしくお願いします。
33名無しさん:2008/08/05(火) 22:49:10
>>32
精度補償付き数値計算でググれ
インラインアセンブリが必要になるが、線形計算の精度を出せる。

それでは学部の課題としては高度過ぎるか?
だとすると行列の条件値(condition number)の話かもしれない。
行列A
その逆行列をinv(A)
Aのノルムを ||A||
inv(A)のノルムを ||inv(A)||
とすると
条件値= ||A|| * ||inv(A)||
になる。
ノルムの定義は各種あるので調べてみよ。
条件値と精度を関連付ける理屈を理解する必要がある。そうしないとレポートにならない。
理屈さえ分かれば、ノルムの計算法と逆行列の求め方に帰着するはずだ。
34デフォルトの名無しさん:2008/08/05(火) 23:04:10
>>29
> 気に入らない質問やその他や発言はスルーの方向で。
35デフォルトの名無しさん:2008/08/06(水) 03:47:31
>インラインアセンブリが必要になるが
詳説もとめます。
36デフォルトの名無しさん:2008/08/06(水) 03:57:58
前スレ>>631さま
前スレ>>558です。
遅くなりましたが、ありがとうございました。
コメントの文言を変える等の若干手を加えたことを除いて、ほぼそっくりそのまま、提出したところ、
昨日遅く返事が来て、たいへん褒められました。ほとんど減点が無いそうで、クラスで1人だけだそうです
しかし、是非、「解説を書いてくれ(なければネットで同じコードがないか探すぞ)」と言われて(脅されて)
困ってます。
コードを見ても、ちんぷんかんぷんです。(中級者コースですが、初心者レベルです(哀))
コードの内容を教えて下されば幸甚です。
何か、悪質な問題だとか、色々ご指摘を受けてたようですが、実際、意図的に制限を付けて難しくしたと
言っていました。
37引用:2008/08/06(水) 05:17:34
[1]C言語中級コース
[2]標準入力から読み込まれた文字列を改行で区切って辞書順に比較し、長さ上位の10行について
その前後周辺5行(前2行+当該+後続2行)を行番号+":"付きで表示するプログラムを作成
しなさい。(後続が無い場合は空行を表示)
当該行は先頭行番号前に*を付けて区別させること。
表示が重なり合う場合にも対応し、同じ行を二度出力しないようにすること。
制限:行取り込みにはfgets関数を用いること。1行は最大で4Kバイト以内であるとして良い。
入力された文字列は物質のように扱い、その加工(複製、部分複製、結合、部分文字削除)は
一切禁止する。fgetsで上書きするかfreeで解放するこの2つ以外認めない。
行の長期記憶は、固定変数char *(memory[50])でのみ行うことが出来るものとし、
それ以外の変数(ポインタ以外)で行を記憶してはならない。
static変数は使ってはならない。mallocで確保した領域は必ずfreeすること。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7546.c
38名無しさん:2008/08/06(水) 08:19:28
>>35
正しくは、精度補償じゃなくて精度保証ね。

IEEE-754を前提として、浮動小数点数のラウンディングの方法(四捨五入、全て切り上げ、全て切り下げ)を制御ができる。
ラウンディングを「全て切り上げ」に設定して、線形代数の計算を1回行い、答えその1を得る。
次に、ラウンディングを「全て切り下げ」に設定して、同じ線形代数の計算をもう1回行い、答えその2を得る。
真の答え=( 答えその1 + 答えその2 ) / 2
精度=絶対値( 答えその1 − 答えその2 )
となる、という定理が証明されている。

インラインアセンブリについては http://www.oishi.info.waseda.ac.jp/~oishi/lec_nc/Table1.htm を見よ。
39名無しさん:2008/08/06(水) 08:23:09
Linuxだったら /usr/include/fpu_control.h も見よ。

40デフォルトの名無しさん:2008/08/06(水) 08:40:23
>>36
cs.tuat.ac.jp?
41デフォルトの名無しさん:2008/08/06(水) 12:52:02
なんかそんな寓話がありそうだな。
42デフォルトの名無しさん:2008/08/06(水) 14:23:37
>>37

>636 :デフォルトの名無しさん :2008/07/30(水) 17:35:28
>>558
>>631
>この問題は仕様と満たそうとすると、10x5行をmemoryに取り込んだ状態で
>つぎの2行が取り込む物ではないが、さらに次の行では取り込む物の場合
>過去の2行復元が出来ないよ。
最近読み込んだのは、それは長期じゃないから、長期記憶領域と呼ばないで良いとしないと出来ない。
43デフォルトの名無しさん:2008/08/06(水) 15:02:05
>>42
>>37
> それ以外の変数(ポインタ以外)で行を記憶してはならない。
この、「ポインタ以外」ってのも良くわからない。
ポインタなら構わないという意味にも取れるが、
それなら、別途ポインタの配列を作るよな・・・
44デフォルトの名無しさん:2008/08/06(水) 15:27:57
おやおや、麻呂のクソースの出番でおじゃるか?
麻呂を呼んだのは誰でおじゃ〜る?えっ?お呼びでない?
45デフォルトの名無しさん:2008/08/06(水) 17:13:15
んにゃ。多分お呼びじゃない
4642:2008/08/06(水) 17:25:46
>>43 無理やり、こう↓読まないと解けない問題
>行の長期記憶は、固定変数char *(memory[50])でのみ行うことが出来るものとし、
ポインタ変数以外の変数     で行を記憶してはならない。
>それ以外の変数(ポインタ以外)で行を記憶してはならない。
47デフォルトの名無しさん:2008/08/06(水) 17:41:04
[1]C言語演習(入門コース)
[2] 次の10進数覆面算を解くプログラムを作って実行させる。
(解は何個あるかを求める。0個の場合もあるかも知れない)
(FINE+PROGRAM)*IS=DIFFICULT
PC*LANG=IS*NICE
LANG<>NICE
PC<>IS
(同時に満たすものを探す)
(異なる文字で同じ数字が割り当てられても良いが、同じ文字に複数の数字を割り当てられないものと
する。また文字列先頭は0で始まらないものとする。
�解が無いことが事前に判明した場合は、その理由を記せば、コードを書かなくても良い。
[3]Linux/gcc/C
[4]8/31 正午(プログラムと解説、実行結果をメール)

手が付けられません。よろしくお願いします。解説と実行結果のほうも甘えてよろしいでしょうか?
まだ期限まで時間がありまんで、回答は急ぎません。
48デフォルトの名無しさん:2008/08/06(水) 18:44:16
>>47
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7590.c

解説:
総当りしただけ
実行結果:
 A=9 C=0 D=3 E=0 F=2 G=0 I=5 L=4 M=9 N=5 O=2 P=6 R=5 S=4 T=6 U=0  @@@
49デフォルトの名無しさん:2008/08/06(水) 19:43:26
ヤター
俺が一番載りだ!
皆見てくれ凄いだろ
50デフォルトの名無しさん:2008/08/06(水) 19:58:04
以下の二つの問題が分かる方助けて頂きたく願います

1.キーボードから入力した二つの整数値x,yのxのy乗を計算するプログラム
 を作成しなさい。

2.キーボードから入力した文字列を全て大文字(小文字は大文字に、大文字
 はそのまま)に変換して表示するプログラムを作成しなさい。ただし、文字
 を大文字に変換する関数を作成し、それを利用すること。

この二つです、よろしくお願いします
51デフォルトの名無しさん:2008/08/06(水) 20:00:57
真似されないうちに貼っておこう
#include <stdio.h>
#define xx(v, from) for(v = from; v <= 9; ++v)
#define yy(expr) if(!(expr)) break
#define zz(v) printf(" " #v "=%d", v)
static int A,C,D,E,F,G,I,L,M,N,O,P,R,S,T,U;
int main(){
xx(P, 1)xx(C, 0)xx(I, 1)xx(S, 0){
// generated by "...".split(//).inject {|acc, item| "("+ acc +")*10+"+ item }
yy(P*10+C != I*10+S);
xx(L, 1)xx(A, 0)xx(N, 1)xx(G, 0)xx(E, 0){
yy(((L*10+A)*10+N)*10+G != ((N*10+I)*10+C)*10+E);
yy((P*10+C)*(((L*10+A)*10+N)*10+G)==(I*10+S)*(((N*10+I)*10+C)*10+E));
xx(D, 1)xx(F, 1)xx(M, 0)xx(O, 0)xx(R, 0)xx(T, 0)xx(U, 0){
yy((((((F)*10+I)*10+N)*10+E)+( ((((((P)*10+R)*10+O)*10+G)*10+R)*10+A)*10+M))*(I*10+S)
==(((((((((D)*10+I)*10+F)*10+F)*10+I)*10+C)*10+U)*10+L)*10+T));
zz(A);zz(C);zz(D);zz(E);zz(F);zz(G);zz(I);zz(L);zz(M);zz(N);zz(O);
zz(P);zz(R);zz(S);zz(T);zz(U);puts(" @@@");}}}}
52デフォルトの名無しさん:2008/08/06(水) 20:01:44
51 名前:デフォルトの名無しさん 投稿日:2008/08/06(水) 20:00:57
真似されないうちに貼っておこう
53デフォルトの名無しさん:2008/08/06(水) 20:20:53
すみません>>50です質問し直します
[1] プログラミングT
[2] 1.キーボードから入力した二つの整数値x,yのxのy乗を計算するプログラム
  を作成しなさい。

  2.キーボードから入力した文字列を全て大文字(小文字は大文字に、大文字
 はそのまま)に変換して表示するプログラムを作成しなさい。ただし、文字
 を大文字に変換する関数を作成し、それを利用すること。

[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] 言語:C
[4] 期限:明日の昼まで出来たらお願いします
よろしくお願いします
54デフォルトの名無しさん:2008/08/06(水) 20:21:36
>>50
1.位は自力でやれば?
2.
#include<stdio.h>
void smallToCapital(char* string);
int main()
{
char* str;
scanf("%s",str);
smallToCapital(str);
printf("%s",str);
}
void smallToCapital(char* string)
{
char c;
int i;
for(i=0;c=string[i];i++)
{

if('a'<=c&&c<='z')
string[i]+='A'-'a';

}
}
55デフォルトの名無しさん:2008/08/06(水) 20:26:54
52 名前: デフォルトの名無しさん Mail: 投稿日: 2008/08/06(水) 20:01:44
51 名前:デフォルトの名無しさん 投稿日:2008/08/06(水) 20:00:57
真似されないうちに貼っておこう
56デフォルトの名無しさん:2008/08/06(水) 20:32:13
>>54
ご回答ありがとうございます。
何分初心者なもので
なんとか1もお願いできませんでしょうか。
57デフォルトの名無しさん:2008/08/06(水) 20:35:52
>>48様 解は16個、ちなみにこれ皆DIFFICULT
118815618
125521431
125521536
132232630
143346720
145549426
146643816
266665196
352250046
367767552
442248128
442248226
452258950
494497895
494497990
574472340
5854:2008/08/06(水) 20:39:50
>>56
超適当
#include<stdio.h>
int pow(int x,int y);
int main()
{
int x,y,z;
scanf("%d%d",&x,&y);
z = pow(x,y);
printf("%d",z);
}
int pow(int x,int y)
{
int z=1,i;
for(i=0;i<y;i++)
z*=x;
return z;
}
59デフォルトの名無しさん:2008/08/06(水) 20:42:34
>>58
適当でも十分です
ご回答感謝します
60デフォルトの名無しさん:2008/08/06(水) 20:48:13
55 名前:デフォルトの名無しさん 投稿日:2008/08/06(水) 20:26:54
52 名前: デフォルトの名無しさん Mail: 投稿日: 2008/08/06(水) 20:01:44
51 名前:デフォルトの名無しさん 投稿日:2008/08/06(水) 20:00:57
真似されないうちに貼っておこう
61デフォルトの名無しさん:2008/08/06(水) 20:56:54
真似されない内の意味が分からん。貼ったらそれを真似されるだろw
62デフォルトの名無しさん:2008/08/06(水) 23:45:21
>>54
今日も一人クズを育てたねw
おつかれさま。設問1のプログラム書いて貼る時の気持ち、お察しします。
63デフォルトの名無しさん:2008/08/06(水) 23:51:03
>>54
ある意味神頼みなコードやね
コンパイラとか最適化とかデバッグオプションの有無で動いたり動かなかったりw
64デフォルトの名無しさん:2008/08/07(木) 00:01:43
動くときがあればいいんだけどなw
65デフォルトの名無しさん:2008/08/07(木) 00:14:48
>>36
上位10行:*行  上位10行でない行:-行とする

先頭10行は無条件に読み込み、memory内に設定(全部*行)
読込み中にmemory内の最小値の位置を記憶しておく

11行目以降は、読み込んだ行が最小値より小さいか大きいかで分岐

小さい場合
 memory内の最後の*行の後ろに-行が2行設定されているかどうかで分岐
 設定されていない
  読み込んだ行を、memoryの最後に-行として設定
設定されている
  rlineの位置を1つずらす(rline内には最大で次に読み込む行の前2行を記憶)

大きい場合
 最小値の行を-行にする
 最小値の行とその前後2行の内、memory内から削除可能な範囲を削除 
 
 読み込んだ行の前の行がrline内にある場合は-行としてmemoryの最後に追加
 読み込んだ行を*行としてmemoryの最後に追加

 memory内の*行の内、最小値の位置を求める

こんな感じ(あんまりソースのコメントで書いてあることと変わらないけど)
66デフォルトの名無しさん:2008/08/07(木) 00:46:55
>>63
char *str; を char str[12345]; とかえれば、特に問題ないと思いますが、どういう最適化がはたらくのでしょうか。
for(i = 0; (c = string[i]); i++) { 
と書いたほうがいいのはなぜでしょうか?
67デフォルトの名無しさん:2008/08/07(木) 00:51:02
>>66
あれ?入門スレとここ以外にもマルチしてる?
68デフォルトの名無しさん:2008/08/07(木) 00:52:25
>>67
ここにしか投げていませんし、ここしか読んでいません。
69デフォルトの名無しさん:2008/08/07(木) 00:55:28
http://pc11.2ch.net/test/read.cgi/tech/1217073697/674
これと同じだったものでマルチかなと思ったんだけどほかの生徒さんか
70デフォルトの名無しさん:2008/08/07(木) 00:59:46
それはいいとして、後者は警告を防ぐため。
条件部に代入文を書くと警告が出るのを防ぐために、()をつけてる。
71デフォルトの名無しさん:2008/08/07(木) 01:03:57
>>70
たしかに、gcc ではtrue/false 判定をする代入文を使用すると「丸括弧でくくったほうがいいのでは?」という warning が出ますが、
なぜそんな warning を出すようにしているのか、よくわからないのです。
7271:2008/08/07(木) 01:05:04
単に == と = の間違いを警戒しているだけかもしれませんが。
73デフォルトの名無しさん:2008/08/07(木) 01:15:18
>>47 >>48 を元に変更させていただきました。
long int left, right1, right2, right3, right4, right5, right6, right7, right8, right9;
FOR_(P, 1) FOR_(C, 0)
FOR_(I, 1) FOR_(S, 0)
{
IF_(P!=I || C!=S);
FOR_(L, 1) FOR_(A, 0) FOR_(N, 1) FOR_(G, 0)
FOR_(E, 0)
{
IF_(L!=N || A!=I || N!=C || G!=E);
IF_((P*10+C) * (((L*10+A)*10+N)*10+G) == (I*10+S) * (((N*10+I)*10+C)*10+E));
FOR_(F, 1)
FOR_(R, 0) FOR_(O, 0) FOR_(M, 0)
{
left = (I*10+S) * (((((F)*10+I)*10+N)*10+E)
+ ( ((((((P)*10+R)*10+O)*10+G)*10+R)*10+A)*10+M ) );
right9 = left%10; left /= 10; right8 = left%10; left /= 10;
right7 = left%10; left /= 10; right6 = left%10; left /= 10;
right5 = left%10; left /= 10; right4 = left%10; left /= 10;
right3 = left%10; left /= 10; right2 = left%10; left /= 10;
right1 = left%10;
IF_( right2==I && right3==F && right4==F && right5==I && right6==C && right8==L );
FOR_(D, 1) FOR_(U, 0) FOR_(T, 0)
{
IF_( right1==D && right7==U && right9==T );
PRINT_(P); PRINT_(C); PRINT_(I); PRINT_(S);
PRINT_(L); PRINT_(A); PRINT_(N); PRINT_(G);
PRINT_(E); PRINT_(F);
PRINT_(R); PRINT_(O); PRINT_(M);
PRINT_(D); PRINT_(U); PRINT_(T);
puts(" @@@");
} } } }
74デフォルトの名無しさん:2008/08/07(木) 01:56:25
>>57
やはり、麻呂のクソースの出番でおじゃるか・・・
75デフォルトの名無しさん:2008/08/07(木) 02:08:31
>>57
別の文字なのに同じ数字が入ってもええのん?
76デフォルトの名無しさん:2008/08/07(木) 02:09:23
>>75
>>47 によればおk
77デフォルトの名無しさん:2008/08/07(木) 02:10:01
>>47
> 異なる文字で同じ数字が割り当てられても良いが
でしたね、すまそ。
78デフォルトの名無しさん:2008/08/07(木) 03:54:36
>>73
LANG!=NICEだけど
G==Eでも構わないはずでは?
79デフォルトの名無しさん:2008/08/07(木) 04:34:13
麻呂のクソースは数日掛かるでおじゃる。あっ、いや、ちょっと書店へ・・・
覆面算のソースを載せている本を探しに、でなぁ・・・
80デフォルトの名無しさん:2008/08/07(木) 04:37:20
>>47
#include<stdio.h>
#define FINE (F*1000+I*100+N*10+E)
#define DIFFICULT (D*100000000+I*10010000+F*1100000+C*1000+U*100+L*10+T)
#define PC (P*10+C)
#define LANG (L*1000+A*100+N*10+G)
#define NICE (N*1000+I*100+C*10+E)
int main(void){
int program, is, A, C, D, E, F, G, I, L, M, N, O, P, R, S, T, U;
for(is=10;I=is/10,S=is%10,is<=99;is++){
for(D=1;D<=9;D++){ // DIFFICULT
for(F=1;F<=9;F++){ // FINE
for(C=0;C<=9;C++){
for(U=0;U<=9;U++){
for(L=1;L<=9;L++){ // LANG
for(T=0;T<=9;T++){
if(DIFFICULT%is) continue;
for(N=1;N<=9;N++){ // NICE
for(E=0;E<=9;E++){
program=(DIFFICULT/is)-FINE;
if(program<1000000 || program>9999999) continue;
P= (program/1000000)%10;
R= (program/100000)%10;
O= (program/10000)%10;
G= (program/1000)%10;
if((program/100)%10!=R) continue;
A= (program/10)%10;
M= (program/1)%10;
if(PC*LANG==is*NICE && LANG!=NICE && PC!=is) printf("(%d+%d)*%d=%d %d*%d=%d*%d\n", FINE, program, is, DIFFICULT, PC, LANG, is, NICE);
} } } } } } } } }
return 0;
}
8173:2008/08/07(木) 04:53:45
>>78
G=E と、なる場合は、G=E=0 またはG=E=1 というクイズ。
ここで>>73に追加
#define IF_(expr) if(!(expr)) /*break*/continue
82デフォルトの名無しさん:2008/08/07(木) 13:51:10
[1] 授業単元: 宿題じゃないんだ、すまない。
[2] 問題文(含コード&リンク):
 次の関数作っておねがいぷりーず。
 1.辺の長さがlhの正六角形からはみ出ない最大の正方形の辺の長さlsを求める関数。
 2.辺の長さがlsの正方形がはみ出さない最小の正六角形の辺の長さlhを求める関数。
 lhとlsはどちらもfloat型。小数点以下6桁までは精度保って。
[3] 環境
 [3.1] OS: WindowsXPだが?
 [3.2] VC8.0でおk
 [3.3] 言語: Cでいい
[4] 期限: なるたけ早く
[5] その他の制限:
83デフォルトの名無しさん:2008/08/07(木) 14:17:40
数学方面のスレでそれぞれのいっぺんを求める式を得たほうが楽なような
84デフォルトの名無しさん:2008/08/07(木) 15:20:08
ほっほっほ、最初から真似するつもりはないでおじゃるが、今回は
真似どころか麻呂オリジナルクソースになりそうでおじゃるなぁ〜
後出しジャンケン、勝たぬなら、負けて見せようホトトギス
85デフォルトの名無しさん:2008/08/07(木) 15:21:22
正六角形の中に円を描いて正方形を描くのかな
それなら簡単な気がする
86デフォルトの名無しさん:2008/08/07(木) 16:15:17
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
 パーティクルを採用した、エフェクトプログラムデモを作成する。
 ・光の粒子が回転移動。
 ・爆発エフェクト(破片の物理移動) など。
 例)花火
   1.情報の洗い出し → 構造体
   2.初期化 → 爆発時に初期データセット
   3.実処理 → 移動、加減速、色調
   4.後処理 → 情報の削除(メモリの解放)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: Cのみ
[4] 期限: 8月18日
[5] その他の制限:特になし

 エフェクトは自由にとのことでしたが、炎や、例にある花火で作っていただけるとありがたいです。
 期限がまだあるため、早急な回答は求めません。
 よろしくお願いします。
87デフォルトの名無しさん:2008/08/07(木) 16:30:04
>>86
3D?
DirectX 使ってもいいのなら探せばサンプルあるだろ
88デフォルトの名無しさん:2008/08/07(木) 16:42:00
>>85
正方形の角が全部、六角形の変にくっつく方が、若干デカくね?
89デフォルトの名無しさん:2008/08/07(木) 16:50:28
>>82
一定の係数をかけるだけになるだろうからその係数をさがせば
float func(float lh) { return lh * SECRET_NUMBER; }
90デフォルトの名無しさん:2008/08/07(木) 17:00:36
あるクラスの試験の点数を整数で繰り返し入力し、
点数の合計と平均点を出力するプログラムを作成しなさい。
点数は、0点以上100点以下とし、
この範囲外の点(0点未満または100点より大きい点)が入力されたときは、
入力を終了し、点数の合計と平均点を出力する
(最後に入力された範囲外の点は集計の対象としない)。
また、平均は小数点以下2桁まで出力する。
繰り返しの命令は、何を使ってもよい。
91デフォルトの名無しさん:2008/08/07(木) 17:03:14
>>90
>>1くらい読め
92デフォルトの名無しさん:2008/08/07(木) 17:07:07
> 気に入らない質問やその他や発言はスルーの方向で。
オマエモナー、って読める?読めない?聖徳(ry
93デフォルトの名無しさん:2008/08/07(木) 17:09:22
>>92
スルーできてないw
94デフォルトの名無しさん:2008/08/07(木) 17:18:51
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):
4*4行列の列ごとの各要素の絶対値の総和の最大値
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C
[4] 期限: 8月8日12:00まで

課題の途中で上記の関数が作れないので止まりました・・・行列は2次元の配列で定義しているので
配列を引数にできるように関数を作ってください。。。
9586:2008/08/07(木) 17:19:50
>>87
説明不足すいません。DirectXは使用不可です。
3Dは使わず、"*"や、"+"などの記号で表現お願いします。
訂正申し訳ありません。
96デフォルトの名無しさん:2008/08/07(木) 17:25:19
>>95
ベースとなるサンプルはないの?
9786:2008/08/07(木) 17:56:51
>>96
炎のエフェクトの実行結果を見せてもらっただけなので、サンプルは貰っていません。
炎は、各方向に記号が常に飛び散っているエフェクトでした。
98デフォルトの名無しさん:2008/08/07(木) 18:16:35
>>97
もっと具体的にかけないものかね。
コンソールアプリなのかどうかすら読み取れない
99デフォルトの名無しさん:2008/08/07(木) 18:50:48
>>90 [C/C++ : C]
#include <stdio.h>

int main(void){
  int count = 0;
  int total = 0;
  int data = 0;

  do {
    printf("INPUT [%2d] :", count+1);
    if(fscanf(stdin, "%d", &data) < 1) break;
    if(data < 0 || data > 100) break;
    total += data;
    count++;
  } while(1);

  if(count)
    printf("COUNT=%d, AVERAGE=%.2f\n", count, (float)total/count);
}
10085:2008/08/07(木) 19:07:38
>>82
家に着いたから書いてみた。あってるのかは知らない
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7593.txt
101デフォルトの名無しさん:2008/08/07(木) 19:32:51
>>82
>>82
#include<stdio.h>
#include<math.h>
int main(void){
float lh, ls;
double magic_number;

magic_number=3-sqrt(3);

printf("\nInput lh : ");
scanf("%f", &lh);
ls=lh*magic_number;
printf("ls=%f\n", ls);

printf("\nInput ls : ");
scanf("%f", &ls);
lh=ls/magic_number;
printf("lh=%f\n", lh);

return 0;
}
10282:2008/08/07(木) 20:55:06
>>100
とても素直なプログラムだな。思考の仕方がよく見える。

>>101
マジックナンバーがとってもスマートだな。こりゃいい。

どちらさんもありがとう、ありがとう。
103デフォルトの名無しさん:2008/08/07(木) 23:12:00
>>102
>>100>>101で数値が違うがどうすんだ?
104デフォルトの名無しさん:2008/08/07(木) 23:36:58
>>98
コンソールアプリです。
あまりプログラムが分からず、度々すんません。
105デフォルトの名無しさん:2008/08/07(木) 23:58:29
>>103
>>101 (>>88) のほうが正解だろうね、>>100 (>>85) よりも大きな正方形。
106デフォルトの名無しさん:2008/08/08(金) 01:12:10
>>94
二元配列を引数にとるのは面倒だからそれを入れた構造体を作るのがいいと思うよ
>>86
難解だね、暇だからちょっとやってみるけど期待しないでね
107デフォルトの名無しさん:2008/08/08(金) 01:48:37
>>94
double f(double a[4][4])
{
double max = 0;
int i, j;

for(i=0; i<4; i++) {
double temp = 0;
for(j=0; j<4; j++) temp += fabs(a[j][i]);
if(temp > max) max = temp;
}

return max;
}
108デフォルトの名無しさん:2008/08/08(金) 07:11:55
>>107 double f(double a[4][4]) じゃなくて、ポインタ。
double f(double (*a)[4])
>>37 *(memory[50]) って、*memory[50] と同じ。
109デフォルトの名無しさん:2008/08/08(金) 09:00:12
107の書き方でも別に問題ないと思うけど?
初心者にはこっちの方がわかりやすいだろうし。
110デフォルトの名無しさん:2008/08/08(金) 09:00:47
いっけねぇ
ポインタじゃなくてポンタかと思ってた
111デフォルトの名無しさん:2008/08/08(金) 18:47:54
>>106
WindowsXPだとエスケープシーケンスが使えないと仮定したほうがよさそうです

// 最下位ビットから順に RGB で光(≠色)の三原色の合成です RG=黄色 GB=水色 RB=紫 RGB=白色
void set_color(int color){
if(color>=0 && color<=7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}

// (x,y)=(0,0) が左上になります (※スクロールバーがある場合は一番(左)上までスクロールバーが移動します)
void set_cursor_pos(int x, int y){
COORD pos;
pos.X=x;pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
112デフォルトの名無しさん:2008/08/09(土) 00:04:45
[1] 検索
[2] 配列に格納された文字列を前方一致検索して表示する
[3] 環境
 [3.1] Windows xp
 [3.2] borland
 [3.3] C言語
[4] 期限:2008年08月10日
113デフォルトの名無しさん:2008/08/09(土) 00:58:34
っつーかね、最近思うんよ、書店で参考書を探せば答えられる課題なんて
いくらでもあると。
114デフォルトの名無しさん:2008/08/09(土) 01:52:21
でもこのスレってそういうもんじゃね?

宿題で参考書買って解けないような問題出すやつある意味すげえよ
115デフォルトの名無しさん:2008/08/09(土) 01:53:06
まぁ、学校ごとに固有の問題を出してはいるが、それでも解き方や
ヒントは普通にあるわけで・・・
116デフォルトの名無しさん:2008/08/09(土) 02:24:09
>>114
それが結構あったりするのです‥‥‥。いや、それが面白かったりして。
117デフォルトの名無しさん:2008/08/09(土) 07:02:53
void型関数、指定された文字を指定された個数だけ表示させる関数本体を作成する問題
 

#include <stdio.h>

void putnchars(char x,int n);

int main(void)
{
putnchars('A',1);
putnchars('B',2);
putnchars('C',3);
putnchars('D',4);

return 0;
}
//関数本体を作成せよ

実行結果が
A
BB
CCC
DDDD

となるようにしなければいけないのですが、どうしてもできません。教えてください

118デフォルトの名無しさん:2008/08/09(土) 07:35:16
>>117
#include <stdio.h>
void putnchars(char x,int n) {
for(;n>0;n--) putchar(x);
puts(""); }
int main(void) {
putnchars('A',1); putnchars('B',2);
putnchars('C',3); putnchars('D',4);
return 0; }
119デフォルトの名無しさん:2008/08/09(土) 07:52:24
ありがとうございます。助かりました。
120デフォルトの名無しさん:2008/08/09(土) 08:41:23
コードに該当する部分に全角はいかんよ、文字列ならそれを扱うルールはあるが
コードに該当する部分は原則半角じゃ。
121デフォルトの名無しさん:2008/08/09(土) 11:22:23
>>120
そうだね
全角文字だとエラーでコンパイルできないもんね
122デフォルトの名無しさん:2008/08/10(日) 20:18:45
ラベルや関数名は全角文字OKだろ。
123デフォルトの名無しさん:2008/08/10(日) 20:39:38
122 名前:デフォルトの名無しさん 投稿日:2008/08/10(日) 20:18:45
ラベルや関数名は全角文字OKだろ。
124デフォルトの名無しさん:2008/08/10(日) 20:40:19
>>122>>117が読めない子
125デフォルトの名無しさん:2008/08/10(日) 20:46:34
#include <stdio.h>
int 関数(void) {
printf("あああ\n");
return 0;
}
int main(void) {
関数();
return 0;
}

エラー出ました orz
126デフォルトの名無しさん:2008/08/10(日) 20:55:11
>>125
VC++2008でビルドしたらコンパイル出来た
まあ使わないけどね
127デフォルトの名無しさん:2008/08/10(日) 21:09:55
コンパイラが都合よく見繕ってくれるってのも、プログラマの認識レベルを下げる
原因になりそうな気がするのだが、まぁ車も安全装置が開発されたりと
それでもやらかす奴はやらかすわけで・・・
128デフォルトの名無しさん:2008/08/10(日) 21:24:25
大規模なソフトウェアを開発をしたいと思ったら
自動化できることはできる限り自動化しないと
人間の把握できる範囲を超えてしまう

もちろん基礎は大事
129デフォルトの名無しさん:2008/08/10(日) 21:40:21
[1]ゲームアルゴリズム
[2]テトリス制作でブロックを落とすところ(回転はしなくてよい)
[3]Windows Vista
Microsoft Visual Studio 2005
  C++
[4]8/20まで
[5]現在、基本情報技術者午後レベルを習っている状況

問題点
・凸型ブロックが落ちると途中で四角になってしまう
・左右移動するとブロックが分解された残像みたいなのが残る
・最下位の床につくと止まらずに突き抜けてしまう
コードをテキストでうpしました。
http://www2.uploda.org/uporg1600554.txt.html
130デフォルトの名無しさん:2008/08/10(日) 23:29:49
>>129
152-159行目をチェックしな

同じような部分が何度もでているところは関数に分けた方がいい
131130:2008/08/10(日) 23:35:29
>・凸型ブロックが落ちると途中で四角になってしまう
これしか見てなかった
全面的に作り直してねって事だったんだなw
132デフォルトの名無しさん:2008/08/11(月) 03:21:29
>>129
みられない
133デフォルトの名無しさん:2008/08/11(月) 08:39:25
134デフォルトの名無しさん:2008/08/11(月) 10:10:48
プログラム全体の見通しがあまりにも悪いから、最初から書き直した方が良い。
機能単位に分けてちゃんと処理追えるようにさ。
悪いけど、こんなもんどこにバグがあるかなんて探したくもない。
135デフォルトの名無しさん:2008/08/11(月) 10:12:48
>>134
すいません。出直してきます
136デフォルトの名無しさん:2008/08/11(月) 10:48:09
>>135
方針として
1.固定化されたブロックと表示用のバッファは別にする
2.ブロックの移動に関する処理はブロックの種類によらず共通化する
137デフォルトの名無しさん:2008/08/11(月) 11:10:45
>>136
丁寧なご回答ありがとうございました。がんばります
138デフォルトの名無しさん:2008/08/11(月) 12:07:34
139901:2008/08/11(月) 14:14:57
【質問テンプレ】
[2] 問題文:Bingoゲーム
・使用する数字は1〜75まで、同じ数字は、登場しない
・スペースキー押下にて、スロットのように表示する。
ヒント:for文を使用して行う。
表示する際は、一旦、画面消去してから、表示することになる。
・スペースキー押下にて、停止させる。
ヒント:kbhit(),_getch() 関数を使用する。
・登場した番号リストを表示する。
・終了は、'E' or 'e'にて、終了するか、全ての数字が登場した場合。
[3] 環境
 [3.1] OS:Windows
 [3.2] VS
 [3.3] C
[4] 期限:できるなら早めがいいです
[5] その他の制限:俺に聞けスレから誘導されましたあちらへの書き込みは以下です

901 :デフォルトの名無しさん:2008/08/11(月) 13:17:59
こんにちは質問です
決められた範囲(こちらで指定する)の数字をスロットのように表示させるにはどうすればいいでしょうか?
画面はコマンドプロンプトでjpgなどは無しでおねがいします
905 :901:2008/08/11(月) 13:53:55
また、スペースキーを押した場合そのスロットが止められるように とのことなんですが・・・
ループ処理で、printfで表示したものを消す→表示→消す→表示
みたいなやり方とかあるんでしょうか?
また後出しになって申し訳ありませんが
kbhit(),_getch() 関数を使用する
そうです。関係なかったらすみません
140sage:2008/08/11(月) 15:26:46
2分探査木と平衡木のどちらかをc言語でつくれ(データの追加、削除をする機能を含む)

↑が全くできません。助けて下さい

よろしくお願いします
141sage:2008/08/11(月) 15:29:38
2分探査木と平衡木のどちらかをc言語でつくれ(データの追加、削除をする機能を含む)

↑が全くできません。助けて下さい

よろしくお願いします
142デフォルトの名無しさん:2008/08/11(月) 15:42:37
[1] 数理物理
[2] 1、∫(sinx)^πdx (∫の上が1、下が0)
    の計算をガウス・ルジャンドル積分法とモンテカルロ法で計算し、比較せよ。

  2、x,y,z>0 x+y+z<1 で囲まれる三角錐に
(x-1/3)^2+(y-1/3)^2+(z-1/3)^2>(1/2√3)^2
の球で削った部分の体積を求めよ。

[3] 環境
 [3.1] Linux
 [3.2] ?
 [3.3] C
[4] 明後日までにお願いします。

どうしてもわからないのでお願いします。
143デフォルトの名無しさん:2008/08/11(月) 15:57:38
144デフォルトの名無しさん:2008/08/11(月) 16:37:38
[1] c入門
[2] 単方向,非循環の線形リストをC言語でつくれ
(条件ポインタ,構造体を使用する・線形リストの生成・データ削除の機能)
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] C
[4] 今日
145デフォルトの名無しさん:2008/08/11(月) 16:50:52
>>144
C/C++の宿題を片付けます 114代目
http://pc11.2ch.net/test/read.cgi/tech/1216746971/606
146デフォルトの名無しさん:2008/08/11(月) 17:15:42
>>145
727 名前:デフォルトの名無しさん[sage] 投稿日:2008/07/31(木) 16:47:18
>>606
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7562.txt
147デフォルトの名無しさん:2008/08/11(月) 17:20:05
>>139
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define NUMBER_MAX 75
void swap(int *a, int *b){int c;c=*a; *a=*b; *b=c;}
void disp_numbers(int number[], int number_num){
int i;
system("cls");
for(i=0;i<number_num;i++) printf(" %2d ", number[i]);
printf("\n");
}
int main(void){
int number[NUMBER_MAX], i, x, keycode, is_exit=0;
for(i=0;i<NUMBER_MAX;i++) number[i]=i+1;
for(i=0;i<NUMBER_MAX;i++){
for(disp_numbers(number, i);;){
x=rand()%(NUMBER_MAX-i);
printf(" %2d \r", number[i+x]);
if(_kbhit() && (keycode=_getch())){
if(keycode==' ' || keycode=='E' || keycode=='e'){
swap(&number[i], &number[i+x]);
is_exit=(keycode=='E' || keycode=='e');
break;
}
}
}
if(is_exit) break;
}
disp_numbers(number, i);
return 0;
}
148デフォルトの名無しさん:2008/08/11(月) 17:52:30
[1] c入門
[2] 2分探査木と平衡木のどちらかをc言語でつくれ
(データの追加、削除をする機能を含む)
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] C
[4] 今日

テンプ無視してすいません
よろしく願いします
149デフォルトの名無しさん:2008/08/11(月) 18:04:26
150デフォルトの名無しさん:2008/08/11(月) 19:21:14
>>144
仕様が指定されてない故、クソースでいくでおじゃっ、少し待ってたもう
151デフォルトの名無しさん:2008/08/11(月) 20:03:21
152デフォルトの名無しさん:2008/08/11(月) 21:16:58
>>151
番号を追加するとはどういうことでおじゃるか
無能なまろに教えてくだしゃれ
153デフォルトの名無しさん:2008/08/11(月) 22:12:00
ハンゲーム − チョコットランドと言うゲームで
NPC_2047から始まるクエストのプログラムで教えて頂きたいのです
クエストを受ける→クリアを素材、回数制限をなくしたくて
いろいろ試しているのですが
クエストが止まる、うけれなくなるの繰り返しで進めません
どうかご教授おねがいします
プログラムを書きたいのですが長すぎで省略すみません
154デフォルトの名無しさん:2008/08/11(月) 22:16:37
>>152
実行して、追加、一覧表示で調べてみれば分かる
155デフォルトの名無しさん:2008/08/11(月) 22:32:50
>>153
ケーブル抜いて首つれ
156デフォルトの名無しさん:2008/08/12(火) 01:44:24
>>144
>>151は先頭を削除したときの対処をしていなかったでおじゃる。訂正。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7607.c
157デフォルトの名無しさん:2008/08/12(火) 08:47:32
自演で宿題w
158デフォルトの名無しさん:2008/08/12(火) 12:27:45
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
A B C D E Fの6つのアルファベットから3つ選んだときの順列を列挙するプログラムを作れ

6P3=120通りである。l

[3] 環境
 [3.1] OS:Xp
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: ありません
159デフォルトの名無しさん:2008/08/12(火) 12:35:15
>>158

puts("ABC");
puts("ACB");
puts("BAC");
puts("BCA");



puts("FED");
160デフォルトの名無しさん:2008/08/12(火) 13:20:25
>>158
#include <stdio.h>

int main()
{
int i,j,k;
int count;
const char *table = "ABCDEF";

count = 0;
for(i = 0; i < 6; ++i){
for(j = 0; j < 6; ++j){
if(i == j)continue;
for(k = 0; k < 6; ++k){
if(k == i || k == j)continue;
if((count % 10) == 0)
printf("\n");
printf("%c%c%c ", table[i], table[j], table[k]);
count++;
}
}
}
printf("\n%d個", count);
return 0;
}
161デフォルトの名無しさん:2008/08/12(火) 13:46:02
テーブル使わないver
#include<stdio.h>
int main()
{
int i,count=0;
for(i=0 ;i<6*6*6;i++)
{
int a1,a2,a3;
a1= i%6;
a2= (i/6)%6;
a3= i/(6*6);
if( a1 == a2||a2==a3||a3==a1)
continue;
printf("%c%c%c\n",a3+'a',a2+'a',a1+'a');
count++;
}
printf("%d",count);
return 0;
}
162デフォルトの名無しさん:2008/08/12(火) 13:50:48
再帰で書こうとしたが無理だったorz
163デフォルトの名無しさん:2008/08/12(火) 13:54:39
157 名前:デフォルトの名無しさん 投稿日:2008/08/12(火) 08:47:32
自演で宿題w
164デフォルトの名無しさん:2008/08/12(火) 13:55:32
>>162
かけなくもないが、これは再帰で書く意味なくないか?
165デフォルトの名無しさん:2008/08/12(火) 13:57:38
どう考えても再帰のほうが楽
#include<stdio.h>
void go(){
    int i=0,flag=0,j_[3];
    char s[4];
    j_[0]=-1;s[3]=0;
    do for(flag &= ~(1<<j_[i]);++j_[i]<6;)
        if(!(flag&1<<j_[i])){
            s[i]=j_[i]+'A';
            if(i+1==3)puts(s);
            else{
                flag |= 1<<j_[i++];
                j_[i]=-1;
            }
        }
    while(i--);
}
int main(void){
    go();
    return 0;
}
166デフォルトの名無しさん:2008/08/12(火) 14:00:10
>>165
天才
167デフォルトの名無しさん:2008/08/12(火) 14:05:55
再・・・帰?
168デフォルトの名無しさん:2008/08/12(火) 14:13:04
うわ、再帰と非再帰間違った。
こっちを適当に非再帰に書き直したやつを張っちまった。
#include<stdio.h>

void go(char s[4],int flag,int i){
    int j;
    if(i==3){puts(s);return;}
    for(j=0;j<6;++j)
        if(!(flag&1<<j)){
            s[i]=j+'A';
            go(s,flag|1<<j,i+1);
        }
}
int main(void){
    char s[4];
    go(s,0,0);
    return 0;
}
169デフォルトの名無しさん:2008/08/12(火) 14:20:38
なるほど・・・・使った文字をビット立てて記録しておくわけか
参考になったtnx
170デフォルトの名無しさん:2008/08/12(火) 14:22:51
>>168
s[3]にごみが入ってて変になったよ
171デフォルトの名無しさん:2008/08/12(火) 14:32:58
ここ思ったより人いるね、やっぱ学生が多いのか?
172デフォルトの名無しさん:2008/08/12(火) 14:34:47
>>170
非再帰に直してる途中で発見したバグだから、
非再帰のほうでしかデバグしてなかった。
thx
173デフォルトの名無しさん:2008/08/12(火) 14:50:07
>>165 が優秀過ぎ ><;
174デフォルトの名無しさん:2008/08/12(火) 15:54:25
>>168
int i=0;
int j=1;
char s[4];

この条件で

s[i]=j+'A'

上記(s[0])に入るのって何なんでしょうか。メモリ内で'A'という文字が格納されたアドレスの、1バイト後のアドレス、すなわち'B'をs[0]に代入?

また、以下の条件を追加して、
int flag=0;

>>168にあるように、
if(!(flag&1<<j){
...}

とあったら、これは
・1をjbitずらす(=2)
・flagと2の論理積(=0)
であると思うのですが、その後の ! が解釈出来ません。
もし0じゃなければ、と解釈しようとしても、何が0じゃなければ?という疑問です。
175デフォルトの名無しさん:2008/08/12(火) 15:57:17
'A' にアドレス関係ないぞ、定数だ。
176デフォルトの名無しさん:2008/08/12(火) 16:45:08
>>174
・flagと2の論理積(=0)
↑これが0かどうか
177デフォルトの名無しさん:2008/08/12(火) 18:04:43
>>175
配列に代入する場合、s[i]=1+'A' という表記は、その右辺は、'A'の格納されたアドレスに+1バイトのアドレスに格納された文字と同等である、ということになるのかと思いました。
いずれにしろchar型の配列に格納できるのは1バイトまでですから、上記のように考えてBという文字が格納されたんだと認識しないと意味が分からなかったので。
私の文章を見ると上記と言ってることが違いますね。

>>176
& とはビット毎の論理積で、だとすると
0000 // flag
0010 // 10進数の2の2進表記
0000 // 各ビットの論理積。10進表記すると0

調べたところ、論理積とはある数の第一ビット(右から二番目)が立っているか否かを調べるもの、と書いてありました。
それに従えば、flagは第一ビットが立っていないと言えないでしょうか。
178デフォルトの名無しさん:2008/08/12(火) 18:19:37
>>177
元の話、全然見てないが、、、
環境によるけど通常、'A' は65だ。
s[i]=1+'A' なら、 s[i] = 1 + 65 つまり 66 を代入。
(文字コード66はすなわち 'B'だ)

for(j=0;j<6;++j)
if(!(flag&1<<j)){
この部分は自分で展開してみればいい
j が 0のとき
flag & 1 << 0 → flag & 00000001
1のとき
flag & 1 << 1 → flag & 00000010
以下
flag & 1 << 2 → flag & 00000100
flag & 1 << 3 → flag & 00001000

& の結果、flagの該当位置が1じゃなかったら結果が0になるだろ
0は偽だから、!で反転して真になる。
つまり左から j 番目のビットが0の場合にif文以下が実行される。
179デフォルトの名無しさん:2008/08/12(火) 18:36:42
>>178
分かりました。レス下さった方々、ありがとうございました。
180デフォルトの名無しさん:2008/08/13(水) 16:55:23
宿題カモーーーンっ!リストカモーーンッ!麻呂のクソースで対処するでおじゃっ
181デフォルトの名無しさん:2008/08/14(木) 00:57:13
構わん、うpロダにソースを上げろ(麻呂の碇ゲンジバージョンのAA略)
182デフォルトの名無しさん:2008/08/14(木) 04:51:55
[1] 授業単元:リスト
[2] 問題文(含コード&リンク):
単方向リストのソート関数を完成させよ
ソート順は昇順、降順のいずれでもよい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7614.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 特になし
[5] その他の制限: 標準ライブラリの範囲内で
183182:2008/08/14(木) 04:53:05
>>182 は宿題ではありません
気が向いたらやってみてください
184デフォルトの名無しさん:2008/08/14(木) 06:58:29
麻呂はリストのソートは出来なかったでおじゃる(過去ログ参照)
出来なかったけど、やればなんとかなる、けど マンドクセッ でおじゃる。
185デフォルトの名無しさん:2008/08/14(木) 17:29:32
>>182
list_t *list_sort(list_t *list, int (*cmp_func) (const data_t, const data_t))
{
    list_t *i, *j, *next, *item, *tmp;
    list_t head;
    head.next = list;
    for (i = &head; i->next; i = next) {
        next = i->next;
        for (j = &head; j->next != i->next; j = j->next) {
            if (cmp_func(i->next->data, j->next->data) < 0) {
                item = i->next;
                i->next = i->next->next;
                tmp = j->next;
                j->next = item;
                item->next = tmp;
                break;
            }
        }
    }
    return head.next;
}
186デフォルトの名無しさん:2008/08/14(木) 17:45:28
■■みんなでサイトつくろうぜwwwwwwwwwwwwwwww■■
「お前ら一緒にサイト作ろうぜwwwwwwwwww」
「2ちゃん越えるサイト作ろうぜwwww」
「仕事無いんだ・・・・・・」
「やろうぜ!」
「みんなでサイトつくろうぜwwwwwwwwww」
http://gacco.o0o0.jp/
http://yutori.2ch.net/test/read.cgi/news4vip/1218673130/
http://ex14.vip2ch.com/test/read.cgi/part4vip/1218612197/
興味沸いたらきてください!
======================!! 人材募集中 !!======================
■プログラムを組んでくれる人
 *サーバー側
  言語はRubyかPerlの予定ですが、Perlが有力候補。
  ・チャット
   定期的にクライアントから着信があり、それに対して更新されたチャットのメッセージを返信する程度の能力。じゃなくて機能。
   通信するときのフォーマットは未定。
  ・ログイン・アカウント管理
   ログイン認証、各アカウントの点数などの管理。データベースは未定。
  ・お絵描き
   未定。とりあえず鯖に負担がかからない程度にたまに画像を送信してあげるって感じで
 *クライアント側
  はっきり言って俺もわからね。Ajaxだとかflashだとかjavaだとか。
■機能提案(正しくは人材ではなく、意見?)
 「こんな機能があったら良い!」「こうするともっと楽しくなる!」などの意見募集中。
 挨拶とか気にせずスレにどんどん書き込んでくれればおk
■デザイン
 サイトのデザインを考えてくれる人、作ってくれる人募集中。
 できればphotoshop illustrator使える人(プロジェクト共有しやすいので)
187デフォルトの名無しさん:2008/08/14(木) 18:03:20
>>186
wwwwwwwww 草が多過ぎてぁゃιぃから却下w
188デフォルトの名無しさん:2008/08/15(金) 19:18:21
>>86 でミルククラウンに挑戦するものはいないか!

期日までにできるかどうか分からないし
二次元として計算する予定だからクラウンになるかどうかあやしいけどw
189デフォルトの名無しさん:2008/08/16(土) 09:09:52
宿題こないね
190デフォルトの名無しさん:2008/08/16(土) 09:14:54
休みだしコミケだしな
191デフォルトの名無しさん:2008/08/16(土) 10:58:24
コミケは関係ないだろ
192デフォルトの名無しさん:2008/08/16(土) 12:36:31
逆走すんなよ
193デフォルトの名無しさん:2008/08/16(土) 13:22:02
英語のwrong wayには、一通を逆走するという意味と、道を誤るの二つの意味がある
194デフォルトの名無しさん:2008/08/16(土) 15:41:59
後者の意味でどっちも説明できるな。
195デフォルトの名無しさん:2008/08/16(土) 21:17:46
This is a pen. とかの英文章をファイルで入力して
単語ごとにバッファに詰めたいんですが上手くいきません。
単語の長さも持たせたいので構造体を使いたいです。
知恵を貸してください、お願いします。
196デフォルトの名無しさん:2008/08/16(土) 21:22:40
stringつかえよ
197デフォルトの名無しさん:2008/08/16(土) 21:22:45
上手くいかないソースを出せば知恵を貸してくれる人もいるだろうな
198デフォルトの名無しさん:2008/08/16(土) 21:28:33
strtokとstd::stringでOKだよ
199デフォルトの名無しさん:2008/08/16(土) 22:07:07
while ((c = fgetc(in)) != EOF) {
if ( (c != ' ') || (c != '\t') || (c != '\n') ) {
strcat(wp->string, c);
wp->length = strlen(wp->string);
} else {
strcat(wp->string, '\0');
wp++;
}
}
こんな感じで一個一個結合しようとしたんですが、
strcatは文字列同士じゃないといけないっぽくてでできなくて。
strtok便利そうですね。
200デフォルトの名無しさん:2008/08/16(土) 22:12:02
>>199
よくわかんないけど、
wp->length = strlen(wp->string);
wp->string[wp->length] = c;
++(wp->length);
wp->string[wp->length] = '¥0';
こんな感じじゃ駄目なの?
201デフォルトの名無しさん:2008/08/16(土) 22:30:49
>>200
文字化けとセグメントエラーでした。
strtok使ったほうが簡単そうなんでそっちで考えてみます
202デフォルトの名無しさん:2008/08/17(日) 01:28:39
>>195
C?C++?
C++なら while(ifs >> str) strlist.push_back(str);
だけで済みそうな気がする
203デフォルトの名無しさん:2008/08/17(日) 02:28:36
>>201
おそらくはポインタの指す先が確保されていない
204デフォルトの名無しさん:2008/08/17(日) 09:49:09
すいません関数がわかりません。
[]の中に答えが入ります。

3つの整数を入力して、その和を表示する。
3つの整数の和を求めるkasan()関数を使う。

[]
void main(void)
{
int a,b,c,wa;
scanf("%d%d%d",&a,&b,&c);
printf("%d+%d+%d=%d\n",[]);
}
[]kasan([])
{
int kotae;
kotae=x+y+z;
[]
}
205デフォルトの名無しさん:2008/08/17(日) 09:50:49
printf("%d+%d+%d=%d", a, b, c, kasan(a, b, c);
int kasan(int x, int y, int z)
return kotae;
206デフォルトの名無しさん:2008/08/17(日) 09:52:10
あ、忘れた

#include <stdio.h>

それと

printf("%d+%d+%d=%d", a, b, c, kasan(a, b, c)); ←ここカッコ2つ
207デフォルトの名無しさん:2008/08/17(日) 09:53:43
>>204
最初のところにプロトタイブ宣言が抜けてました。すいません
208デフォルトの名無しさん:2008/08/17(日) 09:56:45
あ、そうだね。

int kasan(int x, int y, int z);

が必要か。
209デフォルトの名無しさん:2008/08/17(日) 10:01:48
さっきのやつです。

点数を入力して、60点以上なら"合格"、60点未満なら"不合格"、と表示する。
点数によって"合格"、か"不合格"かを表示するhantei()関数を使う。

[]/*プロトタイプ宣言*/
void main(void)
{
int ten;
scanf("%d",&ten);
[]
}
[]hantei([])
{
if(data>=60)
printf("合格");
else
printf("不合格");
}
210デフォルトの名無しさん:2008/08/17(日) 10:16:59
void hantei'int data);
hantei(ten);
void hantei'int data)
211デフォルトの名無しさん:2008/08/17(日) 10:20:59
これで最後です。

2つの実数を入力して、その積と商を表示する。
2つの実数の積と商を求めるkeisan()関数を使う。

[]/*プロトタイプ宣言*/
void main(void)
{
float s,t,seki,sho;
scanf("%f%f",&s,&t);
[]
printf("%.1f*%.1f=%.1f\n",[]);
printf("%.1f/%.1f=%.1f\n",[]);
}
[]keisan([])
{
[]=su1*su2;
[]=su1/su2;
}
212デフォルトの名無しさん:2008/08/17(日) 10:28:37
void keisan(float su1 float su2, float *seki, float *sho);
keisan(s, t, &seki, &sho);
printf("%.1f*%.1f=%.1f\n", seki);
printf("%.1f/%.1f=%.1f\n", sho);
void keisan(float su1, float su2, float *seki, float *sho)
*seki=su1*su2;
*sho=su1/su2;
213デフォルトの名無しさん:2008/08/18(月) 23:04:51
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 多倍長演算(10進数)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++

除算のやり方がよくわかりません。
214デフォルトの名無しさん:2008/08/19(火) 17:37:02
>>213
桁の数、期限が分かりません
215デフォルトの名無しさん:2008/08/19(火) 20:01:05
>>213
やり方は筆算と引き算
符号に注意
216デフォルトの名無しさん:2008/08/19(火) 20:42:09
すいませんはじめてなのですが。
長いソースコードでもここで質問してよろしいですか?
上の方にあるリンクは全然開けなくて。
217デフォルトの名無しさん:2008/08/19(火) 21:04:41
単なる質問ならスレ違い
宿題を丸投げするならできればうpろだを使ってください
218デフォルトの名無しさん:2008/08/19(火) 21:18:27
丸投げではないんですけどすでにソースコードを打ち込んだ後なのですが
メモリリークを起こしていて理由がよくわからないので教えていただきたい
のですが
219デフォルトの名無しさん:2008/08/19(火) 21:22:00
>>218
ロダにうpしてみてよ
複数ファイルならzipとかで
220デフォルトの名無しさん:2008/08/19(火) 21:31:43
遅れてすいませんUpろだに投稿しました。
自分はリソースの番号管理を作っていて、リソースを読み込むときに番号
を使用してるのをカウントして動的に管理しようとしているのですが。
メモリリークを起こしてしまって自分では対処できませんよろしくお願いします。
221デフォルトの名無しさん:2008/08/19(火) 21:32:35
222デフォルトの名無しさん:2008/08/19(火) 21:34:38
はいこのファイルです。どうかよろしくお願いします
223デフォルトの名無しさん:2008/08/19(火) 21:35:51
エラー E2209 resource1.cpp 275: インクルードファイル 'gslib.h' をオープンできない
エラー E2209 resource1.cpp 308: インクルードファイル 'TestResourceList.h' をオープンできない

おいファイルが足りんぞ
これじゃCodeGuardを掛けられない
224デフォルトの名無しさん:2008/08/19(火) 21:41:50
>>220
boost の shared_ptr についての質問で

class A
class B : public A
boost::shared_ptr< A > ptr=new B;

このとき B のデストラクタは呼ばれますかってこと?
225デフォルトの名無しさん:2008/08/19(火) 21:47:13
すいません修正版をうpろだに上げました。
いいえ、理由はよくわからないのですが。ResourceList単体ではリークは
起こさないのですが。ResourceManagerに実装しようとするとリークが起こってしまうんです

226デフォルトの名無しさん:2008/08/19(火) 22:02:53
これって、そもそも、何に基づいてリークが起きていると判断してるんだ?
227デフォルトの名無しさん:2008/08/19(火) 22:10:59
相変わらず "gslib.h" が無いと言われるからこの行だけコメントアウト
してCodeGuard掛けてみたが、リークはないみたいだぞ
228デフォルトの名無しさん:2008/08/19(火) 22:11:22
>> 226
自分が通っている学校の先生の作ったCxxTestのプログラムでのチェック
なのですが
229デフォルトの名無しさん:2008/08/19(火) 22:17:22
そのCxxTestやらがおかしいんじゃないの?
230デフォルトの名無しさん:2008/08/19(火) 22:36:36
なんかCodeGuard至上主義の人がいるようだが、それ使うと何がどこまで検出されるの?
231デフォルトの名無しさん:2008/08/19(火) 22:47:54
>>229
そうですか、自分でもメモリリークをCrtDbgでやって見ましたがリークが
検出できないのでCxxTestのプログラムの所為かもしれないです。
教えていただいてありがとうございました。
232デフォルトの名無しさん:2008/08/19(火) 22:50:42
>>230
メモリリークはほぼ100%、それから非初期化領域も
かなりの確率で発見できる。これだけのためにC++Builderを買ったぐらい。

ただC++以前に開発された部分がかなり残っているらしく、継承した
クラスを参照で渡すとそれも検出しやがる。例えばstd::ostreamに
std::fstreamを渡すとそれはひどい事に。まあ意図して検出しているの
かもしれんけど。
233デフォルトの名無しさん:2008/08/19(火) 22:52:52
おっと誤解のないように

std::ostreamにstd::ofstreamな。わかると思うけど
こんなの検出する必要ねーしオプションで制御できるようにしとけ
234デフォルトの名無しさん:2008/08/20(水) 15:02:30
<windows.h>をつかわず
ビットマップを読み込んで、色を文字で表したテキストファイルを出力する
◆仕様
・ビットマップは24bit限定
・テキスト出力フォーマット
0 1 2 3 ...
1 xx xx xx
2 xx xx xx
3 xx xx xx
.
.
.
・対象ビットマップ
 赤、青、緑、白、黒

◆コマンドライン引数
1.入力ビットマップファイル名
2.出力テキストファイル名

Cでおねがいできますか?
235デフォルトの名無しさん:2008/08/20(水) 15:13:21
まだビットマップ読み込む課題出す駄目教師いるんだな
236 ◆gnmPGtYhqU :2008/08/20(水) 15:51:10
[1]C言語応用
[2] ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7628.txt
[3]OS:Windows 言語:C
[4]2008/08/26 23:59まで
[5]特に制限はありません
  よろしくお願いします
237デフォルトの名無しさん:2008/08/20(水) 15:53:34
>>234
そもそも、ここで言う「ビットマップ」はファイルから読み込むらしいが、
そのフォーマットはどうなってるんだ?
238234:2008/08/20(水) 15:56:08
ペイントでbmpファイルは自作です
239234:2008/08/20(水) 16:28:31
すみません見当違いなレスしてしまいました
DIB形式です
240デフォルトの名無しさん:2008/08/20(水) 17:17:52
すいません、リソースマネージャとかでお世話になった218ですが。
あの後、一応完成まで言ったんですが最後の最後でリンクエラーが起きて
ビルドが行きませんうpろだにはファイルをあげていますので誰かお願いします
241デフォルトの名無しさん:2008/08/20(水) 17:23:10
>>240
リンクくらい貼れよ、バカ
242デフォルトの名無しさん:2008/08/20(水) 17:28:57
すいません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7629.zip
これですよろしくお願いします。
243デフォルトの名無しさん:2008/08/20(水) 17:32:50
>>240
そもそも、リンクエラーって何が出てんのよ?
244デフォルトの名無しさん:2008/08/20(水) 17:33:50
>>242
makefileとか無いぞ
245デフォルトの名無しさん:2008/08/20(水) 17:41:33
自分はVisual C++しか使ったことがないのでmakefileとかに詳しくないです。すいません。
エラーは長いですけど以下のように出ています

エラー 1 error LNK2019: 未解決の外部シンボル "public: class
boost::shared_ptr<class IResource<unsigned int> > __thiscall ResourceIDManager::getFreeID<class ResourceManager::IDDeletor>
(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class ResourceManager::IDDeletor)"
(??$getFreeID@VIDDeletor@ResourceManager@@@ResourceIDManager@@QAE?AV?$shared_ptr@V?$IResource@I@@@boost@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@VIDDeletor@ResourceManager@@@Z)
が関数 "private: bool __thiscall ResourceManager::loadGraphicsResource(class ResourceIDManager &,class boost::shared_ptr<class IResource<unsigned int> > &,
class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool (__cdecl*)(unsigned int,char const *),void (__cdecl*)(unsigned int))"
(?loadGraphicsResource@ResourceManager@@AAE_NAAVResourceIDManager@@AAV?$shared_ptr@V?$IResource@I@@@boost@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@P6A_NIPBD@ZP6AXI@Z@Z) で参照されました。
ResourceManager.obj
246デフォルトの名無しさん:2008/08/20(水) 17:59:02
>>237
24bit BMPって書いてあるだろ。要するに、ヘッダの部分から下は
一番下の行の左側のRGBから順に記録されているタイプ。
247デフォルトの名無しさん:2008/08/20(水) 18:10:00
>>246
BMPなんてかいてねーよ。
ビットマップとしか書かれてないだろ。
248デフォルトの名無しさん:2008/08/20(水) 18:20:22
>>234
ビットマップを読み込んで、色を文字で表したテキストファイルを出力する
◆仕様
・ビットマップは24bit限定

が読めない日本人じゃない奴が、北京五輪を機に紛れ込みましたか?
祖国のサイトにお帰り下さい。
249基地外揚げ足取り:2008/08/20(水) 18:21:24
>>234
> <windows.h>をつかわず

247 名前:デフォルトの名無しさん 投稿日:2008/08/20(水) 18:10:00
>>246
BMPなんてかいてねーよ。
ビットマップとしか書かれてないだろ。

BMPなんてかいてねーよ。
ビットマップとしか書かれてないだろ。

BMPなんてかいてねーよ。
ビットマップとしか書かれてないだろ。

BMPなんてかいてねーよ。
ビットマップとしか書かれてないだろ。
250デフォルトの名無しさん:2008/08/20(水) 18:22:30
>>247
どうせ答える気がないんだろ、だったら無知、揚げ足取り、横槍程度のバカは
口出しするなよ。言い草がみっともない。人として恥ずかしい。
> BMPなんてかいてねーよ。
> ビットマップとしか書かれてないだろ。
何これ?日本語が読めないバカって頭も悪いんだなw
251デフォルトの名無しさん:2008/08/20(水) 18:25:04
>>247 = >>235
鬱陶しいんだよ、クソガキ。
お前が答えられないだけだろw
教師をバカにする以前に、お前がバイナリすらまともに扱えない証拠。

>>238 にbmpと断っていますが?w

ttp://www.mm2d.net/c/c-11.shtml
ttp://www.geocities.co.jp/Playtown-Knight/6845/sd_doc/format_windib.html
どちらにしろ、同じようなもの。はいはい、知ったかの答える気無しの野次馬は帰った帰った。
252デフォルトの名無しさん:2008/08/20(水) 18:29:39
>>251
> >>238 にbmpと断っていますが?w
>>234の話だろ。それとも文書の前後が理解できない病気か?
253デフォルトの名無しさん:2008/08/20(水) 18:30:23
>>249
そういう思い込みで手を動かすタイプが、バカコード書くんだろ。
254デフォルトの名無しさん:2008/08/20(水) 18:30:59
>>250
ひょっとして、BMPがなんなのか知らないのか?
255デフォルトの名無しさん:2008/08/20(水) 18:31:52
わざわざ連投しないで1レスにまとめろよ屑
256デフォルトの名無しさん:2008/08/20(水) 18:36:19
>>255
おまえもな
257デフォルトの名無しさん:2008/08/20(水) 18:37:34
>>241とか、分かりやすいだろ、上から目線どころか、バカとか平気で
相手を罵倒する発言をする。夏厨丸出し。ここはお前の管轄じゃないから
とっとと新学期の準備をしとけや。お前みたいな実力も知識も無い無能じゃ
このスレの宿題ですら答えられないから。
258デフォルトの名無しさん:2008/08/20(水) 18:40:55
>>257は馬鹿
259デフォルトの名無しさん:2008/08/20(水) 18:41:10
>>247
これは酷い。言葉が読めないのか、こいつは?w

>>238の条件でBMPファイルを生成してみれば、どうなっているかくらいわかっているはず。
あぁそうか、Windowsを使ってないどこぞの研究所の人か?
世の中はWindowsがメインだぞ。俺は大学では実験や研究では
SolarisやUNIXなどを使っていたが、ワークステーションでもWindows系は
使ってたがね。当然、そこでは標準搭載のペイントはあったけどな、
もう6年くらい前の話だが、自分が大学生だったのは。
260デフォルトの名無しさん:2008/08/20(水) 18:43:10
ハナっから課題に答える気が無い奴が、揚げ足取りみたく
要らない横槍や罵倒、自分の無知をさらすなんてことはするなよ
スレが荒れるだろが >>247 >>241
261デフォルトの名無しさん:2008/08/20(水) 18:43:56
なんか>>237の件で揉めてるのに>>238に書いてあるじゃないかとか、あほくさい・・・
262デフォルトの名無しさん:2008/08/20(水) 18:45:00
>>259
> >>238の条件でBMPファイルを生成してみれば、どうなっているかくらいわかっているはず。
これも、前後感覚が無くなる病気か?
263デフォルトの名無しさん:2008/08/20(水) 18:47:00
>>259
> 世の中はWindowsがメインだぞ。俺は大学では実験や研究では
なんで、オマエの狭い世界が基準なんだよ。
264デフォルトの名無しさん:2008/08/20(水) 18:51:09
>>235
235 名前:デフォルトの名無しさん 投稿日:2008/08/20(水) 15:13:21
まだビットマップ読み込む課題出す駄目教師いるんだな
265デフォルトの名無しさん:2008/08/20(水) 18:55:31
>>264
その場で作ったBMPを読み取ると言う話からすれば、
バリエーションのあるフォーマットに網羅的に対応すると言う課題でもない様だし、
ターゲットとしてバカらしくはある。
266デフォルトの名無しさん:2008/08/20(水) 20:09:16
>>234 >>238
テキスト形式の具体的な内容は?
267デフォルトの名無しさん:2008/08/20(水) 20:48:42
>>234
左上から順にRGBを6桁の16進数にして出力するプログラムは出来たでごわすが
現在、>>1にあるうpろだが利用できないようなので、復旧したらうpするでごわす。
268デフォルトの名無しさん:2008/08/20(水) 21:46:50
>>245

 一応、リンクできるようにしてみたけど
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7630.zip
つながり難い
269デフォルトの名無しさん:2008/08/20(水) 21:52:10
>>1にあるうpろだの調子が悪い?
270デフォルトの名無しさん:2008/08/20(水) 22:43:24
>>258が馬鹿
271デフォルトの名無しさん:2008/08/20(水) 23:09:59
BMPの話でここまで必死にバカになれるお前らが羨ましいぜ
272デフォルトの名無しさん:2008/08/20(水) 23:57:20
っつかさ、別に個人を特定して直接自分に対して文句を言ってきた奴が
いるわけでもないのに、口出ししておいて相手を罵倒している奴って何?
後から補足でBMPって本人が言ってんじゃん。BMPなんて書いてないって
どんだけ文字が読めない学の無い奴だよ?って思われるような墓穴を掘るなよw
Windows、ペイント、ビットマップって言ったら普通に知っている人は分かるぞ?
けどさ、それを言うと、自分にとっては当たり前じゃないとか、それ以外にもあるとか
言い出すんだろ?分からないなら口出ししなきゃ良いじゃんw
己の無知を晒す場でもないから、知らないなら別に口出しせんでもよろしい。
なのに、その課題を扱う講師がどうとか、無関係なレスしてんの???
273デフォルトの名無しさん:2008/08/21(木) 00:14:44
>>272
これが前後関係のわからなくなる病気
274デフォルトの名無しさん:2008/08/21(木) 00:15:10
>>272
>>234読めよ、夏厨
275デフォルトの名無しさん:2008/08/21(木) 00:48:15
BMPって書いてあるのに、口出しして墓穴を掘った本人乙w
それに反応するのはお前くらいだよ
276デフォルトの名無しさん:2008/08/21(木) 00:54:15
>>238が読める?読めない?聖徳太(ry
277デフォルトの名無しさん:2008/08/21(木) 00:55:50
>>276
結局、BMPがなんだか知らなかったのか・・・
278デフォルトの名無しさん:2008/08/21(木) 00:56:14
さてと、分からず屋はとりあえず、Windowsに標準搭載の
ペイントで24ビットBMPファイルを何でも良いから作ってみましょう。
先に言っておくが、中身がまったくないってのは無しね。
279デフォルトの名無しさん:2008/08/21(木) 00:57:01
>>276
まあ、Wikipediaをwikiって略すようなもんだから、バカっぽいけど、それほど恥ずかしくないんじゃないの?
280デフォルトの名無しさん:2008/08/21(木) 01:04:43
テンプレに沿ってないだけでここまで荒れるものなのか
なんというか活気があるな
281デフォルトの名無しさん:2008/08/21(木) 01:05:10
あらあら、課題に答える気もないくせに、煽るのに必死な奴が必死だなw
ねぇ、Macユーザ?それともUNIX、Linux系?Windows固有のものではないが、
>>234には
> <windows.h>をつかわず
って条件があるし、24ビットBMPっと言ってしまえば、察するに例のあれでしょ。
あぁ、そうか、windows.hすら知らない初心者か、んじゃあんたみたいなのは
ここで回答せずにROMってなさい、ね?口ばっかりでソースを提示しない卑怯者には
用がないんですけど?

ttp://e-words.jp/w/BMP.html
ttp://ja.wikipedia.org/wiki/Windows_bitmap
ttp://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E3%83%9E%E3%83%83%E3%83%97%E7%94%BB%E5%83%8F
282デフォルトの名無しさん:2008/08/21(木) 01:08:50
wingdi.h使えばBITMAPINFOHEADER使えるよ
283デフォルトの名無しさん:2008/08/21(木) 01:10:50
>>281
よっぽど恥ずかしいんだろうけど、もう、気にするなよ。
284デフォルトの名無しさん:2008/08/21(木) 01:13:12
題意が分からなくて答える気がないなら、要らんレスせんでよろしいよ。
本当にお前が日本語が理解できるかも疑わしい。
>>1読め。
> 気に入らない質問やその他や発言はスルーの方向で。
何もあんたを特定して質問者は質問をしてんじゃないんだから。
知らない、分からない奴に押し付けてないだろw
そうやって、自分が知らなかったことを許してもらおうとかしているわけ?
それとも、知らなかったことを言い訳して、認めてもらおうとしてんの?
あんたがどこの誰か知らないが、自分が解けない課題を出す奴を
目の敵にしてどーすんだよ?w
答える気がないなら黙っとれ、鬱陶しい。スレが汚れるからこの変にしとくぞ。
285デフォルトの名無しさん:2008/08/21(木) 01:15:09
>>284
とうとう、>>1を持ち出したよ。
それ、何回もやりすぎで効果ないだろ。
286デフォルトの名無しさん:2008/08/21(木) 01:16:13
>>284
>>1を持ち出して何とか、自分が最後の発言者になりたいんだろうけど、逆効果じゃね?
287デフォルトの名無しさん:2008/08/21(木) 01:16:57
>>284
それ、何行目からコピペなの?
288デフォルトの名無しさん:2008/08/21(木) 01:18:30
回答できない人に向けて質問者は質問なんてしてませんよぉ〜?
なんでそれが分からないで、一人で質問者に噛み付いてファビョってんの?w
>>1読め
289デフォルトの名無しさん:2008/08/21(木) 01:21:29
>>288
オマエは質問者じゃないだろ。
当人はとうに飽きて出てったさ。
そろそろ寝たら?どうせ解けないんだろ?暇でやることないんだろ?
最近、丸投げのレスがなくて、たまにある課題をwktkして待っていたが
BMPの問題程度の簡単なものでも、解けなくて悔しいんだろうけどさ。
お前もあれだろ、昼夜逆転した生活で脳がおかしくなって
世の中がおかしく見え始めている妄想癖のある危険人物。
他の板でも、深夜に暴れているキチガイを見かけるけど、そいつらって
最後は暴れて逮捕されてるんじゃね?あと、スレが汚れるからこの辺で、な?
お前みたいなのは、引き際を知らないから、余計に泥沼に嵌るんだよ。
とにかくな、ごちゃごちゃ言い訳っぽいことを並べるだけの奴って、
どんな業界でも、無責任で情けなく見えるんだわ。お前が無能だから出来ないんだろって
普通に言われるぞ。ここは答えるのも任意だから、出来なくても誰にも文句いわれないから、
だから安心して寝ろ、な?お前が出来る課題が必ずしも質問されるとは限らないからさ。
出来る人に任せとけ、な?
291デフォルトの名無しさん:2008/08/21(木) 01:41:25
>>290
BMP程度って、中身は簡単なようで複数フォーマットがあって
割と面倒なんでけどw

292デフォルトの名無しさん:2008/08/21(木) 02:00:24
わざわざ限定されてるんだから複数フォーマットは考慮しないでいいだろ
293268:2008/08/21(木) 03:56:42
>>245

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7631.zip
うpろだ復活したので修正したのをあげとく
294デフォルトの名無しさん:2008/08/21(木) 09:38:10
BMPファイル討論して盛り上がったが誰も問題は解いてやってない件www
295デフォルトの名無しさん:2008/08/21(木) 09:44:59
いつもの人は解けない問題がくるとファビョって他人に絡みだすからな
296234:2008/08/21(木) 11:32:45
なんだか争いが起きていたようですが
元はといえばボクの情報漏れが原因なので・・・
みなさんすみません。
>>266
FF00FF みたいな感じだと思います
>>267
よろしくおねがいします
297デフォルトの名無しさん:2008/08/21(木) 13:07:53
>>295
さすがに解けないわけじゃなくて、面倒くさいだけだろ。
298デフォルトの名無しさん:2008/08/21(木) 13:40:44
とりあえず、仕様はっきりさせて仕切り直ししようか?
C言語でやること、24bit色の無圧縮BMPだけを扱えば良さそうなとこまでは把握した。

>・対象ビットマップ
> 赤、青、緑、白、黒
これがいまいちわからない。どゆこと?
299デフォルトの名無しさん:2008/08/21(木) 13:47:39
>>298
この手の問題をやりたくないのは

出題者がいい加減な出題の仕方をしてて、答えるほうが質問者に落としどころを確認しないと

いけないことだ。

300デフォルトの名無しさん:2008/08/21(木) 13:49:35
オレは、赤、青、緑、白、黒 の5色だけ使われてて
テキストファイルにはピクセルに相当する赤、青、緑、白、黒の文字が並ぶんだと思ってたよ・・・
301デフォルトの名無しさん:2008/08/21(木) 13:51:22
>>234
「私の為に争わないで」ってかw
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7632.txt
302デフォルトの名無しさん:2008/08/21(木) 13:53:27
第一24bitビットマップでどうやって赤青緑白黒とか区切るんだよw

RGBそれぞれ256段階指定できるんだぞ。

やっぱり糞問題じゃねーか
303デフォルトの名無しさん:2008/08/21(木) 14:01:55
>>299
出題者は講義を通じて課題の範囲を示しているだろうが、
質問者はやる気の無いド素人だから、課題を理解していない。
それが、源泉だと思う。
304デフォルトの名無しさん:2008/08/21(木) 14:30:22
>>300
0000FF00、FF000000、00FF0000、FFFFFF00、00000000の5種類のデータしか並んでないって事か。
決めうちしちゃって大丈夫かな・・・?
305デフォルトの名無しさん:2008/08/21(木) 14:35:56
>>304
そらなw

PC9801の初期のデジタルモードじゃないだからwww

出題者はやっぱり糞

本気で赤青とかに分類するための条件設定がなくて
ソフト作れーねーよ。

24bitビットマップでざっくり「赤青・・・」に分けるなら色ごとの閾値設定だとかも
よこせよ
306デフォルトの名無しさん:2008/08/21(木) 14:56:46
>>305
糞なのは、質問者だろ。
307デフォルトの名無しさん:2008/08/21(木) 14:57:38
なんでこんなにもビットマップが人気なのか分からんw
308デフォルトの名無しさん:2008/08/21(木) 15:33:57
とりあえずそれっぽいソースに見えるだけなビットマップ for VC++ 8.0
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7634.txt

動作確認?まったくしとらんでおじゃるよ?(鼻糞ほじりながら)
309デフォルトの名無しさん:2008/08/21(木) 17:44:52
閾値がどうとかどうでもいー
ペイントでそのようなファイル作ってくれるんでしょ?他のがあったら捨て置けばいいじゃん
310デフォルトの名無しさん:2008/08/21(木) 17:45:52
>>306
またお前か、答えもせず回答する能力もないくせに、偉そうに
口出ししかしないお前の方が糞なんだよ!このスレでは用なし
要らない子でつよ?wwww
311デフォルトの名無しさん:2008/08/21(木) 19:04:00
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):
二次元配列「field[5][5]」に格納されている

#####
#####
#****
#****
#****

という文字列(#は壁。*がフィールド)で一番左上が(0,0)とした場合のフィールドの開始位置の座標を求めよ。
上でしたら「X:1 Y:2」

#####
#####
###**
###**
###**

でしたら「X:3 Y:2」という値を求めたいです。

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C)
[4] 期限:無期限

どうかよろしくお願いします。
312デフォルトの名無しさん:2008/08/21(木) 19:08:39
>>311
この場合は?
#####
#####
###**
##***
##***
313デフォルトの名無しさん:2008/08/21(木) 19:11:59
>>312
そうゆうのは無いです。。
あくまで角がある(?)パターンです。

お願いします(;´Д`)
314デフォルトの名無しさん:2008/08/21(木) 19:13:34
>>234
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7635.c

>>308
偽おじゃるめ、クソースさが足りないでごじゃる
315デフォルトの名無しさん:2008/08/21(木) 19:24:52
>>234 余計なコードを削除したでござる
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7636.c
316デフォルトの名無しさん:2008/08/21(木) 19:34:27
>>311
#include<stdio.h>

int main(int argc, char *argv[]){
int i, x, y, width=5, height=5, left=-1, top=-1;
int field[5][5]={
{'#', '#', '#', '#', '#'},
{'#', '#', '#', '#', '#'},
{'#', '#', '#', '*', '*'},
{'#', '#', '#', '*', '*'},
{'#', '#', '#', '*', '*'},
};

for(i=0;i<width+height-1;i++){
for(y=0;y<i;y++){
x=i-y;
if(x<0 || x>=width) continue;
if(field[y][x]=='*'){
left=x;
top=y;
break;
}
}
if(y<i) break;
}
printf("X:%d Y:%d\n", left, top);

return 0;
}
317デフォルトの名無しさん:2008/08/21(木) 19:51:46
>>316
本当にありがとうございます!
助かりました!
318デフォルトの名無しさん:2008/08/22(金) 01:57:08
>>316が理解できない。
何でこういうループになるの?
319デフォルトの名無しさん:2008/08/22(金) 02:03:22
無駄の多いループだけど、やってることは難しいことじゃないだろw
320デフォルトの名無しさん:2008/08/22(金) 08:58:01
無限ループじゃないから安心汁!
321デフォルトの名無しさん:2008/08/22(金) 09:36:59
さて、宿題かもーん
322回答者修行中:2008/08/22(金) 11:50:25
質問者もういっちゃいましたね
#include <string.h>
#include <stdio.h>
int main()
{
int i, x, y, width=5, height=5, left=-1, top=-1;
char *p;
char field[5][5]={
{'#', '#', '#', '#', '#'},
{'#', '#', '#', '#', '#'},
{'#', '#', '#', '*', '*'},
{'#', '#', '#', '*', '*'},
{'#', '#', '#', '*', '*'},
};

p=strchr((char *)field,'*');
i = ((int)p - (int)field)/sizeof(char);
y=i/5;
x=i-y*5;
printf("x=%d y=%d",x,y);
return 0;
}
これまともに動いてる?
323デフォルトの名無しさん:2008/08/22(金) 16:03:54
クソコテww
324デフォルトの名無しさん:2008/08/22(金) 18:47:59
>>322
*が存在することが明確なら特に問題ないのかな
y=i/widthのほうがよかったりしないかな、とおもいつつも、ともあれその発想が面白かったです
325 ◆tr.t4dJfuU :2008/08/22(金) 22:21:04
[1] プログラミング演習
[2] 問題:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7643.txt
  データ:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7644.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] VC 5.0
 [3.3] 言語:C
[4] 期限:2008年08月24日16:00
[5] 特になし。
326デフォルトの名無しさん:2008/08/22(金) 22:52:15
>>322
>((int)p - (int)field)/sizeof(char);
こう書くより
p - (char*)field
こう書いたほうがよくね?
327デフォルトの名無しさん:2008/08/22(金) 23:46:36
>>236をお願いできないでしょうか。
328デフォルトの名無しさん:2008/08/23(土) 00:37:29
[2] 問題文
1.
次のような式で表される数列が与えられたとする。
a0=1,a1=1,an=an-1+2an-2
int型の整数n(n≧0)を受け取り、上記の数列anの値をa0からanまで全て表示する関数printa(n)を作成せよ。

2.
要素数2個のdouble型の配列xy(xy[0]にはx座標、xy[1]にはy座標が納められている)と2行2列のdouble型の2次元配列Aを受け取り、座標(x,y)のAによる1次変換を求めて、その結果を配列xyに格納する返却値無しの関数LinearTrance(xy,A)を作成せよ。

3.
文字列の納められた文字型の配列sとstailを受け取り、sの末尾にstailの文字列が含まれているかどうかを調べ、含まれている場合には1、含まれていない場合には0を返す関数strcmptail(s,stail)を作成せよ。

4.
4個の文字列"abc.txt","xyz.jpg","foo.txt","bar.mp3"と文字列"txt"を受け取り、文字列の末尾に"txt"を含む文字列かあるかどうかを調べて、あればその文字列全てを表示するプログラムを作成せよ。ただし問3で作成した関数を用いること。


[3] 環境
 [3.1] OS:Windows
 [3.2] すいません、わからないです。
 [3.3] 言語:C
[4] 期限:23日正午

見づらいかもですが、よろしくお願いします。
329デフォルトの名無しさん:2008/08/23(土) 01:07:37
1.
void printa(int n) {
int a = 0, b = 1, i;
printf("%d ", a);
if(n==0) return;
printf("%d ", b);
for(i=2; i<=n; i++) {
int temp = a * 2 + b;
printf("%d ", temp);
a = b;
b = temp;
}
}

2.
void LinearTrance(double xy[2], doubleA[2][2]) {
double temp[2];
temp[0] = A[0][0] * xy[0] + A[0][1] * xy[1];
temp[1] = A[1][0] * xy[0] + A[1][1] * xy[1];
xy[0] = temp[0];
xy[1] = temp[1];
}

3.
int strcmptail(char *s, char *stail) {
char *p = s, *q = stail;
while(*p) p++;
while(*q) q++;
while(q > stail) if(*--q!=*--p) return 0;
return 1;
}
330デフォルトの名無しさん:2008/08/23(土) 01:29:43
>>329
int main(void){
char *tail="hogehuga";
char *s="foobarhogehuga", *p;

p=s+20;
printf("%s %s %d\n", p, tail, strcmptail(p, tail));

return 0;
}
331クソコテ:2008/08/23(土) 18:10:22
ありがとうございます
>>324
そうですねマジックナンバーはいただけませんね
>>326
それでいけますか?
あ、いけますね、やっぱりまだ少し勘違いがあるみたいです。
>>327
すみません、私の力不足の用で、途中までやってみましたが、
構造体に入れるところで、異常に長くなってしまうので諦めました。
メモリ上での構造体の配置を仮定すればループでいけますが
あまりにも処理系依存なので止めておきます、
誰かがすごい解答を出してくれるのを待ちましょう。
332デフォルトの名無しさん:2008/08/23(土) 18:59:28
問題文
OSを作りなさい
333デフォルトの名無しさん:2008/08/23(土) 19:05:22
>>332

#include <allornothing.h>

int main(void){
puts("The End");
}
334デフォルトの名無しさん:2008/08/23(土) 19:30:32
>>332
Oh yes なんつって
335デフォルトの名無しさん:2008/08/23(土) 21:20:28
>>330が何を言いたいのか理解できないんだが。
336デフォルトの名無しさん:2008/08/23(土) 21:21:51
>>335
strlen(stail) > strlen(s)
の時に問題あるよ
337デフォルトの名無しさん:2008/08/23(土) 21:25:16
330からそういう意味は読み取れないw
338デフォルトの名無しさん:2008/08/23(土) 21:27:49
>>337
>>330 を実行してアレッ?と思って欲しかったが、回りくどかったようだ
339デフォルトの名無しさん:2008/08/23(土) 21:30:50
お前本人かw
>p=s+20;
こんなこと書くアホが何言ってんだ。
340デフォルトの名無しさん:2008/08/23(土) 21:32:05
>>339
p=&s[20]; が好みか?
341デフォルトの名無しさん:2008/08/23(土) 21:32:39
どこ指してるか理解してんのかよw
342デフォルトの名無しさん:2008/08/23(土) 21:34:22
あーなんてこった orz
343デフォルトの名無しさん:2008/08/24(日) 17:45:45
アセンブラの宿題あるんだけど誰か助けて
344デフォルトの名無しさん:2008/08/24(日) 17:57:45
スレ違い
死ね
345デフォルトの名無しさん:2008/08/24(日) 18:46:54
暇だから宿題出して
346デフォルトの名無しさん:2008/08/24(日) 19:37:12
>>343にきけ
347デフォルトの名無しさん:2008/08/24(日) 20:09:39
≫345

[1]アルゴリズムとデータ構造
[2]
クラスカルの方法を用いて,最小木のアルゴリズムを作れ.
データファイル(data.txt)は

点の数 枝の数 (1行目のみ)
枝番号 始点 終点 枝の長さ
・・・・・・・・・・(これが枝の数だけ続く)

という形式.

グラフを各点に接続する枝を覚えるリスト形式で表現せよ.

↓data.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7644.txt

[5]最小木の最短経路の問題へと発展する1stステップです。ま、解ければね・・・
348デフォルトの名無しさん:2008/08/24(日) 21:15:23
>>347
もっと解いてうれしくなるような問題にしろよ。
349デフォルトの名無しさん:2008/08/24(日) 21:30:21
>>344
>>348
いい加減、お前の方がうざいぞ
350デフォルトの名無しさん:2008/08/24(日) 21:36:03
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク)
ファイルに以下のような数字の列があるとする。
32
82
11
19
90
24
58
48
これをプログラムで読み込んで数字の小さい順に並び替えるプログラムを作れ。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:g77
 [3.3] 言語:C
[4] 期限:2008年8月25日正午
[5] その他の制限:なし

よろしくおねがいします。
351デフォルトの名無しさん:2008/08/24(日) 21:47:30
>>350
#include<stdio.h>
#include<stdlib.h>
int compare(const int *a, const int *b){
if(*a<*b) return -1;
if(*a>*b) return 1;
return 0;
}
int main(void){
char *filename="hoge.txt";
int *data=NULL, one_data, data_num=0, i;
FILE *fp;

fp=fopen(filename, "r");
if(fp==NULL){
fprintf(stderr, "\nError: %s file cannot open.\n", filename);
return 1;
}
while(fscanf(fp, "%d", &one_data)==1){
data=realloc(data, sizeof(int)*(data_num+1));
data[data_num++]=one_data;
}
fclose(fp);
qsort(data, data_num, sizeof(int), (int (*)(const void *, const void *))compare);

for(i=0;i<data_num;i++) printf("%d\n", data[i]);

free(data);

return 0;
}
352デフォルトの名無しさん:2008/08/24(日) 21:53:20
>>351
ありがとうございます。
353デフォルトの名無しさん:2008/08/25(月) 01:42:06
>>347
読み込んで記憶するだけでいいの?
それとも内部でグラフを作るの?
354sage:2008/08/25(月) 02:09:56
>>353
グラフはアウトプットしなくてもよいのですが
まずリスト形式で作成すると同時に
枝情報をヒープに格納して(最大ヒープサイズは枝の数である50)
ヒープから短い枝順に順次データを取り出し
クラスカルのアルゴリズムに従って、最小全域木を求めます。
最終的には最小全域木の
ある任意の点Αから、点50までの最短経路を求める問題になります。

おそらく出題者は、グラフを先に作ったうえで
問題にしたっぽいです。

グラフはwinnyの開発画面みたいなやつです。
あぷりますね。
355347:2008/08/25(月) 02:26:40
356347:2008/08/25(月) 02:29:34
357 ◆luuqrOhdZk :2008/08/25(月) 03:29:06
[1] 授業単元: 授業ではありません
[2] 問題文(含コード&リンク):
「苦しんで覚えるC言語」の第1部13(全ページリンクフリー)
http://homepage3.nifty.com/mmgames/c_guide/13-q.html
の、「プログラム書き取り」の問題です。
「入力された10個の数値を最後から表示するプログラムを作成せよ。」
(簡単のため3個の数値にしました)
[3] 環境
 [3.1] OS: Windows XP Home edition
 [3.2] コンパイラ名とバージョン: (Cpad for C++ comiler ver2.31)
 [3.3] 言語: C
[4] 期限: ( [無期限])
[5] その他の制限:まだ初心者なので高度な設定等は分かりません

プログラムの、
for(i = 0;i < 3; i++ ){
printf("%d番目を入力:",i);
scanf("%d\n",&array[i]); }
の部分で、実行画面で、
0番目を入力:11
1番目を入力:22
2番目を入力:33

(11、22、33は実行画面で入力する値です。)
としたいのに、なぜか

0番目を入力:11
22
1番目を入力:33
2番目を入力:44
となってしまいます。
よろしくお願いします。以下、プログラム全文と実行画面です。
358 ◆luuqrOhdZk :2008/08/25(月) 03:30:17
先の質問のプログラム全文と実行画面です。
#include <stdio.h>

int main(void)
{
int array[3];
int i;
for(i = 0;i < 3; i++ ){
printf("%d番目を入力:",i);
scanf("%d\n",&array[i]);
}

for(i = 2;i >= 0;i--){
printf("%d番目は%d\n",i,array[i]);
}

fflush(stdin);
getchar();
return 0;

}
―――実行画面―――

0番目を入力: 11
22
1番目を入力: 33
2番目を入力: 44
2番目は33
1番目は22
0番目は11
359デフォルトの名無しさん:2008/08/25(月) 04:02:49
>>357
> scanf("%d\n",&array[i]);

scanf("%d",&array[i]);
360 ◆luuqrOhdZk :2008/08/25(月) 05:01:27
>358
お陰様で解決しました。
ありがとうございます。
361234:2008/08/25(月) 09:09:51
>>234です。お返事の方遅れてすみません、今みなさんの書いてくれたコードを読みながら自分でコードつくっています。
また、ご協力お願いします。
362デフォルトの名無しさん:2008/08/25(月) 11:01:55
>>347
言語は?
363347:2008/08/25(月) 11:17:57
>>362

C言語でもC++でもOKです。
自分はVC++使ってたんですけど
引数のエラーが出て
関数がうまく扱えないので

C使ってBorlandでやってまス。
364 ◆O5wSDVhi7. :2008/08/25(月) 11:31:16
Cの問題について、ちょいと質問したいのですが、
ファイルの読み込み処理で、入力した名前のファイルがある場合はある、ない場合はないと
表示させるプログラムを作っていますが、自分が作成したコードではダメだしをくらいました。

以下、コードです。
char filename[20];
FILE *fp;

printf( ">" );
scanf("%s",&filename);


fp = fopen( filename, "r" );
if( fp == NULL )
{
printf( "%sは存在しません\n",filename );

}
else
{
printf( "%sは存在します\n", filename );
}
fclose( fp );

一応、動くことは動くのですが、余計な部分が多いというところと、もう一つ
問題があるといわれましたが、自分ではよくわかりません。

どなたか教えてください。
環境はVisual studi2005です。
365デフォルトの名無しさん:2008/08/25(月) 11:37:53
>>364
filename がバッファオーバーフローする危険性がある
fclose(NULL) する危険性がある
scanf に渡す引数の型が一致していない

あとこのレベルだとどうでもいいことだが
排他処理をしている場合 fopen でファイルの存在を確定することはできない
366 ◆O5wSDVhi7. :2008/08/25(月) 11:59:28
>>364
自分でも、ちょっと調べてみたのですが、
どうやら、fclose(NULL)している模様です。

この場合の対策などはないのでしょうか?
367デフォルトの名無しさん:2008/08/25(月) 12:10:24
>>366
fpがNULLかどうかチェックしてるだろ。
そのNULLじゃない方に入れたらいいべ。
368デフォルトの名無しさん:2008/08/25(月) 12:52:58
>>364 通りすがりの初心者の意見↓

1.scanfのところの&がいらない。
2.ファイルがない場合はfcloseする必要がない。
369 ◆O5wSDVhi7. :2008/08/25(月) 13:39:34
>>367
そのとおりに変更して提出しました。

>>368
scanfを使用した場合どのような問題が起こるか説明しろといわれました。

上で言われた、バッファオーバーフロー云々でいいのだろうか?
いろいろ、調べてみたが解釈の仕方が様々でよくわからなかった・・・。
370368:2008/08/25(月) 14:04:57
>>369

scanfの問題は空白がくると読み込みが終了するってことかな?
オーバーフローはgetsだった気がする。
371デフォルトの名無しさん:2008/08/25(月) 14:21:56
オーバーフローは書式でどうにか出来るしな
372デフォルトの名無しさん:2008/08/25(月) 14:26:00
>>370
scanf("%[^\n]", a);
これでよかった気がするがうるおぼえ。
373デフォルトの名無しさん:2008/08/25(月) 14:37:45
>>372
こういうやり方があったのか知らんかった。
'\n'をスキャン対象から除外すればいいのか。
374デフォルトの名無しさん:2008/08/25(月) 15:07:11
>>369
リターンキーが無視できない、バッファオーバーラン、空白が読み取れない
これらの問題を解決したすばらしいscanf

scanf("%19[^\n]%*[^\n]", filename);
375デフォルトの名無しさん:2008/08/25(月) 15:24:28
>>370
getsは回避手段がないのでだめだめな関数
scanfも>>364の使い方だとgetsと変わらない
20文字以上入力されたらバッファーがあふれる
376デフォルトの名無しさん:2008/08/25(月) 15:31:41
>>370
scanf(%20s,filename);とか
文字数制限しないとバッファオーバーランするみたいですね。
勉強不足でした・・・(´・ω・)
377デフォルトの名無しさん:2008/08/25(月) 15:34:09
>>375
scanf(%20s,filename);とか
文字数制限しないとバッファオーバーランすんですね。
勉強不足でした。(´・ω・)
378デフォルトの名無しさん:2008/08/25(月) 15:34:19
そして現実にはそこまでするくらいならfgets+sscanfで良くね?となるのであった……。
379デフォルトの名無しさん:2008/08/25(月) 16:28:42
文字列一つだけ欲しいんだからsscanfもいらない気がするw
380デフォルトの名無しさん:2008/08/26(火) 12:56:45
>>347
データをすべて読み込むところまでしかできてない
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7651.txt
381234:2008/08/26(火) 14:41:03
234ですみなさんおつかれさまです
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7652.txt

と、無事完成させることができました(関数にしたほうがいいかも)

そして次の課題もご協力おねがいしたいのですがよろしいですか?

256、16、モノクロ対応
◆仕様
・各ビット数のビットマップも読み込めるようにする。
・<windows.h>は使用しない
◆ポイント
・読み込んだデータを24ビットに展開させる。

あと以前の色を文字で表示するのは
0x000000FF=青
0x0000FF00=緑
0x00FF0000=赤
0x00FFFFFF=白
0x00000000=黒
だったようです。失礼しました。
382デフォルトの名無しさん:2008/08/26(火) 20:14:28
>>347
>>380 は有向グラフで書いてるけど、問題は無向グラフ?
383347:2008/08/26(火) 20:46:46
>>380
すごく参考になりました。
ありがとうございます!

>>382
あくまでも、私個人の考えなのですが;
ある点A(これは学生の出席番号でした) から50までの最短経路の長さとその途中に通った点を求めるのが、
この問題の最終的な目標です。(奥行優先探索を使うといいと教師は言ってました。)

今回はグラフを書くこと自体が目的ではないので、有向、無向、どちらでも大丈夫です。
まぁ、最短経路なので、無向、有向どちらかといえば、一番近い距離を制約なしに
進める無向の方がいいかもしれません。

あと、データの各枝の長さがすべて異なっていれば、最小木が一意に定まりますが、
今回のデータは、そうでないので、作り方によっては、最小木が何本か作れるかもしれないです。
384デフォルトの名無しさん:2008/08/27(水) 09:47:14
夏休みの宿題で c++で
「自分で考えた最高のクラスを創ってこい」
というのが出ました。

どんなのを作っていいか全く見当がつきません。
だれか知恵を貸してください。
385384:2008/08/27(水) 10:01:33
すいません追記です

クラスの継承は必ず使えとの事です
386デフォルトの名無しさん:2008/08/27(水) 10:43:43
総勢30名のクラス中女子が28名いて自分以外の男子1名はとんでもないブサイクのようなクラスだ。
387デフォルトの名無しさん:2008/08/27(水) 10:54:19
>>386
夢のようなクラス(学級)ですね!

でもそっちのクラスじゃないです;;

class xxxx{
private:
int aa:
public;
xxxx();

とかのクラスです。
388デフォルトの名無しさん:2008/08/27(水) 11:02:06
物凄く面倒くさい手順でHello, World!を表示するクラスとか
389デフォルトの名無しさん:2008/08/27(水) 11:04:29
class Ninja{
private:
static const int lv = 99;
public:
int Attack(void){ return lv*100; }
};
こういうことか
390デフォルトの名無しさん:2008/08/27(水) 11:14:46
NinjaはMonsterを継承しないと
391デフォルトの名無しさん:2008/08/27(水) 11:15:33
って敵で出てくるほうの忍者じゃないか
392デフォルトの名無しさん:2008/08/27(水) 16:42:00
[1] 授業単元: C言語実習
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7655.txt
[3] 環境
 [3.1] OS: WindowsXP Professional
 [3.2] コンパイラ名とバージョン: Borland C++ 5.6.4
 [3.3] 言語: C
[4] 期限: 本日中

よろしくお願いします。
393デフォルトの名無しさん:2008/08/27(水) 17:09:55
自分-1まで調べろと書いてあるのに
何故自分までadd配列に入った結果になってるんだ?
394デフォルトの名無しさん:2008/08/27(水) 17:11:21
ああ、最後に自分を入れろと書いてるのか
395デフォルトの名無しさん:2008/08/27(水) 17:24:19
>>392
#include<stdio.h>

int main(void){
int add[15], in=-1, i, j;

scanf("%d", &in);
if(in<2 || in>100) return 1;

for(i=0;i<15;i++) add[i]=0;
for(i=2,j=0;i<in;i++) if(in%i==0) add[j++]=i;
add[j++]=in;

for(i=0;add[i]!=0;i++) printf(" %d", add[i]);

return 0;
}
396デフォルトの名無しさん:2008/08/27(水) 17:24:46
#include<stdio.h>
int main()
{
int add[15]={0};
int own=0,cownt=0;
do{
printf("2〜100の値を入れてください\n");
scanf("%d",&own);
}while(own<2||100<own);
for(int i=1;i<own;i++)
if( !(own%i) )
add[cownt++]=i;
add[cownt]=own;
for(int i=0;add[i]!=0;i++)
printf("%d ",add[i]);
return 0;
}
397396:2008/08/27(水) 17:26:44
しまった、変数名の指定呼んでなかったorz
398デフォルトの名無しさん:2008/08/27(水) 17:34:04
>Q3.「バブル・ソート」という整列手順(アルゴリズム)があるが、ここで用いた基本ソートとの違い何か。

ソート使って無くね?
399デフォルトの名無しさん:2008/08/27(水) 17:49:17
Q3だけ設問、浮いてるよなw
400392:2008/08/27(水) 18:51:58
回答ありがとうございます。

>>395
returnを複数使うという事を習っていないのですが
return 1; の部分を使わないとすればどういう風になるのでしょうか?
お手数かけますがお願いします。
401デフォルトの名無しさん:2008/08/27(水) 19:01:05
判定ひっくり返して中に入れちゃえばいいべ。

if(in>=2 && in<=100) {
//return 0の前の行まで
}
return 0;
402 ◆mM5kCiKYnA :2008/08/27(水) 21:49:48
[1] 授業単元: C言語(送信,受信)
[2]
UDPマルチキャストにて送信されたデータを受信するのですが....。
そのデータというのがアナログ64点,デジタル256点分が送られてきて、
それぞれアナログ256byte,デジタル32byteに格納して
残りの40byteはダミーで合計328byte分を用意して受け取り、
受信したデータをシュミレーターの受信バッファに書き込む作業ですが...

*注意事項としてはマルチキャストで送信されるデータはパルス信号がカウント値で送られ
てくるので受信したパルス信号時間に変換すること。
*パルス信号自体通常1が送信されるので2以上の値を受信した時点でバッファに書き込むようにする。
尚この処理自体湾ショットのみ行う。つまり通常1が送られて、2になった時点で受け取りまたしばらく
すると1になりその信号が3とか1以外になった時点で取り込むようなプログラムにする。
困っているので助けてください。よろしくお願いします。

[3] 環境
 [3.1] OS:Solaris8,UNIX(viコマンド)
 [3.2] コンパイラ名又はバージョン
 [3.3] 言語: C言語
[4] 期限:2008年9月1日
403デフォルトの名無しさん:2008/08/27(水) 22:11:47
>>402
あなろぐ?
404 ◆mM5kCiKYnA :2008/08/27(水) 22:59:12
>>アナログとデジタルのことです。
時計とかでもあると思うんですけど。
そこはあまり深く考えなくても大丈夫ですので。
405デフォルトの名無しさん:2008/08/28(木) 01:07:23
[1] 演習課題: C++
[2]
配列等を使って料金算出システムを作るのですが・・・

給料を入力
等級⇒給料が〜101100の場合"1"、101000〜107000の場合"2"、107000〜1014000の場合"3"
   1014000〜122000の場合"4"、122000〜130000の場合"5"
健康保険⇒給料の8.2%
厚生年金⇒給料の14.642%
雇用保険⇒給料の0.02%

出力後
所得   ○○円
等級   ○
厚生年金 ○○円
健康保険 ○○円
雇用保険 ○○円

終了しますか?(y,n)

というようなプログラムにします。
本当に困っているのでどなたか助けてください。よろしくお願いしますm(__)m

[3] 環境
 [3.1] OS:WindowsXp
 [3.2] Visial C++
 [3.3] 言語: C++
[4] 期限:2008年8月28日
406392:2008/08/28(木) 01:15:02
>>401
遅くなりましたが解決しました。
ありがとうございました!
407デフォルトの名無しさん:2008/08/28(木) 02:36:20
>>405
何をすればいいのかいまいちわからん。
それやるのに配列使わなく無いか?
それとも、表示するだけではなくて保存しておく必要があるのか?
408デフォルトの名無しさん:2008/08/28(木) 02:41:40
>>405
数値を正確に書けよ。イミフだ
未満とか以下の表現も必要
409デフォルトの名無しさん:2008/08/28(木) 06:18:35
410デフォルトの名無しさん:2008/08/28(木) 07:58:36
OpenGLで球体を作りたいのですが、サンプル例を作っていただけませんか?
411デフォルトの名無しさん:2008/08/28(木) 08:19:35

[1] 確率論
[2]
NxNの行列の逆行列を出すプログラムをつくれ。
Nは10以上30以下である。
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] 言語:C
[4] 期限:明日にかわるくらいまでには
412デフォルトの名無しさん:2008/08/28(木) 09:00:58
413デフォルトの名無しさん:2008/08/28(木) 09:56:02
だが断る
414デフォルトの名無しさん:2008/08/28(木) 10:13:16
>>402
シュミレーターの受信バッファに書き込む?
カウント値?
パルス信号?

問題の意味が分からない
415デフォルトの名無しさん:2008/08/28(木) 10:15:15
>>411
Numerical Recipes in C でも読んでろ
416デフォルトの名無しさん:2008/08/28(木) 11:16:29
5000円とかたかいよー。
417デフォルトの名無しさん:2008/08/28(木) 19:02:35
>>411
LU分解,Gauss-Jordan法,特異値分解
好きなのでググれ
418デフォルトの名無しさん:2008/08/28(木) 22:30:14
>>407
すいません。説明が言葉足らずでしたね。
>>408
たしかに。。。これからは気をつけよう。
>>409
おかげさまでどうにか期限までに課題を終わらせる事ができました。
本当に助かりました。ありがとうございました。
419デフォルトの名無しさん:2008/08/29(金) 03:32:50
[1]C言語
[2]住所録の作成
名前・住所・年齢・メアドを一つのレコードとする住所録システム
レコードの登録・削除・レコード中の各項目の更新・レコード中の各項目によるレコード検索
ファイルへの書込みと読込の6機能
配列は使えない
[3]OS:Windows  言語:C
[4]08/08/31
420デフォルトの名無しさん:2008/08/29(金) 03:57:29
> 配列は使えない
ちょっwwwwwww
421デフォルトの名無しさん:2008/08/29(金) 03:59:37
ポインタと動的メモリ確保使ってことでは?
422デフォルトの名無しさん:2008/08/29(金) 04:06:21
あんまり好みの設計じゃないなぁ。
固定長レコードな住所録の方が好きだ。
423デフォルトの名無しさん:2008/08/29(金) 04:11:13
いや、まてよ?
1レコードは256Byte固定長にして、各レコードは区切り文字で区切ればいいのか。
ちょっとやってくる。
424デフォルトの名無しさん:2008/08/29(金) 04:26:26
飽きたから放棄。
425デフォルトの名無しさん:2008/08/29(金) 04:56:17
>>419
レコード検索は部分一致でやるの?
その場合、複数件の該当レコードがあったときどうすんの?
426デフォルトの名無しさん:2008/08/29(金) 05:40:40
>>423
とりあえず登録と表示できるやつを作ってみた

#include "stdio.h"
#include "string.h"
typedef struct { int address,age,email, a,b,c,d, e,f,g,h, i,j,k,l, m,n,o,p ; } RECORD;
typedef struct { RECORD a,b,c,d,e, f,g,h,i,j, k,l,m,n,o, p,q,r,s,t, u,v,w,x,y,z ; } RECORDSET;
int main(void)
{
int i; char *p,*a,c; RECORDSET rs = {0}; RECORD *r = &rs.a,*t;
while( 1 ) { printf("i:touroku r:sakujo o:koushin h:kensaku a:kakikomi n:yomikomi 1:list 0:exit ?");
fflush(stdin); c = getchar();
switch(c) {
case 'i': p = (char*)&r->a;
printf("name :");scanf("%s",p);p+=r->address=strlen(p)+1;
printf("address :");scanf("%s",p);p+=r->age=strlen(p)+1;
printf("age :");scanf("%s",p);p+=r->email=strlen(p)+1;
printf("e-mail :");scanf("%s",p); r++; break;
case '1': t = &rs.a;c=0;
while(t->address>0) {
printf("\n[%c]",'a'+(t-&rs.a)/sizeof(RECORD));a=(char*)&t->a;
printf("\nname :%s\n",a);a+=t->address;printf("address :%s\n",a);a+=t->age;
printf("age :%s\n",a);a+=t->email;printf("e-mail :%s\n",a);
t++;c++;
}
printf("\ncount = %d\n", c ); break;
case '0':return 0; default :printf("not implimented.\n");
}
}
return 0;
}
427デフォルトの名無しさん:2008/08/29(金) 08:18:44
>>420
住所録関係なら配列は使えないだろ?
勉強しなおせ
428デフォルトの名無しさん:2008/08/29(金) 10:35:12
×使えない
○使わない
429デフォルトの名無しさん:2008/08/29(金) 10:37:46
そうだよな、住所録関係なら配列は使えないのは常識だよな
430デフォルトの名無しさん:2008/08/29(金) 13:00:39
>>427 (・∀・)ニヤニヤ
431デフォルトの名無しさん:2008/08/29(金) 13:02:04
文字列は配列として扱ってはいけないんですね?
1文字づつメモリ上に領域を確保してポインタを繋げていかないといけないんですね?
432デフォルトの名無しさん:2008/08/29(金) 13:02:57
>>431
しっ、知ったか初心者に障っちゃだめ、また屁理屈を言い出して
それでも配列じゃないって言い出すから。
433デフォルトの名無しさん:2008/08/29(金) 13:49:00
struct string{
int size;

};
434デフォルトの名無しさん:2008/08/29(金) 15:02:10
[1] 授業単元:C++
[2] 問題文(含コード&リンク): 多倍長整数の除算(100桁まで)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 出来れば明日中
[5] その他の制限: 形式としてclassは必ず使う。

よろしくお願いします。
435デフォルトの名無しさん:2008/08/29(金) 21:51:05
>>434
その手の問題は未解決になる可能性大

ここのスレの住人は文字列を逆順にしたり、並べ替えたりする
なんの役にもたたないようなプログラムばかり書いてるからw
436デフォルトの名無しさん:2008/08/29(金) 21:52:40
>>435
煽ればやってくれるとでもwww
記憶にある限り少なくともCの範囲では過去にやったよ
437デフォルトの名無しさん:2008/08/29(金) 22:00:35
たばいちょうせいすうってなに?
438デフォルトの名無しさん:2008/08/29(金) 22:03:25
>>437
ググレカス
439デフォルトの名無しさん:2008/08/29(金) 23:16:29
440419:2008/08/30(土) 02:03:26
>>421
そうですね。
>>425
部分一致でお願いいたします。
複数件あった場合は何件該当しましたという表記でお願いします。
441デフォルトの名無しさん:2008/08/30(土) 02:09:15
やっぱりこの手の問題は無理かw

前にあったとか、wwwを探せとか・・・

やっぱり、”10個の整数の和を求めるプログラムを教えて下さい”位がちょうどいいかw
442デフォルトの名無しさん:2008/08/30(土) 02:25:06
>>441
やり方じゃなくてタイプするのが面倒なだけのコードなんて、誰も興味ないだろ。
443デフォルトの名無しさん:2008/08/30(土) 02:30:50
あたかも、余裕で書けるが面倒なんで書かないといいたいようですねw
444デフォルトの名無しさん:2008/08/30(土) 02:36:57
余裕だなんて、よう言う わ
445デフォルトの名無しさん:2008/08/30(土) 02:37:44
>>443
書けるかどうかじゃなくて、手持ちの教科書に載ってるしな・・・
446デフォルトの名無しさん:2008/08/30(土) 02:39:38
>>445
んじゃ、それを丸々書けば良いだろwwww
447デフォルトの名無しさん:2008/08/30(土) 02:41:55
多倍長整数ってだけで何処までやればいいのか分からないのは俺だけ?
メモリの許す限り無限長までやればいいの?
448デフォルトの名無しさん:2008/08/30(土) 02:42:38
>>446
面白みがなくて、タイプするのが面倒。
最初から言ってるだろ?
449デフォルトの名無しさん:2008/08/30(土) 02:43:05
>>434
何スレか前にintを10進数4桁とみなして計算するようなやつを見た気がするぞ。
加算だか除算だかは覚えてないが。
速度を度外視していいんなら、単純に減算を繰り返すやつを無理矢理クラスに押し込めれば完成。

はい、やる価値無し。次。
450デフォルトの名無しさん:2008/08/30(土) 02:43:47
>>447
整数の除算って言ってるし、100桁とも書いてあるぞ?
451デフォルトの名無しさん:2008/08/30(土) 02:44:12
100桁って書いてたということに今気付いた
正直すまんかった
452デフォルトの名無しさん:2008/08/30(土) 02:44:26
>>447
適当に桁を決められるようにするとか、もちろん、それも
実行している環境が許す範囲内ということにはなるけどね。

>>448
ごちゃごちゃうるせーよ、答える気が無いなら失せろや
昼夜逆転生活の頭のイカれたひきこもり
453デフォルトの名無しさん:2008/08/30(土) 02:44:58
なんか小学生が暴れてるようだな。
あぼーんしとこうぜ。
454デフォルトの名無しさん:2008/08/30(土) 02:45:02
>>452
自己紹介乙
455デフォルトの名無しさん:2008/08/30(土) 02:50:29
>>449
なんで自分の価値観を語ってるの?w
>>1読める?読めない?聖徳(ry
456デフォルトの名無しさん:2008/08/30(土) 02:56:11
1000000000000000000/100000000000000000000とか
こういう計算をするってこと?
457デフォルトの名無しさん:2008/08/30(土) 03:02:13
宿題スレの過去ログだと多倍長整数の四則演算は4回以上解かれてるようだ
オレもさすがに二度目は面倒だ
458デフォルトの名無しさん:2008/08/30(土) 03:07:52
ttp://www5.airnet.ne.jp/tomy/cpro/longint.htm
ググったら何かあったけど?

>>453
目の前の本を書き写すことも出来ない小学生は寝ろよw
459デフォルトの名無しさん:2008/08/30(土) 03:12:04
>>452
問題文も読めないヤツが、ちゃちゃ入れてただけか・・・
460デフォルトの名無しさん:2008/08/30(土) 03:12:59
ググのは面倒ではないんだW
461デフォルトの名無しさん:2008/08/30(土) 03:16:12
やっぱこいつ、本を見ても理解できないからって
必死に自分がやらないことをアピールしてらw
お子ちゃま〜〜とっとと寝ろよ、難しい年頃の厨房w
462デフォルトの名無しさん:2008/08/30(土) 03:38:29


> あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

463デフォルトの名無しさん:2008/08/30(土) 04:41:54
>>440
>複数件あった場合は何件該当しましたという表記でお願いします。
件数だけでいいんですか?該当したレコードを選択して表示できたりしないでいいんですか?
もしそうなら、それって検索の意味が全く無いですね。
できるようにする必要があるなら該当レコードへのポインタを配列に入れて検索結果の保存を
したいんですが、配列は使ってはいけないんですよね?
配列を使ってはいけない、という制限は一体何のためにあるんですか?バグを増やすためですか?
464デフォルトの名無しさん:2008/08/30(土) 08:02:11
「自分より出来ない奴」を探して馬鹿にしたいガキが迷い込んでたみたいだな。
はやく夏休み終わればいいのに。
465デフォルトの名無しさん:2008/08/30(土) 10:19:25
>>463
多分リストとか二分木とかを使えってことじゃないかと
46647:2008/08/30(土) 10:48:06
>>48,51
>>73
>>80
皆様方ありがとうございました。
参考にさせて頂いて取り敢えずプログラム作れました。
結果も16通りでました。解説も書けたところで、
これから提出します。
約1月振りに覗いてみたら、数時間で解答が出てたので
びっくりでした。
467 :2008/08/30(土) 11:59:13
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7664.txt
[3] 環境
 [3.1] OS:Windows vista
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C言語
[4] 期限:出来れば明日まで
[5] その他の制限:学校で習う程度にライブラリを使用してくれれば有難いです。


口頭で言ったものを文章にしたので上手く伝わっていなかったらすみません。
468デフォルトの名無しさん:2008/08/30(土) 13:31:41
469 :2008/08/30(土) 14:03:27
>>468

データを追加してファイルを上書きしたあとにsyouhin_1.txtというファイルに綺麗に出力するのですが・・・
そこの部分もお願いしたいのですが。。。
470デフォルトの名無しさん:2008/08/30(土) 14:58:44
471デフォルトの名無しさん:2008/08/31(日) 12:12:47
[1] 授業単元: マルチメディア・プログラミング
[2] 問題文(含コード&リンク): Windows上で動作するアクションゲームを製作せよ
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: 指定なし
 [3.3] 言語: C++
[4] 期限:2009年4月1日
[5] その他の制限: OpenGL又はDirectXを使うこと
472 :2008/08/31(日) 14:17:14
>>470

ありがとうございました。
たすかりました。
473デフォルトの名無しさん:2008/09/01(月) 08:55:56
>>471
プログラムよりモデルデータやモーションデータのほうがキモになるから無理
474デフォルトの名無しさん:2008/09/01(月) 09:18:19
1日までってぎりぎりすぎると思ってよく見たら来年の4月か
期限長いな
475デフォルトの名無しさん:2008/09/01(月) 13:10:01
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 多倍長演算
 100桁以内の整数(10進数)を2つ入力し
 その二つの足し算引き算の結果を表示せよ。
 表示方法は4桁ごとにスペースを入れること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC++
 [3.3] 言語: C
[4] 期限: 2008年9月4日まで
入力と表示だけは出来ましたが肝心の足し算引き算
の仕方がわかりません。どなたかお願いいたします。
入力と表示だけ書いたソースを一応はっときます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7674.txt
476デフォルトの名無しさん:2008/09/01(月) 13:22:19
>>475
過去スレたどれよ
477デフォルトの名無しさん:2008/09/01(月) 16:02:49
void _plus(char* a, char* b, int minus_flg){
char* ans = (strlen(a) > strlen(b)) ? a : b;
char* ans_p = ans + ((strlen(a) > strlen(b)) ? strlen(a) : strlen(b)) - 1;
int kuriagari = 0;
for (char *a_p = a + strlen(a) - 1, *b_p = b + strlen(b) - 1; ans_p >= ans; ans_p--){
if (a_p >= a) kuriagari += (*a_p-- - 0x30);
if (b_p >= b) kuriagari += (*b_p-- - 0x30);
*ans_p = 0x30 + kuriagari % 10;
kuriagari /= 10;
}
if (minus_flg) std::cout << '-';
if (kuriagari) std::cout << kuriagari << ans << std::endl;
else std::cout << ans << std::endl;
}
478デフォルトの名無しさん:2008/09/01(月) 16:03:58
void _minus(char* a, char* b, int minus_flg){
char* ans = (strlen(a) > strlen(b)) ? a : b;
char* ans_p = ans + ((strlen(a) > strlen(b)) ? strlen(a) : strlen(b)) - 1;
int kuriagari = 0;
for (char *a_p = a + strlen(a) - 1, *b_p = b + strlen(b) - 1; ans_p >= ans; ans_p--){
if (a_p >= a) kuriagari += (*a_p-- - 0x30);
if (b_p >= b) kuriagari -= (*b_p-- - 0x30);
*ans_p = 0x30 + (kuriagari + 10) % 10;
if (kuriagari >= 0) kuriagari = 0;
else kuriagari = -1;
}
if (minus_flg) std::cout << '-';
if (!kuriagari) std::cout << ans << std::endl;
else std::cout << ans << std::endl;
}
479デフォルトの名無しさん:2008/09/01(月) 16:05:02
void plus(char* a, char* b){
if (*b == '-') minus(a, b + 1);
else if (*a == '-') minus(b, a + 1);
else _plus(a, b);
}

void minus(char* a, char* b){
if (*b == '-') plus(a, b + 1);
else if (*a == '-') _plus(a + 1, b, 1);
else if (strlen(a) > strlen(b)) _minus(a, b);
else if (strlen(a) < strlen(b)) _minus(b, a, 1);
else if (strcmp(a, b) >= 0) _minus(a, b);
else _minus(b, a, 1);
}
480デフォルトの名無しさん:2008/09/01(月) 16:46:30
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
   10進数の-10を8進数・16進数に変換するプログラムを書きなさい
   配列を使用する場合の要素数は16とする
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: 指定なし
 [3.3] 言語: C
[4] 期限:2008年9月3日
[5] その他の制限: ポインタなどは少し話題に上がった程度の習得状況です

よろしく御願い致します。
481デフォルトの名無しさん:2008/09/01(月) 16:56:19
int main(void){
char buf[16];
sprintf(buf, "%x", -10);
sprintf(buf, "%o", -10);
}
482デフォルトの名無しさん:2008/09/01(月) 17:24:29
>>481
返信、ありがとうございます。
問題の書き方が言葉足らずだったようです。

ttp://www.orchid.co.jp/computer/cschool/bin.html の
上のプログラムのような計算をし、かつ負数を取り扱えるような
ソースを書きたいのです。
483デフォルトの名無しさん:2008/09/01(月) 17:38:28

int main(void){
int a = -10;
char buf16[16];
memset(buf16, 0x00, 16);
for (int i = 0; i < 15; i++){
buf16[14 - i] = "0123456789abcdef"[a & 0xF];
a >>= 4;
}

a = -10;
char buf8[16];
memset(buf8, 0x00, 16);
for (int i = 0; i < 15; i++){
buf8[14 - i] = "01234567"[a & 0x7];
a >>= 3;
}
}
484ぱそこん:2008/09/01(月) 18:16:42
1授業単元;C言語
2問題文;抽選プログラム(定員、募集人数をキーボードから入力し、乱数を発生させて数値の重複のないように定員分のランダムな数値を求める。
そして、その発生した数値を昇順と、発生した順にそれぞれ出力する。)

3環境
4OS:widows xp またはLinuxでもok
5期限:できれば明日中(本当に急いでます!)
6その他;flg、do while文は必ず用いる。
     C言語かなりの初心者です。 
485デフォルトの名無しさん:2008/09/01(月) 20:33:27
問題文:配列bufferの文字列の中にあるカンマを水平タブに変換して、配列strafterに
格納し表示させよ。
OS:Linux Fedora8
コンパイラ:gcc(バージョン失念。Fedora8のデフォルトのものです。
コメント:エラー吐きまくりで動作しません。助けて下さいorz 
以下、現状のソース
-------------------
#include<stdio.h>
#include<string.h>
int main(void){
char buffer[512]="2000/01/01,9:00:00,AAA BBB CCC";
char repchar[1];
int i;
int buflen;
char strafter[512];
strafter[0]='\0';
repchar[0]='\t';
buflen = strlen(buffer);
printf("文字数 = %d\n",buflen);
printf("Before : %s\n",buffer);

for(i = 0; i < buflen ; i++){
i = i-1;
if(*(buffer+i) == ','){
strcat(strafter,repchar);
}
else{
strcat(strafter,(buffer +i));
}
}
printf("%s\n",strafter);
}
486 ◆O/vs7BIw1Y :2008/09/01(月) 20:50:30
[1] 授業単元:プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7679.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008/09/15
[5] その他の制限: 標準ライブラリのみ使用

よろしくおねがいします。
487デフォルトの名無しさん:2008/09/01(月) 20:58:08
>>485
repcharが文字列でないからじゃないかな
strcat(strafter,repchar);


面倒なのでこれでいいだろ
#include <stdio.h>

int
main()
{
char buffer[512] = "2000/01/01,9:00:00,AAA BBB CCC";
char strafter[sizeof(buffer)] = {0};

{ int i = 0;
while ( buffer[i] != '\0' ) {
strafter[i] = ( buffer[i] == ',' ) ? '\t' : buffer[i];
++i;
}}

printf("%s\n", strafter);

return 0;
}
488485:2008/09/01(月) 21:43:21
>>487さん

ありがとうございます。
こんなやり方でいけるんですね。
C言語本格的に初めて5日目くらいですが,頑張らねばorz
489 :2008/09/01(月) 22:37:27
467のものです。
>>468
>>470
でやってもらったのですが、構造体を使えとさらに指示が出まして…

構造体を使ってやっていただきたいです。
ファイル処理はバイナリではなく、w,r,a,(a+)などでお願いします。

490抽選プログラム:2008/09/01(月) 22:48:16
[1]授業単元;C言語
[2]問題文;抽選プログラム(定員、募集人数をキーボードから入力し、乱数を発生させて数値の重複のないように定員分のランダムな数値を求める。
そして、その発生した数値を昇順と、発生した順にそれぞれ出力する。)

[3]環境:gcc 
[4]OS:widows xp またはLinuxでもok
[5]期限:できれば明日中(本当に急いでます!)
[6]その他;flg、do while文は必ず用いる。
     C言語かなりの初心者です。 
491デフォルトの名無しさん:2008/09/01(月) 23:11:11
「ビンゴ プログラム C言語」くらいでググレ
492デフォルトの名無しさん:2008/09/01(月) 23:42:48
493抽選プログラム:2008/09/02(火) 00:14:50
492さんありがとうございます!!
よかったらプログラムに書いてあるコメントを日本語で書いていただけないでしょうか汗
英語分からないんです涙
494デフォルトの名無しさん:2008/09/02(火) 00:22:02
辞書引けよ・・・
495ロベ:2008/09/02(火) 09:33:09
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
インテルHEX形式をモトローラSレコード形式に変換するプログラムを作成しなさい
〜条件〜
・通常の形式はS1レコードに変換する
・セグメントアドレスがあった場合はS2レコードに変換する
・拡張リニアアドレスがあった場合はS3レコードに変換する
・途中でセグメント/リニアアドレスが出てくる場合でも、最初からS2/S3レコードで出力すること(S1〜S3の混合はNG)
・セグメント/リニアアドレス両方あった場合は、S3レコードとする
・スタートアドレスは考慮しなくてもよいものとする
・S0(スタートレコード)は出力しなくてもかまわない
・S4〜S6は今回考慮しなくてもよい
・プログラム中でポインタを必ず使用すること
・ソース内にはコメントを表記すること
[3] 環境
 [3.1] OS:Windows
 [3.2] borland
 [3.3] 言語:C言語
[4] 期限:9月4日0:00まで
[5] その他の制限:特になし

よろしくお願いします
496デフォルトの名無しさん:2008/09/02(火) 10:02:19
あまりに難易度が高くてまったく分からない!
497デフォルトの名無しさん:2008/09/02(火) 10:37:37
出てくる単語が分からないだけじゃない?
別に難易度高くないから調べてみたら?勉強になるし。
498デフォルトの名無しさん:2008/09/02(火) 11:57:01
[1] 授業単元: 応用数学
[2] 問題文(含コード&リンク): 入力された関数を微分するプログラムを作れ
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年9月10日まで

---実行例(<>内は入力)--
enter equation> <3x^4 + sin(x)^2>
derivative is
12x^3 + sin(2x)
------------------

高次項・三角関数・合成関数に対応させるのが条件です
499デフォルトの名無しさん:2008/09/02(火) 21:32:48
[1] テキストからファイル出力でログインの認証システムを作る課題です。
ログイン後はユーザの新規登録・削除・変更、一覧と紹介(絞込み)が可能なもの。
@ユーザID/パスワード入力
Aユーザテーブルチェック・エラー処理・メニュー処理へ
【出力画面】
Uidを入力してください
○○
Pwdを入力してください
○○

Uid: ○○
Pwd: ○○
担当者: ○○
会社コード: ○○
アクセス区分: ○○
e-mail: ○○

1.照会(絞込み) 2.一覧 3.新規、変更、削除 4.ログアウト

終了しますか? (y,n)
【テキストの内容】
会社コード 担当者   ユーザID アクセス区分 e-mail
001   山田 太郎 u001   1    [email protected]
002   山田 花子 u002   2    [email protected]
003   田中 次郎 u003   3    [email protected]
というようなプログラムにします。
頑張りましたがどうしても無理でした。。
申し訳ないですが、どうかよろしくお願いしますm(__)m
 [2.1] OS:WindowsXp
 [2.2] Visial C++
 [2.3] 言語: C++
[3] 期限:2008年9月3日
500デフォルトの名無しさん:2008/09/03(水) 00:23:04
>499

ひまなので

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace baka1
{
class Program
{
static string[,] users = {
{"uid1", "pwd1","諡?蠖楢?蜷?","莨夂、セ繧ウ繝シ繝牙錐","繧「繧ッ繧サ繧ケ蛹コ蛻?蜷?","繧√k縺ゅ←"},
{"uid1", "pwd1","諡?蠖楢?蜷?","莨夂、セ繧ウ繝シ繝牙錐","繧「繧ッ繧サ繧ケ蛹コ蛻?蜷?","繧√k縺ゅ←"},
};

static void Main(string[] args)
{
for (int i = 0; i < users.Length; i++)
{
if (users[i, 0] == args[0] && users[i, 1] == args[1])
{
Console.WriteLine("user驟榊?励?ョi逡ェ逶ョ繧偵?励Μ繝ウ繝?");
}
}
}
}
}

501デフォルトの名無しさん:2008/09/03(水) 00:24:20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace baka1
{
class Program
{
static string[,] users = {
{"uid1", "pwd1","担当者名","会社コード名","アクセス区分名","めるあど"},
{"uid1", "pwd1","担当者名","会社コード名","アクセス区分名","めるあど"},
};

static void Main(string[] args)
{
for (int i = 0; i < users.Length; i++)
{
if (users[i, 0] == args[0] && users[i, 1] == args[1])
{
Console.WriteLine("user配列のi番目をプリント");
}
}
}
}
}
502デフォルトの名無しさん:2008/09/03(水) 00:37:15
>>500>>501
コラw
503デフォルトの名無しさん:2008/09/03(水) 09:51:54
そのままコピペするとUTF-8になっちゃうことあるよなw
504デフォルトの名無しさん:2008/09/03(水) 17:34:53
ここってプログラムに関する質問じゃなくて、プログラムを作ってもらうのってありですか?
505デフォルトの名無しさん:2008/09/03(水) 17:38:27
>>504
高いよ
506デフォルトの名無しさん:2008/09/03(水) 17:43:19
宿題スレで聞いてるってことは宿題か?
このスレずっとさかのぼってみてみるといい。
507デフォルトの名無しさん:2008/09/03(水) 17:56:44
誰か>>499を答えて下さる方いませんでしょうか?
他力本願で情けないのですが今の僕のレベルではお手上げ状態です(>_<)
508デフォルトの名無しさん:2008/09/03(水) 18:42:40
お手上げなら正直に単位落とせばいいのに…
509デフォルトの名無しさん:2008/09/03(水) 19:37:34
>>508
それはできません(>_<)どうか本当にお願いします(>_<)
510デフォルトの名無しさん:2008/09/03(水) 20:12:17
>>509
マジレスすると、その機能を無料で作ってくださいとかありえない。
511デフォルトの名無しさん:2008/09/03(水) 20:28:16
>>509
そうですか…。自力で作るしか方法は無いのですね。
わかりました、ご指摘いただいてありがとうございましたm(__)m
512デフォルトの名無しさん:2008/09/03(水) 20:33:20
.
513デフォルトの名無しさん:2008/09/03(水) 22:46:57
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7683.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Borland
 [3.3] 言語:C言語
[4] 期限:日付変更辺りまで

どうか宜しくお願いします。
514デフォルトの名無しさん:2008/09/03(水) 23:02:30
>>513
#include <stdio.h>
#include <math.h>

int main(void)
{
FILE *fp_in, *fp_out;
char *filename_in="louise.dat", *filename_out="site.dat";
int x;

if((fp_in=fopen(filename_in, "r"))==NULL) return 1;
if((fp_out=fopen(filename_out, "w"))==NULL) return 2;
while(fscanf(fp_in, "%d", &x)==1)
{
fprintf(fp_out, "%f\n", sqrt(x));
}
fclose(fp_in);
fclose(fp_out);

return 0;
}
515デフォルトの名無しさん:2008/09/03(水) 23:27:08
>>514
回答ありがとうございます。

ですが()を2重にしたり、NULLやreturn 0;以外のreturnの使い方を習っておりません・・・。
他にどんな書き方があるか聞いても良いでしょうか?
516デフォルトの名無しさん:2008/09/03(水) 23:32:39
>>515
if((fp_in=fopen(filename_in, "r"))==NULL) return 1;

fp_in=fopen(filename_in, "r");
if(fp_in==NULL) return 0;
517デフォルトの名無しさん:2008/09/03(水) 23:44:50
>>516
ほう・・・カッコを外すと1が0になるのか・・・
518デフォルトの名無しさん:2008/09/03(水) 23:52:07
return 0; 以外使えないなら仕方ない
519デフォルトの名無しさん:2008/09/04(木) 01:48:04
>>517
揚げ足とることに必死で515をちゃんと読めてないw
520デフォルトの名無しさん:2008/09/04(木) 07:47:02
if(fp_in==NULL) return 0;

if(!fp_in) return 0;
521デフォルトの名無しさん:2008/09/04(木) 09:52:49
>>520
なぜわざわざ可読性を下げる?
522デフォルトの名無しさん:2008/09/04(木) 10:00:03
加毒性いうほどのもんじゃない
523デフォルトの名無しさん:2008/09/04(木) 10:01:27
522は大規模な開発したことないんだな
524デフォルトの名無しさん:2008/09/04(木) 11:50:53
慣用句とか知ってる?
525デフォルトの名無しさん:2008/09/04(木) 12:05:34
それで可読性下がるなんて経験値低すぎる。
うちのコーディング規約でもif (!hoge)だし。
526デフォルトの名無しさん:2008/09/04(木) 12:17:11
仕事なんかでは統一されていれば問題無いと思うが、
このスレは経験値低すぎる人が質問するスレだから不適切だな
527520:2008/09/04(木) 12:18:41
>>521
>>515でNULLの使い方を習ってないと書いてたのでこうしました
528デフォルトの名無しさん:2008/09/04(木) 12:22:51
次は!を習ってないと言われるわけですね
529デフォルトの名無しさん:2008/09/04(木) 15:53:06
もう0で良いよ0で
530デフォルトの名無しさん:2008/09/04(木) 17:38:15
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):URLの“第12回目”の中にある一番下(課題1)の
  問題。 URL→http://al.cm.is.nagoya-u.ac.jp/~takao/toho/2008/
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 9月5日16時まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 関数とかは習っていません。

どうか宜しくお願いします(><)
531デフォルトの名無しさん:2008/09/04(木) 17:42:39
>>530
面倒でも問題はテキストに起こそうぜ。
君の大学がばれるぞ。
で、JAVA???
532530:2008/09/04(木) 18:00:18
>>531
分かりました。
533530:2008/09/04(木) 18:16:59
連続スミマセン。
>>531
Javaです。
534デフォルトの名無しさん:2008/09/04(木) 18:24:00
>>533
スレタイ読んで来ような。

ほしいのはこっちだろ?
http://pc11.2ch.net/test/read.cgi/tech/1212085079/
535533:2008/09/04(木) 18:37:51
>>534
すみません。わざわざ誘導してもらって…失礼します
536デフォルトの名無しさん:2008/09/04(木) 19:49:48
旧帝大でこれかよ…
537デフォルトの名無しさん:2008/09/04(木) 23:32:13
七帝の中でも名古屋はおみそみたいなもんだからw
538デフォルトの名無しさん:2008/09/05(金) 01:06:40
こんなアフォをみると日本の将来が本当に不安になるな。
教授に怒られることもできない。匿名の2CHでこそっと聞いて。ちなみにJava板で解答げっとしてたよ、こいつ
539デフォルトの名無しさん:2008/09/05(金) 01:08:06
何騙されてんだ、そこはFランだ
540504:2008/09/05(金) 01:16:42
>>506
亀レスすみません

宿題なんですけど、問題を解くのではなくてプログラムを作る宿題なんです…

ちょっと1から読んで来ます(;´Д`)
541デフォルトの名無しさん:2008/09/05(金) 04:49:32
3問ありますがよろしくお願いします。

[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7688.txt


[3] 環境
 [3.1] OS: (Windows vista)
 [3.2] コンパイラ名とバージョン: (Visual Studio 2005)
 [3.3] 言語: C言語
[4] 期限: (来週まで)
[5] その他の制限: (ポインタの最初の段階まで習っています)
542デフォルトの名無しさん:2008/09/05(金) 09:50:32
>>541 問1 こんな感じか?問2の意図がよくわからないが

#include <stdio.h>

void copy(char *from, char *to);

int main()
{
char a[8] = "America";
char b[8];

copy(a,b);

printf("a:%s\n",a);
printf("b:%s\n",b);

return 0;
}

void copy(char *from, char *to)
{
for(int i=0;*(from+i) != NULL;i++)
*(to+i) = *(from+i);
}
543デフォルトの名無しさん:2008/09/05(金) 09:51:50
>>541
問1
#include <stdio.h>
int main(void)
{
char str1[7]="America";
char str2[7];
char *p1,*p2;
p1=str1;
p2=str2;
while(*p1)
*p2++=*p1++;
printf(str2);
return 0;
}
544デフォルトの名無しさん:2008/09/05(金) 09:53:01
>>541
問2
#include <stdio.h>

int main(void)
{
char str[5]="abcde";
char *p;

p=str;

while(*p)
putchar(*p++);

return 0;
}
545デフォルトの名無しさん:2008/09/05(金) 09:54:17
>>541
問3
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[6]="France";
char str2[6];
char *p1,*p2;
int i;
p1=str1;
p2=str2;
/* p1を'\0'の位置まで移動させる */
while(*p1)
p1++;
/* 今'\0'にいるため1つ前の'e'まで戻す */
p1--;

i=strlen(str1);
for(;i;i--)
*p2++ = *p1--;
printf(str2);
return 0;
}
546543-545:2008/09/05(金) 10:02:47
'\0'のこと考えるの忘れてたぜ orz
547デフォルトの名無しさん:2008/09/05(金) 10:14:30
>>546
よくあることだぜ。
むしろ、普通は数字直接入力なんてしないからな。
548デフォルトの名無しさん:2008/09/05(金) 16:36:09
>>542
>>543
>>544
>>545

助かります♪
ありがとうございました。
549デフォルトの名無しさん:2008/09/08(月) 13:10:28
[1] 授業単元:確率・統計
[2] 問題文(含コード&リンク):
AさんとBさんが順番にコインを投げる
ただし、AさんとBさんはそれぞれp, qの確率で表を出すことができるとする。
ここで、Aさんならm回、Bさんならn回先に表を出したら勝ちとする勝負をした場合
Aさんが勝つ確率を求める関数を作成しなさい。
ただし関数は以下のプロトタイプ宣言に従うこと。
double odds(double p, double q, int m, int n);
[3] 環境
 [3.1] OS: Windows + Cygwin
 [3.2] コンパイラ名とバージョン: gcc 3.4.4
 [3.3] 言語: C
[4] 期限: 2008年09月08日11:59まで
[5] その他の制限:特にありませんが、アルゴリズムや考え方についての解説があると助かります。
よろしくお願いします。
550デフォルトの名無しさん:2008/09/08(月) 14:52:44
>>549
数学の問題じゃねーか
数式よろ
551デフォルトの名無しさん:2008/09/08(月) 15:27:46
#include <iostream>
#include <stdexception>

double odds(double p, double q, int m, int n) {
// Aが表を m 回出すまでの確率
double a = ( double )m / p;
// Bが表を n 回出すまでの確率
double b = ( double )n / q;
// AのBに対する勝率
// ただし、AはBよりも1回分余計に振るチャンスがある
return a / b + 1 / a; }

int main(){
using namespace std;
double p( 0 ), q( 0 );
int m( 0 ), n( 0 );
cout << "入力が必要です、例えばAとBが表を出す確率:";
cin >> p, q;
if ( p =< 0.0 || q =< 0.0 || p > 1.0 || q > 1.0 ) { throw domain_error( "ちょ、おまw" ); }
cout << "おまえが入力せよ、つまりAとBが表を出す回数:";
cin >> m, n;
if ( m =< 0 || n =< 0 ) { throw domain_error( "ちょ、おまw" ); }
cout << "AのBに対する勝率は・・・" << odds( m, n ) << endl;
return false; }
552デフォルトの名無しさん:2008/09/08(月) 17:33:15
>>551
ちょ、おまw
553デフォルトの名無しさん:2008/09/08(月) 18:04:00
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7697.zip
[3] 環境
 [3.1] OS: WinXP SP3/Vista SP1
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 明日9日 午前6時頃まで
[5] その他の制限:
課題番号の大きい順、6>5>4>3に優先して希望

出かけてる間に母親が親戚の子に勝手に俺のラップトップを貸した上、
明日の登校日に提出する課題の入ったUSBを吹っ飛ばされました…orz
復元作業とはいえ間に合うか不安なのでお願いします
554デフォルトの名無しさん:2008/09/08(月) 18:45:22
まさに丸投げ
555デフォルトの名無しさん:2008/09/08(月) 20:45:43
ハードディスクにないの?
556デフォルトの名無しさん:2008/09/08(月) 20:51:10
>>553
やらせようとしている内容は察しがつくが
問題文が気持ち悪いな

表現のゆらぎが尋常じゃない。統一しろよと
557デフォルトの名無しさん:2008/09/08(月) 20:52:58
>>551
脳が溶けた
558デフォルトの名無しさん:2008/09/08(月) 21:35:46
>>553
親戚の子も母も許してやれよ?
その寛大な気持ちが、将来のお前の資産になる。
あぁ、母親はやらせくれるだろうし、親戚の子はお前を大切に育ててくれるのだから。
559デフォルトの名無しさん:2008/09/08(月) 21:36:38
>>558
イミフ
560デフォルトの名無しさん:2008/09/08(月) 21:41:33
IMF

読み:イミフ
561553:2008/09/08(月) 22:11:40
>>554
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7699.txt
1と2を終わらせて3に入ったものの、この有様で…。
USB吹っ飛ばされたショックで焦りすぎました、夜風にあたって頭冷やしてきます。

>>555
USB内で完結させてしまったのが敗因でした。
やり直しから大人しくHDDで作業→USBでコピー、の形を取ることにしました。
562デフォルトの名無しさん:2008/09/08(月) 22:21:00
>>561
頑張ってコメントを書いているようだが内容が的外れ
最初は誰でもそんなもんだろうけど
563デフォルトの名無しさん:2008/09/08(月) 22:23:57
そういえば、コメントってどういうことをどういう風に核のかっていう教則本みたいなのはみたことないな。
一応、先頭にプログラムの目的と製作日付、製作者の魔羅サイズは記入するようにしているけど・・・
564デフォルトの名無しさん:2008/09/08(月) 22:30:24
>>563
標準時?最大時?現在時?
565デフォルトの名無しさん:2008/09/08(月) 22:49:25
>>561
・ループから抜けるにはbreakを使うとよい
・一致文字列チェックでp[j]をみてるが、高頻度で見てはいけないところを
 みるようになっている。それを防ぐために、配列pの各要素をNULLで初期化
 しておいて、NULLじゃないところだけ一致チェックをするとよい
・一致した文字に対応する文字列件数を加算 の処理がcnt[n]++;
 となっているが、cnt[j]++;では?
566デフォルトの名無しさん:2008/09/08(月) 22:51:11
そんなことなかった。nで数チェックしてるのね。
みてはいけないとこはみてなさそうだった。ごめん。
567デフォルトの名無しさん:2008/09/08(月) 22:57:21
printで状況を見る努力もしてるし、コメントもあながち的はずれではないし。
いい感じと思うけどなぁ。

丸投げして自分の考えと全く異なるコードを提出するより
可能ならばもう一回作って提出できる方がいいなと思う。
その途中で過去の自分のコードを改善できることもあるし。
別に丸投げが悪いといってるわけではなくて、時間があれば
そういうこと(作り直し)をしてみたらいいんじゃない?程度。
568デフォルトの名無しさん:2008/09/08(月) 22:57:45
>>561
データ復旧させたほうが早いかも
がんばれ!
569デフォルトの名無しさん:2008/09/08(月) 23:59:34
>>549
double odds(double p, double q, int m, int n)
{
if(m==0) return 1.0;
if(n==0) return 0.0;
return ( p*q*odds(p,q,m-1,n-1) + p*(1-q)*odds(p,q,m-1,n) + (1-p)*q*odds(p,q,m,n-1) ) / (p+q-p*q);
}
//
// F(m,n) = p*q*F(m-1,n-1) +p*(1-q)*F(m-1,n) +(1-p)*q*F(m-1,n) +(1-p)*(1-q)*F(m,n)
// 上の式を、F(m,n) について解く
//
570デフォルトの名無しさん:2008/09/09(火) 01:39:52
>>553
課題6だけ。
出力と、main()のループを抜けるロジックがアレだけど、
眠いんでそっちで調整して。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7700.zip
571デフォルトの名無しさん:2008/09/09(火) 02:34:31
[1] 授業単元:ファイル出入力
[2] 問題文(含コード&リンク):
複数の人の名前と体重、身長を質問してローレル指数を計算して
「名前、体重、身長、ローレル指数、やせすぎ(または丁度良いなど)」
をファイルに保存しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限: 2008/09/9(am.7)
[5] その他の制限:特になし
自分でやってみたのですが分かりません。急ですみませんがよろしくお願いします。

#include <stdio.h>
int main(void)
{
int p,n,w,h,r;
FILE *fp1;
fp1 = fopen("c:\\file.dat","w");
printf("人数を入力してください。:");
scanf("%d",&p);
572デフォルトの名無しさん:2008/09/09(火) 02:36:07
for(;p>0;p--){
printf("名前を入力してください。:");
scanf("%s",&n);
fprintf(fp1,"%d\n",n);
printf("体重を入力してください。(kg):");
scanf("%d",&w);
fprintf(fp1,"%d\n",w);
printf("身長を入力してください。(cm):");
scanf("%d",&h);
fprintf(fp1,"%d\n",h);
r=w/(h*h*h)*1.0E7;
fprintf(fp1,"%d\n",r);
if (r<100){
printf("やせすぎです。\n");
fprintf(fp1,"やせすぎ\n"); }
else if(r>=100 && r<115){
printf("やせている。\n");
fprintf(fp1,"やせている\n"); }
else if(r>=115 && r<145){
printf("丁度良いです。\n");
fprintf(fp1,"丁度良い\n"); }
else if(r>=145 && r<160){
printf("太っています。\n");
fprintf(fp1,"太っている\n"); }
else {
printf("太りすぎです。\n");
fprintf(fp1,"太りすぎ\n"); }
}
fclose(fp1);
return 0;
}
573デフォルトの名無しさん:2008/09/09(火) 06:19:46
>>572
何が分からんのか分からんのだが。

> printf("名前を入力してください。:");
> scanf("%s",&n);
> fprintf(fp1,"%d\n",n);
↑の fprintf(fp1,"%d\n",n); は fprintf(fp1, "%s\n",n); だべ。
後、名前って文字列だよな?なんで int 型の変数に入れようとしてんの?だったら例えば

char s[64];
scanf("%s", s);
fprintf(fp1, "%d\n", s);

こうだな。
後、
> r=w/(h*h*h)*1.0E7;
もおかしい。r は float や double で定義せんと小数点使えん。
後、整数型を直接割り算しても0にしかならん。

ならば
身長、体重も小数点扱える型で定義するか、キャストしてから割り算せい。
574デフォルトの名無しさん:2008/09/09(火) 06:29:06
まとめ

> int p,n,w,h,r;
char n[64];
int p;
float n, w, h, r;

> scanf("%s",&n);
> fprintf(fp1,"%d\n",n);
scanf("%s", n);
fprintf(fp1, "%s\n", n);

> scanf("%d", &w);
> fprintf(fp1, "%d\n", w);
scanf("%f",&w);
fprintf(fp1, "%f\n", w);

> scanf("%d",&h);
> fprintf(fp1,"%d\n",h);
scanf("%f", &h);
fprintf(fp1, "%f\n", h);

> r=w/(h*h*h)*1.0E7;
> fprintf(fp1,"%d\n",r);
r = w / (h * h * h ) * 1000000;
fprintf(fp1, "%f\n", r);

とりあえずこれで。
575デフォルトの名無しさん:2008/09/09(火) 06:47:11
訂正
 > 後、整数型を直接割り算しても0にしかならん。
整数の部分しか持って来ないってことね。
int i = 3 / 2;
ってやったら、i は 1 になる。

後、fprintf で小数点以下を書き込みたくないのなら、
 > fprintf(fp1, "%f\n", w);
fprintf(fp1, "%0.0f\n", w);
にすると小数点以下を無くして書き込む。
576デフォルトの名無しさん:2008/09/09(火) 14:00:24
いいかげん>>569に誰か突っ込めよ
577デフォルトの名無しさん:2008/09/09(火) 15:04:48
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7703.zip
[3] 環境
 [3.1] Windows XP
 [3.2] gcc
 [3.3] C
[4] 期限:2008/9/12
[5] xlsファイルでシートごとに問題が分かれています。よろしくお願いします。
578デフォルトの名無しさん:2008/09/09(火) 16:23:52
#include <stdio.h>
unsigned str_length(const char str[])
{
unsigned len = 0;
while (str[len])
len++;
return (len);
}
void str_rev(const char str[]){
unsigned i = str_length(str);
while(i>0)
printf("%c",str[--i]);
}
int main(void)
{
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
printf("入力した文字列は%sです。\n長さは%uです。\n", str, str_length(str));
printf("文字列を逆から表示→");
str_rev(str);
printf("\n");
return (0);
}

ポインタを使って文字列を逆から表示させる課題があるのですが、
上のプログラムのどこを変更すればポインタを使ったプログラムになるでしょうか?
よろしくお願いします。
579デフォルトの名無しさん:2008/09/09(火) 16:38:12
>>578
>>541
過去スレ全部とは言わない。
せめてこのスレ位読んできて。
580デフォルトの名無しさん:2008/09/09(火) 19:23:13
>>576
ツッコミの手本を見せてください><
581デフォルトの名無しさん:2008/09/09(火) 22:41:15
>>577
丸投げかよ
582デフォルトの名無しさん:2008/09/09(火) 23:17:10
>>577
問題1
#include <stdio.h>
#define CONST_NUM ( -2007110825 ) /*( 314159265 )*/
const int number = CONST_NUM;
char str_decimal[16];
char str_hex[16];
char str_octal[16];
char str_binary[40];
const char * bin_table[] = {
"0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111",
};
int main()
{
int i = 0;
int l = 0;
sprintf( str_decimal, "%d", number );
sprintf( str_hex, "0x%x", number );
sprintf( str_octal, "0%o", number );
l = sprintf( str_binary, "0b" );
for ( i = 28; i >= 0; i -= 4 ) {
l += sprintf( str_binary + l, "%s", bin_table[( number >> i ) & 0x0f] );
}
printf( "decimal:%s\n", str_decimal );
printf( " hex:%s\n", str_hex );
printf( " octal:%s\n", str_octal );
printf( " binary:%s\n", str_binary );
}
583デフォルトの名無しさん:2008/09/09(火) 23:35:36
584583:2008/09/09(火) 23:40:08
微妙に読み間違っていた。
・typedefを消去
・string1 s1を消去
・strign2 s2を消去
・s1,s2をそれぞれstring1、string2に置換
585デフォルトの名無しさん:2008/09/10(水) 01:06:41
586デフォルトの名無しさん:2008/09/10(水) 16:51:46
すいません。またお願いします。

[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7708.txt


[3] 環境
 [3.1] OS: (Windows vista)
 [3.2] コンパイラ名とバージョン: (Visual Studio 2005)
 [3.3] 言語: C言語
[4] 期限: (来週まで)
[5] その他の制限: (ポインタの最初の段階まで習っています)
587デフォルトの名無しさん:2008/09/10(水) 17:26:11
>>586
>>542以下じゃないのか?
588デフォルトの名無しさん:2008/09/10(水) 18:50:24
>>586
問1

#include <stdio.h>
#include <string.h>
int main(void)
{
char *p="Japan";
int i;
i=strlen(p);
i-=1;
for(;i>=0;i--)
putchar(*(p+i));
return 0;
}
589デフォルトの名無しさん:2008/09/10(水) 18:51:30
>>586
問2
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p="pointer test program";
char save[256];
strcpy(save,p);
printf(save);
return 0;
}
590デフォルトの名無しさん:2008/09/10(水) 18:52:16
>>586
問3
#include <stdio.h>
int main(void)
{
char *day_p[ ]={
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Fraiday",
"Saturday",
NULL
};
int i;
for(i=0;day_p[i];i++)
printf("%s\n",day_p[i]);
return 0;
}
591デフォルトの名無しさん:2008/09/10(水) 18:54:14
>>586
問4
#include <stdio.h>
int main(void)
{
char *day_p[ ]={
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Fraiday",
"Saturday",
NULL
};
int i;
for(i=0; *(day_p+i); i++)
printf("%s\n",*(day_p+i));
return 0;
}
592デフォルトの名無しさん:2008/09/10(水) 23:33:43
>>586
問4別解
#include <stdio.h>
int main(void)
{
char *day_p[ ]={
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Fraiday",
"Saturday",
NULL
};
char **p;

for (p=day_p; *p; p++) {
printf("%s\n", *p);
}

return 0;
}
593デフォルトの名無しさん:2008/09/10(水) 23:35:29
>>589
- printf(save);
+ printf("%s", save);
594デフォルトの名無しさん:2008/09/10(水) 23:37:13
>>578
- unsigned str_length(const char str[])
+ unsigned str_length(const char *str)

- void str_rev(const char str[]){
+ void str_rev(const char *str){
595デフォルトの名無しさん:2008/09/11(木) 05:17:31
[1] 授業単元:C/C++(最小ファイルサイズを目指せ!!)
[2] 問題文(含コード):
int型のsin,cosテーブルを"sincos.cpp"というファイル名で出力
コード:main.c<とりあえずココまで短くなりました>
float sin();f;i;main(){for(f=fopen("sincos.cpp","w");i<450;i++)fprintf(f,
"%c%6d,%s",i%10?32:9,(int)(sin(i*3.141592653589793/180)*65536),i%10<9?"":
"\n");fclose(f);}
これより短くせよ。但し、出力結果は同じになるように。
[3] 環境
 [3.1] Windows
 [3.2] VisualStudio2005
 [3.3] C/C++どちらでも可
※スレ違いだったらゴメンなさい
596デフォルトの名無しさん:2008/09/11(木) 05:36:16
7行スレでやるといいよ
597デフォルトの名無しさん:2008/09/11(木) 12:59:59
とりあえずfcloseいらなくね?
598y:2008/09/11(木) 14:51:28
文字列(数字のみ)で構成されているファイルを読み込んで
文字列を数値に変換して並び替えを行うプログラムを作っているんですけど
文字列を数値に変換をして並び替えを行った結果、
先頭の数字0がなくなった状態で並び替えがされていました。
先頭の数字0がなくならない状態で並び替えを行う方法を教えてください。
お願いします。

例)
先頭の数字0がなくならない並び替え

並び替え前    並び替え後  
00159    0101
130   →  130 
0101     00159

先頭数字0がなくなった並び替え

並び替え前    並び替え後
00159    101
130   →  130 
0101     159


599デフォルトの名無しさん:2008/09/11(木) 15:04:37
>>598
文字列と数値の構造体にして数値でソートして文字列を表示
600y:2008/09/11(木) 15:19:06
文字列と数値の構造体にして数値でソートして文字列を表示
するとはなんですか?
プログラムにするとどうなりますか?
教えてください。
601デフォルトの名無しさん:2008/09/11(木) 15:25:52
C言語なら俺に聞け(入門編)で詳しく解説されている。
602デフォルトの名無しさん:2008/09/11(木) 15:30:30
>>600
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char moji[32];
int suu;
} NUM;
int compare(const NUM *a, const NUM *b)
{
return a->suu - b->suu;
}
int main(void)
{
NUM num[3] = {"00159", 0, "130", 0, "0101", 0};
int i;
for (i = 0; i < 3; i++) {
num[i].suu = atoi(num[i].moji);
}
qsort(num, 3, sizeof(NUM), (int (*)(const void*, const void*))compare);
for (i = 0; i < 3; i++) {
printf("num%d=%s\n", i, num[i].moji);
}
return 0;
}
603デフォルトの名無しさん:2008/09/11(木) 19:55:20
>>595
う〜ん、直値は見なかったことにしよう
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7710.c
604デフォルトの名無しさん:2008/09/12(金) 11:54:51
605604:2008/09/12(金) 12:02:29
fcloseすんの忘れてた。
あと、data.txtの内容は整数限定で
10桁以上の数値に関しては無しの方向で
606デフォルトの名無しさん:2008/09/12(金) 12:10:08
>>604
ポインタの配列で出来るのに何でわざわざ構造体にしてんの?(numdataとか要らないし)
strotol(atoi)で出来るのに何でわざわざToNumDataとか作ってんの?
なんでそんなど素人の分際で人に教えようとしてんの?
607604:2008/09/12(金) 12:12:55
>>606
文句言うならお前が手本を示せ。
ソースも書かずに何言ってるんだか。
608デフォルトの名無しさん:2008/09/12(金) 12:14:52
まあでもこのくらいじゃないと、どっかで手本丸写ししたってバレちゃうかもしれんし。
609604:2008/09/12(金) 12:16:23
607は俺じゃないよ
610606:2008/09/12(金) 12:27:54
ほれ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7714.txt

○2度読みする必要なし。
○構造体もイラネ。
○ToNumDataってatoiでいいじゃん。
○malloc+strcpyってstrdupでいいじゃん。
○比較関数はローカルなんだからstaticつけろよ。
○比較関数の引数宣言が変だったから直しといた。
○関数はトップダウン順に(main→cmp)書いた方が見やすい。プロトタイプ宣言を惜しむな。
○こういうツールはホントはstdinから読むべきなんだけど、data.txtから読みたいみたいだから尊重しといたぞw
611604:2008/09/12(金) 13:46:18
>>610
strdupって知りませんでした
staticも付けるべきでした
その他何かと勉強になりました
猛省します
612デフォルトの名無しさん:2008/09/12(金) 15:17:18
よーし>>610にイチャモンを付けまくるぞー

strdupはC言語標準の関数じゃないし。
いちいちC言語の規格を無視する理由になる程便利でもないし。
使わないほうがよくね?

あとreallocの結果がNULLの時にメモリリークしてるぜ。

printf(buffer[i])は文字列の中に%があると
破綻するからデータに%しかなくても使うのはよくないprintf("%s",...)にしなさい。

それに比較関数のポインタをキャストするのはよくない。
関数ポインタのキャストは動作するか保障されてない。
素直に比較関数の中でvoid*をキャストしろ。

比較関数で減算使ってるけど、
値がでかいとオーバーフローとかアンダーフローする可能性がある。
素直に比較しろ。
613デフォルトの名無しさん:2008/09/12(金) 15:47:46
1] 授業単元: 情報
[2] 問題文(含コード&リンク): 2点の座標A(a,b),B(c,d)を与えたとき
1.ABの距離を求めよ
2. ABを通る直線の方程式を求めよ
3. 2で求めた方程式がx=1,y=1,y=xと交点を持つかどうか調べ持つならその交点の座標を
持たないならNoと返すプログラムを作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C
[4] 期限: 2008年9月12日23時59分
[5] その他の制限:特にないです。

よろしくお願いします。
614デフォルトの名無しさん:2008/09/12(金) 15:52:49
>>612
こんなうるさい奴と仕事したくない・・・・
615デフォルトの名無しさん:2008/09/12(金) 16:01:35
>>614
ていうか仕事だともっと細かく突付くよ。
潰せる問題点はできる限り早めに潰したほうが望ましいし。

イチャモン付けるだけもなんなので自分も書いてみた。
もう面倒だし、これでよくね?
色々と無視してるけど。

char s[256][256];
f(char*a,char*b){return atoi(b)-atoi(a);}
main(){
    int i=0;
    while(gets(s[i]))++i;
    qsort(s,256,256,f);
    while(i--)puts(s[i]);
}

よい子の皆はこのコードは悲惨なので真似しないでねー
616デフォルトの名無しさん:2008/09/12(金) 18:22:02
>>613
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7717.txt
座標は整数で入力するようにした。
3番目の問題はよくわかんなかったので解いてません。
617デフォルトの名無しさん:2008/09/12(金) 18:35:09
[1] 授業単元: C言語基本
[2] 問題文(含コード&リンク):
  文字判定でスペースが入力されたら 「空白です」 と表示させたい
[3] 環境
 [3.1] OS: Windows
 [3.2] VC6.0
 [3.3] 言語: C
[4] 期限: 無期限
618デフォルトの名無しさん:2008/09/12(金) 19:45:47
コンパイルするとエラーメッセージが出てきてしまいます><
手直ししていただけませんでしょうか?

[1] 授業単元: コンピュータープログラミングT
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7718.txt
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5
 [3.3] 言語:C++
[4] 期限: 2008.9.12(24:00)
619デフォルトの名無しさん:2008/09/12(金) 20:07:16
620デフォルトの名無しさん:2008/09/12(金) 20:20:23
>>618
void You::Attack()をint You::Attack()に(宣言もint Attack()に訂正)
int You::Attack()の最後にreturn a;
void Shishou::Attacked(int SAttacked)内のaを全てSAttackedに
621デフォルトの名無しさん:2008/09/12(金) 20:36:02
>>610
>>620
レスありがとです><
こんな簡単なことに時間を割いてもらって大変申し訳なかったです
でもおかげで助かりました!どうもありがとう!
622デフォルトの名無しさん:2008/09/12(金) 20:42:17
ここって、シュミのプログラマーしかいないんじゃね?
Cなんてばぐったら致命的な損害及ぼすFA、医療、航空などにつかわれてっから
あめーもんじゃーねーぞ。
623デフォルトの名無しさん:2008/09/12(金) 20:55:03
>>622
どこをみてそういったの?
624613:2008/09/12(金) 21:07:53
>>616
お礼おくれてすみません
ありがとうござました!

どなたか3番も解ける方いないでしょうか・・・
625デフォルトの名無しさん:2008/09/12(金) 21:34:02
>>624
puts("y=1と交点を持つか");
if (A.y == B.y) {
puts("No");
}
else {
printf("交点 %.3lf,1 \n", (1-h)/slop);
}
puts("x=1と交点を持つか");
if (A.x == B.x) {
puts("No");
}
else {
printf("交点 1,%.3lf \n", slop + h);
}
puts("y=xと交点を持つか");
if (slop == 1) {
puts("No");
}
else {
printf("交点 %.3lf,%.3lf \n", h/(1-slop), h/(1-slop));
}
626デフォルトの名無しさん:2008/09/12(金) 21:59:38
質問です。
    msg.data[0] = 0xE0;
msg.data[1] = 0x07;
msg.data[2] = 0x00;
msg.data[3] = 0x00;
msg.data[4] = 0x07;
msg.data[5] = 0xAD;
msg.data[6] = 0xA9;
msg.data[7] = 0xD7;
//msg.dataはUCHAR型配列です
このコードの0x○○の部分をchar型配列のIDという変数からmsg.dataに
格納するように変更したいです。
わかりにくいんですが、今IDにはE007000007ADA9D7というのが格納されています。
上記のコードを
    msg.data[0] = ID[0];
msg.data[1] = ID[1];
msg.data[2] = ID[2];
msg.data[3] = ID[3];
msg.data[4] = ID[4];
msg.data[5] = ID[5];
msg.data[6] = ID[6];
msg.data[7] = ID[7];
で出来るのかな、と思いましたが余裕で無理でした。
どなたか方法を知っていればお願いします。
627デフォルトの名無しさん:2008/09/12(金) 22:03:03
strtol様の出番だな。
というわけで後は誰か任せた。
628626:2008/09/12(金) 22:04:36
>>627
strtol?
今調べてみます。
ありがとうございます。
629デフォルトの名無しさん:2008/09/12(金) 22:12:51
>>627
strtolでもいいけどNUL文字を自分で入れないと駄目ジャン。
むしろsscanfのほうが使いやすいんじゃない?
630626:2008/09/12(金) 22:18:31
今、試してるんですがいまいち要領がつかめません。
どなたかちょろっと書いてくださると助かるんですが・・・。
631デフォルトの名無しさん:2008/09/12(金) 22:33:59
#include <string.h>

unsigned char ID[8] =
{
0xE0 , 0x07 , 0x00 , 0x00 , 0x07 , 0xAD , 0xA9 , 0xD7
};
struct msg_t
{
unsigned char data[8];
};

int main( int main , char **argv )
{
struct msg_t msg;

/*IDの配列サイズだけmsg.dataにコピー*/
memcpy( msg.data , ID , sizeof( ID ) );

return 0;
}
632デフォルトの名無しさん:2008/09/12(金) 22:49:49
こう?
sscanf(ID, "%2x%2x%2x%2x%2x%2x%2x%2x"
, &data[0], &data[1], &data[2], &data[3]
, &data[4], &data[5], &data[6], &data[7]);
633626:2008/09/12(金) 23:00:09
>>631
>>632
おお、助かりました!!
これでもう少しアプリ開発が進みそうです
634デフォルトの名無しさん:2008/09/12(金) 23:07:04
う、うん。
>>631>>632の何が違うか理解してから使ってね。。。
635デフォルトの名無しさん:2008/09/14(日) 02:01:11
>>617
#include <stdio.h>
int main( void )
{
    char ch;
    puts( "1文字だけ入力してください。" );
    ch = getc();

    switch( ch ){
    case ' ':
        puts( "空白です" );
    default:
        break;
    }

    return( 0 );
}
636あおい:2008/09/14(日) 17:52:30
改行コードとして"LF"が使われているテキストファイルを読み取り、
"LF"を"CR+LF"に変換できるようなソースを教えてください。


ロジックとしては、
1文字ずつ読み込み、"LF"じゃなかったらそのまま出力し、"LF"だったら"CR+LF"にして出力する
のようなものが思いつくのですが、C言語は経験が無くて・・・。

また処理時間がシビアに要求されていて、なるべく処理時間が早いソースができればと思っています。
637あおい:2008/09/14(日) 17:57:58
(636の補足)
外部サーバ(OSは不明)から改行コード"LF"のテキストファイルが
HULFT6を使用して送られてきます。
こちら側はWindows2003サーバで受け取り、そのテキストファイルを読み込んで
データ異常チェック・複数ファイルの結合といった処理を行います。

その際、改行コード"LF"では不都合かと思い、"CRLF"に一度変換してから処理に回そうと考えているのです。
C言語に詳しい方どうか助けてください。
638あおい:2008/09/14(日) 18:04:12
重ね重ねすいません。質問の仕方のルールがありましたね。
改めて書き直します。

【質問テンプレ】
[1] 授業単元: 改行コード変換
[2] 636&637参照
 [3.2] VC 6.0
 [3.3] 言語: C
[4] 期限: 2008年09月15日22:00まで

どうかお願いします。
639デフォルトの名無しさん:2008/09/14(日) 18:06:21
そのロジックで良いんじゃないかな。
もう少し具体的には、一文字前をおぼえておいて、
現在書こうとしている文字がLFで、一文字前がCRで無ければ
CRも書く。
例えば、
int last = '¥0';
int ch;
while ((ch = getchar()) != EOF) {
if (last != '¥r') putchar('¥r');
putchar(ch);
last = ch;
}
こんな感じかな。
fgets, strlen, fputs 使った方が少しだけ速いかもしれないが
簡明さでは劣る。
640デフォルトの名無しさん:2008/09/14(日) 18:14:48
ごめん、if(ch=='¥n')を追加しといて。
俺ってばか。
641あおい:2008/09/14(日) 18:27:38
迅速な応対ありがとうございます。
とても助かりました。

もう一つだけ教えていただいていいでしょうか?
改行コード"LF"と"CR"ってC言語上では何になるのでしょうか?

"CR"は"\r"?
ホントに初心者で申し訳ないのですが、
教えていただいたソースに簡単なコメントを添えていただけると助かります。
642デフォルトの名無しさん:2008/09/14(日) 18:32:51
速度ならバリなりで読み込めよ
643デフォルトの名無しさん:2008/09/14(日) 18:36:58
ただし、Webでの受け渡しなら、届いた分ずつ処理すればいい。
ほとんど、ネットの転送時間に依存して書き換え速度は無視できる
644デフォルトの名無しさん:2008/09/14(日) 18:40:00
全部読み込む−>変換−>書き込み
の方が早いんじゃないの?
645あおい:2008/09/14(日) 18:43:52
受信方法はHULFT6というツールで行います。
ファイルを送ってくる相手は別会社なので、あまり柔軟な要求は聞いてくれません。。。

最大20ファイルほどを1ファイルずつ連続で送ってきます。
1ファイルにはデータレコードのみで4レコード入っています。

受け取ったファイルを5分ごとにまとめて編集し、1ファイルに集約します。

そんなシステムを要求されているのですが・・・。
仕組みは考えられてもCに詳しくないので困っているんです。
646デフォルトの名無しさん:2008/09/14(日) 18:44:11
届いた分ずつの方が速いよ。 1Mで転送待ちで5秒掛かったとたら
そのあと処理に0.5秒掛かれば合計で5.5秒。
もし32Kbyte届いたとして、それを書き換える時間は次のデータが届くまでには終わっているだろう。
647デフォルトの名無しさん:2008/09/14(日) 18:45:40
こんな簡単な要求で苦しんでる会社と仕事したくないな・・・・
648デフォルトの名無しさん:2008/09/14(日) 18:50:24
HULFT6調べたら、独自形式で圧縮、復元してるみたいね。 順次の処理は無理みたいだ。
ローカルファイルを書き換えるという方法しかないね。
簡単な方法だと、
nkf.exe -Lw -c inputfile > outputfile
でいいのでは?
649デフォルトの名無しさん:2008/09/14(日) 19:00:34
ただし、NKFは文字コードの自動判別がはいるから、処理には時間が掛かる。
間にあわなければ、C言語を使ったら
650デフォルトの名無しさん:2008/09/14(日) 19:03:00
1Mから500Mのサイズで最も速く書き換えられるアルゴリズムを作ってみてください。
651デフォルトの名無しさん:2008/09/14(日) 19:10:19
>>650
>最も速く書き換えられる
なにを?
652デフォルトの名無しさん:2008/09/14(日) 19:11:53
考えたアルゴリズム。 500M=5M*100に分割して読み込む。
スレッドを用意して、5M+αのバッファを2〜4個持つ。
空いているところへデータと分割位置を渡して処理をさせる。
処理後に出力ルーチンへ渡す。
出力ルーチンは0番から順に書き込み、バッファとスレッドを解放する。
653デフォルトの名無しさん:2008/09/14(日) 19:13:07
>>651
500Mのテキストファイルの改行コードを最も高速で変換するプログラムです。
654デフォルトの名無しさん:2008/09/14(日) 19:22:42
処理時間の大半がIOになると思うけど、そういう処理でもやっぱ、マルチスレッドにして処理が早くなったりするの?
655デフォルトの名無しさん:2008/09/14(日) 19:24:43
スレッド生成時間とかが気になる。
656デフォルトの名無しさん:2008/09/14(日) 19:25:22
>>641
基本的にLFは'\n'でCRが'\r'だと思って問題ない。

>>653
そういう次元の話だと、もはやアルゴリズムよりいかにCPUを使い倒すかって問題になる。
657デフォルトの名無しさん:2008/09/14(日) 19:27:42
この単純な課題で誰が上級者なのかチャレンジしよう。いまくんでみているところ
658あおい:2008/09/14(日) 20:12:02
みなさん、初心者でホントにすいません。。。

改行コード'LF'のテキストを'CR+LF'に変換する、
一番シンプルで処理速度が期待できるCのソースを教えてください。

よろしくお願いします。
659デフォルトの名無しさん:2008/09/14(日) 20:15:27
シンプルで、そこそこ速いのは、512Kbyte位読み込んで、書き換えて書き出す。
というので良いと思う。スレッド使っても速くなるかは微妙。
660デフォルトの名無しさん:2008/09/14(日) 20:39:27
>>658
変換する対象はファイルでいいの?
661デフォルトの名無しさん:2008/09/14(日) 20:40:25
これで充分だろ。
てかnkf使うんじゃダメなのか?

#include <stdio.h>

int main(void)
{
int ch;
while((ch = getchar()) != EOF){
if(ch == '\n'){
putchar('\r');
}
putchar(ch);
}
return 0;
}
662デフォルトの名無しさん:2008/09/14(日) 20:45:39
>>661
一文字ずつ読んだら鈍いし、それは間違えてないか?
663デフォルトの名無しさん:2008/09/14(日) 20:51:01
作ってみた。何を対象にして時間計測すればいいの?
#include<stdio.h>
#include<stdlib.h>
#define BUF_SIZE (1<<20)
#define CHAR_LF 0x0A
#define CHAR_CR 0x0D
int lf2crlf(FILE *fp_in, FILE *fp_out){
char *buf_in, *buf_out;
size_t buf_size=BUF_SIZE, read_size, write_size, whole_size=0, i;

buf_in=malloc(buf_size);
buf_out=malloc(buf_size*2);
if(buf_in==NULL || buf_out==NULL) goto on_exit;

while((read_size=fread(buf_in, 1, buf_size, fp_in))){
for(i=0,write_size=0;i<read_size;i++){
if(buf_in[i]==CHAR_LF) buf_out[write_size++]=CHAR_CR;
buf_out[write_size++]=buf_in[i];
}
whole_size+=fwrite(buf_out, 1, write_size, fp_out);
}
on_exit:
free(buf_in);
free(buf_out);
return whole_size;
}

int main(void){
lf2crlf(stdin, stdout);

return 0;
}
664661:2008/09/14(日) 20:51:30
>>662
一文字づつ読んだら遅い?オーケー、おまえが速いと思うプログラムを書いてみて、
オレのと速度比較してみ。そのうえで、おまえのプログラムのほうが速かったら、
そのとおりでしたと認めるよ。
あと、間違えてると思うんならその箇所を指摘してくれ。単に、「間違えてないか?」
と言われても「どこが?」と聞き返すしかないぞ。
665デフォルトの名無しさん:2008/09/14(日) 20:59:29
ちょっとまってろ
666デフォルトの名無しさん:2008/09/14(日) 21:07:40
1行読み込んで1番最後だけ確認するのが早いんじゃないの?
667デフォルトの名無しさん:2008/09/14(日) 21:11:19
DOSのころ、setvbufでバッファを大きくしたらそれだけでファイルIOが速くなったけど、Windows95か98のころに、
確認してみたら、setvbufでバッファを大きくしても、ぜんぜん速くならなかったような記憶がある。
668662:2008/09/14(日) 21:16:16
質問があります。
>>661でgetchar()っていうのは、ファイルも開いて無くて使えますか?

>>663でstdinて (ここ)にくるやつですか? ***.exe (ここ)
669デフォルトの名無しさん:2008/09/14(日) 21:19:51
スクリプト言語なんかでも書いてみて、スピードの比較をやってみたら面白そう。
670662:2008/09/14(日) 21:24:17
できたよ。 バッファを始め512Kでやってたけど2Mのほうが速い。

#include <stdio.h>
#include <string.h>
#include <time.h>
void trans(char *input, char *output);
int main(){
int cl=clock();
trans("input.txt","output.txt");
cl=clock()-cl; printf("%d\n",cl); }

#define K 2024288
void trans(char *input, char *output){
char *x=new char[K*1.3];
char *y=new char[K+1]; y[K]=0;
FILE *fp=fopen( input,"rb");
FILE *fq=fopen(output,"wb");
int m,n,r,N;
while( N = fread(y, 1, K, fp) ){
m=n=r=0;
for(;;){
for(;r<N;r++)if(y[r]=='\r')if(y[r+1]!='\n')break;
if(r==N){ fwrite(x,1,m,fq); fwrite(&y[n],1,N-n+1,fq); break; }
int d=r-n+1;
memcpy(&x[m],&y[n],d); x[m+d]='\n';
m+=d+1; r++; n=r;}
}
fclose(fp);fclose(fq);}
671662:2008/09/14(日) 21:28:28
まとめて2M読み込んで、別のバッファに結果を書き込んで出力しているけど
プログラムの工夫のポイントは、一度も\rが出てこなかったら、コピーは作らず
元のバッファをそのまま出力するところと、|r以外の連続する文字列はmemcpyで一気に移すところです。
しかし、ほとんど手間が掛かっているところはHDDアクセスのようです。
バッファを増やしても、アクセスランプが点滅しっぱなしなので。
672デフォルトの名無しさん:2008/09/14(日) 21:30:21
1文字変数読みづらい
673デフォルトの名無しさん:2008/09/14(日) 21:30:39
>>670
話の本筋とはずれるんだが、
動的にメモリを2Mも確保するのが怖いのは俺だけ?
別に怖い理由があるとかではないんだがなんとなく漠然と…。
674デフォルトの名無しさん:2008/09/14(日) 21:34:02
>>673
スタックに確保するほうが怖いだろ
675662:2008/09/14(日) 21:34:05
メモリを2M以上確保したことがないんですか? 全然余裕と思いますが。
676デフォルトの名無しさん:2008/09/14(日) 21:35:34
perlとか、起動しただけで、プロセスが1M越えてるしな。
677デフォルトの名無しさん:2008/09/14(日) 21:38:27
>>673
どこで動的に確保してる?
678673:2008/09/14(日) 21:40:20
そういうもんなのか>動的確保
いつもなんとなく怖いからせいぜい2kくらいまでしか確保してなかった…
今度からはもっと大胆にとってみる
679662:2008/09/14(日) 21:44:08
470Mのファイルを、読み込みバッファ512Kで処理すると約80秒
2Mだと約60秒、8Mだと約70秒掛かりました。
ただし8MはコンパイラをBCCからVC++に変更しました。
VC++2008はなかなか性能が良いと経験的に判っているのでバッファ増やしたら速くなると思ったのですが。
680デフォルトの名無しさん:2008/09/14(日) 21:50:11
670って、妖しいような?
681662:2008/09/14(日) 21:52:42
どうやら2M程度で十分なようです。 BCCで8Mにしても60秒は切れないです。
でもFire File Copy で単純にコピーしてみると29秒で済みます。
処理時間のほとんどがディスクアクセスに費やされるなら、もっと速くできるはずです。
682あおい:2008/09/14(日) 21:53:47
みなさんありがとうございます。

変換する対象はファイルです。
拡張子は無しですが、メモ帳で開けるのでバイナリではなくテキストです。
ただ、1レコードに複数の項目があって、カンマ区切りになっています。
それが1ファイル内に最大4レコードあります。


速くて何よりシンプルなソースだと助かります。
初心者なものでホントにすいません。。。
683あおい:2008/09/14(日) 21:55:52
ちなみにVisual Studioで開発しています。
684デフォルトの名無しさん:2008/09/14(日) 21:58:27
>>679
実メモリを8Mも積んでないからじゃね? 遅くなるの。
685デフォルトの名無しさん:2008/09/14(日) 21:58:29
非同期で処理と読み書きすればはやくなりそうです。
686デフォルトの名無しさん:2008/09/14(日) 21:59:33
>>682
情報小出しキター!!!!
687デフォルトの名無しさん:2008/09/14(日) 22:00:26
>>679
L2/L3キャッシュの容量超えてない?<8M
688デフォルトの名無しさん:2008/09/14(日) 22:00:59
>>684
Fire File Copy では15M確保しましたよ。そしたら29秒です。
読み込みバッファ8Mとコピー先バッファ約10Mで併せて合計18Mくらいの確保ですが
Fire File Copyの確保量とほぼ同じです。
689デフォルトの名無しさん:2008/09/14(日) 22:04:24
キャッシュなんてただの飾りです。
偉い人にはそれが
690デフォルトの名無しさん:2008/09/14(日) 22:05:04
>>662

>>662のデータで>>661の処理時間どれくらいになった?
参考までに聞かせてくれ。
1文字ずつ読んで、あそこまで強気になれる時間かどうか知りたい。
691デフォルトの名無しさん:2008/09/14(日) 22:05:46
HDDキャッシュ容量にもよるのでは?
692684:2008/09/14(日) 22:06:28
ああ、ボケてた。
いまどきメモリを8M積んでないPCとかあるわけないか。
693デフォルトの名無しさん:2008/09/14(日) 22:15:29
>>661の動かし方が判りません。 
あとディスクアクセス以外の時間を計ってみたら3秒ほどしか使ってませんでした。
ほとんど入出力のアクセスの問題です。APIで直接操作したらいいかもしれません。
694デフォルトの名無しさん:2008/09/14(日) 22:23:54
でも3秒以内なのは、はじめから\r\nという改行コードのせいと思います。メモリ間転送は全くしていないので。
新聞のログですがWindowsなのでSjisで改行は\r\nです。
695デフォルトの名無しさん:2008/09/14(日) 23:05:06
>>690
試してみた
512MB の乱数で生成したテキストデータ ( A-Za-z0-9!#$%&'()=^;:][/.,<>?_}*{\n を等確率 )
>>661 が 50sec or 36sec
>>663 が 41sec or 15sec
>>663 (バッファを2MBに変更) が 36sec or 12sec
>>670 が 36sec or 12sec

それぞれ一回目の実行と二回目以降の所要時間が大幅に違う
二回目以降は明らかにキャッシュヒットしてる速さ
696デフォルトの名無しさん:2008/09/14(日) 23:13:53
実際のデータは等確率ではない(\rはあまり現れない)ので、
memcpyで一気に写す>>670は一文字ずつよりかなりはやいはずです。
697デフォルトの名無しさん:2008/09/14(日) 23:32:59
>>695
コンパイラ何使った?
もし、VC++ 2005以上なら_CRT_DISABLE_PERFCRIT_LOCKS定義した結果も計ってよ。
698デフォルトの名無しさん:2008/09/14(日) 23:34:09
今更だけど、stdin/stdoutはテキストモードだろうから、
Windowsで661のコードはあまり意味ない気がする。
699デフォルトの名無しさん:2008/09/14(日) 23:35:46
これって如何に同一ドライブのコピーを速くするかに掛かっているな。
CなどはOSのキャッシュも使い、内蔵キャッシュも使っているだろうから
ディスクアクセスが頻繁だと時間が掛かると思う。
WinAPIでOSのキャッシュ無効に出来るからそれで計ったらいい速度になると思う。
700695:2008/09/14(日) 23:38:21
>>697
gcc -O2 にてコンパイル
>>697 は自分で試して結果を張ってくれればいいじゃない

ほら、乱数テキスト生成コード
int main(void){
FILE *fp;
char table[]="\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'()=^;:][/.,<>?_}*{";
char buf[1024*128];
int i, j;

fp=fopen("input.txt", "wb");
if(fp==NULL) return 1;
for(i=0;i<1024*4;i++){
for(j=0;j<sizeof(buf);j++){
buf[j]=table[rand()%(sizeof(table)-1)];
}
fwrite(buf, 1, sizeof(buf), fp);
}
fclose(fp);
return 0;
}
701697:2008/09/15(月) 00:41:31
>>700
tx やってみた。VC++ 2008 SP1で/O2。
全てのソースに_setmodeでstdin/stdout共にバイナリモードにするコードを挿入した。
計測はCygwinのtimeのrealの値。

左がなし、右が_CRT_DISABLE_PERFCRIT_LOCKS
661 7.872s 0.632s
663 0.477s 0.403s
663 0.429s 0.602s (バッファ2MB)
2回目
661 6.500s 0.485s
663 0.578s 0.344s
663 0.578s 0.485s (バッファ2MB)
>>670は出力が間違っていたので除外した。とは言え一応計ってみたら0.387sだった。
702デフォルトの名無しさん:2008/09/15(月) 00:54:50
質問者おいてけぼりの流れにワロタ。
いいぞ、もっとやれ。
703デフォルトの名無しさん:2008/09/15(月) 00:59:35
まちがってた? さしたら修正と速度向上を目指してもう一度やってみる
704デフォルトの名無しさん:2008/09/15(月) 01:07:29
670はもうこんなんでいいんじゃないか?
void trans(char *input, char *output){
FILE *fp=fopen( input,"rb");
FILE *fq=fopen(output,"wb");
char *buff1=(char*)malloc(K);
char *buff2=(char*)malloc(K*2);
int r_size,cr=0;
while((r_size=fread(buff1,1,K,fp))){
char *r=buff1,*w=buff2;
while(r<buff1+r_size){
if(*r=='\n' && cr==0){
*w++='\r';
}
cr=(*r=='\r');
*w++=*r++;
}
fwrite(buff2,1,w-buff2,fq);
}
fclose(fp);fclose(fq);
}
705デフォルトの名無しさん:2008/09/15(月) 01:11:31
>>686
その小出しによって攪乱されるあなたの方がちょっとどうかしてるのでは
706デフォルトの名無しさん:2008/09/15(月) 01:32:57
情報小出しはウザいだろ
仕様不明確はかなりめんどくさい
707デフォルトの名無しさん:2008/09/15(月) 03:18:42
まぁテンプレに沿ってないやつの相手をするなら情報の小出しくらい覚悟しろってことだな
708デフォルトの名無しさん:2008/09/15(月) 04:20:29
仕様に変更が発生しない小出しならスルーすればいいじゃない
709デフォルトの名無しさん:2008/09/15(月) 14:05:37
[1] 授業単元 : プログラミング総合演習
[2] 問題文 : ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7724.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C
[4] 期限: 2008年09月17日22:00まで

ビットフィールドへの変換もいまいち分かりません。
よろしくお願い致します。
710デフォルトの名無しさん:2008/09/15(月) 14:39:06
>>709
なんかサーバ落ちてる
711デフォルトの名無しさん:2008/09/15(月) 16:26:34
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
課題1
∫[0→1]1/(1+x^2)dxを台形公式を用いて求めるプログラムを作成せよ。
台形公式:
∫[a→b]f(x)dx≒h/2{y[0]+2(y[1]+y[2]+…+y[n-1])+y[n]}
h=(b-a)/n
n=20

課題2
∫[0→1]1/(1+x^2)dxをシンプソンの公式を用いて求めるプログラムを作成せよ。

シンプソンの公式:
∫[a→b]f(x)dx≒h/3{y[0]+4(y[1]+y[3]+…+y[2n-1])+2(y[2]+y[4]+…+y[2n-2])+y[2n]}
h=(b-a)/2n
n=20

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:LSIC-86
 [3.3] 言語:C
[4] 期限:2008年9月16日7:00まで
[5] その他の制限:できるだけ簡単な構文でお願いします。
答えは0.785…となるようです。
よろしくお願いします。
712デフォルトの名無しさん:2008/09/15(月) 18:23:28
#include<stdio.h>
double f(double x){ return 1.0/(1.0+x*x); }
int main(){
int i,n;
double h,a,b,s;
a=0.0; b=1.0; n=20;
//1
h=(b-a)/n;s=f(a);
for(i=1;i<n;i++) s+=2.0*f(a+h*i);
s+=f(b); s*=h/2.0;
printf("1:%f\n",s);
//2
h=(b-a)/(2.0*n); s=f(a);
for(i=1;i<2*n;i+=2) s+=4.0*f(a+h*i);
for(i=2;i<2*n;i+=2) s+=2.0*f(a+h*i);
s+=f(b); s*=h/3.0;
printf("2:%f\n",s);
return 0;
}
713デフォルトの名無しさん:2008/09/15(月) 20:05:58
[1] 授業単元:C++
[2] 西暦と月を入力し○年○月○日を出せるようにする
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Microsoft Visual studio
 [3.3] 言語: C++
[4] 期限: 9月16日 11:30
[5] その他の制限:とくにありません

よろしくお願いします
714デフォルトの名無しさん:2008/09/15(月) 21:52:41
日はどうするのかと

#include <iostream>
using namespace std;
int main(int argc,char *argv[]){
int year,month,day;
cout<<"年を入力=";
cin>>year;
cout<<"月を入力=";
cin>>month;
cout<<"日を入力=";
cin>>day;
cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
return 0;
}
715デフォルトの名無しさん:2008/09/15(月) 22:38:37
[1] 授業単元:C++
[2] 西暦と月を入力しそのつきのカレンダーを表示させる
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Microsoft Visual studio
 [3.3] 言語: C++
[4] 期限: 9月16日 11:30
[5] その他の制限:とくにありません

すいません間違えてました
よろしくお願いします
716デフォルトの名無しさん:2008/09/15(月) 23:02:05
カレンダーの形式は? 2008年9月としたときのサンプル
717デフォルトの名無しさん:2008/09/15(月) 23:25:37
#include <iostream>
#include <iomanip>
using namespace std;
const int days[] = { 31,28,31,30,31,30,31,31,30,31,30,31};
const char dayOfTheWeek[7][4] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
int main(int argc,char *argv[]){
int year,month,x,i;
cout<<"年を入力=";
cin>>year;
cout<<"月を入力=";
cin>>month;

x=(year+year/4-year/100+year/400+(13*month+8)/5 +1)%7;
for(i=0; i<7; i++) cout << dayOfTheWeek[i] << " " ;
cout << endl;
for(i=0; i<x; i++) cout << " ";
cout << setw(3);
for(i=1; i<=days[month-1]; i++){
cout << setw(3) << i << " ";
if((i+x)%7==0) cout << endl;
}
cout << endl;
return 0;
}
718デフォルトの名無しさん:2008/09/16(火) 00:41:23
>>712
ありがとうございます
助かりました
719デフォルトの名無しさん:2008/09/16(火) 02:39:45
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <string>
using namespace std;
const int days[] = { 31,28,31,30,31,30,31,31,30,31,30,31};
const string monthName[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
const string dayOfTheWeek[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
int main(int argc,char *argv[]){
int year,month,x,i;
string buf;
cout << "年を入力=";
do{ cin >> buf;}while((year = atoi(buf.c_str()))<=0);
cout << "月を入力=";
do{ cin >> buf;}while(!((month = atoi(buf.c_str()))>=1 && month<=12));

//xはその月の1日の曜日。0:日曜〜6:土曜
x=(year+year/4-year/100+year/400+(13*month+8)/5 +1)%7;
cout << year << " / " << monthName[month-1] << endl;
for(i=0; i<7; i++) cout << dayOfTheWeek[i] + " " ;
cout << endl;
for(i=0; i<x; i++) cout << " ";
for(i=1; i<=days[month-1]; i++){
cout << setw(3) << i << " ";
if((i+x)%7==0) cout << endl;
}
if((i+x)%7!=1) cout << endl;
return 0;
}
エラーチェックとか追加!
720デフォルトの名無しさん:2008/09/16(火) 15:17:32
1から100までの数を出力する。


宜しくお願いします。
721デフォルトの名無しさん:2008/09/16(火) 15:36:03
#include <studio.h>
int mani(viod){
puts("#include <studio.h>¥nint mani(viod){int i;for(i=1;i<=100;i+++)printf("%s",i);retrun(0);}¥n","%d");
retrun(0);
}
722デフォルトの名無しさん:2008/09/16(火) 16:02:07
[1] 授業単元:C++
[2] 問題文(含コード&リンク):C++でオセロを作る
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:CPad for Borland C++ Compiler
 [3.3] 言語:C++
[4] 期限:9/17まで
[5] その他の制限:for if while do switch printf scanfだけで作る。それと対人
723デフォルトの名無しさん:2008/09/16(火) 16:05:02
>>709の課題1だけでもいいので教えていただけないでしょうか
724デフォルトの名無しさん:2008/09/16(火) 16:17:52
>>709
問題1
//
//課題部分
unsigned int dec;
dec=atoi(str_dec);
hex.hex7=dec%16;
dec=dec/16;
hex.hex6=dec%16;
dec=dec/16;
hex.hex5=dec%16;
dec=dec/16;
hex.hex4=dec%16;
dec=dec/16;
hex.hex3=dec%16;
dec=dec/16;
hex.hex2=dec%16;
dec=dec/16;
hex.hex1=dec%16;
dec=dec/16;
hex.hex0=dec%16;
return 0;
}
//
#include<stdlib.h> 必要
725デフォルトの名無しさん:2008/09/16(火) 16:30:12
[1] 授業単元:数理科学C
[2] 問題文:ttp://sakuratan.ddo.jp/imgboard/img-box/img20080916162721.jpg
      の(2)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: 指定なし
 [3.3] 言語: C/C++/どちらでも可
[4] 期限:9月21日
[5] その他の制限: 制限なし
726デフォルトの名無しさん:2008/09/16(火) 17:26:34
>>725
#include<stdio.h>
#include<math.h>
double a(int n)
{
double an;
if (n == 0) {
return 1.0;// 6角形の1辺の長さ
}
an = a(n - 1);
return (an / (sqrt(2 + sqrt(4 - (an * an)))));
}
int main(void)
{
int n = 10;
double pai;
pai = a(n) * pow(2, n) * 6 / 2;
printf("%f\n", pai);
return 0;
}
727デフォルトの名無しさん:2008/09/16(火) 20:01:07
[1] 授業単元:計算機応用
[2] 問題文(含コード&リンク):data.txtからデータを取り出し配列に格納せよ。
また長方形の個数(data.txtの行数)も求めよ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc (Cygwin)
 [3.3] 言語: C
[4] 期限: 2008年9月17日0:00まで
[5] その他の制限: 特にないです。

data.txtの中身
---------------------------------------
a{1} = [100, 200; 200, -300; 100, -300; 200, -200]';
a{2} = [1, 2; 2, 2; 1, 1; 2, 1]';
---------------------------------------------------
data.txtの中身は
長方形名 = {長方形の頂点1のx座標, 長方形の頂点1のy座標;頂点2のx,頂点2のy;・・}
となっています。
この中から各座標を取り出し、2次元配列d[長方形の数][4]に
d[i番目の長方形][0]=小さい方のx座標
d[i番目の長方形][1]=大きいほうのx座標
d[i番目の長方形][2]=小さい方のy座標
d[i番目の長方形][3]=大きいほうのy座標
となるように格納してください。data.txtの長方形の数が変わっても対応できるようにお願いします

分かりにくい文章ですみません・・・よろしくお願いします

728デフォルトの名無しさん:2008/09/16(火) 20:06:37
data.txtの中身を間違っていました

正しいのは
a{1} = [100, 200; 200, -300; 100, -300; 200, 200]';
a{2} = [1, 2; 2, 2; 1, 1; 2, 1]';

です
729デフォルトの名無しさん:2008/09/16(火) 20:09:55
[1] 授業単元:C言語
[2] 問題文:文字列をchar型のポインタとして受け取り、そのポインタから10文字か、
NULL文字が現れるまで画面に1文字ずつ表示する関数を作成しなさい。
画面に1文字表示するたびに改行を入れなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: 指定なし
 [3.3] 言語: C
[4] 期限:9月17日午前6時
[5] その他の制限: 制限なし

お願いします。
730デフォルトの名無しさん:2008/09/16(火) 20:38:29
void char_out(const char *str){
int i;

for(i=0;;i++){
if(str[i]=='\0' || i<10)break;
printf("%c\n",str[i]);
}
}

コンパイルしてねーから凡ミスとか知らね。
731727:2008/09/16(火) 23:02:05
すみません。なんとか自力で解けました
スレ汚してごめんなさい
732デフォルトの名無しさん:2008/09/16(火) 23:35:18
[1] 授業単元:C++
[2] 100文字以内の文字列をキー入力し大文字/小文字を反転して表示せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Microsoft Visual studio
 [3.3] 言語: C++
[4] 期限: 9月23日
[5] その他の制限:配列[101]を使用。+32 -32で文字の変換を行う

全くのシロウトですいません;
よろしくお願いします
733デフォルトの名無しさん:2008/09/16(火) 23:46:07
↑より素人・・・どころか問題外ですみません。
プログラムを始めようと思い、いろいろ調べましたが、
Borland C++ Compiler というソフトがいいらしいことはわかりました。
が、PCにすでにMicrosoft visual c++ 2005 Redistri butableや、
Microsoft Visual Studioといったものが入っているのですが、
これではできないのでしょうか?

スレ汚してすみません。。。
734デフォルトの名無しさん:2008/09/16(火) 23:48:47
#include<iostream>
using namespace std;

int main(){
char str[101];

cin >> str;
for(int i=0; str[i] != '\0'; i++){
if(str[i] >= 'a' && str[i] <= 'z'){
str[i] -= 'a'-'A';
}else if(str[i] >= 'A' && str[i] <= 'Z'){
str[i] += 'a'-'A';
}
}
cout << str <<endl;

return 0;
}
735デフォルトの名無しさん:2008/09/16(火) 23:50:29
>>733
使えるはずだけど、Visual Studioじゃいやなの?
http://park6.wakwak.com/~wmasa/prog/bcc/index.htm
736デフォルトの名無しさん:2008/09/17(水) 00:11:34
>>734
cin >> str;
ってスペースとれるっけ?
737デフォルトの名無しさん:2008/09/17(水) 00:24:55
#include<iostream>
using namespace std;

int main(){
char str[101];

cin.getline(str,sizeof(str));
for(int i=0; str[i] != '\0'; i++){
if(str[i] >= 'a' && str[i] <= 'z'){
str[i] -= 'a'-'A';
}else if(str[i] >= 'A' && str[i] <= 'Z'){
str[i] += 'a'-'A';
}
}
cout << str <<endl;

return 0;
}
738デフォルトの名無しさん:2008/09/17(水) 00:55:55
>>735
いいんですけど、どこから起動するのか分かりません。プログラムファイル内の
ヴィジュアルスタジオのファイルを覘いてもASP.TLBというファイルが一つあるだけです。
Borland C++は会員登録が面倒なのと、使えればヴィジュアルスタジオほうを使いたいです。
739デフォルトの名無しさん:2008/09/17(水) 01:15:38
740 ◆ZnBI2EKkq. :2008/09/17(水) 03:52:26
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7727.zip
[3] 環境
 [3.1] Windows XP
 [3.2] gcc
 [3.3] C
[4] 期限:2008/9/19
[5]どうかお願いいたします。
741デフォルトの名無しさん:2008/09/17(水) 08:43:10
>>739
スタートから起動できるよ
742デフォルトの名無しさん:2008/09/17(水) 09:05:52
[1] 授業単元:画像処理
[2] 画像の平滑化を、移動平均フィルタとメディアンフィルタを用いて行うプログラム(それぞれ一つづつ)の作成

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:NetBeans
 [3.3] 言語: C
[4] 期限: 9月19日 12:30
[5] その他の制限:とくにありません

プログラミング苦手で全く分かりません…よろしくお願いしますm(__)m
743デフォルトの名無しさん:2008/09/17(水) 10:28:03
>>734
>>737
ありがとうございます。
自分なりに授業で習った<stdio.h>に少しもじって書き直したのですが

#include<stdio.h>
int main(void)
{
char str[101];
int i;
printf("100文字以内の文字列を入力してください。\n");
scanf("%s",&str);
for(i=0; i<100; i++)
{if(str[i] >= 'A' && str[i] <= 'Z'){
str[i] = str[i] + 32;
}else if(str[i] >= 'a' && str[i] <= 'z')
{
str[i] = str[i] - 32;
}
}
printf("%s\n",str);
return 0;
}

スペースを含んだ文字列がどうやってもできません;;
それとNULL文字は最後の最後で独立して指定したいのですが
どこでどう指定したらいいのかよくわかりません
ほかにも間違いがあったら指摘お願いしマス。。
スレ汚しですいません;;
744デフォルトの名無しさん:2008/09/17(水) 11:51:07
>>743
CとC++は書き方が変わるから、正確に申告汁。
745デフォルトの名無しさん:2008/09/17(水) 12:17:18
>>743
scanf("%s",&str);
は間違い
746デフォルトの名無しさん:2008/09/17(水) 12:41:26
紛らわしいけど配列へのポインタだから大丈夫じゃね?
配列へのポインタは先頭の要素を指すだろうし
747デフォルトの名無しさん:2008/09/17(水) 14:13:34
[1] 授業単元:C言語
[2] 1から11の乱数を5個発生させ、それぞれを配列に順に保存する。
この作業をn回繰り返し、1から11の各数字がどれだけ出現したかを求めよ。
また、各数字の出現割合を求めよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio
 [3.3] 言語: C
[4] 期限: 9月18日
[5] その他の制限:特になし

下のコードまでは書けたのですが、ここから出現回数と出現割合の
求め方が分かりません。よろしくお願いします。

int array[n][5];

for(i=0;i<n;i++){
for(j=0;j<5;j++){
array[i][j]=rand()%10+1;
}
}
748デフォルトの名無しさん:2008/09/17(水) 14:30:14
>>743
scanf("%s",&str);
よりも
scanf("%s",&str[0]);
または
scanf("%s",str);
のほうがいいと思う。(一番下が簡単)

#include<stdio.h>
#define INPUT_SIZE 100
int main(void)
{
char str[INPUT_SIZE+1];
int i;
printf("%d文字以内の文字列を入力してください。\n", INPUT_SIZE);
fgets(str,sizeof(str),stdin);
for(i=0; str[i]!='\0'; i++){
if(str[i] >= 'A' && str[i] <= 'Z'){
str[i] = str[i] + 32;
}else if(str[i] >= 'a' && str[i] <= 'z'){
str[i] = str[i] - 32;
}else if(str[i] == '\r' || str[i] == '\n'){
str[i] = '\0';
break;
}
}
printf("%s\n",str);
return 0;
}
749デフォルトの名無しさん:2008/09/17(水) 14:43:42
>>747
5個発生させる意味がよくわからないんだけど・・・
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define N 1000
#define MAX_RAND 11
int main(){
int i,j;
int ary[N][5];
int count[MAX_RAND];
memset(ary,0,sizeof(ary));
memset(count,0,sizeof(count));
srand((unsigned int)time(NULL));
for(i=0;i<N; i++){
for(j=0; j<5; j++){
ary[i][j] = rand()%MAX_RAND + 1;
count[ary[i][j]-1]++;
}
}
for(i=0;i<MAX_RAND; i++){
printf("%5d:%5d\n",i+1,count[i]);

}
return 0;
}
750デフォルトの名無しさん:2008/09/17(水) 15:05:12
ありがとうございます。
1:6と表示されたら、1が6回出たということですが、
この6回出たというのは、全体の何パーセントということになるのでしょうか。
751デフォルトの名無しさん:2008/09/17(水) 15:14:09
printf("%5d:%5d\n",i+1,count[i]);

printf("%5d:%5d times, %f %%\n",i+1,count[i],(double)100*count[i]/(5*N));
752デフォルトの名無しさん:2008/09/17(水) 15:58:34
ありがとうございます。
助かりました。
もし、よろしければ100*count[i]/(5*N));という式を
どういう考えで導いたのか教えていただけないでしょうか。
数学的質問で申し訳ありません。(100を掛けるのは%に直すためなのは分かります)
753デフォルトの名無しさん:2008/09/17(水) 16:05:41
なんていうかそこまで行くとC言語がどうこういうレベルじゃないような
754デフォルトの名無しさん:2008/09/17(水) 16:55:32
5個の乱数を出すことを、N回繰り返すから、全部で5N個の乱数が出力されて、
i+1はcount[i]回現れる。
i+1が現れる統計的な確率はcount[i]/5N。
パーセントにすると(count[i]/5N)x100
(double)は計算式に表れる数がすべて整数なので、分子をdouble型にキャストしてあげないと小数点以下が切り捨てられてしまう。
755デフォルトの名無しさん:2008/09/17(水) 17:08:23
>>744
失礼しました;;
>>745
>>748
ありがとうございます
助かりました
また試験前に足を運ばさせていただくかもしれませんので
そのときにまたよろしくお願いします。
756デフォルトの名無しさん:2008/09/17(水) 23:05:56
>>754
ありがとうございます。
納得できました。
757デフォルトの名無しさん:2008/09/19(金) 16:59:23
台形の面積を求めるプログラムなのですが

#include <stdio.h>

double menseki(double, double, double);

int main(void)
{
double = h, f1, f2, ans;

scanf("%lf", &h );
scanf("%lf", &f1);
scanf("%lf", &f2);

printf("h = %lf\n",h);
printf("f1= %lf\n",f1);
printf("f2= %lf\n",f2);

ans = menseki(h,f1,f2);
printf("Answer = %lf\n", ans);

return(0);
}

double menseki(double a, double b, double c){
return((b+c)*a/2);
}
これで、コンパイルしても成功しません。
なぜでしょうか??
758デフォルトの名無しさん:2008/09/19(金) 17:03:17
>>757
エラーメッセージ読めよ
759757:2008/09/19(金) 17:20:00
>>758
エラーメッセージを見てもなぜエラーが発生するかわかりませんでした。

7:宣言が正しく終了していない(関数 main )
9: 未定義のシンボル h(関数 main )
10: 未定義のシンボル f1(関数 main )
11: 未定義のシンボル f2(関数 main )
17: 未定義のシンボル ans(関数 main )
760デフォルトの名無しさん:2008/09/19(金) 17:20:47
double = h, f1, f2, ans;
761デフォルトの名無しさん:2008/09/19(金) 17:34:29
宣言は
型名 変数名;
=はいりませんね
762757:2008/09/19(金) 17:36:34
>>760-761
そうでした・・・。すみません。。
ありがとうございました。
763デフォルトの名無しさん:2008/09/19(金) 18:24:43
この程度が解決できないならプログラムを組むな、
と言いたいのが最近多い気がするけど昔からか?
764デフォルトの名無しさん:2008/09/19(金) 18:27:55
随分と敷居が高くなったなここも
765デフォルトの名無しさん:2008/09/19(金) 18:28:13
どう考えても昔からいます
766デフォルトの名無しさん:2008/09/19(金) 18:43:55
最近はテンプレ無視にも寛容になったみたいだから
むしろ敷居は下がっただろ
767デフォルトの名無しさん:2008/09/19(金) 19:05:35
>>763
スレ違いだってことだ
宿題丸投げじゃねーじゃん
768デフォルトの名無しさん:2008/09/19(金) 19:13:36
大学の卒業研究で作っているプログラムについて質問させてください。
C++、コンパイラはgcc、動かすのはlinux上です。

データ構造の動的確保についてなのですが
すでに自分で作った mvector というデータ構造があります。
mvectorを宣言するときは

mvector mvec(DIM); //DIMはベクトルの次元を指すint型

という感じです。mvectorは事実上ただの配列やvectorと似ていますが少し機能追加(算術計算など)しています。

ここでmvectorの配列(二次元配列のような感じ)を動的確保したいのですがどうやればいいかよくわかりません。
最初は適当に

head = new (mvector(DIM))[data]; //headは先頭ポインタを受け取る子、dataは配列の数

としたのですが普通にエラーです。 mvector(DIM)[data]もエラーです。
引数をもつ子の配列というのはどう確保すればよいのでしょうか。よろしくお願いいたします。
769デフォルトの名無しさん:2008/09/19(金) 19:15:35
vector使えよ
770デフォルトの名無しさん:2008/09/19(金) 19:44:03
new ((mvector(DIM))[data]); ではどうよ
771デフォルトの名無しさん:2008/09/19(金) 22:51:01
ユーザー定義型のインスタンスを要素とする配列をnewで確保した場合、
各要素の引数付きコンストラクタを呼ぶことは出来ない。
デフォルトコンストラクタが呼ばれる仕様。
772デフォルトの名無しさん:2008/09/19(金) 22:57:25
テンプレート引数の出番か。
まぁ、無理に new[] を使うよりは、vector使うべきだとは思うが。
#include <iostream>
template<int dim>
class mvector
{
  int m_dim;
public:
  mvector() : m_dim(dim){}
  int get_dim(){ return m_dim;}
};
int main()
{
  mvector<3> *head = new mvector<3>[10];
  ...
  delete[] head;
  return 0;
}
773デフォルトの名無しさん:2008/09/19(金) 23:18:20
既存のデータ構造を変えたくなければ、配列をインスタンスじゃなくポインタにするのも手。
でも初期化と解放の両方で、各要素の構築/解放が必要になって手間。
mvector **head = new mvector*[data];
//確保
for(int i=0; i<data; i++) head[i] = new mvector(DIM);
//解放
for(int i=0; i<data; i++) delete head[i];
delete[] head;
774デフォルトの名無しさん:2008/09/19(金) 23:28:48
mvectorの内部バッファをコンストラクタじゃなくて
別途メンバ関数で割り当てできるようにするのが
一番スマートかもしれない。

mvector *head = new mvector[data];
for(int i=0; i<data; i++) head[i].alloc(DIM);
...
delete[] head;
775デフォルトの名無しさん:2008/09/20(土) 12:14:38
>>769-774
ありがとうございます。にわかに理解できない部分もありますが勉強になります。ちょっと要勉強というか要解読です。
newを使わずにstd::vectorを使えばだいぶ簡単にすることが出来るのでしょうか?
new自体にこだわりはないのでもしvectorで簡単に実現で切るならばうれしいです。
作ろうとしているmvectorの配列mvarrayは現在以下のようです。

class mvarray{ //mvector の配列みたいなデータ構造
private:
int _data;
mvector* head;
public:
mvarray(int data){ //コンストラクタ、これが困ってる
head = new mvector[data];
_data = data;
}
mvector* th(int n){ //二次元配列のn番目の配列を返す感じのもの。th は 4th,5th,のth.
return (head + n);
}
int data(){ retrun _data;}
}
長々と申し訳ないですが、もう少しだけお願いいたします。
776デフォルトの名無しさん:2008/09/20(土) 12:20:25
std::vector<std::vector<mvarray> > mvec(DIM, std::vector<marray>())

んでコンストラクタではなく>>774のように初期値を後から与える
vectorならresize()が使えるから後からサイズを変えてもいいし
777デフォルトの名無しさん:2008/09/20(土) 23:51:58
[1] 授業単元: ソフトウエア実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7728.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: ボーランド
 [3.3] 言語: C
[4] 期限: 明日中

どうかお願い致します。
778775:2008/09/21(日) 00:12:02
みなさんのおかげでうまく実装できました!
本当にありがとうございます。助かりました。
また困ったことが会ったらよろしくお願いいたします。
779デフォルトの名無しさん:2008/09/21(日) 12:20:54
>>777 (1)
#include<stdio.h>
#define DATA_NUM 12
int main(int argc, char *argv[]){
char *filename_in, *filename_out;
FILE *fp_in, *fp_out;
int i, array[DATA_NUM]={0};
if(argc!=3){
fprintf(stderr, "\nUsage: %s filename_in filename_out\n", argv[0]);
return 0;
}
filename_in=argv[1];
filename_out=argv[2];
fp_in=fopen(filename_in, "r");
if(fp_in==NULL){
fprintf(stderr, "\nERROR: %s cannot open.\n", filename_in);
return 1;
}
fp_out=fopen(filename_out, "wb");
if(fp_out==NULL){
fprintf(stderr, "\nERROR: %s cannot open.\n", filename_out);
fclose(fp_in);
return 2;
}
for(i=0;i<DATA_NUM;i++){
fscanf(fp_in, "%d", &array[i]);
}
fwrite(array, sizeof(int), DATA_NUM, fp_out);
fclose(fp_in);
fclose(fp_out);
return 0;
}
780デフォルトの名無しさん:2008/09/21(日) 12:22:45
>>777 (2)
#include<stdio.h>
#define DATA_NUM_MAX 100
int main(int argc, char *argv[]){
char *filename_in, *filename_out;
FILE *fp_in, *fp_out;
int data_num, array[DATA_NUM_MAX]={0};
if(argc!=3){
fprintf(stderr, "\nUsage: %s filename_in filename_out\n", argv[0]);
return 0;
}
filename_in=argv[1];
filename_out=argv[2];
fp_in=fopen(filename_in, "r");
if(fp_in==NULL){
fprintf(stderr, "\nERROR: %s cannot open.\n", filename_in);
return 1;
}
fp_out=fopen(filename_out, "wb");
if(fp_out==NULL){
fprintf(stderr, "\nERROR: %s cannot open.\n", filename_out);
fclose(fp_in);
return 2;
}
for(data_num=0;data_num<DATA_NUM_MAX;data_num++){
if(fscanf(fp_in, "%d", &array[data_num])!=1) break;
}
fwrite(array, sizeof(int), data_num, fp_out);
fclose(fp_in);
fclose(fp_out);
return 0;
}
781デフォルトの名無しさん:2008/09/21(日) 12:34:37
>>777 (3)
#include<stdio.h>
#define DATA_NUM_MAX 100
int main(int argc, char *argv[]){
char *filename_in, *filename_pos_out="p.txt", *filename_neg_out="n.bin";
FILE *fp_in, *fp_pos_out, *fp_neg_out;
int i, data_num, array[DATA_NUM_MAX]={0};
if(argc!=2){
fprintf(stderr, "\nUsage: %s filename_in\n", argv[0]);
return 0;
}
filename_in=argv[1];
if((fp_in=fopen(filename_in, "r"))==NULL){
fprintf(stderr, "\nERROR: %s cannot open.\n", filename_in);
return 1;
}
for(data_num=0;data_num<DATA_NUM_MAX;data_num++) if(fscanf(fp_in, "%d", &array[data_num])!=1) break;
fclose(fp_in);
fp_pos_out=fopen(filename_pos_out, "w");
fp_neg_out=fopen(filename_neg_out, "wb");
if(fp_pos_out==NULL || fp_neg_out==NULL){
fprintf(stderr, "\nERROR: %s or %s cannot open.\n", filename_pos_out, filename_neg_out);
return 2;
}
for(i=0;i<data_num;i++){
if(array[i]>0) fprintf(fp_pos_out, "%d ", array[i]);
if(array[i]<0) fwrite(&array[i], sizeof(int), 1, fp_neg_out);
}
fclose(fp_pos_out);
fclose(fp_neg_out);
return 0;
}
782デフォルトの名無しさん:2008/09/21(日) 14:47:15
>>781
ありがとうございます
(1)(2)(3)すべて実行すると、出力に「Usage: 自分のPCの名前 filename_in filename_out」と表示されましたが
書き込み用のファイルを確認した所、値が書き込まれておらず「・・・・」と点が並んでいるだけです
何故でしょうか・・・?
783デフォルトの名無しさん:2008/09/21(日) 17:14:29
>>782
バイナリエディタで開け
784デフォルトの名無しさん:2008/09/21(日) 21:13:43
>>783
01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00
05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00
09 00 00 00 0A 00 00 00 0B 00 00 00 0C 00 00 00
となっていてきちんと正常でした。お手数かけましてすみません
ありがとうございました!
785デフォルトの名無しさん:2008/09/22(月) 10:24:12
ん?それ負数じゃないな?
786デフォルトの名無しさん:2008/09/22(月) 17:57:52
1] 授業単元: C言語
[2] 問題文:auto関数とstatic関数の違いが分かるプログラムを作成しなさい、ただしfor文を使用する
[3] 環境
 [3.1] OS:Win
 [3.2] 任意
 [3.3] 言語: C
[4] 期限: 2008年9月25日13:00まで
できればプログラムは短くコンパイルして結果が長くならないようなものでお願いします
787デフォルトの名無しさん:2008/09/22(月) 18:05:58
変数じゃねーのか?
788786:2008/09/22(月) 18:40:59
ごめん 
関数じゃなくて変数でした^^;
789デフォルトの名無しさん:2008/09/22(月) 18:48:57
>>786

#include <stdio.h>

int main(int argc, char *argv[])
{
int i;
for (i = 0; i < 10; i++) {
int j = 0;
static int k = 0;
printf("j = %d, k = %d\n", j, k);
j++; k++;
}
return 0;
}

こんなんでいいか?
790デフォルトの名無しさん:2008/09/22(月) 18:50:12
>>786

#include <stdio.h>

void Count()
{
   auto int a = 0;
   static int s = 0;

   printf("a = %d, s = %d\n", a++, s++);
}

int main()
{
   int i;

   for(i = 0; i < 10; i++)
      Count();

   return 0;
}
791デフォルトの名無しさん:2008/09/22(月) 19:19:29
>>789>>790
あり
やっぱりC勉強するんだったら家に環境整えたほうがいいのかな
792デフォルトの名無しさん:2008/09/22(月) 19:45:42
言わずとも揃えるべき
793デフォルトの名無しさん:2008/09/22(月) 19:53:22
>>791
sshとかで学校につなげてプログラミングするとか手段はあるぞ。
794デフォルトの名無しさん:2008/09/23(火) 00:01:13
[1] 授業単元: ディジタル信号処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7731.txt
[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名: Microsoft Visual Studio 2005
 [3.3] 言語:C
[4] 期限: 9月24日

よろしくお願いします
795デフォルトの名無しさん:2008/09/23(火) 01:25:27
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):

ファイルを読み込んで読み込んだファイルの
コメントが関数内で閉じられているかチェックするツールを作る


#include <stdio.h>

int main(void)
{
   int a = 0;
   printf("aは%dです",a);
   /*コメント
   return 0;
}
/*プログラム終わり*/


↑こうなっていた場合に「/*コメント」と書かれている部分の行を指摘する
  /**/が関数内で閉じられているかのチェック
  実行はコマンドプロンプト
  出力はprintf

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C
[4] 期限: 9/26
[5] その他の制限: 制限は特にありません。
[6]備考:fopenした後からの処理でいいので教えてもらえると幸いです。
796デフォルトの名無しさん:2008/09/23(火) 01:48:26
[1] 授業単元: 情報
[2] 問題文:商品の値段と支払額を入力し、お釣りの貨幣の種類/枚数を表示。
   例) 2800円の商品に3000円支払い
    -> \10000:0枚 \5000:0枚 \1000:0枚 \500:0枚 \100:2枚 \50:0枚 \10:0枚 \5:0枚 \1:0枚
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: ?
 [3.3] 言語: C
[4] 期限: 9/26(金)
[5] その他の制限:if、printf、scanf、四則演算+-*/のみ習いました。シンプルな回答がベストです。
宜しくお願い致します。
797デフォルトの名無しさん:2008/09/23(火) 03:15:03
>>796
#include <stdio.h>

int kinds_of_money[] = { 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1, };
int num_of_money[sizeof kinds_of_money / sizeof kinds_of_money[0]] = { 0 };

int main()
{
int bill = 0;
int payment = 0;
int change = 0;
int i = 0;

puts( "請求額は?" );
scanf( " %d", &bill );
puts( "支払額は?" );
scanf( " %d", &payment );

if ( bill > payment ) {
puts( "足りんわwwww" );
return 1;
}
for ( i = 0, change = payment - bill; change > 0; i++ ) {
num_of_money[i] = change / kinds_of_money[i];
change = change % kinds_of_money[i];
}
for ( i = 0; i < sizeof kinds_of_money / sizeof kinds_of_money[0]; i++ ) {
printf( "\\%d:%d枚 ", kinds_of_money[i], num_of_money[i] );
}
return 0;
}
798デフォルトの名無しさん:2008/09/23(火) 03:53:24
799798:2008/09/23(火) 03:57:54
800798:2008/09/23(火) 04:02:30
>>795
もうぐだぐた。
>>799を訂正。

stack[count++] = line;

if ( ( count == 0 ) || ( stack[count - 1] != line ) ) {
stack[count++] = line;
}
801デフォルトの名無しさん:2008/09/23(火) 08:04:34
[1]C文解釈中級
[2]次の文章を行単位に並べ替えて、コンパイルが通るようにして、この文章を実行した時の処理仕様
を100字以内にまとめなさい。コンソールで実際にコンパイルして実行してみた結果も添えてメールしなさい。
idx = strlen(label);
#include <string.h>
p = strchr(label, *src);
if(p) count[p - label]++;
for( ; *src != '¥0'; src++){
p = strchr(buf, '¥n');
*dst = '¥0';
void alphabetsort(char *dst, const char *src)
for(i = 0; i < 256; i++) while(count[i]-- > 0){ *dst = label[i]; dst++; }
if(p) *p = '¥0';
int count[256] = {0}, idx, i;
return 0;
char buf[100], dst[100], *p;
alphabetsort(dst, buf);
int main(void)
{
}
#include <stdio.h>
fgets(buf, sizeof(buf), stdin);
char *p, label[256] = " aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
else{ label[idx] = *src; count[idx] = 1; idx++; }
printf("%s¥n", dst);
{
}
}
[3]1.Linux 2.GCC 3.C言語
[4] 2008/09/30 15:00までにメール
まったくわかりません。よろしくです
802デフォルトの名無しさん:2008/09/23(火) 09:40:04
>>801
#include <stdio.h>
#include <string.h>
void alphabetsort(char *dst, const char *src)
{
int count[256] = {0}, idx, i;
char *p, label[256] = " aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
idx = strlen(label);
for( ; *src != '\0'; src++){
p = strchr(label, *src);
if(p) count[p - label]++;
else{ label[idx] = *src; count[idx] = 1; idx++; }
}
for(i = 0; i < 256; i++) while(count[i]-- > 0){ *dst = label[i]; dst++; }
*dst = '\0';
}
int main(void)
{
char buf[100], dst[100], *p;
fgets(buf, sizeof(buf), stdin);
p = strchr(buf, '\n');
if(p) *p = '\0';
alphabetsort(dst, buf);
printf("%s\n", dst);
return 0;
}
803デフォルトの名無しさん:2008/09/23(火) 15:20:03
[1] 授業単元: if文がテーマです
[2] 問題文:アラビア数字を入力→ローマ数字に変換して表示
   〔ex.〕5→V 111→CXI 1000→M
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: ?
 [3.3] 言語: C
[4] 期限: 9/25(木)
[5] その他の制限:if、printf、scanf、+-*/%のみで簡潔に作成
804デフォルトの名無しさん:2008/09/23(火) 16:10:26
>>803
4はIV、IIIIどっち(減算則も考慮するのか)
805デフォルトの名無しさん:2008/09/23(火) 16:20:17
>>803
#include <stdio.h>
void func(int n, char I, char V, char X)
{
if (n == 1) printf("%c", I);
if (n == 2) printf("%c%c", I, I);
if (n == 3) printf("%c%c%c", I, I, I);
if (n == 4) printf("%c%c", I, V);
if (n == 5) printf("%c", V);
if (n == 6) printf("%c%c", V, I);
if (n == 7) printf("%c%c%c", V, I, I);
if (n == 8) printf("%c%c%c%c", V, I, I, I);
if (n == 9) printf("%c%c", I, X);
}
int main()
{
int tho, han, dec, mon, x;
printf("%s", "数字を入力してください\n");
scanf("%d", &x);
tho = x / 1000;
han = x % 1000 / 100;
dec = x % 100 / 10;
mon = x % 10;
func(tho, 'M', '*', '+');
func(han, 'C', 'D', 'M');
func(dec, 'X', 'L', 'C');
func(mon, 'I', 'V', 'X');
return 0;
}
806デフォルトの名無しさん:2008/09/23(火) 18:47:34
>>803 IVでもIIIIでもどちらでも構いません。

>>804 早速の対応有難うこざいます。
void funcなどは習っていないため、出来ればvoid main()で始まる形に
していただけると有り難いのですが…。よろしくお願いします。
807デフォルトの名無しさん:2008/09/23(火) 18:58:27
>>806
>if、printf、scanf、+-*/%のみで簡潔に作成
forやwhileもだめなんだよね
808デフォルトの名無しさん:2008/09/23(火) 19:33:32
>>806
とりあえず関数にまとめてた部分を展開しておいたよ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7734.txt
809デフォルトの名無しさん:2008/09/23(火) 19:34:58
もはや %c の意味がほとんどないなw
810デフォルトの名無しさん:2008/09/23(火) 22:53:42
[1]プログラミング実習
[2](1)単純洗濯法を用いて人口の多い県から順にソートせよ
  (2)バブルソートを用いて人口密度の大きい県から順にソートせよ
  北海道    83461     5692    
  青森     9606     1482
  東京     2186     11772
  愛知     5150     6868
  大阪     1892     8797
[3] windows/dev-c++4.9.9.2/cのみ

[4] 9月中

[5] 配列・if・while・for・プロトタイプ関数まで既習
811デフォルトの名無しさん:2008/09/23(火) 22:55:56
用語がwww
812デフォルトの名無しさん:2008/09/23(火) 22:56:38
>>810
そのデータの取り込み方は自由なの?
ソースに埋め込んじゃっておk?
標準入力にすべき?
813デフォルトの名無しさん:2008/09/23(火) 23:10:02
バブルで洗濯?
814デフォルトの名無しさん:2008/09/23(火) 23:12:00
洗濯→選択ですね すみません
標準入力でお願いします

815デフォルトの名無しさん:2008/09/23(火) 23:27:52
県じゃないのがある…という突っ込みはナシ?
816795:2008/09/24(水) 01:52:00
>>800
考えてもらいありがとうございます。

しかし、そのプログラムだと
#include <stdio.h>

int main(void)
{
   int a = 0;
   printf("aは%dです",a);
   /*コメント1
   /*コメント2*/

   /*コメント3
   return 0;
}
/*プログラム終わり*/

となったときに「/*コメント1」の行も検出してしまう
と思ったのですが、平気でしょうか?

わざわざ考えてもらったのに
文句が多くてすみません。
817デフォルトの名無しさん:2008/09/24(水) 02:05:03
[1] C
[2] CSVファイルを構造体へ全て格納後、別ファイルへ出力せよ。
 (CSVファイルフォーマットは任意とし、行数は可変とする)
[3] WIN/gcc/C
[4] 2008/09/26

CSV読み込み、出力は出来たのですが……
CSVの中身を一度全て格納しなければならず、そこで困っております。
構造体の配列を定義して、足りなくなったらreallocして行けばいいのしょうか?
818デフォルトの名無しさん:2008/09/24(水) 02:16:40
>>817
読み込みができてるならそのサイズでmallocすればいいじゃないか
819デフォルトの名無しさん:2008/09/24(水) 02:28:36
>>818
なんと言いますか、C++などのArrayみたいなことをしたいのです。
構造体の配列にCSVファイルを全部保存したいのですが、
ファイル行数が可変のために、行数に応じて構造体の配列数を増やして行く方法しかないのかなと疑問に思っております。
ファイルが大きいとreallocするときに時間がかかりそうなので……
820デフォルトの名無しさん:2008/09/24(水) 02:35:32
>>819
Cで可変長配列的なことしたいなら、malloc/reallocするしかないよ。
今回の件なら、最初に一度ファイル全体を空読みして、行数だけ数えてから行数分mallocして、
2度目のファイル読みで格納ってすれば、reallocの無駄は省ける。
けど、代わりにファイル2度読みのコストがかかるから、どちらのコストをとるかだね。
821デフォルトの名無しさん:2008/09/24(水) 02:41:49
100Kずつ確保
822デフォルトの名無しさん:2008/09/24(水) 02:42:45
配列が連結していないといけない訳でもあるか?
823デフォルトの名無しさん:2008/09/24(水) 02:47:52
配列で無きゃだめなの?リストを使う問題かと思ったんだが
824デフォルトの名無しさん:2008/09/24(水) 02:54:00
>>820
やはり可変だと、メモリ確保し続けるか、必要分を確認してとかではないと
辛いみたいですね、ありがとうございます。
>>821
無駄なメモリ領域を出来るだけ省きたいのです
>>822
特にはないですが、ポインタの配列にするほうがいいでしょうか?
>>823
Cにリストってありましたっけ?
825デフォルトの名無しさん:2008/09/24(水) 02:55:32
無駄を省きたいのなら10Kずつ確保でいいだろう。
たらなくなったら10Kずつ増やしていく
826デフォルトの名無しさん:2008/09/24(水) 03:00:49
>>825
10Kに満たないと勿体なくないですか?
気分の問題だと思うのですが、ピッタリにしたいんです。

>>823
リストを調べました、リスト構造のことで間違いないでしょうか?
難しそうですが、これならやりたいことが出来そうです。
ありがとうございました。

>レスしてくださった方々へ
malloc/reallocなら簡単そうですが、やはりコスト的な問題があるようなので、
難しそうですがリスト構造を勉強して、それで対応してみます。
深夜にもかかわらず、助けていただいてありがとうございました。
827デフォルトの名無しさん:2008/09/24(水) 03:02:49
まあ、他言語の可変長配列だって結局malloc/reallocと同じことしてるわけだから
reallocをそんなに嫌わないであげてください><
828デフォルトの名無しさん:2008/09/24(水) 03:04:37
>>826
そしたら、あらかじめファイルサイズを求めておいて、バイナリでそのまま読み込めよ
ぴったりだぞ
829デフォルトの名無しさん:2008/09/24(水) 03:05:42
>>826
これは実装依存だが、malloc(13);とかやったとしても実際の確保領域は16バイトだったりするよ。

嫌なら要素一回ずつreallocするしかないけど、パフォーマンスが落ちるし、無駄が出るよ。
830デフォルトの名無しさん:2008/09/24(水) 03:07:09
ファイルの行数を先に取得して一括でmallocすればいいことじゃないのか?
可変にこだわる意味がわからないのだが

ところでC++のArrayってなんだ?
std::vectorのことならかなり豪快にメモリ確保してるぞ
831デフォルトの名無しさん:2008/09/24(水) 03:13:06
こういう時って、やっぱりみんなテラバイト超のファイルもプロセスできるように作ってる?
832デフォルトの名無しさん:2008/09/24(水) 03:17:55
>>827
行数増えた場合大変なことになりそうなのです
>>828
ファイルそのままだと使いづらいじゃないですか……
って確かに、そう考えると10Kつづ確保して行ってもいい気がしてきました。
>>829
mallocは指定した分だけ確保だと思ってました。
実際は(多少?)誤差があるんですね、勉強になりました。
>>830
それのことです。
なるほど……便利だと思ってたのですが、裏では結構あくどいことしてるんですね。
833デフォルトの名無しさん:2008/09/24(水) 10:42:40
>>832
あくどいっつーかきっちり確保するよりおおむね効率がいいからだな
誤解するなよ
834デフォルトの名無しさん:2008/09/24(水) 14:07:01
[1] 授業単元:映像処理
[2] 問題文(含コード&リンク):太陽系プログラム
planet.cのプログラムを以下のように発展させよ。
@オブジェクトの色を変更する
Aオブジェクトをソリッドにする
B他のオブジェクト形状を使用する。(例:惑星を立方体にする)
C隠面処理を行う。
D惑星に(その惑星の周囲をまわる)衛星をつける。
E2個のパーツを組み合わせたオブジェクトを作る。(例:土星)
F色、光沢などの表面属性を時間経過で変化するようにする。(例:時間とともに色が自動的に変化する)
G複数の軌道面がある。

///planet.c///
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7735.txt

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:C
[4] 期限:9月28日

丸投げです。よろしくお願いいたします。
835デフォルトの名無しさん:2008/09/24(水) 16:19:49
836デフォルトの名無しさん:2008/09/24(水) 17:14:47
ついでにmallocも効率やら扱いやすさのためであって意図的。
誤差というべきではない。
837834:2008/09/24(水) 17:28:33
>>835
提出の条件がGまで完成したプログラムですので、
できればGまで作って頂けませんでしょうか。
せっかく作って貰ったのに、すいません・・・
838デフォルトの名無しさん:2008/09/24(水) 17:38:09
学校でOpenGLなんてやるのか
へーおじさんびっくりだわ
839デフォルトの名無しさん:2008/09/24(水) 17:59:17
どうせGLUTだろ
840835:2008/09/24(水) 18:26:06
>>837
暇で面白そうだからやっただけ
気が向いたら残りもやるかもしれないがあてにしないほうがいい
841798:2008/09/24(水) 22:42:13
>>816
そういうのを検出するプログラムじゃないの?
/*コメント1の行の検出はNGで
/*コメント3の行の検出のみやれってこと?
その場合、検出しなきゃいけない行の基準がわからないんだけど?

>>795で示している例でも/*コメントから始まって、プログラム終わり*/で
コメントはちゃんと閉じているよね?
842デフォルトの名無しさん:2008/09/24(水) 23:19:18
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
「t[5]に5つの整数が格納されている。これを昇順にソートするプログラムを示せ。
ソートのアルゴリズムは何でもよい事とする。」
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:CPad for Borland C++ Compiler
 [3.3] 言語:C++
[4] 期限:9/25まで

これをバブルソートで作る場合のプログラムをお願いしますm(_ _)m
843デフォルトの名無しさん:2008/09/24(水) 23:30:07
>>842
#include<stdio.h>
int main()
{

int t[] = {2, 40, 2, 554, -4}, i, j, tmp;
int n = sizeof(t) / sizeof(int);
fputs("前 : ", stdout);
for (i = 0; i < n; ++i) {
printf("%d ", t[i]);
}
putchar('\n');

for (i = 0; i < n - 1; i++){
for (j = n - 1; j > i; j--) {
if (t[j] < t[j - 1]) {
tmp = t[j];
t[j] = t[j-1];
t[j-1] = tmp;
}
}
}
fputs("後 : ", stdout);
for (i = 0; i < n; ++i) {
printf("%d ", t[i]);
}
putchar('\n');
return 0;
}
こんなんでいかが?
844デフォルトの名無しさん:2008/09/24(水) 23:54:04
>>843
ありがとうございます><
845795:2008/09/25(木) 23:03:51
>>841
ごめんなさい。
説明不足だったかもしれません。
一応、
>>795の最初のほうに書いてあるように
「コメントが関数内で閉じられているかチェックする」
ようにしないといけないんです。
それがどうしても難しくてわからないんです。
本当に質問する立場でえらそうにしてごめんなさい。
どうやったら、関数内でコメントが閉じられているか判断できるでしょうか?

846デフォルトの名無しさん:2008/09/26(金) 09:47:53
どっちにしろ>>798では
printf("/*\n");
とか出てきたら破綻する。
847デフォルトの名無しさん:2008/09/26(金) 15:06:54
[1] 授業単元:課題自由研究
[2] 問題文(含コード&リンク):ポーカーのプログラム製作
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語:C++
[4] 期限:特になし
[5] その他の制限:C++であること

ない脳みそで考えたのですが、JOKERの効果と役の設定がわかりません。
今の所製作してあるプログラムの駄目出しもお願いします。
848デフォルトの名無しさん:2008/09/26(金) 15:11:00
// 乱数の初期値のセット
srand((unsigned) time(NULL));
// 0〜9 までの乱数を 1回生成
for (i=0; i<5; i++) {
n = rand() % 4; // 10は0〜9の要素数 マーク判定用
m = rand() % 11; // カードの数値判定用
//マーク判断、数値の判定
if(n==0){sprintf(str, "H %d " , m);
TextOut(hdc,50,20*i,str,(int)strlen(str));
a=m;}
else if(n==1){ sprintf(str, "D %d " , m);
TextOut(hdc,50,20*i,str,(int)strlen(str));
b=m;}
else if(n==2){ sprintf(str, "C %d " , m);
TextOut(hdc,50,20*i,str,(int)strlen(str));
c=m;}
else if(n==3){ sprintf(str, "S %d " , m);
TextOut(hdc,50,20*i,str,(int)strlen(str));
d=m;}
if(m==0){//機能してないかも・・・・・・
sprintf(str, "JOKER");
TextOut(hdc,50,20*i,str,(int)strlen(str));
}}
z1=a;z2=b;z3=c;z4=d;
849デフォルトの名無しさん:2008/09/26(金) 15:11:52
//役の判定 a b c d z
if(a==b || a==c || a==d || b==c || b==d || c==d || a==z1 || d==z2 || c==z3 || d==z4){
sprintf(str, "ワンペア!!");
TextOut(hdc,50,100,str,(int)strlen(str));}
else if(a==b==c || b==c==d || c==d==a || z1==a==b || z2==a==b || z2==b==c ||z3==b==c || z3==c==d || z4==d==a || z1==d==a){
sprintf(str, "スリーカード!!");
TextOut(hdc,50,100,str,(int)strlen(str));}
else {sprintf(str, "ノーペア!!");
TextOut(hdc,50,100,str,(int)strlen(str));}
850デフォルトの名無しさん:2008/09/26(金) 15:27:42
GUI?
851834:2008/09/26(金) 15:31:08
>>834
どなたかお願いできませんでしょうか。
852デフォルトの名無しさん:2008/09/26(金) 15:50:51
>>849
これはひどい
853デフォルトの名無しさん:2008/09/26(金) 16:53:37
[1] 授業単元:C
[2] 問題文(含コード&リンク):
数値が文字列として開業で区切られたデータファイル(例:音楽をA/D変換により取り込んだデータ)
の処理を考える。データファイルがデータのみである場合に、その
データファイルに含まれるデータ総数を数えるプログラムを作成しなさい。
[3] 環境
 [3.1] OS:fedora
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:9月末

よろしくお願いします
854デフォルトの名無しさん:2008/09/26(金) 17:01:31
>>853
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE * fp;
int x, n = 0;
fp = fopen("data.txt", "r");
while (fscanf(fp, "%d", &x) == 1) n++;
printf("%d個です\n", n);
fclose(fp);
return 0;
}
855デフォルトの名無しさん:2008/09/26(金) 17:06:40
>>854
ありがとうございます!
856853:2008/09/26(金) 17:29:40
すいません、続けてですがこちらもお願いします。


[1] 授業単元:文字列の操作
[2] 問題文(含コード&リンク):
各人の氏名を、性と名にわけてキーボードからの入力で2つの変数に格納し
2つの文字列を連結することで、性と名の区切りに1つの空白を入れて
表示するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:fedora
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:9月末
857デフォルトの名無しさん:2008/09/26(金) 17:37:25
>>856
#include <stdio.h>
int main()
{
char first[2000], family[2000], full[4000];
puts("姓を入力してください");
scanf("%1999s", family);
puts("名を入力してください");
scanf("%1999s", first);
sprintf(full, "%s %s", family, first);
puts(full);
return 0;
}
858853:2008/09/26(金) 17:42:29
>>857

ありがとうございます!助かりました!
859795:2008/09/27(土) 02:32:05
すみません。
誰か
>>795
のソースを作ってくれないでしょうか。
ここ数日、考えても本当にわからなくて。
860デフォルトの名無しさん:2008/09/27(土) 03:17:27
>>859
どういうものを作ればいいか分からない
もう少し分かりやすく説明してくれないかな
861デフォルトの名無しさん:2008/09/27(土) 03:25:21
>>859
もうちょいパターンを洗い出して整理してはどうか。まずそこが出来てないように思う。

/* OK パターン */

/*
/* OK パターン */
hoge("/* OKパターン */");

int main(void)
{
/* NG パターン
  return 0;
}
/*

こんなもん??
862デフォルトの名無しさん:2008/09/27(土) 04:02:28
結構厄介だな。
普通コンパイラなんかだと最初にコメントを除去するからな。
コメントそのものとコードとの位置関係をチェックするのか…。
863デフォルトの名無しさん:2008/09/27(土) 04:16:05
真面目にやろうと思えばコンパイラのパーサに近いものを作らなきゃならないし
宿題レベルの問題じゃないと思うけどね。

>>859
コメントの中に"}"があれば関数が閉じてない可能性は高くなるけれど
以下のプログラムを入力した場合どんな出力になってほしい?

void main(void)
/* {が関数の始まり */
{
/* }まで関数の処理を記述する (}を含むけれど正しいコメント) */

/* 関数の返り値 (コメント閉じ忘れで本来検出したい部分)
return 0;
}
/* プログラムの終了 */
864デフォルトの名無しさん:2008/09/27(土) 04:31:28
「関数」にはこだわらないほうがいいんじゃないかな。
関数と構造体と配列の初期化と単なるブロックの { } を区別するのはそれこそパーサーになってしまう。
とりあえずは全部ひっくるめて { } とコメントだけに注目して作ったほうがいいと思う。
865デフォルトの名無しさん:2008/09/27(土) 04:39:48
}と};で区別すればなんとかなりそうな
C言語で関数をブロックでくくる事ってできたっけ?
866デフォルトの名無しさん:2008/09/27(土) 12:09:45
整数型配列 a[5]を宣言する。
配列aに適当な整数を代入する。
配列から最大値を求め画面表示する。
#include<stdio.h>

main()
{
int a[5];
int maxdata;
int i;

a[0]=12;
a[1]=3;
a[2]=40;
a[3]=10;
a[4]=30;

maxdata=a[0];

for(i=1;i<5;i++)
{
if(?)
{
maxdata=a[i];
}
}
printf("最大値:%d",maxdata);
}

?の部分がわかりません。
お願いします。
867デフォルトの名無しさん:2008/09/27(土) 12:20:07
a[i] > maxdata
868デフォルトの名無しさん:2008/09/27(土) 12:22:37
>>867
ありがとうございました。
869デフォルトの名無しさん:2008/09/27(土) 12:37:03
お礼のおっぱいはまだかね?
870デフォルトの名無しさん:2008/09/27(土) 14:10:17
>>865
グローバルな領域に何も無い空文(;だけ)があっても
エラーにならないよ。
int main()
{
・・・
}; /* 関数の終わりと空文と解釈 */
871デフォルトの名無しさん:2008/09/27(土) 17:33:32
【質問テンプレ】
[1] 授業単元:プログラミング言語演習U
[2] 問題文(含コード&リンク): 住所録管理を行うプログラム。
データは「氏名」「住所」「電話番号」「メールアドレス」「グループ」を持つようにする。
データの登録、変更、削除、検索ができるようにする。
登録の際、「氏名」は必須とし、他の項目は空白でも良しとする。
検索は、「氏名」「住所」「グループ」で行えるようにする。
データは、テキストファイルに書き込み、次回実行する際、それを読み込むようにする。
[3] 環境
 [3.1] OS:Fedora Core 6
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:9月中
[5] その他の制限:特に無し
872795:2008/09/27(土) 19:14:40
>>860
そうですね。
>>861さんのいうように

/* OK パターン */

int main(void)
{
/*
/* OK パターン */
hoge("/* OKパターン */");
}

int main(void)
{
/* NG パターン
  return 0;
}
/*

int main(void)
{
/* NG パターン
  return 0;
}
*/

の5パターンで考えています。

本当に難しすぎますよね。
課題出した先生も難易度高すぎだと思いました。
873デフォルトの名無しさん:2008/09/27(土) 19:31:26
>>859
つ {で+1 }で-1
874デフォルトの名無しさん:2008/09/27(土) 19:33:12
パターンじゃなくてステートで考えた方がいい。
875デフォルトの名無しさん:2008/09/27(土) 19:49:41
これはOK?
int main(void)
{
/*}
int hoge(void)
{
/* } */
 return 0;
}
876デフォルトの名無しさん:2008/09/27(土) 20:42:46
#define BIGIN {
#define END }
みたいにされてたり、
その後で#undef BIGINされてたりして、
で、それらが#ifdefやら#ifndefやらに囲まれてて、
その間にパズルみたいにコメントがはりめぐらされたりしてるどうしようもないコードも
面倒みなきゃいけないならプリプロセッサ部分も作らなきゃいけないから大変だな。
877デフォルトの名無しさん:2008/09/27(土) 21:31:44
パターンもステートも使って考えると
対象ファイルを読みながら/**/で囲まれた部分を
検出したら囲まれた部分は出力せず
その直後の行まで別ファイルに書き出し、
その時点でそのファイルを子プロセスで
Cコンパイラにコンパイルさせ、エラーコー
ドがunexpected endof fileでなければ
コメントエラーであると判断して、
その行を出力する
でオK?
878デフォルトの名無しさん:2008/09/27(土) 21:34:25
>Cコンパイラにコンパイルさせ、エラーコードが
そこを作る課題だろうが。
879デフォルトの名無しさん:2008/09/27(土) 21:43:18
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):
ファイルを読み込んで読み込んだファイルが
C言語の文法に合致しているかチェックするツールを
作る。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C
[4] 期限: 本日中
[5] その他の制限: 制限は特にありません。
[6]備考:fopenした後からの処理でいいので教えてもらえると幸いです。
880デフォルトの名無しさん:2008/09/27(土) 21:46:58
字句解析と構文解析をするプログラムか
難易度高いな
881デフォルトの名無しさん:2008/09/27(土) 21:54:10
既存のツールを利用するという >>877 のアイデアはおもしろいと思うぞぬ
882デフォルトの名無しさん:2008/09/27(土) 22:01:40
>>879を本日中っていうかあと2時間でバグなく動かせる奴ってすごいよな。
883デフォルトの名無しさん:2008/09/27(土) 22:11:52
>>879
難易度高いぞそれ

つshellexec
884デフォルトの名無しさん:2008/09/27(土) 22:15:27
>>876
プリプロセッサを展開させるならboost::waveがあるぞ
885デフォルトの名無しさん:2008/09/27(土) 22:16:42
>>882
宿題の期限が土曜って
886デフォルトの名無しさん:2008/09/27(土) 22:37:00
>>879
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
int i, ret_code;
char cmd[1024], *filename_src, *filename_tmp="hoge.tmp";
FILE *fp_tmp;

for(i=1;i<argc;i++)
{
filename_src=argv[i];

fp_tmp=freopen(filename_tmp, "w", stderr);
if(fp_tmp==NULL)
{
fprintf(stdout, "\nERROR: temporary file cannot open.\n");
exit(1);
}
sprintf(cmd, "gcc -c %s", filename_src);
ret_code=system(cmd);
freopen("con", "w", fp_tmp);
remove(filename_tmp);

if(ret_code) printf("\nInvalid source code. %s\n", filename_src);
}

return 0;
}
887デフォルトの名無しさん:2008/09/27(土) 23:15:07
>>879
その問題は例えば「{}」の数があってるかだけ数えるとか
そんな条件ついてたりしないか?

じゃなきゃ無理だろ
888デフォルトの名無しさん:2008/09/28(日) 01:01:38
>>871
最近作ったがコードが見つからない。
作る時間もないのでその時のことを。
構造体とキューを使うとすぐできた。
 
889デフォルトの名無しさん:2008/09/28(日) 01:11:22
>>871のものです。

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

自力でここまでやってみましたが、うまく実行できません。
それに、このプログラムでは、「氏名」を必須、他の項目は空白で良しという条件が満たされてません。

何卒アドバイスのほうをよろしくお願いします。
890デフォルトの名無しさん:2008/09/28(日) 01:51:53
氏名だけは入力長0だったら再入力させれば?
891デフォルトの名無しさん:2008/09/28(日) 09:36:29
>>889
宿題ぐらいのレベルなら、入力部を

int c = 0;

while (c == 0){
printf("氏名 >> ");
fgets(data[n].name, N, stdin);
c = strlen(data[n].name);
data[n].name[c] = '\0'; //最後の改行をNULL文字にする
}

で十分でしょう。
892デフォルトの名無しさん:2008/09/28(日) 10:18:51
>>891
たいした問題じゃないけどそれだとN-1文字以上読み込んだときに一文字減るね
893893:2008/09/28(日) 10:46:03
[1] 授業単元:機械工学学生実験(デジタル信号処理)
[2] 問題文(含コード&リンク):
※長いのでこの書き込みの下に分けて書き込みします。すみません。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C
[4] 期限: 明後日
[5] その他の制限: ないです。
[6]備考:C言語を習ったことがないです。C++を大学1年次に半年だけ授業でやりました。
    今回の実験内容はTMS320C6713 DSKボードを使用して、マイク入力した音声を正弦波に変換し、
    スピーカで出力するまでのプログラムの流れをPCを操作しながら学ぶというものでした。

上記の問題をパワーポイント2枚にまとめなければならないので、このプログラムの解説をお願いいたします。
特に/* main */以下をできる範囲でお願いいたします。
894893:2008/09/28(日) 10:52:40
[2] 問題文(含コード&リンク):
以下のプログラム中の割り込み処理についてマイクからスピーカまでのデータの流れに沿って説明せよ。

/* Include files */
#include <csl.h>
#include <csl_mcbsp.h>
/* Declarations */
#define DRR 0x01900000 // McBSP1 receive address
#define DXR 0x01900004 // McBSP1 transmit address
// #define BUFF_SIZE = 256
/* Prototypes */
extern void dsk6713_init(void);
interrupt void voice_change(void);
/* References */
extern MCBSP_Handle hMcbspData;
/* Global Variables */
#pragma DATA_SECTION(buff1,"myData");
short buff1[256] ;
short buff0[256] ;
short I= 0x0000 ;
short y[3] = {0, 0x15AE, 0};
short a1 = 0x786F; /* 2*cosWT */
// short a1 = 0x7FFF; /* 2*cosWT */
// short a1 = 0x8000 ; /* 2*cosWT */
volatile short *drr = (volatile short *)DRR;
volatile short *dxr = (volatile short *)DXR;
895893:2008/09/28(日) 10:54:25
/* main */
void main(void)
{
dsk6713_init();
MCBSP_write(hMcbspData, 0);
while(1){}
}
short amari( short i )
{
// short i ;
short j ;
//j = i/256 ;
j = i - (i/256)*256 ;
// j = i ;
    return(j);
}
interrupt void voice_change(void)
{
// short tmpI ;
    y[0] = ((int)a1*(int)y[1]>>14) - y[2];
y[2] = y[1];
y[1] = y[0];
*dxr = ((int)y[0] *(int)(*drr)) >> 14;
    I = amari( ++I );
buff1[ I ] = *dxr ;
buff0[ I ] = y[0] ;
// buff1[ I ] = y[0] ;
}

見づらくてすみません。894-895が今回与えられたソースの全てです。
896デフォルトの名無しさん:2008/09/28(日) 10:54:58
6713のコンパイラのlong intが32bitじゃなくてはまったのもいい思い出。
897834:2008/09/28(日) 14:34:10
何度もすみません。
明日の昼12時まででしたら、提出遅れの形で提出できますので、
>>834 どうかお願いいたします。
配点大きな課題ですので、本当に困ってます…
よろしくお願いします。
898デフォルトの名無しさん:2008/09/28(日) 14:37:02
罵声を浴びるの覚悟でOpenGLのスレとかで聞いた方がいいんじゃないの?
899デフォルトの名無しさん:2008/09/28(日) 15:07:04
止めてやれよ、こういうの送り込むの
900デフォルトの名無しさん:2008/09/28(日) 15:19:59
ところでOpenGLの本ぐらい読んだの?
901デフォルトの名無しさん:2008/09/28(日) 15:55:21
>>897
よくわからんが、軌道計算とかもするの?
902834:2008/09/28(日) 16:15:15
>>900
最近始めたので、まだ教員の配布資料しか手元にありません。
その資料にもOpenGLの特徴とか投影法?の仕組みしか載っていませんので、
プログラムについては完全にお手上げ状態です…
今夜にでも書店行って、買い足そうと思います。

>>901
軌道計算とは何でしょうか?
一応、明日までに教員の前で作成したプログラムを実行し、
Gまでの条件が満たされた動画であればOKという課題です。
適当な返事ですみません…
903デフォルトの名無しさん:2008/09/28(日) 16:20:07
1から順に課題をクリアしていけば到達できるようになってるね。
904デフォルトの名無しさん:2008/09/28(日) 16:35:05
>>902
少なくとも問題に軌道面という単語はあるのだが。
905デフォルトの名無しさん:2008/09/28(日) 19:07:59
[1] 授業単元: cプログラミング基礎(一般的な入出力)
[2] 問題文(含コード&リンク): c言語で読み出しファイルからファイル位置と読みだすバイト数を指定し読み出
し、違う名前のファイルに書き出すプログラムを作成せよ。ただし読み出しファイル、読みだすデータ位置、読みだすバイト数
書き出すファイル名はDOS窓で指定できるようにすること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: c
[4] 期限: 2008年9月28日23:59まで
[5] その他の制限: 大学一年レベルの簡単でなるべく分かりやすいように書くこと。
906デフォルトの名無しさん:2008/09/28(日) 19:30:46
>>905
大学1年レベルって結構高レベルな気がするんだけど
初めてC言語習いましたってレベルのことなのか?
907デフォルトの名無しさん:2008/09/28(日) 19:34:34
大学1年で初めて習い始めたというレベルだそうです。
ちなみに当方は前期の講義をまったく覚えておらず何もできない状態です。
908デフォルトの名無しさん:2008/09/28(日) 19:39:54
>>905
#include <stdio.h>
int main()
{
FILE *fpr, *fpw;
char filename_r[1000], filename_w[1000];
char data[30000];
int a, n;
puts("読み込むファイル名");
scanf("%s", filename_r);
puts("書き込むファイル名");
scanf("%s", filename_w);
puts("読み出す位置");
scanf("%d", &a);
puts("読み出すバイト数");
scanf("%d", &n);
fpr = fopen(filename_r, "rb");
fpw = fopen(filename_w, "wb");
fseek(fpr, a, SEEK_SET);
fread(data, 1, n, fpr);
fwrite(data, 1, n, fpw);
fclose(fpw);
fclose(fpr);
return 0;
}
909デフォルトの名無しさん:2008/09/28(日) 19:53:39
ありがとうございます。早速ためしに動かしてみますね。
910デフォルトの名無しさん:2008/09/28(日) 22:06:51
911834:2008/09/28(日) 22:35:36
>>904
確認しましたがFGは難しいので、
省いても良いそうです。減点ですけど…
Cまでは作って頂けましたので、残りDEお願いできませんでしょうか。
912デフォルトの名無しさん:2008/09/28(日) 22:44:19
>>847
ルール合ってるか分からん、表示その他結構色々適当、C++じゃない、
といった感じなんで参考にもならんかもですが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7741.txt
913デフォルトの名無しさん:2008/09/28(日) 23:20:47
>>910
こんな方法があったんですね。只今用語を調べながら
どうなっているか理解に努めています。ありがとうございました。
914デフォルトの名無しさん:2008/09/28(日) 23:32:12
[1] 授業単元: 初級c++
[2] 演技のよくない数字4と9をはずして、1,2,3,5,6,7,8,10・・・・と数える「49抜き」があります。
この49抜きの数は10個の数字のうち4と9が無いので8進数と同じように考えることができます。
ここで、10進数の符号なし整数を渡してそれに対応する49抜きの数値を標準出力する関数void printfwo49(unsigned int n)
を以下のように空欄を埋め完成させなさい。

void printwo49(unsigned int n)
{
char buf[]="01235678";
if(空欄){ //nが8ならば上位の桁がある
printwo49( 空欄 );//上位の桁の処理を行う。
}
putchar(buf[n % 8]);
}

 [3.1] OS:xp
 [3.2] コンパイラ名とバージョン:vc6.0
 [3.3] 言語: c++
長文申し訳ありません。
よろしくおねがいいたします。
915デフォルトの名無しさん:2008/09/28(日) 23:35:20
>>914
n>8
n/8
916デフォルトの名無しさん:2008/09/29(月) 00:21:15
n>=8
じゃないかな
917デフォルトの名無しさん:2008/09/29(月) 00:31:21
>>834 7番 これじゃ手抜きすぎ?
glColor3d((double)year / 360.0, (double)day / 360.0, 1.0);
918デフォルトの名無しさん:2008/09/29(月) 00:39:21
919914:2008/09/29(月) 00:51:40
ありがとうございます
920デフォルトの名無しさん:2008/09/29(月) 00:51:51
921デフォルトの名無しさん:2008/09/29(月) 00:57:17
Borland c++のunsigned int 型は4バイトの大きさがあります。4バイトというと、
ちょうどIPv4でのIPアドレスのバイナリ表現と同じ大きさになります。そこで、
unsigned int型の引数を渡し、それをxxx.xxx.xxx.xxxという形式で標準出力に
出力する関数void printIPAddress(unsigned int address)を以下のように書きました。
空欄を埋める正しい答えを選択せよ。

void printIPAddress(unsigned int address)
{
printf("%d.%d.%d.%d",
(address & 空欄)>>24,
(address & 空欄)>>16,
(address & 空欄)>> 8,
(address & 空欄));
}

@ 0x000000ff A 0x0000ff00 B 0x00ff0000
C 0xff000000 D 0xff00000000

どうかよろしくおねがいします
922デフォルトの名無しさん:2008/09/29(月) 01:26:34
c++の問題です。よろしくお願いいたします。

ネットワークのルートアドレスとネットマスク、そしてチェックしたいIPアドレスを
渡して、チェックしたいIPアドレスがそのネットワークに含まれているかどうかを
チェックする関数int checkIPAddress(unsigned int root,unsigned int mask,unsigned
int address)を以下のように書いた。空欄をうめよ。
ただし、あるIPアドレスがネットワークに含まれているかどうかチェックするには、
ネットワークのルートアドレス(root)と、チェックしたいIPアドレス(address)の
ネットワークIDを比較してその値が同じであったら、そのネットワークに含まれていると
判定します。IPアドレス中のネットワーク部は、ネットマスクのビットパターンが1である部分と
考えます。IPアドレスからネットワークIPを取り出すには、IPアドレスをネットマスクの
ビットごとのANDを取り出します。詳細はインターネットの検索エンジンで「ネットマスク」
をキーワードに調べてください。

int checkIPAddress(unsigned int root,unsigned int mask,unsigned int address)
{
return(root 空欄@ 空欄A)==(root 空欄B 空欄C)
}

長文で申し訳ありません。よろしくおねがいします
923デフォルトの名無しさん:2008/09/29(月) 02:05:40
>>834
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7742.txt
とりあえず全部満たしたんじゃないかな
二個のオブジェクトで作ったのは、みかんっぽいなにか
924デフォルトの名無しさん:2008/09/29(月) 02:19:26
>>921
C
B
A
@
925デフォルトの名無しさん:2008/09/29(月) 02:26:32
>>922
>return(root 空欄@ 空欄A)==(root 空欄B 空欄C)
ここ問題あってる?
return(root 空欄@ 空欄A)==(address 空欄B 空欄C)
じゃない?
だとしたら
& mask & mask
926922:2008/09/29(月) 02:30:48
>>925さま
925さまのおっしゃる通りに間違えていました
ただしくは

ネットワークのルートアドレスとネットマスク、そしてチェックしたいIPアドレスを
渡して、チェックしたいIPアドレスがそのネットワークに含まれているかどうかを
チェックする関数int checkIPAddress(unsigned int root,unsigned int mask,unsigned
int address)を以下のように書いた。空欄をうめよ。
ただし、あるIPアドレスがネットワークに含まれているかどうかチェックするには、
ネットワークのルートアドレス(root)と、チェックしたいIPアドレス(address)の
ネットワークIDを比較してその値が同じであったら、そのネットワークに含まれていると
判定します。IPアドレス中のネットワーク部は、ネットマスクのビットパターンが1である部分と
考えます。IPアドレスからネットワークIPを取り出すには、IPアドレスをネットマスクの
ビットごとのANDを取り出します。詳細はインターネットの検索エンジンで「ネットマスク」
をキーワードに調べてください。

int checkIPAddress(unsigned int root,unsigned int mask,unsigned int address)
{
return(root 空欄@ 空欄A)==(address 空欄B 空欄C)
}

でした
927デフォルトの名無しさん:2008/09/29(月) 09:33:57
テキストファイルを読み込んで次の出力を得る。
(・・・)内の文字は、そのまま出力する。
ただし\に続く数字3文字は8進数として、バイナリ出力する。
<・・・>内の文字は、2桁ごとに16進数としてバイナリ出力する。
0からFに現れない文字は無視する。
928デフォルトの名無しさん:2008/09/29(月) 17:14:36
[1] 授業単元: if文
[2] 問題文(含コード&リンク): 正の整数を入力すると、それをローマ数字で表示するプログラムを作りなさい。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio .Net 2003
 [3.3] 言語: C
[4] 期限: 9月30日16:00まで
[5] その他の制限: ほとんど習ってません(Cとは?・int・printf・scanf・if・else←今ここ)

よろしくお願いします。
929デフォルトの名無しさん:2008/09/29(月) 17:17:10
>>928
>>805
>>808
関数ならってないなら>>808でどうぞ

930デフォルトの名無しさん:2008/09/29(月) 17:20:27
>>929
どうもありがとうございました。
931834:2008/09/29(月) 17:57:31
>>923
条件の多い課題をありがとうございました。
配点が大きな課題だったので何とか提出でき、助かりました。
本当にありがとうございます。
932デフォルトの名無しさん:2008/09/29(月) 21:59:29
[1] 授業単元:Cープログラミング
[2] 問題文:(含コード&リンク): 配列を用いて0〜9の16個の数値を入力
  し、入力した数値の個数を*で表示させるプログラムを作りなさい。
  ただし、If文の使用はないものとし、関数はvoid型を使用しなさい。
[3] 環境
[3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: C ++
[4] 期限: 10月1日16:00まで
[5] その他の制限:ポインタはまだ習ってないです。
  条件が多いですが、よろしくお願いします。
933デフォルトの名無しさん:2008/09/29(月) 22:04:45
ポインタならってないと関数で配列渡せない気がするんだけどどうしたらいい?
関数つかわなくてもいい?
934デフォルトの名無しさん:2008/09/29(月) 22:06:31
配列を渡してるように見せかければいいじゃない
935912:2008/09/29(月) 22:21:58
>>847
wiki見たら随分ルール間違ってた……
一応作り直してみたもののやっぱりルールに不安あり。
全然参考にならんかもですがまあ一応ってことで。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7743.txt

936デフォルトの名無しさん:2008/09/29(月) 23:23:37
>>933
ポインタはまだ習ってませんが、使用してもかまいません。
937デフォルトの名無しさん:2008/09/29(月) 23:31:13
>>932
#include <stdio.h>
int main()
{
char s[16] = {0};
int i, j;
scanf("%16s", s);
for (i = 0; i < 16; ++i) {
printf("%c : ", s[i]);
for (j = 0; j < s[i] - '0'; ++j) {
putchar('*');
}
putchar('\n');
}
return 0;
}

いまいちよくわからんがこういうことでいいのかなぁ・・
938デフォルトの名無しさん:2008/09/29(月) 23:34:22
>>937
s[16+1] じゃね?
939デフォルトの名無しさん:2008/09/29(月) 23:37:50
>>938
scanf("%16s", s);
なのにか?
940デフォルトの名無しさん:2008/09/29(月) 23:39:41
>>939
終端に \0 がはいる
941デフォルトの名無しさん:2008/09/29(月) 23:45:21
>>940
ほんとだ、試したり調べたらそうだった
ごめんなさい
942デフォルトの名無しさん:2008/09/30(火) 10:40:14
初心者です


cydwinで、argvをつかって テキストファイル名を
引数としてわたして、ファイルの読込とファイルへ
の書込みをするプログラムを作成しました。

作成したいもの

このプログラムを呼び出シェルの作成シェル実行時の
引数を読込と書込みのファイル名を指定する

実行内容、エラーなどすべてのログをログファイルに
残す。

以上ですおねがいします

期限 10月1日
943デフォルトの名無しさん:2008/09/30(火) 11:39:09
○以下のプログラムを作成して下さい。

 課題2.getsを使用し文字列(10字程度)をキーボードから入力する。
      入力した文字列を前後逆転した文字列を画面表示する。

○表示画面イメージ

  入力文字列 : abcde    → ”入力文字列 : ”はprintf   abcdeはgetsで入力
  逆転文字列 : edcba    →printfで画面表示

期限 今日中
944デフォルトの名無しさん:2008/09/30(火) 11:41:03
>>942
>>1 の質問テンプレ読んで書き直してくれ
それと意味が分からない

a.out はすでに作成してあり、使い方は次のとおり
./a.out in.txt out.txt

で、イメージとしてはこんなんを作るのか?
stdout stderr の両方を処理しないといけないのと標準出力にも出すのかもしれないけど…
int main(void){
char fname_in[FILENAME_MAX], fname_out[FILENAME_MAX];
scanf("%s", fname_in);
scanf("%s", fname_out);
sprintf(cmd, "./a.out %s %s |& tee -a log.txt", fname_in, fname_out);
system(cmd);
return 0;
}
945デフォルトの名無しさん:2008/09/30(火) 12:01:39
>>944
たぶんシェルスクリプトを書いて欲しいだけのように見える。

--hoge.sh--
#!/bin/sh

./a.out $@ >logfile 2>&1
946デフォルトの名無しさん:2008/09/30(火) 12:03:42
[1] 授業単元:配列・ポインタ・文字列
[2] ○以下のプログラムを作成して下さい。

 課題2.getsを使用し文字列(10字程度)をキーボードから入力する。
      入力した文字列を前後逆転した文字列を画面表示する。

○表示画面イメージ

  入力文字列 : abcde    → ”入力文字列 : ”はprintf   abcdeはgetsで入力
  逆転文字列 : edcba    →printfで画面表示
[3] 環境
 [3.1] OS Windows
 [3.2] コンパイラ名とバージョン: わかりません
 [3.3] 言語: C
[4] 期限:今日中
[5] その他の制限:表示画面イメージを参照してください。

テンプレを使ってなかったので、書き直しました。
よろしくお願いします
947デフォルトの名無しさん:2008/09/30(火) 13:27:37
>>946
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
char buf[16];
int i;

printf("入力文字列:"); gets(buf);
i= strlen(buf);
printf("逆転文字列:");
while (i-- > 0) {
printf("%c", buf[i]);
}
printf("\n");
return 0;
}
948デフォルトの名無しさん:2008/09/30(火) 15:12:17
>>921
いまさらだが、こういう場合ってバイトオーダー関係しないの?
949デフォルトの名無しさん:2008/09/30(火) 15:13:43
>>948
その設問に関係あるとは思えないけど、どのへんが?
950デフォルトの名無しさん:2008/09/30(火) 15:20:20
>>949
算術シフト演算はバイトオーダー関係ないけど、
例えば、addressが 192.168.0.1 を数値化したものだとして、address & 0x000000ff は
バイトオーダによって 192 または 1 になるんじゃないかなって思ったんだけど。
951デフォルトの名無しさん:2008/09/30(火) 15:29:42
あ、ごめん。なんでもなかった。
& 0x000000ff が下位2バイト取ると勘違いしてた。
ぼけててほんとごめん。
952デフォルトの名無しさん:2008/09/30(火) 15:35:36
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
1、武君が持っているお金の3倍と景子さんが持っているお金の5倍を加えると7500円
武の2倍と景子の7倍を加えると8850円である。それぞれいくら持っているか

2、sinxとxを加えると1になった。xはいくらか

上の2つの問題について解く方法を考えプログラムをくめ
上の問題だけしか解けない方法でも構わない

できれば1はfor文の2重ループとx,yをランダムに発生させて合わせるという2パターン

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 2008年10月3日まで
[5] その他の制限:
ネット上にある連立方程式のプログラム(?)をつかわずにやれとのことですが気にしないでいいです
変な問題なのですがどなたかお願いします
953デフォルトの名無しさん:2008/09/30(火) 16:25:43
>>952
sinのも似たようなもんだよ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(){
int takeru, keiko, found;
found = 0;
for(keiko = 1;keiko < 7500/5; keiko++){
for(takeru = 1;takeru < 7500/3; takeru++){
if(((takeru*3+keiko*5) == 7500) && ((takeru*2+keiko*7) == 8850))
found = 1;
if(found != 0)break;
}
if(found != 0)break;
}
if(found != 0)printf("武=%d 景子=%d", takeru, keiko);
}
void main(){
int takeru, keiko, found;
srand(time(NULL));
found = 0;
while(found == 0){
keiko = rand() / 7500/5 + 1;
takeru = rand() / 7500/3 + 1;
if(((takeru*3+keiko*5) == 7500) && ((takeru*2+keiko*7) == 8850))
found = 1;
}
if(found != 0)printf("武=%d 景子=%d", takeru, keiko);
}
954デフォルトの名無しさん:2008/09/30(火) 16:30:12
>>950
IPとして扱うならネットワークバイトオーダー(ビッグエンディアン)だろう
address & 0x000000ff は192になる
955デフォルトの名無しさん:2008/09/30(火) 16:35:24
またバカが掻き回しにきたかw
956801:2008/09/30(火) 16:43:44
>>802
コンパイルしてみた結果動くようです。
で、このプログラムはどういった動作をするものでしょうか?
結局よく分からなくて適当書いて提出しました。
とはいえ、取り敢えずどうもありがとうございました。
957デフォルトの名無しさん:2008/09/30(火) 16:54:16
>>956
関数名見ただけで何してるかわかるけど
958946:2008/09/30(火) 19:18:33
#include<stdio.h>

main()
{
char str[10];

gets(str);
printf("入力文字列:");
puts("str");

printf("逆転文字列:");

}

こんな感じかな?
全然わかんない・・・・
文字を逆転するのもどうしたらいいのかわからないし・・・・
誰か助けてください
959946:2008/09/30(火) 19:21:26
puts(str)だった
960946:2008/09/30(火) 19:32:07
>>947

習ってるのは
#include<stdio.h>
main()

みたいな感じで、main()をいじる方法はならってないです。
int main(〜)じゃない方法で出来ないでしょうか?

後最後のreturn 0;というのもまだ習っていません。

>>958みたいな感じではこのプログラムは作れないんでしょうか?

連レス失礼しました。
961デフォルトの名無しさん:2008/09/30(火) 19:37:28
>>960
#include <stdio.h>
#include <string.h>
main()
{
char buf[1600];
int i;

printf("入力文字列:"); gets(buf);
i= strlen(buf);
printf("逆転文字列:");
while (i-- > 0) {
printf("%c", buf[i]);
}
printf("\n");
}

説明するのもめんどくさいからこれで
962デフォルトの名無しさん:2008/09/30(火) 19:39:56
>>937
>>932ですが、わかりにくかったみたいですみません。
例えば、キーボードから0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9
と、入力したとき、実行結果が
histo[0]=**
histo[1]=**
histo[2]=**
histo[3]=**
histo[4]=**
histo[5]=**
histo[6]=*
histo[7]=*
histo[8]=*
histo[9]=*
のように表示するプログラムをつくるという意味です(ヒストグラム)
ポインタは使用してもかまいません。必ず配列の受け渡しを行っていることが前提です。
どなたかお願いします。
963デフォルトの名無しさん:2008/09/30(火) 20:12:11
int histo[10] = {0};

while(適当に) histo[input_value]++;

と、詰めて、
for (i=0; i<10; i++) {
while(histo[i] != 0) {
printf("*");
histo[i]--;
}
printf("\n");
}
という感じに出力すればよいのではないかな。
964デフォルトの名無しさん:2008/09/30(火) 20:20:03
>>953さん
ありがとうございます。すごく助かりました
965デフォルトの名無しさん:2008/09/30(火) 21:05:31
>>953
すいません下のランダムの方がうまくいかないのですが
966デフォルトの名無しさん:2008/09/30(火) 21:35:57
>>965
どううまくいかないんだろう。
永久ループに見せかけていつかそのうち見つかるってアレじゃないのかな。
967デフォルトの名無しさん:2008/09/30(火) 21:36:36
>>965
rand() / 〜 じゃなくて rand() % (〜) の間違いだと思う
968デフォルトの名無しさん:2008/09/30(火) 21:42:38
できました。ありがとうございます
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

前スレ
C/C++の宿題を片付けます 115代目
http://pc11.2ch.net/test/read.cgi/tech/1217741118/
970デフォルトの名無しさん:2008/09/30(火) 22:24:22
>>963
ありがとうございます。配列の受け渡しはどのようにすればよいのでしょうか。
971デフォルトの名無しさん:2008/09/30(火) 22:34:48
>>970
何に渡すの?別にmainだけでいいのでは。
というか内部関数作って配列渡そうとするとポインタ使うことになっちゃうよ

諸々を検討して、ああ、void main ってことなんだなって理解してたのに。
972971:2008/09/30(火) 22:36:19
と思ったら配列渡す前提となっていた。
どこを関数化するんですか?
973デフォルトの名無しさん:2008/09/30(火) 23:06:32
>>972
入力した0〜9までの個数を*で表示する部分を関数化です。
974デフォルトの名無しさん:2008/09/30(火) 23:21:26
>>973
mainで
show_histogram(histo);
として、

void show_histogram(int *data) {
/* 出力処理 */
}

という関数を作ればよいのではないかな。
975デフォルトの名無しさん:2008/10/01(水) 00:05:23
ポインタを習っていない段階でも

void xxxxx(int data[10]) {
/* 中身 */
}

は習った気がする。
976デフォルトの名無しさん:2008/10/01(水) 00:11:27
>>974
void histogram(int *data){
int histo[10]={0};
int i;
for(i=0;i<10;i++){
while(histo[i]!=0){
printf("*");
histo[i]--;
}
printf("\n");
}
}
int main(void){
int j, a[16];
for(j=0;j<16;j++){
scanf("%d",&a[j]);
}
histogram(a);
return 0;
}
という感じにすればよいのでしょうか。





977952:2008/10/01(水) 00:43:26
>>952の1番目の問題を解いてもらって2番目のsinx + x = 1 のほうの問題をやっていたのですがうまくいきませんでした
for文でまわしても結果がでてこないのとsinxのxはラジアンで扱ったほうがいいのかどうか(どっちでやってもうまくいかなかったんですが)わかりません
どなたかできる方いたら教えていただけないでしょうか?よろしくお願いします
 
978デフォルトの名無しさん:2008/10/01(水) 00:45:22
>>977
double f(double x){
return sin(x)+x-1;
}
として、あとはニュートン法でも二分法でも
979952:2008/10/01(水) 01:19:08
アドバイスありがとうございます。頭悪くて申し訳ないんですが以下のプログラムは何がいけないんでしょうか?全部おかしいですか?
#include <stdio.h>
#include<math.h>

double f(double x){
return sin(x)+x-1;
}

void main(void)
{
double x,z;
for(x=0;x<5;x++){
if(f(x)==0)z=1;
if(z!=0)printf("%d",x);
}
}
980952:2008/10/01(水) 01:22:12
すいませんこっちでした

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

double f(double x){
return sin(x)+x-1;
}

void main(void)
{
double x,z;
z=0;
for(x=0;x<5;x++){
if(f(x)==0)z=1;
if(z!=0)
{printf("x=%d\n",x);
z=0;
}

}
}
981デフォルトの名無しさん:2008/10/01(水) 01:30:50
>>952

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


int
main(void)
{
double x = 0.0;

for ( x = 1.0; 1.0E-8 < x; x -= 0.01 ) {
if ( (sin(x)+x-1.0) < 1.0E-8 ) {
printf("x == %f\n", x);
break;
}
}

return 0;
}
982デフォルトの名無しさん:2008/10/01(水) 01:39:01
>>976
>>963 には入力データを配列に詰める処理と、表示処理を書いているんだけど
なぜ >>937 のエッセンスを微妙に混ぜてしまったの?

分からないままとりあえず組み合わせて
> という感じにすればよいのでしょうか。
と締めくくるのは、クマーAAを生むのに必要な技術であって、プログラムを組むには必要ないよ。
983デフォルトの名無しさん:2008/10/01(水) 01:56:40
懐かしいネタがw

void show_histogram(int *data){
int i;
for(i=0;i<10;i++){
while(data[i]!=0){
printf("*");
data[i]--;
}
printf("\n");
}
}
int main(void){
int i, input_value, a[10] = {0};
for(i=0;i<16;i++){
scanf("%d",&input_value);
a[input_value]++;
}
show_histogram(a);
return 0;
}

こうですか!?わかりません!教えてください!
if禁止なので入力チェックは本当にわかりません><
984デフォルトの名無しさん:2008/10/01(水) 07:29:23
次スレ立てました
C/C++の宿題を片付けます 116代目
http://pc11.2ch.net/test/read.cgi/tech/1222813731/
985946:2008/10/01(水) 10:48:55
>>961
ありがとうございました。
986デフォルトの名無しさん:2008/10/01(水) 13:51:59
[1] 授業単元: c++
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7745.txt
・「年(西暦)」「月」を入力したら,その月のカレンダーを表示するプログラムを作成しなさい。ただし,下記の条件を満たすものとする。

【条件】
(1)カレンダークラスを作成し,main関数でカレンダークラスの実体を生成し,カレンダークラス内のメンバ関数(show関数)を呼び出してカレンダーを表示する。
(2)カレンダークラスはカプセル化されていること。
(3)カレンダー表示には,年,月および曜日,日を表示すること。
(4)上記以外については自由に作成してよい。


[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: VS2008
 [3.3] 言語:C++
[4] 期限: ([2008年10月5日まで]
987986:2008/10/01(水) 13:56:34
もしよければ閏年の表示もお願いします。
988デフォルトの名無しさん:2008/10/01(水) 13:56:54
>>986
>>715-719とかにあった気がする
989デフォルトの名無しさん:2008/10/01(水) 14:39:25
[1] 授業単元: 数理科学C
[2] 問題文: 二分法を用いて√2の近似値を求めるプログラム
[3] 環境
 [3.1] OS: Windows/
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [2008年10月2日まで]
[5] その他の制限:特になし
990デフォルトの名無しさん:2008/10/01(水) 15:10:20
>>984
乙!

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

double f(double x){
return x*x-2;
}

int main(void){
double a=0.0, b=2.0, x;

while(f(a)*f(b)<0.0){
x=(a+b)/2;
if(f(a)*f(x)<0) b=x;
else a=x;
printf("x=%f f(x)=%f\n", x, f(x));
if(fabs(f(x))<1e-7) break;
}

return 0;
}

>>980
これの関数 f(x) の中身を書き換えればおk
991デフォルトの名無しさん:2008/10/02(木) 16:03:28
質問なのですが、プログラム中に別のプログラムを呼び出す場合は
データをコマンドライン上で受け渡しはできないのでしょうか?
それともtxtデータなどで外部出力したものを読み取るしかないのでしょうか。
992デフォルトの名無しさん:2008/10/02(木) 16:11:49
>>991
LinuxでもWindowsでも引数つきでプログラム起動は出来るだろう
993デフォルトの名無しさん:2008/10/02(木) 16:15:07
引数か標準入力に書き込むか
994991:2008/10/02(木) 16:30:53
調べてみたら標準出力のパイプ処理でうけわたしできるみたいですね。
ありがとうございました。
995デフォルトの名無しさん:2008/10/02(木) 20:05:42
埋めるぜ
996デフォルトの名無しさん:2008/10/02(木) 20:06:28
次スレは >>984
997デフォルトの名無しさん:2008/10/02(木) 20:10:55
オレにとって手ごろな宿題が無くなってきてるな
ストライクゾーンが狭いからしょうがないけど
998デフォルトの名無しさん:2008/10/02(木) 20:23:24
1000取っちゃうぜ?
999デフォルトの名無しさん:2008/10/02(木) 20:24:43
どうぞどうぞ
1000デフォルトの名無しさん:2008/10/02(木) 20:26:11
では遠慮なく

1000ならオレ様勝手にレベルアップ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。