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

このエントリーをはてなブックマークに追加
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++の宿題を片付けます 73代目
http://pc8.2ch.net/test/read.cgi/tech/1155355501/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
2デフォルトの名無しさん:2006/09/21(木) 22:37:47
>>1
乙!

あげていこうぜイエイイエイ
3デフォルトの名無しさん:2006/09/21(木) 22:40:13
>>1
乙カレー
4デフォルトの名無しさん:2006/09/22(金) 00:22:28
乙ぬるぽ!
5 ◆jG/Re6aTC. :2006/09/22(金) 08:17:25
[1] 授業単元:ネットワーク
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2679.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: ベターCとしてC++
[4] 期限: 2006年09月25日12:00まで
[5] その他の制限: Winsock2を使用します。
ライブラリは、Cの標準ライブラリとSTLは使って大丈夫です。
基本的にコンソールアプリになります。

コーディングに関してはほとんど教えられておらず、Winsock FAQやMSDNを参考にして組め、と言われています。
言語はC++ですが、別にstdio.hを使っても大丈夫です。cstdioでもいいです。
あと、Winsock2ってことですが、無理にWinsock2の新機能を使わなくても、Winsock1の機能の方が使いやすければそれでも大丈夫です。
どうか、よろしくお願いいたします!

(前スレに間違えて投稿してしまったので、移動してきました。すみません。)
6デフォルトの名無しさん:2006/09/22(金) 13:43:48
質問ですが、C++を使ってACCESSからデータを取り出す方法があるのでしょうか?
7デフォルトの名無しさん:2006/09/22(金) 13:52:04
>>6
テンプレ書いてくれ。
8デフォルトの名無しさん:2006/09/22(金) 14:03:43
>>7
すいません、自己解決しました。
9(^-^) ◆MONSOON/qo :2006/09/22(金) 14:37:34
>>5
長い
無理
10素人です:2006/09/22(金) 14:53:50
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2682.txt
[3] 環境
 [3.1] OS:Linux (FodoraCore2)
 [3.2] コンパイラ名とバージョン: gcc バージョン不明
 [3.3] 言語: Cのみ
[4] 期限: 2006年09月29日午前中
[5] その他の制限: 入力、表示は自作関数使用すること。

エラー理由が分からなくって困ってます。よろしくお願い致します。
11デフォルトの名無しさん:2006/09/22(金) 15:07:18
念のために聞いておこう。
どんなエラーが出るんだ?
12(^-^) ◆MONSOON/qo :2006/09/22(金) 15:12:03
>>10
関数MyGetAddressとMyOutputがない
13デフォルトの名無しさん:2006/09/22(金) 15:16:49
MyGetAddressをMyCountに置換すればコンパイルエラーは起こらなくなるけどさ
このプログラム、多分それだけじゃ正常な動作はしない。
14デフォルトの名無しさん:2006/09/22(金) 21:21:23
ひまなんで誰か問題ください
15デフォルトの名無しさん:2006/09/22(金) 21:36:38
>>5
テーブルってなんですか?DBでも連携させるのかな?
16デフォルトの名無しさん:2006/09/22(金) 21:50:41
>>5
それと仮IPと実IPの定義がわからない。
>「ホスト」から仮 MAC アドレスと仮 IP アドレスが送られてきたら
これはどういう意味でしょうか
17デフォルトの名無しさん:2006/09/22(金) 22:51:16
>>5
あと
>(注意)練習のため、サーバーはデフォルトポート(システムに指定させる)を使用して
ください。
これの意図するところがわかりません。
問題を作った人はSOCKETの知識はあるんですか?
18デフォルトの名無しさん:2006/09/22(金) 23:20:39
>>5
ゴメンよく読んだらほとんど書いてますね。
途中まで気づかずにコーディングしてて途中で気づいてやる気がなくなったので
とりあえず途中までうpします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2683.txt
19デフォルトの名無しさん:2006/09/22(金) 23:29:55
>>17
空いてるポート使うってだけでしょ
勝手にOSが割り当ててくれる
20デフォルトの名無しさん:2006/09/22(金) 23:41:51
>>19 ?えっ。。。。
21デフォルトの名無しさん:2006/09/23(土) 00:17:28
C言語で、自然数nを読み込んで、1/nを少数で割り切れたところまで表示するプログラムを教えてください。
22デフォルトの名無しさん:2006/09/23(土) 00:27:30
>>21
まぁまず>>1を読んで書き直せ
23(^-^) ◆MONSOON/qo :2006/09/23(土) 01:00:33
>>21

#include <stdio.h>
#define keta 30
main(){
int i,s,n,m;
for(n=2;n<15;n++){
s=1;
printf("1/%d = 0.",n);
for(i=0;i<keta;){
while(1){
s*=10;
if(n<=s)break;
printf("0");i++;}
m=s/n;
printf("%d",m);
s-=m*n;i++;
if(s==0)break;}
printf("\n");}}
245 ◆jG/Re6aTC. :2006/09/23(土) 03:41:45
>>9
すいません。確かに長いですね。

>>15
テーブルといってもDBではありません。
vectorやmapを使ってメモリ内に「概念的な」テーブルを作ります。
とにかくIP→MACの変換ができれば何でもいいと思います。

>>16
仮とか実っていうのは、自分もよくわかりません。
たぶん、仮というのは、そういうIPアドレスが存在するフリをする、って感じのことだと思います。
255 ◆jG/Re6aTC. :2006/09/23(土) 03:42:49
>>17
デフォルトポートの意図に関しては、自分もよくわかりません。
0を指定したら自動的に割り当ててくれるっていうのを、知らしめたい(?)んでしょうか。

>>18
取り組んでくれたんですね!!
ありがとうございます。

正直言うと、ネットワークは自分の専門でもないので、こんな長々したプログラムやってる時間がなくなってしまったのです。
もし、ちょっと時間を割いていただける方や、ネットワークの得意な方などいらっしゃいましたら、超猛烈に大感謝です!!
26デフォルトの名無しさん:2006/09/23(土) 10:46:38
[1] 授業単元: アルゴリズム論
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2684.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:9月27日
[5] その他の制限:特になし

よろしくお願いします
27デフォルトの名無しさん:2006/09/23(土) 12:07:02
>>26
なんか問題文の日本語おかしいから、ちゃんと意味取れてるかわからんが、やるだけやった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2685.txt

コードはここを参考にした。
http://www2.starcat.ne.jp/~fussy/algo/algo7-3.htm
28デフォルトの名無しさん:2006/09/23(土) 15:57:46
>>27
ありがとうございます、動きました
でもよくわからないところがあるんですがこの「free(table)」って命令は何をやってるんですか?
29デフォルトの名無しさん:2006/09/23(土) 16:03:02
さすがは丸投げクオリティw
30デフォルトの名無しさん:2006/09/23(土) 16:47:27
後期なのに、「命令」とか言ったり標準関数のfree()を知らなかったり・・・
いますぐ大学辞めた方がいいぞ。
31デフォルトの名無しさん:2006/09/23(土) 17:52:04
どう見ても>>28は釣りだろう
32デフォルトの名無しさん:2006/09/23(土) 18:27:03
>>28
tableをfreedomしてます
動物愛護の精神です
33デフォルトの名無しさん:2006/09/23(土) 19:22:23
>>28
malloc で、確保したメモリを開放してる。

最近の OS はプログラム終了時メモリを強制的に開放するから、短いプログラムしか
書かない授業段階じゃ、一々 free() をさせてないんだろ。このスレじゃ珍しく
貰った答え読んで動作理解しようと努力してる奴をあんまり叩くなや><
34デフォルトの名無しさん:2006/09/23(土) 19:28:57
ゆとり教育
35デフォルトの名無しさん:2006/09/23(土) 19:39:18
なんでもかんでもゆとり教育のせいにするのはよくないと思います
36デフォルトの名無しさん:2006/09/23(土) 21:16:11
牛肉食って脳が腐り始めた人間が増え始めただけだろ
37デフォルトの名無しさん:2006/09/23(土) 21:18:20
ここで宿題教えてくれといったK、N、Y、I、I
お前ら単位やらないから俺の講義でなくていいぞ
38デフォルトの名無しさん:2006/09/23(土) 21:23:28
http://pc8.2ch.net/test/read.cgi/tech/1152253441/805

先生!落ち着いてください!
39デフォルトの名無しさん:2006/09/23(土) 23:15:13
>>38
ワロタ
40デフォルトの名無しさん:2006/09/23(土) 23:37:31
K,N,Y,I,Iってただ打ちやすい位置にキーがあっただけだろ。
41デフォルトの名無しさん:2006/09/24(日) 00:09:49
打ちにくい位置のキーってどんなのだろう・・・
Qとかかな?
42デフォルトの名無しさん:2006/09/24(日) 00:16:56
>>41
個人的にはZXCが苦手

リファクタリングとかやってると関数名や変数名にzxcの使用頻度が低い事に良く気が付く
43デフォルトの名無しさん:2006/09/24(日) 00:44:34
打ちやすいように腕と掌の位置をシフトさせるからそういうのはあんまり無いなぁ。
44デフォルトの名無しさん:2006/09/24(日) 13:04:08
_ |とかは?

そうでもないか。。
45デフォルトの名無しさん:2006/09/24(日) 13:23:01
俺は6かな左手で打つか右手で打つか迷う
46デフォルトの名無しさん:2006/09/24(日) 15:00:18
>>45
"6"は右手で打ちたいんだけど、MSナチュラルキーボード使ってるから強制的に左に…
47デフォルトの名無しさん:2006/09/24(日) 16:27:08
!をうつのが苦手
みんなどうやってうってるの?
左手小指でシフト、薬指で1を押してるんだけど…
48デフォルトの名無しさん:2006/09/24(日) 16:29:08
親指 - シフト
人差し指 - 1
49デフォルトの名無しさん:2006/09/24(日) 16:37:29
>>47
何故にそんな特殊な打ち方を・・・
50デフォルトの名無しさん:2006/09/24(日) 16:44:56
>>47
左小指でSHIFTを、左薬指を軽くTabに当てて姿勢制御、左中指で突き立てるように1を突く。
51デフォルトの名無しさん:2006/09/24(日) 16:51:20
>>49
例えば、
if(!
ってうつ場合、
(をうつときは左手の小指でシフト、右手中指で8を押して、
次に!をうつとき、左手の小指のシフトは押しっぱなしになるから、
薬指で1を押すことになっちまうんだよ><
どこかおかしいよね
52デフォルトの名無しさん:2006/09/24(日) 16:55:28
>>50
なれるまでは薬指でタブっちゃいそうだけど、
そっちのがよさげだね。
参考にさせてもらうよ
53デフォルトの名無しさん:2006/09/24(日) 18:05:03
右小指でShift、左薬指で1押す俺はきっと異端
54デフォルトの名無しさん:2006/09/24(日) 18:16:54
よお俺w
55デフォルトの名無しさん:2006/09/24(日) 18:25:05
本来はそれが正しいというかまともっぽいんだけどねえ
自分は右シフトの存在に気付く前に一通りタイピングを覚えちゃった
56デフォルトの名無しさん:2006/09/24(日) 18:58:21
左小指でSHIFT+左中指で1は俺だけじゃないはずだ
57デフォルトの名無しさん:2006/09/25(月) 00:01:06
それ上にあったような。。+俺もw
58デフォルトの名無しさん:2006/09/25(月) 00:31:56
C言語の宿題です。
インタフェースはvoid wait( int time )で、
引数 time で渡された遅延時間(msec単位)だけ待って
処理を上に返す仕様です。
処理待ちの関数を作る課題でどうやって処理待ちをするか困ってます。
CPU速度に依存しない(ポーリングは使わない)やり方があったら教えてください。

WindowsのBCC32コンパイラを使っています。
5958:2006/09/25(月) 00:35:53
火曜日までなのでまた今晩来ます。
今日はもう寝ます、ごめんなさい
60デフォルトの名無しさん:2006/09/25(月) 00:38:42
Sleep()を実装しろということかな?
61デフォルトの名無しさん:2006/09/25(月) 06:00:33
>>58 これじゃダメ?
void wait(clock_t wait)
{
clock_t total = wait + clock();
while(total > clock());
}
62素人です:2006/09/25(月) 08:33:26
>>12
>>12
コンパイルの『ステータスは終了しました』という文は直りましたが、期待するものは得られませんでした。
精進します。どうもありがとうございました。
63デフォルトの名無しさん:2006/09/25(月) 08:45:40
案外、Sleep() 「で」 実装する、というのが正解だったりして。
64デフォルトの名無しさん:2006/09/25(月) 08:57:57
>>63
Cの宿題なのでたぶんそれはないでしょ。
65デフォルトの名無しさん:2006/09/25(月) 11:37:55
Cの標準ライブラリ&ポーリング無しでできるの?
66デフォルトの名無しさん:2006/09/25(月) 12:24:50
よろしくお願いいたします。
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://hp28.0zero.jp/diary/see_diary.php?dir=569&num=1&uid=akiyu0901&hiduke=20060925&now=0
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C++
[4] 期限:2006年09月30日
[5] その他の制限:なし
67デフォルトの名無しさん:2006/09/25(月) 12:52:06
>>58
ホントに宿題か? ゲーム作ろうとして一定時間でメインループを
まわす方法を調べてるんじゃないの?
68デフォルトの名無しさん:2006/09/25(月) 15:11:27
ならこれで1/60とかで回せる。

#include <windows.h>

void wait(DWORD r)
{
DWORD s = timeGetTime();
while(timeGetTime() - s < 1000 / r);
}

int main(void)
{
for(;;){ wait(60); }
return 0;
}
69デフォルトの名無しさん:2006/09/25(月) 15:15:57
1/60じゃなくてfps60だった。
1secあたり60回更新ね。
70デフォルトの名無しさん:2006/09/25(月) 15:21:49
平気でビジーループを作る人たち。
71デフォルトの名無しさん:2006/09/25(月) 15:35:26
void wait( int time ) { sleep(time); }

これが答えだったら出題者の釣りか罠だな。
72デフォルトの名無しさん:2006/09/25(月) 15:41:20
>>70
単なるサンプルなのにそこまで書くのめんどい。
Winでゲーム作る場合は、DoEvents()関数とか作ってイベント強制通知すればいい。
73デフォルトの名無しさん:2006/09/25(月) 19:48:16
>>68
wait(0)
74デフォルトの名無しさん:2006/09/26(火) 07:41:10
アッー!
75デフォルトの名無しさん:2006/09/26(火) 10:34:22
アッー!
76デフォルトの名無しさん:2006/09/26(火) 10:39:27
吹いたw
77デフォルトの名無しさん:2006/09/26(火) 11:47:41
>>73 ウゼー
78デフォルトの名無しさん:2006/09/26(火) 11:52:23
アッー!
79デフォルトの名無しさん:2006/09/26(火) 15:09:54
c言語の宿題なんですが
Word等のワープロソフトでは、
文章中の文字(単語)のミスや変更などをする場合、
その文字検索して置き換える(検索→置換)機能を持っている.
単語と単語の間には必ずスペースが入っているものとして考えて,
これはどのように処理しているんですか?
80デフォルトの名無しさん:2006/09/26(火) 15:16:06
>>79
文章の構成単語が、辞書に登録されているものと合致する、もしくは固有名詞としての体裁を整えているか確認。
81デフォルトの名無しさん:2006/09/26(火) 15:37:51
>>79
strstr()とかで検索してその部分を置き換えればいいんじゃないの?
82デフォルトの名無しさん:2006/09/26(火) 17:28:10
一瞬、形態素解析の話かとおもた
83デフォルトの名無しさん:2006/09/26(火) 17:47:44
[1] 授業単元:計算科学
[2] 問題文
ランダムウォークの長さ?
5
シード?
3098
とすると,3098 を seed として, 長さ 5 の1次元ランダムウォークを行い,

0 0    0
0 0--------|-------------------
0 0    *
1 -1     *
2 0    *
3 +1    *
4 +2    *
5 +1    *
のように表示するプログラムです.
(図がずれてる時の説明です)
基本の*はlの下にくる形になります
-1だったら左にずれて+1だったら右にずれる形です。
+2ならふたつ右にずれます。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年10月02日09:00まで
84デフォルトの名無しさん:2006/09/26(火) 17:54:24
83はこれを参考にしてつくるそうです

#include <stdio.h>
#include <stdlib.h>/* 乱数を使うために include */
double get_uniform_random(void);
int main(int argc, char **argv){
int n;/* 繰り返し回数 */
unsigned int seed;/* 乱数のシード */
int i;
int s;
printf("繰り返し回数?\n");
scanf("%d",&n);
if(n<0){
n=0;
}
printf("シード?\n");
scanf("%d",&seed);
srand(seed);
for(i=0; i<n; i++){
if( get_uniform_random()<0.5 ){
s=-1;
} else {
s=+1;
}
printf("%d %+3d\n",i,s); /* %+d はいつでも+-をつける. %3d は3桁確保*/
}
return 0;/* 必ず何か返す */
}
double get_uniform_random(){
return ((double)rand())/((double)RAND_MAX+1.0);
}
85デフォルトの名無しさん:2006/09/26(火) 18:56:16
いい加減に書くが、こんな感じで伝わるだろうか?
標準関数使ってるから、関数の意味はググって調べてくれい。
#include <stdio.h>
#define ZERO_POINT 9
#define LENMAX 80
/* 中略 */
int* s;
s = malloc(n * sizeof(int));
/* ここで先のプログラム流用して、s[i]にそれぞれ累計が保存されてるとおもいねえ */
/* +1 -1 +1 +1 +1 という結果だったら s[0]=1, s[1]=0, s[2]=1, s[3]=2, s[4]=3となる感じでひとつ */
{
int i;
char exstr[LEXMAX+1];
char blankstr[]=" ";
for(i=0; i!=n; i++){
if(i==0){
/* <-------> ここのながさ、ZERO_POINT=9文字分
puts(" 0 0 0");
puts(" 0 0---------|-------------------");
puts(" 0 0 *");
continue;
}
strcpy(exstr, "");
strncpy(exstr, blankstr, ZERO_POINT + s[i]);
strcat(exstr, "*");
printf("%3d %+3d%s\n", i+1, s[i], exstr);
}
free(s);
}
86デフォルトの名無しさん:2006/09/26(火) 20:09:50
>>84
もう、答え貰ってるようだけど、とりあえずコピペでそのまま提出して動く ver.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2686.txt
87デフォルトの名無しさん:2006/09/26(火) 20:26:58
[1] 授業単元: 発展プログラミング
[2] 問題文(含コード&リンク): UNIXを今動かしていて、プログラムはCで書いています。

問題:echoクライアント・サーバとあり、echoサーバでクライアントから読み込んだ行を逆順にして返すようなサーバを作れ
。(プログラムを書け)
例えば、ABC\としたら\CBAのようになるようにプログラムを書き換えるということです。
ABC←打ち込む

CBA←表示    これは駄目である。

正しくは
ABC←打ち込む
CBA←表示     つまり改行してはならない。

echoサーバでは文字を逆にするプログラムをC言語で書き、echoクライアントでは、null等を使って改行を無くす。
注:echoサーバで文字を逆にするプログラムはreverse()を使い、buf,buf2を使うこと。
[3] 環境
 [3.1] OS: (Windows/Linux/等々)  XP(ちなみに家のPCはMEです)
 [3.2] コンパイラ名とバージョン: teletarm←UNIX  C言語を書いてるのはメモ帳
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)  C言語です
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 今日中
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
一応、C言語は浅く広く習っています。スレ違いかもしれませんが、よろしくお願いします。
88デフォルトの名無しさん:2006/09/26(火) 20:27:59
すいません・・・ageてしまいました。

echoクライアントのプログラムです

#include <stdio.h>
extern int errno;
#define LINEBUF 1024
main(argc,argv)
int argc;
char *argv[];
{ int s,n,oc,ic;
char buf[LINEBUF+1];
s=connectTCP(argv[1],argv[2]);
while(fgets(buf,LINEBUF+1,stdin)){
write(s,buf,oc=strlen(buf));
for(ic=0;ic<oc;ic+=n) {
n=read(s,&buf[ic],oc-ic);
if(n<0) errexit("socket read failed: %s\n",strerror(errno));
}
fputs(buf,stdout);
}
}
89デフォルトの名無しさん:2006/09/26(火) 20:29:19
echoサーバのプログラムです

#include<sys/types.h>
#include<sys/signal.h>
#include<sys/socket.h>
#include<sys/time.h>
#include<sys/resource.h>
#include<sys/wait.h>
#include<sys/errno.h>
#include<netinet/in.h>
#include<stdio.h>
#define QLEN 5
#define LINEBUF 4096
extern int errno;

main(argc,argv)
int argc;
char *argv[];
{struct sockaddr_in fsin;
int ms,ss,alen,cc;
char buf[LINEBUF];
int heaven();
90デフォルトの名無しさん:2006/09/26(火) 20:29:57
ms=passiveTCP(argv[1],QLEN);
signal(SIGCHLD,heaven);
while(1){
alen=sizeof(fsin);
ss=accept(ms,(struct sockaddr*)&fsin,&alen);
if(ss<0){
if(errno==EINTR) continue;
errexit("accept failed: %s\n",strerror(errno));}
switch(fork()){
case 0:
while(cc=read(ss,buf,LINEBUF)){
if(cc<0) errexit("echo read: %s\n",strerror(errno));
if(write(ss,buf,cc)<0) errexit("echo write: %s\n",strerror(errno));
}
exit(0);
default:
close(ss);
break;
case -1: errexit("fork: %s\n",strerror(errno));
}
}
}
heaven()
{ int status;
while(wait3(&status,WNOHANG,(struct rusage *) 0) >=0) ;
signal(SIGCHLD,heaven);
}
91デフォルトの名無しさん:2006/09/26(火) 20:30:32
>>87
[3]がめちゃくちゃだぞ。
推敲して再書き込みしろ。
92デフォルトの名無しさん:2006/09/26(火) 20:32:30
>>88-90
そのコードは何だ?
93デフォルトの名無しさん:2006/09/26(火) 20:58:58
>>91
[3] 環境
 [3.1] OS: (Windows/Linux/等々)  OSはWindowsXP(学校のです)
 [3.2] コンパイラ名とバージョン: C言語のコンパイラは使っていません。telatarmというソフトでワークステーションに
                     接続して、メモ帳に書いたC言語のプログラムをUNIX上に貼り付けて動かしています
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)  C言語

です。

>>92
上がechoクライアントのプログラムで、下がechoサーバのプログラムです。

echoクライアントは、端末から入力を貰い、echoサーバに送りつけて、echoサーバの返してきたものを端末に表示する
ものです。



94デフォルトの名無しさん:2006/09/26(火) 21:02:00
>>93
いや、コンパイラは使ってるだろうし、上のコードはどうみてもUnix/Linuxのものだぞ。
95デフォルトの名無しさん:2006/09/26(火) 21:21:14
>>94
例えば、コンパイラと言えばvisual studioのような物ですよね?授業では、telatarmというソフトとメモ帳しか使ってない
んですよね。telatarmを起動し接続してemacsで書くのがいつもで、特にvisual studioのようなC言語コンパイラは使って
ないんです。
96デフォルトの名無しさん:2006/09/26(火) 21:31:30
wWwWwWwW
97デフォルトの名無しさん:2006/09/26(火) 21:37:22
[1] 授業単元: 情報科学基礎
[2] 問題文(含コード&リンク): 2つの配列を作り,周波数の異なる2つの正弦波形
               を描くプログラムを書け。
 
[3] 環境  
 [3.1] OS: (Linux
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: ([2006年9月27日)
[5] なし

したのプログラムの続きからお願いします。
#include<stdio.h>
#include<math.h>
int main(void){
int i;
float x[3600],y[3600];
98デフォルトの名無しさん:2006/09/26(火) 21:39:31
>>95
お前の知識レベルはわかったからもう環境に関して説明しなくていいよ。
ただ、reverse()というのが何者かわからないと、解けないから説明しろ。
99デフォルトの名無しさん:2006/09/26(火) 21:43:54
>>95
visual studioはコンパイラではなくIDE(統合開発環境)と呼ばれるものです。
これには、エディタ、コンパイラ、リンカ、デバッガ、UIデザイナなどソフトウェア開発に必要なもの一式が含まれます。

C言語のプログラムを実行するには、C言語のコンパイラか、C言語のインタープリタが必要になります。
一般にC言語のインタープリタが使われることは滅多にないので、普通はコンパイラを使います。

C言語のソースコードを実行ファイルに変換するときに"cc hogehoge.c"とか、"gcc hogehoge.c"とかのコマンドを実行していると思います。
この"cc"や"gcc"がコンパイラと呼ばれるものです。
100デフォルトの名無しさん:2006/09/26(火) 21:44:33
>>98
reverse()に関する説明があるので書きます。

echoサーバで、逆順に返すohceもちゃんと作るように。cでまともに手をいれる最初です。 バッファー用の配列をもう1つ作
って、逆順につめて戻す関数reverse()を作 成してそれを使うという手と、元の配列の上で逆順にしてしまう という手の2つ
が考えられます。
echoサーバは入力が文字列であることは仮定していません。ですから、reverse()するときは、文字数であるccも引数に
渡してやるべきです。reverse(buf,buf2,cc); さて、単純にリバースすると、今のクライアントから送られる文字列 としては
最後に改行コードがあるので、先頭に改行がきてあまり良くないです。 つまり、入力が"ABC\n"を単純にリバースすると
"\nCBA"となります。
そこで、最後の文字が改行だったら、それは折り返さないというtipsを入れることにして、 "ABC\n"を"CBA\n"となるように
するのは駄目です.
ということで、最終的には、エコー逆順は本当に逆順にするだけ。クライアントが送るときに改行はサーバーに送らずに、
戻ってきたら最後に改行も表示とします。
reverserを使わない例として書くと、 int i; char c;を仮定して for(i=0;i<cc/2;i++) {c=buf[i];buf[i]=buf[cc-1-i];buf[cc-1-i]=c;}
 で反転します。
クライアントは、fgets()でbufに読み込んだ時点で、最後が改行になっているから、 文字列の長さがstrlen(buf)で、bufの
最後の場所は長さ引く1だということに注意して、そこに'\0'を入れて やると、最後の改行がつぶせます。あとは逆順から
でも普通のエコーでもサーバに送ってやって 戻ってきたらその文字列を書いて、がfputs()あたりかな、その後ろに改行文
字を書き出す。つまり、putchar(`\n`);すれば いいと思います。
101デフォルトの名無しさん:2006/09/26(火) 21:47:06
>>99
すいません・・。ありがとうございます。ということは、デフォルトがtestとすればgcc test test.c〜のようにコンパイル
しています。
102デフォルトの名無しさん:2006/09/26(火) 22:25:28
66はスルーですか?
103デフォルトの名無しさん:2006/09/26(火) 22:48:54
簡単だしほっときゃ誰かやるんじゃね?
104デフォルトの名無しさん:2006/09/26(火) 22:53:10
簡単なんですか?
今日一日考えましたが、無理ぽでした。
105デフォルトの名無しさん:2006/09/26(火) 23:02:32
簡単だけどC言語でやるのはイヤン
106デフォルトの名無しさん:2006/09/26(火) 23:05:35
まちがった。「C++」。鬱(ry
107デフォルトの名無しさん:2006/09/26(火) 23:05:47
>>66
俺の理解力が足りないのか・・・
意味分からん。
108デフォルトの名無しさん:2006/09/26(火) 23:07:07
ファイルが書き込めない・・・誰か助けて。
【環境】
VC++6.0 MFC(ダイアログベース)
【コード】
void CXfile_MotionReaderDlg::OnButton2()
{
CString str1, str2;

UpdateData(TRUE);
str1 = m_text1; //IDC_EDIT1 メンバ変数 
str2 = m_text2; //IDC_EDIT2 メンバ変数
TRACE( "%s\n", str1 );
TRACE( "%s\n", str2 );

CStdioFile fout( "file.text", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary );
fout.WriteString( m_text1 + "\n" );
fout.WriteString( m_text2 );
fout.WriteString( "\x1a" );
}

TRACEの表示ではちゃんと自分が欲しいデータが表示されているのにも
かかわらず、ちゃんとカキコみできない。
109デフォルトの名無しさん:2006/09/26(火) 23:13:40
>>108
多分関係ないと思うけどCloseはしないのか?
110デフォルトの名無しさん:2006/09/26(火) 23:19:28
>>107
どこがわからないのですか?
補足しますが。
ぜんぜん分からないので、アドバイスだけでもお願いします!
111108:2006/09/26(火) 23:22:32
>>109
自分素人なもんで・・・、closeなんてあるんでつか?


エディットボックスに直接「文字列」を入力したら
ちゃんとファイルを保存できるんだけど、

エディットボックスへ、文字情報を渡して保存ボタン(OnButton2)を
押すととたんにファイルの保存ができなくなる。





112108:2006/09/26(火) 23:26:08
エディットボックスへ文字列を渡す処理は
以下のように行っておりまつ。
この処理を行うとファイルが書き込めなくなります。

OnButton1()
{
CString FileName;
CFileDialog *dlgFile;
dlgFile = new CFileDialog(
TRUE,_T("wav"),_T("*.wav"),OFN_FILEMUSTEXIST,_T("Wave(*.wav)|*.wav|全て(*.*)|*.*||")// フィルタ
);

if(dlgFile->DoModal() == IDOK)
{
FileName = dlgFile->GetPathName();//選択ファイル名取得
m_text2 = FileName;
UpdateData(FALSE);
}
delete dlgFile;
}

113108:2006/09/26(火) 23:33:05
>>
連続カキコすまそ。
Closeわかりまつた。
114デフォルトの名無しさん:2006/09/26(火) 23:52:53
>>97
描くってgnuplotを呼び出して描くのかなー

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

int main(void){
int i;
float x[3600],y[3600];
FILE *fp;

if( (fp=fopen("tmp.dat","w"))==NULL){
printf("ファイルオープンエラー");
return EXIT_FAILURE;
}

for(i=0;i<3600;i++){
x[i]=sin(i);y[i]=sin(2*i);
fprintf("%d %f %f\n",i,x[i],y[i]);
}
fclose(fp);

めんどくさくなった続きよろ
115デフォルトの名無しさん:2006/09/27(水) 00:09:01
遅くなりましたが>>85さん>>86さんありがとうございました!!
116デフォルトの名無しさん:2006/09/27(水) 00:14:30
>>114
×:x[i]=sin(i);y[i]=sin(2*i);
○:x[i]=sin(i*3.14/360);y[i]=sin(2*i*3.14/360);
117108:2006/09/27(水) 00:26:26
原因をここまで突き止めました。
下記のソースコードを実行しても
ファイルがカキコミできません。
どなたか、ファイルが書き込みできない理由を
教えてください。

void CXfile_MotionReaderDlg::OnButton1()
{
CFileDialog *dlgFile;

dlgFile = new CFileDialog(
TRUE, // 種類 TRUE : FileOpen
_T("jpg"), // デフォルトの拡張子
_T("*.jpg"),// 初期ファイル名
OFN_FILEMUSTEXIST, // ダイアログの設定フラグ:既存のファイル
_T("Wave(*.jpg)|*.jpg|全て(*.*)|*.*||")// フィルタ
);

if(dlgFile->DoModal() == IDOK)
{
CStdioFile fout( "file.text", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary );
fout.WriteString( dlgFile->GetPathName() );
fout.Close();
}

delete dlgFile;

}
118デフォルトの名無しさん:2006/09/27(水) 00:50:53
すいません!宿題の締め切り間違えていました!
明日までだったので、よろしくお願いします!

[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://hp28.0zero.jp/diary/see_diary.php?dir=569&num=1&uid=akiyu0901&hiduke=20060925&now=0
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C++
[4] 期限:2006年09月27日
[5] その他の制限:なし
11997:2006/09/27(水) 00:58:08
>>114
そうです。gnuplotでグラフを描きます。
よろしくお願いします。
120デフォルトの名無しさん:2006/09/27(水) 00:58:59
118が寝ている間に宿題やれってよwwww
121 ◆ccqXAQxUxI :2006/09/27(水) 01:04:03
>>120
ここってそういう板じゃないんですか?
122デフォルトの名無しさん:2006/09/27(水) 01:10:00
>>119
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2687.txt

たぶんこれで動くんじゃね
linux環境内からためせねーけどやってみて。
グラフ描くところは
http://akita-nct.jp/~yamamoto/lecture/2005/2E/29th/html/node4.html
を参考にしました。
123デフォルトの名無しさん:2006/09/27(水) 01:25:20
>>66
ベースのとこだけ作った。そして飽きた。
タグID.txtを作るところまで。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2688.txt
ひさしぶりにC++使ったらちょっと楽しかった。
124デフォルトの名無しさん:2006/09/27(水) 01:31:25
>>117
今試してみたが、
file.textに、CFileDialogで選択したファイルのフルパスが、きちんと書き込まれたぞ。
file.textを排他ロックしてるか、読み取り専用属性になってるんじゃね?
125デフォルトの名無しさん:2006/09/27(水) 01:34:06
>>123
ありがとうございます!!
ほんとに感謝です!
これを参考に解析のプログラムをこれから頑張ってみたいと思います。
12697:2006/09/27(水) 01:40:58
>>122
ありがとうございます。
早速実行してみます。
127デフォルトの名無しさん:2006/09/27(水) 02:54:57
>>118よ、ほれ。
---- analyze.c ----
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
char buf[2048];
sprintf(buf, "cmd.exe /c C:\Python25\python.exe analyze.py %s", argv[1]);
return system(buf);
}
---- analyze.py ----
import os, os.path, sys, datetime
tagMacTable = {}
tempFileNames = set()
dirname = "RFIDTAG"
for line in file(sys.argv[1], "r"):
 line = line.strip()
 y, m, d, hh, mm, ss, tagid, mac, batflag, id = line.split(",")
 fn = os.path.join(dirname, tagid + ".txt")
 tempFileNames.add(fn)
 print >> file(fn, "a"), line
 tagMacTable.setdefault((tagid, mac), []).append(line)
for (tagid, mac), log in tagMacTable.items():
 ts = []
 for line in log:
  y, m, d, hh, mm, ss, tagid, mac, batflag, id = line.split(",")
  ts.append(datetime.datetime(*tuple(map(int, [y, m, d, hh, mm, ss]))))
 if (max(ts) - min(ts)).seconds >= 5 or mac == "001047FB18CB":
  for line in log: print >> file(os.path.join(dirname, tagid + mac + ".txt"), "w"), line
map(os.remove, tempFileNames)
128デフォルトの名無しさん:2006/09/27(水) 02:58:17
おっと失敬、最後から2行目、
  for line in log: print >> file(os.path.join(dirname, tagid + mac + ".txt"), "w"), line

  for line in log: print >> file(os.path.join(dirname, tagid + mac + ".txt"), "a"), line
の間違い。
129デフォルトの名無しさん:2006/09/27(水) 07:57:25
C++って言ってるのに、CとかPythonとか提示するやつがいるな。
130デフォルトの名無しさん:2006/09/27(水) 08:15:19
87です。echoクライアントの改行の所をやってみたのですが・・・。

#include <stdio.h>
extern int errno;
#define LINEBUF 1024
main(argc,argv)
int argc;
char *argv[];
{ int s,n,oc,ic;
char buf[LINEBUF+1];
s=connectTCP(argv[1],argv[2]);
while(fgets(buf,LINEBUF+1,stdin)){
buf[strlen(buf)-1]='\0';
write(s,buf,oc=strlen(buf));
for(ic=0;ic<oc;ic+=n) {
n=read(s,&buf[ic],oc-ic);
if(n<0) errexit("socket read failed: %s\n",strerror(errno));
}
fputs(buf,stdout);
putchar('\n');
}
}

どうでしょうか?
131デフォルトの名無しさん:2006/09/27(水) 08:44:08
それだとファイルの最後が改行で終わってないと、最後の1文字を
処理できない。それに、空行時はスキップするようにした方がいいと思う。
132デフォルトの名無しさん:2006/09/27(水) 08:45:54
>>131
すいません・・・これ以上思いつかないんですがヒントをいただけませんか?
133デフォルトの名無しさん:2006/09/27(水) 08:53:53
>>129
拡張子を.cppか.ccに変更+Pythonというランタイムが必要、
と言い放てばいいんじゃね?
134デフォルトの名無しさん:2006/09/27(水) 09:14:47
>>127
ありがとうございます!
みなさんほんとに親切な方ばかりで、、、
助かりました。何とか今日中にレポートとして仕上がりそうです。
ほんとにほんとにありがとうございました!!!
135デフォルトの名無しさん:2006/09/27(水) 16:37:07
文字列を反転させる関数なんですが、もっと効率良く書けますか?
スワップの所はxorのが速いでしょうか?
それか配列の[]のアクセスよりポインタの*の方が速いでしょうか?

void reverse(char *s)
{
int l = 0, r = strlen(s) - 1;
char t;

while(l < r){
t = s[l];
s[l] = s[r];
s[r] = t;
++l;
--r;
}
}
136デフォルトの名無しさん:2006/09/27(水) 16:43:55
>>135
xor使うな。s[l] == s[r]の時ゼロになってしまうぞ。
配列とポインタは、どちらを使っても最近のコンパイラは同じようなコードを吐く。
137デフォルトの名無しさん:2006/09/27(水) 16:52:34
>>136
そうですか。
という事はこれが一番効率良いコードでしょうか?
138(^-^) ◆MONSOON/qo :2006/09/27(水) 16:58:06
>>137
CPUレジスタを使う
139(^-^) ◆MONSOON/qo :2006/09/27(水) 16:59:50
>>137
関数ではなくマクロにする
140デフォルトの名無しさん:2006/09/27(水) 17:24:11
C/C++分かる人ってアセンブラも分かる人が多いんですかね?
ここで教えてくれてる人ってアセンブラも使えますか?
141デフォルトの名無しさん:2006/09/27(水) 17:36:08
>>136
> s[l] == s[r]の時ゼロになってしまうぞ。
排他論理使ってもスワップはできる
142デフォルトの名無しさん:2006/09/27(水) 17:37:16
>>140
アセンブラも少しはできるけど、激しくスレ違い
143デフォルトの名無しさん:2006/09/27(水) 17:39:25
現代CPUの都合から言えばxor swapはアウトオブオーダー実行できないから遅い。
普通のswapですむ状況ならそっちを使うほうがマシ
144デフォルトの名無しさん:2006/09/27(水) 17:48:00
145デフォルトの名無しさん:2006/09/27(水) 17:58:37
これは遅い?
a = b - a;
b -= a;
a += b;
146(^-^) ◆MONSOON/qo :2006/09/27(水) 18:00:51
交換が正しく行われているかは不明だけど
マクロの方が4倍以上速い
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define N 1000
#define reverse_macro1(s) l=strlen(s)-1;for(n=0;n<l/2;n++){temp=s[n];s[n]=s[l-n];s[l-n]=temp;}

void reverse(char *s){
int l = 0, r = strlen(s) - 1;
char t;
while(l < r){
t = s[l];s[l] = s[r];s[r] = t;
++l;--r;}}

main(){
char a[N+1];
register char temp;
int n,l;
clock_t s=0,t=0;

for(n=0;n<N;n++)a[n]=rand()%75+48;a[N]='\0';
s=clock();for(n=0;n<1000000;n++)reverse_macro(a);s=clock()-s;
t=clock();for(n=0;n<1000000;n++)reverse(a);t=clock()-t;
printf("macro no speed = %d \n135 no code = %d\n",s,t);}
147つーか、お前が余計なお世話:2006/09/27(水) 18:04:58
>>138
register宣言はコンパイラによって無視されるか余計なお世話。
>>139
今時のコンパイラは積極的にインライン展開するから余計なお世話。
148デフォルトの名無しさん:2006/09/27(水) 18:08:00
>>146
マクロを展開した後の形をみて己の馬鹿さ加減を悔いれ
149デフォルトの名無しさん:2006/09/27(水) 18:08:57
>>146
複文マクロをdo while(0)でくくる常識も知らない奴は消えてほしいです。
150(^-^) ◆MONSOON/qo :2006/09/27(水) 18:13:04
スマソ
勉強になった
151デフォルトの名無しさん:2006/09/27(水) 18:15:28
最近は、大抵の CPU がそもそもエクスチェンジの命令持ってるから。
x86系なら XCHG
http://www5c.biglobe.ne.jp/~ecb/assembler/9_2.html

コンパイラがよっぽど馬鹿じゃない限り、一時領域使おうが加減の演算使おうが
xor 使おうが、この種のエクスチェンジ命令に最適化されるはず。
よっぽどコンパイラが信用ならんのなら、実際に計測してみてコーディングに拘ってみたら。
大抵の CPU がエクスチェンジ命令を備える現在、高級言語のでもエクスチェンジを行う
演算子があれば便利なんだけどね。

というか、リソースかつかつの20年前のプログラミングや、物理的にリソースが制限される
組み込み系ないら話しは分かるけど、現代の学校の宿題レベルでそんな所に拘る必要は
皆無だろうと。
152デフォルトの名無しさん:2006/09/27(水) 18:17:24
叩かれてるなぁw
153(^-^) ◆MONSOON/qo :2006/09/27(水) 18:17:31
しかも交換してるか確認してなかったから
無限ループしてるっぽい
154(^-^) ◆MONSOON/qo :2006/09/27(水) 18:29:15
修正したらマクロが鈍くなった

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define N 1000
#define reverse_macro(s) l=strlen(s)-1;for(m=0;m<l/2;m++){temp=s[m];s[m]=s[l-m];s[l-m]=temp;}


void reverse(char *s){
int l = 0, r = strlen(s) - 1;
char t;
while(l < r){
t = s[l];s[l] = s[r];s[r] = t;
++l;--r;}}

main(){
char a[N+1];
register char temp;
int m,n,l;
clock_t s=0,t=0;

for(n=0;n<N;n++)a[n]=rand()%75+48;a[N]='\0';
s=clock();for(n=0;n<1000000;n++){reverse_macro(a);}s=clock()-s;
t=clock();for(n=0;n<1000000;n++)reverse(a);t=clock()-t;
printf("macro no speed = %d \n135 no code = %d\n",s,t);
}
155デフォルトの名無しさん:2006/09/27(水) 18:42:59
こやつの言っている高速化が、
手法として古くさい上に、どうでもいい部分だからな
最近じゃ小手先のコーディングテクニックの高速化なんて、
膨大なCPUクロック上の些末な変化でしかない
よほどアホな書き方をするとか、実行環境がチープでない限り実測時間には影響しない
156デフォルトの名無しさん:2006/09/27(水) 18:43:42
マクロ覚えて三日目ぐらいの初心者が書いたような最低なゴミコードだな。
せめてmain関数のスコープを汚すな。そして{}でくくるのはマクロでやれ。
ついでに複数回評価の弊害を起こすコードもやめろ
本当はコードの中身も訂正したいけど。正直酷すぎるからその辺は放置
#define reverse_macro(a) \
    do{ char*s=(a);int l=strlen(s)-1,n;char temp;\
    for(n=0;n<l/2;n++){temp=s[n];s[n]=s[l-n];s[l-n]=temp;}}while(0)
157(^-^) ◆MONSOON/qo :2006/09/27(水) 18:51:24
2の方が速いんですけどなぜでしょうか?

#define reverse_macro1(s) {l=strlen(s)-1;for(m=0;m<l/2;m++){temp=s[m];s[m]=s[l-m];s[l-m]=temp;}}

#define reverse_macro2(s) {l=0;r=strlen(s)-1;while(l<r){temp=s[l];s[l]=s[r];s[r]=temp;l++;r--;}}



158デフォルトの名無しさん:2006/09/27(水) 18:58:26
にほんごでおk
159デフォルトの名無しさん:2006/09/27(水) 18:59:53
Cって変数全部スタックに積んじゃうんじゃないの?
160デフォルトの名無しさん:2006/09/27(水) 19:01:23
>>159
さぁ?
レジスタ使うかもしれんし、スタック使うかもしれんし、そもそもスタックという概念のない環境もあるかもしれんし
161デフォルトの名無しさん:2006/09/27(水) 19:01:35
>>157
forループで毎回「l/2」「l-m」[l-m]やってるからでしょ。
162デフォルトの名無しさん:2006/09/27(水) 19:06:40
猥談はそのへんにしといて

次の宿題まだー?
163(^-^) ◆MONSOON/qo :2006/09/27(水) 19:15:05
[宿題]
改行区切りで、一行1000文字以下のファイルが2つあります
ファイルの一方に存在しない行を抽出してください
164delta ◆OM5/jtEIXw :2006/09/27(水) 19:19:28
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
date.txtを入力データファイルとし、これから読み出しその各要素の中から最大値を求めその結果を表示するプログラムをポインタを使って作成せよ。
コマンドライン引数の個数及び文字列には、変数argc及び文字配列argv[] を使用すること。
穴埋め形式の問題です。主に分からないところは、while, forの部分です。
分かるところは自分なりに埋めてみました。

プログラム→ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2690.c
入力データファイル→ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2691.txt

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年09月27日 PM11:00
[5] その他の制限: 上記に書いたとおりです
165デフォルトの名無しさん:2006/09/27(水) 19:21:07
>>163
がんばってね
166デフォルトの名無しさん:2006/09/27(水) 19:25:40
締め切り過ぎた問題もってこられても困る。
167デフォルトの名無しさん:2006/09/27(水) 19:29:48
ヒント:PM
168(^-^) ◆MONSOON/qo :2006/09/27(水) 19:36:49
>>165
ファイルサイズが20Mバイト以上とかだとアルゴリズムが
大事だと思うんですけどどういった戦略でいけばいいんでしょうか?
169デフォルトの名無しさん:2006/09/27(水) 19:50:41
>>164
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2692.txt

dateじゃなくてdataだろってずっとつっこみたい気持ちを抑えながらやりました。
170デフォルトの名無しさん:2006/09/27(水) 19:55:13
>>169
if(max < *p++) max = *p;
これは
if(max < *p++) max = p[-1];
こうだね。
なんなんだ、このウンコな問題は。
171デフォルトの名無しさん:2006/09/27(水) 19:56:33
>>168
富豪的ぷろぐらみんぐ
172デフォルトの名無しさん:2006/09/27(水) 19:58:55
date[i] = value;i++;
↑これ、date[i++] = value;でいいのでは?

for(i = 0 ;date[i] != 0 ; i++)
printf("%9d\n",date[i] ); /* 配列要素の表示 */
↑これ、参照用ポインタ使わなくていいの?

while(*p ){
↑個人的にこの無神経な書き方は許せない。

いや、わざとなんだろうけどさ。
173デフォルトの名無しさん:2006/09/27(水) 20:01:31
暫くこのスレご無沙汰だったがなんだこの糞コテは?
174デフォルトの名無しさん:2006/09/27(水) 20:01:43
>>163
え・・・こんな質問されると普通に萎える。
175delta ◆OM5/jtEIXw :2006/09/27(水) 20:03:25
>>169-170
どうもありがとうございました
こんなに早く回答してもらえるとは思ってたなかっただけに嬉しかったです
でもこれがうんこな問題なんですか…
どこが駄目なのか全然分からないorz
176デフォルトの名無しさん:2006/09/27(水) 20:08:08
あぼーんだらけw
177delta ◆OM5/jtEIXw :2006/09/27(水) 20:42:33
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2693.txt

答えていただいたのを入れてコンパイルしたら
「45: 文法エラー at end of input 」とでてしまいました
これで文法合ってると思ったんですけど何処が違うんですか?
178デフォルトの名無しさん:2006/09/27(水) 20:50:24
>>177
if(argc != 2){
printf("\n使用法 : プログラム名 入力ファイル名\n");
exit(-1);

が、閉じてない。
179(^-^) ◆MONSOON/qo :2006/09/27(水) 20:51:27
>>177
括弧がたらないよ
最後に } をつける
180デフォルトの名無しさん:2006/09/27(水) 20:56:33
通るまで自分でいじれよ・・・
181デフォルトの名無しさん:2006/09/27(水) 21:16:44
コンパイルもせずに回答アップするなよw
182デフォルトの名無しさん:2006/09/27(水) 21:23:58
>176
漏れもw
183delta ◆OM5/jtEIXw :2006/09/27(水) 21:48:48
>>178-179
警告は出ましたがコンパイル通りました
本当に何から何までありがとうございました

そろそろ真面目に自分で勉強しないとまずいと思い始めてきました
ここにいる皆さんは独学でプログラミングできるようになったんでしょうか?
大学の授業についていけてないので危機感を持つようになりました…
184デフォルトの名無しさん:2006/09/27(水) 22:45:35
>>183
僕は授業についていけませんでしたが、
こんなんあったら便利だろうなという作りたいものが後々でてきたので
C言語を勉強しなおしてある程度のものは作れるようになりました。
スレ違いですどうもありがとうございました。
185デフォルトの名無しさん:2006/09/27(水) 22:45:51
>>183
プログラムを仕事や趣味でやるつもりなら、教わらないとできないのはヤバい。
そんなつもりがなければ、なんとか単位とるまで頑張って、試験終わったら忘れればいい。
186デフォルトの名無しさん:2006/09/27(水) 22:53:56
C言語で記述された以下のプログラムの実行結果(画面の出力結果)を記してください。

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

int x[6]={7,3,5,4,1,9},i=0;
i=x[i=2];
printf("x[%d]=%d x[%d]=%d\n",i,x[i],i-3,x[i-3]);


よろしければ解説もよろしくおねがいします。
187デフォルトの名無しさん:2006/09/27(水) 23:01:30
>>186
出力結果
x[5]=9 x[2]=5

#include<stdio.h>
void main(void)
{
int x[6]={7,3,5,4,1,9},i=0;
i=x[i=2];/*x[2]は5なのでiに5が代入される*/
printf("x[%d]=%d x[%d]=%d\n",i,x[i],i-3,x[i-3]);/*配列xの5番目の要素は9。 配列xの5-3=2番目の要素は5。*/
}


っていうか}が}になってるみたいだけど自動的に変換されるのか?のテスト。
188デフォルトの名無しさん:2006/09/27(水) 23:04:09
5番目だとちょっとわかりにくくね?そこらへんはすでに勉強してると思うけど・・・
189デフォルトの名無しさん:2006/09/27(水) 23:07:30
>>186
解説
全角の記号が各所に埋め込まれており、C言語の体裁をなしていないため、コンパイル不能です。
当然プログラムの実行も不可能なので、解無し。
190デフォルトの名無しさん:2006/09/27(水) 23:12:44
>>187
わかりやすい解説でよくわかりました、ありがとうございます。
{が{になっているのはC言語のソフトをもっていなくて今自分で書いたからです。
191delta ◆OM5/jtEIXw :2006/09/27(水) 23:17:34
>>184-185
そうなんですか
将来プログラム関係の仕事につきたいので真面目に勉強してみます
どうもありがとうございました
あとすれ違いすいませんでした
192デフォルトの名無しさん:2006/09/27(水) 23:23:01
もう2つあるんですができればおねがいします。

#include<stdio.h>
void main(void)
{
int i=0,j=1;
while(i<5){
i++;
j=j*i;
}
printf("1*2*・・・*5=%d\n",j);
printf("i=%d\n",i);
}

できれば解説も書いていただけるとありがたいです。宜しくお願いします。
193デフォルトの名無しさん:2006/09/27(水) 23:24:19
>>192の問題はプログラムの実行結果(画面の出力結果)を記してください。
194デフォルトの名無しさん:2006/09/27(水) 23:26:22
1*2*・・・*5=120
i=5

1x2x3x4x5を電卓で計算してみればわかるんじゃない?
195デフォルトの名無しさん:2006/09/27(水) 23:40:37
【質問テンプレ】
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2694.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2695.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2696.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2697.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2698.txt
data01〜05までの5つのデータテキストがある。(上のリンク)このテキストを読み込み、
同じ位置のデータそれぞれのの和を取り結果をsum.txtに書き出し、さらに
それぞれ位置のデータを5で割ったものを平均値としてAverage.txtに出力するプログラムを
つくりなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 9/30
[5] その他の制限:
196デフォルトの名無しさん:2006/09/27(水) 23:43:44
>>192
while(i<5){ // 5未満の間ループする
i++;  //i=1
j=j*i; //1*1=1
i++;  //i=2
j=j*i; //1*2=2
i++;  //i=3
j=j*i; //2*3=6
i++;  //i=4
j=j*i; //6*4=24
i++;  //i=5
j=j*i; //24*5=120

こんな風に分解して考えると分かりやすいかも?
197デフォルトの名無しさん:2006/09/27(水) 23:46:28
追加
data01〜05まではそれぞれ20*20の数値データ。
<考え方>
 data01 data02 data03
1 2 3  4 5 6  7 8 9
4 5 6  7 8 9  1 2 3
7 8 9  1 2 3  4 5 6

<sum.txtには>
A B C
D E F
G H I

たとえばAには1+4+7の結果が入る
Fには6+9+3の結果が入る。

Average.txtにはそれぞれの平均値が入るので、この場合
和を取った結果AからFをそれぞれ3で割ったものが入る。
(問題文では5で割ったもの)
198195:2006/09/28(木) 00:54:01
追加修正
【質問テンプレ】
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2694.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2695.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2696.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2697.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2698.txt
data01〜05までの5つのデータテキストがある。(上のリンク)このテキストを読み込み、
同じ位置のデータそれぞれのの和を取り結果をsum.txtに書き出し、さらに
それぞれ位置のデータを5で割ったものを平均値としてAverage.txtに出力するプログラムを
つくりなさい。
AAverage.txtのデータからbe1.txtのデータを引きDivision.txtに出力しなさい。
be01はhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2699.txt
(ろだにあります。)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 9/30
[5] その他の制限: 特になし
お願いします!!
199デフォルトの名無しさん:2006/09/28(木) 01:00:19
>>168
std::set_symetric_difference()
200199:2006/09/28(木) 01:04:03
綴りを間違った。set_symmetric_differenceだった
201デフォルトの名無しさん:2006/09/28(木) 01:10:16
>>198
指針
・Matrixを次のように定義する
 int rows, cols;
  int[][] m;
・テキストファイルからMatrixを読み込めるようにする
・Matrixに実数倍のMatrix加算をできるようにする
・Matrixを実数倍できるようにする
・Matrixをテキストファイルに書き出せるようにする

これだけなんだが、めんどう
202195:2006/09/28(木) 01:47:18
>>201
そうなんですよ。
特に割るのと引くののやり方がよくわかりません。
涙が出そうです。
203デフォルトの名無しさん :2006/09/28(木) 01:47:19
複雑で申し訳ございませんが、Cで以下のことが出来るでしょうか?

Cで作成したexeファイルをURLを引数に実行したら、
そのURLがインターネットエクスプローラーで開く。

イメージはtest.exeという名前のCのexeファイルを作って
test.exe http://www.yahoo.co.jp
を実行したら、インターネットエクスプローラーで
http://www.yahoo.co.jpのページが開くということです

難しいですが、どうぞ宜しくお願いいたします。
204デフォルトの名無しさん:2006/09/28(木) 01:55:51
>203
そのURLで、ダミーの .urlファイルを作成し、ShellExecuteすれば開ける
205デフォルトの名無しさん:2006/09/28(木) 01:58:33
>>202
ううーん…
typedef struct _matrix{
  int rows, cols;
  int[][] m;
} Matrix; //のように定義しちゃう
----------------------------------------------------------
Matrixを総なめするには
Matrix* m=CreateMatrix(10,10); //みたいな関数があるとして、
int row,col;
for(row=0;row<m->rows;row++){
  for(col=0;col<m->cols;col++){ printf("%d ",m->m[row][col]); }
  printf("\n");
}
みたいにすればいい
             -----------------------------
void add(Matrix* src_out, int by, const Matrix* src){  //みたいにすれば整数倍だってできた
  if(!checkSameModel(src_out,src)) return;  //同型じゃない
  for(…) //row
    for(…)  //col
      src_out->m[row][col]+=by*src->m[row][col];
}
             -----------------------------
void writeFile(FILE* fp, const Matrix* src){  //ほら、ファイルに書けた。
  for(…){ //row
    for(…){  //col
      printf("%d\t",src->m[row][col]);
    }
    printf("\n");
  }
}
             -----------------------------
206デフォルトの名無しさん:2006/09/28(木) 01:59:16
>>205
トチ狂っとるwwwwwwwwwwwwwwww
寝れwwwwww
207195:2006/09/28(木) 02:18:01
>>205
大変ありがたいご助言ですが、
私にはなんだか余計に理解できないのですが・・・。
すみません。
もっと初心者向けの解説をお願いいたします〜(涙)
208 ◆sUfWYz9MSA :2006/09/28(木) 03:15:47
[1] 授業単元:プログラミング(入門)
[2] 問題文
 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2701.txt 
 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2702.txt
 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2703.txt
 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2704.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: C
[4] 期限: 2006年09月29日12:00まで
[5] その他の制限:
 ・ 特に指示がない限りは(main)関数が必要です。
 ・ 特に記述がなければ、stdio.h以外の関数は使用できません。

初心者です。
みなさんのソースを参考にさせてください。
宜しくお願いします。
(返信が遅くなるかもしれません。)
209デフォルトの名無しさん:2006/09/28(木) 03:27:15
>>195
1までやった。
同じようにすりゃできっだろwww
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2705.txt
210209:2006/09/28(木) 03:43:55
211デフォルトの名無しさん:2006/09/28(木) 03:44:14
>>209
ひとつずつ書くのじゃなく、もっとエレガントな方法ないかな。
一個ずつやんないと無理かね?

freadとか使ったらどうだ?
212(^-^) ◆MONSOON/qo :2006/09/28(木) 03:59:35
>>209
なんだよこの無駄の多そうなソースは
213デフォルトの名無しさん:2006/09/28(木) 04:03:52
214デフォルトの名無しさん :2006/09/28(木) 08:35:30
>204

色々試したのですが、どうもうまくいきません。
具体的にはどのようなプログラムになるのでしょうか?
教えて頂ければうれしいです。
どうぞどうぞ宜しくお願いいたします。
215デフォルトの名無しさん:2006/09/28(木) 08:52:24
>>203-204
WindowsならShellExecuteに直接URLを渡せば動く。
ShellExecute(0, TEXT("open"), TEXT("http://www.google.com/"), 0, 0, SW_SHOW);
IE以外を標準のブラウザにしている場合はそれで開かれる。
強制的にIEで開かせる(単純な)方法もあるが。
216デフォルトの名無しさん:2006/09/28(木) 09:22:54
>>208
stdio.hっていつから関数になったの?
基礎力付けなきゃな。かえれ
217デフォルトの名無しさん:2006/09/28(木) 11:41:50
>>208
問題3、4だけやった
double absdiff(double a, double b)
{
return a>b ? a-b : b-a;
}

int count(int target, int data[], int num)
{
int cTarget = 0;

if (num < 1) return 0;
while (num-- >= 0)
if (data[num] == target) ++cTarget;

return cTarget;
}

int max(int data[], int num)
{
int iMax;

--num;
for (iMax=num--; num>=0; --num)
if (data[num] > data[iMax]) iMax = num;

return data[iMax];
}
218デフォルトの名無しさん:2006/09/28(木) 11:43:01
int mylen(char str[])
{
int cLen = 0;

while (*(str++))
++cLen;

return cLen;
}

void casecpy(char fromstr[], char tostr[])
{
while (*fromstr)
{
if (isupper(*fromstr))
*tostr = tolower(*fromstr);
else if (islower(*fromstr))
*tostr = toupper(*fromstr);
else
*tostr = *fromstr;

++fromstr, ++tostr;
}
*tostr = '\0';
219デフォルトの名無しさん:2006/09/28(木) 12:25:23
将来マになりたいのなら、ここに丸投げする時点で見込み無し。
大学辞めて働け。
220デフォルトの名無しさん:2006/09/28(木) 12:34:12
激しく同意。

丸投げしてくる内容は糞簡単なものばかりだしな
221デフォルトの名無しさん:2006/09/28(木) 12:53:42
>>212
しょしんしゃはくちだししなくていいよ^^
222デフォルトの名無しさん:2006/09/28(木) 13:06:48
>>208
(1)
#include <stdio.h>

struct stable{
float bmi; char comment[30];
};

int main(void)
{
stable table[] = {
{18.5, "体重を増やしましょう"},{25.0, "体重を維持しましょう"},{30.0, "体重を減らしましょう"},{9999, "大幅に体重を減らしましょう"},
};

float h, w, bmi;
printf("身長を入力して下さい(単位cm)\n");
scanf("%f", &h);
printf("体重を入力して下さい(単位kg)\n");
scanf("%f", &w);

bmi = w / (h / 100.f) / (h / 100.f);

for(int i = 0; i < sizeof(table) / sizeof(stable); ++i){
if(table[i].bmi > bmi){ printf("BMI: %f\n%s\n", bmi, table[i].comment); break; }
}

return 0;
}
223195=197=198:2006/09/28(木) 13:13:35
どなたかどうぞよろしくお願いいたします。
ちっともうまくいきませぬ。。。
224デフォルトの名無しさん:2006/09/28(木) 13:20:16
プログラム学ぶ大学なんてあんの?
授業のうちの一つでプログラムがあったってだけで、単位得するくらいじゃね?
別にプログラマー目指してるわけじゃないだろwwwwwwwwww


プログラマーになりたいのに丸投げしてるんだったら終わりだな
225デフォルトの名無しさん:2006/09/28(木) 13:23:27
>>195
>>210でできてんじゃん
226デフォルトの名無しさん:2006/09/28(木) 13:37:20
>>224
最後の1行には同意だが、情報系の大学でもコピペで提出する奴は多いぞ
227デフォルトの名無しさん:2006/09/28(木) 13:47:41
俺の大学では、パクリかどうか検出するソフトでチェックされると脅されていたので、コピペはできなかった。
228デフォルトの名無しさん:2006/09/28(木) 13:51:17
コピペチェックソフトって作るのおもしろそうだね
229デフォルトの名無しさん:2006/09/28(木) 13:52:34
>>226
情報系の大学があったか。
実態を知らないけど、情報の専門学校となにが違うんだ?


プログラマ目指しててコピペするやつは人として終わってるな。
なんのための授業で、なんのための宿題かがわかってないな。
自分に何の利益がないことも、目の前の「提出しないとやばい」って事だけに目を向けすぎ
230デフォルトの名無しさん:2006/09/28(木) 13:53:59
それに騙される学生も学生だよな。
チェックするって言ったって、出来るのは精々、部分一致のチェック位だろ。
一致したとしてもパクリとは限らないしな。
231デフォルトの名無しさん:2006/09/28(木) 13:55:57
>>229
別にC言語がすべてじゃないし、将来C言語は使う気がないなら捨てても構わないと思う。
もっと高級なことに力を費やすのは悪くない。
232デフォルトの名無しさん:2006/09/28(木) 13:57:29
>>229
プログラムの勉強だけをやる→専門学校
主にプログラムの勉強をする(他にも勉強する)→情報系の大学
あとはあれだ、勉強する期間の違いとか、学士が貰えるとかそこらへんじゃない?

まぁ人として終わってるのは同意だけど、いまさらそれを言ったところで意味無いわけで。
233デフォルトの名無しさん:2006/09/28(木) 14:01:04
>>230
アメリカではパクリに対する認識が厳しくて(アカデミックな提出物でパクリと見なされると、犯罪になることもある)、パクリの傾向を統計的に集めている機関もある。
そういう統計に基づいてるから、けっこう当たるみたいよ。
234デフォルトの名無しさん:2006/09/28(木) 14:06:28
>>233
それ面白いな。
日本もやればいいのに・・・。あほ学生があほのまま卒業して、
はりぼての学歴振りかざして社会に出てこられてもね・・・。
235デフォルトの名無しさん:2006/09/28(木) 14:11:29
ようするに高卒プログラマの無能高学歴に対するひがみかwwwwwwwwwwww
236デフォルトの名無しさん:2006/09/28(木) 14:17:35
>>231
C言語が大事とか関係ないし。
授業の一つもまともにこなせない事に問題があるって話だ。

>>235
プログラマに学歴なんて関係ない
237デフォルトの名無しさん:2006/09/28(木) 14:23:53
まぁ大学出るだけで給料変わってくるし少しはひがみたくもなるわな
238デフォルトの名無しさん:2006/09/28(木) 14:26:52
高卒が紛れ込んでる、とかあり得ない予想はよそう。
239デフォルトの名無しさん:2006/09/28(木) 14:29:27
>>230
普通にdiff取ったら、関数まるごとレベル…
いや、全ソース、改行位置すら同じだったりするんじゃないか?w
240デフォルトの名無しさん:2006/09/28(木) 14:31:20
吐き気がする
241デフォルトの名無しさん:2006/09/28(木) 14:33:36
学歴コンプレックスのニートが相変わらず多いようだな。
242デフォルトの名無しさん:2006/09/28(木) 14:59:07
>>223
もう、回答があるようだけど、もうちょいすっきり書けそうな気もするんで
とりあえず@の方だけ参考程度に別解。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2708.txt
243242:2006/09/28(木) 15:03:34
>>242補記
上のプログラムじゃ、dataファイルと出力ファイルを DATA フォルダに纏めてるけど、
それだと問題あったらそこは自分で変えちくれ。
244デフォルトの名無しさん:2006/09/28(木) 15:49:41
筋が悪いにもほどがある。
245242:2006/09/28(木) 19:22:43
fclose(sum_file); と fclose(ave_file); を忘れてるんで、
while ループの後にこの fclose() を入れといて。
246デフォルトの名無しさん:2006/09/28(木) 20:00:31
>>230
遅レスだが世の中にはこういう物もある

ttp://sel.ist.osaka-u.ac.jp/cdtools/ccfinder.html
>プログラミング言語の構文に応じた処理を行い、変数名が書き換えられたりしていても、正しくコードクローンを検出する

こういった物を利用すれば同じ処理をしている限り、変数名を変えたりインデント変えたりしたところで無意味
247デフォルトの名無しさん:2006/09/28(木) 20:07:04
つか、宿題レベルのコードなんて目でみりゃわかるだろ。
248デフォルトの名無しさん:2006/09/28(木) 22:12:03
100人くらいの規模となると目だけはつらい
249デフォルトの名無しさん:2006/09/28(木) 22:20:15
問題を使い回すと、先輩から貰った過去の解答をそのまま提出する奴とかもいるしな
250 ◆sUfWYz9MSA :2006/09/29(金) 00:45:21
>>213 >>217 >>222
遅くなりました。
どうもありがとうございます!
参考にさせていただきます。
251デフォルトの名無しさん:2006/09/29(金) 02:31:49
>215

度々申し訳ございませんが、よく分かりません。。。
私が考えたプログラムは下の通りですが、エラーばっかりです。
具体的にプログラムを教えて頂ければ大変大変うれしいです。
どうぞ宜しくお願いいたします。

#include <stdio.h>

int main( char argc, char* argv[] ){
char URL[256];
scanf("%s",URL);
ShellExecute(NULL, _T("open"), _T(URL), NULL, NULL, SW_SHOWNORMAL);
return 0;
}

  203 :デフォルトの名無しさん :2006/09/28(木) 01:47:19
  複雑で申し訳ございませんが、Cで以下のことが出来るでしょうか?

  Cで作成したexeファイルをURLを引数に実行したら、
  そのURLがインターネットエクスプローラーで開く。

  イメージはtest.exeという名前のCのexeファイルを作って
  test.exe http://www.yahoo.co.jp
  を実行したら、インターネットエクスプローラーで
  http://www.yahoo.co.jpのページが開くということです

  難しいですが、どうぞ宜しくお願いいたします。
252デフォルトの名無しさん:2006/09/29(金) 03:40:42
オレコウソツナンダヨナ
│ω・`))))))
253デフォルトの名無しさん:2006/09/29(金) 03:45:42

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
251です。

申し訳ございませんが、スレ違い(私は宿題ではなく、
個人的に勉強をしております)でしたので、
【ANSI-C】 C言語なら俺に聞け!  Part 129)
の804番目のスレに改めて書かせて頂きます。
また、そちらのスレにも、最初ここに書き込んで、
ShellExecuteを使用すれば良い旨を聞いていることを
お伝えさせて頂こうと思います。
お手数をお掛けして誠に申し訳ございませんが、
204様、215様、【ANSI-C】 C言語なら俺に聞け!  Part 129)
の804に回答を頂ければ嬉しいです。

どうぞ宜しくお願いいたします。
254デフォルトの名無しさん:2006/09/29(金) 04:00:43
>>253
コンナジカンマデベンキョウカ、モマエ、エライナ
タスケテヤリタイガ、モレコウコウチュウタイノニートデ、プログラムノコトハワカランガ
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpshell/html/_win32_shellexecute.asp
ハサンコウニナラナイノカ?
│ω・`)))
イマワモレノカツドウジカンデ、アッチコッチハイカイシテクルヨ
ベンキョウ、ガンバレ
255デフォルトの名無しさん:2006/09/29(金) 04:35:32
>>253
ニートノモレガ、モマエノタメニネットハイカイシテキタヨ

/*---- NEET.C ----*/
/* usege: NEET http://www.neet.org /*
#include <windows.h>
int main( char argc, char* argv[] ){

ShellExecute(NULL, "open", argv[1], NULL, NULL, SW_SHOWNORMAL);
return 0;
}
/*---- END OF NEET.C ----*/
256デフォルトの名無しさん:2006/09/29(金) 06:55:14
>>255
惜しいな、それを書くなら"usage"だ。失せ毛ではなく兎毛と覚えておくといいぞ。
257デフォルトの名無しさん:2006/09/29(金) 12:00:04
usuge: 禿進行中の方へ
258デフォルトの名無しさん:2006/09/29(金) 12:35:51
usoge:もう禿げ散らかっちゃってかぶりものを常用してる人へ
259デフォルトの名無しさん:2006/09/29(金) 13:41:55
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2713.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio C++ 2005
 [3.3] 言語: C++
[4] 期限: 2006年10月01日00:00まで
[5] その他の制限: 特にありません。

文系なもので、知識が不足しており困っています。どうにか助けていただけないでしょうか。
よろしくお願い致します。
260デフォルトの名無しさん:2006/09/29(金) 13:57:19
>>259
完全にスレ違い。くだ質スレにでも池
261デフォルトの名無しさん:2006/09/29(金) 14:05:39
>>259
ファイルが足りないので不可能。
262デフォルトの名無しさん:2006/09/29(金) 14:28:15
>>259
宿題に見えないから、リンクに必要なコードだけな。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2714.txt
263デフォルトの名無しさん:2006/09/29(金) 16:53:48
文系とかいう以前に学生として終わってる。
264(^-^) ◆MONSOON/qo :2006/09/29(金) 17:05:00
宿題


50メガ超の改行区切り一行1000文字以下のテキストファイルが2つのあります
一方に存在しない行をできる限り速く抽出するプログラムを作ってください
265デフォルトの名無しさん:2006/09/29(金) 17:06:15
テンプレ使え。
266デフォルトの名無しさん:2006/09/29(金) 17:13:27
>>264

<?php
$diff = array_diff(file("file1.txt"), file("file2.txt"));
foreach ($diff as $line)
echo $line;
?>
267(^-^) ◆MONSOON/qo :2006/09/29(金) 17:23:49
速いやつないですか?
268デフォルトの名無しさん:2006/09/29(金) 17:34:49
テンプレ書け
269デフォルトの名無しさん:2006/09/29(金) 17:47:24
>>267お前ネットワークの質問スレでしったかぶりで適当な回答してたやつだろ。
サイテーだな。
270デフォルトの名無しさん:2006/09/29(金) 17:57:29
>>264
50M超の改行区切り一行1000文字のテキストファイルを二つ用意したらつくってやらんでもない
271デフォルトの名無しさん:2006/09/29(金) 18:09:56
>>264
#include <stdlib.h>
int main(void) { system("diff file1 file2"); return 0; }
272デフォルトの名無しさん:2006/09/29(金) 18:57:47
50M程度なら全部メモリに乗せちゃえば?
273デフォルトの名無しさん:2006/09/29(金) 19:05:34
アンカー使ってくれよ
274デフォルトの名無しさん:2006/09/29(金) 19:23:22
>>272
そんな贅沢な環境はツマラン。
フリーエリア48KB以下の環境で考えようぜ。
275デフォルトの名無しさん:2006/09/29(金) 19:27:10
>>274
ファイルシステム存在できないでFA
276デフォルトの名無しさん:2006/09/29(金) 19:37:28
ファイルシステムはCDFSと仮定してみようぜ
277(^-^) ◆MONSOON/qo :2006/09/29(金) 19:45:19
いま50M超のファイルを生成してますから待っててくださいね
278お願いします!:2006/09/29(金) 22:36:56
前に質問させていただきましたが・・・。出したら却下されました。
【質問テンプレ】
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2694.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2695.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2696.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2697.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2698.txt
data01〜05までの5つのデータテキストがある。(上のリンク)このテキストを読み込み、
同じ位置のデータそれぞれのの和を取り結果をsum.txtに書き出し、さらに
それぞれ位置のデータを5で割ったものを平均値としてAverage.txtに出力するプログラムを
つくりなさい。
AAverage.txtのデータからbe1.txtのデータを引きDivision.txtに出力しなさい。
be01はhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2699.txt
(ろだにあります。)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 9/30
[5] その他の制限: 二重配列を使用すること

for (i = 0;i < LOW; i++){
 for (j = 0;j < COLUMN;j++){
fscanf(fp, "%d",&a[i][j]);}
}
for (i = 0;i < LOW; i++){
for (j = 0;j < COLUMN;j++) {
fscanf(fp1,"%d",&b[i][j]); }
279お願いします!:2006/09/29(金) 22:39:06
上のようにして#defineで指定してまわせばいいのでしょうけど、
どうもファイルのオープン書き込みなどがうまく行きません。
どなたかお願いいたします。
280デフォルトの名無しさん:2006/09/29(金) 22:39:41
>>278
>[5] その他の制限: 二重配列を使用すること

こういう必須条件は最初から書いてくれ><
281お願いします!:2006/09/29(金) 22:43:29
ごめんなさい!
本当にすみません。
282デフォルトの名無しさん:2006/09/29(金) 22:47:04
>>278
二重配列って変な言葉だな。
これって規格でもこの用語を使ってんのかね。
面倒なんで自分では調べないけど。
283デフォルトの名無しさん:2006/09/29(金) 22:49:07
>>278
アレだろ、100要素くらいの配列へ生の値与えて演算してたやつだろ?
forでくくるなり別のファイルに隠蔽するなりすればいいんじゃね?
特に動かないわけでもないし、用件も満たしていたようだし。
284デフォルトの名無しさん:2006/09/29(金) 22:54:07
>>278
出したら却下って、提出したら教官に却下されたってことか?
それなら担当教官もこのスレみてるんじゃね。それと
> 二重配列を使用すること
って後付されるとすげーはらたつ。


285デフォルトの名無しさん:2006/09/29(金) 22:55:57
>>277
はやくしろよカス
286お願いします!:2006/09/29(金) 23:01:34
>>284
提出したら、、
「もっと簡単な方法あるでしょ」
ごちゃごちゃごちゃと言った後、
「二重配列使ってやってこい」
とつき返されました。。。。。。。
287デフォルトの名無しさん:2006/09/29(金) 23:06:02
>>286
なるほど。
別に、おまいが条件を書き忘れてたわけじゃなく、駄目出しの改善策として
二次元配列を使うよう指示されたわけね。
288デフォルトの名無しさん:2006/09/29(金) 23:19:03
>>278
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2721.txt

これは三重配列(w)を使っているので、適宜二重配列に直したって
ください。どうして二重配列で作ってくれないかって?すぐ直せるから。
289デフォルトの名無しさん:2006/09/29(金) 23:47:24
>>278
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2722.txt

やっぱ無責任かもしれんので、二重配列(ww)を使ったプログラムを
うpしとくから、動作を確認の上提出してみてくれ。

必ず動作の確認を行ってくれ。検証してないので。多分大丈夫だと
思うけど。
290デフォルトの名無しさん:2006/09/29(金) 23:48:20
[1] 授業単元: データ構造とアルゴリズム
[2] 問題文: 1からNまでの整数の和を求める以下のプログラムを(i)for文(ii)while文(iii)do while文を用いて書き改める。
指定されたとおりに書き直していることがわかる部分さえあればいちいち全文書き直さなくてよい。
#include<stdio.h>
#include<stdlib.h>
#define N (100)
int main(void){
int i;
int sum;
sum = 0;
i = 1;
loop1:if(!(i <= N))goto loop1end;
sum = sum + i;
i = i + 1;
goto loop1;
loop1end;
fprintf(stdout,”sum=%d\n”,sum);
return(EXIT_SUCCESS)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:C言語
[4] 期限: 2006年10月2日まで
[5] その他の制限: 授業に向けてのC言語の復習らしいのですが,
前段階の科目より難易度が大幅に上がっていてさっぱりです。よろしくお願いします
291デフォルトの名無しさん:2006/09/29(金) 23:48:58
講義内容にあわせたコーディングをするために
課題が出された時の講義風景をちゃんと聞き取れる音声付きで
まるごと動画を併せてうpすることが望ましい。

講義内容の理解度を把握するための課題なんだから
そこからかけ離れてちゃダメだろう。
292デフォルトの名無しさん:2006/09/29(金) 23:55:31
>>290
> 前段階の科目より難易度が大幅に上がっていてさっぱりです。よろしくお願いします
釣りだよな?
これが出来ないって、漢字で自分の名前書けません、九九が全部言えませんってレベルだぞ?
前段階の科目ではfor文もwhile文もdo while文も扱わなかったってか?
293290:2006/09/30(土) 00:01:37
[1] 授業単元: データ構造とアルゴリズム
[2] 問題文:以下のプログラム中のfor文で示される部分を関数を用いて書き改めよ。
ただし、関数名はsetvalueとし、引数として配列と配列サイズの2つをとるものとする。
#include<stdlib.h>
#define N(100)
int main(void){
int A[N];
int i;
for(i=0;i<N;i++){
a[i]=i;
}
return (EXIT_SUCCESS);

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:C言語
[4] 期限: 2006年10月2日まで
[5] その他の制限: 290の2問目です。

294デフォルトの名無しさん:2006/09/30(土) 00:01:55
int main(void){ 
  int i; 
  int sum = 0;
  for(i=1;i<=N;i++) sum += i; 
  fprintf(stdout,"sum=%d\n",sum); 
  return(EXIT_SUCCESS); 
}

int main(void){ 
  int i; 
  int sum = 0; 
  i = 1;
  while(i<=N) sum += i++; 
  fprintf(stdout,"sum=%d\n",sum); 
  return(EXIT_SUCCESS); 
}

int main(void){ 
  int i; 
  int sum = 0; 
  i = 1;
  do sum += i++; 
  while(i<=N);
  fprintf(stdout,"sum=%d\n",sum); 
  return(EXIT_SUCCESS); 
}
295デフォルトの名無しさん:2006/09/30(土) 00:10:34
お前らニートはごちゃごちゃ言わずに宿題解いてりゃいいんだよ
296290:2006/09/30(土) 00:11:55
クラス全体の理解度はかるためのテスト問題で、テスト終了後に
そのまま宿題としてだされたんです。
この授業は1個目、2個目ときて3個目の段階の授業なのですが、
1個目を再履修したため2個目を今受けている最中なんです。そしてそれと平行して3個目を
受けているので状況なんです。クラスには受かった人と、落とした人の混同クラスで
再履修組みとそうでない者と、どれだけわかるのかを測るために作った問題らしく、
上の人たちにあわせて作られているのでさっぱりわからないんです。
290の問題だと
loop1:if(!(i <= N))goto loop1end;
sum = sum + i;
i = i + 1;
goto loop1;
loop1end;
fprintf(stdout,”sum=%d\n”,sum);
return(EXIT_SUCCESS)
の部分が直していいのか全くわからないんです。
決してつりではないです。よろしくおねがいします
297デフォルトの名無しさん:2006/09/30(土) 00:12:21
>for (i = 0;i < LOW; i++){
> for (j = 0;j < COLUMN;j++){
>fscanf(fp, "%d",&a[i][j]);}
>}
>for (i = 0;i < LOW; i++){
>for (j = 0;j < COLUMN;j++) {
>fscanf(fp1,"%d",&b[i][j]); }
>}

余計なお世話ですが、LOW(低い) は ROW(行数)の方が普通かと。
ROWとCOLUMNは良くペアで使われます。
298お願いします!:2006/09/30(土) 00:14:39
>>288>>289
ありがとうございます!
288の3重配列は無事に動きました。
これから289を試してみます。
どうもありがとうございました!!
299デフォルトの名無しさん:2006/09/30(土) 00:23:40
>>293
#include<stdio.h>
#include<stdlib.h>
#define N (100)

void setvalue(int*, int);

int main(void)
{
int A[N];
int i;

setvalue(A, N);

return (EXIT_SUCCESS);
}

void setvalue(int *a, int n)
{
if(n)
{
n--;
a[n] = n ;
setvalue(a, n);
}
return;
}
何というのか、理解力を見たいというだけの課題なら習ってなくて分からない部分は
素直にそう申告した方がいい話しな気がするが。
300デフォルトの名無しさん:2006/09/30(土) 00:24:23
>>210のやつはコピペ+置換でがんばってかいたのになー
301290:2006/09/30(土) 01:02:45
>>294ありがとうございます。292の人が言ってたことがわかりました。
こんなに初歩的なことだったんですね・・・。
それでも解いてくれて本当にありがとうございました。
302290:2006/09/30(土) 01:06:57
>>299理解力を見るのはテストで終わりで、この宿題はテスト問題の正解答を
しらべるなりなんなりしてかいていかないといけなくて・・・。
こっちを間違えると減点されてしまうんです。

ところで
void setvalue(int*, int);

int*
の部分は何を表しているんですか?せっかく教えていただいたのに
知識不足ですみません・・・
303デフォルトの名無しさん:2006/09/30(土) 01:10:20
>>302
int型のポインタ。
304デフォルトの名無しさん:2006/09/30(土) 01:16:31
ポインタ習ってないから駄目ということなら、こっちで。

#include<stdio.h>
#include<stdlib.h>
#define N (100)

void setvalue(int[], int);

int main(void)
{
int A[N];

setvalue(A, N);

return (EXIT_SUCCESS);
}

void setvalue(int a[], int n)
{
if(n)
{
n--;
a[n] = n ;
setvalue(a, n);
}
return;
}
305 ◆OfTCUJgvL6 :2006/10/01(日) 00:27:31
C++もCもド素人なもので、下記の宿題が全くわかりません。
どなたか、お手数をおかけしますが
どうかよろしくお願いします。

[1] 授業単元: ソフトウェア

[2] 問題文(含コード&リンク): ランジサーチング(range searching)はマウスによる
ディスプレイ操作のときに使われる基本ルーチンの一つである。
平面上で多数の点を与えられ、指定された長方形領域に含まれる点のみを出力する問題である。
二分探索法やヒープ法などによるソーティング法を利用して、
Cプログラムを作成し、実行結果を出力する。

[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio.NET2003
 [3.3] 言語:CでもC++でも可

[4] 期限:10月3日
[5] その他の制限:ソーティングと探索については高速アルゴリズムを
用いたプログラムにする。
ソーティング−クイックソート
探索−二分探索法
306デフォルトの名無しさん:2006/10/01(日) 00:52:34
>>305
何がしたいかわからん。
出された問題って、本当にこれが全文?
307デフォルトの名無しさん:2006/10/01(日) 01:07:49
そろそろ、報酬は?ってのを復活させた方がいいんじゃない?
308(^-^) ◆MONSOON/qo :2006/10/01(日) 01:08:57
>>306
点 z(1)=(x(1), y(1)), ・・・, z(n)=(x(n), y(n))が与えられているとする

長方形領域 p(i)=(a(i), b(i)) i=1,2,3,4が入力されたとき
その内部にある点z(k)をすべて出力せよ
309デフォルトの名無しさん:2006/10/01(日) 01:11:01
>>308
換言しただけじゃないか
やっぱりまだ行間読むことは出来ないんだねMONSOON
310デフォルトの名無しさん:2006/10/01(日) 01:19:33
>>304ポインタ習ってないです、ありがとうございます。
これならなんとか大体理解できます。

そしてまた質問なのですが
#include<stdlib.h>
はどこでつかわれているんですか?
何度も何度もすみません。
311デフォルトの名無しさん:2006/10/01(日) 01:23:43
stdlib.hでEXIT_SUCCESSが定義されてる 
312(^-^) ◆MONSOON/qo :2006/10/01(日) 01:30:47
>>305を途中までやったあとは頼んだ

#include <stdio.h>
#define N 1000
#define range 100000


int rnd(int m) {return (1664525*m+1013904223)%range;}//乱数生成ルーチン


main(){
int *x=new int[N];
int *y=new int[N];
int i,m=8;
int p[4],q[4];

for(i=0;i<N;i++){x[i]=m=rnd(m);y[i]=m=rnd(m);}//N点を与える
for(i=0;i<4;i++){p[i]=m=rnd(m);q[i]=m=rnd(m);}//長方形領域の入力

//続きをよろしく

}
313(^-^) ◆MONSOON/qo :2006/10/01(日) 01:33:43
>>305のヒントはここです
最適化問題は興味のあるところだが...誰もやらないと速いのかどうかがわからない
http://www.msc.cs.gunma-u.ac.jp/~nakano/Algo/tech6.html
314 ◆OfTCUJgvL6 :2006/10/01(日) 01:34:00
>>306
それで全文です;
ソーティングして範囲内の点を切り出すだけ
らしいですが・・・;
315 ◆OfTCUJgvL6 :2006/10/01(日) 01:40:11
ちなみに↓が単純アルゴリズムです

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

void sort(int f1[], int f2[], int fa[], int min, int max);
void search(int f[], int *min, int*max, int fmin, int fmax);

int main(void)
{
int i, range, a[50000], x[50000], y[50000];
int min, max;
int left, right;
int down, up;
FILE *fp;
clock_t start, end; //時間を保持する変数を定義

fp=fopen("output.txt","w"); //結果出力用のファイルをオープン
printf("座標の数を入力してください:");
scanf("%d", &range);
printf("xの範囲についての最小値を入力してください:");
scanf("%d", &left);
printf("yの範囲についての最大値を入力してください:");
scanf("%d", &right);
printf("yの範囲についての最小値を入力してください:");
scanf("%d", &down);
printf("yの範囲についての最大値を入力してください:");
scanf("%d", &up);
start=clock(); //時間の計測を開始
316デフォルトの名無しさん:2006/10/01(日) 01:41:15
fprintf(fp, "%d個の座標をランダムに設定\n\n", range);
srand((unsigned)time(NULL)); //乱数を初期化
for(i=0;i<range;i++){
x[i]=rand() % range;
a[i]=i;
}
for(i=0;i<range;i++){
y[i]=rand() % range;
}
//↓ランダムに設定したファイルの出力
for(i=0;i<range;i++){
fprintf(fp, "%5d(x,y)=%5d %5d\n", a[i], x[i], y[i]);
}

fprintf(fp, "\nについてソート\n\n");
min=0;
max=range-1;
sort(x,y,a,min,max);
for(i=0;i<range;i++){
fprintf(fp, "%5d(x,y)=%5d %5d\n", a[i], x[i], y[i]);
317 ◆OfTCUJgvL6 :2006/10/01(日) 01:41:46
}
fprintf(fp, "\nXについて検索\n\n");
fprintf(fp, "(left, right)= (%d,%d)\n", left, right);
search(x, &min, &max, left, right);
for(i=min;i<=max;i++){
fprintf(fp, "%5d(x,y)=%5d %5d\n", a[i], x[i], y[i]);
}
fprintf(fp, "\nYについてのソート\n\n");
sort(y,x,a,min,max);
for(i=min; i<=max; i++){
fprintf(fp, "%5d(x,y)=%5d %5d\n", a[i], x[i], y[i]);
}
fprintf(fp, "\nYについて検索\n\n");
fprintf(fp, "(down, up)=(%d,%d)\n", down, up);
search(y, &min, &max, down, up);
for(i=min;i<=max;i++){
fprintf(fp, "%5d(x,y)=%5d %5d\n", a[i], x[i], y[i]);
}
end=clock(); //時間の計測の終了
//↓実行時間[sec]をファイルに出力
fprintf(fp, "\ntime=%f\n", (double)(end - start) / CLOCKS_PER_SEC);
fclose(fp); //結果出力用のファイルをクローズ
return 0;
}
318デフォルトの名無しさん:2006/10/01(日) 01:42:16
void sort(int f1[], int f2[], int fa[], int fmin, int fmax)
{
int i, j, temp;
for(i=fmin;i<=fmax;i++){
for(j=i+1;j<=fmax;j++){
if(f1[i]>f1[j]){
temp=f1[i];
f1[i]=f1[j];
f1[j]=temp;
temp=f2[i];
f2[i]=f2[j];
f2[j]=temp;
temp=fa[i];
fa[i]=fa[j];
fa[j]=temp;
}
}
}
}
void search(int f[], int *min, int *max, int fmin, int fmax)
{
int i;
for(i=*min;f[i]<fmin;i++){
*min=i+1;
}
for(i=*max;f[i]>fmax;i--){
*max=i-1;
}
}
319デフォルトの名無しさん:2006/10/01(日) 01:42:36
おk、やっぱりバックグラウンドが大量にあるんだな…

俺は降りる
320 ◆OfTCUJgvL6 :2006/10/01(日) 01:44:39
>>315-318
高速アルゴリズムにしたら、この単純アルゴリズムの処理時間が
どうなるか

が問題みたいです;

いろいろとすいません;
321デフォルトの名無しさん:2006/10/01(日) 01:45:28
>>320
それを最初に書いてくれ><
322 ◆OfTCUJgvL6 :2006/10/01(日) 01:49:50
>>321
ごめんなさい;
323デフォルトの名無しさん:2006/10/01(日) 01:55:15
>>322
もう宿題出した教官に「日本語でおk」とでも言っとけ
条件が少なすぎる
324(^-^) ◆MONSOON/qo :2006/10/01(日) 01:58:40
>>322
すべての点に対して長方形領域内にあるかどうかをチェックする方がはやいかもしれないよ
ソートするのは再利用をする目的があるためだろうし
325デフォルトの名無しさん:2006/10/01(日) 02:12:47
条件は不足なく出てると思うけど。
326デフォルトの名無しさん:2006/10/01(日) 02:23:34
>>323
儂は口頭ではきちんと説明したぞ。
327デフォルトの名無しさん:2006/10/01(日) 02:41:32
>>325
いや不足ありまくり
「長方形」とか「座標」とかソースに落とすにはちと曖昧

高速化するのならバイナリサーチで全数検索するんじゃなくて、
まずはスクリーンを16×16大のタイルが敷き詰められたものとみなして、
「どのタイルに属するのか」という値を先ず作っちゃう。
長方形というか矩形領域が与えられたら、その領域を含むか未満で最大となるのタイル群を選択し、
選択されたタイル群の点を列挙すれば結構速い
と経験で語ってみる俺

まぁバケツソート使ってるわけだが…

328(^-^) ◆MONSOON/qo :2006/10/01(日) 02:45:34
>>327
ソースもてでるよ
329デフォルトの名無しさん:2006/10/01(日) 02:51:23
>>328ホントにめでたい奴だな
有名なヒキニートとかいう奴か?それともただのガキ?
ソースが出てるのがそんなに嬉しいか?
330デフォルトの名無しさん:2006/10/01(日) 02:57:07
>>327
[5] その他の制限:ソーティングと探索につゐては高速アルゴリズムを
>ソーティング−クイックソート
>探索−二分探索法

これを見る限り、点入力と探索の処理は別々で、
まぁ大体、x, yが入った配列それぞれをソートして二分検索で挟んで(ry みたいなことやれって事だろ。
見方によっちゃアルゴリズムも指定してるわけだし、そういう小細工を仕込む余地はないのでは。
331デフォルトの名無しさん:2006/10/01(日) 03:01:18
>>330
んだね

いまさら何書いても遅いけど、>>324とかにいいt(ry
うわぁ、俺もMONSOONと同類だぁwww
エヘヘ       |門|λ,,....

<rem>
ああ、座標の点を表す型をTにしてtemplate使えばいいのか…
さらにいえばCのqsort()使えば(ryry
</rem>
332デフォルトの名無しさん:2006/10/01(日) 03:20:29
>>311
なるほど、そういうことですか。
これからはこんな質問しなくていいように、もっと勉強しておきます
ありがとうございました。
333デフォルトの名無しさん:2006/10/01(日) 03:38:58
>>327
> >>325
> いや不足ありまくり
> 「長方形」とか「座標」とかソースに落とすにはちと曖昧
ソース読めないのかよ
334デフォルトの名無しさん:2006/10/01(日) 04:48:43
まあドンマイってことで。
335デフォルトの名無しさん:2006/10/01(日) 13:29:39
セジウィックのアリゴリズム第2巻にある、2D木探索なのかな?
336デフォルトの名無しさん:2006/10/01(日) 15:34:24
レンジ、だよね。。
337デフォルトの名無しさん:2006/10/01(日) 19:41:05
問題としては情報は全部出てるな.これで分からないのは理解する気が無いんだろ.

長方形が一つだけ与えられてその中から探すのなら,
データの前のほうから包含チェックが最速.O(n).

長方形がたくさん与えられて,各入力に対して答えるのなら
データをフラクショナルカスケーディング付きの領域木に入れておく.
これで構成 O(n log n),質問 O(log n + k).ただし k は領域内の点の数.
338デフォルトの名無しさん:2006/10/01(日) 19:46:18
>>337
なんで2者択一になってんの?
情報が全部でてればコーディングするだけでいいじゃん。
そういう風に決められない部分があることこそ、情報が全部でてない証拠じゃないの?
339デフォルトの名無しさん:2006/10/01(日) 20:11:04
何故に必死なんだ。
気に食わなければスルーしろ。
340デフォルトの名無しさん:2006/10/01(日) 21:42:53
別に必死に見えない件。
341デフォルトの名無しさん:2006/10/01(日) 22:54:37
いや、全部出てるだろ
342デフォルトの名無しさん:2006/10/02(月) 01:28:39
開発環境はVC++ の6.0なんですが…

ファイルから、変数をとり込むのはどうすればできますか?
343デフォルトの名無しさん:2006/10/02(月) 01:29:40
>>342
>>1 ついでに言うと、趣旨がさっぱり分からん
344デフォルトの名無しさん:2006/10/02(月) 03:26:18
誘導されたので、こちらで質問させていただきます。

問い:コンピュータの整数は、ある数までしか表現できない。
その数を上回ると負の数になってしまう。
最大公約数を求めるプログラムを使って、データを少しずつ大きくしていき、
どの数まで正しく表現できるか調べる場合、どのようにすればよいか。

最大公約数を求めるプログラムはコチラです。

#include<stdio.h>

int gcd(int a, int b) {
int r;

r = a % b;
while(r > 0) {
a = b;
b = r;
r = a % b;
}

return(b);
}

int main(void) {
int x, y;

scanf("%d%d", &x, &y);
printf("%d\n", gdc(x,y));

return(0);
}
345344:2006/10/02(月) 03:26:58
自分でもいろいろと試行錯誤してみたのですが、さっぱりでして…
よろしくお願いいたします。
346デフォルトの名無しさん:2006/10/02(月) 03:54:25
http://pc8.2ch.net/test/read.cgi/tech/1153818463/762-
誘導元で答えでてるじゃん。
347デフォルトの名無しさん:2006/10/02(月) 07:46:41
質問させてください。

[1] 授業単元:C言語基礎
[2] 問題文:
  プログラム内で 初期化された配列A[3] と 文字列"TEST" を
  ダイナミックアロケーションによって確保されたメモリへ格納するプログラムを作成せよ。
[3] 環境
 [3.1] OS: WindowsXP Pro SP2
 [3.2] VC++ 2005EE
 [3.3] 言語: C言語
[4] 期限: 本日中
[5] その他の制限: 特になし

自分でなんとかコードは書け、ビルドには成功するのですが、いざ実行すると
「ヒープが壊れていることが原因として考えられます。kadai1-1.exe または読み込まれた DLL にバグがあります。」
というエラーが free(pt_c); の時点で発生し、正常に動作しません。
直接起動してもだめでした。
自分では原因が特定できないので、どうか対処方法を教えてください。
ソースは次の書き込みに記載します。
どうかよろしくお願いします。
348347:2006/10/02(月) 07:47:27
void main(void)
{
int A[3] = {3, 5, 7};// 配列を定義、初期化

// ポインタ定義
int *pt_i;// 配列用
char *pt_c;// 文字列用

pt_i = (int *)malloc(sizeof(int)*4);// 配列分のメモリを確保
pt_c = (char *)malloc(sizeof(char)*5);// 文字列分のメモリを確保

pt_i = A;// 配列を確保したメモリに代入
strcpy(pt_c, "TEST");// 文字列を確保したメモリに代入

// 確保したメモリ領域を解放
free(pt_c);
free(pt_i);    //ここでエラー発生

return;
}
349347:2006/10/02(月) 07:49:15
>>347
すみません、間違いがありました。
>というエラーが free(pt_c); の時点で発生し、正常に動作しません。
ではなく、
>というエラーが free(pt_i); の時点で発生し、正常に動作しません。
でした。
それでは改めてよろしくお願いします。
350デフォルトの名無しさん:2006/10/02(月) 07:55:08
配列を解放してどうする。
351デフォルトの名無しさん:2006/10/02(月) 07:56:17
>>348
pt_i = A;
352デフォルトの名無しさん:2006/10/02(月) 08:05:17
>>347
>pt_i = (int *)malloc(sizeof(int)*4);// 配列分のメモリを確保
したのに、
>pt_i = A;// 配列を確保したメモリに代入
したら、mallocした領域が漏れる。
memcpyとか使ってちゃんとコピーしないと意味なしだよ。

>free(pt_i);    //ここでエラー発生
この時点で、pt_iが指す領域は、A。
解放できないのでこけている。
353347:2006/10/02(月) 08:08:31
>>350-351
うーん、なんだかよくわからないのですが、
*pt_iは解放する必要はないんでしょうか?
pt_i = A; で、配列Aの先頭ポインタが格納されて
free(pt_i) で結果的にpt_Aではなく配列Aを解放している?ということでしょうか?

すみません、もう少しだけ詳しく教えてもらえないでしょうか・・・。
354347:2006/10/02(月) 08:10:24
>>352
あああ、なるほど!
そういうことですか、わかりました。
修正してみます。

皆さんお答えくださって本当にありがとうございます。
助かりました!
355デフォルトの名無しさん:2006/10/02(月) 19:22:12
(^-^)をNGワードにしたらスレがすごくすっきりしたような気がしたんですが
どうしてですか?
356デフォルトの名無しさん:2006/10/02(月) 20:54:08
高  学  歴  余  裕  だ  な
ってほめてみるテスト
357デフォルトの名無しさん:2006/10/02(月) 21:03:01
度々学歴の話を持ち出すけど、何なの?
358デフォルトの名無しさん:2006/10/02(月) 21:27:58
所詮学歴、社会に出て学歴だけじゃ通用しない現実を知るべきだね
ってことだ
359デフォルトの名無しさん:2006/10/02(月) 21:33:35
コンプレックスの塊のような発言だな
360デフォルトの名無しさん:2006/10/02(月) 21:40:49
相手を低学歴だと思いこまないとやっていけないらしい。
361デフォルトの名無しさん:2006/10/02(月) 21:52:58
受験勉強に無駄に苦労した人とかがそういうコンプレックス持つのかな?
362デフォルトの名無しさん:2006/10/02(月) 21:54:41
現実的に低学歴な奴がコンプレックス持つんだろ
363デフォルトの名無しさん:2006/10/02(月) 21:57:22
低学歴っていうけど、どれくらいから低学歴なの?
364デフォルトの名無しさん:2006/10/02(月) 22:02:46
>>363
旧帝国大学未満
365デフォルトの名無しさん:2006/10/02(月) 22:04:12
少なくとも専門以下は低学歴。
366デフォルトの名無しさん:2006/10/02(月) 22:04:58
あと、理系なのに院に行ってないやつ
367デフォルトの名無しさん:2006/10/02(月) 23:22:12
院卒は使えないのが常識
368デフォルトの名無しさん:2006/10/02(月) 23:27:23
365と367と俺
369デフォルトの名無しさん:2006/10/02(月) 23:29:17
まぁ、自分の頭脳に自信のあるやつは他人の学歴とか見ちゃいないわな
370デフォルトの名無しさん:2006/10/02(月) 23:38:14
学閥のあるとこに行けば、いやでも意識するがな
371デフォルトの名無しさん:2006/10/03(火) 02:24:44
ここに丸投げするようなのは高学歴とは言えないだろう。
Fランク大学なんて高校と同じ扱いだぜ?
372デフォルトの名無しさん:2006/10/03(火) 02:30:41
で、宿題はまだかね?
373デフォルトの名無しさん:2006/10/03(火) 02:30:54
丸投げしてるヤツは全て低学歴だと思いたいが、極まれに・・・
374デフォルトの名無しさん:2006/10/03(火) 02:37:46
東工大で低学歴ですか
375デフォルトの名無しさん:2006/10/03(火) 02:43:51
俺の童貞は高学歴なんだが
376デフォルトの名無しさん:2006/10/03(火) 03:16:04
丸投げってのはカンニングと同じだってちゃんとわかってんのかね?
興味もなくついていく努力もする気ないんなら、最初っから講義とるなよ。
377デフォルトの名無しさん:2006/10/03(火) 05:42:34
>>365
専門をバカにするなよ、いつもの彼?
378 ◆8zHol6NAOo :2006/10/03(火) 07:47:07
どうやらこっちでした。
お願いします

[1] 授業単元: C
[2] 問題文(含コード&リンク):標準入力で入力された最後5だけを表示する
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 1003
379デフォルトの名無しさん:2006/10/03(火) 07:49:46
まぁもちつけ
問題は誤解がないよう丸写し推奨なんだぜ
380デフォルトの名無しさん:2006/10/03(火) 07:50:18
5の単位を書けよ。
381デフォルトの名無しさん:2006/10/03(火) 08:14:29
[1] 授業単元: 応用プログラミング
[2] 問題文(含コード&リンク): http://up.spawn.jp/file/up42525.jpg
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc-4.1 ?
 [3.3] 言語: C++
[4] 期限: 10月4日まで
[5] 配列、クラス、ポインタなどは習っていません。

簡潔な方法がうまく思いつきません。
ヒントだけでもいいのでお願いします。
382 ◆8zHol6NAOo :2006/10/03(火) 08:30:37
落ちてました…
5行です。
383デフォルトの名無しさん:2006/10/03(火) 08:34:22
>>381
遅いけど。
int next_unit(int n)
{
  switch(n)
  {
  case 1: return 5;
  case 5: return 10;
  case 10: return 50;
  case 50: return 100;
  case 100: return 500;
  default: return -1;
  }
}

int change_with(int amount, int min_unit)
{
  if(amount < 0) return 0;
  if(amount == 0) return 1;
  int next = next_unit(min_unit);
  int with_min = next == -1 ? 0: change_with(amount, next);
  int without_min = change_with(amount - min_unit, min_unit);
  return with_min + without_min;
}

int change(int amount)
{
  return change_with(amount, 1);
}
384デフォルトの名無しさん:2006/10/03(火) 08:48:44
k 番目のコインまでを使って c+v[k] 円支払う方法の数は
k-1 番目のコインまでを使って c+v[k] 円支払う方法の数と
k 番目のコインまでを使って c 円支払う方法の数の和になる.
ただし v[k] は k 番目のコインの価値.

↑これをプログラムにすればいい.下から構成すれば O(ck).
int change(int c) {
  int v[] = {1,5,10,50,100,500};
  int table[c+1];
  for (int i = 0; i <= c; ++i)
    table[i] = 0;
  table[0] = 1;
  for (int k = 0; k < 6; ++k) 
    for (int i = 0; i+v[k] <= c; ++i) 
      table[i+v[k]] += table[i];
  return table[c];
}
385デフォルトの名無しさん:2006/10/03(火) 09:11:17
386デフォルトの名無しさん:2006/10/03(火) 16:21:27
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 整数を入力し、1の位から順に表示するプログラム
[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] 言語: c
[4] 期限: 明日[5] その他の制限:ナシ
387デフォルトの名無しさん:2006/10/03(火) 18:30:27
void main() {
 char ln[256];
 int n;
 gets(ln); n = strlen(ln);
 while(0 <= --n) printf("[%c]\n", ln[n]);
}
388デフォルトの名無しさん:2006/10/03(火) 18:52:56
絶望した!
数字を入力させて適当に100まで表示させようかと思っていた自分に絶望した
389デフォルトの名無しさん:2006/10/03(火) 20:26:44
[1] 授業単元:計算科学
[2] 問題文
確率変数 Dは, 値 D=1,2,3,4,5,6 を, それぞれ 1/6 の確率でとる
(業界によってはフェアなサイコロともいわれる)
乱数を利用して,
サンプルの個数?
6
シード?
203098
と入力すると, Dのサンプルを6個生成し,
Dのサンプル確率分布( (値 1,2,3,4,5,6 の出た回数)/(振った回数) )を,
# サンプル数 p(1) p(2) p(3) p(4) p(5) p(6)
6 0.333333 0.000000 0.500000 0.000000 0.000000 0.166667
のように出力するプログラム(区切りはスペース).
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年10月010日09:00まで
390389:2006/10/03(火) 20:34:54
>>389のサンプルです
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2728.txt
これを利用して下さい。
391デフォルトの名無しさん:2006/10/03(火) 20:41:11
/***************************************************************/
/* ヒストグラム作成用変数 hist[] の初期化
埋めてね */

/***************************************************************/

for(i=0;i<DMAX;hist[i++]=0);

/***************************************************************/
/* 乱数を引いて, 結果に応じて hist[] を更新
埋めてね */

/**************************************************************/

hist[(int)(6*get_uniform_random())]++;


かと
392デフォルトの名無しさん:2006/10/03(火) 20:52:10
>>391
ありがとうございます。
このfor(i=0;i<DMAX;hist[i++]=0);


の範囲を教えてほしいのですが・・・
393デフォルトの名無しさん:2006/10/03(火) 20:57:29
>>392
とりあえず書いてみて、動かしてみてよ
話はそれからじゃ
394デフォルトの名無しさん:2006/10/03(火) 21:02:31
>>393
デバックしたらdとrがつかわれてませんと出て
実行結果は
サンプルの個数?
6
シード?
203098
6 0.000000 0.166667 0.333333 0.166667 0.000000 0.333333 Press any key to continu
e
でした
395デフォルトの名無しさん:2006/10/03(火) 21:06:46
>>394
ということでコンパイルできたから、文法上は問題ないことが保証されたわけですね

正解と微妙に数値は違いますが、アプローチは大体OKのはずです

もし暇があれば、
> このfor(i=0;i<DMAX;hist[i++]=0);
> {
> }
> の範囲を教えてほしいのですが・・・
これに対して、今のプログラムの見比べて納得できる回答を考えてみてください。
396デフォルトの名無しさん:2006/10/03(火) 21:07:31
サンプルの下にget_uniform_randomがあるのを見落としていて
標準関数にそんなのあったかと思ってググったら、こんなの見つけた。
ttp://www.a.math.ryukoku.ac.jp/~hig/course/compsci_2002/21/src/dbgtest1.c
397デフォルトの名無しさん:2006/10/03(火) 21:08:25
学校って丁寧に手抜きしてるよな
398デフォルトの名無しさん:2006/10/04(水) 00:21:29
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):要素数3の1次元配列を用いて3次元ベクトルを表すこととする。
このとき、3次元ベクトルa[3]とb[3]の内積を求めて表示するプログラム
[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] 言語: c
[4] 期限: 明日[5] その他の制限:ナシ
399デフォルトの名無しさん:2006/10/04(水) 00:26:50
まさか、内積がわからないとかいうアホな話じゃないだろうな?
400デフォルトの名無しさん:2006/10/04(水) 00:30:00
>>398
int a[3] = {1, 2, 3}, b[3] = {4, 5, 6}, i, result = 0;
for (i = 0; i < 3; i ++) result += a[i] * b[i];
printf("%d", result);
401デフォルトの名無しさん:2006/10/04(水) 00:31:08
数学板で線形代数の質問スレでもさがしたらいいと思うよ
402デフォルトの名無しさん:2006/10/04(水) 00:47:07
>>400 scanf関数を使ってお願いします。
403デフォルトの名無しさん:2006/10/04(水) 00:48:51
404デフォルトの名無しさん:2006/10/04(水) 10:26:58
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ワードで出題された問題なのでzipに圧縮させてもらいました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2731.zip
の問3をお願いします。
[3] 環境
 [3.1] Windows XP
 [3.2] Borland Compiler C++
 [3.3] C
[4] 期限: 10/6(金)

1,2は出来てると思いますので張っておきます。
問1答え http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2729.txt
問2答え http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2730.txt

よろしくお願いします。
405デフォルトの名無しさん:2006/10/04(水) 11:43:14
>>404
どうでもいいけどワードファイルって作成者の名前も保存されてるんだよね。
まぁ偽名だろうけど。
406デフォルトの名無しさん:2006/10/04(水) 12:02:21
>>404
すげーこわくてひらけねーです
407デフォルトの名無しさん:2006/10/04(水) 12:07:48
マクロを無効にしとけばいいじゃん
408デフォルトの名無しさん:2006/10/04(水) 12:11:20
課題
● int型の変数にキーボードから正の整数を入力し、
unsigned short型の変数に代入してから16進数で表示
する。さらに、上位バイトと下位バイトを反転し、結果を16
進数と10進数で表示するプログラムを作成しましょう。
● 印刷したソースコードと自分の学籍番号下4桁で試した結
果を記入して提出しましょう。
● プロジェクト名:03byte ファイル名:03byte.c
409デフォルトの名無しさん:2006/10/04(水) 13:10:13
>>408
int
410デフォルトの名無しさん:2006/10/04(水) 13:11:13
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
@本の名前と値段を格納する構造体BookDataを定義し、標準入力から構造体に値を読み込む関数
readBookと構造体の値を表示する関数showBookを作成して、それを利用して5冊分のデータ入力を
おこない、vその結果を表示するプログラムを作成せよ。

A関数の『引数として構造体を使用する際、1構造体そのものを引数とる場合 2構造体のポインタを
引数にとる場合で本質的にどのような違いがあるか、メモリ上で引数の構造体及び仮引数の構造体
がどのように確保されているかという観点に基づいて説明せよ

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc 3.4)
 [3.3] C++
[4] 期限: 明日
[5] その他の制限: 構造体習いました。なるべく簡単なプログラムでお願いします。
411デフォルトの名無しさん:2006/10/04(水) 13:39:02
2に関しては完全に板違いだな。
自分で絞殺しろ。
412デフォルトの名無しさん:2006/10/04(水) 13:56:16
[1] 授業単元:応用C
[2] 問題文(含コード&リンク)
fscanfを使わないで指定されたデータファイルから
データを読み込みデータ件数、最大データ長、最大値、最小値
を出力するプログラム:
[3.1] UNIX
3.3]C
[4] 来週の火曜日
[5] break文continue文fscanf
です。お願いします
413デフォルトの名無しさん:2006/10/04(水) 14:03:23
fscanfでデータファイルから読み込んではいけないが
[5]により、fscanfを使わなければならないんだな?
414デフォルトの名無しさん:2006/10/04(水) 14:05:50
普通に考えてfscanfまで習ってるって事だろ
415412:2006/10/04(水) 14:38:24
はいfscanfは習っています
しかし制限でfscanfを使わないでやれとのことです
416デフォルトの名無しさん:2006/10/04(水) 15:17:59
ということはfgetsとsscanfの組み合わせはおkなんだな。
417414:2006/10/04(水) 15:28:11
はい
ダイジョウブです
418デフォルトの名無しさん:2006/10/04(水) 15:33:10
>>412
データファイルの書式ぐらいかけやぼけ
419412:2006/10/04(水) 15:56:12
データファイルの書式ってなんですか?
ごめんなさいわからなくて
420デフォルトの名無しさん:2006/10/04(水) 16:02:03
宿題出されたときにデータファイルのサンプルとかもらってないかお?
それを上げちまえばいいんだぜ
421412:2006/10/04(水) 16:05:24
そんなものもらっていないです
ただ問題が書いてあるプリントをもらっただけですので
422デフォルトの名無しさん:2006/10/04(水) 16:09:40
423デフォルトの名無しさん:2006/10/04(水) 16:14:28
タブか改行かで数字が並んでるだけのファイルと受け取ってよいのかのう
424412:2006/10/04(水) 16:18:14
あ、はい思い出しました
数字が並んでるデータなんですけど
数字の中にアルファベットが含んであるとデータ件数に含まれないです
数字は小数点も含まれています
425デフォルトの名無しさん:2006/10/04(水) 18:44:37
[1] 授業単元: 計算機科学T
[2] 問題文(含コード&リンク):
  論理演算を用い、下位桁からの桁上がりを考慮した2進数16桁の
  加減算プログラムをmain関数として作成しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] Borland Compiler
 [3.3] 言語: C
[4] 期限: 明後日
[5] その他の制限:論理演算を習ったところです。

加算プログラムはできました。 
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2733.txt
これを元に減算プログラムを作るのですが・・・わかりません・・・
よろしくお願いします。
426425:2006/10/04(水) 18:46:11
すいません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2733.txt
のプログラムは、VC2005で作りました。
427デフォルトの名無しさん:2006/10/04(水) 18:55:21
428デフォルトの名無しさん:2006/10/04(水) 19:46:54
>>425
減算を加算でやってみれば?
たとえば
A - B = A + (-B)
てのと
-B = (B xor (-1)) + 1 
をつかえばAとBから
A - B ができるきがするけどホントかどうかは知らないんだから!

429デフォルトの名無しさん:2006/10/04(水) 20:06:45
>>408
#include <stdio.h>
int main(void){
int i;
unsigned short us;
scanf("%d",&i);
us = i;
printf("0x%04x\n",us);
us = ( us >> 8 ) | ( us << 8 );
printf("0x%04x\n%u\n",us,us);
return 0;
}
430404:2006/10/04(水) 21:39:04
zipは怪しい感じを与えてしまったようなので、張りなおしてみます。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2735.txt
どうかよろしくお願いします。

zipは消させていただきました(^^;;
431デフォルトの名無しさん:2006/10/04(水) 22:47:51
[1]二階微分方程式をルンゲクッタで解く
[2]http://12lien.web.fc2.com/q.jpg
[3.1] Windows でX on windows 3 を使用
[3.2] gcc ver.は分かりませんでした
[3.3] C言語 (Emacsを使用)
[4] 1006
[5] 途中まで自分で作ったベースプログラムを元にしてくれるとありがたいです。
http://12lien.web.fc2.com/base.txt
dx/dt = Y,x = X とおいてプログラムを進めてくれると幸いです。

オネガイシマスm(_ _)m
432デフォルトの名無しさん:2006/10/05(木) 06:23:46
明日ケンタッキーに行ってルンゲ・ダックを買ってみよう
433デフォルトの名無しさん:2006/10/05(木) 08:24:50
[1] 授業単元:システム
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2736.txt
これを改良して無向グラフの標準的データ構造(head first adjlist)と有向グラフの完備データ構造(head first adjlist firstrev adjlistrev)を出力するようにせよ
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 今日夕方
[5] その他の制限:

お願いします
434デフォルトの名無しさん:2006/10/05(木) 10:28:55
[1] 授業単元:計算科学
[2] 問題文
サンプルを書きかえて, プログラムを完成させよう.
t=0にx=0からスタートするランダムウォークを考えよう. ただしx → yとジャンプする遷移確率は,
1/2(y=x+1,右に1進む),
W(y|x)=1/2(y=x-1,左に1進む),
0(それ以外)
とします.
ランダムウォークは nn=1000回繰り返してサンプルを得ます.
各ウォークで, hist_interval=19 歩ごとに, x に関するヒストグラムを作ることにします.
つまり, hist_interval × 0,1,2, ... (n_hist-1) 歩目に x にいた回数を配列 hist に記憶していきます.
最後に, hist/nn を次の形で出力しますここで, いちばん左の列は, 位置 x(歩) を表します. ここで,
左から2番目の列は, hist_interval×0=0歩目に, それぞれの位置 x(歩) に,
ウォーカーがどれだけいるかを表しています(サンプル全体を1とする比率,
つまり相対頻度, 統計的確率で). 0歩目には必ず x=0 にいるので, 1.0000 です.
3,4,5,6列目は, hist_interval×1,×2,×3,×4 歩目の結果です. だんだん広がっていきます.
仮に100歩目までやっても, ぎりぎりでx=±100までしか広がりません.

 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年10月10日09:00まで

サンプルです
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2737.txt
435デフォルトの名無しさん:2006/10/05(木) 12:16:03
436デフォルトの名無しさん:2006/10/05(木) 17:24:23
マルチすいません
http://pc8.2ch.net/test/read.cgi/tech/1149349035/264-265
こちらをお願いします
437デフォルトの名無しさん:2006/10/05(木) 22:08:41
ちょっと質問を。
ある関数の中でchar型のバッファをcallocで作ったのですが、
このバッファをreturnしなければならないんですけど
freeはどうやってやるのでしょうか?returnの前にfreeしたら意味ないし、
returnのあとに記述しても遂行しないしどうすればいいのかわかりません。
438デフォルトの名無しさん:2006/10/05(木) 22:47:43
char *foo(void){
char *buf;
buf = calloc(SIZE, sizeof(char));
return buf;
}
int main(void){
char *p;
p = foo();
/* なんか処理 */
free(p);
return 0;
}
439デフォルトの名無しさん:2006/10/05(木) 23:29:21
>>429
あ(・∀・)り(・∀・)が(・∀・)と(・∀・)う!ございます!
440437:2006/10/06(金) 00:22:17
>>438さんどうもです。書いてくださったコードとほとんど同じだったのですが、
なるほど、呼び出し側のpをfreeするとbufもfreeされるということですね。何で気づかなっかたんだろ。
ひとつ勉強させていただきました。ありがとうございます。
441デフォルトの名無しさん:2006/10/06(金) 00:30:34
>>440
いいえ、その理解は間違っています。
スレ違いなので詳細は割愛。
442437:2006/10/06(金) 00:54:24
あ、違うんですか?pとbufが指しているところが同じなので
pを開放することでbufを開放できると理解したのですが・・・
443デフォルトの名無しさん:2006/10/06(金) 01:05:06
>>442
つ 誘導

じゃあわざわざpなんて定義して使わないで、bufを直接使えばいいだろ?
444 ◆wSaCDPDEl2 :2006/10/06(金) 01:35:50

[1] 授業単元:プログラミング初級
[2] 問題文
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2743.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: C
[4] 期限: 明後日
[5] その他の制限: ありません

つい最近習い始めたばかりの初心者です。
宜しくお願いします。
445デフォルトの名無しさん:2006/10/06(金) 01:44:14
じゃ、まあ使えそうな関数だけ

問題1
int DifMin(int a,int b,int c,int d){ //5時20分から10時2分までの差:5時間と-18分=5*60+(-18)
return (c-a)*60+(d-b);
}

問題2 ※面倒を考えずに小数点以下1桁にしますた
int Round5_4(double n){
return (int)(n+0.5);
}

問題3
int isTriangle(int a,int b,int c){
return (a>0 && b>0 && c>0) && (a+b>c);
}

問題4
int isValidDate(int year,int month){
return (1<=year && year<=64) && (1<=month && month<=12);
}

たぶん
446デフォルトの名無しさん:2006/10/06(金) 01:49:21
[1] C言語
[2] 再帰(int factorial)を用いて nCrを導けるプログラムを作れ  
  nCr = n!/r!*(n-r)!  int combination(int n, int r)と置く

よろしくお願いします
447(^-^) ◆MONSOON/qo :2006/10/06(金) 01:56:45
>>446

nCr = n-1Cr + n-1Cr-1じゃなかった?
448デフォルトの名無しさん:2006/10/06(金) 02:08:17
>>447
nCr=n-1Cr + ・・・の漸化式じゃなくて、n! = n * (n-1)!の漸化式の方で再帰しろ、
と問題文で指定しているのではないのか?

なぜそんな問題にしたのかはわからんが。
449デフォルトの名無しさん:2006/10/06(金) 02:21:47
>>446
こんなんでいいのかな?
int factorial(int n) {
 return n <= 1 ? 1 : n * factorial(n - 1);
}
int combination(int n, int r) {
 return factorial(n) / (factorial(r) * factorial(n - r));
}
450デフォルトの名無しさん:2006/10/06(金) 12:43:25
すいません詳細を描き忘れていました よろしくお願いします

[1] C言語
[2] 問題文
http://www.uploda.org/uporg538701.txt

451デフォルトの名無しさん:2006/10/06(金) 12:51:36
>>450
factorialは用いるんじゃなくて参考かよ!
まあそっちのほうが自然だけどさ。
452デフォルトの名無しさん:2006/10/06(金) 13:00:03
参考というか用いる方でお願いします
453デフォルトの名無しさん:2006/10/06(金) 13:30:30
いや、用いるなら>>449で終わりだけど。
454デフォルトの名無しさん:2006/10/06(金) 13:41:56
つか>>449に有るけど

int factorial(int n) {
 return n <= 1 ? 1 : n * factorial(n - 1);
}

この?って何だ?
455デフォルトの名無しさん:2006/10/06(金) 13:44:54
三項演算子ってショートサーキットするっけ?
しなければifで書くしかないよな
456デフォルトの名無しさん:2006/10/06(金) 13:52:43
>>450
まあいいや。とりあえずfactorialは使わないバージョン。

int combination(int n, int r) {
  int s = n - r;
  if (r > s) {s = r; r = n - r;}
  if (r <= 0) return 1;
  return combination(n - 1, r - 1) + combination(n - 1, r);
  return combination(n, r - 1) * (s + 1) / r; /* ←こっちの方が高速 */
}
457デフォルトの名無しさん:2006/10/06(金) 14:24:38
>>455
する。
458デフォルトの名無しさん:2006/10/06(金) 14:43:50
#include <stdio.h>

int factrial(int n);
int combination(int n, int r);

int main(void)
{
int k;

for(k=1; k<=3; k++) printf("%d\n",factrial(k));
}

int factrial(int n)
{
if (n > 0) return n * factrial(n-1);
else return 1;
}

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

int main と int factorial の部分をどう変えればいいのか分かりません
お願いします
459デフォルトの名無しさん:2006/10/06(金) 14:45:02
>>458
その前に何のために変えたいのかわからん
460デフォルトの名無しさん:2006/10/06(金) 15:48:54
教えても良いが、そのまえに大学名学部名学科名学籍番号を言え。
461デフォルトの名無しさん:2006/10/06(金) 16:01:21
宿題スレなのに何を言ってるんだw
462デフォルトの名無しさん:2006/10/06(金) 19:33:11
もし宿題ならテンプレ見て書いて欲しいよな
463デフォルトの名無しさん:2006/10/06(金) 20:42:55
[1] 授業単元:C言語実習U
[2] 問題文
2次元文字配列を用意して、5つの文字列を入力する。
入力された文字列を文字コード順(辞書順)に並び替えて、
順番に出力するプログラムを作成せよ。
尚、break,goto,continue命令と、string関数<string.h>は
使わないものとする。
[3] 環境
 [3.1] OS: Windows Ver5.1 SP2
 [3.2] コンパイラ名とバージョン: Visual Studio .NET 2005
 [3.3] 言語:C 言語
[4] 期限:4日後
[5] その他の制限:無し
464デフォルトの名無しさん:2006/10/06(金) 21:45:29
#include<stdio.h>
#define SIZE  100

int main(void) {
  char data[5][SIZE+1];
  int i,j,k,s[5],t;
  
  /* input */
  for(i=0; i<5; i++)
    scanf("%s", data[i]);
  /* sort */
  for(i=0; i<5; i++)
    s[i]=i;
  for(i=0; i<4; i++) {
    for(j=i+1; j<5; j++) {
      /* compair */
      k=0;
      while ((k < SIZE)
          && (data[s[i]][k]==data[s[j]][k])
          && (data[s[i]][k]!='\0'))
        k++;
      
      if (data[s[i]][k] > data[s[j]][k]) {
        t=s[i];s[i]=s[j];s[j]=t;
      }
    }
  }
  // output
  for(i=0; i<5; i++)
    printf("%s\n", data[s[i]]);
  return 0;
}
465463:2006/10/06(金) 22:22:07
>>464さん、どうもありがとうございました。
それにしてもString関数使わないで仕上げるとか神ってる…
466デフォルトの名無しさん:2006/10/06(金) 22:36:01
compair -> compare
467至福:2006/10/07(土) 00:40:25
質問します〜

Rabin法を用いた1億以下の素数の高速判定アルゴリズムが欲しいです
C言語でお願いします
468デフォルトの名無しさん:2006/10/07(土) 01:49:28
>>467
テンプレみて出直せ。
まぁ出直してきたところでこたえる気はないがな!!
469デフォルトの名無しさん:2006/10/07(土) 02:00:59
まさに外道!
470デフォルトの名無しさん:2006/10/07(土) 02:35:29
[1] 新人課題
[2] 問題文
 UNIXのcatコマンドと同等機能のmycatコマンドを作成せよ
 という課題で
 mycat file | mycat >file2
 の | 機能をどう実現すればよいのか…悩んでいます
 宜しくお願いします

[3] 環境
 [3.1] OS: UNIX
 [3.2] 言語:C 言語
[4] 期限:4日後
[5] その他の制限:無し
471デフォルトの名無しさん:2006/10/07(土) 03:55:40
>>470
パイプはシェルさんが担ってる機能であって、catやもちろんmycatは一切関与しない
472デフォルトの名無しさん:2006/10/07(土) 17:39:09
キーボードから誕生年を入力して、年齢(2006年12月31日における)を10歳幅の年代に分け、その幅に何人いるかをカウントするプログラムを作成してください。

実行結果

誕生年を入力してください
1960
1910
1930
1958
1970
1941
1920
1980
2003
^Z
0代 : 1
10代 : 0
20代 : 1
30代 : 1
40代 : 2
50代 : 0
60代 : 1
70代 : 1
80代以上 : 2

期限 来週水曜日
よろしくおねがいします
473デフォルトの名無しさん:2006/10/07(土) 17:48:06
>>472
>>1読んで書き直し
474デフォルトの名無しさん:2006/10/07(土) 20:50:22
>>472
t[9];main(i){for(puts("誕生年を入力してください");scanf("%d",&i)>0;)++t[(i=2006
-i)>80?8:i/10];for(i=0;i<9;++i)printf("%d代%.*s : %d\n",i*10,i&8,"以上",t[i]);}
475 ◆t7E0r9geLg :2006/10/07(土) 21:21:55
[1] 授業単元:計算機科学
[2] 問題文(含コード&リンク):
 以下のc言語プログラムは、論理演算のみを用い下位桁からの桁上がりを考慮した
2進数1桁の加算プログラムをmain関数として作成しなさい。
 そして、17166の5文字を10進数値として、上位3桁を被加数(または被減数)、
下位2桁を加数(または減数)として、作成したプログラムの動作を確認しなさい。
 なお、2進数16桁の被加数(被減数)および加数(減数)は、キーボードから入力し、
加算結果をディスプレイに表示できるプログラムとして作成すること。
ただし、入力する文字は、ASCIIコードの0と1およびスペースと改行のみとする。

/*下位桁からの桁上がりを考慮した2進数1桁の加算*/
void fadder( unsigned int *s /*加算結果*/
unsigned int *s /*上位桁への桁上げ*/
unsigned int *s /*被加数*/
unsigned int *s /*加数*/
unsigned int *s /*下位桁からの桁上がり*/
)
{
unsigned int h ;
h = (*x) ^ (*y) ;
*s = h * (*ci) ;
*co = (*x) & (*y) | h& (*ci) ;
return ;
}
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual Studio.NET2003
 [3.3] 言語:C
[4] 期限:今日中
[5] その他の制限: なし

よろしくお願いします
476デフォルトの名無しさん:2006/10/07(土) 21:29:30
これはひどい
477デフォルトの名無しさん:2006/10/07(土) 22:36:55
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
#include <stdio.h>

main(){
int day;
char *dname[]={ "Sunday","Monday","Tuesday",
"Wednesday","Thursday","Friday",
"Saturday" };
printf("Input a number (0-6) :");
scanf("%d", &day);
if(day<0 || day>6){
printf("そのような曜日はありません。\n");
}
else{
printf("%d番目の曜日は %s です。\n",day,dname[day]);
}
}
このプログラムを、整数dayと整数letterを入力day番目の曜日名のletter文字目とday番目の曜日名のletter文字目以降を表示するプログラムにせよ。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: ポインタを使う
お願いします
478デフォルトの名無しさん:2006/10/07(土) 22:44:50
#include <stdio.h> 

main(){ 
  int day;
  int letter;
  char *dname[]={ "Sunday","Monday","Tuesday", 
    "Wednesday","Thursday","Friday", 
    "Saturday" };
  
  printf("Input day (0-6) :"); 
  scanf("%d", &day);
  printf("Input letter  :"); 
  scanf("%d", &letter);
  
  if(day<0 || day>6){ 
    printf("そのような曜日はありません。\n"); 
  }else{ 
    printf("%d番目の曜日の%d文字目からは %s です。\n",day,letter,dname[day] + letter); 
  } 
}
479 ◆t7E0r9geLg :2006/10/08(日) 00:24:18
>>475
問題文間違ってました('A`)

以下のc言語プログラムは、論理演算のみを用い下位桁からの桁上がりを考慮した
2進数1桁の加算を行う関数です。このプログラムを用い2進数16桁の
加減算プログラムをmain関数として作成しなさい。
 そして、17166の5文字を10進数値として、上位3桁を被加数(または被減数)、
下位2桁を加数(または減数)として、作成したプログラムの動作を確認しなさい。
 なお、2進数16桁の被加数(被減数)および加数(減数)は、キーボードから入力し、
加算結果をディスプレイに表示できるプログラムとして作成すること。
ただし、入力する文字は、ASCIIコードの0と1およびスペースと改行のみとする。

/*下位桁からの桁上がりを考慮した2進数1桁の加算*/
void fadder( unsigned int *s /*加算結果*/
unsigned int *s /*上位桁への桁上げ*/
unsigned int *s /*被加数*/
unsigned int *s /*加数*/
unsigned int *s /*下位桁からの桁上がり*/
)
{
unsigned int h ;
h = (*x) ^ (*y) ;
*s = h * (*ci) ;
*co = (*x) & (*y) | h& (*ci) ;
return ;
}

宜しくお願いします
480デフォルトの名無しさん:2006/10/08(日) 00:26:48
……まあ、落ち着け。
481デフォルトの名無しさん:2006/10/08(日) 02:44:11
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク):
eのx乗を計算するプログラムを作成せよ。
[3] 環境
 [3.1] LINUX
 [3.2] gccc
 [3.3] どちらでも可
[4] 期限: 10/10(火)
よろしくお願いします
482デフォルトの名無しさん:2006/10/08(日) 02:55:28
>>481
#include <stdio.h>

int pow (int e, int x)
{
  if (x<1)
    return 1;
  return e * pow(e, x-1);
}

int main()
{
  int e=2,x=3;
  printf("%d", pow(e, x));
  return 0;
}
483デフォルトの名無しさん:2006/10/08(日) 03:00:09
>>482
eってのは自然対数の底じゃないのかい
484デフォルトの名無しさん:2006/10/08(日) 03:44:43
>>481
#include <stdio.h>
#include <math.h>

int main()
{
    double x;
    scanf("%lf",&x);
    printf("%e",exp(x));
    return 0;
}

これでいいのか?
マクローリン展開とかを使ってexp()を自作しろって課題なんかな。
485デフォルトの名無しさん:2006/10/08(日) 03:47:45
出題条件に何も書いてない限り、>>482>>484のような解答が出ても
文句は言えないな。
486481:2006/10/08(日) 03:50:58
>>484
そみません。
テーラー展開を使ってexp()です。
487デフォルトの名無しさん:2006/10/08(日) 03:52:15
お約束の後出し条件が出て、盛り上がって参りました
488デフォルトの名無しさん:2006/10/08(日) 03:55:47
しかし時間も時間なので盛り上がらない悪寒
次の方どうぞー?
489デフォルトの名無しさん:2006/10/08(日) 05:49:09
>>486
かなり手抜きだが。
テーラー展開した式を1000項まで計算する。無論遅い。

#include <stdio.h>
#include <math.h>
double my_exp(double x)
{
    int i;
    const int n = 1000;
    double px = fabs(x);
    double t = 1.0;
    double sum = t;
    for(i=1; i<=n; i++){
        t *= px/i;
        sum += t;
    }
    if(x<0.0){
        return 1/sum;
    }else{
        return sum;
    }
}
int main()
{
    double x;
    scanf("%lf",&x);
    printf("%e",my_exp(x));
    return 0;
}
490481:2006/10/08(日) 06:43:01
>>489
何度もすいません
天下一武道会でexp()です。
491デフォルトの名無しさん:2006/10/08(日) 09:21:09
>>489
doubleの精度なら10項でも多すぎるくらいではあるまいか。
492デフォルトの名無しさん:2006/10/08(日) 09:35:24
>>478
letter文字目のみも表示しないといけないんですが、お願いできますか?
493デフォルトの名無しさん:2006/10/08(日) 09:42:40
>>492
#include <stdio.h>

main()
{
  int day;
  int letter;
  char *dname[] = { "Sunday", "Monday", "Tuesday",
    "Wednesday", "Thursday", "Friday",
    "Saturday"
  };

  printf("Input day (0-6) :");
  scanf("%d", &day);
  printf("Input letter  :");
  scanf("%d", &letter);

  if(day < 0 || day > 6)
  {
    printf("そのような曜日はありません。\n");
  }
  else
  {
    printf("%d番目の曜日の%d文字目は %c であり、それ以降の文字列は %s です。\n", day,
  letter, dname[day][letter], dname[day] + letter);
  }
}
494デフォルトの名無しさん:2006/10/08(日) 09:52:49
>>493
あと以降についてなんですが、Mondayの1文字目以降だったらMは入らないんですかね?
495デフォルトの名無しさん:2006/10/08(日) 09:54:46
>>494
Mを入れるなら0文字以降と指定するべし。
496デフォルトの名無しさん:2006/10/08(日) 10:03:58
>>495
日本語的な意味ではどうなんですか?
497デフォルトの名無しさん:2006/10/08(日) 10:05:41
0文字目の概念は、コード書く人間にしてみりゃ当然なんだがな
不満があるなら、大した修正じゃないんだし、自分で直せば良いんじゃないかな?
498デフォルトの名無しさん:2006/10/08(日) 10:07:20
>>496
何が言いたいか分からん。
Mondayの0文字目はMで、0文字目以降はMondayだろ?
「a以降」にa自体が含まれるのが普通の日本語の解釈だと思うが。
それとも、MondayのMは1文字目として考えろ、ということ?
499デフォルトの名無しさん:2006/10/08(日) 10:10:50
>>498
配列の添え字では0から始まるから、そういう風なんだと思いますが、
日本語では0文字目とは言わないので・・・・
a以降にはaが含まれるんですね。わかりました。
dname[day]+letter-1って風に修正します
500デフォルトの名無しさん:2006/10/08(日) 10:12:35
>>499
いちおう指摘しておくと、元の問題文では曜日を0番目〜6番目で指定させている。
501デフォルトの名無しさん:2006/10/08(日) 10:17:53
数学的「以降」なら対象を含むし
文章的「以降」なら対象は含まないな
そういうことでしょ?
問題文には0から始まるという仕様が書かれているから日本語的に正しいかどうかで
回答を曲げるのは違うと思うんだが
502デフォルトの名無しさん:2006/10/08(日) 10:21:00
ひっこみつかなくなっただけでそ
503デフォルトの名無しさん:2006/10/08(日) 10:39:15
>>501
わかりました。
504デフォルトの名無しさん:2006/10/08(日) 10:49:49
[1] 授業単元:無し
[2] 問題文(含コード&リンク): コンパイラのオプションで警告メッセージが最も詳しくでるように設定する
[3] 環境
 [3.1] OS: WindowsXp
 [3.2] コンパイラ名とバージョン: BorlandC++Builder 5
 [3.3] 言語: C++
[4] 期限: 無期限
[5] その他の制限: 特に無し

コマンドプロンプトから bcc32 -Ox と入力してみたのですが、ファイル名が指定されていないといわれます。
ここから手詰まりに……スレ違いとは分かっていますが、ボスケテ。
505デフォルトの名無しさん:2006/10/08(日) 11:36:10
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): 下のデータをエディタで入力してテキストファイルを作成
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月11日水曜日まで
[5] その他の制限: 特に無し
506505:2006/10/08(日) 11:40:48
13  安藤 12月24日
17  奥田 2月14日
15  村上 5月6日
19  谷  3月14日
11  新村 3月3日
12  サントス 1月31日
10  田中 1月30日
14  亀村 6月8日
18  西口 11月3日
16  藤村 12月23日

@ 左の番号順にソートするプログラムを作れ(構造体を用いる・結果はファイル出力)
A 誕生日順にソートするプログラムを作れ
B Aの結果を用いて誕生日を入力し、氏名・番号を2分探索法により検索するプログラムを作れ
507デフォルトの名無しさん:2006/10/08(日) 11:42:38
>>505-506
数字が全角と半角が混ざってるのがネックだなw
508デフォルトの名無しさん:2006/10/08(日) 11:43:26
ここはアプリケーションの使い方の宿題スレではないのだが。
509505:2006/10/08(日) 11:43:38
>>507
全角でお願いします
説明不足ですいません・・・
510デフォルトの名無しさん:2006/10/08(日) 11:44:27
>>507
>505を読む限り、>506の全てがデータなのだろうからそれをファイルにすればいいんでね?
511デフォルトの名無しさん:2006/10/08(日) 11:47:32
512デフォルトの名無しさん:2006/10/08(日) 12:39:09
>>490
ちょっとだけおもしろかった。ちょっとだけな。
513デフォルトの名無しさん:2006/10/08(日) 13:47:11
>>510
エディタで入力してテキストファイルを作成
したら
そのテキストファイルに対して処理をしろっつーことでいいのかもしれない
「[2] 問題文」のテンプレに本来の問題文>>506の先頭一行だけをindex的に入れちゃったのかなと
514デフォルトの名無しさん:2006/10/08(日) 14:58:31
ハングルでも良いですか?
515デフォルトの名無しさん:2006/10/08(日) 15:05:46
>>514
KSコード?
516デフォルトの名無しさん:2006/10/08(日) 17:15:16
[1] 電子計算機工学
[2] http://12lien.web.fc2.com/q.jpg
[3.1]Windowsでx on windows 3を使用
[3.2] gcc ver.不明
[3.3] C
[4] 10.10
[5] http://12lien.web.fc2.com/base2.txt
途中まで作ったこのプログラムに訂正を加えていただくとうれしいです
517デフォルトの名無しさん:2006/10/08(日) 18:00:58
>>506
区切り文字も全角スペース?
518デフォルトの名無しさん:2006/10/08(日) 18:13:14
>>505の問題の狙いがみえてきた
構造体つかって>>506を全部読み込ませて
パースまでさせようっていう魂胆だな
きっとこういう構造体なんじゃないか?
N(02) //番号
N(01) //スペース
N(04) //名前
N(01) //スペース
N(02) //月
N(01) //補助単位("月")
N(02) //日
N(01) //補助単位("日")

COBOLで書いちゃったけど意味は通じると思う
ソートのことを考えると1レコードずつメモリを動的に確保するのが正解だろう
519デフォルトの名無しさん:2006/10/08(日) 18:38:12
[1]C言語U
[2]5個の文字列を入力し、その中で最も長いものを表示するようなプログラムを作成すること。
  実行例
  1回目:abc d
  2回目:efghi jkl
  3回目:mn op
  4回目:qr s
  5回目:tuv wxyz
一番長いものは、9文字の「efghi jkl」です。
[3]
[3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual Studio.NET2003
 [3.3] 言語:C
[4]10月12日まで
[5]なし
よろしくお願いします。
520デフォルトの名無しさん:2006/10/08(日) 18:42:27
>>519
入力する文字列は必ず5個でいいの?
入力するのはアルファベットだけ?
521デフォルトの名無しさん:2006/10/08(日) 18:44:20
522デフォルトの名無しさん:2006/10/08(日) 18:49:50
>>519

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

int main(void)
{
char *str[5], buf[512];
int i, len = 0, index;

for (i = 0; i < 5; i++) {
gets(buf);
if ((str[i] = strdup(buf)) == NULL)
exit(1);
if (strlen(str[i]) >= len) {
index = i;
len = strlen(str[i]);
}
}

puts(str[index]);

for (i = 0; i < 5; i++)
free(str[i]);

return 0;
}
523505:2006/10/08(日) 18:54:15
>>517
全角でお願いします
524デフォルトの名無しさん:2006/10/08(日) 19:00:07
結局入力データはファイルなのか標準入力なのか初期化なのか・・
525519:2006/10/08(日) 19:20:33
>>522
ありがとうございました。
526デフォルトの名無しさん:2006/10/08(日) 20:00:37
[1] 工学実験
[2] 画像の2次元フーリエ変換とパワースペクトル
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 来週

コード、その他↓
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2756.zip
書いてある事が分かりにくいかもしれませんが、よろしくお願いします。

ファイル(実験.rar)のpassはtest

補足:test(修正).rarのほうはスタックが原因かもしれないといわれたので、修正したものです。
目的:家のPCでtest.rarのpow2の画像を得られるようにすること。
527デフォルトの名無しさん:2006/10/08(日) 20:23:51
デバッグやれってことか…
528デフォルトの名無しさん:2006/10/08(日) 20:43:43
[1]計算機演習
[2]整数iの平方根を挟み撃ち法により求めるプログラムを作成し、1〜30までの平方根を求めよ。
[3]
[3.1] OS:LINUX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4]10月12日まで
[5]なし
よろしくお願いします。
529デフォルトの名無しさん:2006/10/08(日) 20:55:06
>>528
実数で求めるのか?
530デフォルトの名無しさん:2006/10/08(日) 21:07:14
strdupという関数をこのスレで初めて知った
531デフォルトの名無しさん:2006/10/08(日) 21:14:39
>>529
実数でお願いします。
532デフォルトの名無しさん:2006/10/08(日) 21:18:28
残念俺のCコンパイラは整数と虚数しかサポートされてないんだ
533516:2006/10/08(日) 21:43:28
>>521

ありがとうございます!
534デフォルトの名無しさん:2006/10/08(日) 21:45:51
#include <stdio.h>
double func(double x, double a)
{
return (x*x - a);
}
double sqrt_(int j)
{
int i;
double left = 0, right = (double)j, tmp;

for (i = 0; i < 50; i++) {
tmp = (left*func(right, j) - right*func(left, j))/(func(right, j) - func(left, j));
if (func(left, j)*func(tmp, j) <= 0.0)
right = tmp;
else
left = tmp;
}
return tmp;
}
int main()
{
int i;

for (i = 1; i <= 30; i++)
printf("sqrt(%d) = %g\n", i, sqrt_(i));
return 0;
}
535デフォルトの名無しさん:2006/10/08(日) 21:50:07
>>528
#include <stdio.h>
#include <math.h>
#define EPS 0.0000005 /* 最大誤差 */

int main(void)
{
double x1, x2, x;
int i;

for (i = 1; i <= 30; i++) {
x1 = 0.; x2 = i * i;
while (1) {
if (fabs(x1 - x2) < EPS) {
printf("sqrt(%d) = %f\n", i, (x1 + x2) / 2);
break;
}
x = (x1 + x2) / 2;
if (x * x > i)
x2 = x;
else if (x * x < i)
x1 = x;
else /* x * x == i */ {
printf("sqrt(%d) = %f\n", i, x);
break;
}
}
}
return 0;
}
536デフォルトの名無しさん:2006/10/08(日) 23:26:50
>>505
#define FILENAME_IN "birth_in.txt"
#define FILENAME_OUT "birth_out.txt"

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

typedef struct tagBIRTHDAY
{
    char num[4];
    char filler1[2];
    char name[8];
    char filler2[2];
    char month[4];
    char month_unit[2];
    char day[4];
    char day_unit[2];
    char crlf[1];
} BIRTHDAY;

void swap(BIRTHDAY *left, BIRTHDAY *right)
{
    BIRTHDAY tmp;

    memcpy(&tmp, left, sizeof(tmp));
    memcpy(left, right, sizeof(left));
    memcpy(right, &tmp, sizeof(right));
}
537デフォルトの名無しさん:2006/10/08(日) 23:27:33
>>536
int main()
{
    FILE *fp;
    BIRTHDAY birthday[10];
    int i,j;

    memset(birthday, 0, sizeof(birthday));

    //ファイル入力
    fp=fopen(FILENAME_IN, "r");
    if (fp==NULL)
    {
        printf("入力ファイルが開けません\n");
        return 1;
    }

    fread(&birthday, sizeof(birthday[0]), 10, fp);

    fclose(fp);

    //numをキーにソートする
    for (i=0 ; i<10 ; i++)
    {
        for (j=i ; j<10 ; j++)
        {
            if (strncmp(birthday[i].num, birthday[j].num, sizeof(birthday[i].num)) > 0)
            {
                swap(&birthday[i], &birthday[j]);
            }
        }
    }
538デフォルトの名無しさん:2006/10/08(日) 23:28:04
>>537
    //ファイル出力
    fp=fopen(FILENAME_OUT, "w");
    if (fp==NULL)
    {
        printf("出力ファイルが開けません\n");
        return 1;
    }

    fwrite(&birthday, sizeof(birthday[0]), 10, fp);

    fclose(fp);

    return 0;
}
539デフォルトの名無しさん:2006/10/09(月) 00:24:53
>>505
2の誕生日順ソート
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2758.txt

構造体のchar crlf[1];ってchar crlf[2];が正しいはず(CRとLFで2Byteあるので)
と思って変更してみたらうまくいかない……、なぜ?
540デフォルトの名無しさん:2006/10/09(月) 00:28:27
>>539
なんでやねん
メモリ内では常に\nだけだぞ。
WindowsのCOOKED MODEに騙されてるな。
541デフォルトの名無しさん:2006/10/09(月) 00:29:25
>>539
テキストモードで開いている限り、fread()で読もうがfgetc()で読もうが、改行コードは'\n'だ。
542デフォルトの名無しさん:2006/10/09(月) 00:30:44
>>541
別にそれが保障されているわけではない。
環境による。
543デフォルトの名無しさん:2006/10/09(月) 00:35:36
>>542
テキストモードが存在するなら、保証されているだろ?
普通のOSなら、テキストモードなんてやくざなものそのものがないが。
544デフォルトの名無しさん :2006/10/09(月) 04:43:06
俺の童貞モードは存在していますが、卒業は保証されていません(´・ω・`)
545デフォルトの名無しさん:2006/10/09(月) 10:16:31
>>542
無知は黙ってろ
546デフォルトの名無しさん:2006/10/09(月) 11:10:42
>>545
申し訳ありませんでした。
547デフォルトの名無しさん:2006/10/09(月) 12:06:31
>>543
C/C++規格にはtext/binaryモードの区別があるけれども
548デフォルトの名無しさん:2006/10/09(月) 12:10:42
どこに?
549デフォルトの名無しさん:2006/10/09(月) 12:11:25
powを使ったアルゴリズムでプログラムしてこいといわれたのですが
たとえば>>535のプログラムに
#include <stdio.h>
#include <math.h>
#define EPS 0.0000005 /* 最大誤差 */
int main(void) {
double x1, x2, x;
int i;
for (i = 1; i <= 30; i++) {
x1 = 0.; x2 = i * i;
while (1) {
if (fabs(x1 - x2) < EPS) {
printf("sqrt(%d) = %f\n", i, (x1 + x2) / 2);
break;
}
x = (x1 + x2) / 2;
if (x * x > i)
x2 = x;
else if (x * x < i)
x1 = x;
else /* x * x == i */ {
printf("sqrt(%d) = %f\n", i, x);

printf("%d",pow(x,y)); /*と、こんな感じで突っ込んじゃって*/

break;
}
}
}
return 0;
}
こんな風でも使ったことになるのでしょうか?変な質問ですみません
550デフォルトの名無しさん:2006/10/09(月) 12:18:56
知るか.そんなん出題者に聞け.
551デフォルトの名無しさん:2006/10/09(月) 12:33:24
powを使ったアルゴリズムで何でも良いなら、自然対数を求めるアルゴリズムを書いてみたけど。

#include <math.h>
..........
void diff_e(int diffacc=10000000){
int cnt;
double e_val=2.0;
for(cnt=2; cnt<diffacc; cnt++){
e_val=(pow(1.0+1.0/cnt,cnt)+e_val)/2.0;}
printf("e niareicorl\n\t%.16f\n\n",e_val);
}
552デフォルトの名無しさん:2006/10/09(月) 13:06:07
>>548
C++98規格§27.4.2.1.4.1 の static const std::ios_base::openmode binary; の説明で
→ perform input and output in binary mode (as opposed to text mode)
とあるし
C99規格§7.19.5.3.3 の fopen() の説明では text と binary の区別が書いてあるよ
553デフォルトの名無しさん:2006/10/09(月) 13:22:55
>>549
二人プレイだと開始直後になくなっちゃうよな
554526:2006/10/09(月) 15:15:20
gccでコンパイルしたら目的のものが得られました。
ロダのファイルは消しておきました。もし考えてくれた人がいたら申し訳ないですが・・・。
555デフォルトの名無しさん:2006/10/09(月) 18:55:17
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): 名前をローマ字で入力し、その名前に含まれる母音の数を出力せよ
例 hiroyuki nishimura 8
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月11日水曜日まで
[5] その他の制限: なし
556デフォルトの名無しさん:2006/10/09(月) 19:01:18
>>555
# include <stdio.h>
# include <string.h>
# include <ctype.h>

int vowel(char c)
{
  switch(tolower(c))
  {
  case 'a':
  case 'e':
  case 'i':
  case 'o':
  case 'u':
    return 1;
  default:
    return 0;
  }
}

int main(void)
{
  char input[0x100];
  int i, n;
  fgets(input, 0x100, stdin);
  n = 0;
  for(i = 0; input[i]; i++)
    if(vowel(input[i]))
      n++;
  printf("%d\n", n);
  return 0;
}
557555:2006/10/09(月) 19:06:26
>>556
ありがとうございます。
こんな簡単そうな問題で質問ですいません・・・
558デフォルトの名無しさん:2006/10/09(月) 19:10:04
#include <stdio.h>
#include <string.h>

int main(void)
{
char buf[256], *p;
int i, n = 0;

gets(buf);

p = buf;
while (1) {
i = strcspn(p, "aiueoAIUEO");
if (i == strlen(p)) break;
n++;
p += i + 1;
}

printf("%d\n", n);

return 0;
}
559デフォルトの名無しさん:2006/10/09(月) 19:13:22
>>558
それだとO(n^2)になって重いな
if(p[i]=='\0')break;
にしとけばO(n)で抑えられる。
560デフォルトの名無しさん:2006/10/09(月) 19:14:55
>>559
なるほど。
561デフォルトの名無しさん:2006/10/09(月) 19:24:44
そう変えても最悪O(n^2)だと思うが。
562デフォルトの名無しさん:2006/10/09(月) 19:27:38
strcspn()自体がO(N^2)だからな。
563デフォルトの名無しさん:2006/10/09(月) 19:28:40
>>562
strcspnは普通に実装すればO(n)だと思うが。
564デフォルトの名無しさん:2006/10/09(月) 19:31:50
まあ文字列集合の長さを無視すればO(N)だな。
565デフォルトの名無しさん:2006/10/09(月) 19:35:06
母音かどうかのフラグを配列に割り当ててcount += index[name[i]]のようにするのが最速
566デフォルトの名無しさん:2006/10/09(月) 19:37:47
何を n とおいてるのかはっきり書こうぜ
567デフォルトの名無しさん:2006/10/09(月) 19:42:19
>>566
それをはっきりと書かないのがO記法というもの。
568デフォルトの名無しさん:2006/10/09(月) 20:16:18
うそこけ。
569デフォルトの名無しさん:2006/10/09(月) 20:20:46
何で今頃、王さんはともかく長島まで話題になってんの?
570デフォルトの名無しさん:2006/10/09(月) 20:39:00
OreとNanji。
#ってのは誰のネタだったかなぁ……
571デフォルトの名無しさん:2006/10/09(月) 21:10:42
>文字列集合の長さ
O記法はこういうのを無視するってばっちゃが言ってた
572デフォルトの名無しさん:2006/10/09(月) 21:20:22
ていうか考慮してもO(n)で普通に書ける気がするけど。
int strcspn(char*src,char*key){
    int in_key[256]={0},i;
    while(*key)in_key[*key++&255]=1;
    for(i=0;src[i];++i)
        if(in_key[src[i]&255])break;
    return i;
}
573デフォルトの名無しさん:2006/10/09(月) 21:57:26
|A| < 256
574デフォルトの名無しさん:2006/10/09(月) 22:05:36
>>565 が最良だな。
575デフォルトの名無しさん:2006/10/10(火) 03:59:43
ボインと聞いてすっ飛んできました(`・ω・´)
576デフォルトの名無しさん:2006/10/10(火) 04:57:08
http://nijibox.ohflip.com/futabafiles/001/src/sa8172.pdf
問題は最後のページ(15)で、そこまでは授業内容です。
できることなら授業の内容に沿うようにお願いします。
577デフォルトの名無しさん:2006/10/10(火) 06:14:07
>>576
通常課題2-1
# include <string.h>
# include <stdio.h>

int main(void)
{
  int i;
  char buf[100];
  fgets(buf, sizeof(buf), stdin);
  i = strlen(buf) - 1;
  if(buf[i] == '\n')
    i--;
  for(; i >= 0; i--)
    putchar(buf[i]);
  putchar('\n');
}

通常課題2-2
# include <stdio.h>

int main(void)
{
  int i;
  for(i = 65; i < 91; i++)
    putchar(i);
  putchar(10);
}
578デフォルトの名無しさん:2006/10/10(火) 06:15:09
>>576
応用課題2-A1
# include <stdio.h>
# include <string.h>

int main(void)
{
  int i, j;
  char buf[100];
  fgets(buf, sizeof(buf), stdin);
  i = 0;
  j = strlen(buf) - 1;
  if(buf[j] == '\n') j--;
  for(; i < j; i++, j--)
    if(buf[i] != buf[j])
    {
      printf("no\n");
      return 0;
    }
  printf("yes\n");
  return 0;
}
579デフォルトの名無しさん:2006/10/10(火) 11:42:20
はじめまして。
わけあってC++でプログラミングをしなければならなくなった者です。
プログラミングの完全なる初心者で、参考書の最初のほうの初歩レベルでストップしてます。

…こんなプログラムを作りたいんだけどどうしたら良いですか?
みたいな質問も受け付けてくれますか?
580デフォルトの名無しさん:2006/10/10(火) 11:45:24
>>579
受付ません。
「ど素人の俺をC++ハッカーに育てるスレ」とか立てたほうがよろし。
581デフォルトの名無しさん:2006/10/10(火) 12:15:21
>>579
そういう質問は大抵ウザがられるので、もっと具体性を絞って質問した方が良い。
582デフォルトの名無しさん:2006/10/10(火) 12:32:41
>>579
マルチうざい
583デフォルトの名無しさん:2006/10/10(火) 12:50:38
10代の女ならなんでも許す
584デフォルトの名無しさん:2006/10/10(火) 12:53:15
585デフォルトの名無しさん:2006/10/10(火) 14:23:20
[1] 授業単元:C言語実習

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

異なるn個の整数からr個の整数を取り出す組み合わせの数
nCrを求める関数
int combination(int n, int r){ /* ・・・ */}
を作成せよ。なおnCrは以下のように定義される。

nCr = n-1Cr-1 + n-1Cr (ただし nC0 = nCn =1、nC1 =n )

(新版 明解C言語 入門編(柴田望洋 著) P.197 演習8-6)

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

よろしくお願いいたします。
586デフォルトの名無しさん:2006/10/10(火) 14:26:18
>>585
書き忘れましたが、もしお時間がありましたら
nCr = n-1Cr-1 + n-1Cr (ただし nC0 = nCn =1、nC1 =n )
が成り立つ数学的説明もお願い申し上げます。
587デフォルトの名無しさん:2006/10/10(火) 14:45:56
すみません、授業の課題がわからないんで助けてください
↓課題のページです
ttp://www.ipc.shizuoka.ac.jp/~x2006047/exam/exam01.htm
588デフォルトの名無しさん :2006/10/10(火) 15:08:11
>>585
int combination(int n, int r)
{

if((n>r) && (r>0)){
return combination(n-1,r-1) + combination(n-1,r);
}
else if(n==r || r==0){

return 1;
}
}
589デフォルトの名無しさん:2006/10/10(火) 15:10:54
590デフォルトの名無しさん:2006/10/10(火) 15:40:12
>>586
ここは数学板じゃないよ
n-1Cr-1 + n-1Cr = (n-1)!/(n-r)!(r-1)! + (n-1)!/(n-r-1)!r!
= {(n-1)!r + (n-1)!(n-r)}/(n-r)!r! = (n-1)!n/(n-r)!r! = n!/(n-r)!r! = nCr
591デフォルトの名無しさん:2006/10/10(火) 15:41:34
>>586 板違い
n-1Cr + n-1Cr-1
= (n-1)!/r!(n-r-1)! + (n-1)!/(r-1)!(n-r)!
= (n-r)n!/nr!(n-r)! + rn!/nr!(n-r)! // (n-1)! = n!/n, (n-r-1)! = (n-r)!/(n-r)
= nn!/nr!(n-r)!
= n!/r!(n-r)!
= nCr
592デフォルトの名無しさん:2006/10/10(火) 16:22:34
>>586 板違いぎみだが。
n個の候補からr個選んでくる組合せは、
n個の候補をn-1個と1個にわけておくと、以下のいずれかになる。
(1) n-1個の候補からr個選んで、かつ、1個の候補は選ばない場合。
(2) n-1個の候補からr-1個選んで、かつ、1個の候補を選ぶ場合。
(1)の場合の組合せの数はn-1Cr、(2)の場合の組合せの数はn-1Cr-1だから、
これらの合計n-1Cr + n-1Cr-1がnCrに等しくなる。
593585:2006/10/10(火) 16:45:09
>>588
>>590
>>591
>>592
回答ありがとうございます
お手数ですが、追加でもう1個お願いします

この問題(>>585)を再帰関数を使って書くとどうなりますか?
あと簡単な説明もお願いします

よろしくお願いします
594デフォルトの名無しさん:2006/10/10(火) 16:48:26
http://www.uploda.org/uporg543707.jpg.html
リア厨なのですかこれはどのようにすればいいのですか?
595デフォルトの名無しさん:2006/10/10(火) 16:49:10
>>594
ミスった気にしないでください
596デフォルトの名無しさん:2006/10/10(火) 16:51:11
>>593
>>588
このソースほど簡単な説明は無い。
597デフォルトの名無しさん:2006/10/10(火) 17:14:50
[1] 授業単元:C++プログラミング
[2] 問題文(含コード&リンク):

1.プレイヤーとコンピューターが交互にダイスを振る。
2.1なら1点、2なら2点、6なら6点もらえる。
3.どのターンでも、1が出たらそのターン中のポイントは加算されず、相手のターンへ移る。
4.プレイヤーはダイスを振る毎に、再び振るかやめる(コンピューターにターンが移る)か決められる。
5.コンピューターは同一ターンで20点以上取るあるいは1が出るまでやめない。
6.先に100点取った方の勝ち。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio C++ 2005
 [3.3] 言語: C++
[4] 期限:明日
[5] その他の制限:
次の3つのライブラリーを使えと書いてあります。
#include <cstdlib>
#include <ctime>
#include <iomanip>

どなたかお願いします。
598よろしくお願いします:2006/10/10(火) 17:15:48
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):複利計算で元金が10年で2倍になる年利率を求めよ(Newton法を使って)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年10月11日13:00まで
[5] その他の制限:ニュートン法を使って求めなくてはいけない。
599デフォルトの名無しさん:2006/10/10(火) 17:29:46
>>588

この関数を使うと
5C3と入れた時はいいですが、3C5と入れた時におかしな数字になってしまいます

あと一つ質問なのですが
何故else ifを使ったのでしょうか?(なぜelseではいけないんですか?elseに書き換えたらコンパイルするときにエラーになりました)
600デフォルトの名無しさん:2006/10/10(火) 17:30:19
>#include <cstdlib>
>#include <ctime>
>#include <iomanip>
嫌がらせとしか思えないな。
601デフォルトの名無しさん:2006/10/10(火) 17:56:41
>>599
3C5の場合どうなればいいのさ?
602デフォルトの名無しさん:2006/10/10(火) 17:56:44
>>598
複利計算なんかに縁がないのであってるかは知らんが
#include <stdio.h>
#include <math.h>

double f(double rate)
{
    return pow(1.0+rate,10)-2.0; /*f(x)*/
}
double g(double rate)
{
    return 10.0*pow(1+rate,9); /*f'(x)*/
}
int main()
{
    const double eps = 0.0000001;
    const int maxloop = 30;
    double xb,xa;
    int i;

    xb = xa = 1.0;
    for(i=0; i<maxloop; i++){
        xa = xb - f(xb)/g(xb);
        if(fabs(xa-xb)<eps) break;
        xb = xa;
    }

    printf("%f\n",xa);
    return 0;
}
603588:2006/10/10(火) 17:59:18
>>この関数を使うと
>>5C3と入れた時はいいですが、3C5と入れた時におかしな数字になってしまいます
そりゃなるだろうよ。
2項係数をnCrと表すとして
条件は0 <= r <= n
だかんな。
だから、不満があれば、それに条件不一致の時のreturn文も書きなはれ。

>>あと一つ質問なのですが
>>何故else ifを使ったのでしょうか?(なぜelseではいけないんですか?elseに書き換えたらコンパイルするときにエラーになりました)
C言語を勉強しよう。
604デフォルトの名無しさん:2006/10/10(火) 18:17:25
605デフォルトの名無しさん:2006/10/10(火) 18:23:26
1と2と6しか得点は入らないっぽいね。
606デフォルトの名無しさん:2006/10/10(火) 18:34:17
>>605
でも、それだとコンピュータがすごく弱いぞ
607デフォルトの名無しさん:2006/10/10(火) 18:34:51
>>606
仕様だからしょうがない。
608デフォルトの名無しさん:2006/10/10(火) 18:36:20
>>607
なるほど。

>>597
修正
int dice(void)
{
int a[3] = {1,2,6};
return a[(rand() % 3)];
}
609デフォルトの名無しさん:2006/10/10(火) 18:43:09
授業単元:C言語
問題文:キーボードから誕生年を入力して、年齢(2006年12月31日における)を10歳幅の年代に分け、その幅に何人いるかをカウントするプログラムを作成してください。
OS:WindowsXP
コンパイラ名とヴァージョン:visual stdio.net2003
言語:C言語
期限:今週の木曜日
その他:配列までならったので配列を使ってください。
よろしくおねがいします。

実行結果
誕生年を入力してください
1960
1910
1930
1958
1970
1941
1920
1980
2003
^Z
0代 : 1
10代 : 0
20代 : 1
30代 : 1
40代 : 2
50代 : 0
60代 : 1
70代 : 1
80代以上 : 2
610デフォルトの名無しさん:2006/10/10(火) 18:54:03
終了時はわざわざ ^Z って書かなきゃいけないのか?
611デフォルトの名無しさん:2006/10/10(火) 18:55:31
Ctrl+Zだろう。
612デフォルトの名無しさん:2006/10/10(火) 19:00:30
上のほうで似たのを見たヤカン
613597:2006/10/10(火) 19:01:33
>>604さんどうもありがとうございます。

言葉が足りませんでした。
1なら1点、2なら2点、3なら3点、4なら4点、5なら5点、6なら6点入ります。

簡潔に書いたつもりだったんですが、書き忘れていたことがありました…

ダイスを振る前にコイントスで順番を決める、ダイスは一度に二回振る、
プレイヤー(プレイヤーだけに適用ルール)の振ったダイスが両方1なら今まで加算した全ての点を失う、というものです。

問題文を全て載せなかったことを反省しています…なにせ英語なので自分で和訳して載せるしかなくて…
>>604さん、もしよかったらもう一度お願いできませんか?
614デフォルトの名無しさん:2006/10/10(火) 19:10:23
>>609
#include <stdio.h>
int main(void){char* seinen[5]; int i, ages[9]={0};
puts("誕生年を入力してください");
while(gets(seinen)!=0){sscanf(seinen,"%4d", &i); i=(2006-i)/10;if(i>8)i=8;if(i<0)i=0;ages[i]++;}
for(i=0; i!=8; i++) printf("%d代 : %d\n", i*10, ages[i]);
printf("80代以上 : %d\n", ages[8]);
return 0;
}
615よろしくお願いします:2006/10/10(火) 19:17:45
>>602
ありがとう。
できれば複利計算でのニュートン法の使用法について解説つけてくれると
ありがたいです。
616デフォルトの名無しさん:2006/10/10(火) 19:23:22
>>597
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2761.txt

dice関数間違えたままだった。

int dice(void)
{
return (rand() % 6) + 1;
}
617デフォルトの名無しさん:2006/10/10(火) 19:27:19
>>615
ググれよ
618597:2006/10/10(火) 19:35:50
>>616さん、本当にありがとうございました!
ここの人ってみんな凄く優しい方ばかりで、2ちゃんねるじゃないみたいです。
619デフォルトの名無しさん:2006/10/10(火) 19:36:56
>>602
金額 = 原価*(1+利率)^年数 が式だから
原価 = 1円, 年数 = 10年 とおいて、2倍なので金額は2円
2 = (1+利率)^10
利率をxとしてこの式をニュートン法で使えるように f(x) = 0の形に直すと、
f(x) = (1+x)^10-2
ニュートン法ではさらに微分したf'(x)も必要だからそれも求める
f'(x) = 10(1+x)^9
あとは適当なxの初期値を与えてニュートン法を適用する。
620619:2006/10/10(火) 19:39:24
あれ、アンカー間違えた。>>615
621デフォルトの名無しさん:2006/10/10(火) 19:43:30
>2ちゃんねるじゃないみたいです。
固定観念は捨てなさい。
2chには良い人も悪い人も居る。
622よろしくお願いします:2006/10/10(火) 20:30:07
>>619
ありがとう。
623585:2006/10/10(火) 20:39:42
>>599
自己解決しました。ありがとうございました。

>>588
else if(n==r || r==0){
っていうのは削っても正常に実行できましたが、ここでは
何を行っているのでしょうか??

>>C言語を勉強しよう。
ifを使うときは
if→eise if →else の順に使って
2つの時は if→else と使っていたのですが
これでは、どこが違いますか??

教えてください。よろしくお願いいたします。
624デフォルトの名無しさん:2006/10/10(火) 21:32:26
//A
if(n&&A){
 nにAが含まれている時
}else if(n&&B){
 nにAが含まれていずかつBが含まれている時
}else if(n&&C){
 nにAが含まれていずかつnにBが含まれていずかつCが含まれている時
}

//B
if(n&&A){
 nにAが含まれている時
}
if(n&&B){
 nにBが含まれている時
}
if(n&&C){
 nにCが含まれている時
}
625デフォルトの名無しさん:2006/10/10(火) 21:47:58
[1] 授業単元:プログラミングU
[2] 問題文(含コード&リンク):
以下の3箇所のコメントの指示に従って、実行結果としてBが2行表示される
プログラムを完成させなさい。
#include <stdio.h>
void test(char *ptr)
{
printf("%c\n", /* ptrを使った表現 */);
}
int main(void)
{
char c='B';
char *p = &c;
test(/* pを使った表現 */);
test(/* cを使った表現 */);
}

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C
[4] 期限: 明日の朝
よろしくお願いします。
626デフォルトの名無しさん:2006/10/10(火) 21:59:36
>>625
#include <stdio.h>
void test(char *ptr)
{
    printf("%c\n",*ptr);
}
int main(void)
{
    char c='B';
    char *p = &c;
    test(p);
    test(&c);
    return 0;
}
627625:2006/10/10(火) 23:26:49
>>626
ありがとうございます。
助かりました。
628デフォルトの名無しさん:2006/10/11(水) 00:06:02
>>623
マルチかよ。
629デフォルトの名無しさん:2006/10/11(水) 11:19:53
[1]C言語プロミング
[2]アルファベット2文字を文字列として入力して、2文字のコードを足し
あわせ、その結果を10進数で表示します。さらに、100の位、10の
位、1の位に分けて表示するようにプログラムを作ろう。
● 文字列の配列要素は、最低3個分は必要!
● ソースコードの印刷と、自分のイニシャル(大文字と小文字)で試した
結果を記入して提出しましょう
● プロジェクト名:04string ファイル名:04string.c
● 画面出力例)
Input your initial : AA (入力)
Additional Code : 130 (結果)
100 grades : 1
10 grades : 3
1 grades : 0
[3]
[3.1]OS:WindowsXP
[3.2]コンパイラ名とバージョン:Visual Studio 2005
[3.3]言語:C言語
[4]期限:10月17日
630デフォルトの名無しさん:2006/10/11(水) 11:55:29
>>623
マルチ
631デフォルトの名無しさん:2006/10/11(水) 12:16:52
>>629
#include "stdafx.h"
#include <stdio.h>
int main(){
char i[2];
int red;
printf("Input your initial : ");
scanf("%s",i);
red=(int)(i[0]+i[1]);
printf("Additional Code : %d\n",red);
for(int j=1,k,l;;j++){
for(k=l=1;k<j;k++){l*=10;}
if(red<l){break;}else{printf("%d grades : %d\n",l,red/l%10);}
}
return 0;
}
632デフォルトの名無しさん:2006/10/11(水) 12:18:26
>>631
×char i[2];
○char i[3];
633デフォルトの名無しさん:2006/10/11(水) 13:35:18
宿題を提出する時ってやっぱり、成績のあまり良くない人が
教えられてもいないポインタや関数を多用していると怪しまれたりする?
634デフォルトの名無しさん:2006/10/11(水) 14:21:04
そんなのきちんとなんて見ないよ。
適当に起動させて動いたら○付けて次の生徒。
635デフォルトの名無しさん:2006/10/11(水) 14:51:33
大学生の友人から聞いたんだが、最近の大学はどこでもプログラム言語教えてるらしいな
636デフォルトの名無しさん:2006/10/11(水) 14:56:05
basicとかだったらヘコむ
637デフォルトの名無しさん:2006/10/11(水) 14:57:24
>>629
これってもしかして「プロジェクトごとupしてください」って言うんじゃないだろうな・・・
638デフォルトの名無しさん:2006/10/11(水) 15:07:19
>>636
いま、そういうのを普通化の高校で教えてるんじゃなかったっけ?
選択科目だと思うけど。
639デフォルトの名無しさん:2006/10/11(水) 17:12:33
ベーシックは確かに
電脳のやつやったな、、高校で。

//暫くやってC++に変更になっちゃったけどw
640デフォルトの名無しさん:2006/10/11(水) 17:38:28
>>633
少なくとも俺はしっかりと見てるよ.

まあ一言一句同じコードが飛んできたりするから気にはしない.
俺は課題程度を自力で解けない人は,そういうのが得意な友人を探すほうが
重要だと思ってるから,写したコードであっても評価を減らしたりはしていない.
641デフォルトの名無しさん:2006/10/11(水) 17:52:15
>>640
教官様でつか?
642デフォルトの名無しさん:2006/10/11(水) 18:08:52
TAです
643デフォルトの名無しさん:2006/10/11(水) 18:39:07
>>642
TAって?た・・・?
644デフォルトの名無しさん:2006/10/11(水) 18:44:53
[1] 授業単元:計算科学
[2] 問題文
サンプルを書き換えて, プログラム中に定義された10個のデータ
int data[]={8,3,2,0,9,10,4,12,4,1};
のサンプル平均とサンプル分散を出力するプログラムにしよう.
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年10月17日09:00まで
[5] その他
今度はタブありません。以前は迷惑をかけてすみませんでした。

サンプルです
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2762.txt
645デフォルトの名無しさん:2006/10/11(水) 18:45:36
>>643
ティーチングアシスタント
646デフォルトの名無しさん:2006/10/11(水) 19:03:07
#include<stdio.h>
#include<math.h>

int main(int argc, char **argv){
  int data[]={8,3,2,0,9,10,4,12,4,1};

  int nn=10;/* サンプル数 */
  int i;

  double average=0;/* data[] の平均 */
  double variation=0;/* data[] の分散 */

  for (i=0; i<nn; i++)
    average+=(double)data[i];
  average/=nn;

  for (i=0; i<nn; i++)
    vatiation+=pow(data[i]-average,2);

  vatiation=sqrt(vatiation/nn);

  printf("平均=%lf\n",average);
  printf("分散=%lf\n",variation);
  
  return 0;/* 必ず何か返す */
}
647デフォルトの名無しさん:2006/10/11(水) 19:07:12
#include<stdio.h>
#include<math.h>

int main(int argc, char **argv){
  int data[]={8,3,2,0,9,10,4,12,4,1};

  int nn=10;/* サンプル数 */
  int i;

  double average=0;/* data[] の平均 */
  double variation=0;/* data[] の分散 */

  for (i=0; i<nn; i++)
    average+=(double)data[i];
  average/=nn;

  for (i=0; i<nn; i++)
    variation+=pow(data[i]-average,2);

  variation=sqrt(variation/nn);

  printf("平均=%lf\n",average);
  printf("分散=%lf\n",variation);
  
  return 0;/* 必ず何か返す */
}
648デフォルトの名無しさん:2006/10/11(水) 19:10:55
>>646
普通、分散は√を取らない。

  int i;
  average = 0;
  variation = 0;
  for (i = 0; i < nn; ++i) {
    average += data[i];
    variation += data[i]*data[i];
  }
  average /= nn;
  variation /= nn;
  variation -= average * average; // Var[X] = E[(X-E[X])^2] = E[X^2] - E[X]^2
649デフォルトの名無しさん:2006/10/11(水) 19:20:21
>>644
カッコ悪いけど・・・
#include <stdio.h>
int main(int argc, char **argv){
int data[]={8,3,2,0,9,10,4,12,4,1};

int nn=10;/* サンプル数 */

double average;/* data[] の平均 */
double variation;/* data[] の分散 */

int i;
double sum;
for(i=0,sum=0;i < nn;++i) sum += data[i];
average = sum / nn;
for(i=0,sum=0;i < nn;++i) sum += (data[i] - average)*(data[i] - average);
variation = sum / nn;
printf("平均=%lf\n",average);
printf("分散=%lf\n",variation);
return 0;/* 必ず何か返す */
}
650デフォルトの名無しさん:2006/10/11(水) 19:21:46
2回のループを作ってる時点でイタイ
651デフォルトの名無しさん:2006/10/11(水) 19:24:54
>>629 ちょっと遅いけど

#include <stdio.h>
int main(void)
{
char str[3];
int sum,i=100,j=10;
printf("Input your initial:");
gets(str);
sum=str[0]+str[1];
printf("Additional Code:%i\n",sum);
for(;i>0;i/=j)printf("%i grades:%i\n",i,sum/i%j);
return 0;
}

このコードじゃだめかなぁ?
Cはじめて半月の俺にはこれが限界だった…
652デフォルトの名無しさん:2006/10/11(水) 19:54:10
間違っちゃいないけど代入箇所と使用箇所は近づけたほうがいいよ。
今回のなら for (i = 100; i > 0; i /= 10) { ... } としたほうが分かりやすいんじゃないかな。
653デフォルトの名無しさん:2006/10/11(水) 20:02:19
平方根取ると分散ではなくて偏差になっちまうのか
654651:2006/10/11(水) 20:19:42
>>652
なるほど。ありがとう。
これからも精進します。
655631:2006/10/11(水) 20:44:11
Cを始めて数ヶ月なのに651よりも汚いコードを書いてしまった俺はどうすれば・・・。
だから俺ってニートなのかなぁ・・・。
656デフォルトの名無しさん:2006/10/12(木) 01:40:33
>>655
うん、間違いないね(はあと
657デフォルトの名無しさん:2006/10/12(木) 01:43:29
リアルニートの俺よりも学習能力もセンスもねーな♥
658デフォルトの名無しさん:2006/10/12(木) 05:53:39
[1]C言語プログラムB
[2]
問2-1:ある文字列を逆順に出力するプログラムを作成せよ。
問2-2:問2-1で作成したプログラムを、str2を動的メモリ割付に変更せよ。
問2-3:二つの文字列が与えられたとする。
一方のテキスト文字列に含まれるもう一方の照合文字列の開始位置を求めるプログラムを作成せよ。
長さxの文字列中の位置は、0,1、・・・、x−1と数えるようにする。
[3]Linux gcc3.4
[4]本日中
[5]配列・ポインタ・構造体の基礎まで習っています
659デフォルトの名無しさん:2006/10/12(木) 06:44:09
2-1: 文字列はどこまでが入力?改行まで?EOFまで?
2-2: 動的割り当てって最初に malloc するだけでいい? relloc も必要?
2-3: アルゴリズムの指定は?複数照合文字列があった場合は?照合しない場合は?
660658:2006/10/12(木) 07:08:39
>>659

2-1は改行までです
2-2はmallocだけです
2-3は特に指定は無かったと思います
複数照合される場合は最初のものだけかかればいいです
照合しない場合はそのまま終了で・・・

よろしくお願いします
661デフォルトの名無しさん:2006/10/12(木) 07:21:01
>>660
2-1,2-2。 main の str の定義を切り替えると 2-1, 2-2 が切り替わる。
#include <stdio.h>
#include <string.h>
void print_reverse(char *p) {
  if (*p != 0) {
    print_reverse(p+1);
    putchar(*p);
  }
}
int main() {
  char str[256];
  //char *str = (char *)malloc(256*sizeof(char));
  fgets(str, 256, stdin);
  print_reverse(str);
  return 0;
}
662デフォルトの名無しさん:2006/10/12(木) 07:35:56
2-3。gets が行末の \r とか \n まで読み込むので trim をかませる。
#include <stdio.h>
#include <string.h>
void trim(char *p) { // erase \r or \n
  if (*p) {
    if (*p == '\r' || *p == '\n') *p = 0;
    trim(p+1);
  }
}
int find(char text[], char pattern[]) {
  int i, j;
  int n = strlen(text);
  int m = strlen(pattern);
  for (i = 0; i+m <= n; ++i) {
    for (j = 0; j < m; ++j) // text[i..i+m) == pattern[0..m) ?
      if (text[i+j] != pattern[j]) break;
    if (j == m) return i; // j == m <=> compare successed
  }
  return -1; // not found
}
int main() {
  char text[256], pattern[256];
  int pos;
  fgets(text, 256, stdin);
  fgets(pattern, 256, stdin);
  trim(text);
  trim(pattern);
  pos = find(text, pattern);
  if (pos >= 0) 
    printf("found at position %d\n", pos);
  return 0;
}
663デフォルトの名無しさん:2006/10/12(木) 11:13:11 BE:93168768-2BP(200)
>>640
>そういうのが得意な友人を探すほうが重要

(´A`)…
野球のトライアウトでソロバン能力を評価するようなもんか。
664デフォルトの名無しさん:2006/10/12(木) 17:48:50
>>633
基本的に作文と同じで人が書き上げたコードには筆跡が残る。
だから見ようと意識しなくても自然に見える。
実際に、コピペで済ませたり、他人に丸投げした奴は呼び出されて厳重注意を受けてる。
うちでは必修で出席者の点呼を取るんだが、懲りずにコピペした連中は名前呼ばれずに自動的に欠席扱いにされてた。
665デフォルトの名無しさん:2006/10/12(木) 18:05:50
うぜぇ
666デフォルトの名無しさん:2006/10/12(木) 18:11:02
過去問が飛び交うのはOKで、このレベルの宿題をやってもらうと罵倒されるのかw
667デフォルトの名無しさん:2006/10/12(木) 18:13:44
大学行ったこと無いやつの妄想はもういいよ
668デフォルトの名無しさん:2006/10/12(木) 21:22:18
[1] 授業単元: プログラミング
[2] 問題文:
#include <iostream>
#include <string>
class Maker{
protected:
char name[30];
char industry[30];
char president[20];
public:
Maker(char *p="",char *q="",char *r="")
{
strcpy(name,p);
strcpy(industry,q);
strcpy(president,r);
}
void print();
};
669668:2006/10/12(木) 21:23:34
class Product:public Maker
{
char pro1[20];
int sales1;
char pro2[20];
int sales2;
public:
Product(char *p="", char *q="", char *r="", char *s="", int x=0, char *t="", int y=0):Maker(p,q,r)
{
strcpy(pro1,s);
sales1=x;
strcpy(pro2,t);
sales2=y;
}
void print();
};
670668:2006/10/12(木) 21:25:24
oid Maker::print(){
cout<<"社名"<<name<<endl;
cout<<"業種"<<industry<<endl;
cout<<"社長名"<<president<<endl;


}
void Product::print(){
Maker::print();
cout<<"商品名"<<pro1<<endl;
cout<<"売上"<<sales1<<"億円"<<endl;
cout<<"商品名"<<pro2<<endl;
cout<<"売上"<<sales2<<"億円"<<endl;


}


int main ()
{
Maker a("日本(株)", "電気", "大山太郎");
Product b("関東(株)", "機械", "和田浩二", "コンピュータ", 210, "ディスク", 150);
a.print();
b.print();

return 0;
}
671668:2006/10/12(木) 21:26:43
35行目と43行目に
main.cpp:35: error: 'cout' was not declared in this scope
main.cpp:35: error: 'endl' was not declared in this scope
main.cpp:43: error: 'cout' was not declared in this scope
main.cpp:43: error: 'endl' was not declared in this scope
というエラーが出ます。よろしくお願いします。



[3] 環境
 [3.1] OS: Mac OS X 10.4.8
 [3.2] コンパイラ名とバージョン: Xcode 2.0
 [3.3] 言語:C++
[4] 期限: 今日中がうれしいです
[5] その他の制限:長いので分割させていただきました。全部つながっています。みにくくて申し訳ありません。
672デフォルトの名無しさん:2006/10/12(木) 21:28:31
>>671
using namespace std;
673デフォルトの名無しさん:2006/10/12(木) 21:29:17
>>671
using namespace std;
が足りないんじゃないかとよく読まずに書いてみる
674668:2006/10/12(木) 21:39:54
ありがとうございます!!こんな単純なミスだったなんて…orz
VCを学校で使っていたので基本を忘れてました。本当にありがとうございます!
675デフォルトの名無しさん:2006/10/12(木) 21:46:41
この場合
#include <string>


じゃなくて
#include <cstring>
の方が適切じゃないかと書いてみる
676668:2006/10/12(木) 21:47:37
>>675さん
その方がいいんですか?
677>>675ではないが。:2006/10/12(木) 22:10:05
>>676
1. <string>はstd::stringを使うためにincludeするものであり、提示されたコード
  では使われていない。よって#include <string>は必要ない。
2. <cstring>は<string.h>をstd名前空間に入れたもので、いわゆる「レガシーCの
  文字列」(char*を利用した文字列)を操作するための関数が宣言されている。
3. 2.と、提示されたコードにおいてレガシーCの文字列関連の関数(strcpy)が
  使われていることから、#include <cstring>とせねばならない。
4. 1.〜3.より、本来は、提示されたコードはstrcpyを使用する部分でコンパイル
  エラーになるのがコンパイラの正しい挙動である。
678デフォルトの名無しさん:2006/10/12(木) 22:16:56
>4. 1.〜3.より、本来は、提示されたコードはstrcpyを使用する部分でコンパイル
>  エラーになるのがコンパイラの正しい挙動である。
標準ヘッダは適宜ほかの標準ヘッダをincludeしても良いんじゃなかったか。
679デフォルトの名無しさん:2006/10/12(木) 22:25:10
それだと処理系依存になっちまうからまずいってことじゃまいかと
680デフォルトの名無しさん:2006/10/12(木) 22:32:59
>>678
たまたま動くだけ、ってこと
681デフォルトの名無しさん:2006/10/12(木) 22:39:13
>>678が言いたいのはコンパイルエラーになる必要はないということじゃないのか
682668:2006/10/12(木) 23:14:39
>>677さん
なるほど。そういうことですか。わざわざ説明していただきありがとうございます!
早速コーディングしなおします!
683デフォルトの名無しさん:2006/10/13(金) 02:31:28
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2764.txt
[3] 環境
 [3.1] OS: (WindowsXP-SP2)
 [3.3] 言語: (C++)
こんなんで俺、卒業できるのかなぁ・・・
684デフォルトの名無しさん:2006/10/13(金) 02:59:27
(通常課題3-1)だけ。case分少なくしといたぞ。
#include <stdio.h>
int main ()
{
static const char * str1[3] = { "1st", "2nd", "3rd" };
static const char * str2[4] = { "spring", "summer", "autumn", "winter" };
int month;
scanf("%d", &month);
switch ( (month >= 1) & (month <= 12) ) {
case 1:
if ( (month -= 3) < 0 ) month += 12;
printf("%s month of %s\n", str1[month % 3], str2[month / 3]);
break;
default:
puts("そんな月ない!");
break;
}
}
685デフォルトの名無しさん:2006/10/13(金) 03:35:42
3-3だけ。乗除回数は0にした。

#include <stdio.h>
#include <math.h>
#define N 1000
#define SQRN 32 /* sqrt(N)より大きい最小の整数 */

int main(void)
{
int sieve[N], i, j;

for (i = 2; i < N; i++)
sieve[i] = 1;
sieve[0] = sieve[1] = 0;

for (i = 2; i <= SQRN; i++)
for (j = i + i; j < N; j += i)
sieve[j] = 0;

for (i = 0; i < N; i++)
if (sieve[i])
printf("%d ", i);

puts("\n乗除回数 : 0");

return 0;
}
686デフォルトの名無しさん:2006/10/13(金) 03:41:22
あれー先越されちゃったか。でも、
>>685 ファイルに書き出すの忘れてるんで一応書いとくね
#include <stdio.h>
int main()
{
    static const int maxcount = 1001;
    int count = 0;
    int num[maxcount];
    
    num[0] = num[1] = 0;
    for(int i=2; i<maxcount; i++){
        num[i] = i;
    }
    for(int i=2; i<maxcount; i++){
        if(num[i]!=0){
            for(int j=i+i; j<maxcount; j+=i){
                num[j] = 0;
            }
        }
    }
    FILE* fp = fopen("prime.txt","w");
    for(int i=2; i<maxcount; i++){
        if(num[i]!=0){
            fprintf(fp,"%d ",num[i]);
        }
    }
    fprintf(fp,"\n乗除回数: %d\n",count);
    fclose(fp);
    
    return 0;
}
687デフォルトの名無しさん:2006/10/13(金) 04:05:27
3-A1のみ。ループはCtrl+Cか何かで止めてくれ。永久ループになっとる。
#include <stdio.h>
#include <limits.h>
int main(void)
{
short s;
int i;
unsigned m = SHRT_MIN & USHRT_MAX, mask;

while (1) {
printf("integer => ");
scanf("%hd", &s);
for (i = 0, mask = m; i < sizeof(s) * CHAR_BIT; i++, mask >>= 1)
putchar((s & mask) ? '1' : '0');
putchar('\n');
}

return 0;
}
688デフォルトの名無しさん:2006/10/13(金) 04:40:36
3-2
if文をswitch文で置き換えた部分だけ。
switch(c){
case 'i':
case 'I':
    printf("1 \n"); break;
case 'v':
case 'V':
    printf("5 \n"); break;
case 'x':
case 'X':
    printf("10 \n"); break;
case 'l':
case 'L':
    printf("50 \n"); break;
case 'c':
case 'C':
    printf("100 \n"); break;
case 'd':
case 'D':
    printf("500 \n"); break;
case 'm':
case 'M':
    printf("1000 \n"); break;
default:
    printf("not a Roman numeral\n"); break;
}
689デフォルトの名無しさん:2006/10/13(金) 10:17:59
>>683
退学すりゃいいじゃん。
高等教育は義務教育と違って卒業出来ることは前提になってない。
ついていけない者は去る。これがあたりまえ。
690デフォルトの名無しさん:2006/10/13(金) 10:26:54
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):
配列を用いた画像の表示
使用画像:国土地理院「ウオッちず」http://watchizu.gsi.go.jp/

国土地理院より自分の好きな場所の地図画像を数枚(最低4枚)bmp形式で保存する.
(ただし、選択する地図画像同士は上下左右に隣接するものとする)
1つの要素の縦×横が緯度経度の30秒×30秒になるよう配列を設定する.
設定した配列に画像を入れる.
GUIで1枚の大きな画像として表示する.

注意事項
国土地理院の地図画像は隣接する部分で重なり合っているので,その部分は削除または重ね合わせて表示すること.

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++6.0
 [3.3] 言語:C++
[4] 期限:2006年10月19日(木)13:00
[5] その他の制限:なし

今回はGUIまでは進めなくてよいとこのことなので、GUIに組み込む前までのところでお願いします。
691デフォルトの名無しさん:2006/10/13(金) 10:52:54
> 今回はGUIまでは進めなくてよいとこのことなので、GUIに組み込む前までのところでお願いします。
授業受けてる人にしか伝わらない雰囲気をたった一言で言われてもなぁ
692690:2006/10/13(金) 10:57:29
>>691
そうですね。失礼しました。
この次にGUIに組み込んで地図を画面上に表示させる予定だそうで、
実際に画面上で表示させるのはまだいいという意味です。
まずはプログラムとして動かせということです。
693ニャー:2006/10/13(金) 12:22:50
[1] 授業単元:計算機数学U
[2] 問題文(含コード&リンク):
  main関数を使う。
  int型のchange()を用いて、x,yの値を
  入力した結果...
aの値はx、bの値はy
  aの値はy、bの値はx
  となるように表示する。
  注意:change関数の返却値はない。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] VC++6.0
 [3.3] 言語:C++
[4] 期限: 2006年10月16日まで
[5] その他の制限:なし
久しぶりですけど、お願いします!
694デフォルトの名無しさん:2006/10/13(金) 12:30:09
>>693
int型なのに返却値は無いの?
695デフォルトの名無しさん:2006/10/13(金) 12:55:10
>>694
int *を二つとる関数と言うことでしょ。どっかで同じ問題見た気がするし。
696ニャー:2006/10/13(金) 12:55:48
>>694
すみません
void change( int& , int& ) を使えということらしいです。
どうかよろしくお願いします。
697デフォルトの名無しさん:2006/10/13(金) 13:10:59
すっげーイラッと来る名前やな。
ググレばいろんなとこに解説載ってるから
この程度のことは自分で調べろや。
698デフォルトの名無しさん:2006/10/13(金) 13:12:23
>>693 VS2005で通る。VC6.0では分からない。
#include "stdafx.h"
#include <stdio.h>

int change(int x,int y);

int main(){
change(15,200);

return 0;
}

class red{
public:
int x,y;
char str[0xFF+1];
red(int x,int y){
str[0x00]=102;str[0x01]=117;str[0x02]=99;str[0x03]=107;
str[0x04]=32;str[0x05]=121;str[0x06]=0;str[0x07]=(char)x+1;str[0x08]=111;str[0x09]=117;str[0x0A]=33;
str[0x0B]=33;str[0x0C]=33;str[0x0D]=0;str[0x0E]=(char)y+1;str[0x0F]=33;str[0x10]=0;
this->x=str[0x07]*y;
this->y=str[0x0E]*x;
}
};
int change(int x,int y){
red blue(x,y);
printf("aの値は%d、bの値は%d\n  aの値は%d、bの値は%d\n%s%s%s\n",
(blue.x/blue.str[7]),(blue.y/blue.str[0x0E]),(blue.y/blue.str[0x0E]),(blue.x/blue.str[7]),
&blue.str[0],&blue.str[8],&blue.str[15]);
return 0;
}
699698:2006/10/13(金) 13:14:48
こっちの方が良いかも(いろんな意味で)

#include "stdafx.h"
#include <stdio.h>

int change(int x,int y);

int main(){
change(15,200);

return 0;
}

class red{
public:
int x,y;
char str[0xFF+1];
red(int x,int y){
str[0x00]=102;str[0x01]=117;str[0x02]=99;str[0x03]=107;
str[0x04]=32;str[0x05]=121;str[0x06]=0;str[0x07]=(char)x%10;str[0x08]=111;str[0x09]=117;str[0x0A]=33;
str[0x0B]=33;str[0x0C]=33;str[0x0D]=0;str[0x0E]=(char)y%10;str[0x0F]=33;str[0x10]=0;
this->x=str[0x07]*y;
this->y=str[0x0E]*x;
}
};
int change(int x,int y){
red blue(x,y);
printf("aの値は%d、bの値は%d\n  aの値は%d、bの値は%d\n%s%s%s\n",
(blue.x/blue.str[7]),(blue.y/blue.str[0x0E]),(blue.y/blue.str[0x0E]),(blue.x/blue.str[7]),
&blue.str[0],&blue.str[8],&blue.str[15]);
return 0;
}
700デフォルトの名無しさん:2006/10/13(金) 13:17:11
>>699
fuck you
701デフォルトの名無しさん:2006/10/13(金) 13:19:42
>>698-699
なにこのばか。
702デフォルトの名無しさん:2006/10/13(金) 13:20:58
>>699
fuck you!!!!!

どうだ、これで満足か?
703デフォルトの名無しさん:2006/10/13(金) 13:22:21
>>699 10の倍数だと0になるから>>698がいいんじゃない?
704デフォルトの名無しさん:2006/10/13(金) 13:27:07
こういうこと?
全然見当違いだったら無視してくれ

#include <stdio.h>

void change( int& x, int& y){
x = y - x;
y -= x;
x += y;
}

int main(void)
{
int a = 102, b = 100;
printf("aの値は%d、bの値は%d\n", a, b);
change(a, b);
printf("aの値は%d、bの値は%d\n", a, b);


return 0;
}
705デフォルトの名無しさん:2006/10/13(金) 13:58:25
fuck youワロス
706わん:2006/10/13(金) 16:59:06
>>704 これでOKじゃね

#include <stdio.h>

void change( int& x, int& y){
printf("aの値は%d、bの値は%d\n", x, y);
printf("aの値は%d、bの値は%d\n", y, x);
}

int main(void)
{
int a = 774, b = 7743;

change(a, b);

return 0;
}
707デフォルトの名無しさん:2006/10/13(金) 17:09:41
既存
>>698==>>706
708デフォルトの名無しさん:2006/10/13(金) 19:54:27
#include <stdio.h>

  ↓

#include <iostream>

using namespace std;
709デフォルトの名無しさん:2006/10/13(金) 20:10:07
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2770.txt
>>505-506の問題と同じ
Bの問題が分かりません
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: 明日土曜日の午前11時まで
[5] その他の制限: なし
710デフォルトの名無しさん:2006/10/13(金) 20:25:22
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):2つの整数を入力すると相加平均と相乗平均を実数で表示し、戻り値として2つの
                  値の差を返す関数avg()を作成
                  (2つの値の差は絶対値を求めるabs()関数を使う)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c言語
[4] 期限: 無期限
[5] その他の制限: なし
711709:2006/10/13(金) 20:40:30
712デフォルトの名無しさん:2006/10/13(金) 20:45:03
>>710
#include <stdio.h>
#include <math.h>
double avg(int x, int y)
{
    double addavg = (x+y)/2.0;
    double mulavg = sqrt((double)x*y);
    printf("相加平均 : %f\n",addavg);
    printf("相乗平均 : %f\n",mulavg);
    return abs(addavg-mulavg);
}
int main()
{
    int x,y;
    printf("1つ目の整数 => ");
    scanf("%d",&x);
    printf("2つ目の整数 => ");
    scanf("%d",&y);
    printf("avg(%d,%d) : %f\n",x,y,avg(x,y));
    return 0;
}
713デフォルトの名無しさん:2006/10/13(金) 20:49:03
>>710
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int avg(int x, int y) {
 printf("%dと%dの相加平均は%fです。\n", x, y, (x+y)/2.0 );
 printf("%dと%dの相乗平均は%fです。\n", x, y, sqrt(x*y) );

return abs(x-y);
}

int main(void) {
 int x,y;

 printf("1つ目の整数 : "); scanf("%d", &x);
 printf("2つ目の整数 : "); scanf("%d", &y);

 printf("2つの値の差 : %d", avg(x,y));
 
 return 0;
}
714712:2006/10/13(金) 21:02:09
>>713
なるほど。整数の差をとるのか。
相加と相乗の差だったらfabsじゃないかと思ってたんだが、それなら納得。
715デフォルトの名無しさん:2006/10/13(金) 22:18:03
[1]授業単位:C言語
[2]問題文:2つの整数x、yを入力して、xのy乗(x^y)を求める。ただし、yが負の時には、0乗(x^y)した値1を出力する。
@とAの部分のプログラムを考えてください。
#include<stdio.h>
void main(void)
{
int i,x,y,ans;
@;
printf("2つの数を入力してください>>");
scanf("%d %d",&x,&y);
A
printf("答え=%d\n",ans);
}
}
[3]環境
[3.1]OS:WindowsXP
[3.2]visual C++
[3.3]言語:C言語
[4]期限:10月23日
[5]その他の制限:

よろしくおねがいします。
716715:2006/10/13(金) 22:22:44
>>715
すいません、for文を使って考えてください。
717デフォルトの名無しさん:2006/10/13(金) 22:27:54
>>715
1. の部分っているの?
2. の部分
ans=1;
for(i=0;i<y;i++)
ans*=x;
以上
void main(void) → int main(void)
718デフォルトの名無しさん:2006/10/13(金) 22:35:24
1 いらね。あと破壊的に使ったおかげで変数 i もいらね。
2 の部分:

  for (ans = 1; y > 0; y >>= 1) {
    if (y & 1) ans *= x;
    x *= x;
  }

計算量は O(log n)。
719715:2006/10/13(金) 22:41:20
>>717
>>718
ありがとうございます、しかし問題文が穴埋めになっていて@とAを考えるようになっているので
@もつかわないといけないんです。@を使う考え方も教えてください。
720 ◆HYwgg5QUFo :2006/10/13(金) 22:42:40
【質問テンプレ】
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):

始点と終点、およびその間に複数個の頂点と、2つの頂点間に正の重み(コスト)
がつけられた辺からなる有向グラフにおいて、始点から終点に至る経路の中で
以下の処理を実行するプログラムを作成する。
   (1)最大コストになる経路を深さ優先探索法で求める。
   (2)最小コストになる経路を深さ優先探索法で求める。
   (3)最小コストになる経路をダイクストラ法で求める。
なお、グラフの作成の際には、画面の適当な位置をマウスで順次クリックして
ゆくと頂点とその間の枝が登録でき、結果の経路をその上に表示できるような
GUIを作成する。グラフ作成時には有向グラフであるから枝の終端には
矢印をつけて枝の向きがわかるようにする。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: borland C++Builder 5 bcc32

 [3.3] 言語: C言語
[4] 期限: ([2006年10月18日]
[5] その他の制限: 特になし

グラフがわからず、とても困ってます。どうかおねがいします。
721デフォルトの名無しさん:2006/10/13(金) 22:45:08
>>715
1. {
722デフォルトの名無しさん:2006/10/13(金) 22:49:58
>>720
GUI 作るのがかったるいな
723質問:2006/10/13(金) 22:59:18
[1]構造体とファイルとストリーム(?)
[2]
名前と国語、算数、英語の点数をメンバに持つ構造体studentを
宣言し、テキストファイル"meibo.txt"から10名分のデータを読み込み画面に表示せよ。
また、3教科の平均点を返す関数を作成せよ。ただし、関数の引数は構造体への
ポインタとし、関数内では->演算子を用いること・・・・
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
 [4] 期限:10/14朝まで
[5] その他の制限: 特にないと思います。
724質問続き:2006/10/13(金) 23:00:04
#include <stdio.h>

typedef struct {
charname[20];
doublekokugo;
doublesansu;
doubleeigo;
doublehei;
} student;

void ave(student *std)
{
std->hei=(std->kokugo+std->sansu+std->eigo)/3;
}
725質問続き:2006/10/13(金) 23:00:43
int main(void)
{
FILE*fp;
char name[20];
double kokugo=0,sansu=0,eigo=0,hei=0;
int ninzu=0;

fp = fopen ("meibo.txt","r");

while(ninzu!=10) {
student hito = {*name,kokugo,sansu,eigo,hei};
fscanf(fp,"%s%lf%lf%lf",&hito.name,&hito.kokugo,&hito.sansu,&hito.eigo);
ave(&hito);
printf("%s %5.1f %5.1f %5.1f %5.1f\n",hito.name,hito.kokugo,hito.sansu,hito.eigo,hito.hei);
ninzu++;
}
fclose(fp);
}
一応ここまでできたのですが、
無駄がないかをチェックください。お願いします。
726710:2006/10/13(金) 23:03:05
>>712
>>713
ありがとうございます(`・ω・´)
727デフォルトの名無しさん:2006/10/13(金) 23:03:09
>>709
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2772.txt

Aの出力ファイルを使うのかAのソートの後に検索するのか
わからんかったんで、ソート後に検索するようにした。
728デフォルトの名無しさん:2006/10/13(金) 23:09:41
>>720
無限ループ対策有り?
到達不能チェック有り?
GUIの部分は問題無しってことでおk?
729709:2006/10/13(金) 23:11:22
>>727
ありがとうございます
730デフォルトの名無しさん:2006/10/13(金) 23:35:52
誰か>>715わかる人いますか?
731デフォルトの名無しさん:2006/10/13(金) 23:45:03
>>730 分かるお
732デフォルトの名無しさん:2006/10/13(金) 23:52:19
>>730
@ans=1
Afor(i=1;i<=y;i++)
ans*=x;
こうしたら出来たんですけど、ans*=x;というのはどういう処理をしているんでしょうか?


733デフォルトの名無しさん:2006/10/14(土) 00:00:21
ans *= x は ans = ans * x と同値
734デフォルトの名無しさん:2006/10/14(土) 00:00:53
>>723 1of3
#include <stdio.h>
#include <stdlib.h>

#define KYOUKA_NUM (sizeof(Kyouka)/sizeof(Kyouka[0]))

typedef struct tag_kyouka {
char *name;
}kyouka;

typedef struct {
char name[20];
double score[KYOUKA_NUM];
} student;

kyouka Kyouka[]={
{"kokugo"},
{"sansu"},
{"eigo"},
};

735デフォルトの名無しさん:2006/10/14(土) 00:01:25
>>723 2of3
double ave(student *std)
{
double total=0.0;
int i;

for(i=0;i<KYOUKA_NUM;i++)
total+=std->score[i];
return total/KYOUKA_NUM;
}

void input_data(FILE *fp, student *std)
{
int i;

fscanf(fp,"%s",std->name);
for(i=0;i<KYOUKA_NUM;i++)
fscanf(fp, "%lf", &(std->score[i]));
}

void print_data(student *std)
{
int i;

printf("Name: %s\n", std->name);
for(i=0;i<KYOUKA_NUM;i++)
printf("\t%10s: %5.1lf\n", Kyouka[i].name, std->score[i]);
printf("\t%10s: %5.1lf\n", "average", ave(std));
}
736デフォルトの名無しさん:2006/10/14(土) 00:02:00
>>723 3of3
int main(void)
{
FILE *fp;
int ninzu=0;
char *filename="meibo.txt";

fp = fopen (filename,"r");
if(fp==NULL){
perror(filename);
exit(1);
}

while(ninzu!=10) {
student hito;
input_data(fp, &hito);
print_data(&hito);
ninzu++;
}
fclose(fp);

return 0;
}
737デフォルトの名無しさん:2006/10/14(土) 00:06:43
>>723 1of3 の訂正
#include <stdio.h>
#include <stdlib.h>

#define KYOUKA_NUM (sizeof(Kyouka)/sizeof(Kyouka[0]))

typedef struct tag_kyouka {
char *name;
}kyouka;

kyouka Kyouka[]={
{"kokugo"},
{"sansu"},
{"eigo"},
};

typedef struct {
char name[20];
double score[KYOUKA_NUM];
} student;
738723:2006/10/14(土) 00:15:06
>>734-737
ありがとうございます。
非常に恐縮なのですが、
723-725のプログラム(C++なのかもしれない・・・)
の余分な部分が無いかチェックしてほしかったのです。(宣言とか)
言葉足らず&間違えてすみません。
739デフォルトの名無しさん:2006/10/14(土) 00:26:33
>>723
不要な行 main 関数内
char name[20];
double kokugo=0,sansu=0,eigo=0,hei=0;

無駄
student hito = {*name,kokugo,sansu,eigo,hei};

student hito;

誤り
fscanf(fp,"%s%lf%lf%lf",&hito.name,&hito.kokugo,&hito.sansu,&hito.eigo);

fscanf(fp,"%s%lf%lf%lf",hito.name,&hito.kokugo,&hito.sansu,&hito.eigo);

不足
main 関数最後
return 0;

※オプション -wall つけてコンパイルすればある程度分かる
740デフォルトの名無しさん:2006/10/14(土) 00:28:01
[1]授業単位:C言語
[2]問題文:実行例のようになるためのプログラムの空欄部分のコードを答えてください。
実行例
aの2乗は=100
aの3乗は=1000
#include<stdio.h>
void keisan(int m,int *p,int *q)
{
*p=m*m;
@
}
void main(void)
{
int a,b,c,i;
a=10;
keisan(a,&b,&c);
printf("aの2乗は%d\n",b);
printf("aの3乗は%d\n",c);
}

[3]環境
[3.1]OS:WindowsXP
[3.2]visual C++
[3.3]言語:C言語
[4]期限:10月23日
[5]その他の制限:

関数はよくわからなくて困っているのでよろしくおねがいします。
解説も書けたら書いてくださるとありがたいです。
741723:2006/10/14(土) 00:38:05
>>739
ありがとうございました!
742デフォルトの名無しさん:2006/10/14(土) 00:43:15
*q=*p*m;
743デフォルトの名無しさん:2006/10/14(土) 00:44:43
よく出てくるけど
void main(void)
って誰がそんな事を教えてるの?

ANSI準拠なら main の返り値は int で
K&R方式なら main() でないと…
ってオレの方が間違ってる?
744デフォルトの名無しさん:2006/10/14(土) 00:46:00
>>743
FAQ
745デフォルトの名無しさん:2006/10/14(土) 00:46:47
>>740
*q=m*m*m;
または >>742
746デフォルトの名無しさん:2006/10/14(土) 00:49:03
*q*=*m;
747デフォルトの名無しさん:2006/10/14(土) 00:50:13
>>746
ハァ?
748デフォルトの名無しさん:2006/10/14(土) 02:07:45
[1]授業単位:C言語
[2]問題文:
(1)キーボードから自然数nを入力して、その自然数までの2乗の和を求め、その結果を出力するプログラムの空欄部分のコードを答えてください。
自然数の2乗の和の公式は次の通りである。
Σ[k=1,n]k^2=1^2+2^2+3^2...+n^2=1/6n(n+1)(2n+1)
(2)このプログラムを2乗の和を求めるcall by value のみと、call by reference も用いたユーザー関数(keisan)を使って、
書き換えた。空欄部分のコードを答えてください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2773.txt
[3]環境
[3.1]OS:WindowsXP
[3.2]visual C++
[3.3]言語:C言語
[4]期限:
[5]その他の制限:

よろしくおねがいします
749デフォルトの名無しさん:2006/10/14(土) 02:40:36
>>748
@
n*(n+1)*(2*n+1)/6;
A
return a*(a+1)*(2*a+1)/6;
B
return (*p)*(a+1)*(2*a+1)/6;

Bの*pはaと同じ値に評価されるので好きに入れ替えていい。

しかしなんかこのkeisan(n,&n)とかいう呼び出しが気味悪くて仕方が無い。
ポインタの学習用の課題だからそうなってるんだろうけど。
750デフォルトの名無しさん:2006/10/14(土) 03:20:01
C言語なのに参照渡し?
751720 ◆HYwgg5QUFo :2006/10/14(土) 03:36:51
>>728
>無限ループ対策有り?
>到達不能チェック有り?
>GUIの部分は問題無しってことでおk?

無限ループ、到達不能チェックはなくてもいいと思います。

752743:2006/10/14(土) 09:46:50
>>744
ありがとう。
気にしないことにします。
753デフォルトの名無しさん:2006/10/14(土) 13:49:05
>>749
ありがとうございます。そしてすいません、Bはkeisan(n,&wa)の間違いでした。
その場合はどうなるか教えてください。
よろしくおねがいします。
754デフォルトの名無しさん:2006/10/14(土) 14:20:59
[1]授業単位:C言語
[2]問題文:三角形の底辺と高さが与えられたときの面積を求めるプログラムを作成してください。
できればユーザー関数を入れたものにしてください。
[3]環境
[3.1]OS:WindowsXP
[3.2]visual C++
[3.3]言語:C言語
[4]期限:
[5]その他の制限:

#include<stdio.h>
int keisan(int x,int y,int *p)
{
*p=x*y/2;
}
void main(void)
{
int a,b,wa;
printf("底辺は?=");scanf("%4.1f",&a);
printf("高さは?=");scanf("%4.1f",&b);
keisan(a,b,&wa);
printf("\nこの三角形の面積は%7.4dです。\n",wa);
}

自分なりにやってみたのですがエラーがでます、どこがいけないのでしょうか?
755デフォルトの名無しさん:2006/10/14(土) 14:22:43
756scanf()のフォーマットが違う:2006/10/14(土) 14:36:13
>>754
>どこがいけないのでしょうか?
エラーの内容も書けないあんたの頭。
757デフォルトの名無しさん:2006/10/14(土) 14:37:38
>>754
#include<stdio.h>
void keisan(double x,double y,double *p) ← 引数の型をdoubleに変更、返り値は不要
{
*p=x*y/2;
}
int main(void) ←FAQ >>743
{
double a,b,wa; ←intからdoubleに変更
printf("底辺は?=");scanf("%lf",&a); ←%4.1f から %lf に変更
printf("高さは?=");scanf("%lf",&b); ←%4.1f から %lf に変更
keisan(a,b,&wa);
printf("\nこの三角形の面積は%7.4fです。\n",wa); ←%7.4d から %7.4f に変更
return 0; ←正常終了
}
>>756
同意。
759デフォルトの名無しさん:2006/10/14(土) 14:40:38
>>754
>>1 くらい読め
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
760デフォルトの名無しさん:2006/10/14(土) 14:52:45
>>756
d:\c言語\b\b.c(5) : warning C4716: 'keisan' : 値を返さなければいけません
エラーではないのですがワーニングが出てきます。
それで底辺を入力した後高さが入力できません。
761デフォルトの名無しさん:2006/10/14(土) 14:55:01
>>760,754
>>757 の通り
>>757の所為で・・・

>>760
ここは宿題丸投げスレだから、>>757見て事が足りなければ初心者スレにでもどうぞ。
763749:2006/10/14(土) 15:54:12
>>753
その場合keisanの戻り値は普通voidじゃないか?
*p = a*(a+1)*(2*a+1)/6;
もし戻り値もあるなら
*p = a*(a+1)*(2*a+1)/6;
return *p;
764デフォルトの名無しさん:2006/10/14(土) 16:07:20
[1]授業単位:C言語
[2]問題文:三角形の三辺が与えられたときの面積を求めるプログラムを作成してください。
三辺が与えられたときのヘロンの公式
S=√s(s-a)(s-b)(s-c)  ただし  s=1/2(a+b+c)
三角形の成立と不成立のときに結果を分けてください。
[3]環境
[3.1]OS:WindowsXP
[3.2]visual C++
[3.3]言語:C言語
[4]期限:
[5]その他の制限:
#include<stdio.h>
#include<math.h>
double keisan(double x,double y,double z,double g,double *p)
{
g=x+y+z/2;
return *p=sqrt(4);g(g-x)(g-y)(g-z);
}
void main(void)
{
double a,b,c,d,wa;
printf("各辺の長さを入力してください");
printf("a="); scanf("%lf",&a);
printf("b="); scanf("%lf",&b);
printf("c="); scanf("%lf",&c);
printf("この三角形の面積は%8.7fです。",&wa);
}

これでやったら下のエラーがでました
d:\C言語\b\b.c(6): error C2063: 'g' : 関数ではありません。
それと不成立の場合のやり方もわかりません。
おねがいします。
765デフォルトの名無しさん:2006/10/14(土) 16:10:38
>>764
return *p=sqrt(g*(g-x)*(g-y)*(g-z));
だとおも
766デフォルトの名無しさん:2006/10/14(土) 16:11:30
あとこれも。
g=(x+y+z)/2;
767デフォルトの名無しさん:2006/10/14(土) 16:16:38
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): キーボードから文字列を読み込んで、読み込んだ文字列を逆にした文字列を表示するプログラムを作成せよ。
例)papa→apap,level→level
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VisualStudio2003
 [3.3] 言語: C
[4] 期限:2006年10月16日午前10時まで
[5] その他の制限:よろしくお願いします。
768デフォルトの名無しさん:2006/10/14(土) 16:20:03
>>764
不成立のチェックはあってるかどうか自信がない
これはkeisanにg(d?)を渡す必要はあるのか?
ポインタ使ってるのに戻り値にする意味もわからん

#include<stdio.h>
#include<math.h>
double keisan(double x,double y,double z,double g,double *p)
{
g=(x+y+z)/2;
return *p=sqrt(g*(g-x)*(g-y)*(g-z));
}

BOOL check(double a, double b, double c){
if(a+b>c && a+c>b && b+c>a)
return TRUE;
return FALSE;
}
void main(void)
{
double a,b,c,d,wa;
printf("各辺の長さを入力してください");
printf("a="); scanf("%lf",&a);
printf("b="); scanf("%lf",&b);
printf("c="); scanf("%lf",&c);
if(!check(a, b, c)){
printf("不正な三角形ですが計算します\n");
}
keisan(a, b, c, d, &wa)
printf("この三角形の面積は%8.7fです。",wa);
}
769デフォルトの名無しさん:2006/10/14(土) 16:31:41
>>767
#include <stdio.h>
#include <string.h>
int main()
{
char s[256];
size_t len;
int i;
scanf("%s", s);
len = strlen(s);
for(i = len - 1; i >= 0; i--) {
printf("%c", s[i]);
}
return 0;
}
770デフォルトの名無しさん:2006/10/14(土) 16:37:30
>>769さん。ありがとうございます。
771デフォルトの名無しさん:2006/10/14(土) 16:43:09
>>768
辺の長さが正の数かどうかのチェックも必要かも
あと、三角形じゃないなら面積は求まらないと思われ
772デフォルトの名無しさん:2006/10/14(土) 17:46:19
>>771
for文を使うんですか?
773デフォルトの名無しさん:2006/10/14(土) 17:52:10
>>772 質問の意図が分かりません
BOOL check(double a, double b, double c){
if(a<=0.0 || b<=0.0 || c<=0.0)
return FALSE;
if(a+b>c && a+c>b && b+c>a)
return TRUE;
return FALSE;
}

printf("不正な三角形ですが計算します\n");

printf("不正な三角形です\n");exit(1);
774デフォルトの名無しさん:2006/10/14(土) 17:54:20
>>773
すいません BOOL checkというのは習ってないのでfor文が使いたいのですが
無理ですか?
775デフォルトの名無しさん:2006/10/14(土) 17:54:59
ワラタ
776デフォルトの名無しさん:2006/10/14(土) 17:57:11
>>775
禿同。ここまで的外れだと釣りだと思うが、
マジで言ってることもあるのが宿題スレなんだよな。
777デフォルトの名無しさん:2006/10/14(土) 17:58:43
茶ふぃた
778デフォルトの名無しさん:2006/10/14(土) 18:00:16
スレ違いだっちゅうに。
いい加減関数の使い方を覚えられない阿呆を構うのやめろや。
779デフォルトの名無しさん:2006/10/14(土) 18:09:17
>>764,772,774 これなら分かるかな?
#include<stdio.h>
#include<math.h>
double keisan(double x,double y,double z,double *p)
{
double g, check_value;
g=(x+y+z)/2;
check_value=g*(g-x)*(g-y)*(g-z);
if(x<=0.0 || y<=0.0 || y<=0.0 || check_value<=0.0)
*p=-1.0;
else
*p=sqrt(check_value);
return *p;
}
int main(void)
{
double a,b,c,wa;
printf("各辺の長さを入力してください");
printf("a="); scanf("%lf",&a);
printf("b="); scanf("%lf",&b);
printf("c="); scanf("%lf",&c);
keisan(a, b, c, &wa);
if(wa>0.0)
printf("この三角形の面積は%8.7fです。\n",wa);
else
printf("三角形ではありません。\n");
return 0;
}
780デフォルトの名無しさん:2006/10/14(土) 18:28:30
ぐだぐだ言わんでさっさとちゃんと動くプログラムよこせや。
781デフォルトの名無しさん:2006/10/14(土) 18:33:25
#include<stdio.h>
int main(void){
printf("ぐだぐだ言わんでさっさとちゃんと動くプログラムよこせや。\n");
return 0;
}
782デフォルトの名無しさん:2006/10/14(土) 18:34:57
何だよその言い方
せっかく初心者にもわかるようにコメント入りで解いてたのに晒す気無くなったよ
俺の30分を返せ
783デフォルトの名無しさん:2006/10/14(土) 18:40:06
>>782
どの問題?
>>720 の解答なら >>720 じゃないけど興味ある
他だったら別にあってもなくてもいいや
784デフォルトの名無しさん:2006/10/14(土) 19:22:22
720 なあ。GUIの表示さえなければなんとかするんだが……。
785デフォルトの名無しさん:2006/10/14(土) 20:33:48
BCB無いから作れん
API叩きでいいならできないこともないが・・・・やっぱやりたくないな
786デフォルトの名無しさん:2006/10/14(土) 20:44:29
Turbo C++ ならあるんだがグラフが分からん俺はお払い箱
787デフォルトの名無しさん:2006/10/14(土) 21:17:51
C言語でGUI部分を作ろうという猛者の集まる場所はここか
788デフォルトの名無しさん:2006/10/14(土) 21:28:24
>>787
俺、フリーソフト作って公開してるけど、C言語でGUI部分を書いてる。
特別なライブラリを使わずにWindowsAPIの呼び出しやメッセージのやり取りだけで。
小規模なものならそんなに猛者ってこたないだろ。
789デフォルトの名無しさん:2006/10/14(土) 21:36:01
>>788
荒らしと疑われることなくここでソースを公開できる程度に小規模なら
790デフォルトの名無しさん:2006/10/14(土) 21:37:10
どっかにアップロードしてURL貼ればいいだろう
791デフォルトの名無しさん:2006/10/14(土) 21:44:02
[1] 授業単元: プログラミングT
[2] 問題文(含コード&リンク): 大文字のAからZまでを表示するプログラムを作成せよ。ただし文字定数および文字配列を使ってはいけない(文字コードは使用可)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VisualStudio.net2003
 [3.3] 言語: c言語
[4] 期限: 10月17日
[5] その他の制限: よろしくお願いします。
792デフォルトの名無しさん:2006/10/14(土) 21:55:12
>>791
#include <stdio.h>
int main()
{
int i;
for(i=0;i<128;i++)fputc(i,stdout);
return 0;
}
793デフォルトの名無しさん:2006/10/14(土) 21:55:55
>>791
#include <stdio.h>
int main()
{
int i;
for(i = 65; i<=90; i++ )
printf("%c", i);
return 0;
}
794788 ◆3.JjF77I26 :2006/10/14(土) 22:05:07
>>789
小規模っていっても3000行くらいある。
GUI部分だけで言えば700行かそこら。

>>790
既に公開しているものなのでURLだけ貼っとく。
http://saito.s4.xrea.com/software/wci098.zip
795デフォルトの名無しさん:2006/10/14(土) 22:12:50
>>792
>>793
ありがとうございます。
796デフォルトの名無しさん:2006/10/14(土) 22:16:08
>>794
3000程度なら規模云々のレベルではない
サンプルコードだよ
797デフォルトの名無しさん:2006/10/14(土) 22:19:25
>>796

サンプルコードならMSDN見ればいいんでない?
798デフォルトの名無しさん:2006/10/14(土) 23:34:18
ステップでソフトウェアを語るアホどうしが喧嘩してるな
799デフォルトの名無しさん:2006/10/14(土) 23:39:53
>>720

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2775.cpp

投稿者の希望はかなり無視してしまったが,とりあえず書いた.
Windows プログラミングなんて本当に久々だから筋が悪いけど,

弁解事項:
1. C++ です.STL 使ってます.
2. GUI は SDK を直叩きしました.手抜きです.
3. 設計せずに書いたので無駄だらけです.
4. きちんとデバッグしてません.
800デフォルトの名無しさん:2006/10/14(土) 23:44:21
>>799
いまさら・・・
この程度なら5分でかけよ
801720 ◆HYwgg5QUFo :2006/10/15(日) 00:00:49
とりあえずありがとうございます。

Cプログラムでと書いてあるのでC++でもいいのかな・・・。
C++はわからないので何が無駄かさえわかりませんが。。。

わがまま言うなら、C言語がいいです・・・申し訳。。。
802デフォルトの名無しさん:2006/10/15(日) 02:23:21
[1]授業単位:C言語
[2]問題文:順位順に点数が出るようにプログラムしてください。
実行例
順位
1 90
2 80
3 70 
4 60
5 50
6 40
7 30
8 20
9 10
10 0
[3]環境
[3.1]OS:WindowsXP
[3.2]visual C++
[3.3]言語:C言語
[4]期限:
[5]その他の制限:

よろしくおねがいします。
803デフォルトの名無しさん:2006/10/15(日) 02:33:56
>>802
??
順位って?
点数って?

実行例を表現するプログラム書けばいいの?

#include <stdio.h>
int main(){ return printf("1 90\n2 80\n3 70\n4 60\n5 50\n6 40\n7 30\n8 20\n9 10\n10 0")>=0?0:1; }
804デフォルトの名無しさん:2006/10/15(日) 02:37:02
すいません、こうでした
順位 点数
1     90
2     80
3     70 
4     60
5     50
6     40
7     30
8     20
9     10
10     0
それで実行例を表示するんではなくて、配列の中にある数字を点数の高い順に並べるということです。
805デフォルトの名無しさん:2006/10/15(日) 02:41:13
コンテナにブチコンでソート
806デフォルトの名無しさん:2006/10/15(日) 03:13:38
#include <stdio.h>
void main(void)
{
static int ten[10]={88,73,78,76,90,66,58,56,56,55};
int i,n,wa;
wa=;
for(i=0;i<10;i++)
{
for(n=0;n<10;n++)
{
if (ten[i]<ten[n])
ten[i]=wa;
ten[i]=ten[n];
ten[n]=wa;
}
}

printf("順位 点\n");
for(i=0;i<10;i++)
printf("%2d%6d\n",i+1,ten[i]);
}

こんな感じで作ってみたんですけど、エラーは出ないけどソートどころかうまく値が入りません
どうすればいいんでしょうか?
807デフォルトの名無しさん:2006/10/15(日) 03:39:29
>>806
ソート部分が意味わかんねえ・・・

>>805の方法でいいなら最初にこれを書き加えて
#include <algorithm>
#include <deque>
ソート部分をこうする
std::deque<int> tensuu;
for(int i = 0; i < 10; i++)
tensuu.push_back(ten[i]);

sort(tensuu.begin(), tensuu.end());

for(int i = 0; i < 10; i++)
ten[i] = tensuu[i];
808デフォルトの名無しさん:2006/10/15(日) 03:49:48
C言語指定してるからSTLはダメだろ。
常識的に考えて。
809デフォルトの名無しさん:2006/10/15(日) 03:53:40
>>806
代入の方向とか、{ }の付け方とかがグダグダ過ぎ

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

static int ten[10]={88,73,78,76,90,66,58,56,56,55}; 
int i,n,wa; 

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

for(n=0;n<10;n++) 

  if (ten[i]>ten[n]){ 
    wa=ten[i]; 
    ten[i]=ten[n]; 
    ten[n]=wa;
  }



printf("順位 点\n"); 
for(i=0;i<10;i++) 
printf("%2d%6d\n",i+1,ten[i]); 

810デフォルトの名無しさん:2006/10/15(日) 03:56:25
>806
if (ten[i]>ten[n]){
wa=ten[i]; 
ten[i]=ten[n]; 
ten[n]=wa; }

vector使っていいなら
#include <iostream>
#include <vector>
using namespace std;
int main(){
  int ten[]={88,73,78,76,90,66,58,56,56,55};
  vector<int> v=vector<int>(ten,ten+sizeof(ten)/sizeof(ten[0]));
  sort(v.begin(), v.end(), greater<int>());
  cout << "順位 点" << endl;
  for(unsigned int i=0;i<v.size();i++) cout << i+1 << ' ' << v[i] << endl;
  return 0;
}
811デフォルトの名無しさん:2006/10/15(日) 05:34:01
>>802
要するに一次元配列をバブルソートしろってことでいいんだよね?
812デフォルトの名無しさん:2006/10/15(日) 06:21:12
標準関数は使っていいんだよな?

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

#define N 10

int iCmpDescend(const void* vpx, const void* vpy)
{
const int* px = vpx;
const int* py = vpy;
return *py-*px;
}

int main(void)
{
int ten[N]={88,73,78,76,90,66,58,56,56,55};
qsort(&ten, N, sizeof(int), iCmpDescend);
{
int i;
printf("順位\t得点\n");
for(i=0; i!=N; i++) printf("%-2d\t%-3d\n", i+1, ten[i]);
}
return 0;
}
813デフォルトの名無しさん:2006/10/15(日) 17:23:13
>>799
漏れ、依頼者じゃないけど、凄くGUIプログラミングの参考になりました。熱烈多謝
814デフォルトの名無しさん:2006/10/15(日) 17:50:45
>>813 同意
InvalidateRect なんて知らなかったよ。
この知識を使うことは無いだろうけど…
815デフォルトの名無しさん:2006/10/15(日) 18:14:55
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):キーボードから文字列を読み込んで、読み込んだ文字列が逆から読んでも同じ(回文のようなもの)文字列かどうかを判定するプログラムを作成せよ。
(例) papa→no, level→yes
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VisualStudio2003
 [3.3] 言語: C
[4] 期限: 2006年10月18日
[5] その他の制限: よろしくお願いします。
816デフォルトの名無しさん:2006/10/15(日) 18:16:56
>>720>>799 (>>755 も?) 使って自分で何とかできるんだろうか?
817デフォルトの名無しさん:2006/10/15(日) 18:22:29
>>815
#include<stdio.h>
#include<string.h>

#define ONE_LINE_MAX 1024

int main(void)
{
int i, len;


char buf[ONE_LINE_MAX];
gets(buf);
len=strlen(buf);
for(i=0;i<len/2;i++)
{
if(buf[i]!=buf[len-1-i])
break;
}
if(i<len/2)
printf("no\n");
else
printf("yes\n");

return 0;
}
818デフォルトの名無しさん:2006/10/15(日) 21:24:40
[1] 授業単元:プログラミング
[2] 問題文:三角形の面積を求める関数fa(), fb()を作成しその値を
比較するプログラムを作成しなさい.
[3] 環境
 [3.1] OS:Linux
 [3.2]gcc
 [3.3] 言語: c
[4] 期限: 明日
[5] その他の制限: なし。
819デフォルトの名無しさん:2006/10/15(日) 21:33:54
>>818 問題文が不足しています
#include<stdio.h>
double fa(void){/* 底辺6 高さ2 の三角形の面積を返す関数 */
return 6.0;
}
double fb(void){/* 底辺4 高さ4 の三角形の面積を返す関数 */
return 8.0;
}
int main(void){
if(fa()>fb()) printf("fa()>fb()\n");
if(fa()<fb()) printf("fa()<fb()\n");
if(fa()==fb()) printf("fa()=fb()\n");
return 0;
}
820デフォルトの名無しさん:2006/10/15(日) 21:34:30
>>818
三角形の面積を2つの方法で求めてその2つの方法で得た面積を比較するってこと?
どのような方法で求めるのか具体的なことが全く書かれていないし
どんな方法で求めてもいいってことだとしても、どのような情報が与えられているのか(辺の長さとか角度とか)が全くわからない
821デフォルトの名無しさん:2006/10/15(日) 21:51:26
>>819
俺も同じこと書こうとしてた
822デフォルトの名無しさん:2006/10/15(日) 21:55:46
>>818
> 関数fa(), fb()

なんだよその関数名は。
そんな仕様書が出てきたらキレていいぞ。
823名無しさん:2006/10/15(日) 22:05:40
ファイル入出力の問題なんですけど
5個の整数値をキーボードにより入力してその合計を求めるプログラムを
つくる。
そして、その問題において、キーボードより入力した値をつくっておいた
ファイルinput.datよりファイル入力するようにして、ディスプレイに表示
していた値をout.datというファイルに出力する。
こんな問題なんですけれど・・・・・
824デフォルトの名無しさん:2006/10/15(日) 22:08:21
>>823
>>1 の質問テンプレ
825デフォルトの名無しさん:2006/10/15(日) 22:08:32
>>1
826名無しさん:2006/10/15(日) 22:21:57
[1]授業単元;プログラミング
[2]問題文:問1:5個の整数をキーボードより入力し、その合計を求めて
ディスプレイに表示するプログラムを作成せよ
  問2:問1において、キーボードより入力していた値をあらかじめ
つくっておいたファイルinput.datよりファイル入力するように変更し
また、ディスプレイに表示していた値をout.datというファイルに出力
するように変更せよ。
  問3:問2で作成されたout.datの内容の最後にinput.datの内容
を追記するプログラムを作成せよ。
[3]環境
  [3.1]OS LINUX
[3.2]gcc
[3.3]C言語
[4]期限:明日
[5]その他制限:なし
827デフォルトの名無しさん:2006/10/15(日) 22:24:46
問い1以外はシェルの機能の問題っぽいんだが…
つ リダイレクト
828名無しさん:2006/10/15(日) 22:34:16
ファイル入出力の問題なんですけれど、どうすればいいんでしょうか
829デフォルトの名無しさん:2006/10/15(日) 22:34:54
>>826
問1
#include<stdio.h>
#define VALUE_NUM 5
int main(void){
int i,value,total=0;
for(i=0;i<VALUE_NUM;i++){
scanf("%d", &value);
total+=value;
}
printf("%d\n", total);
return 0;
}
問2
#include<stdlib.h>
int main(void){
system("./a.out < input.dat > out.dat");
return 0;
}
問3
#include<stdlib.h>
int main(void){
system("cat input.dat >> out.dat");
}
830829:2006/10/15(日) 22:36:27
ごめ>>828読んでなかった
831デフォルトの名無しさん:2006/10/15(日) 22:38:58
>>829
氏ね
832名無しさん:2006/10/15(日) 22:39:00
いいえこちらこそ説明不足ですみません
833デフォルトの名無しさん:2006/10/15(日) 22:57:20
>>826 問2・問3
#include<stdio.h>
#include<stdlib.h>
#define VALUE_NUM 5
int main(void){
int i, total=0;
int value[VALUE_NUM];
char *filename_in="input.dat", *filename_out="out.dat";
FILE *fp_in, *fp_out;
fp_in=fopen(filename_in, "r");
if(fp_in==NULL){
fprintf(stderr, "\nError : %s cannot open.\n", filename_in);
return 1;
}
for(i=0;i<VALUE_NUM;i++){
fscanf(fp_in, "%d", &value[i]);
total+=value[i];
}
fclose(fp_in);
fp_out=fopen(filename_out, "w");
if(fp_out==NULL){
fprintf(stderr, "\nError : %s cannot open.\n", filename_out);
return 1;
}
fprintf(fp_out, "%d\n", total);
for(i=0;i<VALUE_NUM;i++) /*この行は問3の時だけ必要*/
fprintf(fp_out, "%d\n", value[i]); /*この行は問3の時だけ必要*/
fclose(fp_out);
return 0;
}
834名無しさん:2006/10/15(日) 22:59:50
本当にありがとうございます。解決しました
835デフォルトの名無しさん:2006/10/15(日) 23:01:15
>>834
どなたさま?>>826
836デフォルトの名無しさん:2006/10/16(月) 00:38:52
>>720
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2776.txt

>>799のより機能少ないし癖のあるGUIだけどCで書いたので勘弁して。
グラフを扱うプログラムはろくに書いたことがないんで勉強になった。
837デフォルトの名無しさん:2006/10/16(月) 01:29:25
[1]プログラミング
[2]キーボードから整数 m と n (ただし m≤n) を入力し, m 以上 n 以下の整数のうち 3 で割り切れるものの和を求めるプログラムを作成せよ.
[3]wndowsとgcc
[4]2006年10月17日
[5]while文習ったばっかりです

よろしくです
838デフォルトの名無しさん:2006/10/16(月) 01:29:43
おまいら、今日ソフ開試験受けてきた俺様が帰ってきましたよ
839デフォルトの名無しさん:2006/10/16(月) 01:40:49
>>838
どうでした、午後2?
840デフォルトの名無しさん:2006/10/16(月) 01:41:16
>>839
午後Uは楽勝でしたよ。
午前がやばい。
841デフォルトの名無しさん:2006/10/16(月) 01:42:51
>>838 の訂正
おまいら、昨日ソフ開試験受けてきた俺様が帰ってきましたよ
駄目だったよ...orz...やけ酒飲んでたらこんな時間になってしまったよ、チキショー
842デフォルトの名無しさん:2006/10/16(月) 01:44:01
>>午後Uは楽勝でしたよ。
いいな・・・('A`)
843デフォルトの名無しさん:2006/10/16(月) 01:46:06
>>841
どっちやねん…(・ω・)
俺もなんていうか午後Uで地獄へ落ちたよ。
悔しいので調べたら・・調べてもわからんかったorz
844デフォルトの名無しさん:2006/10/16(月) 01:49:43
ソフ開試験はスレ違い、こっちでやれ
http://pc8.2ch.net/test/read.cgi/prog/1142866538/l50

こんなとこでやってる喪前ら、落ちたな、半年後ガンバレ
845720 ◆HYwgg5QUFo :2006/10/16(月) 02:26:00
>>836
ありがとうございました。とても助かりました。
GUIがんばって理解してみます。

一つ、atan2:DOMAIN error の原因が分からないのですが、なぜでしょか?
846デフォルトの名無しさん:2006/10/16(月) 02:39:52
>837

int main()
{
int m, n;
int sum = 0;
int i;


scanf("%d %d", &m, &n);
for(i = m; i <= n; i++){
if(i % 3 == 0){
sum += i;
}
}

printf("%d\n", sum);
}
847お願いします:2006/10/16(月) 06:04:24
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク): 7並べ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: C++
[4] 期限:今月中
[5] その他の制限:COM3人と対戦 パスは3回まで ジョーカーあり 勝敗判定を行う
848デフォルトの名無しさん:2006/10/16(月) 09:40:11
漏れは基本情報が・・(ry
849デフォルトの名無しさん:2006/10/16(月) 16:43:25
>>848
(゚∀゚)人(゚∀゚)ナカーマ
850デフォルトの名無しさん:2006/10/16(月) 18:25:28
ソフ開午前だけ受けて松屋で飯食って帰った。
スレチ乙
851デフォルトの名無しさん:2006/10/16(月) 18:50:51
どうして御前だけ?
852デフォルトの名無しさん:2006/10/16(月) 19:14:07
午前でオワタからだろ
853デフォルトの名無しさん:2006/10/16(月) 19:24:52
今年は午前激難だったよねー
854デフォルトの名無しさん:2006/10/16(月) 20:24:03
>>846
ありがとうです
855デフォルトの名無しさん:2006/10/16(月) 21:02:06
>>847
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2783.txt
行き当たりばったりで書いたから酷い。
STL使ってるけどいいよね・・?
856デフォルトの名無しさん:2006/10/16(月) 21:16:24
[1] 授業単元: 数値計算プログラミング
[2] 問題文(含コード&リンク):
数値を符号部1bit,指数部8bit,仮数部16or32bitの浮動小数点型へ変換するプログラムを作成し,1,2,3,4,8,0.5,0.25,0.1,0.2等の数値を変換する。ただし,入力フォーマットは  {-},[0-9]+{.[0-9]+}|{-}.[0-9]+
とする。ここで、{}は省略可、[0-9]は0〜9の任意の数字、+は前者の1回以上の繰り返し、|はどちらか一方を示す。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年10月19日(木)
857デフォルトの名無しさん:2006/10/16(月) 23:19:49
友人が基情・ソフ技と受かって、
 さらに何か取るつもりらしいのが・・ショボンヌ。。
858デフォルトの名無しさん:2006/10/16(月) 23:54:54
[1] 授業単元:
[2] 問題文(含コード&リンク):c++でフォーム上に二つのボタンと
ひとつの窓をつくり、一方のボタンをクリックすると
任意のsample.c をコンパイルし、そのエラー結果表示を
フォーム上の窓に表示させる。もう一方のボタンで窓をクリアする。
[3] 環境
 [3.1] OS: xp(Windows/Linux/等々)
 [3.2] borland c++builder5.5
 [3.3] 言語: C++
[4] 期限: ([2006年10月18日まで]
[5] その他の制限: なし

何卒何卒、よろしくお願いいたします。
お忙しいところ、読んでくださってありがとうございました。
859デフォルトの名無しさん:2006/10/17(火) 00:00:35
>>812
遅レスで悪いのだが、
> return *py-*px;
この技はchar以外では使えん。オーバーフローする。
解ってて書いたならごめん。
860デフォルトの名無しさん:2006/10/17(火) 00:16:48
>>858
>任意のsample.c をコンパイルし
という意味がわからない。作業ディレクトリにある sample.c に対して
bcc32 sample.c を実行してやればいいのかな?
861デフォルトの名無しさん:2006/10/17(火) 00:28:57
>>847
既に答えは出ているが、せっかく書いたので晒してみる。Cだけど。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2784.c
862861:2006/10/17(火) 00:42:42
ジョーカー実装してなかった…
863デフォルトの名無しさん:2006/10/17(火) 01:08:24
>数値を符号部1bit,指数部8bit,仮数部16or32bitの浮動小数点型
新しく型作るのかな
864デフォルトの名無しさん:2006/10/17(火) 01:27:35
>860様

作業ディレクトリにあるc++のsampleソースコードに対して、
borlandc++builderのF9を実行したいです。

書き方がおかしくてすみません、書き込みありがとうございます。
865デフォルトの名無しさん:2006/10/17(火) 01:34:22
>860様 追
今私は、
フォームからコマンドプロンプトを呼び出し、
引数としてコマンドラインを渡し、
コンパイル実行、コンパイルの成功と失敗を判定し、
失敗した場合エラーメッセージの取得と表示をしたい
と書いているのですが、エラーばかりで
実行ファイルにもなりません。
866デフォルトの名無しさん:2006/10/17(火) 01:36:17
>>864
「BCBで F9 を押したときと同じような処理」だよね?
それとも,実際に BCB に対して F9 コマンドを飛ばすの?

ところでそれ本当に宿題?問題文は正確?
867デフォルトの名無しさん:2006/10/17(火) 01:41:39
前者の「BCBで F9 を押したときと同じような処理」です。

宿題です、問題は口頭でしたので、私の言語力で正確に再生できているか
不安です。

ご迷惑をおかけし、すみません。
応答ありがとうございます。
868デフォルトの名無しさん:2006/10/17(火) 02:16:32
>866様
867は、>866へのレスです。
869デフォルトの名無しさん:2006/10/17(火) 02:49:22
[1] 授業単元:
[2] 問題文
始点と終点、およびその間に複数個の頂点と、2つの頂点間に正の重み(コスト)
がつけられた辺からなる有向グラフにおいて、始点から終点に至る経路の中で
以下の処理を実行するプログラムを作成する。
   (1)最大コストになる経路を深さ優先探索法で求める。
   (2)最小コストになる経路を深さ優先探索法で求める。
   (3)最小コストになる経路をダイクストラ法で求める。
なお、グラフの作成の際には、画面の適当な位置をマウスで順次クリックして
ゆくと頂点とその間の枝が登録でき、結果の経路をその上に表示できるような
GUIを作成する。グラフ作成時には有向グラフであるから枝の終端には
矢印をつけて枝の向きがわかるようにする。
[3] 環境
 [3.1] OS: xp(Windows/Linux/等々)
 [3.2] c++builder6
 [3.3] 言語: C++
[4] 期限: ([2006年10月25日まで]
[5] その他の制限: なし

この宿題で、どうやってプログラムをつくればいいかずっと悩んで
困ってるんですが、(プログラミング初心者なんで・・)できれば
教えていただきたいのですが・・。お願いします。

870デフォルトの名無しさん:2006/10/17(火) 02:59:06
なんか、見たことあるな…
871デフォルトの名無しさん:2006/10/17(火) 03:11:55
デジャヴってやつだな…
872デフォルトの名無しさん:2006/10/17(火) 04:46:57
みんな同じ感覚を共有していたんだ…
873デフォルトの名無しさん:2006/10/17(火) 05:30:17
一瞬日にちが戻ったのかと思った
874デフォルトの名無しさん:2006/10/17(火) 05:42:12
OSの部分が違うようだが、
そのコンパイラでクロスコンパイルできる?
ライブラリは?
等々って、おい!
875デフォルトの名無しさん:2006/10/17(火) 06:59:58
ほっとけよ。
876デフォルトの名無しさん:2006/10/17(火) 07:59:47
>863
はい
877デフォルトの名無しさん:2006/10/17(火) 09:10:00
なんでこんな BCB 流行ってんの?
どっかの専門学校で使ってるんかな?
878デフォルトの名無しさん:2006/10/17(火) 10:43:38
おちんちんの先に直径3cmぐらいのイボができました。どうすればいいですか
879デフォルトの名無しさん:2006/10/17(火) 10:51:21
技術を身に付けるのが目的なのか単位を取るのが目的なのか…
専門学校生だけは、ここの解答を元に勉強してると思いたい
880デフォルトの名無しさん:2006/10/17(火) 11:13:35
>>879
学生の8割以上は想像力不足で、自分が今一番すべき事を想像できず、目の前の事にしか気が回らないバカなのです。
まともな学生は2割以下でしょう。
881デフォルトの名無しさん:2006/10/17(火) 12:56:55
>>880
ゆとり教育をしてきた学生にこの言葉を自覚させたい
882デフォルトの名無しさん:2006/10/17(火) 13:05:08
その8割のうちの9割が
自分は先の2割だと思ってる罠。
883デフォルトの名無しさん:2006/10/17(火) 13:13:23
そう言う風に考え付くならまだ先がある
884デフォルトの名無しさん:2006/10/17(火) 13:33:48
その想像力を使っても、C++には未来が見えないことを思ってしまいます。
885デフォルトの名無しさん:2006/10/17(火) 13:41:52
STL はものすごく好きなんだけどね
886デフォルトの名無しさん:2006/10/17(火) 13:49:41
8割のうちの9割 = 全体の 18/25
887デフォルトの名無しさん:2006/10/17(火) 13:58:04
>>879
>技術を身に付けるのが目的なのか単位を取るのが目的なのか
技術を身につけてITドカタ(PG)になる? ITドカタになるのは止めた方が良いぞ
学生はITドカタの現実を知らんからPGになりたいと思う香具師いるかもしれんが
>>881
>ゆとり教育をしてきた学生
こっちの表現ほうが、"ゆとり教育をさせられてきた学生(大人たちに)"、よくね?
888デフォルトの名無しさん:2006/10/17(火) 14:06:00
>>887 じゃ、何がいいと思う?想像力を使って…
889デフォルトの名無しさん:2006/10/17(火) 15:17:59
>>856
わかった人いないの
890デフォルトの名無しさん:2006/10/17(火) 16:44:37
その問題くらい理解できるし、実装するのも難しくはないが、
単にめんどくさいからやらない。
891デフォルトの名無しさん:2006/10/17(火) 17:09:42
他にやりたい事がある。
勿論にちゃんではない。
892デフォルトの名無しさん:2006/10/17(火) 18:14:53
というか問題文書いた奴に「日本語でおk」といっといてくれ。
893近似値:2006/10/17(火) 18:44:47
[1] 授業単元:繰り返し計算の打ち切り

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

Sn = 1-1/3+1/5-1/7…

  = (-1)^n/2n+1 (nは0から∞)

=π/4      …(A)

(A)を利用してπの近似値を求めたい。
但し、n項目までの計算結果から(n-1)項目までの計算結果の差が、
0.00001を下回ったところで計算を打ち切れ。
このとき、第何項目までが計算されたかを求めよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: わかりません
 [3.3] 言語: C

[4] 期限:希望としては明日の午前中です
[5] その他の制限:特にありません

894近似値:2006/10/17(火) 18:51:19
#include <stdio.h>
#include <math.h>

int main(void)
{
int n;
double Sn ,N ,kinji ,a ,b

n=0;b=0;N=0;
while(a>0.00001)
{
Sn = pow(-1,n) / (2 * n + 1);
b = b + Sn;
kinji = 4 * b;
a = fabs(kinji-N);
N=kinji;
n++;
}

printf("パイの近似値は%1.16lfである。\n",kinji);
printf("第%d項目まで計算に使われた。\n",n);

return 0;

}

自分なりに作ってみたのですが(ほぼ友達のをこっそり見ながら)うまくいきません。
またBorland C++ Compiler 5.5を自分のPCに入れているのですが、コンパイルをすると
[パイの近似値は+NANである。第0項目まで計算に使われた。]
となってしまいます。これはエラーが改善されれば直るのでしょうか?
長文で申し訳ないのですが、よろしくお願いいたします。
895デフォルトの名無しさん:2006/10/17(火) 18:52:00
aの初期化すべきでは?
896デフォルトの名無しさん:2006/10/17(火) 18:52:41
Snとkinjuとaとbが未初期化warningもちゃんとみようね
897デフォルトの名無しさん:2006/10/17(火) 19:26:27
>>893
これ中学生の時にやったなぁ
ふふふ・・・
898デフォルトの名無しさん:2006/10/17(火) 19:54:11
中高年になってからやったの?
899デフォルトの名無しさん:2006/10/17(火) 20:07:53
[1] 授業単元: 数値計算プログラミング
[2] 問題文(含コード&リンク):
数値を符号部1bit,指数部8bit,仮数部16or32bitの浮動小数点型へ変換するプログラムを作成し,1,2,3,4,8,0.5,0.25,0.1,0.2等の数値を変換する。ただし,入力フォーマットは  {-},[0-9]+{.[0-9]+}|{-}.[0-9]+
とする。ここで、{}は省略可、[0-9]は0〜9の任意の数字、+は前者の1回以上の繰り返し、|はどちらか一方を示す。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年10月19日(木)
900デフォルトの名無しさん:2006/10/17(火) 20:13:50
>>899
正直問題が理解できない俺はどうすれば。
901デフォルトの名無しさん:2006/10/17(火) 20:49:58
#include <stdio.h>
int main(void)
{
int n;
double Sn, kinji, pi;

pi = 0.0;
for( n = 1 ; ; n++ ) {
Sn = 1.0 / (2.0 * n + 1.0);
if( n & 1) pi += Sn;
else pi -= Sn;
kinji = 4 * pi;
if( Sn < 0.00001 ) break;
}

printf("パイの近似値は%1.16lfである。\n",kinji);
printf("第%d項目まで計算に使われた。\n",n);

return 0;
}

試してないけど、多分こう。
902901:2006/10/17(火) 20:52:38
2カ所訂正。
-for( n = 1 ; ; n++ ) {
+for( n = 0 ; ; n++ ) {

-if( n & 1 ) pi += Sn;
+if( !(n & 1)) pi += Sn;
903デフォルトの名無しさん:2006/10/17(火) 20:56:12
>>899
#include <stdio.h>
main(){
float hoge;
scanf("%f", &hoge);
printf("%f", hoge);
}
入力フォーマットとやらはscanfの%fが条件を満たしてる気がするが
floatでもdoubleでも仮数部のサイズが合わないんだよなあ・・・
904デフォルトの名無しさん:2006/10/17(火) 21:23:35
>>902
kinji をループ内で計算する意味が分からん。

それと問題文があいまいだから仕方ないんだが、
π の小数点以下5桁の精度を確保するという風に出題者の意図を類推すると、
0.00001 と比較するのはソース中 Sn ではなく Sn * 4 になるのでは。
905デフォルトの名無しさん:2006/10/17(火) 21:40:35
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
ある所に仲の悪い二人がバッタリ映画館で出会ってしまいました。
こうなってはとにかくお互い離れた席に座るしかありません。
映画館には空席が10席あり、それぞれの席の番号とx,y座標が分かっています。
この中から二人が最も離れた席に座る席を見つけるプログラムを
(1)二次元配列を使って書け(穴埋め形式)
(2)構造体配列を使って書け(穴埋め形式)
※空席情報タグ名 (seat_position)
メンバー(メンバー名);座席(no)、X座標(x)、Y座標(y)

(1)は出来たのですがそれを構造体にする(2)が分かりません。
(1)→ ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2786.c
(2)→ ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2787.c

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年10月18日 PM06:00まで
[5] その他の制限: 上記にある通り
906デフォルトの名無しさん:2006/10/17(火) 22:41:10
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク): 
x=0 のとき f(0)=1
x=2 のとき f(2)=7.389
x=3 のとき f(3)=20.086
から補外(外挿)を用いてf(4)を推定せよ

[3] 環境
 [3.1] WindowsXP
 [3.2] gcc
 [3.3] C
[4] 期限: 10月18日
[5] その他の制限: 特にないです

お願いします
907デフォルトの名無しさん:2006/10/17(火) 22:41:15
>>900
要するに小数を浮動小数点型で2進数表示にする
908デフォルトの名無しさん:2006/10/17(火) 22:55:32
>>905
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2788.txt
こんなかんじかな

>>907
なるほど。そういってくれるとわかりやすい。
909近似値:2006/10/17(火) 23:37:29
#include <stdio.h>
#include <math.h>

int main(void)
{
int n;
double Sn ,N ,kinji ,a ,b;

n=0;N=0;kinji=0;a=0;b=0;

while(a>0.00001)
{
Sn = pow(-1,n) / (2 * n + 1);
b = b + Sn;
kinji = 4 * b;
a = fabs(kinji-N);
N=kinji;
n++;
}

printf("パイの近似値は%1.16lfである。\n",kinji);
printf("第%d項目まで計算に使われた。\n",n);

return 0;

}
>>895-896
初期化をしてみたのですが、(Snを初期化すると、エラーが出るのでしていません)
[パイの近似値は0.0000000000000000である。第0項目まで計算に使われた。]
と表示されます。ほかに改良すべき点はございませんか?
910デフォルトの名無しさん:2006/10/17(火) 23:53:33
>>909
aを0で初期化したらwhileの条件のa>0.00001が満たせなくなるぞ
911デフォルトの名無しさん:2006/10/18(水) 00:19:00
floatって小数第何位までOKなの?
912デフォルトの名無しさん:2006/10/18(水) 00:29:33
>>911
処理系依存
913デフォルトの名無しさん:2006/10/18(水) 00:34:45
>>911
そもそも小数点位置が固定でないから、小数第何位までOKとかいう概念は適合しない。
http://ja.wikipedia.org/wiki/IEEE754
914デフォルトの名無しさん:2006/10/18(水) 00:36:39
だから浮動小数点という
915911:2006/10/18(水) 00:44:20
ごめん、仮数包茎部の有効桁数っていう意味なんだが
916デフォルトの名無しさん:2006/10/18(水) 00:45:33
>>915
フシアナはとりあえず義眼でもつけて来い
>>912-914
917911:2006/10/18(水) 00:48:24
915は俺じゃないんだが
918911:2006/10/18(水) 00:50:31
912は了解したが913,914はちょっと違うんじゃまいか
919911:2006/10/18(水) 00:51:53
>>917
騙るな
920デフォルトの名無しさん:2006/10/18(水) 00:54:02
>>915
10進数で言うならIEEE754のfloatは6桁
doubleは15桁
特別な理由がないかぎりfloat使うのは得策じゃないね。
921デフォルトの名無しさん:2006/10/18(水) 00:57:13
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
x,yの2次元座標が書かれている、coord2.txtとx,y,zの3次元座標が書かれている、coord3.txtを読み込み、
gnuplotなどで表示するプログラムを作成せよ。
ファイルをオープンしたら、必ずクローズすること。
[3] 環境
 [3.1] OS: Linux or Mac OSX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月24日
[5]座標データは下記のように記されています。
ファイルを入力(オープン)した後のプロセスのイメージが浮かびません・・・
各々の座標がどのように当てはめられていくイメージが掴めればよいのですが。
x y z
0.0 0.0 0.0

922デフォルトの名無しさん:2006/10/18(水) 00:59:10
921は期限が21日まででした・・・。
すいません。
923デフォルトの名無しさん:2006/10/18(水) 02:08:31
それはもう gnuplotなど の使い方を読めとしか
924デフォルトの名無しさん:2006/10/18(水) 06:03:26
>>920 どういうときが得策になるか知らないでしょ。
925デフォルトの名無しさん:2006/10/18(水) 06:53:23
>>908
どうもありがとうございます
プログラム読みながら構造体を理解したいと思います
926デフォルトの名無しさん:2006/10/18(水) 09:09:19
>>921
gnuplot用のコマンド&データを標準出力して,パイプで渡すとか。
http://t16web.lanl.gov/Kawano/gnuplot/datafile2.html#7.4

927デフォルトの名無しさん:2006/10/18(水) 09:55:49
【質問テンプレ】
[1] 授業単元:プロ演
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2789.txt
このプログラムを台形公式と2次のシンプソン則に基づく数値積分を行うように変更せよ
台形近似 h=(b-a)/n nは偶数
h*( 1/2f(a)+f(a+h)+f(a+2h)+・・・+f(b-h)+1/2f(b) )
シンプソン公式 h=(b-a)/n
(h/3)*( f(a)+f(a+h)+ 4( f(a+h)+f(a+3h)+・・・+f(b-h) ) 奇数番目
+2( f(a+2h)+f(a+4h)+・・・+f(b-2h) ) 偶数番目  
[3] 環境
 [3.1] Win XP
 [3.2] gcc
 [3.3] 言語: C
 [4] 期限: 明日
[5] その他の制限: なし

お願いします
928お願いします:2006/10/18(水) 13:36:51
[1] 授業単元: ゼミ
[2] 問題文(含コード&リンク):
サンプル数6個で、2つの変数(x、y)を入力してその共分散と相関係数を出力する
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: Cでお願いします
[4] 期限: 今週末の金曜日までです
[5] その他の制限:
使う命令は、printf,scanf,for文等長くなってもいいので
初心者が使う文法みでお願いします。
929デフォルトの名無しさん :2006/10/18(水) 13:49:47
>>927
//台形公式と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 == 0)
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);
}
930929:2006/10/18(水) 14:05:53
if(n == 0 && b - a == 0) のところ
if(n == 0 && b == a) に直しといて
931デフォルトの名無しさん:2006/10/18(水) 14:22:08
double同士の==比較は。。。
932デフォルトの名無しさん:2006/10/18(水) 14:35:51
>>928
すぐに解答をもらえると思うなよ。

共分散と相関係数の式をそのまま当てはめるだけ。
まずは、その二つの値を求めるための式を書いてみろ。
933デフォルトの名無しさん:2006/10/18(水) 14:36:00
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
for(i=0; i<HEIGHT; i++){
for(j=0; j<WIDTH; j++){
fscanf(fp, "%d", &data);
cell[i][j]->a = (int)data/100;
cell[i][j]->b = (int)(data%100)/10;
cell[i][j]->c = data%10;
}
}
[3] 環境
 [3.1] OS: :WindowsXP
 [3.3] 言語:C

外部ファイルからデータを構造体のポインタで受け取りたいのですが、
ビルドしたらエラーも警告も出ないのですが、実行の時に問題が発生して終わります。
ちなみに外部ファイルはテキストデータで
100 100 100
210 130 210
332 220 031
みたいな感じのものです。どうやらcell[i][j]に代入するときに問題が起きてるようです。
でも何が原因なのか良く分かりません。助けてください;;
934デフォルトの名無しさん:2006/10/18(水) 14:41:00
ちなみにポインタじゃなくて普通の構造体に直して
-> を . に変えたら普通に動作したのですが、
構造体にした場合 . を -> に変えるだけではダメなのでしょうか?
ポインタでやらないと後々不便なのでここで妥協したくはないのですが・・・
935デフォルトの名無しさん:2006/10/18(水) 14:44:48
>>933
ネタか?釣りか?それとも真性か?

cellの構造体がどう定義されてるのか、一体誰が分かると思う?
このスレには回答者はいるがエスパーはいない。
936デフォルトの名無しさん:2006/10/18(水) 14:46:57
>>935
すみません、真性でした。
構造体はこんな感じです。

struct celldata{
  int a;
  int b;
  int c;
};
937デフォルトの名無しさん:2006/10/18(水) 14:59:10
連続ですみません。補足です。
main関数での構造体の定義は

struct celldata *cell[HEIGHT][WIDTH];

で、HEIGHTとWIDTHは#includeの下あたりで

#define WIDTH 3
#define HEIGHT 3

で定義しています。
938デフォルトの名無しさん:2006/10/18(水) 15:04:57
どうせメモリ確保せずに使ってるとかなんだろうな・・・
939デフォルトの名無しさん:2006/10/18(水) 15:14:03
>>938
ありがとうございました!
mallocでメモリ確保したら動作しました。
メモリ確保なんて自己参照構造体でくらいしか
使わないものだと思ってました・・・。
940928:2006/10/18(水) 15:18:49
#include<stdio.h>
main()

{
scanf( "%d%d", &a, &g );
scanf( "%d%d", &b, &h );
scanf( "%d%d", &c, &i );
scanf( "%d%d", &d, &j );
scanf( "%d%d", &e, &k );
scanf( "%d%d", &f, &l );

m=(a+b+c+d+e+f)/6;
n=(g+h+i+j+k+l)/6;
S=((a-m)(g-n)+(b-m)(h-n)+(c-m)(i-n)+(d-m)(j-n)+(e-m)(k-n)+(f-m)(l-n))/6;

X=sqrt((a-m)^2+(b-m)^2+(c-m)^2+(d-m)^2+(e-m)^2+(f-m)^2)
Y=sqrt((g-n)^2+(h-n)^2+(i-n)^2+(j-n)^2+(k-n)^2+(l-n)^2)

R=S/(X*Y)

printf("%d",S);
printf("%d",R);

}
これで精一杯です・・・
941デフォルトの名無しさん:2006/10/18(水) 17:03:37
Brian Westly 氏が1988年に作った
円周率を計算するプログラムなんだけど↓

#define _ -F<00||--F-OO--;
int F=00,OO=00;
main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
このプログラムの中で、どのようにして円周率を計算するのか考えなさい
有名っぽいプログラムだったので検索したのですが解説してるサイトとかなかったので困ってます。
よろしくお願いします。
942デフォルトの名無しさん:2006/10/18(水) 17:10:31
David van Brackle って人が書いたプログラムで1行で書けけるプログラムなんだけれども


main(Q,O)char**O;{if(--Q){main(Q,O);O[Q][0]^=0X80;for(O[0][0]=0;O[++O[0][0]]!=0;)if(O[O[0][0]][0]>0)puts(O[O[0][0]]);puts("----------");main(Q,O);}}

このプログラムを実行するとコマンドラインの引数すべての部分集合を表示することができるらしいのですが
どうして表示されるのか解説をしろという問題なのですが
どうしてなるのかわかる方はいらっしゃいませんか?
解説できる方がいたら解説をお願いします。
943デフォルトの名無しさん:2006/10/18(水) 17:27:51
  _________________________
  |                               |  |
  |           [G]oogle               |  |
  |  /ー[]{] /ー[]{] 冂  ┌冖ー┐ 冂      |  |
  | く, グ / .く, グ / . | .レ'7´フ カ l | .レ'7 lー┐.|  |
  | ∠/   ∠/   !__/ /_/ l__/ |__./..└‐┘.|  |
  |    ⊂二⊃                     |  |
  |    | l    |                     |  |
  |    |_l__|                     |  |
  |   ( ´_ゝ`)  シェフの味!          |  |
  |   /  |:  ヾ        ∧_∧ ドウダカ |  |
  |  / /  |: l、  l       (´<_`  ).、      |  |
  |__(__コつ| ̄|С,ノ __ (二二つ二ノ __ |  |
  |   /⌒\**                        |  |
  | .ゝ二二二ノ                    |  |
  |                   ググ(・∀・)レ!! |  |
  |_____________________________|/

  ググレカレー [google curry]
   (発売 2006〜)
944デフォルトの名無しさん:2006/10/18(水) 18:37:18
[1] 授業単元: 数値計算プログラミング
[2] 問題文(含コード&リンク):
数値を符号部1bit,指数部8bit,仮数部16or32bitの浮動小数点型へ変換するプログラムを作成し,1,2,3,4,8,0.5,0.25,0.1,0.2等の数値を変換する。ただし,入力フォーマットは  {-},[0-9]+{.[0-9]+}|{-}.[0-9]+
とする。ここで、{}は省略可、[0-9]は0〜9の任意の数字、+は前者の1回以上の繰り返し、|はどちらか一方を示す。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年10月19日(木)
945デフォルトの名無しさん:2006/10/18(水) 22:37:59
>>944
41bitの表現に変換するのか?
946デフォルトの名無しさん:2006/10/18(水) 22:49:39
1:演習C言語入門2
2:問:16
苗字/名前 といった形式で文字列を入力する
苗字と名前を表すふたつの文字列に分割するプログラムを作成せよ
実行例

苗字と名前を入力してください:takeda/wataru
takeda
wataru

仕様
苗字を表すポインタ *lastname
名前を表すポインタ *firstname を宣言する
入力された文字列から/を探す
無ければエラーを吐く

3:C言語 Linux gcc3.4
4:今週中
5:今週でポインタ、構造体の基礎まで学んでいます

よろしくお願いします
947デフォルトの名無しさん:2006/10/18(水) 23:01:46
>>946
#include <stdio.h>
#include <string.h>

main(){
char in[1000], *lastname, *firstname=in;
printf("苗字と名前を入力してください:");
scanf("%s", in);
lastname = strchr(in, '/');
if(!lastname){
printf("入力書式が間違っています\n苗字/名前という形式で入力してください");
return -1;
}
*lastname = NULL;
lastname++;
puts(firstname);
puts(lastname);
return 0;
}
948デフォルトの名無しさん:2006/10/18(水) 23:10:13
>>945
そうです
949デフォルトの名無しさん:2006/10/19(木) 00:08:33
>>947
*lastname=NULL;

*lastname='\0';
っしょ?
950947:2006/10/19(木) 00:11:17
>>949
文字列の終わりだから'\0'のがいいか
いつもNULLで書いてるからついこう書いてしまった
951デフォルトの名無しさん:2006/10/19(木) 00:16:30
NULLは意味が違うからやめたほうがいい

建前としては規格からはずれるので動かない可能性もある
見たことねーけどな
952デフォルトの名無しさん:2006/10/19(木) 00:20:05
>>951
今の規格ではNULLは整数の0と等価にみなせるんじゃなかったか?
C99だったかC++のどこからかだったかは覚えてないんだが…
953デフォルトの名無しさん:2006/10/19(木) 00:28:16
>>944
その問題、何度か尋ねてるようだけど、とりあえず出力例を出してくれ。
あと指数部の基数は幾つだ?下駄は?
仮数部の正規化の形式は?
954デフォルトの名無しさん:2006/10/19(木) 00:35:47
>>944
入力フォーマット {-},[0-9]+{.[0-9]+}|{-}.[0-9]+
のうち|の前の {-} につづく , カンマが入ってるのは間違いだよな?
955954:2006/10/19(木) 00:50:20
>>944
受け取れる数値のフォーマットは
1.125
-1.125
.125
-.125

だと思いたいわけだが、問題の通りだとカンマがあるせいで
,1.125
-,1.125
.125
-.125

こんなものを処理しないといけなくなってしまうぞ
956デフォルトの名無しさん:2006/10/19(木) 01:29:03
>>955
すいません,は.の間違いです
957デフォルトの名無しさん:2006/10/19(木) 01:31:04
>>955
>>956で訂正されてしまったので身もふたもないが…

おそらく適正を見ているのだろう。

勝手に解釈して , を抜かす奴→不可
間違いではないかと質問に来る奴→不可
書いてあるとおりに実装する奴→可
どちらの場合にも対応できるように実装する奴→良
このスレに丸投げしてねらーが答えないのが悪いと責任転嫁する奴→優
958デフォルトの名無しさん:2006/10/19(木) 01:38:29
>>950
最近はNULLは#defineで0設定されてたと思う。
959デフォルトの名無しさん:2006/10/19(木) 01:44:02
>>956 もしカンマをピリオドに変えると更にわけわかめ
1.1.25
-1.1.25
これは一体どんな数値に変換すれば…
960デフォルトの名無しさん:2006/10/19(木) 01:47:30
>>959
955の通りです
961デフォルトの名無しさん:2006/10/19(木) 02:12:35
>>959 チョット違う
.1.25
-.1.25
だろ?あげあし取りスマソ

>>944 の解き方としては
1.整数部分だけを二進数に変換
2.少数点以下を二進数に変換
3.1.2.の結果を合わせて初めてビットが1になる次のビットを仮数部の最上位ビットにする
で一応できるけど、無限大の表現と 0 の表現が未定義だな
962デフォルトの名無しさん:2006/10/19(木) 08:29:59
>>961
指数部はどうするの?
963デフォルトの名無しさん:2006/10/19(木) 09:45:26
区切り文字をわざわざ小数点とかぶせる神経が分からない
964デフォルトの名無しさん:2006/10/19(木) 10:15:59
1.1.25
-1.1
.25 (0.25)
と解釈できるけど?
965デフォルトの名無しさん:2006/10/19(木) 10:20:26
あるぇ〜〜、まだぽまいらC言語なんてやってんのぉ〜〜〜〜〜?
966デフォルトの名無しさん:2006/10/19(木) 10:21:36
>>961
世にあるIEEE以外の多くの実装では、最上位ビットも記録するわけだが。
967デフォルトの名無しさん:2006/10/19(木) 10:38:52
素直にatofのソースまるパクリでよくね。
いっそのこと、atofで変換して基数部を指定ビット数で切り捨てるとか。
968デフォルトの名無しさん:2006/10/19(木) 10:58:19
.-.1.25なんて馬鹿だろ
969デフォルトの名無しさん:2006/10/19(木) 11:16:54
仮数部はどうするのかな。(1+x)?それともx?
970デフォルトの名無しさん:2006/10/19(木) 11:55:00
まぁまて文字での表現形式とビットでの表現形式が一致しなければならないなんてどこにも書いてないぞ
971デフォルトの名無しさん:2006/10/19(木) 12:21:13
もうこのネタは飽きた。
972デフォルトの名無しさん:2006/10/19(木) 13:09:38
なら出てくんな
973デフォルトの名無しさん:2006/10/19(木) 14:35:40
質問者の態度が悪いなー
974デフォルトの名無しさん:2006/10/19(木) 15:13:40
>>969
1+xです
975デフォルトの名無しさん:2006/10/19(木) 15:56:32
>>952>>958
C++では0だし、Cでも0になっていることはある。
でも、だからと言って文字列の終端にNULLを使ってよいという理由にはならない。
976デフォルトの名無しさん:2006/10/19(木) 16:05:44
>>944
うっとうしいからさっさとやっちゃおうぜ
977デフォルトの名無しさん:2006/10/19(木) 16:14:53
やれと言われても、>>944は解くための情報が決定的に不足しとるんだわな。
とりあえず、基数は2。バイアスは無し。正規化は小数第1位に有効ビットを
持ってくる。入力フォーマットのカンマは無視ってことでいいのか?
978デフォルトの名無しさん:2006/10/19(木) 16:41:29
>>977
それでいいと思うよ
979デフォルトの名無しさん:2006/10/19(木) 17:05:19
どうせ他人の宿題なんだし、適当に解釈してそれっぽく見繕えばいいんじゃね?
980941:2006/10/19(木) 17:09:26
ググったのですが解説されている所はありませんでした。
マジで誰か分かる方いませんか?
981デフォルトの名無しさん :2006/10/19(木) 17:22:30
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>
#define Bs 10 //底を10とする
typedef struct{
unsigned int flug: 1;//フラグ
unsigned int index: 8;//指数
unsigned int mantissa: 32;//仮数
}BitSet;
BitSet *ChngF(char *Num, unsigned int size);double ToDubF(BitSet *Bz);
BitSet *ChngF(char *Num, unsigned int size){unsigned int i = 0,j = 0;unsigned int Bn = 0;
BitSet *Bi = (BitSet *)malloc(sizeof(BitSet));Bi->flug = 0;Bi->index = 0;Bi->mantissa = 0;
if(Bi == NULL){fprintf(stderr,"メモリ割り当て失敗\n");exit(1);}for(i = 0; isspace(Num[i]); i++)
;if(Num[i] == '-'){Bi->flug = 1;}else if(Num[i] == '+'){Bi->flug = 0;}else{Bi->flug = 0;}i++;
for(Bn = 0, j = 0;isdigit(Num[i]);i++, j++)Bn = 10 * Bn + (Num[i] - '0');Bi->index = j;
if(Num[i] == '.')i++;elseexit(1);for(;i < size; i++)Bn = 10 * Bn + (Num[i] - '0');Bi->mantissa = Bn;
return Bi;}double ToDubF(BitSet *Bz){double dm = (double)Bz->mantissa ,rd;unsigned int i;
double Ind = Bs ;for(i = 0; i < Bz->index; i++)Ind *= Bs;rd = (double)Bz->mantissa / Ind;if(Bz->flug == 1)
rd *= -1;return rd;}int main()
{char Num[] = "-13.653";unsigned int size = (unsigned int)strlen(Num);BitSet *B1;double Resl;
B1 = ChngF(Num, size);Resl = ToDubF(B1);printf("%s : %f \n",Num, Resl);return 0;}
>>944の問題って
入力規則ってのがわかんないんっすけど
こんな感じっすかね。問題の意図が違いますかね?
982デフォルトの名無しさん:2006/10/19(木) 17:42:20
>>981
955のような入力規則です
983デフォルトの名無しさん:2006/10/19(木) 17:46:38
>>981
955のような入力規則です
984デフォルトの名無しさん:2006/10/19(木) 18:01:50
>>981
Bnはuintじゃたりなくね。
985デフォルトの名無しさん:2006/10/19(木) 18:18:54
[1] 授業単元: プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2790.txt
        【】の中を埋めなさい
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C


授業始まって2回目の宿題でつまづいてしまいました。お願いします。
986デフォルトの名無しさん:2006/10/19(木) 18:31:05
>>985
1scanf("%lf %lf %lf", &w, &h, &d);
2:v=w*h*d;
3:s=w*h*2+h*d*2+d*w*2;
4:w, h, d
5:printf("taiseki %f, menseki %f\n", v, s);
987985:2006/10/19(木) 18:46:01
>>986
できました!ありがとうございました。
988デフォルトの名無しさん:2006/10/19(木) 19:06:51
>>980
その邪悪な糞コードをこう書き換えれば少しは分かり易いだろう。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2791.txt

要は最終的に 4.0 * 201 / -16 / 16 という式を作ってるだけだ。
円周率に近い値をプリントするだけのプログラムで別に円周率を
計算してるわけじゃない。それを技巧を凝らしてわざわざ分かり難く書いてる。

てか、これ学校の宿題じゃないだろ。
まっとうな学校の授業で、分かり難いCコードコンテスト(Obfuscated C Code Contest)の
作品なんかを読ませるとは思えない。
http://www0.us.ioccc.org/1988/westley.c
http://www0.us.ioccc.org/1988/westley.fix.c
http://www0.us.ioccc.org/
989デフォルトの名無しさん:2006/10/19(木) 19:49:47
[1] 授業単元:システム学
[2] 問題文:行列の積を用いた性能評価プログラムを作成しなさい
      計算に何秒かかったのか表示し、行列の大きさは任意で変更が出来るように組むこと
[3] 環境  
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 2006年10月20日14時
[5] その他の制限: コンパイルオプションには最適化を指示する。
倍精度浮動小数点を用いること
よろしくお願いします
990デフォルトの名無しさん:2006/10/19(木) 19:53:22
[1] 授業単元:構造体のポインタ
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2793.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語: C
[4] 期限:20日まで
[5] その他の制限:
991デフォルトの名無しさん:2006/10/19(木) 20:27:59
次の人お願い

あなたが解けない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++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
992デフォルトの名無しさん:2006/10/19(木) 20:39:36
>>981
うまくいかないんですが
993デフォルトの名無しさん:2006/10/19(木) 20:39:57
スレでも立てるか
994デフォルトの名無しさん:2006/10/19(木) 20:40:36
995デフォルトの名無しさん:2006/10/19(木) 21:07:23
>>990
問題文に問題があるんだが、変更していいのはあくまでも
struct nibun *add_nibun(struct nibun *x,int k)
って関数だけなの?
996デフォルトの名無しさん:2006/10/19(木) 21:14:39
>>995
そうです
問題に書いてある部分は変更しちゃいけないみたいです
997デフォルトの名無しさん:2006/10/19(木) 21:15:06
埋め
998デフォルトの名無しさん:2006/10/19(木) 21:28:39
dispがこうなっていれば俺にも解けるんだが。

void disp(struct nibun *x)
{
    if(x->small!=NULL)
        disp(x->small);
    
    printf("%d-(",x->num);

    if(x->small!=NULL)
        printf("%d,",(x->small)->num);
    else
        printf("*");
    if(x->big!=NULL)
        printf("%d)\n",(x->big)->num);
    else
        printf("*)\n");
    
    if(x->big!=NULL)
        disp(x->big);
}

つーか2分木リスト構造って何だ?
999デフォルトの名無しさん:2006/10/19(木) 21:31:55
999
1000デフォルトの名無しさん:2006/10/19(木) 21:36:54
>>990
struct nibun *add_nibun(struct nibun *x,int k)
{
struct nibun *member, *parent, **parent_next;


member=malloc(sizeof(struct nibun));
member->num=k;
member->small=NULL;
member->big=NULL;

parent=x;
while(parent!=NULL)
{
if(k<parent->num)
parent_next=&(parent->small);
else
parent_next=&(parent->big);

if(*parent_next==NULL)
break;

parent=*parent_next;
}
*parent_next=member;

return x;
}
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。