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

このエントリーをはてなブックマークに追加
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

【前スレ】
C/C++の宿題を片付けます 77代目
http://pc8.2ch.net/test/read.cgi/tech/1164079451/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=0&H=&view=table&link2ch=on&shw=2000&D=tech

2デフォルトの名無しさん:2006/12/04(月) 09:16:16
[1]プログラム演習
[2]
いろいろな整数地a,bに対して、tを媒介変数として、座標が
x=cos(2πat)
y=sin(2πbt)
で表される曲線(リサージュ)を描くlisajous関数を作成しなさい
[3]C言語(emacs)
[4]12/6
[5]for,while,if文 ポインター 文字列 1,2次配列 関数

いまならってる範囲でグラフの描き方がわかりません。すいませんが力を貸してください。
3デフォルトの名無しさん:2006/12/04(月) 10:11:16
下のものなんですけど、図書館で調べないと出てこないマイナーなものなんですか?
出来ればネット上にあるといいんですがありませんか?
概要だけでも説明してもらえないですか?やり方わかればできると思うんですが...



x + y = 1, x, y >= 0の条件の下で(2x + y)^2 + (x - y)^2 + (x + 2y)^2の最小値を求める
という問題の変数を増やした場合

x(1) + ・・・+ x(n) = 1, x(i) >= 0の条件の下でΣ{i=1,m} (Σ{j=1,n} a(i,j) * x(j))^2の最小値

はどのように解いたらいいのかわかりますか?

4デフォルトの名無しさん:2006/12/04(月) 10:19:52
どこまでヒッキーやねん
5デフォルトの名無しさん:2006/12/04(月) 10:21:59
前スレうまったのでいちおうこっちにもかかせてもらいます
[1]プログラム演習
[2]
一定の文字からなる列sを読み込み、以下の条件を満たす同じ個数の文字からなる列tを出力するプログラムを作りなさい。
ただし、以下での単語とは空白以外の文字からなる列のこととする。
1,s中の単語は同じ順番で t に現われる
2,t中では単語は一つの空白に区切られる
3,t中に最初の単語の最初の文字から最後の単語の文字までは列全体のちゅうおうに位置し、前後は空白である
例えば文字の列
_This___is__a____good___program___
を入力すると
______This_is_a_good_program______
が出力される。ここで、_は空白を表すものとする。
[3]C言語
[4]12/7
[5]for,while,if文 ポインター 文字列 1,2次配列 関数の書き方
63:2006/12/04(月) 10:47:22
ラグランジュの乗数法でいけそうです
出来たら報告しますね
ありがとうございました
7デフォルトの名無しさん:2006/12/04(月) 10:57:51
にくちゃんねる閉鎖に備えて過去ログ庫作り始めました

とりあえずさくらのサーバーレンタルしてきて、NAMAZUでも入れようかと思ったけど
一番安いプランじゃシェルログインできなかった(ズコー
プラン変更してくる
83:2006/12/04(月) 11:02:45
>>7
perlが動けば無料サーバーでも動かせますよ
ただしインディックスは自前で用意する必要がありますが
93:2006/12/04(月) 11:18:27
ラグランジュの乗数法によりn元連立1次方程式を解けば良いだけでした
簡単でした
10デフォルトの名無しさん:2006/12/04(月) 12:23:56
>5
#include <stdio.h>
#include <string.h>
int main(void)
{
int i, j, l, count = 0;
char str[256];
gets(str);
l = strlen(str);
for(i=0; i<l-1; i++) {
if(str[i]==' ') {
while(str[i+1]==' '){
for(j=i; j<l; j++) str[j] = str[j+1];
count++;
}
}
}
for(i=0; i<l; i++) str[l-1-i] = str[l-1-count/2-i];
for(i=0; i<(count-count/2); i++) str[l-1-i] = ' ';
for(i=0; i<count/2; i++) str[i] = ' ';
puts(str);
return 0;
}
11デフォルトの名無しさん:2006/12/04(月) 12:34:23
http://chomework.sakura.ne.jp/
とりあえず予定地ね
まだ何も無いけど
12デフォルトの名無しさん:2006/12/04(月) 12:35:37
>前スレの九九の表の人
ググれば出てくる
13デフォルトの名無しさん:2006/12/04(月) 13:02:17
[1] 授業単元:コンピュータ実習
[2] 問題文(含コード&リンク):
以下のプログラムを参考に、
指定したファイルの内容に行番号をつけて表示し、
さらに、空白(スペース)、タブ、改行を除く文字数を
表示しなさい。
---------------------------サンプル-------------------------------
#include <stdio.h>
int main( void )
{
FILE *fp;
char c;
char inFileName[64];
char str[256];
printf("File name ?"); scanf("%s", inFileName);
if (( fp = fopen( inFileName, "r")) == NULL) {
perror("fopen"); exit(1);
}
while( fgets( str, 256, fp) )
printf("%s", str);
fclose( fp );
}
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 12月6日12:00
[5] その他の制限:特になし
14デフォルトの名無しさん:2006/12/04(月) 14:16:26
[1]プログラム演習
[2]
いろいろな整数地a,bに対して、tを媒介変数として、座標が
x=cos(2πat)
y=sin(2πbt)
で表される曲線(リサージュ)を描くlisajous関数を作成しなさい
[3]C言語(emacs)
[4]12/6
[5]for,while,if文 ポインター 文字列 1,2次配列 関数


おねがいします
15しんご:2006/12/04(月) 14:29:07
<問題>
実行結果が次のようになるプログラムをつくりなさい。

Please enter a statemant: This is a programming class

Total 5 words. Each word contains;
This: 4 letters.
is: 2 letters.
a: 1 letters.
programming: 11 letters.
class: 5 letters.

ただし、単語数の上限は30、一単語の最大文字数は20と仮定する。
文章入力にはgets関数を使用する。
という問題なんですがよろしくお願いします。
16デフォルトの名無しさん:2006/12/04(月) 14:32:36
>>15
断る。
17デフォルトの名無しさん:2006/12/04(月) 14:36:50
一文字でもletters
18デフォルトの名無しさん:2006/12/04(月) 15:02:40
[1] プログラミング演習
[2] wavファイルを読み込んで、一番音の強い部分の前後1秒間をwavで出力
し、音の一番強かった時間を表示するプログラムを作成せよ。
って課題なのですが、どうかご助力お願いします。

[3] Windows C言語
[4] 期限:2006年12月11日まで
[5] 特になし
19デフォルトの名無しさん:2006/12/04(月) 15:16:25 BE:54348274-2BP(202)
>>18
入力WAVファイルの量子化ビット数、チャネル数、コーデック、サンプリング周波数。
20デフォルトの名無しさん:2006/12/04(月) 15:18:44
>>19
ファイルヘッダ
21デフォルトの名無しさん:2006/12/04(月) 15:19:41
>>18
wavで出力とはファイルに出力?1秒に満たなかった場合は無音?カット?
強い部分が複数の場合は?
22デフォルトの名無しさん:2006/12/04(月) 15:27:37 BE:31057128-2BP(202)
>>20
対応範囲。まさか全種類に対応しろってか?
23デフォルトの名無しさん:2006/12/04(月) 15:59:36
>>13
#include <stdio.h>
int main( void )
{
FILE *fp;
int i,lcnt=1,size=0;
char inFileName[64]; char str[256];
printf("File name ?"); scanf("%s", inFileName);
if (( fp = fopen( inFileName, "r")) == NULL) {
perror("fopen"); exit(1);
}
while( fgets( str, 256, fp) ) {
i=0; printf("%d\t%s",lcnt, str);
while(str[i]){
switch(str[i]){ case '\n': lcnt++;break;
case '\t': case ' ': break;default:size++;break;
}i++;}}
printf("total: %d characters\n",size);
fclose( fp );
}

マジ適当。マジデバッグしてない。
ちゃんと動いてるのか確認してから出すべし。
>>17の突っ込みに対応する為に最後のprintfは
printf("total: %d character%s\n",size,size>1?"s":"");
でもいいかもしれん(三項演算子キライだけど。)
24デフォルトの名無しさん:2006/12/04(月) 16:49:40
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
整数 ID の二分木を表示する関数(簡単なものがスライドにあるのでそのまま打ち込んでも良いが、もっと見やすく拡張したほうが良い)と
二分探査木を作る関数(スライドにもあるが改変しても良い)を作り、二分探査木に以下のようなデータを入力した結果を表示せよ。
データは並んでいる順に入力すること。
(ア)1,2,3,4,5,6,7
(イ)1,7,2,6,3,5,4
(ウ)4,2,1,6,3,5,7

ソース http://www.geocities.jp/c_prog2011/struct3.ppt
[3] 環境
 [3.1] OS: Windows XP Home Edition SP2
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005 Academic Edition
 [3.3] 言語: C
[4] 期限: 2006年12月6日23:59まで
[5] その他の制限: 線形リストの基本は学んだが二分木は初めてです。

よろしくお願いします。
25デフォルトの名無しさん:2006/12/04(月) 16:50:26
[1] 授業単元:プログラミング入門
[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3087.txt
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio 2003
[3.3] 言語: C
[4] 期限: 12月6日
26デフォルトの名無しさん:2006/12/04(月) 17:15:03
>>25
意味解らんなぁ。
リングバッファはFIFOなんだから入れた順に取り出されるだけだろ。
(*) は何の意味だろう。
27デフォルトの名無しさん:2006/12/04(月) 17:17:48 BE:11646623-2BP(202)
>>25
追い越しとか全然考慮してない。
#include<stdio.h>
#define QMAX 32
#define QO() printf("%d\n",qo())
int WP = 0;
int RP = 0;
int QUEUE[QMAX];
void qi(int a){QUEUE[WP]=a; WP=(WP+1)%QMAX;}
int qo(){int ret=QUEUE[RP]; RP=(RP+1)%QMAX;return ret;}
int main(void){qi(1);qi(2);qi(3);qi(4);QO();QO();qi(5);qi(6);qi(7);QO();qi(8);QO();
qi(9);qi(10);QO();QO();QO();QO();QO();QO();return 0;}
28デフォルトの名無しさん:2006/12/04(月) 18:59:53
[1] 授業単元:C言語
[2] 問題文
以下の様に動作するプログラムを作成する.
コマンド選択で,追加,リスト表示,検索,変更,削除が行える在庫管理プログラムを作成する.
データは,品名 単価 数量の形式で品を行ごとに管理するファイルとする.
上の機能ルーチンは,全て関数として作成すること.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3085.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] Cygwin
 [3.3] 言語:C言語
[4] 期限:12月8日
よろしくおねがいします。
29デフォルトの名無しさん:2006/12/04(月) 19:00:20
前スレ>>979

>>>919
>候補表示中にポインタがウィンドウ外に行ったとき、
>ウィンドウ外をクリックされたときの挙動はどうしたらいい?

候補中にウィンドウ外をクリックされたときは挙動を起こさず
ウィンドウ内に戻ったらそのまま続くでお願いします。
30デフォルトの名無しさん:2006/12/04(月) 19:17:57 BE:31056544-2BP(202)
>>28
主キーは?
31デフォルトの名無しさん:2006/12/04(月) 19:46:43
[1] 授業単元: プログラミング基礎
[2] 問題文:文章だとわかりにくいので、画像をご覧ください。。。
       ttp://up.kabubu.net/cgi/img2/17722.jpg
[3] 環境
 [3.1] OS: WinXP HOME
 [3.2] コンパイラ名とバージョン:VC++ 2005
 [3.3] 言語:C++
[4] 期限:できれば本日中に・・・

よろしくお願いします。
32デフォルトの名無しさん:2006/12/04(月) 19:59:38
>>31
あと4時間しかねーじゃねーかw
33デフォルトの名無しさん:2006/12/04(月) 20:08:58
>>31 4分もかからん。コンパイルもしてないけど。
#include <stdio.h>
#include <math.h>
#define VAL_MAX (12)
int main( void ) {
double a[VAL_MAX], ave = 0.0, ss = 0.0, var, std;
int i;
for( i = 0; i < VAL_MAX; i++ ) {
printf( "a[%d]:", i + 1 ); scanf( "%lf", a + i );
}
for( i = 0; i < VAL_MAX; i++ )
ave += a[i];
ave /= (double)VAL_MAX;
for( i = 0; i < VAL_MAX; i++ )
ss += ( a[i] - ave ) * ( a[i] - ave );
var = ss / (double)VAL_MAX;
std = sqrt( var );
printf( "Ave = %lf, Var = %lf, Std = %lf\n", ave, var, std );
return 0;
}
3431:2006/12/04(月) 20:14:26
>>33
早速、ありがとうございます。

しかし、「#define VAL_MAX (12) 」をまだ習ってないので。。。
for文を使って解く方法でお願いします。
35デフォルトの名無しさん:2006/12/04(月) 20:24:05
forの中のVALの所を全部12に変えればいけるんじゃないの?
36デフォルトの名無しさん:2006/12/04(月) 20:25:13
VAL_MAXの前のキャストって必要なの?
37デフォルトの名無しさん:2006/12/04(月) 20:26:32
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
* 2つの整数 x と y の全ての公約数を求めて配列 d に格納する関数 void compute_cd(int x, int y, int d[]) を作成せよ.
ただし, 配列 d へのデータの格納には 0 をターミネータとして用いよ. 例えば, 公約数が 1, 2, 3, 6 の場合,
d[0]=1, d[1]=2, d[2]=3, d[3]=6, d[4]=0 となるようにせよ.
* 公約数の表示は print_cd を呼び出して行うのではなく, main から compute_cd を呼び出し,
配列に格納された公約数を main の中で表示するようにせよ.

[3] 環境
 [3.1] OS:windows
 [3.2] cygwin
 [3.3] C
[4] 期限:2006年12月7日
[5] あるプログラムを書き換えるようにやる問題です。
一応、原型が留まっていたほうが嬉しいので次にそのプログラムを貼ります
3837:2006/12/04(月) 20:32:37
void print_cd(int a,int b){
int g,i;
g=gcd(a,b);
for(i=1;i<=g;i++){
if(g%i==0){
printf("%d ",i);
}
}
}
int gcd(int a,int b){
int z;
while((z=a%b)!=0){
a=b;
b=z;
}
return b;
}
最大公約数を計算する関数と求める関数はこれを使っていました。
今度は最大公約数を計算して配列に入れるプログラム
もしくはこの計算する関数自体を配列に入れるプログラムを作りたいです。
関数だけで結構です。よろしくお願いします。
39デフォルトの名無しさん:2006/12/04(月) 20:34:11
>>33
#defineがダメなら
ポインタ演算とかプリプロセッサとか、
もしかしてdouble使うのもまずいんじゃないか。
4031:2006/12/04(月) 20:37:49
>>33,35,36,39

ありがとうございます!

VALを12に変えて#defineを消して、ちゃんと動きました。
また何かありましたらよろしくおねがいします。
41デフォルトの名無しさん:2006/12/04(月) 20:38:31 BE:124224588-2BP(202)
「習ってない」をNGワードに。
4231:2006/12/04(月) 20:40:51
>>40
doubleは大丈夫です。
43デフォルトの名無しさん:2006/12/04(月) 20:43:14
>>40
他人事だからどうでもいいけど、
>>33のソースはポインタ演算使ってるから
もしポインタ演算やった事ないなら
printf( "a[%d]:", i + 1 ); scanf( "%lf", a + i );

printf( "a[%d]:", i + 1 ); scanf( "%lf", &a[i] );
にしたほうが人に頼んだってバレづらいぞ。
44デフォルトの名無しさん:2006/12/04(月) 20:43:17
極力原型をとどめてみた。
void print_cd(int x,int y, int d[]){
int g,i;
g=gcd(a,b);
for(i=1;i<=g;i++){
if(g%i==0){
*d++=i;
}
}
*d = 0;
}
45デフォルトの名無しさん:2006/12/04(月) 20:51:16
おいおい 極力人に頼んだことがバレやすいソースを書くことを目的にしてる
俺みたいな人間もいるんだぜ
少しは配慮してくれよ
4637:2006/12/04(月) 21:26:20
>>44すいません、その関数をmainの中に書くときの書き方を教えてもらえませんか?
print_cd(a,b,d)
とかでやったら何も出なかったりエラー出たりです。
まさかここで詰まるとは思いませんでした。
47デフォルトの名無しさん:2006/12/04(月) 21:35:43
>>14
条件は満たした( ´,_ゝ`)
#include <stdio.h>
void lisajous(int a,int b){
char str[1024];
sprintf(str,
"echo \"set parametric;"
"set samples 400;"
"plot cos(2*pi*%d*t),sin(2*pi*%d*t)\""
"| gnuplot -persist",a,b);
system(str);
}
48デフォルトの名無しさん:2006/12/04(月) 21:46:24
>46
44じゃないが関数名はcompute_cd(int x, int y, int d[])にしなきゃいけないんじゃないのか?
49デフォルトの名無しさん:2006/12/04(月) 21:50:20
>>48
そのはずだったけど元のがa,bでされてるから>>44の内容もa,bで作られてるし
a,bと書きましたが実物を全部x,yに置き換えます。
5031:2006/12/04(月) 21:50:31
割り込み失礼します

>>31ですが、下記のように手を加えて課題どおりの書式にしたのですが、
測定データ:
*
*
5131:2006/12/04(月) 21:52:04
すいません、途中で送信してしまいました。。。。。

測定データ:

の下へ入力した値を表示させることができません。
どうしたらよいのでしょうか?

ttp://up.kabubu.net/cgi/img2/17722.jpg
52デフォルトの名無しさん:2006/12/04(月) 21:52:48
>49
じゃあmainの中で配列を宣言してないとか?
53デフォルトの名無しさん:2006/12/04(月) 21:56:07
>>52
してるつもりなんですけど勘違いしてるかもです。

int d[];
って入れたら中になんか入れろやってエラー出るんですが、
意味が分かりません。
128とか適当な数字入れても無理です。どうするのでしょうか。
54デフォルトの名無しさん:2006/12/04(月) 22:02:43
>>53
main の中で配列 int d[サイズ]; のように宣言してる?
55デフォルトの名無しさん:2006/12/04(月) 22:06:59
>>54
int main (void){
int a,b,d[];
printf("a bの値>>");
scanf("%d %d",&a,&b);
ほかの関数(a,b);
compute_cd(a,b,d); もしくはcompute_cd(a,b,d[]);
return 0;}
これがメインです。[]をなくしたりいろいろ試しても正常にいきません。
56デフォルトの名無しさん:2006/12/04(月) 22:08:35
[1]プログラム演習
[2]
いろいろな整数地a,bに対して、tを媒介変数として、座標が
x=cos(2πat)
y=sin(2πbt)
で表される曲線(リサージュ)を描くlisajous関数を作成しなさい
[3]C言語(emacs)
[4]12/6
[5]for,while,if文 ポインター 文字列 1,2次配列 関数
57デフォルトの名無しさん:2006/12/04(月) 22:09:04
d[] → d[128]
compute_cd(a, b, d)
でいけるはずだけど。
58デフォルトの名無しさん:2006/12/04(月) 22:09:55
>>55
2行目の
int a,b,d[];

dのサイズ入れなあかん

int a,b,d[100]; とか


59デフォルトの名無しさん:2006/12/04(月) 22:10:53
配列の表示自体は
for(i=0; d[i]; i++) printf("%d ", d[i]);
mainの中でやらなきゃダメよ。
60デフォルトの名無しさん:2006/12/04(月) 22:12:30
>>57
それ最初にやったらエラーは出ないけど何も表示されませんでした。
今やってみてもですけど
61デフォルトの名無しさん:2006/12/04(月) 22:16:39
>>36
暗黙のキャストがあるので必要ではない。
単なる習慣。
62デフォルトの名無しさん:2006/12/04(月) 22:17:40
>>60
どっかにソースうp
63デフォルトの名無しさん:2006/12/04(月) 22:18:43
>60
何も表示されないのはcompute_cd()関数には表示が含まれてないから。
渡した配列に約数を格納しただけ。
>59のをcompute_cdの後に追加すれば表示される。
「配列に格納された公約数を main の中で表示するようにせよ」
ってのはそういう意味。
64デフォルトの名無しさん:2006/12/04(月) 22:22:07
>for(i=0; d[i]; i++) printf("%d ", d[i]);
でもおかしいよな
6533:2006/12/04(月) 22:23:42
>>31 = >>51
a[i] をループで printf() するだけだろ。
そのくらいは自分で直せ。
その程度の事も自分で出来ないなら学校を辞めるべきだ。
もっとも >>31 の問題自体も人に聞くレベルのものでは無い。
66デフォルトの名無しさん:2006/12/04(月) 22:23:45
>64
どこがおかしい?
67デフォルトの名無しさん:2006/12/04(月) 22:26:26
>for(i=0; d[i]; i++) printf("%d ", d[i]);
真ん中の d[i] って何か式を評価しているのか?
68デフォルトの名無しさん:2006/12/04(月) 22:28:14
>67
>配列 d へのデータの格納には 0 をターミネータとして用いよ
69デフォルトの名無しさん:2006/12/04(月) 22:31:00
なるほど、そういう使い方をしていたのか。まぁ、そういうのってwhileを使う人が多いのかな。
70デフォルトの名無しさん:2006/12/04(月) 22:32:51
>>59みたいな書き方はよく見ると思うけど。
7160:2006/12/04(月) 22:34:10
意味が分かりました。ありがとうございます。
配列をよく分かってませんでした。

あと、*d++と*dを使わないポインタ無し版はどうしたらいいでしょうか。
課題はポインタ有りと無し2種類出さなくてはいけないです。
単純に*を消して()入れるくらいに考えてたんですが
72デフォルトの名無しさん:2006/12/04(月) 22:35:03
>69
この問題でd[i]==0を使わない配列の表示方法を教えてくれ
73デフォルトの名無しさん:2006/12/04(月) 22:39:08
>>72
!(否定)があるじょのいこ?
74デフォルトの名無しさん:2006/12/04(月) 22:41:21
i=0;
while( d[i] ) printf("%d ", d[i++]);
75デフォルトの名無しさん:2006/12/04(月) 22:41:34
>71
ポインタなし
void compute_cd(int x,int y, int d[]){
int g,i,j;
g=gcd(a,b);
for(i=1,j=0;i<=g;i++){
if(g%i==0){
d[j]=i;
j++;
}
}
d[j] = 0;
}
>73
d[i]を評価しないでって意味で頼む
76デフォルトの名無しさん:2006/12/04(月) 22:46:30
結局は0か1、あるいは0か0でないか、1か1でないかでの評価がされるなら
真偽で判断すりゃええがな
7731:2006/12/04(月) 22:47:12
お世話になりました!
7837:2006/12/04(月) 22:53:34
>>75
iとdだけで考えていました><ありがとうございます。

根本的にわかってない部分があるから早く冬休みに最初から見直したいんですが
忙しいからお世話になりました。
7928:2006/12/04(月) 23:06:03
>>30さん
主キーってこれかな?
apple 200 50
orange 100 100
banana 50 500

実行結果を
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3089.txt
こんな感じにしたいのです。
80デフォルトの名無しさん:2006/12/04(月) 23:23:52
正直28の文章だけ読んでまたイチヂクか!と思った俺がいる
81デフォルトの名無しさん:2006/12/05(火) 00:05:18
>>79
>>30じゃないけど
主キーってのは重複することが許されないもの
たとえば 
apple 100 40
apple 50 20
と言う追加が許されない(appleが2つあることが許されない)なら
apple が主キーになる
82デフォルトの名無しさん:2006/12/05(火) 00:55:14
>>56
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3090.c

がんばったけど誤差があったらごめん
83デフォルトの名無しさん:2006/12/05(火) 01:31:17
>>29
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3091.txt

ブレゼンハムは実装してない(おぃ

大丈夫、まだ時間はあるし君ならできるさ!
84デフォルトの名無しさん:2006/12/05(火) 01:39:04
79の実行結果を見る限りではDB的な処理は必要無さそうだな
(主キーはいらない)
各品目に対して値段は一つだけ
85デフォルトの名無しさん :2006/12/05(火) 02:20:37
>>31
どうせ、次の課題で測定値をふやして求めろみたいなのでるんだろうから
作っておいた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3092.txt
86デフォルトの名無しさん:2006/12/05(火) 10:30:58
>>85
malloc習ってません>< と返って来るにmalloc(100)
87デフォルトの名無しさん:2006/12/05(火) 10:40:21
free(>>86)してみるテスト。
88デフォルトの名無しさん:2006/12/05(火) 10:55:22
exitする直前にfreeなんて無駄な事をするな
89デフォルトの名無しさん:2006/12/05(火) 11:11:49
>>15
もういないかな?
一応書いたから、うぷっとくよ。

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28881

ところでこの課題やってて、strncpyがナル文字を付加してくれないことを知ったんだが、なんかカッコイイ方法ないかな?
上記URLのコードだと、コピー元に空文字を指定して、「コピー元が足りない分はナル文字で埋める」という仕様を利用してるんだが、どうにもかっこ悪い。
誰かハックきぼん。
90デフォルトの名無しさん:2006/12/05(火) 11:23:27
ヌルと読むものとばかり思っていたが
意外とナル派も多かった

ナル文字 の検索結果 約 600 件中 1 - 10 件目 (0.22 秒)
91デフォルトの名無しさん:2006/12/05(火) 12:49:00
>>89
つstrtok
92デフォルトの名無しさん:2006/12/05(火) 13:15:06
[1] 授業単元: プロフラミング実習II
[2] 問題文(含コード&リンク):
コマンドライン版 加減乗除 演算機の作成
 
※必ずコマンドラインから入力データを与えてください.本課題の必須要件です.

使い方: calc 数値1 [+|-|*|/] 数値2

(例)calc 4 + 2 <enter>
6.00

上記の例に示すようなコマンドライン版の超簡単な加減乗除演算機を作成してください.
加減乗除ですから,+ - * / の4つのオペレータ(加減乗除演算子)を考えるだけで十分です.
括弧の処理はなくて構いません.
括弧による優先順位や四則演算の優先順位を考慮すると格段に難しい問題になります.
したがって本課題では考慮の必要はありません.

コマンドラインから与える「数値1」と「数値2」は実際には文字列として main 関数に渡されます.ご注意ください.

例にあるように,コマンド名calcと数値1の間には半角スペースを入れます.同様に数値1とオペレータの間にも半角スペースを入れます.もちろんオペレータと数値2の間にもスペースが必要です.

例では小数点以下2桁で結果を表示しています.表示方法は各自で工夫してください.

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: ([2006年12月09日20:00まで]
[5] その他の制限:なし

よろしくお願いいたします。
93デフォルトの名無しさん:2006/12/05(火) 13:19:53
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
キーボードから入力した文章を単語単位で切り出し
総単語数と各単語の文字数を表示せよ。単語の区切りは半角スペース。
単語数の上限は30、一単語の最大文字数は20と仮定
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:bcc32
 [3.3] 言語:C
[4] 期限:12月5日夕方まで
[5] その他の制限:文字入力にはgets関数を使用。ポインタだけでかければ
更に可
94デフォルトの名無しさん:2006/12/05(火) 13:24:35
このような事ができるようなプログラムを1時間以内で教えて下さい。お願いします

1:4個の1桁の数字からなる順列を乱数で生成
(4個の数字は全て異なる)
2:4個の数字の順列を入力
3:生成した順列と入力の順列を比較
(数と位置があっている「hit])
(数はあるけれど位置が違う「blow])
4:hit数とblow数を表示
5:順列があたるまで入力を繰り返す

実行例
Number?:0123
Hits:0,Blows:1
Number?:0124
Hits:0,Blows:0
Number?:3567
Hits:3,Blows:0
Number?:3568
Hits:3,Blows:0
Number?:3569
Hits:4,Blows:0
Trials:5
95デフォルトの名無しさん:2006/12/05(火) 13:46:06
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 数値を順番に読み込んで二次元の配列に格納する

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: どちらでも可
96デフォルトの名無しさん:2006/12/05(火) 13:46:26
97デフォルトの名無しさん:2006/12/05(火) 13:49:03
>>94
テンプレにも従わずに図々しい

>>95
配列のサイズは?
入力のしかたは?
98デフォルトの名無しさん:2006/12/05(火) 13:49:08
>>93
>>15に同じのあるぞ。
回答は、>>89にある。
99デフォルトの名無しさん:2006/12/05(火) 13:56:56
>>89
バッファを直接カット。strtokの方がいいんだろうけど。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3093.c
10089:2006/12/05(火) 14:10:32
>>91,>>99
勉強になりました。
'\0' == 0だと知らなかった……orz
101デフォルトの名無しさん:2006/12/05(火) 14:15:31
すみません…
配列のサイズは4
入力の仕方はscanfです
102デフォルトの名無しさん:2006/12/05(火) 14:19:33
>>94
ソース汚いけど出来たぞ。テンプレに書き直したらUPする。
10394:2006/12/05(火) 14:24:11
いろいろなスレでマルチポストしたのでもういらないです
104のいまんさん:2006/12/05(火) 14:28:01
C++のウィンドウズプログラミングで右クリックすると画面の表示がクリアされるものを作りたいんですけど、どのようなコードを書けばいいかわかりません。
105デフォルトの名無しさん:2006/12/05(火) 14:28:38
いやなやつ。
106デフォルトの名無しさん:2006/12/05(火) 14:31:58
>>99
どうも
107デフォルトの名無しさん:2006/12/05(火) 14:43:58
>>104
ExitWindowsEx(EWX_POWEROFF, 0);
でおk
108のいまんさん:2006/12/05(火) 14:47:11
>>107
これはOnDraw()関数に書き込むんですか?
109デフォルト名無しさん:2006/12/05(火) 14:47:42
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:Linux (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:コンパイラはgcc
 [3.3] 言語: C言語
[4] 期限: ([2006年12月19日12:00まで]
[5] その他の制限: 無し
110デフォルトの名無しさん:2006/12/05(火) 14:54:32
>>104
プラットホームSDKもってないからヒントだけ。
1、ウインドウを出す。
2、WindowProcのWM_RBUTTONDOWNで、InvalidateRectを呼ぶ。またはfillrectで白塗りする。

そんな感じ。
111デフォルトの名無しさん:2006/12/05(火) 14:54:37
>>109

                            コードを書く前に言っておくッ! 
                    おれは今>>109の宿題をほんのちょっぴりだが体験した
                  い…いや…体験したというよりはまったく理解を超えていたのだが……
         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『内容がないよう』
        i|:!ヾ、_ノ/ u {:}//ヘ        
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    C言語だとかC++だとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…
112デフォルトの名無しさん:2006/12/05(火) 14:55:39
>>111
ハゲワロタ
113110:2006/12/05(火) 15:03:39
>>108
おまい、MFCか。
それならそうと初めにかいてくれ。

っていうかテンプレ書いてくれ。
114173:2006/12/05(火) 15:10:58
>111
ネ申
115デフォルトの名無しさん:2006/12/05(火) 15:12:34
[1] 授業単元:計算機演習
[2] 問題文(含コード&リンク):
1:4この1桁のすうじからなる順列を乱数で生成
2:4個の数字の順列を入力
3:生成した順列と入力の順列を比較
(数と位置が合っている[hit],数はあるけど位置が違う[blow])

4:ヒット数とブロー数を表示

5:順列があたるまで入力を繰り返す
[3] 環境
 [3.1] OS:Linux (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:コンパイラはgcc
 [3.3] 言語: C言語
[4] 期限: ([2006年12月19日12:00まで]
[5] その他の制限: 無し
116のいまんさん:2006/12/05(火) 15:12:43
[1] 授業単元:MMM(マルチ・メディア・モデリング)
[2] 問題文(含コード&リンク): 例題2.1を以下の点について拡張せよ.
マウスを左クリックしたときに追加される文字列を各自変更すること.
マウスを右クリックしたときに,クリアすること.(マウスを右クリックすると何も表示されなくなる.)
[3] 環境
 [3.1] OS: Windows 
 [3.2] コンパイラ名とバージョン: VC++ 6
 [3.3] 言語: C++
 [4] 期限: 12月5日17:00まで
[5] その他の制限:

117115:2006/12/05(火) 15:14:27
訂正
[4] 期限: ([2006年12月12日12:00まで]
118のいまんさん:2006/12/05(火) 15:22:41
>>110
>>116がテンプレです。
119デフォルトの名無しさん:2006/12/05(火) 15:24:23
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): ライブラリ関数「strcmp(char str1,char str2」
と同じ処理をする関数を記述せよ。
[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限: ([2006年12月8日)
[5] その他の制限: for文、if文、ポインタなし、

for(i=0;str1[i]=str2[i];i++)はわかるんですけど、
if文の分け方がいまいちわかりません。
どうかお願いします。
120デフォルトの名無しさん:2006/12/05(火) 15:34:14
for(i=0;str1[i]=str2[i];i++)

これってstrcpyだよな
最後セミコロンいるけど
121のいまんさん:2006/12/05(火) 15:44:42
プロジェクトはMFC(exe)です。
122115:2006/12/05(火) 15:54:13
訂正(何度もすみません…)
[3] 環境
 [3.1] OS:Linux
123デフォルトの名無しさん:2006/12/05(火) 16:03:58
>>115
ヒット&ブロウでいいと思ったのでそういうものつくってみた。
カスタマイズはご自分で!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4
int main(){
    int Number[N],In[N];
    int i,j,hit,blow;
    srand(time(NULL));
    for(i=0;i<N;i++){Number[i]=rand()%10;In[i]=0;}
    do{
        printf("%d桁の数を入力!:",N);
        for(i=0;i<N;i++){if((In[i]=getchar()) ==EOF) break;
            In[i]-='0';}
        fflush(stdin);hit=0,blow=0;
        for(i=0;i<N;i++){if(Number[i]==In[i]) hit++;}
        for(i=0;i<N;i++){for(j=0;j<N;j++){if(Number[i]==In[j]) {
                    blow++;
                    break;
        }}}
        for(i=0;i<N;i++) printf("%d-",In[i]);
        printf("%dHit,%dBlow\n",hit,blow-hit);
    }while(hit!=N);
    for(i=0;i<N;i++) printf("%d",Number[i]);
    puts("\nComplete!!");
}
124デフォルトの名無しさん:2006/12/05(火) 16:15:40
>>119
ライブラリ関数「strcmp(char str1,char str2」
なんてないと思うんですけど.....

strcmp(char* str1,char* str2) なのか?
上だと文字列が関数に引き渡せないんじゃないか?
125デフォルトの名無しさん:2006/12/05(火) 16:21:42
>>119
gcc3.4.4のコードを張ってみる。
google code searchって便利だね。
GPLライセンス付けて提出すればOKじゃね?

int
strcmp (const char *s1, const char *s2)
{
#ifdef __OPTIMIZE__
if (inside_main)
abort ();
#endif

while (*s1 != 0 && *s1 == *s2)
s1++, s2++;

if (*s1 == 0 || *s2 == 0)
return (unsigned char) *s1 - (unsigned char) *s2;
return *s1 - *s2;
}
126デフォルトの名無しさん:2006/12/05(火) 16:22:54
二つの文字列s1,s2 をキーボードから入力し,それぞれの文字列の長さ(NULL 文字は含まな
い)を画面表示し,さらに文字列s1 の後ろに文字列s2 を連結して画面表示するプログラムを
作成しなさい.ただし,文字列s1 と文字列s2 を連結したものを一度文字列s1 に格納してから
表示を行うこと.また,strlen(),strcat()等の関数を使ってはならない.

よろしくお願いします。
127デフォルトの名無しさん:2006/12/05(火) 16:26:01
>>125
関数名が違うよ?(笑)
128のいまんさん:2006/12/05(火) 16:30:09
自分のプログラミングはどうなったのでしょうか?
>>116です。
129デフォルトの名無しさん:2006/12/05(火) 16:34:23
>>127
それくらい各自で直せ。
130127:2006/12/05(火) 16:37:16
>>129
関数名が違うわけじゃなかったわ。関数の引数が違うってことでした。
131デフォルトの名無しさん:2006/12/05(火) 16:38:10
有難うございました
132デフォルトの名無しさん:2006/12/05(火) 16:40:56
MFC つかったことないんだけど、こんな感じじゃないかなー。

OnRButtonDown( UINT nFlags, CPoint point ){
    CClientDC hdc(this);
    RECT rt;
    CBlush bl(RGB(0,0,0));
    
    this->GetClientRect(&rt);
    hdc->FillRect(&rt,&bl); 

    return;
}
133のいまんさん:2006/12/05(火) 16:46:34
>>132
エラーがでちゃいますね。
CBlush blはどこから持ってきた関数なんですか?
134デフォルトの名無しさん:2006/12/05(火) 16:48:36
CBrush だわ。MFC標準で入ってるクラス。
http://www.cppdoc.com/example/mfc/mfc.html
参考にして書いた。
135かき☆:2006/12/05(火) 16:52:00
今日課題が出たんです...
簡単すぎたらすみません;;;;
【2以上の整数を読み込み素数であるかどうかを判定する文をつくる】
というのなんですけど...

お願いします!!!m(_ _。)m ペコリ
136デフォルトの名無しさん:2006/12/05(火) 16:53:32
>>135
テンプレ書いてくれとあれほど・・・。
137かき☆:2006/12/05(火) 16:59:52
テンプレって何ですか??☆ごめんなさいっ[壁]ノ_<。)
138のいまんさん:2006/12/05(火) 16:59:57
>>134
FullRectが構造体、共有体のポインタではないとでるんですが・・・。
139デフォルトの名無しさん:2006/12/05(火) 17:01:50
>>137
ちゃんと>>1をよんでくれ。
140デフォルトの名無しさん:2006/12/05(火) 17:03:43
>>138
hdc->FillRect(&rt,&bl);  

hdc.FillRect(&rt,&bl);  

に変更。
141デフォルトの名無しさん:2006/12/05(火) 17:03:47
テンプレがわからないのはともかく、
コピペができる人でないと難しい。
142のいまんさん:2006/12/05(火) 17:04:19
>>134
FillRectだったですね。
143揚げ物2号:2006/12/05(火) 17:04:20
[1] 授業単元: C言語基礎演習
[2] 問題文(含コード&リンク):二次元配列
[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ名とバージョン:わかりません
 [3.3] 言語: C
[4] 期限: 12月6日1:00まで
[5] その他の制限: defineは使わずに。二次配列(hyo[i][j])を使って
         作る。

1から3までの3種類の商品について、1月から12月までの売り上げ個数
を入力すると、商品ごとの合計売り上げ個数と月ごとの合計売り上げ個数を
表示するプログラム。

144のいまんさん:2006/12/05(火) 17:07:15
>>140
エラーがなくなったのですが、右クリックをすると画面が黒くなって、左クリックをすると元の画面に戻ってしまいます。
145のいまんさん:2006/12/05(火) 17:08:10
>>140
>>144は実行時の結果です。
146かき☆:2006/12/05(火) 17:08:28
[1]プログラム演習
[2]2以上の整数を読み込み素数であるかどうかを判定する文をつくる
[3]C言語
[4]12月12日
[5]for文if文switch文while文break文は習ってます

お願いします!!
147デフォルトの名無しさん:2006/12/05(火) 17:16:21
>>144
FillRectは四角形の塗りつぶしメソッド。

CBlush bl(RGB(0,0,0)); 
RGBで色を指定してる部分をうまく合わせてくれ。
0は色を発色しないという意味になるから、そこをなんとか。
148のいまんさん:2006/12/05(火) 17:20:36
>>147
でも左クリックすると、もともと右クリックで消える前にあった文字列が表示されるんですよね・・・・。
149デフォルトの名無しさん:2006/12/05(火) 17:32:19
>>146
#include <stdio.h>
int main() {
int n, i, j, k, f = 1;
scanf("%d", &n);
for(i=2;i<n;i++) {
if(n%2) {
switch(n%i) {
case 0: f = 0; break;
}
}
}
j = 0;
while(j<100) {
j++;
}
}
if(n == 1) f = 0;
printf("%s", f ? "素数" : "非素数");
return 0;
}
150149:2006/12/05(火) 17:35:14
>>146
間違えた

#include <stdio.h>
int main() {
int n, i, j, k, f = 1;
scanf("%d", &n);
for(i=2;i<n;i++) {
switch(n%i) {
case 0: f = 0; break;
}
}
j = 0;
while(j<100) {
j++;
}

if(n == 1) f = 0;
printf("%s", f ? "素数" : "非素数");
return 0;
}
151デフォルトの名無しさん:2006/12/05(火) 17:37:24
>>148
むー。もしかして、ダブルバッファリングしてるのか。
それなら、バックバッファにFillRectすればOK。

情報が小出しなのはやめてくれーTT
152デフォルトの名無しさん:2006/12/05(火) 17:44:58
なんでこんなのにマジレスしてるやつがいるんだ・・・
153かき☆:2006/12/05(火) 17:46:30
>>150

ありがとうございます☆
これは何桁でも使えますか??なぜkを定義してつかってないのですか??
154のいまんさん:2006/12/05(火) 17:47:39
>>151
バックバッファとはなんでしょう?
155デフォルトの名無しさん:2006/12/05(火) 17:48:47
>>146
#include <stdio.h>

int main(void)
{
int num, i, rem;

printf("整数を入力:");
scanf("%d",&num);
for(i=2;i<num;i++)
{
rem = num % i;
if(rem == 0)
{
printf("%dは素数ではない\n", num);
return 0;
}
}
printf("%dは素数\n",num);
return 0;
}
156デフォルトの名無しさん:2006/12/05(火) 17:49:33
こいつらに関わるな
スレのレベルがどんどん下がる
そのうち「2つの整数の和を求めるプログラムがわかりません><」
とか来るぞ
157デフォルトの名無しさん:2006/12/05(火) 17:52:24
>>153
intの最大値まで使える
kがいらないなら外せばいい
158揚げ物2号:2006/12/05(火) 17:53:07
[1] 授業単元: C言語基礎演習
[2] 問題文: 1から3までの3種類の商品について、1月から12月までの売り上げ個数
を入力すると、商品ごとの合計売り上げ個数と月ごとの合計売り上げ個数を
表示するプログラム。
[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ名とバージョン:わかりません
 [3.3] 言語: C
[4] 期限: 12月6日1:00まで
[5] その他の制限: defineは使わずに。二次配列(hyo[i][j])を使って
         作る。

143でミスってたので、もう1度書き直しました。
159デフォルトの名無しさん:2006/12/05(火) 17:56:22
>>15
>>92
>>93
>>94
>>115
>>119
>>126
マルチ率凄いな
160デフォルトの名無しさん:2006/12/05(火) 17:59:37
[1] プログラミング演習
[2] Buffonの針の問題
 床に間隔2Lの平行線を引き、長さ2a(<2L)の針をN本用意すればランダムに針を投げn本が平行線に交差する。
確率はn/N=2a/πLとなる。
a=Lの場合はしたがってP=n/N=2/πになる。
これを用いてπの値を求めるプログラムを作成せよ。
 [3] 環境
 [3.1 Windows
 [3.2] Borland C++ Compiler 5.5
 [3.3]  C++
 [4] 12月11日まで
161デフォルトの名無しさん:2006/12/05(火) 18:05:46
>>154
そろそろ余裕がなくなってきたからこれが最後。

ダブルバッファリングのバックバッファというのは主対象と類似したものをもう一個用意して、下準備するためのもの。
グラフィックの場合は表示される領域と同じだけの大きさの領域を確保してそこに下準備として描画する。
グラフィックにおける恩恵は画面のチラツキなどを防止するという効能がある。

そんなわけでやね、どこかにDrawTextかなんかで文字列をバックバッファに書き込んでる所があるはずだから、
そこを探し出してこぴーして変更してみてくれ。


そもそも、MFC知らないんだってば。TT
じゃ、がんばってくれ。
162デフォルトの名無しさん:2006/12/05(火) 18:06:08
長さ2a(<2L)って条件で求めた式で、a = Lを仮定しちゃダメだろ。
163デフォルトの名無しさん:2006/12/05(火) 18:10:11
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):以下の機能をもつプログラムを作る
・行列(要素は整数型、3行x3列)に値を入力する
・行列を表示する
・利用者が入力した列番号に基づいて、行列の2つの列を入れ替える
・転置行列を求める

ただし、以下の機能を持つ関数のプログラムを個別に作り、一つにまとめる。
主プログラム(main)
行列に値を入力する関数
行列を表示する関数
利用者が入力した列番号に基づいて、行列の2つの列を入れ替える関数
転置行列を求める関数
機能の一覧(終了、行列成分を入力、表示、列の入れ替え、転置)を表示する関数

(行列は大域変数とし、2次元配列を用いて表現すること)

[3] 環境
 [3.1] OS:Windows
 [3.2] バージョン:VC++2005
 [3.3] 言語:C++
[4] 期限:12/7 木曜日
[5] その他の制限:何という呼び名かよくわかりませんが、行列計算がプログラムを長々と書かなくてもできるような機能があるみたいですが、そういうのを使うのは無しと制限されました。
入出力ライブラリは
#include <iostream>
using namespace std;  っていうのしか習ってません。

よろしくお願いします。
164デフォルトの名無しさん:2006/12/05(火) 18:13:31
>>160
これって無限に広い平面状で投げるわけじゃないよね?
165のいまんさん:2006/12/05(火) 18:17:50
うーん、条件のクリアするって言うのが多分もとの状態に戻すっていうニュアンスのものなので上からかぶせるっていう方法は多分違うと思います。
166かき☆:2006/12/05(火) 18:18:21
>>155

本当にありがとうございます☆

幼稚な内容でごめんない[壁]ノ_<。)丁寧に教えてくださってありがとうございます☆
167デフォルトの名無しさん:2006/12/05(火) 18:30:54
顔文字使う奴死ねばいいのに
168デフォルトの名無しさん:2006/12/05(火) 18:38:04
>>164
興味が有ったので少し調べたら、
『無限平面に無限長の線分が等間隔に無限本存在する』イメージで良いみたい。
結局、ランダムな要素とは『針の中心から直近の線分までの距離』と『針の角度』だけだから。
169デフォルトの名無しさん:2006/12/05(火) 18:45:17
ビュッフォンの針たあ懐かしい
別に有限と仮定しちまってもおkだぜ
170デフォルトの名無しさん:2006/12/05(火) 18:47:37
>>168
なるほど、平行線も無限本ね
とすると有限で考えられるな
171デフォルトの名無しさん:2006/12/05(火) 19:09:50
>>160
doubleでa,Lを、intでN,nを宣言して
for(int i=0;i<N;i++)if(L*rand()/RAND_MAX+a*cos(M_PI/2*rand()/RAND_MAX)>=L)n++;;cout << 2*a*N/n/L << endl;
172デフォルトの名無しさん:2006/12/05(火) 19:26:45
>>167
自分勝手な感情をやたらと公の場で敢えて表現しちゃう
自分勝手な奴こそ(ry
173デフォルトの名無しさん:2006/12/05(火) 19:28:52
>>172
わざわざ名前消してsageて自分擁護ですか
174デフォルトの名無しさん:2006/12/05(火) 19:31:36
>>167>>173
自分勝手な判断基準で公の場に自分のみっともない恥を晒して
バカだなぁw お前みたいなのは世間知らずって言うんだよw
良く周りから、つまらないことで笑われるだろ?w
悪いが俺は顔文字を使った本人じゃないw
お望みどおりお前のバカ発言を晒しageしちゃるw
175デフォルトの名無しさん:2006/12/05(火) 19:36:33
>>174
どこを縦読み?
176デフォルトの名無しさん:2006/12/05(火) 19:40:35
>>175
ぷぷっ、そういうことでしか場を濁すことしか出来なくなったかw
宿題に答える気がないなら失せろ、俺もこれ以上お前みたいな
世間知らずの知能、知性の低い奴を相手にはしない
もっと広い世の中を知るんだな、井の中の蛙w
177デフォルトの名無しさん:2006/12/05(火) 19:43:22
>>172=>>174=>>176ならおもろいな
178のいまんさん:2006/12/05(火) 19:45:41
どなたかMFCわかる方いませんか?
179160:2006/12/05(火) 19:46:30
>>171
出来ました。
ありがとうございました。
180デフォルトの名無しさん:2006/12/05(火) 20:05:40
>>178
今ココ見たんで、よくわからんけど
文字の追加、クリアだけなら
イチイチ画面を塗りつぶす必要は無いのでは?
例えばウィンドウクラスのメンバに文字を格納するバッファを持っておいて
それをOnDraw()内でTextOut()で描画して

左クリック→バッファに文字追加
右クリック→バッファの内容をクリア

とすればいいのでない?
181デフォルトの名無しさん:2006/12/05(火) 20:12:54
つか元の問題あるんなら何故それを晒さないんだぜ?
182デフォルトの名無しさん:2006/12/05(火) 20:16:07
>>116で「例題2.1を拡張せよ」ってなってるのに
例題2.1がどんなモンだか示さないのでは、エスパーでもない限り
どうしようもないよな。
183のいまんさん:2006/12/05(火) 21:00:26
プロジェクトワークスペースの作成
表示する文字列を格納するためのメンバー変数を追加.
onDraw に文字列を表示する記述を追加
クラスウィザードで,「マウスの左ボタンを押した」というイベントに対するメッセージハンドラを生成する.
生成したメッセージハンドラに,文字列を1文字分長くするという記述を追加.

例題2.1はこんな感じです。
184デフォルトの名無しさん:2006/12/05(火) 21:06:54
こんな感じ
185デフォルトの名無しさん:2006/12/05(火) 21:24:35
>>183
そういうノリなら>>180でおkっぽいな
186のいまんさん:2006/12/05(火) 21:31:59
どんなノリだったらもっと詳しく教えてもらえるんでしょうか?
187デフォルトの名無しさん:2006/12/05(火) 22:08:11
>>186
・Viewクラスに文字列を保持するメンバ変数Aを追加した
・OnLButtonUp()あたりに、Aに値をセットするコードを記述した
・OnDraw()に、Aの内容をTextOut()か何かで描画するコードを記述した

んだろ?
んなら、
・OnRButtonUp()あたりに、Aの値をクリアするコードを記述する
でおk。
Aの型がCStringなら、
A = "";
の一行を追加するだけだ。
188のいまんさん:2006/12/05(火) 22:21:32
出来た。どうもありがとうございました。
189デフォルトの名無しさん:2006/12/05(火) 22:24:59
『データ用整数型変数a,bを宣言して、aをbで割り算した値をcに、余りをdに代入して表示しなさい。必要な変数は適宜、宣言すること。』という問題がどうしてもわかりません。
申し訳ありませんが教えてください。
190デフォルトの名無しさん:2006/12/05(火) 22:29:08
>>189
どうしてもわからないんじゃないだろ
素直にやる気がないので教科書も見る気はない、検索する気もないって言えよ

int a=1, b=0, c=a/b, d = a%b;
191デフォルトの名無しさん:2006/12/05(火) 22:32:34
>>190
のサンプルソースw
192デフォルトの名無しさん:2006/12/05(火) 22:33:18
ありがとうございます!
うちの学校、プログラミングの教科書とかないんですよ。
本当に助かります。
193デフォルトの名無しさん:2006/12/05(火) 22:33:51
>>192
本屋逝け。
194デフォルトの名無しさん:2006/12/05(火) 22:35:06
つか、図書館なり図書室なり無いんか
195デフォルトの名無しさん:2006/12/05(火) 22:36:38
図書館とかにC言語の本とかって置いてあるんですか!!??
196デフォルトの名無しさん:2006/12/05(火) 22:37:04
>>194
本人が無いと主張しているし、無いのでは?
蔵書が少ない図書室をあはれむ。
197デフォルトの名無しさん:2006/12/05(火) 22:38:23
それなりの本屋に行けば有るから。
Cの入門書とか大量に有るから。
別にD言語とか、そんな新しい言語とかサポートが行き屆いてない言語じゃないんだからw
198デフォルトの名無しさん:2006/12/05(火) 22:39:39
そうなんですか!
今度図書室とか本屋とか覗いて見ます!
とてもいい情報をありがとうございました!
199デフォルトの名無しさん:2006/12/05(火) 22:42:52
本見なくてもネットにC言語のサイトが山ほどある
200デフォルトの名無しさん:2006/12/05(火) 22:47:49
みなさん色んな情報をしってるんですね!
勉強になります!
201デフォルトの名無しさん:2006/12/05(火) 22:49:07
と云うか先ず、ググってみるなりなんなりしてみ。
202デフォルトの名無しさん:2006/12/05(火) 22:50:12
うちの高校の図書室スレイヤーズの文庫あったな
203デフォルトの名無しさん:2006/12/05(火) 22:50:45
了解しました!!
ありがとうございました☆
204デフォルトの名無しさん:2006/12/05(火) 22:51:44
ウチの中学はニュータイp(ry
205デフォルトの名無しさん:2006/12/05(火) 22:52:27
2chで質問したって善意に見せかけた悪意の答えが返ってくるだけだしやめときな
206デフォルトの名無しさん:2006/12/05(火) 23:00:07
>>156レベルの質問来たな
207デフォルトの名無しさん:2006/12/05(火) 23:17:16
>>205
>善意に見せかけた悪意の答え
見分けられるようになれば2ちゃんは便利
ようは使い方次第だぜ
208デフォルトの名無しさん:2006/12/05(火) 23:19:16
実は>>205が善意に見せかけた悪意の答えだったり
209デフォルトの名無しさん:2006/12/05(火) 23:28:58
[2] 問題文(含コード&リンク):
@学生番号(3桁の整数)と氏名(アルファベットで姓のみ)をメンバとする構造体を定義し,キーボードから学生番号と氏名を5名分読み込むプログラムを作成しなさい.
ただし,3桁以外の整数値を入力した場合は再入力するようにし,最後に5名分のデータをすべて表示すること.
〔実行結果〕
学生番号(3桁の整数)> 444
氏名(アルファベットで姓のみ)> Takeda
…………
学生番号(3桁の整数)
学生番号(3桁の整数) > 99
学生番号(3桁の整数)> 631
氏名(アルファベットで姓のみ)> Sato
学生番号(3桁の整数)> 107
氏名(アルファベットで姓のみ)> Furukawa

〔5名分のデータ表示例〕
学生番号: 444 氏名: Takeda
学生番号: 221 氏名: Kato
学生番号: 859 氏名: Azuma
学生番号: 631 氏名: Sato
学生番号: 107 氏名: Furukawa

A @の構造体に,身長,体重,肥満度のメンバ(いずれも浮動小数点数)を加えた構造体を新たに定義する.
また,あらかじめ5名分の学生番号と氏名のデータ(任意、実際の学生番号と一致する必要は全くない)で初期化しておく.
まず,この5名のデータにキーボードから身長[m],体重[kg]のデータ(任意)を入力する.
次に,個人ごとの構造体データへのポインタを受け取り,身長,体重から肥満度[%] を計算する関数を作成し,その関数を用いて各人の肥満度を表示するプログラムを作成しなさい.
ただし,肥満要注意の人(肥満度30%以上)には,任意の注意マークをつけること.肥満度は次の式で計算され,0%のとき標準体重,正の値は肥満型,負の値は痩せ型を表わす(BMI (Body Mass Index)の計算式より).
肥満度[%] = {体重/(身長×身長×22)}×100−100

[3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio 2003 [3.3] 言語: C [4] 期限: 12月11日
210デフォルトの名無しさん:2006/12/05(火) 23:36:38
>>158
その問題文だと色々表示方法があると思うんだが、きっちり正確なんだろうな?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3095.txt

#define使えないとやりにくいな
211デフォルトの名無しさん:2006/12/05(火) 23:55:27
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
整数値が1行に1つづつ記入されたファイルがあるとする(最大100行)。この
ファイル名をコマンドライン引数で指定し、その内容をintの配列に格納して
順に表示するプログラムを作成せよ。なお、本プログラムの作成にあたって
は以下の3つにソースを分割し、makeコマンドによって実行ファイルを生成
するようにすること。
1.main()関数を含むファイル。
2.指定されたファイルの内容を全て読み込む関数(引数はファイル名とintの
配列を示すポインタ、返り値は読み込んだ整数値の個数)を含むファイル。
3.ポインタで示されたintの配列を順に表示する関数(引数はintの配列を
示すポインタと格納された整数値の個数)を含むファイル。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日の16時
[5] その他の制限: 大域変数を用いてはならない。2および3の関数はmain
関数から、それぞれ1回づつ呼び出されるようにする。

よろしくお願い致します。
212デフォルトの名無しさん:2006/12/06(水) 00:48:53
>>211
各ファイルに分けてmake

/* -- 1.c -- */
#include <stdio.h>
#include "h.h"
main(int argc, char *argv[]){
int a[100];
pt(a, rd(argv[1], a));
return 0;
}
/* -- 2.c -- */
#include <stdio.h>
int rd(char *f, int *a)
{
int *b = a;
FILE *fp = fopen(f, "r");
while (fscanf(fp, "%d", b++) != EOF)
;
return --b-a;
}
/* -- 3.c -- */
#include <stdio.h>
void pt(int *a, int i)
{
while (i-- > 0)
printf("%d\n", *a++);
}
/* -- h.h -- */
int rd(char *, int *);
void pt(int *, int);
213212:2006/12/06(水) 00:49:54
/* makefile */
/* ccの行の先頭はtabをおく */
a: 1.o 2.o 3.o
  cc -o a 1.o 2.o 3.o

.c.o:
  cc -c $<

1.o: h.h
214デフォルトの名無しさん:2006/12/06(水) 00:52:10
あ、1.o: h.h はいらないかも
215デフォルトの名無しさん:2006/12/06(水) 01:32:58
ぐあ、課題明後日までって忘れてたorz

[1]プログラミング演習
[2]
1,Y=sin(X)のグラフを書きなさい。ただし0<X<2πとする
2,名前と点数からなる複数のデータを入力し、点数にしたがって並び替えなさい。
3,(1)文字列を入力しその長さを出力するプログラムを作りなさい
(2)数字の文字列を読み込んで、それぞれの数字の出現回数を出力するプログラムを作りなさい
4,次の積分を台形法により求めよ。またシンプソンの積分公式で求めよ
 ∫sinxdx=1(積分範囲は[0,π/2])
[3]C++
[4]12月7日
[5] その他の制限:特にありません



よろしくお願いします。
216デフォルトの名無しさん:2006/12/06(水) 01:48:40
すいません。 >>163 をどなたか教えてもらえませんか?
217211:2006/12/06(水) 02:03:34
>>212
解答ありがとうございます。
助かりました。
218デフォルトの名無しさん:2006/12/06(水) 02:03:36
>>215
全部丸投げかよw
どれか一個くらい解け
219 ◆GJenck4cmw :2006/12/06(水) 02:05:39
[1] 授業単元: 情報処理T
[2] 問題文(含コード&リンク): 1万円以上の金額を入力し、必要となる金種別の
               枚数計算を行い、結果を配列Aに設定するプログラム
               をつくれ。ただし、使用する金種は、1万円・千円
               百円・十円・一円も5種類のみとし、配列Bに予め
               値が格納されているとする。結果は配列Aと配列Bの
               内容を印刷せよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++Compiler 5.5
 [3.3] 言語: C++
[4] 期限:2006年12月6日午前8:00 まで
[5] その他の制限:C言語を習い始めて3ヶ月と6日です。
         1次元配列を習っているところなので1次元配列を
         使用した形でよろしくお願いします。
         
220デフォルトの名無しさん:2006/12/06(水) 02:07:17
>>218
ごめん、でも全部じゃないんだ。
これでも半分は自力でやって後残りなんだよ。
221デフォルトの名無しさん:2006/12/06(水) 02:19:53
>>220
半分やったっていう問題plz
222デフォルトの名無しさん :2006/12/06(水) 02:28:32
>>215
俺、前もこのシンプソンの積分問題ちがった形式で見て、答え書いたぞ
シンプソンの積分以外の条件はもう見る気しないから、前はったソース貼るから見て
勝手に考えてちょーだい
//台形公式と2次のシンプソン則に基づく数値積分を行う

#include <stdio.h>
double func(double x);
double integra10(double (*func_p)(double x),double a, double b, unsigned int n);
main(){
double a,b;//区間
unsigned int n;//分割数
printf("積分区間 [a,b]と区間数n a,b,n : ");
scanf("%lf,%lf,%ud", &a,&b,&n);
printf("長方形近似 I=%20.17f\n",integra10(func,a,b,n));
}
double func(double x){ return(2.0/(1.0+x*x));}
double integra10(double (*func_p)(double x), double a, double b, unsigned int n)
{
double dx ; double h0, hn, hsum = 0.0,x , sum = 0.0; unsigned int i;
if(n == 0 && b == a)
return 0;
dx = (b - a)/n; h0 = (*func_p)(a); hn = (*func_p)(b);
for(i = 1, x = a + dx; i < n -1; x+= dx, i++){ hsum += (*func_p)(x); }
if(((h0 + hn + (2 * hsum)) * dx / 2) < 0 )
return (((h0 + hn + (2 * hsum)) * dx / 2) * -1);
else
return ((h0 + hn + (2 * hsum)) * dx / 2);
}
223デフォルトの名無しさん:2006/12/06(水) 02:36:07
[1] 授業単元:プログラミングT
[2] 問題文:
学生の成績データがseisekiというファイルに以下のように格納されて
いる。
20060001 88
20060002 97
20060003 58
20060004 77

  ・
このファイル内のデータを入力し、@データの組数(学生何人分のデー
タが格納されているか)、A成績の最高点と最高点の学生の学籍番号、
B成績の最低点と最低点の学生の学籍番号、C成績の平均点、を求
め、以下の形式で画面に表示するプログラムを作成せよ。なお、最高
点もしくは最低点をとった学生が複数いる場合、それぞれファイルに
近いほうのデータ内の学籍番号を示すこと。
224デフォルトの名無しさん:2006/12/06(水) 02:36:52
・1から20までの数について3乗の数表を作れ
・次の計算をしろ
 e=(1/1!)+(1/2!)+・・・+(1/10!)
・データの数n(n≦50),及び,n個の整数データを読み込み
読み込んだデータを読み込んだ順と逆の順で出力(nの値は出力しない)するプログラムを書け
なお,各データは1つ以上のスペースを空けて出力すること.
225デフォルトの名無しさん:2006/12/06(水) 02:36:56
 画面への表示形式(・・には数字が入る)
学生数: ・・名
最高点: ・・点、学籍番号・・の学生が該当する。
  最低点: ・・点、学籍番号・・の学生が該当する。
  平均点: ・・点

ファイル内のデータ組数が多くても、正しく処理できるようにせよ。
(ファイル内のデータをすべてメモリに読み出してから処理するので
はなく、ファイルからデータを読み出しながら処理をするようにせよ

[3] 環境
 [3.1] OS:Unix
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2006/12/06
[5] その他の制限:先日、ファイルの入出力を教えていただいたばかり
です。
226デフォルトの名無しさん:2006/12/06(水) 02:38:39
>>219
配列Bに10000やら1000が初期値として入ってるってこと?
227223:2006/12/06(水) 02:39:00
225は223の続きです。
228デフォルトの名無しさん:2006/12/06(水) 02:51:34
>>222
ありがとうございます。
つか最初の問題と難しさが違いすぎるなこれ。

>>221
224が解いた問題です。
229 ◆GJenck4cmw :2006/12/06(水) 02:55:57
>>226
そうです。
230デフォルトの名無しさん:2006/12/06(水) 03:02:57
>>219
#include<stdio.h>
int main (void){
int A[5] = {0, 0, 0, 0, 0};
int B[5] = {10000, 1000, 100, 10, 1};
int money, i;
printf("input money: ");
scanf("%d", &money);
for(i = 0 ; i < 5; i++){
while(money >= B[i]){
money = money - B[i];
A[i] = A[i] + 1;
}
}
for(i = 0; i < 5; i++){
printf("A[%d] = %d\n", i, A[i]);
}
for(i = 0; i < 5; i++){
printf("B[%d] = %d\n", i, B[i]);
}
return 0;
}
こういうことかな?
寝ぼけてるので問題読み間違えてたらごめん。
3ヶ月と6日ならこんな感じのプログラムでいいのかな。
231230:2006/12/06(水) 03:08:09
言語を間違えた吊ってくる
232デフォルトの名無しさん:2006/12/06(水) 03:17:57
#include <iostream>
using namespace std;
int main (void){
int A[5] = {0, 0, 0, 0, 0};
int B[5] = {10000, 1000, 100, 10, 1};
int money, i;
cout << "input money: " << endl;
cin >> money;
cout << money << endl;
for(i = 0 ; i < 5; i++){
while(money >= B[i]){
money = money - B[i];
A[i] = A[i] + 1;
}
}
for(i = 0; i < 5; i++){
cout << "A[" << i << "] = " << A[i] << endl;
}
for(i = 0; i < 5; i++){
cout << "B[" << i << "] = " << B[i] << endl;
}
return 0;
}
233232:2006/12/06(水) 03:20:49
9行目いらねえOTL
gdgd
234 ◆GJenck4cmw :2006/12/06(水) 03:36:42
>>230

できました。゚(゚ノ∀`゚)゚。

 ほんとうにありがとうございます。

 参考によく考えてみますね。
235215:2006/12/06(水) 03:38:52
最悪だ言語間違ってた。
でも1問出来たので改めて

[1]プログラミング演習
[2]
1,Y=sin(X)のグラフを書きなさい。ただし0<X<2πとする
2,(1)文字列を入力しその長さを出力するプログラムを作りなさい
(2)数字の文字列を読み込んで、それぞれの数字の出現回数を出力するプログラムを作りなさい
3,次の積分を台形法により求めよ。またシンプソンの積分公式で求めよ
 ∫sinxdx=1(積分範囲は[0,π/2])
[3]C
[4]12月7日
[5] その他の制限:特にありません



よろしくお願いします。
236デフォルトの名無しさん:2006/12/06(水) 03:55:49
237デフォルトの名無しさん:2006/12/06(水) 04:01:37
>>235
2-1
#include<stdio.h>
#include<string.h>
main(){
char s[30000];
scanf("%s", s);
printf("%d\n", strlen(s));
return 0;
}

30000字まで。
238デフォルトの名無しさん:2006/12/06(水) 04:08:10
>>163をスルーしないで
239デフォルトの名無しさん:2006/12/06(水) 04:08:52
>>237
ありがとうございます。
自分ももうちょい頑張ってみますね
240デフォルトの名無しさん :2006/12/06(水) 04:12:40
>>163
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3097.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3098.txt
おら、無理矢理つくったわクラスで
全然安全実装じゃないけどねーーー!!!!!
こんなめんどくさいのやってられっか
3097.txtがヘッダーだ
これインクルードして3098.txtみたいな形で確認して一応出来てる。
安全じゃないけどねーーーーーーーーーーーーーーー
241デフォルトの名無しさん:2006/12/06(水) 04:24:36
>>240
自分はこんなプログラムは到底できなかったです。
自分みたいな初心者というか、タコ野郎向けにこんな長いプログラムを書いてもらって、ありがとうございました。
これで、自分以外のタコも救われます。
242デフォルトの名無しさん:2006/12/06(水) 05:30:03
>>235
2-1
#include<stdio.h>

void main(){
char st[100];
scanf("%s",st);
printf("語長:%d\n",strlen(st));
}
2-2

#include <stdio.h>
#include <ctype.h>
int main(){
char st[100];
int count[10];
char zero='0';
for(int i=0;i<10;i++)count[i]=0;
scanf("%s",st);
for (i=0;st[i];i++){
if(!isdigit(st[i])){
printf("半角数字だけで頼むわ\n");
return 1;
}
count[st[i]-zero]++;
}
for (i=0;i<10;i++)printf("%dの数%d個\n",i,count[i]);
return 0;
}
243242:2006/12/06(水) 05:31:13
2-1に#include <string.h>つけといて
244デフォルトの名無しさん:2006/12/06(水) 11:41:50
>>235 2-3 以前貼ったやつの改訂版を書き換えた。前の色々間違ってたが大丈夫だったかな…
#include <math.h>
#include <stdio.h>
#define PI 3.1415926535898
double f(double x) {return sin(x);}
double trapezoidal(double a, double b, int n) {
    double s = 0., h = (b - a) / n; int i;
    for (i = 1; i < n; ++i) s += f(a + i * h);
    s *= 2; s += f(a) + f(b); s *= h / 2;
    return s;
}
double simpson(double a, double b, int n) {
    double s = 0., c0, c1 = a; int i;
    for (i = 0; i < n; ++i) {
        c0 = c1; c1 = a + (b - a) * (i + 1) / n;
        s += (c1 - c0) * (f(c0) + 4 * f((c0 + c1) / 2) + f(c1)) / 6;
    }
    return s;
}
int main(void) {
    int n = 2; double a = 0, b = PI / 2, a1, a2 = trapezoidal(a, b, n), e = 0.000001;
    do {
        a1 = a2; a2 = trapezoidal(a, b, n <<= 1);
    } while (fabs(a1 - a2) > e);
    printf("台形 : S=%f\n", a2, n);
    n = 2; a2 = simpson(a, b, n);
    do {
        a1 = a2; a2 = simpson(a, b, n <<= 1);
    } while (fabs(a1 - a2) > e);
    printf("シンプソン : S=%f\n", a2, n);
    return 0;
}
245デフォルトの名無しさん:2006/12/06(水) 11:54:03
>>235 間違い発見。さらに修正版。
#include <math.h>
#include <stdio.h>
#define PI 3.1415926535898
double f(double x) {return sin(x);}
double trapezoidal(double a, double b, int n) {
    double s = 0., h = (b - a) / n; int i;
    for (i = 1; i < n; ++i) s += f(a + i * h);
    s *= 2; s += f(a) + f(b); s *= h / 2;
    return s;
}
double simpson(double a, double b, int n) {
    double s = 0., c0, c1 = a; int i;
    for (i = 0; i < n; ++i) {
        c0 = c1; c1 = a + (b - a) * (i + 1) / n;
        s += (c1 - c0) * (f(c0) + 4 * f((c0 + c1) / 2) + f(c1)) / 6;
    }
    return s;
}
int main(void) {
    int n = 2; double a = 0, b = PI / 2, a1, a2 = trapezoidal(a, b, n), e = 0.000001;
    do {
        a1 = a2; a2 = trapezoidal(a, b, n <<= 1);
    } while (fabs(a1 - a2) > e);
    printf("台形 : S=%f\n", a2);
    n = 2; a2 = simpson(a, b, n);
    do {
        a1 = a2; a2 = simpson(a, b, n <<= 1);
    } while (fabs(a1 - a2) > e);
    printf("シンプソン : S=%f\n", a2);
    return 0;
}
246デフォルトの名無しさん:2006/12/06(水) 12:00:30
[1]ポインタ
[2]
出来なくて困っています。
[1]
200×200の画像を、右下図のようなグラデーションを付けて作成しましょう。
?? プロジェクト名:10grad ファイル名:10grad.c
?? 入力:四角の幅と高さ,出力ファイル名(grad.bmp)
?? 出力:右下に示すようなbmp画像(色にグラデーションを付ける)
?? 数値の入力にatoi関数を利用しましょう
?? 画像のメモリはmalloc関数を用いて動的に確保しましょう
[2]
200x200画素の画像の中心に指定した底辺と高さの三角形
を配置したプログラムを作成しよう。画像は1次元配列で動
的にメモリを確保しよう。
?? プロジェクト名:10triangle ファイル名:10triangle.c
?? 入力:出力ファイル名(triangle.bmp)
?? 出力:例に示すようなbmp画像(色は自由・グラデーションも可)
?? 数値の入力にはatoi関数を利用しましょう
?? 画像のメモリはmalloc関数を用いて動的に確保しましょう
?? ソースファイルと結果のbmp画像をWordに貼り付けて、A4の大きさ
で1ページに印刷して提出しましょう
?? 入力した数値は明記しましょう(値は自由)
?? 画像は白黒でもOKです
例)三角形の画像
詳細は
http://mobiledatabank.jp/s/src/MDBS1055.pdf
の練習問題と課題です。よろしくお願いします。
[3]XP
[4]12月10日
247デフォルトの名無しさん:2006/12/06(水) 12:40:10
>>246
フローチャートまでつけてくれてるのか
親切な先生だなw
248デフォルトの名無しさん:2006/12/06(水) 13:08:55
[1] 授業単元:プログラミングT
[2] 問題文:
学生の成績データがseisekiというファイルに以下のように格納されて
いる。
20060001 88
20060002 97
20060003 58
20060004 77

  ・
このファイル内のデータを入力し、@データの組数(学生何人分のデー
タが格納されているか)、A成績の最高点と最高点の学生の学籍番号、
B成績の最低点と最低点の学生の学籍番号、C成績の平均点、を求
め、以下の形式で画面に表示するプログラムを作成せよ。なお、最高
点もしくは最低点をとった学生が複数いる場合、それぞれファイルに
近いほうのデータ内の学籍番号を示すこと。
249デフォルトの名無しさん:2006/12/06(水) 13:09:50
 画面への表示形式(・・には数字が入る)
学生数: ・・名
最高点: ・・点、学籍番号・・の学生が該当する。
  最低点: ・・点、学籍番号・・の学生が該当する。
  平均点: ・・点

ファイル内のデータ組数が多くても、正しく処理できるようにせよ。
(ファイル内のデータをすべてメモリに読み出してから処理するので
はなく、ファイルからデータを読み出しながら処理をするようにせよ

[3] 環境
 [3.1] OS:Unix
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2006/12/06
[5] その他の制限:先日、ファイルの入出力を教えていただいたばかり
です。
250デフォルトの名無しさん:2006/12/06(水) 13:31:21
>>248
意味分からん>ファイルに近い
251デフォルトの名無しさん:2006/12/06(水) 13:35:07
>>248
学籍番号は8桁、点数は0〜100点、データはdata.txtにあるものと仮定する。
#include <stdio.h>
#include <string.h>
int main(void) {
    char gakuseki[9], min_gakuseki[9], max_gakuseki[9];
    int num_gakusei = 0, score, max_score = -1, min_score = 101, total_score = 0;
    FILE* fp = fopen("data.txt", "r");
    if (fp == NULL) return -1;
    while (fscanf(fp, "%s%d", gakuseki, &score) != EOF) {
        if (score > max_score) {
            max_score = score;
            strcpy(max_gakuseki, gakuseki);
        } else if (score < min_score) {
            min_score = score;
            strcpy(min_gakuseki, gakuseki);
        }
        ++num_gakusei;
        total_score += score;
    }
    fclose(fp);
    printf("学生数: %d名\n", num_gakusei);
    printf("最高点: %d点、学籍番号%sの学生が該当する。\n", max_score, max_gakuseki);
    printf("最低点: %d点、学籍番号%sの学生が該当する。\n", min_score, min_gakuseki);
    printf("平均点: %f点\n", (double)total_score / num_gakusei);
    return 0;
}
252デフォルトの名無しさん:2006/12/06(水) 15:37:00
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
以下の処理を行うプログラムを作成しなさい.ただし,文字列s,t の要素数は50 とすること.
strlen(),strcmp()等の関数を使ってはならない.
(1) キーボードから文字列を入力し,文字列s に格納する.
(2) 文字列sを逆順に並べ替えたものを文字列t に格納する.
(3) 文字列sと文字列t が同一であるかどうかを比較し,その結果を画面表示する.
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc 3.4)
[3.3] 言語: (C/C++)

よろしくお願いします。
253デフォルトの名無しさん:2006/12/06(水) 15:38:22
関数を使ってはならない、か
どうやって文字入力をするんだろう
254デフォルトの名無しさん:2006/12/06(水) 15:39:13
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

int型の変数3個(※配列で宣言する)に数値を入力し、その合計を求めて表示する
プログラムを作成せよ。
プログラムの作成にあたり、以下に従うこと。
・入力数値を格納するint型の配列はmain()関数内で宣言すること
・指定された個数の数値の合計を求める関数getsum()を自作して使うこと。
getsum()関数の仕様は以下の通り。
----- getsum() ----------------------------------------------------
int getsum(int *pnum, int numcnt);
引数 :pnum :数値を格納している配列の先頭アドレス
numcnt :和を求める変数の個数
返却値:算出した和
処理 :指定された個数の変数の和を求める
-------------------------------------------------------------------
※getsum()は、「int getsum(int *, const int);」としてもよい

《実行例》
Enter number(1) : 10
Enter number(2) : 23
Enter number(3) : 41
Sum = 74

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 本日中にお願いします
[5] その他の制限: 簡単なポインタと配列までは進んでいます。
255デフォルトの名無しさん:2006/12/06(水) 15:46:51
>254
#include <stdio.h>
int getsum(int *pnum, int numcnt)
{
int i, sum = 0;
for(i=0; i<numcnt; i++) sum += pnum[i];
return sum;
}

int main(void)
{
int i, a[3];
for(i=0; i<3; i++) {
printf("Enter number(%d) : ", i + 1);
scanf("%d", &a[i]);
}
printf("Sum = %d\n", getsum(a, 3));
return 0;
}
256デフォルトの名無しさん:2006/12/06(水) 15:48:31 BE:34938263-2BP(202)
>>254
#include<stdio.h>
#include<stdlib.h>
int getsum(int* pnum, int numcnt){int res=0;do{res+=pnum[--numcnt];
}while(numcnt);return res;}
int main(void){int ary[3],i,sum;char tmp[100];for(i=0;i<sizeof(ary)/sizeof(int);i++){
printf("Enter number(%d) :",i+1);fgets(tmp,sizeof(tmp),stdin);ary[i]=atoi(tmp);}
sum=getsum(ary,sizeof(ary)/sizeof(int));printf("Sum = %d\n",sum);return 0;}
257デフォルトの名無しさん:2006/12/06(水) 15:50:26
intの和をintなんかで返すのは何故ですか?と質問した学生時代を思い出した
258デフォルトの名無しさん:2006/12/06(水) 16:02:40
>252
#include <stdio.h>

int main(void)
{
int i, j;
char s[256], t[256];
gets(s);
for(i=0; s[i]; i++);
for(j=0; j<i; j++) t[j] = s[i-1-j];
t[i] = '\0';
for(j=0; j<i; j++) if(s[j]!=t[j]) break;
if(i==j) printf("s=t\n");
else printf("s!=t\n");
return 0;
}
259デフォルトの名無しさん:2006/12/06(水) 16:23:59
>>258
要素数は50だそうな。
260デフォルトの名無しさん:2006/12/06(水) 16:37:46
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 実数 x と自然数 p に対し、階乗冪 x[p] = x(x-1)‥(x-p+1) を計算する関数 pow_f(x, p) を、再帰的に定義する。
               なお、初期条件 x[0] = 1.0 である。まず、漸化式 x[p] = x[p-1] * (x-p+1) を立てる。
               正実数および負実数に対して実行せよ。
[3] 環境
 [3.1] OS: (Windows/Linux/等々) windowsXP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) bcc32
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [2006年12月13日まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
261デフォルトの名無しさん:2006/12/06(水) 16:54:35
>260
double pow_f(double x, int p) {
return p ? (x-p+1)*f(x, p-1) : 1.0;
}
262デフォルトの名無しさん:2006/12/06(水) 16:55:27
f → pow_f
263デフォルトの名無しさん:2006/12/06(水) 17:02:09
[1] 授業単元:programming [2] 問題文(含コード&リンク):
double型の変数3つ(※配列で宣言する)に値を入力し、その平均値を求めて表示
するプログラムを作成せよ。
プログラムの作成にあたり以下の仕様に従うこと。
・double型の変数3つはmain()関数内で宣言すること
・double型の変数3つに対する数値入力は別関数inpnum()にて行うこと。

void inpnum(double *dp);
返り値:なし
引数 :dp:数値を格納する変数配列の先頭アドレス
処理 :変数配列に値を入力する

※main()関数内の配列変数を別関数inpnum()にて扱うため、引数として
ポインタを用いる
※3変数の入力を促す表示もinpnum()内で行う

・平均値の算出は別関数getave()関数にて行うこと。

double getave(double *dp, int numcnt);
返り値:平均値
引数 :dp :数値変数配列の先頭アドレス
numcnt:平均値算出対象変数の個数(3が渡されてくる)
処理 :平均値を算出する

実行例
Enter number(1) : 1.1
Enter number(2) : 5.4
Enter number(3) : 3.2
Average : 3.233333

[3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C
[4] 期限: 2006/12/6
264デフォルトの名無しさん:2006/12/06(水) 17:03:17
1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):下記のプログラムで、ip,jp,kpのポインタのみを使用してi,jの値を入れ替えて表示するようにしなさい。またST型構造体のポインタstpを使用し、st[1].a[4]の値を表示しなさい。

#include
typedef struct{
int i; char a[10]; } ST;
int main()
{ int i,j,k;
ST st[3]={1,"ABCDE",2,"FGHIJ",3,"KLMNO"}, *stp=st;
int *ip=&i, *jp=&j, *kp=&k;
i=3 , j=1;
ip=&i, jp=&j, kp=&k;
ここにi,jを入れ替えるための式を書く何行使ってもよいが、操作できるのはip,jp,kpのみ printf("i=%d j=%d \n", i, j);
printf("st[1].a[4]=%c \n",ここにstpを使った式を書く); return 0;


[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: lcc
 [3.3] 言語: C
[4] 期限: 12月10日まで
265デフォルトの名無しさん:2006/12/06(水) 17:11:16
>>264
下記のプログラムというのを正確に書きなおします。
すみません。

#include <stdio.h>

typedef struct{
int i;
char a[10];
} ST;

int main(){

int i,j,k;
ST st[3]={1,"ABCDE",2,"FGHIJ",3,"KLMNO"}, *stp=st;
int *ip=&i, *jp=&j, *kp=&k;
i=3 , j=1;
ip=&i, jp=&j, kp=&k;

ここにi,jを入れ替えるための式を書く。
操作できるのはip,jp,kpのみ

printf("i=%d j=%d \n", i, j);
printf("st[1].a[4]=%c \n",ここにstpを使った式を書く);

return 0;
}
266デフォルトの名無しさん:2006/12/06(水) 17:24:21
>>265
*ip^=*jp^=*ip^=*jp;
267デフォルトの名無しさん:2006/12/06(水) 17:25:33
>265
*kp = *ip;
*ip = *jp;
*jp = *kp;

(stp+1)->a[4] or stp[1].a[4]

>int *ip=&i, *jp=&j, *kp=&k;
>ip=&i, jp=&j, kp=&k;
下のはいらないだろ。
268デフォルトの名無しさん:2006/12/06(水) 17:36:25
>26.3
#include <stdio.h>
void inpnum(double *dp)
{
int i;
for(i=0; i<3; i++) {
printf("Enter number(%d) : ", i + 1);
scanf("%lf", dp + i);
}
}
double getave(double *dp, int numcnt)
{
double sum = 0;
int i;
for(i=0; i<numcnt; i++) {
sum += *(dp + i);
}
return sum / numcnt;
}
int main(void)
{
double a[3];
inpnum(a);
printf("Average : %f\n", getave(a, 3));
return 0;
}
269デフォルトの名無しさん:2006/12/06(水) 19:03:30
[1] 授業単元: C言語演習
[2] 問題文: 正弦関数sin xを計算する関数を作りなさい。また、標準関数sin(X)と結果を比較しなさい。
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2006年12月14日まで
[5] その他の制限
C言語は学習し始めて半年ぐらいです。
それぞれx,sin x, sin(X)の結果が縦に並んだ表のように出力しろとのことでした。
270デフォルトの名無しさん:2006/12/06(水) 19:12:59 BE:31057128-2BP(202)
>>269
正弦を求めるアルゴリズムは。
271デフォルトの名無しさん:2006/12/06(水) 19:28:10
>>270
アルゴリズム?数式のことでいいのかな?
指定されたのは

sin x=x-(x^3/3!)+(x^5/5!)-(x^7/7!)+(x^9/9!)-(x^11/11!)

です
272デフォルトの名無しさん:2006/12/06(水) 19:36:51
>>271
あーなんで後出しするんだよ
書いちまったのに
273デフォルトの名無しさん:2006/12/06(水) 19:41:22
あ、付けたし厳禁だったか
すいませんです。

ルール破ったからうpしてくれないよねぇ
274デフォルトの名無しさん:2006/12/06(水) 19:48:03 BE:11646432-2BP(202)
>>271
なんだ。ただのマクローリン展開か。
http://c-kadai.sakura.ne.jp/index.php?itemid=6&catid=5
275デフォルトの名無しさん:2006/12/06(水) 19:58:53
なんだかんだでどうしても後出ししてしまう事はあるだろうし
そこまで原理主義的に対処する気はないが
アルゴリズムを指定されているのに書かない理由が理解できない
276RISA:2006/12/06(水) 20:02:01
[1] 授業単元:情報処理基礎実習
[2] 問題文(含コード&リンク):
   入力:2次元平面上のn点からなる集合S(ただしどの3点も一直線上にない)
   出力:Sの凸包CH(S) (SH(S)とはSを含む凸集合で最小のもの)
[3][3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 2006年12月8日
[5] その他の制限:構造体(struct)を用いること

出来るだけ早く、よろしくお願いします(o>_<o)
277デフォルトの名無しさん:2006/12/06(水) 20:07:51
急かして得する事は何も無いぞ
278デフォルトの名無しさん:2006/12/06(水) 20:10:59
>>276
言語なんでもいいの?
279デフォルトの名無しさん:2006/12/06(水) 20:13:47
>>278
> [3][3.3] 言語: (C/C++/どちらでも可 のいずれか)
が理解できないならやらなくて良いよ
280デフォルトの名無しさん:2006/12/06(水) 20:14:38
>言語: (C/C++/どちらでも可 のいずれか)
C
C++
どちらでも可
の三択のようです
281デフォルトの名無しさん:2006/12/06(水) 20:16:00
>>279
おいおいテンプレコピっただけだろ
どちらでも可と言いたいのなら「のいずれか」はいらないんだし
282デフォルトの名無しさん:2006/12/06(水) 20:16:40
SH(S)はどうでもいいからCH(S)について説明しろよ
あとどう出力するんだ
283デフォルトの名無しさん:2006/12/06(水) 20:17:02
君って屁理屈だねって言われるだろ
284デフォルトの名無しさん:2006/12/06(水) 20:18:14
>>276は言語のところ書き忘れただけじゃねーの?
で、入力はどう受け取るんだ?
285RISA:2006/12/06(水) 20:28:54
ごめんなさい。
言語はC++です。
SH(S)はCH(S)の書き間違いです。
出力は何角形になるかを出力したいです。
286デフォルトの名無しさん:2006/12/06(水) 20:32:05
>>285
入力はファイルから?それとも手打ち?
287RISA:2006/12/06(水) 20:41:10
手打ちです☆
288デフォルトの名無しさん:2006/12/06(水) 20:42:21
289215:2006/12/06(水) 20:52:39
>>242,244
ありがとう、これで課題もなんとかなりそうだ
290269:2006/12/06(水) 20:56:15
>>275
すいません以後気をつけます。
291デフォルトの名無しさん:2006/12/06(水) 21:03:36
1] 授業単元:C言語
[2] 問題文(含コード&リンク):
30人のテストの得点データを読み込む。
得点は0点以上100点以下である。各点数の人数を求め、その人数を点数毎
に*の数で示しなさい。また、最も多い得点と、最も少ない得点を示しなさい。
[3] 言語: C
[4] 期限: 12/10/2006
[5] その他の制限:ポインタなし、if,for文でお願いします。
292デフォルトの名無しさん:2006/12/06(水) 21:20:08
>>291
読み込み方は?
293デフォルトの名無しさん:2006/12/06(水) 21:21:45
scanf
294デフォルトの名無しさん:2006/12/06(水) 21:53:25
[1] 授業単元: C言語基礎
[2] 問題文(含コード&リンク):
aからzまで書かれたファイルがあり、これを読み込み読み込んだ順とは
逆に表示させるようにせよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日の朝10時00分〆
[5] その他の制限:
お願いします。
295デフォルトの名無しさん:2006/12/06(水) 22:11:18
>>294
マジ適当。
#include <stdio.h>
#include <stdlib.h>
#define FNAME "a.txt"
int main(){
int size=0,i=0,*str=NULL;
FILE *fp=NULL;
if(!(fp=fopen("r")))
return -1;
fseek(fp,0,SEEK_END);
size = ftell(fp);
fseek(fp,0,SEEK_SET);
str = (int *)malloc(size+1);
while((str[i++] = fgetc(fp)) != EOF);
while(i--)printf("%c",str[i]);
free(str)
return 0;
}
296294:2006/12/06(水) 22:34:59
>>295
レスありがとうございます。

これは
while((str[i++] = fgetc(fp)) != EOF);
while(i--)printf("%c",str[i]);
の部分が逆に表示させるというか、while(i--)にしているから逆に
表示させることが出来るのですか?つまりwhile(i++)にしていたら通常の
表示になるってことですか?
297デフォルトの名無しさん:2006/12/06(水) 22:41:48
>while(i--)にしているから逆に表示させることが出来るのですか?
そう
>つまりwhile(i++)にしていたら通常の表示になるってことですか?
違う

while((str[i++] = fgetc(fp)) != EOF)printf("%d",i);
while(i--)printf("%c",str[i])printf("%d",i);
こうやってiの値でも確認してみ
298デフォルトの名無しさん:2006/12/06(水) 22:42:56
おっとすまん
二つ目は
while(i--)printf("%c %d ",str[i], i);
299296:2006/12/06(水) 22:43:54
>>297
すいません、今家なんでプログラミングできなくて…。
明日の早朝に行くので早朝じゃないと確認できないです。
300デフォルトの名無しさん:2006/12/06(水) 22:55:12
>>299
頭の中でiの値を動かしてみるんだ
あとはコンパイラ落として家のPCに入れればいい
301デフォルトの名無しさん:2006/12/06(水) 22:57:28
[1] C言語
[2] 問題文:名前と点数からなる複数のデータを入力し、点数にしたがって並び替えよ
[3] 環境
 [3.1] windowsXP
 [3.3] C言語
[4] 12月8日
[5]その他の制限

よろしくお願いします
302デフォルトの名無しさん:2006/12/06(水) 23:00:45
1] 授業単元: 計算力学
[2] 問題文(含コード&リンク):
 変数iとjが15×15のマトリスク方程式を解くプログラムを作成せよ。
 右辺ベクトルは既知数とし、境界条件(ノイマン)を用いよ。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限 : 月曜日の朝8:00〆
[5] その他の制限:
出来れば、詳しい説明付きでお願いします><。。。
303デフォルトの名無しさん:2006/12/06(水) 23:05:18
302の追加です

値をキーボードから入力して計算を実行するプログラムです。
304299:2006/12/06(水) 23:13:18
とりあえず、自分で考えたのは、

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

#define COLSIZE 80

int main(void)
{
char buffer[COLSIZE + 1];
FILE *fp1, *fp2;

fp1 = fopen("a.txt", "r");

while(fgets(buffer, COLSIZE + 1, fp1) != NULL){
printf("%s", buffer);
}
fclose(fp1);

return 0;
}

"a.txt"はa〜zまでが入ったファイル名です。
なんですが、これだと、a〜zまで順に表示してしまいます。
これを変えてz〜aまで順に表示させたいのですが、どうなるでしょうか?
305RISA:2006/12/06(水) 23:16:14
288>
授業で外積を使っているので、角度ではなく、できれば外積を使った方法で行いたいのですがooo
306デフォルトの名無しさん:2006/12/06(水) 23:20:11
>>305
できれば後から後から条件を追加しないで欲しい。
他にも何かあれば今のうちに言っておこう
307デフォルトの名無しさん:2006/12/06(水) 23:30:30
>292
配列をつかって、scanfで入力です!
308RISA:2006/12/07(木) 00:08:16
main関数以外に他の関数をつかいたいです。
・3点の位置関係を確認する方法があればよいのではないか。
・それをどのように使うか。
というのが、アルゴリズム設計のアイデアとして与えられています。
309RISA:2006/12/07(木) 00:14:01
308>
どの座標が多角形の頂点となっているかも出力したいです。
310デフォルトの名無しさん:2006/12/07(木) 00:24:32
>>266 >>267
ありがとうございます。助かりました。
311248:2006/12/07(木) 00:27:00
>>251
ありがとう御座いました。お蔭様で期限内に提出することが出来ました。
312デフォルトの名無しさん:2006/12/07(木) 00:32:42
[1]授業単元:アルゴリズム論U
[2]問題文:44.44と-0.1111×102を入力し、
      この二つの数値を足した結果を表示するプログラムをscanfを用いずに記述する。
[3]環境
 [3-1] OS: Windows XP
[3-2]コンパイ名とバージョン:Visual Studio 2003
[3-3]言語:C++
[4]期限:14日
313デフォルトの名無しさん:2006/12/07(木) 00:39:18
[1]授業単元:アルゴリズム論U
[2]問題文:下記構造体型配列を作る。
      データは入力すること。
      確認のため各配列要素を表示すること。
      
      20 40 10 50 30
      CD GH AB IJ EF

[3]環境
 [3-1] OS: Windows XP
[3-2]コンパイ名とバージョン:Visual Studio 2003
[3-3]言語:C++
[4]期限:14日



314304:2006/12/07(木) 00:45:33
必要ないのがあったので訂正です。よろしくお願いします。
#include <stdio.h>

#define COLSIZE 80

int main(void)
{
char buffer[COLSIZE + 1];
FILE *fp1;

fp1 = fopen("a.txt", "r");

while(fgets(buffer, COLSIZE + 1, fp1) != NULL){
printf("%s", buffer);
}
fclose(fp1);

return 0;
}
315デフォルトの名無しさん:2006/12/07(木) 00:50:53
>>312
#include <iostream>

main(){
char s[100];
fgets(s, 100, stdin);
printf("%lf", 44.44+(-0.1111*102));
return 0;
}

好きに入力しちゃって
316デフォルトの名無しさん:2006/12/07(木) 01:15:32
>>314
#include <stdio.h>

#define COLSIZE 80

int main(void)
{
char buffer[COLSIZE + 1];
FILE *fp1;
int i, length;
fp1 = fopen("a.txt", "r");

/*
while(fgets(buffer, COLSIZE + 1, fp1) != NULL){
printf("%s", buffer);
}
*/
fgets(buffer, COLSIZE + 1, fp1);
length = strlen(buffer)-1;
for(i=0;i<=length;i++)
{printf("%c", buffer[length-i]);}

fclose(fp1);

return 0;
}

a.txtが単にabc...xyzだけならfgetsは1回でいいかと。
%sはbufferを文字列として一度に出力してしまうので逆にならない。
bufferの文字を添字で(後ろから順に)指定して%cで1文字ずつ出力。
317314:2006/12/07(木) 01:28:09
>>316
ありがとうございます。
プログラミングのやつを家のPCに入れてコンパイルして実行したのですが
これだとaのみしか表示されませんでした…
318デフォルトの名無しさん:2006/12/07(木) 01:33:08
>>317
a.txtって

abcdefghijklmnopqrstuvwxyz

だよね?俺は無事にできてるんだけどな
319デフォルトの名無しさん:2006/12/07(木) 01:41:15
>>291
なんか見たことあると思ったら

877 名前: ◆s2cIPM3PTs [] 投稿日:2006/12/02(土) 23:05:15
[1] 授業単元:プログラミング初級
[2] 問題文
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3067.txt
[3] 環境

どうしてもforならint jを宣言しておいて
while (ninzuu[i]--)   →   for (j = 0; j < ninzuu[i]; j++)
320319:2006/12/07(木) 01:43:10
321291:2006/12/07(木) 02:24:51
>391
マルチポストになってしまってすいません。
解決しました!ありがとうございます!
322デフォルトの名無しさん:2006/12/07(木) 02:33:03
悪と知りつつ悪をなした人間が謝るなよ
323 ◆xScV5ptEhM :2006/12/07(木) 03:27:18
[1] 授業単元:プログラミング入門
[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3102.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: C
[4] 期限: 12月8日
[5] その他の制限:
・指示がない限りライブラリ関数を使用できない。

宜しくお願いします。
324デフォルトの名無しさん:2006/12/07(木) 05:37:05
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3084.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3103.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Borland(bcc32)
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限: なんとか自力で終わらせられるところまで終わらせましたが、答えが出ないときがあります。
具体的にどこがおかしいぞという指摘だけでもお願いします。
325デフォルトの名無しさん:2006/12/07(木) 06:54:03
ttp://chomework.sakura.ne.jp/namazu.cgi?query=%91f%90%94&submit=Search%21&whence=0&max=20&result=normal&sort=score

過去ログ4つしかうpってないけどとりあえずこんな感じ
326デフォルトの名無しさん:2006/12/07(木) 07:02:00
>>324
>if( EPS < ((fabs(x[i-1] - x[i-2]))/fabs(x[i-2]))

符号の向きちがわね?
327デフォルトの名無しさん:2006/12/07(木) 07:03:14
328デフォルトの名無しさん:2006/12/07(木) 07:06:37
329デフォルトの名無しさん:2006/12/07(木) 07:06:50
>>324
あとさあ、宿題やってる限りはどうでもいいことだけど
cにおいてfloat型の存在は脳から消していいよ
330デフォルトの名無しさん:2006/12/07(木) 07:08:51
331デフォルトの名無しさん:2006/12/07(木) 10:20:13
if文の中に記号をごちゃごちゃ入れられると見づらいので
よっぽどな事が無い限りは、適当な変数に値を入れ
それで比較してくれると可読性が良いので助かる。
332デフォルトの名無しさん:2006/12/07(木) 10:48:50
なにを言っているんだお前は
333デフォルトの名無しさん:2006/12/07(木) 11:09:11
妥当に考えて条件のとこだろ
334デフォルトの名無しさん:2006/12/07(木) 11:20:54
なにを言っているんだお前は
335デフォルトの名無しさん:2006/12/07(木) 12:20:29
また変なのが来たな
336デフォルトの名無しさん:2006/12/07(木) 12:27:03
まったくだ。>>331、頭の悪い事を言うなよ。
337デフォルトの名無しさん:2006/12/07(木) 12:33:44
なにを言っているんだお前は
338デフォルトの名無しさん:2006/12/07(木) 12:55:19
挿入ソートの課題で、数字がちゃんと小さい順に並ばないんですが、どこが悪いのかプログラムを見てもらえませんか?
それと、このプログラムはステップ1-5 を実行した時点で、ソート済み位置より前の要素 は小さい順に並ぶらしいんですけど、その説明はどういう風にしたらいいでしょうか?
#define N 30 // 配列要素の個数
#include <iostream>using namespace std;
void main() {
int hairetsu[N] = {636, 80, 246, 766, 881, 383,
244, 671, 503, 331,444, 723, 916,
287, 492, 719, 476, 187, 704, 115,
774, 334, 618, 625, 582, 938, 427,
831, 899, 909}; // ソート対象の配列
int sortedPos, pos, insert, insertPos; // ソート済み位置,現在位置,挿入要素,挿入位置
// (1) ソート済み位置を、配列先頭の要素番号-1から1ずつ増やしながら、
// 配列末 尾の要素番号-1になるまで以下の処理を繰り返す。
for ( sortedPos = 0; sortedPos < N; sortedPos++ ) {
insert = hairetsu[sortedPos + 1];//ソート済み位置+1の位置に格納されている要素を挿入要素とする。
insertPos = sortedPos + 1;//(1-2) 挿入位置←ソート済み位置+1
pos = sortedPos;// (1-3) 現在位置←ソート済み位置
// (1-4) 現在位置が配列先頭の要素番号以上であり、
// かつ現在位置の要素が 挿入要素よりも大きい限り以下の処理を繰り返す。
while ( pos >= 0 && insert < hairetsu[pos] ) {
hairetsu[pos] = hairetsu[pos - 1];// (1-4-1) 現在位置の要素を1つ後ろの位置に格納する。
insertPos = pos;// (1-4-2) 挿入位置←現在位置
pos = pos + 1;}// (1-4-3) 現在位置を配列の先頭方向に1つ戻す。
insert = hairetsu[insertPos];}// (1-5) 挿入要素を挿入位置に格納する。
// (2) 配列の各要素を表示する。
for ( int i = 0; i < N; i++ ) {cout << hairetsu[i] << " ";}}
よろしくお願いします。
339デフォルトの名無しさん:2006/12/07(木) 12:56:37
スレ違い
340デフォルトの名無しさん:2006/12/07(木) 13:06:54
すいません、詰めて書いたら動かなかったんで書き直しました。
#define N 30 // 配列要素の個数
#include <iostream>
using namespace std;
void main() {
int hairetsu[N] = {636, 80, 246, 766, 881, 383,
244, 671, 503, 331,444, 723, 916,287, 492, 719, 476,
187, 704, 115,774, 334, 618, 625, 582, 938, 427,
831, 899, 909}; //ソート対象の配列
int sortedPos,pos,insert,insertPos; //ソート済み位置,現在位置,挿入要素,挿入位置
//(1)ソート済み位置を、配列先頭の要素番号-1から1ずつ増やしながら、
// 配列末 尾の要素番号-1になるまで以下の処理を繰り返す。
for ( sortedPos = 0; sortedPos < N; sortedPos++ ) {
//(1-1)ソート済み位置+1の位置に格納されている要素を挿入要素とする。
insert = hairetsu[sortedPos + 1];
insertPos = sortedPos + 1;//(1-2)挿入位置←ソート済み位置+1
pos = sortedPos;//(1-3)現在位置←ソート済み位置
//(1-4)現在位置が配列先頭の要素番号以上であり、
// かつ現在位置の要素が 挿入要素よりも大きい限り以下の処理を繰り返す。
while ( pos >= 0 && insert < hairetsu[pos] ) {
//(1-4-1)現在位置の要素を1つ後ろの位置に格納する。
hairetsu[pos] = hairetsu[pos - 1];
insertPos = pos;//(1-4-2)挿入位置←現在位置
pos = pos + 1;}// (1-4-3) 現在位置を配列の先頭方向に1つ戻す。
insert = hairetsu[insertPos];}// (1-5) 挿入要素を挿入位置に格納する。
// (2) 配列の各要素を表示する。
for ( int i = 0; i < N; i++ ) { cout << hairetsu[i] << " ";}}
341デフォルトの名無しさん:2006/12/07(木) 13:10:47
if文の中に記号をごちゃごちゃ入れられると見づらいので
よっぽどな事が無い限りは、適当な変数に値を入れ
それで比較してくれると可読性が良いので助かる。
342デフォルトの名無しさん:2006/12/07(木) 13:23:32 BE:23292443-2BP(202)
>>341
何を言ってるんだお前は。
343デフォルトの名無しさん:2006/12/07(木) 13:25:00
文の中に//をごちゃごちゃ入れられると見づらいので
よっぽどな事が無い限りは、適当な変数に値を入れ
それで比較してくれると可読性が良いので助かる。
344デフォルトの名無しさん:2006/12/07(木) 13:34:37
テンプレ可ですかw
345デフォルトの名無しさん:2006/12/07(木) 13:35:05
>>340
ソートされる様修正してみた。コメントは勝手に削除した。

#define N 30
#include <iostream>
using namespace std;
void main()
{
int hairetsu[ N ] = { 636, 80, 246, 766, 881, 383, 244, 671, 503, 331, 444, 723, 916, 287, 492, 719, 476, 187, 704, 115, 774, 334, 618, 625, 582, 938, 427, 831, 899, 909 };
int sortedPos, pos, insertPos;

for ( sortedPos = 0; sortedPos + 1 < N; sortedPos++ )
for ( insertPos = sortedPos, pos = sortedPos + 1; pos > 0 && hairetsu[ insertPos ] > hairetsu[ pos ]; insertPos--, pos-- )
hairetsu[ insertPos ] ^= hairetsu[ pos ] ^= hairetsu[ insertPos ] ^= hairetsu[ pos ];
for ( int i = 0; i < N; i++ ) { cout << hairetsu[ i ] << " "; }
}
346デフォルトの名無しさん:2006/12/07(木) 13:35:07
化だorz
347デフォルトの名無しさん:2006/12/07(木) 13:42:18
参四伍の師匠、すごいっす。マジ尊敬っす。マジ感謝っす。
おかげ様で今晩はクソして寝れそうです。

ありがとうございました。
348デフォルトの名無しさん:2006/12/07(木) 13:49:12
またおかしな交換方法使ってるな。
349デフォルトの名無しさん:2006/12/07(木) 14:16:51
>>345
だれかこの交換方法について説明してくれ
350デフォルトの名無しさん:2006/12/07(木) 14:21:43
351デフォルトの名無しさん:2006/12/07(木) 15:03:54
お願いします!!

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):行継続の処理をするプログラムを作れ。
一行を文字列として読み込み、その一行を画面に表示するプログラムを作る。
ただし、改行の直前の文字が '\' であったときには、次の行も読み込んで
先の一行に続けるようにすること。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
352デフォルトの名無しさん:2006/12/07(木) 15:04:53
>>351
if文の中に記号をごちゃごちゃ入れられると見づらいので
よっぽどな事が無い限りは、適当な変数に値を入れ
それで比較してくれると可読性が良いので助かる。
353 ◆xScV5ptEhM :2006/12/07(木) 15:10:50
>>330
丁寧な対応ありがとうございました!
参考にさせていただきます。
354デフォルトの名無しさん:2006/12/07(木) 15:15:59
>>351#include <stdio.h>

main()
{
    int c, prev;

    for (prev = 0; (c = getcha
r()) != EOF; prev = c) {
        if (c == '\\')&nb
sp;{
            if 
(prev == '\\') putchar(prev);
        } else if (c 
;== '\n') {
            if 
(prev != '\\') putchar(c);
        } else {
            if 
(prev == '\\')
             &n
bsp;  putchar(prev);
            putchar(
c);
        }
    }
}
355354:2006/12/07(木) 15:17:19
すまん張りなおす。

#include <stdio.h>

main()
{
    int c, prev;

    for (prev = 0; (c = getchar()) != EOF; prev = c) {
        if (c == '\\') {
            if (prev == '\\')
                putchar(prev);
        } else if (c == '\n') {
            if (prev != '\\')
                putchar(c);
        } else {
            if (prev == '\\')
                putchar(prev);
            putchar(c);
        }
    }
}
356デフォルトの名無しさん:2006/12/07(木) 15:24:38
これって何のプログラムですか??

#include <stdio.h>
#include <ctype.h>
#define MAX 2048
main()
{
char aline[MAX+1];
char *strpos;

strpos = aline;
while((gets(strpos))!=NULL ){
if (aline[strlen(aline)-1]=='\\')
strpos = aline + strlen(aline) -1;
else {
puts(aline);
strpos = aline;
}
}
}
357デフォルトの名無しさん:2006/12/07(木) 15:35:18
[1] 授業単元:プログラミング初級
[2] 問題文:二つの変数を入力し、その四則演算の結果を表示するプログラムを作成せよ。
・main()関数では2つの入力値を格納する変数および四則演算結果を格納する変数
を宣言する
・2変数の入力を行うための関数inp_num()を作成する。関数仕様は以下の通り。
void inp_num(int *数値1へのポインタ, int *数値2へのポインタ);
※main()関数内の変数(数値1と数値2)に対して別関数inp_num()にて値を
書き込むため、引数としてポインタを用いる
※2変数の入力を促す表示もinp_num()内で行う
・四則演算の結果を求める関数calc()を作成する。関数仕様は以下の通り。
int calc(int 変数1,
int 変数2,
int *足し算結果格納先,
int *引き算結果格納先,
int *掛け算結果格納先,
int *割り算結果格納先
);
返却値: 0:正常終了
-1:エラー(ゼロ除算が発生する場合)
・ゼロ除算がある時には、割り算以外の結果は表示し、割り算結果はエラーが
ある旨の表示を行う

Enter number(1) : 23
Enter number(2) : 0
23+0 = 23
23-0 = 23
23*0 = 0
23/0 = Error ←0除算の場合は割り算結果としてErrorを表示する
[3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C
[4] 期限: 2006年12月8日
[5] その他の制限: 初級ポインタまで習いました。
358デフォルトの名無しさん:2006/12/07(木) 15:45:03
ついに恐れていた四則演算まで来たか・・・
359デフォルトの名無しさん:2006/12/07(木) 16:26:28
初心者ですが、家帰ってからも誰もやってないなら、書きます。
携帯から書くのは、さすがにダルい(´・ω・`)
とにかく文法に慣れなきゃならんから、何も悩まず出来る宿題は有りがたい。
360326:2006/12/07(木) 17:05:30
×符号の向き
○不等号の向き

寝てなかったから脳がバグってた
361デフォルトの名無しさん:2006/12/07(木) 17:11:56
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):10000個の乱数を発生させ、それらの平均と標準偏差を計算するプログラムを書きなさい。平均を計算する部分、標準偏差を 計算する部分は、それぞれ、別個の関数とすること。
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc(?よくわかりません。)
 [3.3] c言語
[4] 期限:できれば明日まででお願いします。
[5] その他の制限: 関数とポインタを勉強中です。

よろしくお願いします!!
362デフォルトの名無しさん:2006/12/07(木) 17:18:35
[1] 授業単元:計算科学
[2] 問題文 :棄却法による乱数の生成
P(x)=2/π√(1-x^2)に従う確率変数を生成するプログラムをつくろう.
この場合 [a,b] = [-1, 1] であり, pmax=2/π です.
サンプル数?
1000
シード?
128478
と入力すると, 棄却法を利用して p(x) に従う xをサンプル数
だけ生成し,平均, 分散, および -1.0 と+1.0 の間を何個かのビンに分割して
ヒストグラムを出力するプログラムを作ろう.
ビンの個数は, 8,80 など, 何種類か試そう.
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年12月12日09:00まで
[5] その他
ヒントhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3111.txt
を使って作成して下さい。
363302:2006/12/07(木) 17:19:48
棄却法とは

連続な値をとる確率変数 X に対する確率密度 p(x) が区間 [a,b] 以外では 
0 であり,[a,b]内での p(x) の最大値を pmax とします.
このとき区間[a,b]の一様乱数 X1 と区間[0, pmax] の一様乱数 X2 を用いて,
次のように X を生成することができます:
(1) X1 と X2 を生成する.
(2) もし,X2 < p(X1) なら X1 を X として採用する。
(3) (1) に戻る.
この手順を繰り返すと,下図の影をつけた部分に点 (X1 ,X2 ) が入ったときにのみ
その点のデータが採用されるため,採用された点の X1 は確率密度 p(X1) に従うことになります.
この方法を von Neumann の採択・棄却法と呼びます.
確率変数のとる値が有限の区間に限られる場合しか使えないことと,
場合によっては棄却される割合が大きくなり計算の効率が悪くなることが欠点です..
364デフォルトの名無しさん:2006/12/07(木) 17:20:35
↑間違えました
362です
365デフォルトの名無しさん:2006/12/07(木) 18:01:59
>>361
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

double ave(int*a,int n)
{
return n==0?*a:(ave(a,n-1)+(((double)*(a+n))/n))/(n+1)*n;
}

double sd(int*a,int n,double ave)
{
return n==0?pow((*a-ave)/10000,2):sd(a,n-1,ave)+pow((*(a+n)-ave)/10000,2);
}

int main()
{
int i;
int a[10000];
double av;
srand(time(NULL));
for(i=0;i<10000;i++)a[i]=rand();
av=ave(a,9999);
printf("%lf\n",av);
printf("%lf\n",sqrt(sd(a,9999,av)));
return 0;
}
366デフォルトの名無しさん:2006/12/07(木) 19:14:37
>>350
thx
367揚げ物2号:2006/12/07(木) 19:20:58
>>210
返事遅れてすいません。

どうもありがとうございました。
368デフォルトの名無しさん:2006/12/07(木) 20:50:04
>>365
ありがとうございます。もう大学のパソコンつかえないんで、明日の朝、やってみます!
369デフォルトの名無しさん:2006/12/07(木) 22:28:20
自宅のパソコンでコンパイラ入れてやってくれよぉ〜〜〜
370デフォルトの名無しさん:2006/12/07(木) 22:32:51
構造体
struct point {
double x;
double y;
};
を用い、2 次元空間の2 点を対角線とする長方形を示す構造体
struct {
struct point p1;
struct point p2;
};
を、typedef 宣言でrectangle 型と定義し、長方形の面積を求める関数
double area(const rectangle *r)
および、重心を求める関数
struct point centroid(const rectangle *r)
を作成せよ。これを用いて、2 点の座標を入力して長方形を構成し、その面積と重心を表示するプ
ログラムを作成せよ。
座標1 x:1(ENTER)
座標1 y:2(ENTER)
座標2 x:3(ENTER)
座標2 y:4(ENTER)
面積:4.000000
重心:(2.000000, 3.000000)
371デフォルトの名無しさん:2006/12/07(木) 22:34:54
[1] 授業単元:演習U
[2] 問題文(含コード&リンク):
>>370

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 本日の12時まで
[5] その他の制限:
372デフォルトの名無しさん:2006/12/07(木) 23:02:15
[1]授業単元:アルゴリズム論U
[2]問題文:下記構造体型配列を作る。
      データは入力すること。
      確認のため各配列要素を表示すること。
      
      20 40 10 50 30
      CD GH AB IJ EF

[3]環境
 [3-1] OS: Windows XP
[3-2]コンパイ名とバージョン:Visual Studio 2003
[3-3]言語:C++
[4]期限:14日
373デフォルトの名無しさん:2006/12/07(木) 23:06:40
[1]授業単元:アルゴリズム論U
[2]問題文:単純交換ソート(バブルソート)をソートの途中、
昇順になった時点でソートを終了するように変更して処理効率をあげる。
[3]環境
 [3-1] OS: Windows XP
[3-2]コンパイ名とバージョン:Visual Studio.NET2003
[3-3]言語:C++
[4]期限:14日
374デフォルトの名無しさん:2006/12/07(木) 23:45:42
>>372
前にもポストしてたと思うけど
正直問題が何を言ってるのかわからないんだ
構造体の仕様は無いのか
375359:2006/12/08(金) 00:45:59
>>357
初心者です。間違ってたらごめん。1/2
#include <stdio.h>

void inp_num(int *x, int *y);
int calc(int cal_x,int cal_y,int *add,int *dif,int *mul,int *div);

int main(void)
{
int x,y,add=0,dif=0,mul=0,div=0;
inp_num(&x,&y);
if(calc(x,y,&add,&dif,&mul,&div)) {
printf("%d+%d=%d\n",x,y,add);
printf("%d-%d=%d\n",x,y,dif);
printf("%d*%d=%d\n",x,y,mul);
printf("%d/%d=Error\n",x,y);
}
else {
printf("\n%d+%d=%d\n",x,y,add);
printf("%d-%d=%d\n",x,y,dif);
printf("%d*%d=%d\n",x,y,mul);
printf("%d/%d=%d\n",x,y,div);
}
return 0;
}
376359:2006/12/08(金) 00:47:20
>>357
2/2
void inp_num(int *x, int *y)
{
printf("二個の数値を、入力してください。\n");
printf("一つ目:");
scanf("%d",x);
printf("二つ目:");
scanf("%d",y);
}

int calc(int cal_x,int cal_y,int *add,int *dif,int *mul,int *div)
{
*add=cal_x+cal_y;
*dif=cal_x-cal_y;
*mul=cal_x*cal_y;
if(cal_y) {
*div=cal_x/cal_y;
return 0;
}
else return -1;
}
377359:2006/12/08(金) 01:02:33
>>356
NULL文字に当たるまで、ひたすら文字を入力させてそれを吐き出すプログラムだと思う。
っで、\が末尾に入力された場合だけ、入力された元の文字(\は抜く)以降の配列に、次に入力された文字を入れて表示。
よくわからないけど。
378デフォルトの名無しさん:2006/12/08(金) 01:02:37
>>373
#include <iostream>
inline void swappu(int* x, int* y){
int tmp = *x; *x = *y; *y = tmp;}
int awasort(int* x, int size){
for(int lastswappu = 0;size != 0; size = lastswappu,lastswarppu = 0)
for(int i = 0; i < size; i++)
if(x[i] > x[i+1]){
swappu(&x[i], &x[i+1]);
lastswappu = i;}}
int main(void){
int i, n[10] = {1,6,4,7,8,3,4,5,7,9};
for(i = 0; i != 10; i++) std::cout << n[i] << " "; std::cout << std::endl;
awasort(n, 10);
for(i = 0; i != 10; i++) std::cout << n[i] << " "; std::cout << std::endl;
return 0;
}
379デフォルトの名無しさん:2006/12/08(金) 01:27:29
>>372
#include <cstdio>
#include <cstdlib>
int main(void)
{
struct{
int seisu;
char* moji;
}s[5];
for(int i=0; i<5; i++){
scanf("%2d", &s[i].seisu);
}
for(int i=0; i<5; i++){
s[i].moji = (char*)malloc(3);
scanf("%2s", s[i].moji);
}
printf("%d %d %d %d %d\n", s[0].seisu, s[1].seisu, s[2].seisu, s[3].seisu, s[4].seisu);
printf("%s %s %s %s %s\n", s[0].moji, s[1].moji, s[2].moji, s[3].moji, s[4].moji);
return 666;
}
380デフォルトの名無しさん:2006/12/08(金) 01:54:03
>>371
#include <stdio.h>
struct point {
double x; double y;};
typedef struct {
struct point p1; struct point p2;
} rectangle;
double area(const rectangle *r){
int x, y;
x = (r->p1.x < r->p2.x) ? r->p2.x - r->p1.x : r->p1.x - r->p2.x;
y = (r->p1.y < r->p2.y) ? r->p2.y - r->p1.y : r->p1.y - r->p2.y;
return x * y;}
struct point centroid(const rectangle *r){
struct point p;
p.x = 0.5 * (r->p1.x < r->p2.x) ? r->p2.x + r->p1.x : r->p1.x + r->p2.x;
p.y = 0.5 * (r->p1.y < r->p2.y) ? r->p2.y + r->p1.y : r->p1.y + r->p2.y;
return p;}
int main(void){
rectangle r;
struct point p;
printf("座標1 x:"); scanf("%lf", &r.p1.x); printf("座標1 y:"); scanf("%lf", &r.p1.y);
printf("座標2 x:"); scanf("%lf", &r.p2.x); printf("座標2 y:"); scanf("%lf", &r.p2.y);
printf("面積:%.6lf\n", area(&r));
p = centroid(&r); printf("重心:(%.6lf, %.6lf)\n", p.x, p.y);}
381デフォルトの名無しさん:2006/12/08(金) 01:59:30
[1] 授業単元:プログラミング1
[2] 問題文:sin,cosのテイラー展開を求めるプログラムを作りなさい。
 ・近似式はネットで探してよい
 ・近似する項数nを対話的に与えること
 ・θは0から2πの範囲を適当に分割し、各θに対する近似値、真値を求めること
  (真値は関数sin(角度),cos(角度)で求まる
 ・出力は、(グラフ化を見越した)表形式にすること
[3] 環境
 [3.1] OS: (Windows XP)
 [3.2] コンパイラ名とバージョン: (Borland C++Compiler 5.5)
 [3.3] 言語: (C言語)
[4] 期限: ([2006年12月9日18:00まで] )
[5] その他の制限: (void main(void)以外に、階乗を求める関数をint kaijo(int p)のようにして自分で作り、計算結果をmain関数に返すようにする。)
382デフォルトの名無しさん:2006/12/08(金) 02:01:35
どうかよろしくお願いいたします。
実行結果は以下のようになればよいそうです。

第何項までの近似をしますか:5
角度 sin近似 sin真値 cos近似 cos真値
3.600 0.062791 0.062791 0.998027 0.998027
7.200 0.125333 0.125333 0.992115 0.002115
10.800 0.187381 0.187381 0.982287 0.982287
14.400 0.248690 0.248690 0.968583 0.968583
18.000 0.309017 0.309017 0.951057 0.951057
21.600 0.368125 0.368125 0.929776 0.929776
25.200 0.425779 0.425779 0.904827 0.904827
28.800 0.481754 0.481754 0.876307 0.876307
32.400 0.535827 0.535827 0.844328 0.844328
36.000 0.587785 0.587785 0.809017 0.809017
39.600 0.637424 0.637424 0.770513 0.770513
43.200 0.684547 0.684547 0.728969 0.728969
46.800 0.728969 0.728969 0.684547 0.684547
50.400 0.770513 0.770513 0.637424 0.637424
54.000 0.809017 0.809017 0.587785 0.587785
57.600 0.844328 0.844328 0.535827 0.535827

といった感じに出力されればよいのですが。

383デフォルトの名無しさん:2006/12/08(金) 02:03:38
>近似式はネットで探してよい
ワロタ
384デフォルトの名無しさん:2006/12/08(金) 02:07:48
>>382
角度が7.2の時の真値が明らかにおかしい件について
385デフォルトの名無しさん:2006/12/08(金) 02:12:32
>>371
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3112.txt
既にレス付いてるけどやったので貼っとく
386324:2006/12/08(金) 03:11:08
>>326
仰るとおり向きが違いました。ありがとうございます。
修正してみたのですが、x0=0.5 EPS=0.01のときに-0.000000となるなどやっぱり不安定なようです…

どたなか原因わかりませんでしょうか。

>>329
ありがとうございます。
調べたところfloatは速度が遅く、もう過去のものだと。
そこでdoubleに置換しましたが、今度は値が出ません(汗
double型でも%fであってるし、他におかしいところもなかったように思うんですが…
何がだめなんでしょうか…
387324:2006/12/08(金) 03:15:20
>>331
あんまりうまく修正できませんでしたが、修正しました。
今後は心がけます。
388デフォルトの名無しさん:2006/12/08(金) 03:16:06
>>386
double型のscanfは%lfだよ
389デフォルトの名無しさん:2006/12/08(金) 03:16:09
>>382
#include <math.h>
#include <stdio.h>
//math.hでM_PIが定義されていないコンパイラ用
//#define M_PI 3.14159265358979323846
//#define M_PI_2 1.57079632679489661923
double mynorm(double x){
double pi2=M_PI*2;
x=fmod(x,pi2);
if(x<-M_PI)x+=pi2;
else if(x>M_PI)x-=pi2;
if(x>M_PI_2)x=M_PI-x;
else if(x<-M_PI_2)x=-M_PI-x;
return x;}
double mysin(double x,int kousuu){
x=mynorm(x);
double x2=x*x,y=1;
for(int i=(kousuu<<1)-1;i>=3;i-=2) y=1-x2*y/(i*(i-1));
return x*y;}
double mycos(double x,int kousuu) {return mysin(x+M_PI_2,kousuu);}
void main() {
int kousuu;
printf("第何項までの近似をしますか:");
scanf("%d",&kousuu);
printf("角度 sin近似 sin真値 cos近似 cos真値\n");
double r;
for(double i=3.6;i<=57.61;i+=3.6){
r=i*M_PI*2/360;
printf("%.3f %.6f %.6f %.6f %.6f\n",i,mysin(r,kousuu),sin(r),mycos(r,kousuu),cos(r));
}
}
390389:2006/12/08(金) 03:17:54
追記
その他の制限に書かれている事はあくまでヒントと判断して従っていない。
391324:2006/12/08(金) 03:20:07
>>388
本当にありがとうございます。
使ってなかったので忘れていました…
392デフォルトの名無しさん:2006/12/08(金) 03:22:32
>>386
ニュートン法は初期値が悪いと収束するとは限らないけど
初期値は適切なの?
393324:2006/12/08(金) 03:24:51
>>392
初期値は与えられたものなので答えはわかりませんが、もしかすると収束しないのかもしれません。
でも今日提出したときに友達が、全部ちゃんと値が出たと言ってたんでやっぱり間違ってたんだなと…
その友達が間違ってたのかもしれませんが
394デフォルトの名無しさん:2006/12/08(金) 03:30:30
プログラムは分からん時はさっぱり分からんからな
よく苦しくなる
395デフォルトの名無しさん:2006/12/08(金) 03:33:57
一度x全部出力してみてはどうですかお?
値から考えて収束してないとかわかることもありますお
396デフォルトの名無しさん:2006/12/08(金) 03:47:41
[1] 授業単元:プログラミング
[2] int型の値を要素とする2次元配列a[N][N]とb[M][M]が大域変数として用意されている。
ここでNとMはマクロであり、適当な正整数値に定義されているものとする。
これらの配列をそれぞれN次正方行列、M次正方行列とみなし、配列aのrow行col列からheight行width列以内にある要素を配列bにコピーする関数
void copy(int row, int col, int width, int height)
を定義せよ。
引数rowとcolは0以上N−1以下の値をとり、heightとwidthは0以上の値をとるものとする。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 2006年12月8日18:00まで
[5] その他の制限: 四則演算、繰り返し文、マクロ、2次元配列
397デフォルトの名無しさん:2006/12/08(金) 04:02:09
課題:1次元配列だけを利用して2次元の行列を表すクラスをC++で作れ。
期限:明後日

注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
398デフォルトの名無しさん:2006/12/08(金) 04:06:42
>>397
まんこ!
399デフォルトの名無しさん:2006/12/08(金) 04:23:41
>>396
bのどこにコピーするかが分からんが
あと当たり前だけどN<Mという条件があるんだよな?
400396:2006/12/08(金) 04:31:19
>>399
配列bの左上にコピーします。
あと、N<Mという条件も確かにあります。

401デフォルトの名無しさん:2006/12/08(金) 05:01:36
>>396
void copy(int row, int col, int width, int height)
{
int ekkusu, wai;
if(row < 0 || row > N-1 || col < 0 || col > N-1 || height < 0 || width < 0) return;

for(wai = 0, wai != height && wai < M && row + wai < N, wai++)
for(ekkusu = 0, ekkusu != width && ekkusu < M && col + ekkusu < N, ekkusu++)
b[wai][ekkusu] = a[row+wai][col+ekkusu];
}
402デフォルトの名無しさん:2006/12/08(金) 05:02:06
げ、いつの間にか条件が増えてる。
403デフォルトの名無しさん:2006/12/08(金) 05:24:01
>>396
void copy(int row,int col,int width,int height)
{
int i,j;
row--;
col--;

for(i = row;i < height;i++){
for(j = col;j < width;j++){
b[i-row][j-col] = a[i][j];
}
}
}

>引数rowとcolは0以上N−1以下の値をとり、heightとwidthは0以上の値をとるものとする。
は自分で付け足してくれ
404デフォルトの名無しさん :2006/12/08(金) 05:33:43
>>397
おまえのその糞みたいな注:の文を読む前に
配列ってのは、宣言時には確かにそれだけのメモリを用意するが
後の配列に対する演算方法は、ポインタとして扱える。というかポインタなんだが。
そこがわかってんのか?
int a[2][2] ={{1,1},{2,2}};は
int a[4] = {1,1,2,2}と同じなんだよわかる?
で、おまえは2次元の行列っていってるからには
int a[][]みたいな形の事を1次元配列のa[]みたいな形でつくってくだちゃい
っていってんだろうけど、行列とは、行に対して列が対応する様を現す
数字の集合の表現方法なんだよ。
で、おまえは、何行何列の行列がつくりたいんだよ。
int a[2][3]の形なら、2行3列
int a[3][2]の形なら、3行2列
上記を一次元で現すなら
int a[6]
int a[6]
で聞きたいのはクラスを作る必要があんのか?
どうせ実装するなら、何かの型のポインタをメンバにしてnewでコンストラクタで配列作って
デスクトラクタで破棄するって形だろ。
でクラスをつくるのに、operatorやコピーコンストラクタ
行列演算のメンバ関数、転置行列や、逆行列、余因子展開、行列式の行や列の交換
行ベクトル、列ベクトル、ノルム、正規化・・・
おまえのその馬鹿みたいな課題の内容は、中途半端。そのくせ注:文ではやけに横柄。
自分で作れよ。おまえの注:文の最後の言葉をちょっと代えて君に贈る。
各自よく調べ、よく考え、正確な質問をするように。



えへ〜。久々あおりに乗っちゃった〜。
405デフォルトの名無しさん:2006/12/08(金) 05:37:04
まず「私の有意義な発言に対し」でググった俺クール
406デフォルトの名無しさん:2006/12/08(金) 05:38:41
>>401
>>403
早朝からありがとうございます!
407デフォルトの名無しさん:2006/12/08(金) 08:14:11
うpろだのリンクにアクセス出来ないのは俺だけ?
408382:2006/12/08(金) 08:26:34
389さんありがとうございました。
<math.h>でM_PIは定義されています。
しかしなぜかコンパイルできませんでした。

16:ここでは宣言できない(関数 mysin )
17:式の構文エラー(関数 mysin )
17:未定義のシンボル i(関数 mysin )
17:ステートメントにセミコロン(;)がない(関数 mysin )
17:不正な文字' '(0x8140)(関数 mysin )
18:'x2'に代入した値は使われていない(関数 mysin )
18:パラメータ'kousuu'は一度も使用されない(関数 mysin )
25:ここでは宣言はできない(関数 main )
26:式の構文エラー(関数 main )
26:未定義のシンボル i(関数 mysin )
26:ステートメントにセミコロン(;)がない(関数 main )
*** 9 errors in Compile ***
409デフォルトの名無しさん:2006/12/08(金) 09:08:13
>>408
何行目が何故エラーかまでコンパイラが教えてくれてるんだから、
「なぜか」とか言ってないでそのくらい直してみてはどうかと思う
410デフォルトの名無しさん:2006/12/08(金) 09:14:14
>>407
どのリンク?
411デフォルトの名無しさん:2006/12/08(金) 09:19:40
>>365
実行すると
nan
nan
ってなってしまいます。助けてください!
412デフォルトの名無しさん:2006/12/08(金) 09:20:11
>>408
ごめん17行目に全角スペースはいってた

他はうちでは問題ないから自分で何とかして
413デフォルトの名無しさん:2006/12/08(金) 09:24:42
nan〜でかっ? それはね
414デフォルトの名無しさん:2006/12/08(金) 09:31:06
ひょっとしてfor(int i=0;;)とかやるなってことなんかな
>>408
これ試してみて
#include <math.h>
#include <stdio.h>
double mynorm(double x){
double pi2=M_PI*2;
x=fmod(x,pi2);
if(x<-M_PI)x+=pi2;
else if(x>M_PI)x-=pi2;
if(x>M_PI_2)x=M_PI-x;
else if(x<-M_PI_2)x=-M_PI-x;
return x;}
double mysin(double x,int kousuu){
x=mynorm(x);
double x2=x*x,y=1;
int i;
for(i=(kousuu<<1)-1;i>=3;i-=2) y=1-x2*y/(i*(i-1));
return x*y;}
double mycos(double x,int kousuu) {return mysin(x+M_PI_2,kousuu);}
void main() {
int kousuu;
printf("第何項までの近似をしますか:");
scanf("%d",&kousuu);
printf("角度 sin近似 sin真値 cos近似 cos真値\n");
double r,i;
for(i=3.6;i<=57.61;i+=3.6){
r=i*M_PI*2/360;
printf("%.3f %.6f %.6f %.6f %.6f\n",i,mysin(r,kousuu),sin(r),mycos(r,kousuu),cos(r));
} }
415デフォルトの名無しさん:2006/12/08(金) 10:32:49
【質問テンプレ】
[1] 授業単元:計算物理
[3] 環境
 [3.3] 言語: C
[4] 期限: できれば明日まで

↓のプログラムは20個の粒子の移動のシミュレーションをします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3113.c

↑のプログラムを使って、1個の粒子の軌道を追って、原点からどれだけ
離れたか、距離を求めよ。やっかいなのが、周期型境界条件を使ってる
ので、ちゃんとした距離を求めるのに一工夫

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3114.c
↑のは上手くいくと思ってたのに駄目でした。
たのんます。
416デフォルトの名無しさん:2006/12/08(金) 11:03:21
>>415
すまんが仕様がわからん。
もう少し詳しく書いてくれん?
417413:2006/12/08(金) 11:48:07
ごめん。最初のプログラムは縦、横10の正方形の箱にN=20個粒子を入れて(initializeて言う関数ね)
van der waalて言う公式を使って、それぞれの粒子にかかる力を計算します。
で、その力によって、一つ一つの粒子の場所やスピードを計算します。
それが、T_MAXになるまでループします。distていう関数はスピードの分布を記録します。
その分布は(マクスウェル・ボルツマン分布)て言われてます。

ま、その質問は自力でなんとかなりました。

今度はそのコードをちょっといじって、一つの粒子の軌道を追います。
(x_curr[1],y_curr[1]とか)それで、原点からの距離を求めよう、と
いうやつです。スタート時点のポジションを(x0、y0)(これ、どうやって
出すか分からない)としたら、(x_curr[1]-x0)^2+(y_curr[1]-y0)^2、つまり
r^2を出したいのね。
で、やっかいなのが周期型境界条件ってやつなんですが、これは何かというと、
もし粒子のx座標が0より少なくなると、L+xへ移動しますよ、ていうやつ(y
も同様)
r^2を計算するにはこうしたワープもオッケーじゃないと行けないのだ。で、考えたのが
もし、新しいxが0より少なければx_bound[i]にー1を加算。もしxがLより大きければ
x_bound[i]に+1を加算。そうすれば、本当の座標はx_curr[i]+x_bound*Lになるはず。。。
と思ったのですがなんか、駄目です。
418413:2006/12/08(金) 12:01:43
最初のプログラムの方でも何か変なところがあったら、
ご指摘お願いします。
419デフォルトの名無しさん:2006/12/08(金) 13:13:27
ぱっと見、x0、y0はそれぞれ initialize関数 で保存しておくしかないね。
関数間でいちいち参照渡しするぐらいならグローバル変数のが良くないかい?
420デフォルトの名無しさん:2006/12/08(金) 13:20:56
>>419
Cマガジンにグローバル変数を使うのは無能の証拠みたいに
書いてあったな

俺もグローバル変数使うだろうけど 楽だし
421デフォルトの名無しさん:2006/12/08(金) 13:43:43
422デフォルトの名無しさん:2006/12/08(金) 13:47:43
あ、なんとか条件とか考えてなかったw
423デフォルトの名無しさん:2006/12/08(金) 13:55:31
>>415
これがオカシイのかどうかはワカランが、読んでいて「あれ?」と思った点
initialize関数なんだけど

for(i=0;i<N;i++){
rnd=(double)rand()/RAND_MAX; // ここで1個の乱数を生成して

gx[i]=(i/5)*2+2;
gy[i]=i*2 +1 -(i/5)*10;

x_curr[i]=gx[i]+2*(rnd-0.5)*dr; // Xの位置
y_curr[i]=gy[i]+2*(rnd-0.5)*dr; // Yの位置

vx[i]=2*(rnd-0.5)*v0; // 速度の方向性
if(rnd<0.5) vy[i]=sqrt(v0*v0-vx[i]*vx[i]);
else vy[i]=-sqrt(v0*v0-vx[i]*vx[i]);

x_prev[i]=x_curr[i]-vx[i]*dt;
y_prev[i]=y_curr[i]-vy[i]*dt;

}

に使用しているけど、これってその度に乱数生成しなくて良いの?
424デフォルトの名無しさん:2006/12/08(金) 13:58:48
425デフォルトの名無しさん:2006/12/08(金) 14:16:14
[1] 授業単元:情報の基礎個人メニュー
[2] 問題文(含コード&リンク):
 C/C++とVB間で値渡しをするプログラムを作れ。
 ヒント:argv
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ: BCC 5.5 VB2005
 [3.3] C/C++ VB
[4] 期限: 2006年12月11日9:00まで
426デフォルトの名無しさん:2006/12/08(金) 16:04:52
>>425
コンピュータ専門ならまだわかるが、
その他のがっこならどうかと思う問題だな
427デフォルトの名無しさん:2006/12/08(金) 16:14:30
[1] 授業単元:アングラ概論
[2] 問題文(含コード&リンク):
 銀行口座をハッキングして個人情報を抜け。
 ヒント:友達のハッカー
[3] 環境
 [3.1] SOS: ・・・−−−・・・
 [3.2] コンパイル: ぷよぷよ検定10段
 [3.3] C/C Lemon
[4] 期限: 2006年12月11日9:00まで
428デフォルトの名無しさん:2006/12/08(金) 16:14:33
1] 授業単元:プログラム言語実習
[2] 問題文(含コード&リンク):
  買い物で購入した10000円以下の金額を入力し、支払った金額を入力して
おつりと金種及び枚数を求めるプログラムを作成せよ
[3] 環境
 [3.1] OS: Windows2000
 [3.3] C
[4] 期限: 2006年12月12日12:00まで
429デフォルトの名無しさん:2006/12/08(金) 16:19:01
>>428
複数解あるけど全てのパターン列挙するの?
430デフォルトの名無しさん:2006/12/08(金) 16:23:10
金種は10000、5000、2000、1000、500、100、50、10、5、1という事?
431デフォルトの名無しさん:2006/12/08(金) 16:27:24
そうではなくて、例えば
1円のものに対して10000円支払った場合に1円玉9999枚のお釣りという答えもあるわけで

枚数が最小になるようにという条件があれば一意に定まるかな
432デフォルトの名無しさん:2006/12/08(金) 16:31:10
9999枚?馬鹿ジャネーノ?
433デフォルトの名無しさん:2006/12/08(金) 16:35:34
>>432
可能性があるということと、常識をごっちゃにしてる馬鹿発見
434デフォルトの名無しさん:2006/12/08(金) 16:37:31
9999枚なんて馬鹿らしいけど案外そうでもないよ
適当なプログラム書くと延々と処理が終わらなかったと思う
435デフォルトの名無しさん:2006/12/08(金) 16:37:47 BE:139752498-2BP(202)
436デフォルトの名無しさん:2006/12/08(金) 16:38:07
>>433
さすが非常識人だな
恥も無いのか?
437デフォルトの名無しさん:2006/12/08(金) 16:39:14
おつりをコインの数・札の枚数の合計が最小になるように渡すとき、
その組み合わせは一意的であることを証明せよ
438デフォルトの名無しさん:2006/12/08(金) 16:40:57
>>436
非常識だろうがなんだろうがここはプログラム板です。
可能性として排除できない場合はそういう場合も考慮するのがプログラム。
そんなことも分からないお前は文系板にでもいってろwwwww
439デフォルトの名無しさん:2006/12/08(金) 16:43:23
>>435
結構酷いプログラムだな・・・
ループで回すなんて非効率きわまりない。
割り算使えと。
440デフォルトの名無しさん:2006/12/08(金) 16:43:25
>>438
行間の読めない馬鹿はプログラムするなよな
心底迷惑でジャマばかりしやがる
441デフォルトの名無しさん:2006/12/08(金) 16:47:42
>>440
横レスだがお前は仕様にないことも独自の判断で勝手にやっちゃうタイプか
いるんだよなそういうはた迷惑な奴
442デフォルトの名無しさん:2006/12/08(金) 16:49:27
>>441
すくなくとも9999枚なんて非常識なことはしない
中国のクソ外注じゃあるまいし
443デフォルトの名無しさん:2006/12/08(金) 16:49:43
[1] 授業単元: プログラミング応用
[2] 問題文:以下の整列済み配列を分割せずに統合(マージ)を繰り返せば、
        ソートされる。このプログラムを作成し、結果を出力せよ。

        [11.34.58.62][20.61][100][250.300][400]

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:gcc?
 [3.3] 言語:C言語
[4] 期限:06年12月09日PM12:00まで
[5] その他の制限:ポインタを使用しろと指示されていますが、よくわかりません
            配列それぞれに割り振るということなのでしょうか・・・
444デフォルトの名無しさん:2006/12/08(金) 16:52:18
9999枚なんて非常識なプログラムを書く奴は現実世界でも9999枚のおつりを渡すアホなんだろうな
445デフォルトの名無しさん:2006/12/08(金) 16:57:05
>>444
禿同。仕様書にないからといって気の利かないプログラムを書く奴だろそいつは。
446デフォルトの名無しさん:2006/12/08(金) 16:59:36
9999枚のおつりとかいってるやつは社会常識もないニートだろう。
447デフォルトの名無しさん:2006/12/08(金) 17:00:40
>>431=433=434
正直、頭悪い
448デフォルトの名無しさん:2006/12/08(金) 17:02:11
>>447
禿同。正直そいつらには付き合ってられない。反論するだけ時間の無駄。
449デフォルトの名無しさん:2006/12/08(金) 17:07:02
自作自演劇場が開催されていると聞いてやってきました
450デフォルトの名無しさん:2006/12/08(金) 17:07:30
問題の意図が、買い物のシミュレーションなのか、
買い物を比喩にした数学の問題なのかによるし、
買い物のシミュレーションだとして店に無限のつり銭の用意があるのかとか
数学の問題だとして全ての場合を列挙するのかだとか、
曖昧な点が多すぎるわけで、
それを確認もしないで常識を持ち出すのはおかしいだろ。
451デフォルトの名無しさん:2006/12/08(金) 17:10:22
>>450
買い物のおつりってのは日常的な行為。そこに常識的な判断が入るのは
何らおかしくない。
はい、論破。
452デフォルトの名無しさん:2006/12/08(金) 17:11:02
>>451
正直痛いからもうやめれ
453デフォルトの名無しさん:2006/12/08(金) 17:15:24
先生も大変だな
454デフォルトの名無しさん:2006/12/08(金) 17:21:14
>>437
難しいな。
どうすればいいんだ?
455デフォルトの名無しさん:2006/12/08(金) 17:23:24
>>451
非常識な入力がされてもちゃんと動くプログラムじゃないと
いけないわけだが。お前馬鹿だな
456デフォルトの名無しさん:2006/12/08(金) 17:28:02
なにを言ってるんだお前は。
457デフォルトの名無しさん:2006/12/08(金) 17:28:30
>>454
1万円を1種類の紙幣、硬貨で表した時、その枚数が他の紙幣、硬貨の枚数と同一にならない事の反証でおk。
458デフォルトの名無しさん:2006/12/08(金) 17:34:34
しかしながら、どこぞの国では
2000+500+500 = 1000+1000+1000
だったりするから注意
459デフォルトの名無しさん:2006/12/08(金) 17:37:06
円の話じゃなかったのか?
460デフォルトの名無しさん:2006/12/08(金) 17:38:23
円の話だな。
誰だっけ、2000円作った人は
461デフォルトの名無しさん:2006/12/08(金) 17:40:44
>>458
3000 = 2000+1000 で一意
462デフォルトの名無しさん:2006/12/08(金) 17:40:55
[1] C言語
[2]
文字列として入力された2つの数値を、
char型の配列とint型を使用して四則演算を行う。
実数にも対応させること。
[3] 環境
 [3.1] Linux
 [3.2] gcc4.0.2
 [3.3] C
[4] 期限: 2006年12月15日
[5] 構造体やポインタの基礎あたり。
463デフォルトの名無しさん:2006/12/08(金) 17:43:00
>>437
一般のコインでは成立しない。
たとえば1円、3円、5円があるとき6円を作る方法は二通りあって、
どちらも 2 枚の支払いですむため、一意でない。

一般に、与えられたコイン集合から任意の金額が
一意に支払えるかどうかを判定する問題は NP 完全。

ただ、通常のコイン集合の場合に一意なのは簡単で、
貪欲解法がうまくいくことを詰めれば出る。ただしこれも
一般には駄目で、冒頭の例は貪欲はうまくいくが一意でない例。

通常のコイン集合の場合をやっておく:
X 円を支払う最適な方法が二つあったとき、それぞれにおける
1 円玉の数を a, b とおく。a, b < 5 は明らか
(≧5 なら 5円に置き換ればよりよい解になるので最適性に矛盾)。
また、X の 5 での剰余を考えれば a == b (mod 5) も明らか。
よって a = b。X を (X - a) / 5 とスケーリングすれば以下同様。
464デフォルトの名無しさん:2006/12/08(金) 17:43:08
>>457
よくわからん。

>>437
できた。
m円払いたいとする。1円玉m枚から始める。n円玉k枚(k>=2)をn*k円玉1枚で置き換える操作を
「簡約」と呼ぶ。簡約するたびに枚数は減る。任意の払いかたは初期状態から適当に簡約していけば達成できる。
つまり、どのように簡約しても結局は合流することを示せば良い。
n=iとn=jでi!=jのときの簡約はお互い独立なので、合流するのは自明。
i=jのときの簡約は、日本の貨幣体系では上位の金種の価値が下位のものの倍数であることより、
iとjの大きい方に統一することで合流する。
465デフォルトの名無しさん:2006/12/08(金) 17:46:35
3円???
466464:2006/12/08(金) 17:46:44
>iとjの大きい方に統一することで合流する。
いろいろアホだった。>>463が正解だな。
467デフォルトの名無しさん:2006/12/08(金) 17:50:57
駄スレが良スレに進化する瞬間を見た
468デフォルトの名無しさん:2006/12/08(金) 17:56:25
そして折角良スレになった所をまた元の駄スレに戻そうとする俺
469デフォルトの名無しさん:2006/12/08(金) 18:05:28 BE:820017195-2BP(0)
470デフォルトの名無しさん:2006/12/08(金) 18:13:35
>>469
なにこれ?なんかうさんくせえ
471デフォルトの名無しさん:2006/12/08(金) 18:16:04
>>469
募集されている技士の要件を満たしてないし、やりかたにも賛同できないので、お断りする。
472デフォルトの名無しさん:2006/12/08(金) 18:21:51
どうみても宗教です
473デフォルトの名無しさん:2006/12/08(金) 18:25:08
うわ、見てみたいけどクリックするのもヤバい雰囲気がプンプンするぜ
474デフォルトの名無しさん:2006/12/08(金) 19:15:09
>>469がものすごく痛いやつだってことは分かった
http://pc8.2ch.net/test/read.cgi/gamedev/1164167428/
475413:2006/12/08(金) 19:27:04
おまいら、ありがとう。メモリーに関しての関数には弱いので使わなかったけど、
すごく参考になりました。

↓ので、自分のしたかった事が出来たっぽい。ありがと〜

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3117.c
476デフォルトの名無しさん:2006/12/08(金) 19:35:27
>>474
ジョークだと思ってにやにやしてたのに、真正だったのか…
477デフォルトの名無しさん:2006/12/08(金) 20:07:56
あれ みんなこいつがム板に立てたスレは読んでないの?
478デフォルトの名無しさん:2006/12/08(金) 20:10:16
まだdat落ちしてなかった

http://pc8.2ch.net/test/read.cgi/tech/1163349367/
479デフォルトの名無しさん:2006/12/08(金) 20:10:20
>>477
お前は全てのスレを見てるのか?あ?
480デフォルトの名無しさん:2006/12/08(金) 20:24:42
>>479
ここの前のスレでこいつが勧誘にきてたんだよ
481デフォルトの名無しさん:2006/12/08(金) 20:26:46
とりあえず宣伝っぽいスレタイは大体スルーしてるな。
金になるわけでもなし。
482デフォルトの名無しさん:2006/12/08(金) 21:05:59
>>480
お前は勧誘にひょいひょいついていくのか?あ?
いいカモだなおい。笑いも出ねえぞ。
483デフォルトの名無しさん:2006/12/08(金) 21:20:31
おっしゃ、俺でもすぐに解ける宿題を質問してくれ!
小難しい厄介な数式、法則を使うような宿題はパスねw
484デフォルトの名無しさん:2006/12/08(金) 21:28:37
>>483
解決してない奴でも解けよ
485382:2006/12/08(金) 21:31:46
414さんありがとうございました。
うまく結果が表示できました。
ただ、cos近似値の計算結果が少しおかしいようなのですが、これはどこか式を作り直せばうまくいきそうですね。
本当にどうもありがとうございました。
でも自分の力でできたわけじゃないから、授業のときには正直にできませんでしたと言うつもりです。
ここのプログラマーの皆さんは本当にすごいですね。
感謝します!!
486デフォルトの名無しさん:2006/12/08(金) 21:34:06
>>484
いや、だから 俺でもすぐに解ける が条件ですw
何でも質問してくれ!って意味じゃないっすw
487デフォルトの名無しさん:2006/12/08(金) 21:34:42
>>469
要は、「金が欲しい」「おまんこしたい」ってこったろ
488デフォルトの名無しさん:2006/12/08(金) 21:55:03
>>224
>>246
>>362
>>443
>>462

こんなところか
489414:2006/12/08(金) 22:34:25
>>485
うちでは小数点以下6桁程度では項数6以上取れば誤差でないんだが。
どこかコピペミスしてるんじゃねーの

あとcosのマクローリン展開は使ってないからそこ突っ込まれるかもな
マクローリン展開の性質上sinに帰着させた方が良いと俺は思っているが
時間に余裕があったら無理やりcosも使ったバージョンを書くかもしれないから
朝あたり覗いてみて
490デフォルトの名無しさん:2006/12/08(金) 22:41:51
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3118.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 11日
[5] その他の制限:


よろしくお願いします。
491デフォルトの名無しさん:2006/12/08(金) 22:42:30
[1] 授業単元: アルゴリズム
[2] 問題文
・最小値選択法
・バブルソート
・バブルソートにフラグを追加
・番兵を用いた挿入法
・ヒープソート
・クイックソート
これらのソートの特徴を書け
[3] 期限 2006年12月11日月曜日まで
[4] 備考
バブルソートのフラグを追加は理解できました。
フラグがたっている状態=データが既に並んでいる状態になる。ということは理解できました。
ですが、その他の原理が理解出来ません。

スレ違いでしたらスレ汚し申し訳ございませんでした。
492デフォルトの名無しさん:2006/12/08(金) 22:43:29
授業単元はアルゴリズムとなっておりますが、使用する言語は全てC++なのでこちらのスレで質問させていただきました。
493デフォルトの名無しさん:2006/12/08(金) 22:46:04
>ソートの特徴を書け
なんだからコーディング関係ないしやっぱりスレ違いなんじゃないの?
494デフォルトの名無しさん:2006/12/08(金) 22:53:32
>>491を理解させるべきなのか、ただ単に特徴を書けばいいだけなのか悩むな
495デフォルトの名無しさん:2006/12/08(金) 23:13:23
>>493
スレ違いですか。すいません。

>>494
課題は特徴を書くだけでした。
よろしければ馬鹿にも理解できるようご説明していただけると幸いです。
496デフォルトの名無しさん:2006/12/08(金) 23:16:21
・最小値選択法
わかりやすい
・バブルソート
わかりにくい
・バブルソートにフラグを追加
理解できない
・番兵を用いた挿入法
気持ち悪い
・ヒープソート
かっこいい
・クイックソート
趣味が悪い
497デフォルトの名無しさん:2006/12/08(金) 23:17:48
>>224
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3119.txt
練習がてらやってみた 誰かツッコミお願い
498デフォルトの名無しさん:2006/12/08(金) 23:30:45
・最小値選択法
(´・ω・`)
・バブルソート
(´・ェ・`)
・バブルソートにフラグを追加
('A`:)
・番兵を用いた挿入法
( ̄ー ̄)
・ヒープソート
\(゚∀゚)/
・クイックソート
ヽ(´ー`)ノ
499デフォルトの名無しさん:2006/12/08(金) 23:32:39
>>490
#include<stdio.h>
int main(int argc,char *argv[])
{
FILE *fp;
int c,n;
if(argc==1) return 1;
for(n=1;n<argc;n++){
if((fp=fopen(argv[n],"r"))==NULL){
printf("エラー: ファイル %s をオープンできません。\n",argv[n]);
return 1;}
while((c=fgetc(fp))!=EOF) putchar(c);
fclose(fp);}
return 0;
}
500デフォルトの名無しさん:2006/12/08(金) 23:44:44
>>499
有難うございます
後で試してみます
501デフォルトの名無しさん:2006/12/08(金) 23:45:05
問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3120.txt
環境
OS:Windows
言語:どちらでも可
期限:2006年12月12日
よろしくお願いします。
502デフォルトの名無しさん:2006/12/09(土) 00:00:27
503デフォルトの名無しさん:2006/12/09(土) 00:07:48
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
1
11
121
1331
14641
(以下16行まで)
上記のようなパスカルの三角形を作るプログラムを書け。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc (恐らく)
 [3.3] 言語:C++
[4] 期限:できれば明日の9時半頃までにお願いします
[5] その他の制限:if文、while文、for文、一次元配列、二次元配列まで習っています
504デフォルトの名無しさん:2006/12/09(土) 00:11:18
>>503
スペースがないとぐちゃぐちゃになるがそれでおk?
505デフォルトの名無しさん:2006/12/09(土) 00:19:27
>>503
とりあえず。

# include <iostream>

int main()
{
  const int size = 16;
  int pascal[size+2][size+2] = {{0}};
  pascal[1][1] = 1;
  for(int j = 2; j <= size; j++)
    for(int i = 1; i <= j; i++)
      pascal[j][i] = pascal[j-1][i-1] + pascal[j-1][i];
  for(int j = 1; j <= size; j++)
  {
    for(int i = 1; i <= j; i++)
      std::cout << pascal[j][i];
    std::cout << '\n';
  }
}
506デフォルトの名無しさん:2006/12/09(土) 00:20:19
>>502
ありがとうございました。
507デフォルトの名無しさん:2006/12/09(土) 00:31:47
508デフォルトの名無しさん:2006/12/09(土) 03:40:09
509デフォルトの名無しさん:2006/12/09(土) 03:42:09
>>503
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3123.cpp
間違って関係ないソースをうpってもうたんで訂正
510デフォルトの名無しさん:2006/12/09(土) 04:02:05
>>503
むひょっ、>>509は17行あったっけ、MAXを15にしてちょっ
511デフォルトの名無しさん:2006/12/09(土) 09:10:17
(1/2)

[1] 授業単元:代数
[2] 問題文:LLLアルゴリズムのプログラムをCで作成せよ。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2006/12/10
512デフォルトの名無しさん:2006/12/09(土) 09:12:05
(2/3)

mathematicaで作成したものがあるのですが、Cで書けず悩んでいます。
mathematica版(正しいかどうか分からないですが・・・)

(*初期化*)
Clear[u];
Clear[gstar];
Clear[a];
Clear[b];
Clear[c];
Clear[i];
y=0;

(*関数の定義*)
Norm[v_]:=Sqrt[v.v];
u[i_, j_]:=(g[i]. gstar[j])/(Norm[gstar[j]]^2)
gstar[i_]:=g[i]-Sum[u[i,j]*gstar[j], {j, 1, i-1}];
GSO[g1_, g2_, g3_, g4_, g5_, g6_, z_]:=Module[{a,b,c},
(*GSO[g[1],g[2],g[3],g[4],g[5],g[6],a]*)
(*a行目以降をGSO計算する*)

(*Gの成分をGにセット*)
G={g1, g2, g3, g4, g5, g6};

(*MとGSTARの成分のセット*)
For[a=z, a<=6, a++,
gstar[a]; (*GSTARの成分セット*)
For[b=1, b<=a, b++, m[a,b]=u[a,b]];
For[c=a+1,c<=6,c++,m[a,c]=0];
];
513デフォルトの名無しさん:2006/12/09(土) 09:12:44
(3/3)

(*Mの成分をMにセット*)
M={{m[1,1],m[1,2],m[1,3],m[1,4],m[1,5],m[1,6]},
{m[2,1],m[2,2],m[2,3],m[2,4],m[2,5],m[2,6]},
{m[3,1],m[3,2],m[3,3],m[3,4],m[3,5],m[3,6]},
{m[4,1],m[4,2],m[4,3],m[4,4],m[4,5],m[4,6]},
{m[5,1],m[5,2],m[5,3],m[5,4],m[5,5],m[5,6]},
{m[6,1],m[6,2],m[6,3],m[6,4],m[6,5],m[6,6]},
};

(*GSTARの成分のセット*)
GSTAR={gstar[1],gstar[2],gstar[3],gstar[4],gstar[5],gstar[6]};

(*GSOの実行回数をインクリメント*)
y++;

(*行列の表示*)
Print["GSOの計算回数"];
Print[y];
Print["各種行列の表示"];
Print["行列M"];
Print[M];
Print["行列G"];
Print[G];
Print["行列GSTAR"];
Print[GSTAR];

(*G=M. GSTARが成り立つかどうかの検証*)
Print["G=M.GSTAR?"];
Print[TrueQ[G==M. GSTAR]];
Print["-------------------------------------------"];
514デフォルトの名無しさん:2006/12/09(土) 09:25:34
>>510
ありがとうございます。
説明不足だったんですが、出力される行を入力したら
このパスカルの三角形が出力されるようにしたいんですけど、
どうしたらいいですか?
515デフォルトの名無しさん:2006/12/09(土) 10:02:57
>>514
いくらなんでもscanfくらい使えるだろ
516デフォルトの名無しさん:2006/12/09(土) 10:15:49
ケーキを作って欲しいというからショートケーキを焼いたら
「やっぱりチョコレートケーキが良かったんですけど…」
517デフォルトの名無しさん:2006/12/09(土) 10:33:58
ほぼ完成したよ
http://chomework.sakura.ne.jp/search/?query=%83C%83%60%83a%83N&whence=0&max=20&result=normal&sort=score&idxname=new&idxname=old

触ってて気が付いたが
これひょっとしてあんまり役に立たないんじゃ
518デフォルトの名無しさん:2006/12/09(土) 10:38:39
その通り
519デフォルトの名無しさん:2006/12/09(土) 10:48:56
>>509のソースをいじってみる
#include<iostream>
using namespace std;
int main(){int **a;int nMax;cout<<"input = ";cin>>nMax;if(nMax<1)exit(1);
a=new int*[nMax];for(int i=0;i<nMax;i++)a[i]=new int[nMax];a[0][0]=1;
for(int i=1;i<nMax;i++){a[i][0]=1;a[i][1]=i;for(int j=2;j<i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];a[i][i-1]=i;a[i][i]=1;}for(int i=0;i<nMax;i++)
{for(int j=0;j<=i;j++)cout<<a[i][j]<<" ";cout<<endl;}for(int i=0;i<nMax;i++)
delete[]a[i];delete[]a;return 0;}
520デフォルトの名無しさん:2006/12/09(土) 10:50:09
521デフォルトの名無しさん:2006/12/09(土) 12:06:33
[1] プログラミング演習
[2] 少なくとも一方が 100万 以下であるような友愛数をすべて表示するプログラムを書きなさい.
なお,完全数は除いて出力すること.

2つの自然数 n と m について,n のそれ自身を除く約数の和が m となり,
m のそれ自身を除く約数の和が n となるとき,n と m のペアを友愛数と呼ぶ.

例えば,220 と 284 は友愛数
220 の約数は,1,2,4,5,10,11,20,22,44,55,110,220 であり,
1+2+4+5+10+11+20+22+44+55+110 = 284
284 の約数は,1,2,4,71,142,284であり,
1+2+4+71+142 = 220
2つの自然数 n と m について,n=m,すなわち n のそれ自身を除く約数の和が n となるような自然数 n を完全数と呼ぶ (例えば 6).


[3] 環境
 [3.1] Windows または UNIX
 [3.2] gcc
 [3.3] C++
[4] できればこの土日で
[5] if,for,while,簡単な関数,1次配列くらいまで習ってます
522デフォルトの名無しさん:2006/12/09(土) 12:13:07
友愛数は比較的近い数字の組っぽいけど
片方が100万以下ならもう片方がintに収まるって仮定しても大丈夫だよな
523デフォルトの名無しさん:2006/12/09(土) 12:21:04
簡単そうだしやろうかと思ったがC++か

C++覚えようかなあ
524デフォルトの名無しさん:2006/12/09(土) 12:31:30
C++と指定されてるときってstd::coutを使えということ?
#include <cstdio>でprintfは邪道なのかね
525デフォルトの名無しさん:2006/12/09(土) 12:42:18
書いてみたけど激遅
誰か高速版書いてくれないか

#include <iostream>
using namespace std;
int func(int n) {
int sum = 1;
for(int i=2;i*i<=n;i++) {
if(n%i == 0) {
sum += i;
if(i != n/i)
sum += n/i;
}
}
return sum;
}
int main() {
for(int i=2;i<1000000;i++) {
int f = func(i);
if(f <= i)
continue;
if(func(f) == i) {
cout << i << " " << f << endl;
}
}
return 0;
}
526デフォルトの名無しさん:2006/12/09(土) 12:43:32
スピード選手権にはCで参加しても良いですか?
527デフォルトの名無しさん:2006/12/09(土) 12:45:12
C++としてコンパイルできて正常に動けばいんじゃねーの
528521:2006/12/09(土) 12:47:32
すいませんCでも構いませんです
529デフォルトの名無しさん:2006/12/09(土) 13:00:44
>>525 よりは少しだけ早い。上界設定がインチキだが。
やってることは 525 と同じだが、func をエラトステネスの篩の変形版で前計算した。

#include <iostream>
using namespace std;
const int n = 1000000;
const int m = 4*n; // margin を4倍くらい取る
int num[m];
int main() {
  for (int i = 1; i < m; ++i) 
    for (int j = i+i; j < m; j+=i)
      num[j] += i;
  for (int i = 1; i < n; ++i) 
    if (i < num[i] && i == num[num[i]]) 
      cout << i << "," << num[i] << endl;
}
530デフォルトの名無しさん:2006/12/09(土) 13:06:42
http://ja.wikipedia.org/wiki/%E5%8F%8B%E6%84%9B%E6%95%B0
どうもこれをみる限り完全数は友愛数から除くっぽいけど
その処理は?
531デフォルトの名無しさん:2006/12/09(土) 13:11:21
20000くらいからやってられんくらい遅くなるなあ
532521:2006/12/09(土) 13:15:26
再度すみません
C++でなくCでお願いします
533デフォルトの名無しさん:2006/12/09(土) 13:21:34
>>532
すでにプログラムは出てるんだからそれ見て書き換えるくらいできるでしょ
表示してるとこ以外はほどんと変わんないんだし
534デフォルトの名無しさん:2006/12/09(土) 13:27:00
出題者にコピペ以上のスキルはないと思え
535デフォルトの名無しさん:2006/12/09(土) 13:27:06
>>533
君は丸投げという言葉の意味が分からんのかね?
536デフォルトの名無しさん:2006/12/09(土) 13:44:25
>>521
速度アップ&でかさアップ.結果が合ってるかは知らん
/* (1/2) */
#include <stdio.h>
#define MAX 1000000
int sum[MAX+1];
int sumDivisor(int value){
int i;
int save_value = value;
int least_prime = value;
for (i=2; i*i<=value; i++){
if (value % i == 0){
least_prime = i; break;
}
}
int power_series = 1;
while (value%least_prime == 0){
value /= least_prime;
power_series = power_series * least_prime + 1;
}
sum[save_value] = sum[value]*power_series;
}
537デフォルトの名無しさん:2006/12/09(土) 13:45:39
/* (2/2) */
int main(){
int i;
sum[1] = 1;
for (i=2; i<=MAX; i++){
sumDivisor(i);
}
for (i=1; i<=MAX; i++){
sum[i] -= i;
}
for (i=1; i<=MAX; i++){
if (sum[i] > i && sum[i] <= MAX && sum[sum[i]] == i){
printf("(%d, %d)\n", i, sum[i]);
}
}
return 0;
}
538デフォルトの名無しさん:2006/12/09(土) 13:51:42
HAEEEEEEEEEEEEEEEEEE
539デフォルトの名無しさん:2006/12/09(土) 13:54:21
>>537
「少なくとも一方が 100万以下」 なので範囲が間違ってる。
540デフォルトの名無しさん:2006/12/09(土) 13:58:51
>>529のC移植版
#include <stdio.h>
#define N 1000000
#define M 4*N // margin を4倍くらい取る
int num[M];
int main(){
int i,j;
for(i = 1;i < M;i++){
for (j = i+i;j < M;j+=i){
num[j] += i;
}
}
for(i = 1;i < N;i++){
if(i < num[i] && i == num[num[i]]){
printf("%d,%d\n",i,num[i]);
}
}
return 0;
}
541デフォルトの名無しさん:2006/12/09(土) 14:17:26
>>521 とりあえず>>540の倍くらいにはなってるはず。
#include <stdio.h>
#define MAX 1000000
int sum[MAX + 1];
void init(void)
{
  int i, j;
  for( i = 1 ; i <= MAX ; i++ )
    for( j = i * 2 ; j <= MAX ; j += i )
      sum[j] += i;
}

int sumDivisor(int n)
{
  int i, s = 1;
  if( n <= MAX ) return sum[n];
  for( i = 2 ; i * i < n ; i++ )
    if( n % i == 0 ) s += i + n / i;
  if( n % i == 0 ) s += i;
  return s;
}
int main(void)
{
  int n, m;
  init();
  for( n = 1 ; n <= MAX ; n++ ) {
    if( sum[n] <= n ) continue;
    if( sumDivisor(sum[n]) == n )
      printf("(%d,%d)\n", n, sum[n]);
  }
  return 0;
}
542デフォルトの名無しさん:2006/12/09(土) 14:31:25
>>517
1つお願いがあるんだが。datをうpしてはくれまいか。
543デフォルトの名無しさん:2006/12/09(土) 14:37:00
ブピュルピュル
544デフォルトの名無しさん:2006/12/09(土) 14:37:32
誤爆スマソ
545デフォルトの名無しさん:2006/12/09(土) 14:46:43
>>542
いいけどうちもこんな状況
http://chomework.sakura.ne.jp/logindex.html
で全部そろってるわけじゃないよ
もう少し頑張って探せば見つかりそうな気もするけど

それでもよければどうぞ
546542:2006/12/09(土) 14:52:50
>>545
今は手元にないが、27代目以外は全部持ってるはず。
547デフォルトの名無しさん:2006/12/09(土) 15:01:32
>>546
うちも27途中までだな
datでおいてるとこはないっぽい

http://2ch.dumper.jp/key=1089448445
http://220.254.5.211:8000/2ch/pc5_tech/1089/1089448445.html
↑ここにhtmlは1000まであるからhtmltodatとか使って変換するのが良いんじゃないかな
548デフォルトの名無しさん:2006/12/09(土) 16:03:14
>>546
http://chomework.sakura.ne.jp/1089448445.dat
変換してあげておいた
549デフォルトの名無しさん:2006/12/09(土) 16:27:29
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3124.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 11日
[5] その他の制限:


宜しくお願いします。
550デフォルトの名無しさん:2006/12/09(土) 16:40:01
>>549
ファイルポインタにstdoutを指定
551542:2006/12/09(土) 16:42:54
>>548
いただきました
552デフォルトの名無しさん:2006/12/09(土) 17:56:17
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):

乱数生成の標準ライブラリ関数を利用し、
150以上200以下の整数を10個生成して
画面に出力しなさい。

[3] 環境
 [3.1] OS: XPpro
 [3.2] visual studio2003
 [3.3] 言語: C
[4] 期限: ([2006年12月15日まで]
[5] その他の制限:
553デフォルトの名無しさん:2006/12/09(土) 18:05:33
>>552
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i;
//srand(12345);
for(i=0;i<10;i++)
printf("%d\n", 150+rand()%51);
return 0;
}
554549:2006/12/09(土) 19:48:36
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3124.txt

に関して
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3125.txt

途中まで書いてみてみたのですが
fgetc() を用いる際の stdout周辺について分からないので、
プログラムの訂正よろしくお願いします・・
555デフォルトの名無しさん:2006/12/09(土) 19:57:01
>>553
seedのセットした方がよりランダムになるんでないの?
556デフォルトの名無しさん:2006/12/09(土) 20:05:42
↑putchar() -> fputc() にするだけならここを読め。

ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/putchar.3.html
557デフォルトの名無しさん:2006/12/09(土) 20:11:04
>>555

seedのパラメータを固定にするなら、セットしないのと変わらない
558デフォルトの名無しさん:2006/12/09(土) 21:04:55
#include <time.h>
srand(time(NULL));を追加汁!
559デフォルトの名無しさん:2006/12/09(土) 21:17:01
だれか面白い問題あげてくださいおねがいします
560デフォルトの名無しさん:2006/12/09(土) 21:47:10
>>559
レベル1
線形リストを用いて名前と住所のデータを入力、追加、削除、表示するプログラムを作れ。

レベル2
めんどくなった
561デフォルトの名無しさん:2006/12/09(土) 22:06:38
[1] 授業単元:学校の授業じゃない
[2] 問題文(含コード&リンク):

ブラックジャック、ポーカー、ババ抜き、7並べのいずれか1つの
プログラムを作れ。

[3] 環境
 [3.1] OS: C言語で作ったプログラムが動くものならなんでも
 [3.2] bccでもgccでも
 [3.3] 言語: C
[4] 期限: ([2006年年末まで]
562デフォルトの名無しさん:2006/12/09(土) 22:20:00
563デフォルトの名無しさん:2006/12/09(土) 22:20:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
tanx+40x-8=0の方程式をニュートン法で解くプログラムを作成せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] borland
 [3.3] C言語
[4] 期限: 明後日
[5] その他の制限: 特に無し。

よろしくお願いします。
564デフォルトの名無しさん:2006/12/09(土) 22:42:40
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3127.txt
プログラムのmain関数にあるメモリ確保の部分を関数化する。関数名はcreate_nodeとする。(それでmain関数で出力という形です。
それと、二分探索木として、最小値探索を作成せよ。
ただし、最小値の探索の関数は、再帰を使わなくてもかける。
再帰を使った場合と、再帰を使わない場合の、
2種類の関数を作成すること。


[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2003
 [3.3] C言語
[4] 期限: 15日まで
[5] その他の制限: 特に無し。

よろしくお願いします。
565デフォルトの名無しさん:2006/12/09(土) 22:51:37
>>559

[1] 授業単元: 単元って何?
[2] 問題文(含コード&リンク): 2ちゃんのトリップを破るコードを書きなさい(りんくなんかねーよ)
[3] 環境
 [3.1] OS:Windows
 [3.2] すきにしろ
 [3.3] 言語: どちらでも可
[4] 期限: 無制限
[5] その他の制限: 量子コンピュータまだか?

566デフォルトの名無しさん:2006/12/09(土) 22:55:34
>>563 チェックしてない
#include <stdio.h>
#include <math.h>
double f(double x) { return tan(x) + 40 * x - 8; }
double df(double x) { return 1.0 / (cos(x) * cos(x)) + 40; }
int main(void) {
int x = 0.0, pre; // xの初期値は計画的に。
do {
pre = x;
x -= f(x) / df(x);
} while( fabs(x - pre) > 1e-7 );
// ここで x に近似解が入ってるはず
return 0;
}
567デフォルトの名無しさん:2006/12/09(土) 23:17:32
>>560
絶望的につまらない問題をありがとう
568デフォルトの名無しさん:2006/12/09(土) 23:28:48
[1] プログラミング
[2] ニュートン法を用いた解の求め方
[3] 環境
 [3.1] OS: WinXP SP2
 [3.2] BorlandC++ v5.5
 [3.3] C
[4] 期限: 2006/12/10

自力で制作したソースコード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3128.txt

コンパイルエラーが発生。考えてみたけどバグが洗い出せない
/* エラー内容 */
エラー E2188 prog.c 18: 式の構文エラー(関数 main )
エラー E2379 prog.c 18: ステートメントにセミコロン(;)がない(関数 main )
エラー E2188 prog.c 24: 式の構文エラー(関数 main )
警告 W8070 prog.c 34: 関数は値を返すべき(関数 main )
569デフォルトの名無しさん:2006/12/09(土) 23:31:40
[1] 授業単元: cプログラミング
[2] 問題文(含コード&リンク):
底面の半径r、高さがh(2つともdouble型)の円錐の体積を計算結果として返す
関数volume_of_cone() を定義することによって、円錐の体積を出力するCプログラム。
[3] 環境
 [3.1] Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: ([2006年12月11日 23:00まで
[5] その他の制限:(1) 最初にマクロ定義
#define PI (3.1415926535897932)を入れる
(2)関数volume_of_cone() のプロトタイプ宣言を書いて
main() 関数を書く。
(3)関数volume_of_cone() を書く

570デフォルトの名無しさん:2006/12/09(土) 23:36:37
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
簡単な grep を作る。
キーワードとファイル名を指定して、ファイル内のキーワードがある行の
行番号とキーワードの位置を示すようにしなさい。

例)fprintf.c から File というキーワードを探す

./a.out File fprintf.c

7: char inFileName[ MAXSTR ], outFileName[ MAXSTR ];
-----------^
----------------------------------^
12: strcpy( inFileName, argv[1]); strcpy( outFileName, argv[2]);
-----------------^
------------------------------------------------^
15: if (( fpr=fopen(inFileName,"r"))==NULL) exit(1);
-----------------------^
16: if (( fpw=fopen(outFileName,"w"))==NULL) exit(1);
------------------------^
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:12月13日(水)
[5] その他の制限:特になし
571デフォルトの名無しさん:2006/12/09(土) 23:42:03
>>568
>#define EPS pow(10.0, -8);
>#define KMAX 10;
セミコロンいらない
572デフォルトの名無しさん:2006/12/09(土) 23:46:52
>>568
cpp32 source.c
で#defineなどの置き換えを行った後のソースが見れるよ
573568:2006/12/10(日) 00:02:34
>>571
セミコロン抜いたらコンパイルは通りました。ありがとうございます
計算結果がおかしいようなので、処理の修正をやります

>>572
math.h マクロ abs の重複定義なるエラーが出ましたが、
とりあえずcpp32の使い方を教えていただきありがとうございます。
574568:2006/12/10(日) 00:11:15
>>572
追記
#defineで定義したEPSやKMAXに対して置換された値にセミコロンが付いてたので「何だこれ」というコンパイルエラーをはいてたのですね。
で、それを探すにはcpp32で中身を展開したら手っ取り早いということだったのですね。
ありがとうございます
575デフォルトの名無しさん:2006/12/10(日) 01:02:02
>>569
#include <stdio.h>

#define PI (3.1415926535897932)

double volume_of_cone(double r, double h);

int main() {
double r,h;
printf("r=?\n");
scanf("%lf", &r);
printf("h=?\n");
scanf("%lf", &h);
printf("answer=%lf\n", volume_of_cone(r,h));
}

double volume_of_cone(double r, double h) {
return r*r*PI*h/3.0;
}
576デフォルトの名無しさん:2006/12/10(日) 01:35:17
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
再帰による数列計算
第1項・第2項の値を1とし、
直前の2つの項の和を項の値とする数列を「フィボナッチ数列」と言う。
この数列のi番目の項を計算する関数は、
以下のように再帰的に記述することができる。
f(i) = f(i-1) + f(i-2) (i > 1のとき)
f(i) = 1 (i = 1のとき)
f(i) = 0 (i = 0のとき)
キーボードから数字を入力して変数aに格納し、
フィボナッチ数列・第a項の値を計算するプログラムを作成せよ。
項の計算は上の定義を使い、再帰的な呼び出しを実行する関数
int Fibonacci(int i)を作成して呼び出すこと。

↑と↓の発展版2つのプログラムの作成をお願いします。

【発展】
指定された項の値を計算は再帰を使わなくても可能である。
再帰を使わず(簡単な反復を使って)コードを作成し、どちらの方が有利か比較しなさい。
【ヒント】
CPUの計算時間を取り出す方法(発展) time.hをインクルードし、標準関数clock()を使う。
clock_t clock(void);詳しい使い方は開発環境でヘルプを参照すること。
「clock_t型」や「clock」で検索するとよい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2003
 [3.3] C言語
[4] 期限: 16日までまで
[5] その他の制限: 特に無し。

よろしくお願いします。
577デフォルトの名無しさん :2006/12/10(日) 01:59:19
/***********************************************************
fib.c -- Fibonacci (フィボナッチ) 数列
***********************************************************/
#include <math.h>

int fib1(int n)
{
return (int)(pow((1 + sqrt(5)) / 2, n) / sqrt(5) + 0.5);
}

int fib2(int n)
{
int a, a1, b, b1, c, c1, x, x1, y, y1;

a = 1; b = 1; c = 0; x = 1; y = 0; n--;
while (n > 0) {
if (n & 1) {
x1 = x; y1 = y;
x = a * x1 + b * y1; y = b * x1 + c * y1;
}
n /= 2;
a1 = a; b1 = b; c1 = c;
a = a1 * a1 + b1 * b1;
b = b1 * (a1 + c1);
c = b1 * b1 + c1 * c1;
}
return x;
}
//アルゴリズム事典より
578デフォルトの名無しさん:2006/12/10(日) 02:02:51
>>576 チェックしてないからコンパイル通らないかも
#include <stdio.h>
#include <time.h>
//int Fibonacci(int i) { return (i == 0)?0:(i == 1)?1:Fibonacci(i - 1) + Fibonacci(i - 2); } /* 基本版 */
int Fibonacci(int i) { /* 発展版 */
int a,b,c;
for( b = 1, c = 0 ; i >= 0 ; i--, c = b, b = a ) a = b + c;
return c; // 2項先まで求めてるけど気にするな。
}
int main(void)
{
int a, f;
clock_t st;
printf("i=?"); scanf("%d", &a);
st = clock(); // 計算開始クロック
f = Fibonacci(a);
printf("Fibonacci(%d)=%d\n%.3f[sec]\n", a, f,
(double)(clock() - st) / CLOCKS_PER_SEC);
return 0;
}
579デフォルトの名無しさん:2006/12/10(日) 02:41:29
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
自己参照型構造体(リスト)を使ってキューを実装し、
以下の操作を行った結果取り出された値を画面に出力しなさい。
1 を追加
2 を追加
3 を追加
4 を追加
取り出し
取り出し
5 を追加
6 を追加
7 を追加
取り出し
8 を追加
取り出し
9 を追加
10 を追加
取り出し
取り出し
取り出し
取り出し
取り出し
取り出し
[3] 環境
 [3.1] OS: XP
 [3.2] visualstudio2003
 [3.3] C言語
[4] 期限: 明後日
[5] その他の制限: 特に無し。

よろしくお願いします
580デフォルトの名無しさん:2006/12/10(日) 02:51:11
581デフォルトの名無しさん:2006/12/10(日) 03:00:16
582デフォルトの名無しさん:2006/12/10(日) 07:08:26
[1] 授業単元:配列
[2] 問題文(含コード&リンク):
以下のことを実行するプログラムを作成しなさい。

スペースで区切った2つの実数を1つの行として、5行分のデータを読み込む。
1つの行にある2つの実数は、2次元座標上の点P(x,y)を示す。
2つの点の組み合わせ全てに対して、2つの点の座標位置、2つの点の距離を1行として出力しなさい。
(Hint:10行分出力されることになる。2重ループを利用すること。)
最も遠い点のペアを出力しなさい。
(添え字番号のペアとして出力する。同点の場合は、どれでも良いから1つだけ出力する)
原点を中心とした2点の角度が最も大きい点のペアを出力しなさい。
(添え字番号のペアとして出力する。同点の場合はどれでも良いから1つだけ出力する。)

以上です。
これらのことを実行するプログラムを1つ作成しなくてはいけないのですが、
よくわからないので、お願いします。
また以上のことを実行するユーザ定義関数を使ったプログラムもお願いします。


[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++ 6.0)
 [3.3] 言語:C++
[4] 期限:2006/12/11まで
[5] その他の制限:とくになし。
583デフォルトの名無しさん:2006/12/10(日) 07:55:51
584デフォルトの名無しさん:2006/12/10(日) 08:35:36
まとめサイトをac jpでナマズって自分の母校の奴を探して遊んでみた

いた
585デフォルトの名無しさん:2006/12/10(日) 10:26:01
>>570
/*めんどくさいので出力は適当。タブとかあると崩れる*/
/*例外処理は任せた*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUF 2048
int main(int argc, char *argv[]){
char line[BUF], *keyword, *pos;
int i, n = 0, flag, keylen;
FILE *fp = NULL;
keyword = argv[1];
keylen = strlen(keyword);
fp = fopen(argv[2], "r");
while(NULL != fgets(line, sizeof(line), fp)) {
n++;
flag = 0;
for (pos = line; NULL != (pos = strstr(pos, keyword)); pos += keylen) {
if(flag == 0) {
printf("%d:\t%s", n, line);
flag = 1;
}
putchar('\t');
for (i = 0; i < pos - line; i++)putchar('-');
puts("^");
}
}
return 0;
}
586デフォルトの名無しさん:2006/12/10(日) 11:50:27
>>564 お願いします。
587デフォルトの名無しさん:2006/12/10(日) 12:00:56
>>586
昨日の夜に質問して期限も15日までだからそう焦るな
588デフォルトの名無しさん:2006/12/10(日) 12:15:14
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

配列に格納されたデータをソートするプログラムを作成するにあたり、
以下の機能を持つ関数を作成しなさい。

乱数を生成し配列要素に格納する
 init_array(int *pa, int n)
配列要素を1行で画面に出力する
 output_array(int *pa, int n)
指定された2つアドレスのデータを交換する
 swap(int *x, int *y)

[3] 環境
 [3.1] OS:XP
 [3.2] visualstudio2003
 [3.3] C言語
[4] 期限: 12日まで
[5] その他の制限: 特に無し

よろしくお願いします
589デフォルトの名無しさん:2006/12/10(日) 12:30:26
void init_array(int *pa, int n){for(n--;n>=0;n--)pa[n]=rand();}
void output_array(int *pa, int n){for(n--;n>=0;n--)printf("%d ",pa[n]);
void swap(int *x, int *y){*x^=*y^*x^=*y;}
590デフォルトの名無しさん:2006/12/10(日) 13:17:30
>>589
>void swap(int *x, int *y){*x^=*y^*x^=*y;}
一つの式の中に同じ変数に対する副作用が複数あるので実行結果は未定義。
591デフォルトの名無しさん:2006/12/10(日) 13:43:21
誰か18スレと21スレのdat持ってる人いないかな
これだけどうしても手に入らない
592デフォルトの名無しさん:2006/12/10(日) 13:48:39
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
課題
HDRを作っている。
出来たばかりのUNIXのファイルシステムがある(NFS/XFS)。通常はファイルの
リストを取るには、"ls"コマンドを使う。現在ではファイルシステムが完成した
ばかりなので、これが無くて不便だ。そこで、
"ls"コマンドを作れ。
<参考>
まずはi-nodeについてよく調べてみること。特に、実際のUNIXシステムで、本当
に本に書いてある通りになっているかどうか、自分で確認すること。ls -iでな
にかはでてくるはず。これがスタートポイントでしょう。wikipediaよりは本を
見た方が良いかも。

他に、i-nodeリスト、物理ディスクと論理ディスク、パーティション、スーパーブロッ
ク、などがキーワードになるはず。c言語では、open()、close()、read()、
lseek()が関係するかも。なお、間接ブロックのことは考えなくてOKです。
[3] 環境
 [3.1] OS:Linux(UNIX)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:12月14日まで
[5] その他の制限: 特になし
ある程度の概念は理解できたのですが、プログラムの書き方がまったく分からない状態です
よろしくお願いします
593デフォルトの名無しさん:2006/12/10(日) 15:10:39
>>592
/*とりあえずファイル一覧を表示するプログラム*/
/*参考:http://www.wakhok.ac.jp/~maruyama/Syscall/inode/section3.5.html*/
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc,char *argv[]){
struct dirent *dir = NULL;
DIR *dp = NULL;

if(argc != 2){
printf("usage:\t%s [dir_path]\n",argv[0]);
return 1;
}
if(NULL == (dp = opendir(argv[1]))){
printf("cannot open \"%s\"\n",argv[1]);
return 1;
}
while(NULL != (dir = readdir(dp))){
printf("%s ",dir->d_name);
}
printf("\n");
closedir(dp);
return 0;
}
594デフォルトの名無しさん:2006/12/10(日) 15:59:23
>>593
>>592はopendir()のような高級なサーヴィスを使うのではなく、
直接ディレクトリをopen()してディレクトリエントリの情報を読む
ようなプログラムが想定されてる気がする。
たぶん。
595デフォルトの名無しさん:2006/12/10(日) 16:20:04
>>591
そういやずいぶん昔、まとめサイト作るっていってたやついたな
おまえか?
596デフォルトの名無しさん:2006/12/10(日) 16:29:21
>>595
作ってもいいよ みたいなことを言ったのはログ検索したら
20日前だった

だから別人かな?
597デフォルトの名無しさん:2006/12/10(日) 16:31:57
ノシ 作ると断言した記憶は無いが似たようなことを言った奴ならまだ見てるぞ
598デフォルトの名無しさん:2006/12/10(日) 16:46:53
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
ポインタを受け渡しする関数を用いて以下のプログラムを作成せよ
1 3人分の学籍番号、氏名(ローマ字)をそれぞれ配列に格納する。
  配列は1次元のchar型で宣言する。
2 画面に以下のメッセージを表示し、キーボードからの入力を待つ。
  (1)学籍番号を入力して下さい
  (2)終了する
3 選択した学籍番号に応じた氏名を画面に表示する。
4 2に戻り(2)を選択するまで処理を繰り返す。



[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C
[4] 期限: 12月15日
[5] その他の制限: 学籍番号と氏名は
 015:taro 037:ziro 054:hanakoでお願いします。
599592:2006/12/10(日) 16:57:37
>>594
講師の説明の感じだとopendir()をつかっても問題なかった気がします。
それと593さんありがとうございます。
600デフォルトの名無しさん:2006/12/10(日) 17:13:02
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
配列を使ってリングバッファを実装し、以下の操作を行った結果取り出された値を画面に出力しなさい。
1 を追加
2 を追加
3 を追加
4 を追加 (*)
取り出し
取り出し
5 を追加
6 を追加 (*)
7 を追加
取り出し
8 を追加
取り出し (*)
9 を追加
10 を追加
取り出し
取り出し (*)
取り出し
取り出し
取り出し
取り出し (*)
(終了)
また(*)がついた処理の後に、キューの表示を実行すること。
[3] 環境
 [3.1] OS:XP
 [3.2] visualstudio2003
 [3.3] C言語
[4] 期限: 12日まで
[5] その他の制限: 特に無し
よろしくお願いします
601デフォルトの名無しさん:2006/12/10(日) 17:38:51
これがまったくわかりません。
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):
チューリングマシンの動作をシミュレーションするプログラムを作成しなさい.
 以下の要件を示します.
1 チューリングマシンのプログラムを記述したファイル名とテープに与えるデータを引数とします.
2 チューリングマシンの途中の実行経過が分かるような出力をしなさい.

実行例
./a.out program.txt� 10_11_

プログラ ムファイル: program.txt
0 1 1 R 0
0 0 0 R 0
0 _ _ R 1
1 0 0 R 1
1 1 1 R 1
1 _ _ L 2
2 0 1 L 2
2 1 0 L 4
2 _ _ R 3
3 1 _ R 3
3 0 _ R 3
4 1 1 L 4
4 0 0 L 4
4 _ _ L 5
5 1 0 L 5
5 _ 1 R 0
5 0 1 R 0
602デフォルトの名無しさん:2006/12/10(日) 17:40:17
3] 環境
 [3.1] OS:MacOSX
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限: 来週中に。
よろしくお願いします。
603デフォルトの名無しさん:2006/12/10(日) 17:57:45
>>595-597
誰か Wiki でも立ててくれれば適当になんとかするんだが。
俺は管理する気がないのでやらん。
604デフォルトの名無しさん:2006/12/10(日) 18:00:46
>>601
チューリングマシンったって、人によって定義が違うこともある。
講義で示された定義を厳密にかいとくれ。
あと program.txt の仕様とテープの仕様も。
605デフォルトの名無しさん:2006/12/10(日) 18:08:04
>>603
Wikiの管理くらいならやってもいいが、
恥ずかしい日記を書いてるとこくらいしかスペースが余ってない
レンタルのWikiとかでもいいのか?
606デフォルトの名無しさん:2006/12/10(日) 18:08:59
atwikiとか
607デフォルトの名無しさん:2006/12/10(日) 18:25:28
>>605
レンタルで十分。やってくれるなら助かる。
608デフォルトの名無しさん:2006/12/10(日) 18:31:48
1] 授業単元: 計算力学
[2] 問題文(含コード&リンク):
 値をキーボードから入力して計算を実行し、
 変数iとjが15×15のマトリスク方程式を解くプログラムを作成せよ。
 右辺ベクトルは既知数とし、境界条件(ノイマン)を用いよ。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限 : 明日の朝8:00〆
[5] その他の制限:
出来れば、詳しい説明付きでお願いします><。。。
609デフォルトの名無しさん:2006/12/10(日) 18:49:28
>>608
問題文が全体的に意味不明。
出題されたとおりの問題をきちんと書き写すこと。
610デフォルトの名無しさん:2006/12/10(日) 19:07:47
>>607
http://www23.atwiki.jp/homework/
とりあえず作ってみた
ファイルのアップロードを除けばトップページを含めて全て編集可能なはず

かなり手抜きだからやって欲しいことがあれば言ってくれ
やるとは限らないけど
611デフォルトの名無しさん:2006/12/10(日) 19:12:11
>>610
612デフォルトの名無しさん:2006/12/10(日) 19:22:50
>>610
とりあえず乙。
どういう風に使うの?
613デフォルトの名無しさん:2006/12/10(日) 19:26:37
>>612
まとめサイト代わり?
考え無しで作ってしまった
614601:2006/12/10(日) 19:51:22
チューリングマシンの動作で

初期状態:
 ヘッドは,与えられたデータの先頭位置にいる
テープ上のデータの読み込み:
 テープ上のデータは1,内部状態は0であるので,プログラムの
1行目が該当する.
テープにデータを書き込む:
 プログラムの1行目で指定された値をテープに書き込む.
ヘッドの移動と内部状態の変更:
 プログラムの1行目で指定された方向(R)に移動.
 内部状態も,指定された値(0)に変更.
テープ上のデータの読み込み:
 テープ上のデータは0,内部状態は0であるので,プログラムの
2行目が該当する.
テープにデータを書き込む:
 プログラムの2行目で指定された値をテープに書き込む.
ヘッドの移動と内部状態の変更:
 プログラムの2行目で指定された方向(R)に移動.
 内部状態も,指定された値(0)に変更.
テープ上のデータの読み込み:
 テープ上のデータは_,内部状態は0であるので,プログラムの
3行目が該当する.
テープにデータを書き込む:
 プログラムの3行目で指定された値をテープに書き込む.
ヘッドの移動と内部状態の変更:
 プログラムの3行目で指定された方向(R)に移動.
 内部状態も,指定された値(1)に変更.

とかかれています。
615デフォルトの名無しさん:2006/12/10(日) 19:58:51
>>610
解決してない宿題のリストとか
解決した宿題の解説とか書く?誰かが
616デフォルトの名無しさん:2006/12/10(日) 20:04:33
既出の解答については wiki へのリンク貼るだけにするとか?

とすると、オレでも解けるレベルの問題が減るわけか…
617デフォルトの名無しさん:2006/12/10(日) 20:05:56
>>614
全然意味不明。人にわかってもらう気無いでしょ。
俺たちは君と同じ講義を取ってはいないんだよ?

たぶん君はきちんと説明できない人だろうから、
配布された資料またはノートの該当部を全部スキャンして
アップロードすれば誰かやるんじゃないかな。
618デフォルトの名無しさん:2006/12/10(日) 20:26:04
>>615
未解決のものはwikiに載せなくていいんじゃないかな
正直見にいくの面倒
質問者に解決済みリストを見にいくよう促すだけでいいと思う
619デフォルトの名無しさん:2006/12/10(日) 20:33:10
>>616
別解という手もある。
でも、少しずつ異なる解が大量に wiki にあふれる可能性もでてくるな
620デフォルトの名無しさん:2006/12/10(日) 20:34:33
全DATをHTML化して、googleに掘らせれば、それで十分だと思うけどねえ。。。
621デフォルトの名無しさん:2006/12/10(日) 20:35:29
例えば、素数ってカテゴリを作って、そこに素数関係を集めるとか?
622デフォルトの名無しさん:2006/12/10(日) 20:37:05
623デフォルトの名無しさん:2006/12/10(日) 21:05:48
配列に文字を入力し、その配列全て足し合わせ、文字と和をファイルに保存する
という問題で
1 charの配列に文字列を入力させる。
2 その配列の各 char値を加算する
3 1の文字列と2の結果をファイルに出力する

という感じの問題なのはりかいでき


#include <stdio.h>

int main(){
int x[100],i=0,j,sum=0;
while((x[i]=getchar())!='\n' && i<100)
i++;
for(j=0;j<i;j++)
sum+=x[j];
return 0;
}


単純に配列の中身をたしているだけの入力した文字コードの合計を求めるプログラムはつくれたのですがこの先どうしていいかわかりません
624デフォルトの名無しさん:2006/12/10(日) 21:22:50
>>623
自分でそこまでいけたならあと一息だ
625デフォルトの名無しさん:2006/12/10(日) 21:23:03
[1] 授業単元:情報処理W
[2] 問題文:数式(y=a*e^-bx+c)のyの値を求めよ。
  また数式とx軸に囲まれた決められた範囲の面積を求めよ。
[3] 環境
 [3.1] OS:Windows XP SP2
 [3.2] コンパイラ名とバージョン:Microsoft Visual C++
 [3.3] 言語:C言語
[4] 期限:2006年12月12日
[5] その他の制限:ここでのa,b,c,xの範囲 は入力して決めます。
 a=1,b=2,c=3,x=-5〜5 としてyの値と範囲の面積を求めました。
 囲まれた面積を台形と考え、0.1や0.01など刻みを入力して求めるようにしました。
 上記の入力ではない、数式とx軸が交わるときは誤差が大きくでてしまうので
 交わった前後を三角形として考えたいのですが、どうも上手くできません。
 よろしくお願いします。
626デフォルトの名無しさん:2006/12/10(日) 21:34:49
>>623
charの配列じゃないじゃん
627549:2006/12/10(日) 22:22:29
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3124.txt

上のをを色々と書き換えしてたのですが
実行するとファイルの中身が消去だったりセグメンテーション違反だったりでさっぱりです…
一応こういう風に書いてみたのですが…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3138.txt
これの訂正を誰かお願いします。
628デフォルトの名無しさん:2006/12/10(日) 22:37:19
>>610
ちょwww
俺も作ってたのにひどいお
ここ1週間くらいの苦労が…
629デフォルトの名無しさん:2006/12/10(日) 22:39:21
>>627
catはデフォルトで標準出力に出力するんじゃなかったっけ?
もしそうならfp2は常にstdout
630デフォルトの名無しさん:2006/12/10(日) 22:44:41
>>620
>>11がそんなんだな
検索エンジンはごぐる様じゃなくって
NAMAZUだけど
631デフォルトの名無しさん:2006/12/10(日) 22:49:20
>>628
他の人が作ってる可能性まで考慮してなかった ( ´・ω・`)
632デフォルトの名無しさん:2006/12/10(日) 22:49:21
利用する立場の人間から言えばまあ二つあってもいいんじゃねえの?
って感じだけどな
wikiは前にもあったけどそれは管理者しか更新できないよう設定してたので
管理者がやる気を失った途端更新されなくなってしまった
633デフォルトの名無しさん:2006/12/10(日) 22:50:50
>>632
同一の動作をさせたいのに二つ以上のパスが存在するのをそんなに頼もしく聞こえるとは・・・\(^o^)/
634デフォルトの名無しさん:2006/12/10(日) 23:00:03
>>633
出来てるものが同一じゃないからな

>>11のは単なる検索付きの過去ログ庫。
S/N比は非常に悪いがとりあえず今までの過去ログはほとんどあがってるから
後は誰かが働かなくてもそこそこ機能する

>>610のはwiki。
S/N比は過去ログ庫なんか問題じゃなく高い。
更新の手間とか荒らし対策くらいが難点か
635デフォルトの名無しさん:2006/12/10(日) 23:01:35
>>627
コマンドラインに送る文字列はなんて入れてる?
これってコマンドラインに - が含まれてると stdin stdout 指定
それ以外は ファイルを指定ってことだよね
入力と出力のファイルが同じなのはなぜ?
636627:2006/12/10(日) 23:21:53
>>635
試すための実行はひとまず ./a.out XXX.txt という感じでしていました

入力と出力のファイルが同じというか
そこをどう指定すれば良いかが分からなくて


if(strcmp(argv[n],"-")==0) {
fp2=stdout;
}
else if((fp2=fopen(argv[n],"w"))==NULL) {
fprintf(stderr,"エラー: ファイル %s をオープンできません。\n",argv[n]);
exit(1);
}

この部分がおかしいとは思うのですが…
637デフォルトの名無しさん:2006/12/10(日) 23:31:02
638デフォルトの名無しさん:2006/12/10(日) 23:35:02
>>636
stdinやstdoutをfcloseしたら問題あった気がする
639デフォルトの名無しさん:2006/12/10(日) 23:37:16
そうだっけ?
少なくともK&Rには問題ないって書いてあったような。
640デフォルトの名無しさん:2006/12/10(日) 23:53:01
>>639
試しに書いてみたけどfcloseしたら駄目みたい

#include <stdio.h>
int main()
{
FILE *fp = stdout;
fclose(fp);
if(fprintf(fp, "%s", "a") < 0)
fprintf(stderr, "error");
return 0;
}
641デフォルトの名無しさん:2006/12/10(日) 23:56:29
fcloseした後で使ったらそりゃダメに決まってるだろ
100年ROMってろカス
642デフォルトの名無しさん:2006/12/10(日) 23:59:10
>>641
>>636というか>>627でfcloseしちゃってるから書いただけ
643デフォルトの名無しさん:2006/12/11(月) 00:01:39
標準入出力をfcloseするのが問題あるかどうかは知らんがfcloseした後のストリームを使うのはまずいっぽいとは思う。
644デフォルトの名無しさん:2006/12/11(月) 00:05:19
>642
オマエはどうしようもないカスだな
もう一度良く読んでそれでも理解出来ないのなら200年ROMってろ
645635:2006/12/11(月) 00:07:01
>>636
ためしに書いてみた
ただ入力がstdinってのがおかしく思ったので入力は常にファイルからで複数指定可
出力はファイル名の前に - を付けるとそのファイルが出力先になる
ただし - 指定は最初にコマンドラインに現れたファイル一つのみ
以降の - つきファイルは無視
指定なしはstdoutへ
ソース↓
http://sa-wiki.com/upload/src/up0072.txt
ちょっとどきどき
646デフォルトの名無しさん:2006/12/11(月) 00:08:00
>>645
>オンラインゲーム「ストーンエイジ」のWikiです。
ちょwwwww
647デフォルトの名無しさん:2006/12/11(月) 00:08:28
ごめん、書き方が悪かったな
言いたかったのは>>643と同じ
実際>>627のソースではfcloseした後に使う可能性あるから
648635:2006/12/11(月) 00:10:24
>>636
ミスった
2つめのfor文の
printf("読み込みファイルオープン %s\n",(char*)(argv[n]+1));
これを
printf("入力ファイルオープン %s\n",argv[n]);
に変えといて
649デフォルトの名無しさん:2006/12/11(月) 00:10:44
[1] 授業単元: コンピュータ概論
[2] 問題文(含コード&リンク):
  演習
  文字列(10文字まで)を入力して、逆順に表示するプログラムを作成せよ。
  10文字に満たない場合は、何文字目に\0があるかを調べて、そこから表示する。
  (strlen関数は使わないこと)
  入力(scanf)のときは%sを使うこと
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:明日
[5]その他の制限:どうしても前にスペースができたりします。よろしくお願いします。
650デフォルトの名無しさん:2006/12/11(月) 00:13:37
逆順大ブームだな
651デフォルトの名無しさん:2006/12/11(月) 00:14:18
>>645
たぶん違う
cat a.txt - b.txt
を実行したら、
a.txtの中身を表示->標準入力から入力->b.txtの中身を表示
だと思う
652デフォルトの名無しさん:2006/12/11(月) 00:16:21
>>649

10文字までって決まってるなら
「10−配列番号」すれば逆順になるだろ
653デフォルトの名無しさん:2006/12/11(月) 00:17:59
「まとめサイト」を名乗るからには全スレのdatがないことには意味が
薄いと思う。でないとそもそも他に存在して欲しくなくて排除したいのか
と勘ぐってしまうな。
654635:2006/12/11(月) 00:20:01
2つ目のミス
最初の(書き込み用ファイルのオープン)
if((fp2=fopen((char*)(argv[n]+1),"a"))==NULL)
モード a を
if((fp2=fopen((char*)(argv[n]+1),"w"))==NULL)
モード w にしといて

訂正版
http://sa-wiki.com/upload/src/up0073.txt

>>651
詳しく
>標準入力から入力
何を入力?この入力はどこへ行くの?そもそも>>636が何をしたいのかよく分からんかった
入力したものを出力先にどんどん追加していけばいいのかと思ったんだけど
違ったかな?
655デフォルトの名無しさん:2006/12/11(月) 00:25:29
datを提供してるまとめサイトって見たこと無いな
dumperとか2chミラー系ならやってるけど
656デフォルトの名無しさん:2006/12/11(月) 00:28:05
>>649

どうやらソース作ってるみたいだから、見してくれよ!
それ見て直したげるわ
657デフォルトの名無しさん:2006/12/11(月) 00:33:02
>>654
基本的には引数で与えられたファイルの中身を表示(標準出力に出力)
ファイル出力機能はなし
-(ハイフン)だった場合は標準入力から入力した(通常はキーボードで打ち込んだ)ものを表示(エコーのような動作)

我ながら説明下手だなorz
658デフォルトの名無しさん:2006/12/11(月) 00:36:04
>>656
#include<stdio.h>
main(void){
char name[10];
int i;
printf("Input your name:");
for(i=0; i--;){
scanf("%c",name[i]);
}
for(i=0; i--;){
printf("%c",name[i]);
}
}
学校のPCにデータ残してしまって、こんな感じだったのですが・・・
すみません><
一応学校での授業のURL貼っておきます
ttp://wadatsumi.ipc.musashi-tech.ac.jp/~yasui/compsys/webpp/10th.files/frame.html
659569:2006/12/11(月) 00:36:51
>>575
どうもありがとうです。早速、明日試してみます。
660デフォルトの名無しさん:2006/12/11(月) 00:37:57
>char name[10];
アッー!
661デフォルトの名無しさん:2006/12/11(月) 00:38:12
>>658
安井博士に通報しといた。
662デフォルトの名無しさん:2006/12/11(月) 00:42:19
>>654
どうも。サンクスです
663635:2006/12/11(月) 00:42:42
>>657
あーエコーね
しかしそれなら出力先に入力ファイルと同じもの指定してるのおかしいよな
最初っから fputc(c,stdout);で良かったんだろうに
>>636の書いてみたソースを見ると入力先、出力先をオプションで指定できるみたいな仕様にしたいのかと思った


>>658
>for(i=0; i--;){
何もせずに終了する予感

664635:2006/12/11(月) 00:43:59
>>662
えと…どちらさまで?
665デフォルトの名無しさん:2006/12/11(月) 00:44:52
>>658 文字列苦手な俺がやってみまつたよ
#include <stdio.h>
#define MAX 10

int main() {
int i,j;
char a[MAX+1]="";

printf("%d文字以内の文字を入力して下さい > ",MAX);
scanf("%s",a);
for(i=0; (i<MAX && a[i]!='\0'); i++);
for(j=i-1; j>=0; j--) printf("%c",a[j]);

return 0;
}
666デフォルトの名無しさん:2006/12/11(月) 00:46:01
>>664
宿題解答の依頼をした者です。すみません。
667デフォルトの名無しさん:2006/12/11(月) 00:47:44
>>638
stdin/out/err はプログラム終了時及び exit() でクローズされるから、
先にクローズすると問題が有るかも知れない。
でもまぁプログラムが終了した後の話だから目に見える問題は無いと思う。
668635:2006/12/11(月) 00:50:02
>>666
名前出してよ
で、文意はいかがなもの?
入力したものを出力にどんどん追加していくって物じゃないの?
俺のソースが目的と違う結果なら…
669666:2006/12/11(月) 00:55:31
catコマンドを作成せよ (fgetc、fputcを用いてみる) というものなので
>>657に書いてある説明がとても有っているものだとと思いました
670635:2006/12/11(月) 01:00:28
>>669
できれば宿題解答の依頼の最初の番号のほうが良かったが

たとえば a.txt - b.txt とした場合
a.txtはファイル入力をそのままstdoutに表示
次のだけど - はstdin からってことだけど stdin の入力の終了はどう判断するの
何かしらの判断が無いと 次の b.txt にいけないけど
それとも CTRL+Zで入力終了とするとか?
671666:2006/12/11(月) 01:02:15
プログラムはctrl+で終了です。 色々と説明不足ですみません。
672635:2006/12/11(月) 01:02:43
>>669
あーゴメン、なってたね
CTRL+Zで終了

んじゃちょっくら行って来るさー
673デフォルトの名無しさん:2006/12/11(月) 01:06:47
>>665
ありがとうございます><
674635:2006/12/11(月) 01:12:25
>>669
いやいやすまん
一番聞かなきゃいけないこと忘れてた
>>627の下のコードの場合ファイルが指定されてた場合出力もファイルになってたわけだがファイルに出力という動作も必要なのか?
すべてstdoutに出力…と言うわけじゃないのね?
それともstdinはstdoutでファイル入力はファイル出力でっていうまぁエコー(?)的な動作を望んでるのかな?
675666:2006/12/11(月) 01:22:25
詳しく言えなくて申し訳ないです。
catコマンドを作れ と言われていただけなので
指定したファイルの中身を表示(すべて標準出力に出力)でファイル出力機能はなし
で良いです。
676635:2006/12/11(月) 01:28:49
>>675
そか、ちょっとそれでは簡単すぎだよー

http://sa-wiki.com/upload/src/up0074.txt
キミのソースの出力をすべてstdoutに変更しただけ
677666:2006/12/11(月) 01:31:54
>>676
どうも。さんクスです
勉強不足で色々迷走してました…
678デフォルトの名無しさん:2006/12/11(月) 01:41:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
自己参照型構造体(リスト)を使ってスタックを実装し、以下の操作を行った結果取り出された値を画面に出力しなさい。
1 を追加
2 を追加
3 を追加
4 を追加
取り出し
取り出し
5 を追加
6 を追加
7 を追加
取り出し
8 を追加
取り出し
9 を追加
10 を追加
取り出し
取り出し
取り出し
取り出し
取り出し
取り出し
(終了)
[3] 環境
 [3.1] OS:XP
 [3.2] visualstudio2003
 [3.3] C言語
[4] 期限: 12日まで
[5] その他の制限: 特に無し

よろしくお願いします
679デフォルトの名無しさん:2006/12/11(月) 01:43:50
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

ポインタによる疑似間接参照
要素数が10のint型の配列に
キーボードから数値を入力する関数を作成し
(main関数の中で)呼び出しなさい。

配列はmain関数の中で宣言し、
入力の関数には配列のアドレスを引数で与えること。

【ヒント】 void input(int *p)

[3] 環境
 [3.1] OS:windowsXP
 [3.2] visualstudio2003
 [3.3] C言語
[4] 期限: 明日まで
[5] その他の制限: なし
よろしくお願いします。

680デフォルトの名無しさん:2006/12/11(月) 01:45:57
>>600か?
681デフォルトの名無しさん:2006/12/11(月) 01:49:35
>>600とは別の問題です。
682635:2006/12/11(月) 01:56:35
>>677
どういたしまして
久々に燃えたよw
まぁがんばってね
683デフォルトの名無しさん:2006/12/11(月) 02:22:11
あの、すごく初歩的なことで申し訳ないのですが、
Cのプログラムをbcc32でコンパイルしようとしたら
「インクルードファイル'stdio.h'がオープンできない」
と出てきてしまいました。
クラスパスの設定もしてあるし、原因が分かりません。
誰か教えてください。
684デフォルトの名無しさん:2006/12/11(月) 02:28:13
マルチ
685デフォルトの名無しさん:2006/12/11(月) 02:30:50
>>683
たらい回しで悪いけど
http://pc8.2ch.net/test/read.cgi/tech/1135127048/
ここの担当じゃね?


って思ったら>>684
686デフォルトの名無しさん:2006/12/11(月) 02:49:38
>>679
#include <stdio.h>

void input(int *p);

int main(void) {
int data[10];
input(data);

return 0;
}

void input(int *p) {
int i;
for (i = 0; i < 10; i++) {
scanf("%d", p);
p++;
}
}
687デフォルトの名無しさん:2006/12/11(月) 02:56:19
>>678
#include <stdio.h>

void main(void) {
printf("4, 3, 7, 8, 10, 9, 6, 5, 2, 1");
}
688デフォルトの名無しさん:2006/12/11(月) 03:01:03
>>678
#include<stdio.h>
#include<stdlib.h>
typedef int STACK_TYPE;
#define STACK_TYPE_SPECIFIER "%d"
typedef struct stack_impl_tag {
    struct stack_impl_tag *prev;
    STACK_TYPE data;
} StackImpl;
typedef struct stack_tag { StackImpl* ptr; } Stack;
int StackPushImpl(Stack *s, STACK_TYPE x) {
    if (s->ptr) {
        StackImpl *temp;
        if (!(temp = (StackImpl*)malloc(sizeof(StackImpl)))) return 0;
        temp->prev = s->ptr; s->ptr = temp;
    } else {
        if (!(s->ptr = (StackImpl*)malloc(sizeof(StackImpl)))) return 0;
        s->ptr->prev = NULL;
    }
    s->ptr->data = x;
    return 1;
}
int StackPush(Stack *s, STACK_TYPE x) {
    if (StackPushImpl(s, x)) return 1;
    else {
        printf("スタックへのプッシュに失敗しました.");
        return 0;
    }
}
int StackPop(Stack *s, STACK_TYPE *x) {
    StackImpl *temp;
    if (!s->ptr) {
689デフォルトの名無しさん:2006/12/11(月) 03:02:34
690デフォルトの名無しさん:2006/12/11(月) 03:03:01
>>678
        printf("ポップできません.\n");
        return 0;
    }
    *x = s->ptr->data; temp = s->ptr->prev;
    free(s->ptr);
    if (temp) s->ptr = temp; else s->ptr = NULL;
    printf("ポップしたデータは"STACK_TYPE_SPECIFIER"です.\n", *x);
    return 1;
}
void StackInit(Stack *s) { s->ptr = NULL; }
void StackFree(Stack *s) {
    StackImpl *t1, *t2 = s->ptr;
    while ((t1 = t2) != NULL) {
        t2 = t1->prev;
        free(t1);
    }
}
int main(void) {
    Stack s;
    STACK_TYPE x;
    StackInit(&s);
    StackPush(&s, 1); StackPush(&s, 2); StackPush(&s, 3); StackPush(&s, 4); StackPop(&s, &x); StackPop(&s, &x); StackPush(&s, 5);
    StackPush(&s, 6); StackPush(&s, 7); StackPop(&s, &x); StackPush(&s, 8); StackPop(&s, &x); StackPush(&s, 9); StackPush(&s, 10);
    StackPop(&s, &x); StackPop(&s, &x); StackPop(&s, &x); StackPop(&s, &x); StackPop(&s, &x); StackPop(&s, &x);
    StackFree(&s);
    return 0;
}
以上。見栄えが悪くなるので、表示とメッセージをPush, Popの中で行うという
暴挙に出ている。が、気にする必要はない。
691デフォルトの名無しさん:2006/12/11(月) 11:47:13
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

自分のウェブサイトへの訪問者を数えて人数を出力するカウンタを作成する場合を考える。
変数はFILE *fpのほか、 int countなど必要と思われるものを用意すること。
人数を格納するファイルは「count.txt」とする。
プログラム(CGI)が実行されると次のような処理を行うと考えられる。

人数を格納しているファイルを開く。(fopen)
うまくファイルが開けた場合
ファイルから人数を読み取り、変数countに格納する。
countを1つ増やす。
countの内容を使って、標準出力にメッセージを出力する。
例)「あなたは○○人目のお客様です」
ファイルに、新しい人数を書き込む。
ファイルを閉じる。(fclose)

【ヒント】
新しい人数を書き込む前に、ひとつ処理が必要です。

[3] 環境
 [3.1] OS:windowsXP
 [3.2] visualstudio2003
 [3.3] C言語
[4] 期限: 明日まで
[5] その他の制限: なし
よろしくお願いします。
692デフォルトの名無しさん:2006/12/11(月) 11:50:13
>>691
fseek
693デフォルトの名無しさん:2006/12/11(月) 12:05:49
>>692
flock,かlockfでファイルをロックすることではないだろうか。
694デフォルトの名無しさん:2006/12/11(月) 12:16:56
ロックするなら読み込む前だろう
695デフォルトの名無しさん:2006/12/11(月) 12:18:54
>>693
そのタイミングで排他しても役には立たん。"r+"でfopen()することを
想定しているだろうから、>>692が正解。
↓のような感じで(ここではfseek()ではなくrewind()を使っている)

#include <stdio.h>

#define COUNTER "count.txt"
int main()
{
    FILE *fp;
    int count = 0;

    /* 本当は排他すべき */
    if ((fp = fopen(COUNTER, "r+")) == NULL) {
        if ((fp = fopen(COUNTER, "w+")) == NULL) {
            perror(COUNTER);
            exit(2);
        }
    } else {
        fread(&count, sizeof(count), 1, fp);
    }
    ++count;
    printf("あなたは%d人目のお客様です\n", count);
    rewind(fp);
    fwrite(&count, sizeof(count), 1, fp);
    fclose(fp);
    return 0;
}
696デフォルトの名無しさん:2006/12/11(月) 13:07:51
>>691です
695の解答なんですけど、↓の
ファイルに、新しい人数を書き込む。
という処理がないです。
697デフォルトの名無しさん:2006/12/11(月) 13:09:30
すみません、自分の勘違いでした。
698デフォルトの名無しさん:2006/12/11(月) 13:14:34
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク

分割コンパイル
引数として受け取ったint型の数値nについて、

1からnまでの総和を計算して返す関数
int sum(int n)
nの階乗を計算して返す関数
int fact(int n)
を作成しなさい。

ただし、main関数を記述するファイルとは別のファイルに作成すること。

[3] 環境
 [3.1] OS:XP
 [3.2] visualstudio
 [3.3] C言語
[4] 期限: 13日まで
[5] その他の制限: 特に無し

よろしくお願いします
699デフォルトの名無しさん:2006/12/11(月) 13:26:49
>>698
int sum(int n){return n==0?0:n+sum(n-1);}
int fact(int n){return n==0?1:n*fact(n-1);}
700デフォルトの名無しさん:2006/12/11(月) 13:48:01
>>698
分散コンパイルというからには、distccとか使うのかとおもたよ。
701Avi ◆BER2jLqI72 :2006/12/11(月) 14:05:38
[1] 授業単元:情報実験第2
[2] 問題文(含コード&リンク):短期メモリを用いたタブー検索により、トラベリングセールスマン問題を解くアルゴリズムを設計・実装し、近傍、タブーリストをどのように定義し、パラーメータ調整したかを説明せよ。
また、http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/tsp/
にある、gr21,gr48,kroA100を含む実験データを利用すること。
[3] 環境
 [3.1] OS: Vine Linux 3.2
 [3.2] コンパイラ名とバージョン:gcc version不明
 [3.3] 言語: C
[4] 期限: [2006年12月22日まで]
[5] その他の制限: タブー探索について以下の要素を必須とし、設定を説明すること。
近傍、評価値、タブー制約、タブーリストのサイズ、終了条件。
702Avi ◆BER2jLqI72 :2006/12/11(月) 14:09:45
>>701追記
どうかお願いします。あと、期限は一週間前くらいに変更して下さい。
703デフォルトの名無しさん:2006/12/11(月) 14:59:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3144.txt 元のプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3145.txt 問題文
[3] 環境
 [3.1] OS:XP
 [3.2] visualstudio
 [3.3] C言語
[4] 期限: 13日まで
[5] その他の制限: 特に無し

よろしくお願いします
704デフォルトの名無しさん:2006/12/11(月) 15:02:10
>>703
>>698さんですか
705りん:2006/12/11(月) 15:09:06
はじめまして。大学でC言語を学んでるものなんですが学校で課題がでて
いろいろと教えてもらってプログラムの方はできたのですが、自分では
まだよく理解できていません。誰かわかる人がいればソースの説明をして
いただけないでしょうか?プログラムは別でのせます。
706デフォルトの名無しさん:2006/12/11(月) 15:12:35
703です

>>704 そうです。
707りん:2006/12/11(月) 15:13:20
#include <stdio.h>
#include <string.h>
#define TANGOSU 30
#define MOJISU 20
int main(void)
{
int i;int tango_index;int count;
char buffer[TANGOSU * MOJISU];char splitted[TANGOSU][MOJISU]; char* p;
printf("Please enter a statement: "); gets(buffer);
p = buffer; tango_index = 0; count = 1;
do { p++;
if (' ' == *p || '\0' == *p)
{
strncpy(splitted[tango_index], "", MOJISU); strncpy(splitted[tango_index], p - count, count);
tango_index++; count = 0;}
else
{ count++; }
} while('\0' != *p);
printf("Total %d words. Each words contains;\n", tango_index);
for (i = 0; i < tango_index; ++i)
{
printf("%s: %d letters.\n", splitted[i], strlen(splitted[i]));
}
return 0;
}
708デフォルトの名無しさん:2006/12/11(月) 15:15:04
>>705
とりあえずソースを見せてもらおうか。
709デフォルトの名無しさん:2006/12/11(月) 15:15:33
>>707
分かるところまではコメントをつけろ。
710デフォルトの名無しさん:2006/12/11(月) 15:16:57
ごめん遅れた。
確かにコメントがあればいいね。
勘違いしてれば指摘もしやすいし。
71189:2006/12/11(月) 15:19:56
>>707
ちょwwwそれ俺のコードwwww
同じ大学の中で出回ってる?wwww
712デフォルトの名無しさん:2006/12/11(月) 15:24:16
>いろいろと教えてもらってプログラムの方はできたのですが
>いろいろと教えてもらってプログラムの方はできたのですが
>いろいろと教えてもらってプログラムの方はできたのですが
>いろいろと教えてもらってプログラムの方はできたのですが
>いろいろと教えてもらってプログラムの方はできたのですが
713デフォルトの名無しさん:2006/12/11(月) 15:24:58
>>711
カワイソス
714デフォルトの名無しさん:2006/12/11(月) 15:26:58
元々の質問も他スレか一般サイトへのマルチポストのようだし
DQNのまわりもDQNか
715711:2006/12/11(月) 15:29:44
>>713
質問スレに張ったんだし、別にいいんだけどね(^^;
なんかワロタwwww

しまった、GPLにしとけばよかったなw
716デフォルトの名無しさん:2006/12/11(月) 15:33:15
自分も彼女のためにソース(JAVAだけど)書いたことあるんだけど、
彼女が学校の友達にあげたらそれが出回っちゃって。
チューターも出回ってることに気付いて、結局彼女がそれを提出できなくなった事がある。
リファクタリングしたり変数増やして冗長にしてやった。
717デフォルトの名無しさん:2006/12/11(月) 15:33:27
初期のBSDライセンスもいいかもなw
718デフォルトの名無しさん:2006/12/11(月) 15:37:28
画像のRGB全ピクセル表示ってどうやるんでしょう?
719デフォルトの名無しさん:2006/12/11(月) 15:44:14
スレタイ読めないのか?
720デフォルトの名無しさん:2006/12/11(月) 15:45:42
>>705
まぁでも理解しようとするだけでもえらいね。
或る程度コメントつけたら書き込んでね。
721デフォルトの名無しさん:2006/12/11(月) 16:08:15
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):bmp画像をばらばらにする
               全ピクセルのRGB情報を取得し、表示する
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2006年12月15日12:00まで
[5] その他の制限: 標準、OpenCVライブラリは使用可です

よろしくお願いします
722デフォルトの名無しさん:2006/12/11(月) 16:11:50
>>721
問題文それだけ?
723デフォルトの名無しさん:2006/12/11(月) 16:11:51
かみはばらばらになった
724デフォルトの名無しさん:2006/12/11(月) 16:15:18
ばらばらってどういうこった
725デフォルトの名無しさん:2006/12/11(月) 16:24:23
>>724
俺のエスパー能力ではm×nピクセルの画像を
m×n個の1ピクセルの画像にするのではないかという
気がしている
726デフォルトの名無しさん:2006/12/11(月) 16:25:17
>>721
さすがに学校はそんな文章で課題は出さないだろ。
出されたまんまのせろよ。
君が自分の言葉で書いたんだろ?
誰も理解してないぞ?


・・・もしそのまんまの文なら学校名がききたい。
727デフォルトの名無しさん:2006/12/11(月) 16:25:30
すみません。
ばらばらとはピクセルごとの情報を取り出したいと言う事です。
よろしくお願いします
728デフォルトの名無しさん:2006/12/11(月) 16:26:13
パズルのようにバラバラにするんだろ
729デフォルトの名無しさん:2006/12/11(月) 16:26:58
ピクセルごとの情報とは?
730デフォルトの名無しさん:2006/12/11(月) 16:28:13
>>726
うちの学校の離散数学のプリントは片言だったりするぞ


作ってるのが日本人じゃないから…
731デフォルトの名無しさん:2006/12/11(月) 16:29:14
追加
口頭でしたので、
ばらばらにするということと、
ピクセルごとの情報を取り出して表示するということを
ノートに走り書きしておりました;;
732デフォルトの名無しさん:2006/12/11(月) 16:30:57
>>731
問題出した奴にきいてこい
733デフォルトの名無しさん:2006/12/11(月) 16:32:56
>>729
左上の(1,1)から走査して(1,1)(1,2)・・・という
それぞれピクセルの色情報を取得することだと自分で捉えております。
734デフォルトの名無しさん:2006/12/11(月) 16:34:02
>RGB情報を取得し、表示する
どう表示するの?
  R:G:B = 137:215:191
  R:G:B = 17:155:112
  R:G:B = 201:65:106
      ・
      ・
とでも表示するの?
735デフォルトの名無しさん:2006/12/11(月) 16:34:08
左上は1,1ではない
736デフォルトの名無しさん:2006/12/11(月) 16:35:12
言うとおりに作る

すみません 条件が間違えていました!
737デフォルトの名無しさん:2006/12/11(月) 16:36:11
もう質問を却下って事でいいんじゃないかな。
また後だしされてはかなわんよ。
738デフォルトの名無しさん:2006/12/11(月) 16:36:59
ビットマップの種類は?
739デフォルトの名無しさん:2006/12/11(月) 16:38:52
・次の共用体のメンバーc[3]が示す値を答えなさい。
union {
shorta[4];
charb[80];
intc[8];
doubled[2];
} u ;

<メモリダンプ>
0000 0000 00 01 05 0A 08 0F BC 7F 94 02 00 0B 04 02 11 23
0000 0010 01 02 03 55 BA 2F 45 BB AD 23 11 45 00 00 00 00
0000 0020 11 22 33 55 EE FF FF BC 23 01 45 67 FE 00 02 01
0000 0030 00 01 05 0A 08 0F BC 7F 94 02 00 0B 04 02 11 23
0000 0040 01 02 03 55 BA 2F 45 BB AD 23 11 45 00 00 00 00
                :

すいません、回答お願い致します。
出来れば解説もして頂けると助かります。

740デフォルトの名無しさん:2006/12/11(月) 16:40:59
>>739
>>1を読めと何度くりかえさせるんだ
741デフォルトの名無しさん:2006/12/11(月) 16:42:34
(0,0)ですね;;すみません
>>734
まさしくそれです!
a(0,0) = RGB(100,100,100);
a(0,1) = RGB(100,100,100);
     ・
     ・
のように表示したいです
742デフォルトの名無しさん:2006/12/11(月) 16:55:07
そのビットマップって1ピクセル4バイトのやつ?
R = (pixel>>16)&0xFF;
G = (pixel>>8)&0xFF;
B = pixel&0xFF;
RGB情報の取り出しはこれでいいの?
743デフォルトの名無しさん:2006/12/11(月) 16:56:22
OpenCV使えって事だろ
744デフォルトの名無しさん:2006/12/11(月) 16:59:09
あら、使用不可に見えてた。
なんだ。じゃあOpenCV使え。
745デフォルトの名無しさん:2006/12/11(月) 17:09:24
??
使えと言われても;;
746デフォルトの名無しさん:2006/12/11(月) 17:11:22
以後放置で
747デフォルトの名無しさん:2006/12/11(月) 17:23:50
何で放置なんだろう。
748デフォルトの名無しさん:2006/12/11(月) 17:28:07
ここまで聞けば解けそうじゃない?
749デフォルトの名無しさん:2006/12/11(月) 17:45:51
[1] 授業単元: C言語講座
[2] 問題文(含コード&リンク):
最大10000行かつ1行が最大255文字のテキストファイルがあると
する。ファイルの内容を1行ずつ読み込んで格納し、各行を辞書式順序に
並べ替えた後、出力するプログラムを作成せよ。プログラムは以下の関数
によって構成せよ。
1.main関数
2.指定されたファイルの内容をすべて読み込む関数。ただし関数の返り値
  は読み込んだデータの行数(int)とし、文字列データを格納するための
メモリ領域は動的に確保すること。
3.データを順に表示する関数。
4.2つの文字列へのポインタに対して、それらの値を入れ替える関数。
5.文字列データのソートを行う関数。ソートにはバブルソートを用い、
文字列の比較にはstrcmp関数を用いること。
6.文字列データを格納するために確保したメモリ領域をすべて解放する
関数。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日の朝11時00分までです。
[5] その他の制限:
問題にも書いてありますが、
問題で示した6つの関数によって構成する。
ソートにはバブルソートを用いる。 
文字列の比較にはstrcmpを用いる。
大域変数は使用禁止。

よろしくお願いします。  
750デフォルトの名無しさん:2006/12/11(月) 17:49:39
ぜんぜん分かりません;;
OpenCV備え付けのメソッドにあるんですか?;;
751デフォルトの名無しさん:2006/12/11(月) 17:54:36
あります
getとか名前のついてるものを調べるといい
752デフォルトの名無しさん:2006/12/11(月) 18:14:09
何の義理もないから別にどうでもいいが。
最初の書き込みでOpenCVがヒントにかかれてたんだから
使うことくらいは分かってたんだろう。
それに、「OpenCV使え」って言って十分だろうとか、うーむ?
753デフォルトの名無しさん:2006/12/11(月) 18:16:36
>752
うーむ?とか言ってないでてめーがなんとかしろよ、屑が
754748:2006/12/11(月) 18:30:19
>>721を読んでも作るべきものがよくわからなかったけど、
ここまで聞けば大体分かったから放置しないで解いてあげてもいいんじゃない?
って意味です。なんか勘違いされてそうな気がしたんで一応。
755デフォルトの名無しさん:2006/12/11(月) 18:32:13
[1] 授業単元:プログラミング
[2] 問題文:
西暦1900年から2500年までのうるう年を全て表示するプログラムを作成せよ。
ここでは、西暦を引数としてその年がうるう年であるかを判定する関数を用いよ。

うるう年の定義を以下に記す。
・4で割り切れない年はうるう年ではない
・4で割り切れる場合に、100で割り切れない年はうるう年
・4で割り切れてかつ100でも割り切れる場合に、さらに400でも割り切れればうるう年
・4で割り切れてかつ100でも割り切れる場合に、400で割り切れなければうるう年ではない

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2006年12月12日
[5] その他の制限: ポインタはまだ習っていません。関数だけでお願い致します。
756デフォルトの名無しさん:2006/12/11(月) 18:44:47
>>750
よく見たらIPLが入ってるとは書いてないな
http://chihara.naist.jp/people/2004/kenta-t/OpenCV/pukiwiki/index.php?RGBTRIPLE
757デフォルトの名無しさん:2006/12/11(月) 18:56:02
>>755
まずはぐぐれ話はそれからだ
758デフォルトの名無しさん:2006/12/11(月) 18:59:49
>>721
環境無いからコンパイルできないが。試してみておくれよ

#include <stdio.h>
#include <cv.h>

int main(int argc, char *argv[])
{
int i, j;
IplImage* src;
int sbpp = ((src->depth & 255)/8) * src->nChannels;

src = cvLoadImage(argv[1]);

for (i = 0; i < src->height; i++) {
unsigned char *rgb = (unsigned char*)src->imageData + (y * src->widthStep);
for (j = 0; j < src->width; j++) {
printf("x,y(%d,%d) = RGB(%d,%d,%d)\n", rgb[2], rgb[1], rgb[0]);
s += sbpp;
}

return 0;
}
759デフォルトの名無しさん:2006/12/11(月) 19:02:11
検索しても判定プログラムはたくさんあるのですが、すべてを表示するプログラムがなかったです・・・
760デフォルトの名無しさん:2006/12/11(月) 19:04:24
jとiが無いようだが・・・
761デフォルトの名無しさん:2006/12/11(月) 19:06:17
>>759
うるう年の奴か?
範囲出されてるんやから1年ごと判定せいや
762758:2006/12/11(月) 19:08:58
おっと・・・全然ダメですな。コピペが祟ったな

#include <stdio.h>
#include <cv.h>

int main(int argc, char *argv[])
{
int i, j;
IplImage* src;
int sbpp = ((src->depth & 255)/8) * src->nChannels;

src = cvLoadImage(argv[1]);

for (i = 0; i < src->height; i++) {
unsigned char *rgb = (unsigned char*)src->imageData + (i * src->widthStep);
for (j = 0; j < src->width; j++) {
printf("x,y(%d,%d) = RGB(%d,%d,%d)\n", j, i, rgb[2], rgb[1], rgb[0]);
s += sbpp;
}

return 0;
}
763デフォルトの名無しさん:2006/12/11(月) 19:12:01
>>762
ちょっと気になったんだが、間違ってたらゴメン
>int sbpp = ((src->depth & 255)/8) * src->nChannels;
>src = cvLoadImage(argv[1]);
イメージロードする前に src->depth と src->nChannels を使うのはいいのか?
764デフォルトの名無しさん:2006/12/11(月) 19:14:50
>>763
いや明らかにダメだろw
普通にsegvるはず
765デフォルトの名無しさん:2006/12/11(月) 19:15:02
無理だおorz
ああコンパイルしてえ。
766デフォルトの名無しさん:2006/12/11(月) 19:29:06
コンパイルがダメならリンクをすればいいじゃない
767デフォルトの名無しさん:2006/12/11(月) 19:43:56
[1] 授業単元:Cプログラミング
[2] 問題文:
変数valueの12ビット目〜15ビット目(4ビット)をチェック(ビットテスト)して、
ゼロであれば上位2バイトに1を代入、ゼロ以外であれば、2を代入する文を示しなさい。
(32bitのデータです)
intvalue;
[3] 環境
[3.1] OS: (Windows)
 [3.2] bcc
 [3.3] C言語
 [4] 期限: 明日まで
[5] その他の制限: (ビットフィールドを使用して作成する)

すみません、宜しくお願い致します。
768デフォルトの名無しさん:2006/12/11(月) 19:48:48
>>764-765
だよな…他から指摘が無いからいいのかと思ったよ
サンクス
769デフォルトの名無しさん:2006/12/11(月) 19:54:56
770デフォルトの名無しさん:2006/12/11(月) 21:03:39
771770:2006/12/11(月) 21:05:03
>>767
if( p->n4Bits )

if( p->n4Bits == 0 )
772767:2006/12/11(月) 21:13:13
>>770
有難うございます。これから内容をじっくり見てみます!
773767:2006/12/11(月) 21:22:40
何度もすみません。767の問題なのですが、ビットフィールドを使わずに
処理する場合はどういう風になるでしょうか。
上位2バイトが1になるということは16ビット分全部1という事なのでしょうか。
宜しくお願い致します。
774デフォルトの名無しさん:2006/12/11(月) 21:31:21
775767:2006/12/11(月) 22:20:50
>>774
どうもありがとうございます!!
776749:2006/12/11(月) 22:49:32
すいませんが、どなたか解答頂けないでしょうか?
777デフォルトの名無しさん:2006/12/11(月) 22:50:07
>>739
union はデータの先頭を各メンバに割り当てる。
int が 4Byte であると仮定すると c[3] は 0x04021123 が該当する。
ちなみに union のサイズはメンバ中の最大サイズにより決定するので例では b の80byteとなる。
c[3] が10進数としていくつを表すかは環境により異なるので、以下の実行結果で求めよ。

char a[] = { 0x04, 0x02, 0x11, 0x23 };
int* b;
b = (int*)a;
printf( "%d\n", *b );
778デフォルトの名無しさん:2006/12/11(月) 23:24:22
ttp://3rd.geocities.jp/as_rmter/stage_k6.htm

ここのstage6-3と6-4の四則演算をするにはどうしたらいいか助言いただけないでしょうか?
779デフォルトの名無しさん:2006/12/11(月) 23:26:30
[1] 授業単元:ファイル入出力
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3149.txt
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:明日の正午まで
[5] その他の制限:ポインタ、構造体、配列、関数は習いました

よろしくお願いします
780デフォルトの名無しさん:2006/12/11(月) 23:58:37
>>778
6-4 ひんと。
scanf("%f%[+-*/]%f",&a,&c,&b);
switch(c){
case '+': …
781デフォルトの名無しさん:2006/12/12(火) 00:11:59
>>749
この問題の仕様には矛盾があるなぁ。出題者が素人かと。

2.で『格納する領域は動的に確保』とあるから普通に考えると『読み込んだ文字数+1』を確保する様に
思える。
よって各行毎に領域のサイズが異なる事になる。
しかし、4.で『2つの文字列へのポインタに対して、それらの値を入れ替える』とあるけどサイズが異なる
から strcpy() は使えない。

この矛盾を回避するには2.での領域確保を固定長(255+1)とするか、4.を『2つの文字列へのポインタ
へのポインタに対して、それらの値を入れ替える』に変更する必要がある。
前者の場合、ソート効率が悪すぎるので後者が妥当かと思える。

まぁ明日締め切りでは確認もできないわなぁ...

782デフォルトの名無しさん:2006/12/12(火) 00:18:32
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:Windows
 [3.2] VC2005 MFC
 [3.3] 言語: C++

質問ぽい感じなんですけどPolylineで(10,10)から(10,11)に線を引きたい時ってPOINT型にこの座標入れてやると
1ピクセルの点になってしまうのは仕様ですか?2ピクセル分じゃなくて1ピクセルの点になってしまいます。
これは始点か終点どちらが削られているんですか?
お答えお願いします!
783デフォルトの名無しさん:2006/12/12(火) 00:20:15
>>782
Polylineってなんだよ?
そういうことはそれを作ったやつに聞け
784739:2006/12/12(火) 00:28:18
>>777
どうもありがとうございます!!
785767:2006/12/12(火) 00:32:02
回答いただいたのですが、どうもまだイマイチ飲み込めません。
ビットフィールドを使用する方なのですが、恐縮ですが解説、もしくは
ヒントと共に今一度ご教授いただけないでしょうか?
786デフォルトの名無しさん:2006/12/12(火) 00:33:51
>>781
メモリを動的に確保と言ってるだけだから
ようはスタティックに strtemp[256] と確保するなと言うだけで
動的にmallloc(255+1)で確保すればいんじゃないか?
787デフォルトの名無しさん:2006/12/12(火) 00:37:48
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3152.txt
[3] 環境
 [3.1] OS:LINUX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2006年12月12日の正午まで
限界まで粘ったけどそろそろやばそうなので助けを求めます。
お願いします
788781:2006/12/12(火) 00:53:43
>>786
それでも良いんだけどね...バブルソートするときに strcpy しまくるのはいかがなものかと...

問題文を読み直したら『ポインタの値を入れ替える』だから、引数をポインタのポインタで与える様にも
読めるかなぁ。単にイチャモンつけてた様な気分。
789デフォルトの名無しさん:2006/12/12(火) 00:58:52
>>780
回答ありがとうございます
さっそくそのヒントを得てない頭振り絞ってやってみたんですがどうもだめなのですが

#include <stdio.h>

void main(void)
{
int a,b,c;
printf("演算を入力してください:");
scanf("%f%[+-*/]%f",&a,&c,&b);
switch(c){
case '+':printf("\n%.1f+%.1f=%.1f",a,b,a+b);
break;
case '-':printf("\n%.1f-%.1f=%.1f",a,b,a-b);
break;
case '*':printf("\n%.1f*%.1f=%.1f",a,b,a*b);
break;
case '/':printf("\n%.1f/%.1f=%.1f",a,b,a/b);
break;
default :printf("エラー");
}
}
これではだめなのでしょうか?
790デフォルトの名無しさん:2006/12/12(火) 01:01:25
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):
Insertion sort,Merge sort, Heap sort, Quick sort, Randomized quick sort,Selection sortをC言語プログラムで作成し、それぞれのデータ数に対する命令実行回数の計測、評価をする。
各データの総数10万個
ASC||テキスト形式で、1行に1データ
[3] 環境
 [3.1] OS:Mac
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2006年12月15日
よろしくお願いします
791デフォルトの名無しさん:2006/12/12(火) 01:13:29
>>783
自作関数ではありません><
792781:2006/12/12(火) 01:13:40
>>749
勝手に解釈して書いてみたけど90ステップくらいあるので直接書くの面倒くさい。
どっか適当な晒し場所教えれ。
2時までにレスあれば晒すわ。
793デフォルトの名無しさん:2006/12/12(火) 01:14:37
>>703お願いします
794デフォルトの名無しさん:2006/12/12(火) 01:14:37
795デフォルトの名無しさん:2006/12/12(火) 01:40:14
796792:2006/12/12(火) 01:54:14
>>749
4カラムタブで書いたのでインデントずれたぁ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3155.txt
797デフォルトの名無しさん:2006/12/12(火) 01:59:59
>>782
win32APIの共通的な仕様

http://wisdom.sakura.ne.jp/system/winapi/win32/win23.html
> //ただし、終点自体は描画されません
798デフォルトの名無しさん:2006/12/12(火) 02:10:15
>>797
うほっ!ありがとうございました!終点を書かないとはけしからん仕様ですな。
799デフォルトの名無しさん:2006/12/12(火) 02:12:24
たしかにVGAでx座標が[0-640]だったら長さがが641になってしまうなw
800787:2006/12/12(火) 02:32:32
もう一度考えてみたけどやっぱりわかりませんでした。
このまま期限まで考えてるつもりですが、昨日から自分の中で全く発展がないので正直自信がないです。
どうか僕に突破口を与えてください。どなたかお願いします。
801デフォルトの名無しさん:2006/12/12(火) 03:45:53
802デフォルトの名無しさん:2006/12/12(火) 04:24:50
>>778
ヒント
>int a,b,c;
>printf("演算を入力してください:");
>scanf("%f%[+-*/]%f",&a,&c,&b);

↑だと
a,b,c は整数型
%fは浮動小数点数型
803デフォルトの名無しさん:2006/12/12(火) 04:45:44
>>802
すみません
よそで教えてもらったのでもう結構です
804デフォルトの名無しさん:2006/12/12(火) 04:59:51
>>803
マルチレスやめてくれ。
泣きたくなる。
805デフォルトの名無しさん:2006/12/12(火) 06:01:22
>>804
おまいはよく頑張った。これからも答えてやってくれ。
てか俺が思うに>>803は成りすましだと思うんだがな。IDがでないことをいいことにさ。
806デフォルトの名無しさん:2006/12/12(火) 06:33:39

この人キモいです
807デフォルトの名無しさん:2006/12/12(火) 06:36:24
>>564ですけど、明日の早朝6時までにお願いします。
808デフォルトの名無しさん:2006/12/12(火) 06:45:32
総長にでも頼もう>性帝トーマス氏w
809749:2006/12/12(火) 06:55:59
>>781
レス遅くなって申し訳ないです。解答ありがとうございます。
ポインタへのポインタについて解説していたので後者の4を『2つの文字列への
ポインタへのポインタに対して、それらの値を入れ替える』に変更だと思いま
す。
問題にミス(?)があったようなので提出期限が延びると思いますし、>>781さん
が教えて下さった解答を見て自分でも考えてみようと思います。
疑問があったら質問するかもしれませんがよろしくお願いします。
810デフォルトの名無しさん:2006/12/12(火) 08:42:52
>>787
コード読んだけど何やりたいかわからん。
なんでアルファベットの出現頻度調べるのに2分木使うんだ?
読み込むファイルのフォーマットもわからんし。
単語入力するところはバグってるし。

あのコード流用しないといけないのか?
811デフォルトの名無しさん:2006/12/12(火) 08:58:59
>>810
仲間いた。
俺も回答してあげたかったけど何したいかよく解らん。
しかも ReadBuffer をグローバル変数で定義して関数間の受け渡しに使ってるとか超ゴミソースなので
ちゃんと読む気も起きなかった。

>>787
あのソースが出題の一部だとするなら...その学校は辞めた方が良いだろう。
812デフォルトの名無しさん:2006/12/12(火) 09:39:30
>>564
期限変わったん?

二分探索木って事はまず二分木をソートするって事?
813デフォルトの名無しさん:2006/12/12(火) 09:49:09
【質問テンプレ】
[1] 授業単元: 情報工学実験
[2] 問題文(含コード&リンク):

ファイル関数を扱う問題で
test1.txt

asdsdfga
dsda


test2.txt

ssasfgda
fsda

と二つのテキストファイルが有る。この文字をファイル関数を使い配列に読み込み逐次比較したい。
比較し、同じ文字であれば1を計上し、異なれば0を計上し最終的に合計スコアを出力する。
例えば上記の場合、最初はaとsが比較されスコアは0。次にはsとsが比較されスコアは1を計上する。

[3] 環境
 [3.1] OS: Windows/Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: ([2006年12月15日23:59まで
814813:2006/12/12(火) 09:50:11
一文字づつ比較というのが上手くいきません。
よろしくおねがいします。
815デフォルトの名無しさん:2006/12/12(火) 09:54:03
>>814
if(str[i] == str2[i])
816デフォルトの名無しさん:2006/12/12(火) 10:05:20
>>789
float a,b;
char c;
817デフォルトの名無しさん:2006/12/12(火) 10:07:52
>>813
まずはソースを見せるんだ
818せんせ:2006/12/12(火) 10:26:08
>>813
こらー 吉田ぁー 自分で解けって言っただろがぁー
819デフォルトの名無しさん:2006/12/12(火) 10:39:42
吉田w
820デフォルトの名無しさん:2006/12/12(火) 10:44:54
[1] 授業単元:Cプロ入門演習2
[2] 問題文(含コード&リンク):
最小公倍数・最大公約数を求める関数を作成し、それを利用するプログラムを作成せよ。関数は下記の通りとする。
void lcm_gcm(int in0,int in1,int *lcm,int *gcm)
lcm最小公倍数(のポインタ)
gcm最大公約数(のポインタ)
戻り値なし
入力に関して
キーボードから、入力値をスペース1つあけて1行で入力する。
出力に関して
最小公倍数、最大公約数の順番でスペース1つあけて出力(+改行)

[3] 環境
 [3.1] OS: WindowsXPSP2
 [3.2] study Cとかいうやつ
 [3.3] 言語: C
[4] 期限: 12/20まで
[5] ポインタまで

これともう一問あるのでお願いします
821デフォルトの名無しさん:2006/12/12(火) 11:04:00
>授業単元:Cプロ入門
何のプロになるんだ?丸投げのプロか?
822デフォルトの名無しさん:2006/12/12(火) 11:11:32
うそお
823デフォルトの名無しさん:2006/12/12(火) 11:12:29
>>820

void lcm_gcm( int in0, int in1, int *lcm, int *gcm )
{
int i;
for ( i = 2, *lcm = 1; i <= in0 / 2; i++ ) if ( in0 % i == 0 && in1 % i == 0 ) *lcm = i;
if ( in0 % in1 == 0 ) *lcm = in1;
if ( in1 % in0 == 0 ) *lcm = in0;
*gcm = in0 * in1 / *lcm;
}

void main( void )
{
int in0, in1, lcm, gcm;
scanf( "%d %d", &in0, &in1 );
lcm_gcm( in0, in1, &lcm, &gcm );
printf( "%d %d\n", lcm, gcm );
}
824デフォルトの名無しさん:2006/12/12(火) 11:14:17
[1] 授業単元:Cプロ入門演習2
[2] 問題文(含コード&リンク):
void prime(int in,int *array, int *index)
in入力値
array素数が照準に格納されている配列(のポインタ)
indexarray に現在格納されている数(のポインタ)
in が素数であれば prime()内で+1すること。
戻り値なし
void print_array(int *array,int num)
array 素数が昇順に格納されている配列(のポインタ)
num出力すべき素数の数
戻り値なし

入力に関して
キーボードから、入力値(+改行)のみ入力する。
出力に関して
小さいものから順にスペース1つあけ、改行をいれずに出力。入力値分出力したら、改行。

[3] 環境
 [3.1] OS: WindowsXPSP2
 [3.2] study Cとかいうやつ
 [3.3] 言語: C
[4] 期限: 12/20まで
[5] ポインタまで

>>821
正式な単元名がCプロ入門演習となってるので書いたまでですが?
825813:2006/12/12(火) 11:16:15
まだまだ途中ですがソースです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3160.txt
826デフォルトの名無しさん:2006/12/12(火) 11:16:18
821の煽りも幼稚だが、釣られてどうする。
頼む側なんだからな。
827デフォルトの名無しさん:2006/12/12(火) 11:18:02
>>824に書き忘れ

小さい順にn個(最大100)の素数を求めるプログラムを作成せよ。
以下の素数であれば指定した配列に格納する関数と、結果を表示する関数を利用するものとする。

>>823
お早い解答ありがとうございます
早速はしらせてみます
828デフォルトの名無しさん:2006/12/12(火) 11:19:19
>>824
そういう要らんレスするなよ、本当に回答する奴がいなくなるぞ?
態度が悪くて○投げって、逆にお前が困るだろ。
言動をつつしみなさい
829デフォルトの名無しさん:2006/12/12(火) 11:19:28
さぞすばらしいプロになれるんでしょう
丸投げの。
830デフォルトの名無しさん:2006/12/12(火) 11:21:15
>>824
結局キーボードから入力するのは配列に格納させる素数の数で良いのか?
831787:2006/12/12(火) 11:26:49
>>801ありがとうございます。せっかくやってもらったのにいいにくいのですが
問題文を見落としてて、大文字小文字の区別をつけちゃいけなかったみたいなんです。
そうなるように改造していただけないでしょうか


>>810>>811
>>801の人の回答は間違いなんですか?そんなにまずいんですかこの問題・・・
832デフォルトの名無しさん:2006/12/12(火) 11:27:16
既に丸投げプロみたいだけどな
ここの常連だ
833デフォルトの名無しさん:2006/12/12(火) 11:34:19
C/C++ができなくてもプロにはなれるんだからいいんじゃね?
○投げのプロも立派なプロだよ
胸をはって仕事の横流しをすればいい
834830:2006/12/12(火) 11:35:35
>>824
返事がねぇが、こんなもんか。

void prime( int in, int *array, int *index )
{
int f, i;
for ( f = 1, i = 0; i < *index && array[ i ] <= sqrt( in ); i++ ) if ( in % array[ i ] == 0 ) f = 0;
if ( f ) array[ (*index)++ ] = in;
}

void print_array( int *array, int num )
{
int i;
for ( i = 0; i < num; i++ ) printf( "%d ", array[ i ] );
printf( "\n" );
}

void _38_main( void )
{
int p[ 100 ], i, index, num;
scanf( "%d", &num );
for ( i = 2, index = 0; index < num; i++ ) prime( i, p, &index );
print_array( p, index );
}
835デフォルトの名無しさん:2006/12/12(火) 11:44:30
>>831
801ではないけど解答
元のプログラムは単語をひとつずつ読み込んで集計するやつっぽいから,読み込みの単位を
単語からアルファベット1文字(の文字列)に変更する.
元のプログラムのReadWord関数を次のように書き換えてくれ.余裕があれば関数名も.
int ReadWord(FILE *fp){
int ch;
int i;
do{ /* アルファベット以外を読み飛ばす */
ch=getc(fp);
if(ch == EOF) return (0);
if(ch == '^') return (2);
}while(!isalpha(ch));
buffer[0] = toupper(ch);
buffer[1] = '\0';
return (1);
}

あと,MemoryAllocation関数の最後に
return current;
を加える必要がある.

アルファベットの集計にツリー使う必要はないんだけどね…
836デフォルトの名無しさん:2006/12/12(火) 11:51:17
質問者の将来を心配するなんて、随分優しい人ばかりですねこのスレは。

俺としては○投げされた問題を解答する方が楽だな。
「ここまでは自分で作ったんですけど」とか、そんなのは先生に聞け。
質問文もまともに○投げできない奴はカエレ。
837デフォルトの名無しさん:2006/12/12(火) 11:53:42
将来は心配していない、ここで答えられなければもっと悲惨だが
自力でとっていない単位じゃ本人も報われないだろうw
838デフォルトの名無しさん:2006/12/12(火) 11:55:33
それらを含めてこのスレは成り立っています。
839デフォルトの名無しさん:2006/12/12(火) 11:58:54
じゃぁ次スレのタイトルは「C/C++の宿題を片づけるかもしれません」になるの?
840デフォルトの名無しさん:2006/12/12(火) 12:00:58
>>834
返事が遅れてしまい申し訳ないです
入力に関してはそれでいいと思います。というかそれ以外何かあるのか自分にはわからないです

コードを実行してみたのですがエラーを吐いてうまく動きませんでした
残りは自分でやってみようかと思います。ありがとうございました
841デフォルトの名無しさん:2006/12/12(火) 12:03:31
>>840
_38_main() を main() にすれば良いんじゃね?
842787:2006/12/12(火) 12:05:20
>>835
buffer[0]=toupper(ch);

の部分で「未定義のシンボル」ってエラーがでます・・・
843デフォルトの名無しさん:2006/12/12(火) 12:05:43
将来プログラム製作には関わりませんって宣言してくれれば何の心配もせず解答できるんだけどな
844デフォルトの名無しさん:2006/12/12(火) 12:07:06
>>843
将来プログラム製作には関われませんって宣言しているんだから心配しなくていいです
845デフォルトの名無しさん:2006/12/12(火) 12:11:39
>>839
というか、タイトルがそうでなくても今までも「かもしれません」だったから問題ないかとw
846デフォルトの名無しさん:2006/12/12(火) 12:15:38
>>842
801のコードを使ってないか?
書き換えてほしいのは787でupされた元のコード.
847801:2006/12/12(火) 12:21:15
うちがつくったやつを本にするなら
ReadAlphaのさいごを
return toupper(ch);
848デフォルトの名無しさん:2006/12/12(火) 12:56:49
>>564です。
>>812 期限はそのままなんですが、早めに提出しないと見直しできないみたいなので、明日までにお願いします。すみません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3161.txt 問題文1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3163.txt 問題文2

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3127.txt 元のプログラム
上記の問題文1と2に従って元のプログラムを修正する課題です。問題文1と2の2つのプログラムを作成します。
あと問題文2に例外があって、二分木のイメージを表示するプログラムが元プログラムにあるのですが、問題文2にそる形で二分木イメージの元プログラムを問題文2で二分探索木イメージで出力するようにお願いします。
849811:2006/12/12(火) 12:58:49
>>787
>>801 の書いたのを見ると以下の仕様と読める。
・ファイルを読み出現したアルファベットの個数リストを作成する。
・リストは双方向リンクで作成し文字が昇順になるように動的に生成すること。
・入力された文字の出現回数を表示する。
多分上記の動作をすると思うので正しいだろう。

>>810 も俺もこの仕様を >>787 から読み取れなかっただけ。俺はソース読む段階で放棄したし。
>>787 がもう消えてるので確認できないけど、アルファベットの出現回数を得るだけなら 26 個の
カウンター配列を持てば済む話。
双方向なんかを使ってるから題意が読めない−まぁ双方向リンクがお題目なんだろうけどね。
もう少し必然性のある問題を作れないのかなぁ...とにかく、参考ソースがゴミである事は確か。
850811:2006/12/12(火) 13:06:26
あっよく見たら双方向じゃなくてバイナリだ、恥ずかし。
851デフォルトの名無しさん:2006/12/12(火) 13:09:38
>>848
問題文1と2はどう違うのだ?
852デフォルトの名無しさん:2006/12/12(火) 13:19:31
>>848
見直しなんかするの?
853デフォルトの名無しさん:2006/12/12(火) 13:20:09
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):入力ファイル(テキストファイル)の中から単語を切り出し
               単語部分のみ文字列を反転するプログラムを作る。ただし
               単語文字列を格納する配列を用いるとともに、文字列を反
               転する関数を用意し引数にはポインタを使用すること。
     
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2006年12月13日8:00まで
[5] その他の制限: stdio.hとstdlib.h以外は習ってないのでできるだけ使わないでお願いします。

よろしくお願いします

854デフォルトの名無しさん:2006/12/12(火) 13:24:19
>>853
文字列の反転方法うp汁
855デフォルトの名無しさん:2006/12/12(火) 13:24:22
bを反転するとdとなる
856デフォルトの名無しさん:2006/12/12(火) 13:24:31
>>852
ここのそのままコピったらバレるかもしらんやん
変数名変えたりforとwhileを変えたりしないと
857デフォルトの名無しさん:2006/12/12(火) 13:26:08
きっとAが∀になるんだよ
858デフォルトの名無しさん:2006/12/12(火) 13:27:32
6をひっくりかえすと9に(略
859デフォルトの名無しさん:2006/12/12(火) 13:56:33
>>851 問題1と2は、1では二分木で作って、その1を改良修正したのが問題2で、2では二分探索木を用意して、最小値の探索を行う関数を作成する問題です。+イメージ出力

860デフォルトの名無しさん:2006/12/12(火) 14:04:01
テンプレに具体例入れないか?分かりにくい問題多すぎる
861デフォルトの名無しさん:2006/12/12(火) 14:07:58
解かりにくい問題を出す奴はテンプレもまともに書かないから無意味
862デフォルトの名無しさん:2006/12/12(火) 14:09:08
>>854
ABCD -> DCBA
ってことでは?
863デフォルトの名無しさん:2006/12/12(火) 14:09:59
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):倍精度実数型変数a と,倍精度実数型ポインタ変数p を定義する.このとき,以下の動作を行
うプログラムを作成しなさい.
@ キーボードから実数を読み込み,a に格納する
A a の値とa のアドレスを画面表示する
B a のアドレスをp に代入しておき,p を通じてキーボードから実数を読み込む
C p の指し示す先の要素の値とp の値を画面表示する
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: (gcc 3.4)
 [3.3] 言語: (C)

よろしくお願いします。
864デフォルトの名無しさん:2006/12/12(火) 14:14:53
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4
int main(){
int Number[N],In[N];
int i,j,hit,blow;
srandom((unsigned) time(0));
for(i=0;i<N;i++){Number[i]=random()%10;In[i]=0;}
do{
printf("%d桁の数を入力!:",N);

for(i=0;i<N;i++){if((In[i]=getchar()) ==EOF) break; // この部分 //
In[i]-='0';}

fflush(stdin);hit=0,blow=0;
for(i=0;i<N;i++){if(Number[i]==In[i]) hit++;}
for(i=0;i<N;i++){for(j=0;j<N;j++){if(Number[i]==In[j]) {
blow++;
break;
}}}
for(i=0;i<N;i++) printf("%d-",In[i]);
printf("(%dHit,%dBlow)\n",hit,blow-hit);
}while(hit!=N);
for(i=0;i<N;i++)printf("%d",Number[i]);
puts("\nComplete!!");
}
865864:2006/12/12(火) 14:15:55
[1] 授業単元:計算機演習2
[2] 問題文(含コード&リンク):上記のfor文で数を読み取る部分をscanfの型に直す。
今のままだと、getcharで取り込んだ数が不具合を起こして、入力した数が正常に表示されません。
このプログラムでは一回試行する毎にランダムの数が書き変わってしまいます。
数を言い当ててComplete!が表示されるまで、設定された数が書き変わらないようにしてください。
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc -o
 [3.3] 言語: C
[4] 期限: 2006.12.15

改行が多いため、二つのレスに分けました。
866デフォルトの名無しさん:2006/12/12(火) 14:42:41
>864
ヒット&ブロウだったら同じ数字使えないようにしないと。
867デフォルトの名無しさん:2006/12/12(火) 14:59:34
>>853
どうも題意が分かりにくいが、こんな感じでいいのかな。

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

/* MBS未対応 */
char *reverse(char *s)
{
    char *p, *q, tmp;

    if (!s || !*s) return s;
    for (p = s, q = s + strlen(s) - 1; q > p; ++p, --q) {
        tmp = *p;
        *p = *q;
        *q = tmp;
    }
    return s;
}

main()
{
    char buff[8192];

    while (scanf("%8191s", buff) != EOF)
        printf("%s\n", reverse(buff));
}
868デフォルトの名無しさん:2006/12/12(火) 15:01:02
>865
各種チェックは省略
scanf("%d", &n);
for(i=0; i<N; i++,n/=10) In[N-1-i] = n % 10;
869デフォルトの名無しさん:2006/12/12(火) 15:16:34
870初心者@携帯:2006/12/12(火) 15:18:21
>>863
int main(void)
{
int a,*p;
scanf("%d",&a);
printf("a=%d &a=%p",a,&a);
p=&a;
scanf("%d",p);
printf("*p=%d p=%p",*p,p);
return 0;
}

インデントは自分でしてね
871864:2006/12/12(火) 15:22:45
問題に関する記述が足りませんでした。
四つの数は全て異なっていなければなりません。
御迷惑をお掛けします。
872デフォルトの名無しさん:2006/12/12(火) 15:23:47
>>869
問題文に「文字列を反転する関数を用意し」という記述があるのだが。
873デフォルトの名無しさん:2006/12/12(火) 15:26:53
単語の切り出しはscanf()で出来るしな。>>867でいいんじゃないの。
874デフォルトの名無しさん:2006/12/12(火) 15:43:18
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):下記
[3] 環境
 [3.1] OS:Windows
 [3.2] VS2005 C++
 [3.3] 言語: C++

サブ関数でa[0]=0 a[1]=1 a[2]=2 と値を入れてメイン関数でこのサブ関数を呼び出してポインタを使ってint a[3]にサブ関数で定めた値を
入れよ。
ポインタは全然わかりません!お願いします><
875デフォルトの名無しさん:2006/12/12(火) 15:55:27
#include <stdio.h>
void sub(int *p)
{
int i;
for(i=0; i<3; i++) *(p+i) = i;
}

int main(void)
{
int a[3];
sub(a);
return 0;
}
876デフォルトの名無しさん:2006/12/12(火) 15:56:11
>>874

#include <iostream>
using namespace std;

int* sub()
{
int a[3];
a[0] = 0;
a[1] = 1;
a[2] = 2;
return a;
}

int main()
{
int a[3];
int* r;
r = sub();
a[0] = r[0];
a[1] = r[1];
a[2] = r[2];
cout << a[0] << endl;
cout << a[1] << endl;
cout << a[2] << endl;
return 0;
}
877876:2006/12/12(火) 15:57:46
こうかなぁと思ったんだけど、スタックに乗ってる値をポインタで返すのはまずいよなぁ。
問題文からは、こう読めるんだが。
878869:2006/12/12(火) 16:03:18
>>872
じゃ関数にした。こっそりバグも埋まってたし...

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3165.txt

>>873
>>867 だと全バイト反転になるけど『単語を切り出し』が気になったんだよね。
abc def ghq -> qhg fed cba は題意と異なる様な気が...
もっとも俺の
cba
fed
qhg
も題意と異なるかな?
それと string.h 使って良いの?
879デフォルトの名無しさん:2006/12/12(火) 16:08:59
>>878
いやだから君のプログラムと同じ動作になるよ。
scanf()の仕様、知らんでしょ。
880デフォルトの名無しさん:2006/12/12(火) 16:18:42
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):まず,整数型変数a,b,c を定義し,それぞれに10,100,1000 を代入する.次に,整数型ポイ
ンタ変数p を定義し,c のアドレスを代入する.p の値をp+0 からp+9 まで変化させて,*p の値
を画面表示するプログラムを作成しなさい.また,実行結果がなぜそのようになるかを考察しな
さい.
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: (gcc 3.4)
 [3.3] 言語: (C)

分かる方、よろしくお願いします。
881デフォルトの名無しさん:2006/12/12(火) 16:24:00 BE:34938836-2BP(202)
>>880
わざわざ動かないコードを書かせる意味が分からん。
この糞課題を出したクズ教官の名前を晒せ。
882デフォルトの名無しさん:2006/12/12(火) 16:26:57
>>875 先生!ありがとうございます!
で、ですね( ;・∀・)もう一ついいですか?2次配列つかった場合ってどうやればいいですか?
Get8の中でd[8]のなかにdata[200][200]の指定のデータを入れたいんですが、どうすれば。。。

void Get8(int i, int j, int *data, int *d)
{
*(d)=data[i][j+1];
*(d+1)=data[i-1][j+1];
*(d+2)=data[i-1][j];
*(d+3)=data[i-1][j-1];
*(d+4)=data[i][j-1];
*(d+5)=data[i+1][j-1];
*(d+6)=data[i+1][j];
*(d+7)=data[i+1][j+1];
}

void main()
{
int d[8];
Get8(i,j,data,d);
}

こんな感じじゃじゃダメっした!上のやつは簡単に書いたやつでdata[200][200]は他のとこで値が入れてあります。iとjはforの中で使ってます。
Get8の中だけ書き直していただけると助かります><お願いします神様!
883デフォルトの名無しさん:2006/12/12(火) 16:29:17
>>881
変な値にはなるが、動かなくはないでしょ。
でも、何故cからなんだろ?aからなら考察のしがいもあるのだが。
884878:2006/12/12(火) 16:30:28
>>879
知らんかった。有難う。scanf なんて使った事ないからなぁ...
とはいえ先に書いた様に若干、仕様に疑問が残ったので書き直した。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3166.txt

問題文の求める動作はこれではないかと...
885デフォルトの名無しさん:2006/12/12(火) 16:31:45
>>883
アドレスが逆から振られる処理系なんじゃない?
886デフォルトの名無しさん:2006/12/12(火) 16:39:42
Cだと代入した後に定義はできないだろ
887デフォルトの名無しさん:2006/12/12(火) 16:45:02
>>880
#include <stdio.h>

int main()
{
int a = 10,b = 100,c = 1000;
int i,*p = &c;

for(i = 0;i < 10;i++){
printf("*(p + %d) = %d\n",i,*(p + i));
}

return 0;
}

なにがやりたいのかはわからんけど
888デフォルトの名無しさん:2006/12/12(火) 16:52:08
>>883
solaris のスタックは後から定義した変数の方が低位アドレスだった気がする。
889809:2006/12/12(火) 16:52:26
>>796
とりあえず、学校で動作確認とかしたのですが、
void freeArea(char** ppArea)
{
int i;
for( i = 0; i < MAX_LINE; i++ )
if( ppArea[i] )
free( (void*)ppArea[i] );
free( (void*)ppArea );
}

のif( ppArea[i] )っていうのはミスでしょうか?
エラーは出なかったのですが、これだけだと意味をなさないですよね?

それと
free( (void*)ppArea[i] );
free( (void*)ppArea );
の部分は
free( ppArea[i] );
free( ppArea );
とすると、ちゃんと解放されないですか?
voidが付いてる理由が分からないので外してみたのですが。

それと、提出期限が明後日の朝11時00分までになりました。
890デフォルトの名無しさん:2006/12/12(火) 16:57:11
>>889
>>796じゃないが。

>のif( ppArea[i] )っていうのはミスでしょうか?
これはif( ppArea[i] != NULL)と同義。

>とすると、ちゃんと解放されないですか?
される。(void *)がついているのはおそらく暗黙の型変換を嫌ったからだろう。
891デフォルトの名無しさん:2006/12/12(火) 17:22:43
>>889
while(1){...}
とかもよく使われる。
0は偽、0以外は真の意味がある。
892デフォルトの名無しさん:2006/12/12(火) 17:44:40
>>888
スタック関係ないと思うが。
893デフォルトの名無しさん:2006/12/12(火) 17:46:35
>>892
スタックじゃなくヒープ?
いや、スタックでしょ。
894デフォルトの名無しさん:2006/12/12(火) 17:48:09
>>880の授業ではその後リターンアドレスの書き換えやバッファオーバーランによる
クラックについての解説が行われるんだよ
たぶん
895デフォルトの名無しさん:2006/12/12(火) 17:55:08
>>892
cでは自動変数はスタックに確保される。
引数は、後ろから順にスタックに積まれる。
定義の際、int a,b,c;とした場合、後ろからスタックに積まれるためアドレスはcbaの順になる。
int a;
int b;
int c;
とした場合は、たぶんabcの順に積まれる。
896デフォルトの名無しさん:2006/12/12(火) 18:13:02
そんな決まりは無い
897853:2006/12/12(火) 18:20:02
867さん、869さん、遅くなりましたがありがとうございます。
867さんのみたいなのを求めてました。題意分かりにくくてすみません。
898デフォルトの名無しさん:2006/12/12(火) 18:27:44
>>705は結局居なくなっちゃったなぁ。
恥ずかしくて出て来られなくなるのもわかるが。
まぁ面白かったからいいけど。
899デフォルトの名無しさん:2006/12/12(火) 19:38:33
>>896
どれのこと言ってるの?
自動変数はスタックに積まれるでしょ。
可変長引数を持つ関数を呼び出した時、その関数が持つローカル変数と引数が必ず一定のアドレスだけ離れた形になるように、ローカル変数もスタックに後ろから積まれる。
900デフォルトの名無しさん:2006/12/12(火) 19:47:46
そんな決まりは無い
901900:2006/12/12(火) 19:49:50
あ、ごめん、ぐぐったらあったわ。
902デフォルトの名無しさん:2006/12/12(火) 19:51:54
>>901
どこに?
903π:2006/12/12(火) 19:53:05
[1] 授業単元:区分求積法
[2] 問題文(含コード&リンク):

#include <stdio.h>
#include <math.h>
int main(void)
{
int k,n=100;
double h,a=0,s,PAI,X,I,r=1;
h=(r-a)/n;
X=0;
for(k=1; k<=n; k++)
{
X+=sqrt(pow(r,2)-pow(h*k,2));
}
I=h*X;
PAI=4*I/pow(r,2);
printf("PAI=%lf。\n",PAI);
return 0;
}

[3] 環境
 [3.1] OS: Windows
 [3.2] borland
 [3.3] 言語: C
[4] 期限: 今日中にお願い致します
[5] その他の制限: scanfをつかってnの数値を変えて実行できるようにしたい。
πの近似値を求めるプログラムです。nの値を大きくしていけばπの値により近づきます。
nの値をintの所で一々変えて入力して結果を出力するのではなく、
scanfを使ってプログラムを作成したいのですがうまくいきません。
説明不足かもしれませんがお願いいたします。
904デフォルトの名無しさん:2006/12/12(火) 19:57:10
>>903
自分が試した方法と、どううまくいかなかったのかを説明してくれ
905π:2006/12/12(火) 20:07:47
#include <stdio.h>
#include <math.h>
int main(void)
{
int k,n;
double h,a=0,s,PAI,X,I,r=1;
h=(r-a)/n;
X=0;
while(k<=n)
{
scanf("%d,&n");
X+=sqrt(pow(r,2)-pow(h*k,2));
}
I=h*X;
PAI=4*I/pow(r,2);
printf("PAI=%lf。\n",PAI);
return 0;
}

while文のなかにscanfを入れてみてやってみたのですが、結果がPAI=0.00000となりできませんでした。
for文のときは値を入れてもその後は反応がありませんでした。
906デフォルトの名無しさん:2006/12/12(火) 20:12:14
>>905
int k,n;
h=(r-a)/n; ←この段階でnは不定
nを使う前に読み込ませないと
変数宣言の後すぐにscanf
907デフォルトの名無しさん:2006/12/12(火) 20:31:25
すいません。
>>790おねがいできませんか?
908デフォルトの名無しさん:2006/12/12(火) 20:42:28
>>907
せめて全部のソートアルゴリズムのコードがないと
規模がでかすぎて誰もやる人いないと思うぞ。
全部のソートを自前で書き起こす時点ですごい面倒。
909デフォルトの名無しさん:2006/12/12(火) 20:43:53
>907
データをよこせ
まさか10万個のデータも作らせる気か?
910デフォルトの名無しさん:2006/12/12(火) 20:47:26
[1] 授業単元: 数値計算
[2] 問題文(含コード&リンク):

sin(x)の値をマクローリン展開を利用して求めた式で計算するプログラムを作成せよ。
ここでは、ある項数n(ここでnはマクローリン展開後の式における項の数とする)に対して
0<=x<=6.28の範囲でxを変化させて計算を行うプログラムを作成すること。
また、nは1,2,3...20までそれぞれの場合について求める
参考:ttp://yosshy.sansu.org/maclaurin.htm

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 12/13 17:00まで
[5] その他の制限:特にありません

よろしくお願いします
911デフォルトの名無しさん:2006/12/12(火) 20:55:59
>>909
10万個のデータ渡されるのアレだなw
>>910
上のほうにあった気がする
912デフォルトの名無しさん:2006/12/12(火) 20:56:26
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク):
   0-255の範囲の乱数を20個生成して配列に格納し、配列中の指定範囲(開始
   及び終端インデックスで指定)のみ大きい順に並び替え、当初の配列要素と
   比較して出力するプログラムを作る。ただし、指定範囲内のみ並べ替えは
   関数として用意し、引数にはポインタを利用すること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 12/13 7:00まで
[5] その他の制限:特にありません
よろしくお願いします
913デフォルトの名無しさん:2006/12/12(火) 21:15:14
[1] 授業単元:Cプログラミング演習
[2] 問題文:50個の整数データを読み込み、それらを小さい順に出力する
      cプログラムを作成せよ。バブル整列法は使ってはいけない。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: 2006年12月23日12:00まで

よろしくお願いします。
914デフォルトの名無しさん:2006/12/12(火) 21:19:39
>913
前スレにも書いた?
915796:2006/12/12(火) 21:22:36
>>889
free( (void*)p ) とか memset( (void*)p, 0x00, size ) とかの (void*) は付けなくても問題は無い。
しかし、warning を生じる環境も過去に存在したので脊髄反射的に付ける様になった。
言わば職業病。
916デフォルトの名無しさん:2006/12/12(火) 21:25:17
ヘ_ヘ
917888:2006/12/12(火) 21:31:34
>>892-895
自動変数は定義した順にスタックへ積まれるが、アドレス低位→高位に積まれるか
アドレス高位→低位に積まれるかは環境依存。
solaris の場合は後者だったと記憶する。
linux では...バッファオーバーランのバグ追った事が無いので知らん。

引数が後ろから積まれるとは限らない。
Win3.1 の PASCAL 型関数の場合、前から積まれてた。
918デフォルトの名無しさん:2006/12/12(火) 21:32:39
>>909
#include <stdio.h>
#include <stdlib.h>
#define MAX 100000
int main(){
int i; FILE *fp;
fp = fopen("data.txt","w");
srand(time(NULL));
for(i = 0;i < MAX;i++) fprintf(fp,"%d\n",rand());
return 0;}
やる気があるならこれでも使ってくれ
俺はソート全部はやる気にならんな
919787:2006/12/12(火) 21:43:49
>>846>>847
昼間はお世話になりました。おかげで課題も間に合わせることが出来ました。
これから教えてもらった答えをよみなおしてみます。
ありがとうございました
920デフォルトの名無しさん:2006/12/12(火) 21:46:23
どういたしまして。
がんばってね。
921デフォルトの名無しさん:2006/12/12(火) 22:02:54
>912
start,endの範囲チェックは自分で足してね
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void f(int *a, int start, int end)
{
int i, j, l, temp, *p;
l = end - start + 1;
p = a + start;
for(i=0; i<l-2; i++) {
for(j=l-1; j>i; j--) {
if(p[j] > p[j-1]) {
temp = p[j];
p[j] = p[j-1];
p[j-1] = temp;
}}}}
int main(void){
int i, start, end,a[20];
srand(time(NULL));
scanf("%d", &start);
scanf("%d", &end);
for(i=0; i<20; i++) a[i] = rand() % 256;
for(i=0; i<20; i++) printf("%3d ", a[i]); putchar('\n');
f(a, start, end);
for(i=0; i<20; i++) printf("%3d ", a[i]); putchar('\n');
return 0;
}
922912:2006/12/12(火) 22:19:36
>>921
ありがとうございました!
参考にさせていただきます。
923デフォルトの名無しさん:2006/12/12(火) 23:40:57
>>848はダメでしょうか。朝までまっています。
924889:2006/12/12(火) 23:44:38
皆さん、レスありがとうございます。
if( ppArea[i] )とif( ppArea[i] != NULL)が同義だったのですか、初めて
知りました。
(void *)は付けなくても大丈夫なのですね。分かりました。

あと、
char** allocArea(void)
{
char** ppRet;
int i;
size_t tSize;
tSize = sizeof( char* ) * MAX_LINE;
ppRet = (char**)malloc( tSize );
if( ! ppRet )
return NULL;
memset( (void*)ppRet, 0x00, tSize );
return ppRet;
}
の意味が全く解らない(他のは、意味は解りました。)ので、この関数を
外してコンパイルと実行をしてみたのですが、コンパイルも通って実行も
、まともに出来ました。
しかし、実行して辞書順に並び替わった後に「セグメントエラー」と表示さ
れます。
これを入れると関数が一つ多くなる上に意味が全く解らなくてコメントや
説明が書けないので何とかしたいのですが何か良い方法は無いでしょうか?
例えば、メイン関数の中で1、2行で簡単な表現で表せたり。
925デフォルトの名無しさん:2006/12/12(火) 23:46:25
ほほう、自動車を軽くしたいからエンジンを外すのか
926デフォルトの名無しさん:2006/12/12(火) 23:56:47
>>918をありがたく利用させてもらって書いてるけど、
Insertion sortでめげそう
10万個のソートってこんなに時間かかるのね
927デフォルトの名無しさん:2006/12/13(水) 00:01:22
>>924
char** allocArea(void)
{
char** ppRet;
int i;
size_t tSize;
tSize = sizeof( char* ) * MAX_LINE;//割り当てるメモリのサイズを計算
ppRet = (char**)malloc( tSize );//メモリを割り当てる
if( ! ppRet )
return NULL;//割り当てに失敗したらNULLを返す
memset( (void*)ppRet, 0x00, tSize );//割り当てられた領域を0で埋める
return ppRet;//割り当てられた領域のポインタを返す
}

Cあんまり詳しくないけどこういう事?
928デフォルトの名無しさん:2006/12/13(水) 00:04:44
>>864の課題の記述にミスがありましたので、補正を加えて再貼りします。

[1] 授業単元:計算機演習2
[2] 問題文(含コード&リンク):上記のfor文で数を読み取る部分をscanfの型に直す。
今のままだと、getcharで取り込んだ数が不具合を起こして、入力した数が正常に表示されません。
このプログラムでは一回試行する毎にランダムの数が書き変わってしまいます。
数を言い当ててComplete!が表示されるまで、設定された数が書き変わらないようにしてください。
このプログラムは数字4桁の数当てゲームですが、ランダムに選択される数字は全て異なっていなければなりません。
今の状態だと数字が重なる場合があるのでそこを補正してください。
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc -o
 [3.3] 言語: C
[4] 期限: 2006.12.15
929924:2006/12/13(水) 00:16:00
>>927
レスありがとうございます。
この関数の一つ一つの行の意味が解らないっていうのもありますし、この
関数自体が何をするためにあるのかも解りません。
それと、問題に「6つの関数から構成する」って書いてあったので、これ
以外の関数だけで十分(説明しにくいのですが、本当は必要ないのにこれを
付け加えることによってプログラムとしてより優れた物にするような物)な
のかと思ってしまって。
930デフォルトの名無しさん:2006/12/13(水) 00:23:38
長さ n を入力とし、整列算法を指定して、乱列の整列時間を求める。 Note586 でシャッフル列を発生させる。 Note585 の3つの単純整列算法を選択する。 Note432 で実行時間を計測する。
{
//---- 宣言
//---- 初期化
乱数の初期化
while ( 1 ) {
//---- 入力
算法の選択、長さの入力
switch ( 処理 ) {
case 終了: { return 0; }
case 入力: { 乱列入力; }
case 生成: { 乱列生成; 乱列出力; }
}
//---- 計算
時間計測の開始
整列算法の実行
時間計測の終了
//---- 出力
時間と回数の出力
}

っていう問題ですどう手を着けていいのやら
おねがいします
931デフォルトの名無しさん:2006/12/13(水) 00:26:43
>>930
いきなり何を言ってるんだお前は
932デフォルトの名無しさん:2006/12/13(水) 00:31:18
[1] 授業単元:Cプログラミング演習
[2] 問題文:0 から n-1 まで長さ n ; n≧1 のシャッフル列を生成する処理 shuffle(arr, n) を再帰的に定義する。以下のような漸化式で考える。
事前処理 arr[n-1] に n-1 を代入
n=1 のとき そのまま返却
n≧2 のとき 再帰呼出 長さ n-1 のシャッフル列の生成 shuffle(arr, n-1)
事後処理 n 未満の整数乱数 r を発生
位置 r と n-1 の要素を交換


[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン: bcc32
 [3.3] 言語: Cのみ
[4] 期限: 2006年12月13日12:00まで

よろしくお願いします。
933デフォルトの名無しさん:2006/12/13(水) 00:37:28
>>236
サンクス
わからんから助けを求めにきたが先行者がいたか・・・
あいつの説明わかりにくいもんなぁ
934デフォルトの名無しさん:2006/12/13(水) 00:42:41
>>929
簡単に言えばメモリ領域を確保して 0 で埋める作業をしている
これしないと国有地でバーベキューするみたいな感じだぞ(意味不明?)
ちゃんと自分の敷地くださいと言って国有地を分けてもらわないとバーベキューしたときに怒られます
935929:2006/12/13(水) 01:01:29
この関数をどうにか消そうと思ってたのですが、重要そうですし、教えて
下さってるので理解する方向で行こうと思います。

>>934
レスありがとうございます。つまりmallocの奴と同じメモリの動的確保
ってことですか?
でも、それだとしたら、
ファイルを読み込む関数
int readFile(char* sPath,char** ppArea )
{
int iLine = 0;
FILE* fp;
char sBuf[ MAX_LEN + 1 ];
fp = fopen( sPath, "rt" );
while( iLine < MAX_LINE && fgets( sBuf, MAX_LEN, fp ) ) {
ppArea[iLine] = (char*)malloc( strlen( sBuf ) + 1 );
if( ! ppArea[iLine] )
return -1;
strcpy( ppArea[iLine], sBuf );
iLine++;
}
fclose( fp );
return iLine;
}

ppArea[iLine] = (char*)malloc( strlen( sBuf ) + 1 );
でメモリの動的確保は行われていると思うのですが…。
936デフォルトの名無しさん:2006/12/13(水) 01:06:37
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=3170
[3] 環境
 [3.1] OS:windows
 [3.3] 言語: c++
[4]明日
937796だっけ?:2006/12/13(水) 01:14:49
>>924
>>927 の解説でOK。
もし、allocArea() を使いたくない場合は main() の ppArea を配列で定義するんだな。
memset() も習ってないなら

char** ppArea;

int i;
char* ppArea[MAX_LINE];
for( i = 0; i < MAX_LINE; i++ )
ppArea[i] = 0x00;

これで ppArea の確保と初期化ができたので allocArea() は不要となる。
この場合、 freeArea() 内で free( (void*)ppArea ); を行うとセグメンテーションフォルトが生じるので削除する。

だけどよー、スタックに40Kbyteも積む下品なコード書きたくねぇよー。
938デフォルトの名無しさん:2006/12/13(水) 01:16:32
>>937
static char *ppArea[MAX_LINE];
でおk。

memset()もいらなくなる。
939デフォルトの名無しさん:2006/12/13(水) 01:18:43
>>913
何個か書いていただいたのですが
コンパイルはできるものの題意を満たすように
実行できません 間違いとか分からないんで
教えてください 
940デフォルトの名無しさん:2006/12/13(水) 01:19:04
システムコール習ってて

// forkして親子に分かれる
// ...
// 親プロセスにて子の終了待ち

  while( wait( (int *)0 ) != pid);


ってのがあったんですが
waitの引数は子の状態情報を記憶しておくポインタを与えるもの
と思ってたんですが
(int *)0
↑0へのポインタを渡すってどういうことでしょう?

またwhileでwaitするのって意味あるんですか?
wait関数が、子プロセスが終了するまで待つのなら
いらないと思うのですが

941デフォルトの名無しさん:2006/12/13(水) 01:20:00
//ポインタを保存する領域を確保
ppRet = (char**)malloc( tSize );
//データを入れる領域を確保してそのポインタを保存
ppArea[iLine] = (char*)malloc( strlen( sBuf ) + 1 );
違い分かる?
942デフォルトの名無しさん:2006/12/13(水) 01:26:31
>>940
man 2 wait

wait()にNULLを渡した場合は、「終了ステータスは別に要りませんよ」という
意味になり、wait()は単に子プロセスの終了を待つだけの動作をする。

while()でループしているのは、割り込みなどによってwait()が異常終了した
場合などを考慮しているのだろう。
が、今時wait()を使うこと自体が、本当は良いスタイルではないな。
せめてwaitpid()を使うべき。
943796だっけ?:2006/12/13(水) 01:27:39
>>935
熱心だから解説しちゃる。
readFile() での malloc() は読み込んだ一行を保存するための領域だ。
よって (char*) で確保する。
んだども、確保した領域のアドレスは何処に保存する?
allocArea() で確保してる (char**) x 10000 は 10000 行の (char*) を保存する為の領域だ。
つまり
ppArea[0][1][2][3][4]...[9999] のそれぞれに readFile() で確保したアドレスが格納される訳だ。
行数が10000 に満たない場合、ppArea の格納されなかった場所には初期値の NULL が入ってる。
よって、開放する時に
if( ppArea[i] ) free( (void*)ppArea[i] );
ちゅう判定が必要になる訳。
.
説明下手でスマソ。
944デフォルトの名無しさん:2006/12/13(水) 01:29:29
ま、10000行決めうちの確保だから、わざわざmalloc()使って
動的に確保する必要はないんだけどな。
static配列で十分。
945デフォルトの名無しさん:2006/12/13(水) 01:30:06
[1] 授業単元:データ構造とアルゴリズム
[2] ファイルを読み込み、英字のみか、先頭が英字で二文字目以降が英字または数字である文字列を抽出し、
   文字列の長さが長い順に並べ、その文字列の頻度と共に表示するプログラムを作成したい。
   但し、文字列の長さが同じものに関しての順序は任意で良い。以下の設問にしたがって回答しなさい。
[3] 環境
 [3.1] Windows XP
 [3.3] CかC++かJava
[4] 期限: 2006年12月20日20:00まで
[5] その他の制限: Windows の API は使用しないで作って下さい。
946デフォルトの名無しさん:2006/12/13(水) 01:31:16
実行例
入力

#include <stdio.h>
#include <ctype.h>
int main(void){
int c0;
char c1;
b='\0';
while((c0=getchar())!=EOF){
if((!isalnum(c1))&&isalnum(c0)){
printf("\n");
}
if(isalnum(c0)){
printf("%c",c0);
}
c1=c0;
}
return 0;
}
947デフォルトの名無しさん:2006/12/13(水) 01:32:03
出力
getchar:1
include:2
isalnum:3
printf:2
return:1
stdio:1
while:1
ctype:1
char:1
main:1
void:1
EOF:1
int:2
if:2
c1:4
c0:6
h:2
n:1
c:1

>>945-947 よろしくお願いします
948796だっけ?:2006/12/13(水) 01:32:41
>>938
静的領域の 0x00 って保障されてたっけ?
なんか環境依存の様な気が...手元にK&Rも無いので確認でけんけど。
949デフォルトの名無しさん:2006/12/13(水) 01:35:29
JISならオンラインで読めたはずだが
950デフォルトの名無しさん:2006/12/13(水) 01:39:06
0で初期化されるのは確かだけど、それがNULLとして有効かは知らない。
むしろ、厳密にはmemsetのほうがまずいような。
951デフォルトの名無しさん:2006/12/13(水) 01:40:21
>>942
ありがとうございます
(int *)0 でNULLポインタになるんですね
初めて知りました
952935:2006/12/13(水) 01:40:29
>>937-938
レスありがとうございます。

>>941
>>943
レスありがとうございます。
メモリの動的確保って言ってもデータを入れるためのメモリとアドレスを
入れるためのメモリの違いってことだったのですか。
詳しい解説ありがとうございました。
953デフォルトの名無しさん:2006/12/13(水) 01:41:37
>>948
staticなオブジェクトが0初期化されるのは立派にC言語の仕様であり
保障されているから心配無用。

どーしてもautoにしたいんなら
char *ppArea[MAX_LINE] = { 0 } ;
でよい。
954デフォルトの名無しさん:2006/12/13(水) 01:43:42
NULL == 0 ではないが、0はNULLという仕様
955デフォルトの名無しさん:2006/12/13(水) 01:48:09
callocなら領域確保と同時にゼロクリアされる。
956796だっけ?:2006/12/13(水) 01:48:18
JIS のページ探すの面倒くさい。
でも多数決で 0x00 は環境依存じゃないということで...
第一 static で取れば下品なコードじゃなくなるな。
>>952
ちゅことで >>938 でOK。だけど freeArea() の一行削除は忘れるな。

>>950
ポインタ変数を全て 0 で埋めてそれが NULL にならないと言うことは...NULL って何?
957デフォルトの名無しさん:2006/12/13(水) 01:55:00
\0でNULLになるんじゃないの?
958デフォルトの名無しさん:2006/12/13(水) 02:02:42
>>957
そりゃ文字列の終端定義。
959952:2006/12/13(水) 02:04:44
>>956
はい、分かりました。
色々とありがとうございました。
960デフォルトの名無しさん:2006/12/13(水) 02:05:34
>>956
(void *)0はNULLだけど、NULLが全ビット0とは限らない。
961デフォルトの名無しさん:2006/12/13(水) 02:08:12
↑へ?どんな処理系?
962デフォルトの名無しさん:2006/12/13(水) 02:08:30
>>945
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

class symdata
{
public:
    string name;
    int cnt;
    int len;
    symdata() { cnt = 0; len = 0; }
    symdata(const string& s, int n)
    { name = s; cnt = n; len = s.length(); }
};

bool cmp(symdata *a, symdata *b)
{
    return (a->len > b->len);
}
963デフォルトの名無しさん:2006/12/13(水) 02:09:43
>>962のつづき。

main()
{
    string s;
    map<string, symdata> table;
    vector<symdata*> v;

    while (cin >> s) {
        if (table.find(s) == table.end()) {
            table[s] = symdata(s, 1);
            v.push_back(&table[s]);
        } else {
            ++table[s].cnt;
        }
    }
    sort(v.begin(), v.end(), cmp);
    for (vector<symdata*>::iterator i = v.begin(); i != v.end(); ++i)
        cout << (*i)->name << ":" << (*i)->cnt << endl;
}
964デフォルトの名無しさん:2006/12/13(水) 02:10:46
3vs3で開始する
965デフォルトの名無しさん:2006/12/13(水) 02:12:33
966デフォルトの名無しさん:2006/12/13(水) 02:13:40
>>959
教えていて気持ちがいいね。
熱心だしすぐ理解してくれるし。
でも毎回名前の番号が変わるからちょっと認識しにくかった。
まぁどうでもいいけど。
967950じゃないが:2006/12/13(水) 02:15:27
>>956
0をポインタに変換したらNULLに変換されるし
(NULLの内部表現が0でない環境ではコンパイラが変換コードを生成する必要がある)
NULL==0は NULL==(void *)0 と解釈されて1を返すけど
memsetはvoid *sの引数を*(unsigned char *)s=0見たいな感じで埋められるから
そこをchar *の値として参照してもNULLじゃないかもしれない
968デフォルトの名無しさん:2006/12/13(水) 02:15:29
Randomized quick sortまで実装したけどあってるかどうかの判別がつかない・・・ orz
969デフォルトの名無しさん:2006/12/13(水) 02:22:43
>>961
具体的な処理系は知らない。規格の話。
970デフォルトの名無しさん:2006/12/13(水) 02:26:32
純粋に規格的な話だと、staticオブジェクトの初期化は大丈夫。
memset()はNGかな。

まぁ、NULLのビット表現が0でない処理系なんて、intが16bitだったり
文字セットがEBCDICだったりするような処理系より全然レアっつか
俺は見たことないし、ぶっちゃけ気にする必要はないけどな。

んな処理系で動かしたら、多分他の部分で問題山積みだぞw
971デフォルトの名無しさん:2006/12/13(水) 02:26:57
>>967
signed bit の話なら立ってれば補数なので 0 なら立たないよ。
いや、俺が君の話を理解できないだけなんだけど。
まぁ疑問なら試せば良いと思う。
972デフォルトの名無しさん:2006/12/13(水) 02:29:57
>>971
>>967が言ってるのは全然そういう話ではない。
memset()は「ビット的に」ゼロにしてしまう。
だから、NULLが「ビット的に」ゼロで無い実装では、それを
「ポインタとして」解釈するとnull pointerではないということになる。

一方、ポインタへのゼロの代入は、たとえNULLが「ビット的に」ゼロでない
実装でも、いつでもnull pointerとして扱われる。
そうした実装の場合、staticなpointerオブジェクトに対しては、
null pointerをあらわすビット値が、おそらくCランタイムの
スタートアップコードによって書き込まれるはずだ。
規格に準拠するならば。
973デフォルトの名無しさん:2006/12/13(水) 02:44:08
↑なるほど、言いたいことは理解した。
けど、不毛だよ。

>>956 で俺が書いた
> ポインタ変数を全て 0 で埋めてそれが NULL にならないと言うことは...NULL って何?
は『ビット的にゼロじゃないNULL』なんか無いだろって事。
君らは『ビット的に非ゼロなNULL』が存在しても良いって前提で話をしてるでしょ。

これは原理主義者と現実主義者の議論でしかないから....
俺はずっと memset() でポインタ初期化を続けるよ、まぁこれも memset() が個別代入より
早いっていう原理主義なんだけどね。
974デフォルトの名無しさん:2006/12/13(水) 02:48:17
>>973
単に「規格的はどうか」という議論をしているのに「俺様脳内方針」を
ブチ挙げる君も、随分空気読めてない人だな。
勝手にすれば?としか。

ま、実際問題としてはそれでOKであることは否定しないだろ、誰も。
975デフォルトの名無しさん:2006/12/13(水) 02:54:37
まぁまぁ。お二人とも。
宿題なんだから提出して採点者の前で動けばいいのだ。








じゃだめ?
976デフォルトの名無しさん:2006/12/13(水) 02:55:41
今はそんな話ではない。黙ってろ。
977デフォルトの名無しさん:2006/12/13(水) 02:58:23
じゃあ、俺はもう寝る
978デフォルトの名無しさん:2006/12/13(水) 02:58:31
つうかstaticオブジェクトの初期化についても知らないわ
サイズ固定の配列をわざわざmalloc()で確保するわ
null pointerに関する規格上の定義も知らないわ
しまいには俺は何がなんでもmemset()で初期化するんだとか逆切れか

なんか面白いもん見せてもらったわw
979デフォルトの名無しさん:2006/12/13(水) 02:58:56
↑お前バカ?
俺が書いたのは話が噛み合わない理由が
・俺は現実的な話をしてる
・俺以外は規格上の話をしてる
事を認めた上で不毛と書いただろ。
噛み合わない話を続けた非は認めるけどな。
980デフォルトの名無しさん:2006/12/13(水) 03:00:54
なるほど、規格も知らないで
「現実的な話」かwwwww
981979:2006/12/13(水) 03:01:41
すまん.
>>974 に対して書いた。
>>978
別に逆切れはしてないよ。
982デフォルトの名無しさん:2006/12/13(水) 03:45:13
>>790
s州大学だよな?いっそpdfうpしてくれたらもっと早くできたのに ゚・(ノД`)
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3174.txt

・・・レポートは自分で書けよ?
983982:2006/12/13(水) 03:48:18
命令実行回数とか数え間違えてるかもしれないからチェックがんばって orz なんかもう眠い
984982:2006/12/13(水) 03:55:50
あとSelection sortは教科書見て書き直さないとバレると思うぞ
連投スマソ
985デフォルトの名無しさん:2006/12/13(水) 03:59:52
>>982
お前いいやつだな
986デフォルトの名無しさん:2006/12/13(水) 04:05:00
>>985
どうせWikiに各種ソートのプログラム置かなきゃいけないからついでだと思って。
地味に面倒だったけどやり始めたら止まらなくなった。

あとグローバル変数の宣言がおかしいところを発見したけど修正は自分でやってくれ
というかなんでこれコンパイルエラーにならないんだろ・・・
987デフォルトの名無しさん:2006/12/13(水) 06:21:35
>932
void shuffle(int *arr, int n)
{
int r, t;
arr[n-1] = n - 1;

if(n==1) return;
else {
shuffle(arr, n-1);
r = rand() % n;
t = arr[n-1];
arr[n-1] = arr[r];
arr[r] = t;
}
}
988デフォルトの名無しさん:2006/12/13(水) 07:20:24
[1] 授業単元:Cプログラミング
[2] 問題文:
BCDコードに変換する関数を作成しなさい。
IN :ASCIIコード(NULLストップ)
OUT:BCDコード、桁数

[3] 環境
[3.1] OS: (Windows)
 [3.2] bcc
 [3.3] C言語
 [4] 期限: 無期限
[5] その他の制限:

宜しくお願い致します。
989デフォルトの名無しさん:2006/12/13(水) 08:35:14
>>988
BCDコードなんだから入力される文字列は0〜9で考えていいんだよな?
あと変換されたBCDコードはどうやって出力すりゃいいんだ?
@printfで出力?(画面に変換結果表示するだけ)
A戻り値をchar*にして返す?(受け取った方は不要になったらfreeする必要がある)
Bそれとも既に確保されてるメモリのポインタを受け取って
 そっちに出力?(確保領域が溢れる場合が有る)
とりあえず簡単な@で書いとく。
#define B(c,n) (((c-0x30)>>n)&0x01)
void strtobcd(char* str)
{
printf("before:\n%s\n",str);
int i=0;
printf("after :\n");
while(str[i]){
if(str[i]<'0' || str[i]>'9'){printf("decode error\n");break;}
printf("%d%d%d%d ",B(str[i],3),B(str[i],2),B(str[i],1),B(str[i],0));
i++;
}
}
990デフォルトの名無しさん:2006/12/13(水) 09:46:40
>>848
上2つのテキスト、内容まったく同じじゃね?
991長岡:2006/12/13(水) 10:16:17
長岡係数を求めるプログラムを早急に作成してください。。
お願いします
992デフォルトの名無しさん:2006/12/13(水) 10:18:35
>>991
>>1を読んでテンプレ守って書き直してね。
長岡係数って何?
その辺の説明も書こうね。
993長岡:2006/12/13(水) 10:23:54
自分もよくその辺もわからないんでそれも説明していただくとありがたいです。図々しくてすみません。。。
994デフォルトの名無しさん:2006/12/13(水) 10:25:20
ABのスレできいてるやつか
ここはBASICのスレじゃねえぞ
995デフォルトの名無しさん:2006/12/13(水) 10:25:47
>>1を読んで理解できないのなら日本語を勉強してくださいとしか…
996デフォルトの名無しさん:2006/12/13(水) 10:27:05
>>991
Perlの実装ならここにあったよ。
数値積分してるみたいだけど。
http://www-lab.ee.uec.ac.jp/vlab/bridge/nagaoka/integral.html
997デフォルトの名無しさん:2006/12/13(水) 10:27:37
>>996
氏ね
998長岡:2006/12/13(水) 10:29:06
>>996
ググって出てくるくらいの情報はいいです
書けないんなら黙っていてください
999992:2006/12/13(水) 10:29:13
>>993
長岡係数とやらを理解して説明できるようになったらまたおいで。
プログラムの部分しか請け負わないよ。
1000デフォルトの名無しさん:2006/12/13(水) 10:29:20
>>996 あんた最低だよ。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。