C/C++の宿題を片付けます 74代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/09/21(木) 22:21:52【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
0002デフォルトの名無しさん
2006/09/21(木) 22:37:47乙!
あげていこうぜイエイイエイ
0003デフォルトの名無しさん
2006/09/21(木) 22:40:13乙カレー
0004デフォルトの名無しさん
2006/09/22(金) 00:22:280005 ◆jG/Re6aTC.
2006/09/22(金) 08:17:25[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の機能の方が使いやすければそれでも大丈夫です。
どうか、よろしくお願いいたします!
(前スレに間違えて投稿してしまったので、移動してきました。すみません。)
0006デフォルトの名無しさん
2006/09/22(金) 13:43:480007デフォルトの名無しさん
2006/09/22(金) 13:52:04テンプレ書いてくれ。
0008デフォルトの名無しさん
2006/09/22(金) 14:03:43すいません、自己解決しました。
0009(^-^) ◆MONSOON/qo
2006/09/22(金) 14:37:34長い
無理
0010素人です
2006/09/22(金) 14:53:50[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] その他の制限: 入力、表示は自作関数使用すること。
エラー理由が分からなくって困ってます。よろしくお願い致します。
0011デフォルトの名無しさん
2006/09/22(金) 15:07:18どんなエラーが出るんだ?
0012(^-^) ◆MONSOON/qo
2006/09/22(金) 15:12:03関数MyGetAddressとMyOutputがない
0013デフォルトの名無しさん
2006/09/22(金) 15:16:49このプログラム、多分それだけじゃ正常な動作はしない。
0014デフォルトの名無しさん
2006/09/22(金) 21:21:230015デフォルトの名無しさん
2006/09/22(金) 21:36:38テーブルってなんですか?DBでも連携させるのかな?
0016デフォルトの名無しさん
2006/09/22(金) 21:50:41それと仮IPと実IPの定義がわからない。
>「ホスト」から仮 MAC アドレスと仮 IP アドレスが送られてきたら
これはどういう意味でしょうか
0017デフォルトの名無しさん
2006/09/22(金) 22:51:16あと
>(注意)練習のため、サーバーはデフォルトポート(システムに指定させる)を使用して
ください。
これの意図するところがわかりません。
問題を作った人はSOCKETの知識はあるんですか?
0018デフォルトの名無しさん
2006/09/22(金) 23:20:39ゴメンよく読んだらほとんど書いてますね。
途中まで気づかずにコーディングしてて途中で気づいてやる気がなくなったので
とりあえず途中までうpします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2683.txt
0019デフォルトの名無しさん
2006/09/22(金) 23:29:55空いてるポート使うってだけでしょ
勝手にOSが割り当ててくれる
0020デフォルトの名無しさん
2006/09/22(金) 23:41:510021デフォルトの名無しさん
2006/09/23(土) 00:17:280022デフォルトの名無しさん
2006/09/23(土) 00:27:30まぁまず>>1を読んで書き直せ
0023(^-^) ◆MONSOON/qo
2006/09/23(土) 01:00:33#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");}}
00245 ◆jG/Re6aTC.
2006/09/23(土) 03:41:45すいません。確かに長いですね。
>>15
テーブルといってもDBではありません。
vectorやmapを使ってメモリ内に「概念的な」テーブルを作ります。
とにかくIP→MACの変換ができれば何でもいいと思います。
>>16
仮とか実っていうのは、自分もよくわかりません。
たぶん、仮というのは、そういうIPアドレスが存在するフリをする、って感じのことだと思います。
00255 ◆jG/Re6aTC.
2006/09/23(土) 03:42:49デフォルトポートの意図に関しては、自分もよくわかりません。
0を指定したら自動的に割り当ててくれるっていうのを、知らしめたい(?)んでしょうか。
>>18
取り組んでくれたんですね!!
ありがとうございます。
正直言うと、ネットワークは自分の専門でもないので、こんな長々したプログラムやってる時間がなくなってしまったのです。
もし、ちょっと時間を割いていただける方や、ネットワークの得意な方などいらっしゃいましたら、超猛烈に大感謝です!!
0026デフォルトの名無しさん
2006/09/23(土) 10:46:38[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] その他の制限:特になし
よろしくお願いします
0027デフォルトの名無しさん
2006/09/23(土) 12:07:02なんか問題文の日本語おかしいから、ちゃんと意味取れてるかわからんが、やるだけやった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2685.txt
コードはここを参考にした。
http://www2.starcat.ne.jp/~fussy/algo/algo7-3.htm
0028デフォルトの名無しさん
2006/09/23(土) 15:57:46ありがとうございます、動きました
でもよくわからないところがあるんですがこの「free(table)」って命令は何をやってるんですか?
0029デフォルトの名無しさん
2006/09/23(土) 16:03:020030デフォルトの名無しさん
2006/09/23(土) 16:47:27いますぐ大学辞めた方がいいぞ。
0031デフォルトの名無しさん
2006/09/23(土) 17:52:040032デフォルトの名無しさん
2006/09/23(土) 18:27:03tableをfreedomしてます
動物愛護の精神です
0033デフォルトの名無しさん
2006/09/23(土) 19:22:23malloc で、確保したメモリを開放してる。
最近の OS はプログラム終了時メモリを強制的に開放するから、短いプログラムしか
書かない授業段階じゃ、一々 free() をさせてないんだろ。このスレじゃ珍しく
貰った答え読んで動作理解しようと努力してる奴をあんまり叩くなや><
0034デフォルトの名無しさん
2006/09/23(土) 19:28:570035デフォルトの名無しさん
2006/09/23(土) 19:39:180036デフォルトの名無しさん
2006/09/23(土) 21:16:110037デフォルトの名無しさん
2006/09/23(土) 21:18:20お前ら単位やらないから俺の講義でなくていいぞ
0038デフォルトの名無しさん
2006/09/23(土) 21:23:28先生!落ち着いてください!
0039デフォルトの名無しさん
2006/09/23(土) 23:15:13ワロタ
0040デフォルトの名無しさん
2006/09/23(土) 23:37:310041デフォルトの名無しさん
2006/09/24(日) 00:09:49Qとかかな?
0042デフォルトの名無しさん
2006/09/24(日) 00:16:56個人的にはZXCが苦手
リファクタリングとかやってると関数名や変数名にzxcの使用頻度が低い事に良く気が付く
0043デフォルトの名無しさん
2006/09/24(日) 00:44:340044デフォルトの名無しさん
2006/09/24(日) 13:04:08そうでもないか。。
0045デフォルトの名無しさん
2006/09/24(日) 13:23:010046デフォルトの名無しさん
2006/09/24(日) 15:00:18"6"は右手で打ちたいんだけど、MSナチュラルキーボード使ってるから強制的に左に…
0047デフォルトの名無しさん
2006/09/24(日) 16:27:08みんなどうやってうってるの?
左手小指でシフト、薬指で1を押してるんだけど…
0048デフォルトの名無しさん
2006/09/24(日) 16:29:08人差し指 - 1
0049デフォルトの名無しさん
2006/09/24(日) 16:37:29何故にそんな特殊な打ち方を・・・
0050デフォルトの名無しさん
2006/09/24(日) 16:44:56左小指でSHIFTを、左薬指を軽くTabに当てて姿勢制御、左中指で突き立てるように1を突く。
0051デフォルトの名無しさん
2006/09/24(日) 16:51:20例えば、
if(!
ってうつ場合、
(をうつときは左手の小指でシフト、右手中指で8を押して、
次に!をうつとき、左手の小指のシフトは押しっぱなしになるから、
薬指で1を押すことになっちまうんだよ><
どこかおかしいよね
0052デフォルトの名無しさん
2006/09/24(日) 16:55:28なれるまでは薬指でタブっちゃいそうだけど、
そっちのがよさげだね。
参考にさせてもらうよ
0053デフォルトの名無しさん
2006/09/24(日) 18:05:030054デフォルトの名無しさん
2006/09/24(日) 18:16:540055デフォルトの名無しさん
2006/09/24(日) 18:25:05自分は右シフトの存在に気付く前に一通りタイピングを覚えちゃった
0056デフォルトの名無しさん
2006/09/24(日) 18:58:210057デフォルトの名無しさん
2006/09/25(月) 00:01:060058デフォルトの名無しさん
2006/09/25(月) 00:31:56インタフェースはvoid wait( int time )で、
引数 time で渡された遅延時間(msec単位)だけ待って
処理を上に返す仕様です。
処理待ちの関数を作る課題でどうやって処理待ちをするか困ってます。
CPU速度に依存しない(ポーリングは使わない)やり方があったら教えてください。
WindowsのBCC32コンパイラを使っています。
005958
2006/09/25(月) 00:35:53今日はもう寝ます、ごめんなさい
0060デフォルトの名無しさん
2006/09/25(月) 00:38:420061デフォルトの名無しさん
2006/09/25(月) 06:00:33void wait(clock_t wait)
{
clock_t total = wait + clock();
while(total > clock());
}
0062素人です
2006/09/25(月) 08:33:26>>12
コンパイルの『ステータスは終了しました』という文は直りましたが、期待するものは得られませんでした。
精進します。どうもありがとうございました。
0063デフォルトの名無しさん
2006/09/25(月) 08:45:400064デフォルトの名無しさん
2006/09/25(月) 08:57:57Cの宿題なのでたぶんそれはないでしょ。
0065デフォルトの名無しさん
2006/09/25(月) 11:37:550066デフォルトの名無しさん
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] その他の制限:なし
0067デフォルトの名無しさん
2006/09/25(月) 12:52:06ホントに宿題か? ゲーム作ろうとして一定時間でメインループを
まわす方法を調べてるんじゃないの?
0068デフォルトの名無しさん
2006/09/25(月) 15:11:27#include <windows.h>
void wait(DWORD r)
{
DWORD s = timeGetTime();
while(timeGetTime() - s < 1000 / r);
}
int main(void)
{
for(;;){ wait(60); }
return 0;
}
0069デフォルトの名無しさん
2006/09/25(月) 15:15:571secあたり60回更新ね。
0070デフォルトの名無しさん
2006/09/25(月) 15:21:490071デフォルトの名無しさん
2006/09/25(月) 15:35:26これが答えだったら出題者の釣りか罠だな。
0072デフォルトの名無しさん
2006/09/25(月) 15:41:20単なるサンプルなのにそこまで書くのめんどい。
Winでゲーム作る場合は、DoEvents()関数とか作ってイベント強制通知すればいい。
0073デフォルトの名無しさん
2006/09/25(月) 19:48:16wait(0)
0074デフォルトの名無しさん
2006/09/26(火) 07:41:100075デフォルトの名無しさん
2006/09/26(火) 10:34:220076デフォルトの名無しさん
2006/09/26(火) 10:39:270077デフォルトの名無しさん
2006/09/26(火) 11:47:410078デフォルトの名無しさん
2006/09/26(火) 11:52:230079デフォルトの名無しさん
2006/09/26(火) 15:09:54Word等のワープロソフトでは、
文章中の文字(単語)のミスや変更などをする場合、
その文字検索して置き換える(検索→置換)機能を持っている.
単語と単語の間には必ずスペースが入っているものとして考えて,
これはどのように処理しているんですか?
0080デフォルトの名無しさん
2006/09/26(火) 15:16:06文章の構成単語が、辞書に登録されているものと合致する、もしくは固有名詞としての体裁を整えているか確認。
0081デフォルトの名無しさん
2006/09/26(火) 15:37:51strstr()とかで検索してその部分を置き換えればいいんじゃないの?
0082デフォルトの名無しさん
2006/09/26(火) 17:28:100083デフォルトの名無しさん
2006/09/26(火) 17:47:44[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まで
0084デフォルトの名無しさん
2006/09/26(火) 17:54:24#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);
}
0085デフォルトの名無しさん
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);
}
0086デフォルトの名無しさん
2006/09/26(火) 20:09:50もう、答え貰ってるようだけど、とりあえずコピペでそのまま提出して動く ver.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2686.txt
0087デフォルトの名無しさん
2006/09/26(火) 20:26:58[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言語は浅く広く習っています。スレ違いかもしれませんが、よろしくお願いします。
0088デフォルトの名無しさん
2006/09/26(火) 20:27:59echoクライアントのプログラムです
#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);
}
}
0089デフォルトの名無しさん
2006/09/26(火) 20:29:19#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();
0090デフォルトの名無しさん
2006/09/26(火) 20:29:57signal(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);
}
0091デフォルトの名無しさん
2006/09/26(火) 20:30:32[3]がめちゃくちゃだぞ。
推敲して再書き込みしろ。
0092デフォルトの名無しさん
2006/09/26(火) 20:32:30そのコードは何だ?
0093デフォルトの名無しさん
2006/09/26(火) 20:58:58[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サーバの返してきたものを端末に表示する
ものです。
0094デフォルトの名無しさん
2006/09/26(火) 21:02:00いや、コンパイラは使ってるだろうし、上のコードはどうみてもUnix/Linuxのものだぞ。
0095デフォルトの名無しさん
2006/09/26(火) 21:21:14例えば、コンパイラと言えばvisual studioのような物ですよね?授業では、telatarmというソフトとメモ帳しか使ってない
んですよね。telatarmを起動し接続してemacsで書くのがいつもで、特にvisual studioのようなC言語コンパイラは使って
ないんです。
0096デフォルトの名無しさん
2006/09/26(火) 21:31:300097デフォルトの名無しさん
2006/09/26(火) 21:37:22[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];
0098デフォルトの名無しさん
2006/09/26(火) 21:39:31お前の知識レベルはわかったからもう環境に関して説明しなくていいよ。
ただ、reverse()というのが何者かわからないと、解けないから説明しろ。
0099デフォルトの名無しさん
2006/09/26(火) 21:43:54visual studioはコンパイラではなくIDE(統合開発環境)と呼ばれるものです。
これには、エディタ、コンパイラ、リンカ、デバッガ、UIデザイナなどソフトウェア開発に必要なもの一式が含まれます。
C言語のプログラムを実行するには、C言語のコンパイラか、C言語のインタープリタが必要になります。
一般にC言語のインタープリタが使われることは滅多にないので、普通はコンパイラを使います。
C言語のソースコードを実行ファイルに変換するときに"cc hogehoge.c"とか、"gcc hogehoge.c"とかのコマンドを実行していると思います。
この"cc"や"gcc"がコンパイラと呼ばれるものです。
0100デフォルトの名無しさん
2006/09/26(火) 21:44:33reverse()に関する説明があるので書きます。
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`);すれば いいと思います。
0101デフォルトの名無しさん
2006/09/26(火) 21:47:06すいません・・。ありがとうございます。ということは、デフォルトがtestとすればgcc test test.c〜のようにコンパイル
しています。
0102デフォルトの名無しさん
2006/09/26(火) 22:25:280103デフォルトの名無しさん
2006/09/26(火) 22:48:540104デフォルトの名無しさん
2006/09/26(火) 22:53:10今日一日考えましたが、無理ぽでした。
0105デフォルトの名無しさん
2006/09/26(火) 23:02:320106デフォルトの名無しさん
2006/09/26(火) 23:05:350107デフォルトの名無しさん
2006/09/26(火) 23:05:47俺の理解力が足りないのか・・・
意味分からん。
0108デフォルトの名無しさん
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の表示ではちゃんと自分が欲しいデータが表示されているのにも
かかわらず、ちゃんとカキコみできない。
0109デフォルトの名無しさん
2006/09/26(火) 23:13:40多分関係ないと思うけどCloseはしないのか?
0110デフォルトの名無しさん
2006/09/26(火) 23:19:28どこがわからないのですか?
補足しますが。
ぜんぜん分からないので、アドバイスだけでもお願いします!
0111108
2006/09/26(火) 23:22:32自分素人なもんで・・・、closeなんてあるんでつか?
エディットボックスに直接「文字列」を入力したら
ちゃんとファイルを保存できるんだけど、
エディットボックスへ、文字情報を渡して保存ボタン(OnButton2)を
押すととたんにファイルの保存ができなくなる。
0112108
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;
}
0113108
2006/09/26(火) 23:33:05連続カキコすまそ。
Closeわかりまつた。
0114デフォルトの名無しさん
2006/09/26(火) 23:52:53描くって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);
めんどくさくなった続きよろ
0115デフォルトの名無しさん
2006/09/27(水) 00:09:010116デフォルトの名無しさん
2006/09/27(水) 00:14:30×:x[i]=sin(i);y[i]=sin(2*i);
○:x[i]=sin(i*3.14/360);y[i]=sin(2*i*3.14/360);
0117108
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;
}
0118デフォルトの名無しさん
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] その他の制限:なし
0120デフォルトの名無しさん
2006/09/27(水) 00:58:590121 ◆ccqXAQxUxI
2006/09/27(水) 01:04:03ここってそういう板じゃないんですか?
0122デフォルトの名無しさん
2006/09/27(水) 01:10:00http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2687.txt
たぶんこれで動くんじゃね
linux環境内からためせねーけどやってみて。
グラフ描くところは
http://akita-nct.jp/~yamamoto/lecture/2005/2E/29th/html/node4.html
を参考にしました。
0123デフォルトの名無しさん
2006/09/27(水) 01:25:20ベースのとこだけ作った。そして飽きた。
タグID.txtを作るところまで。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2688.txt
ひさしぶりにC++使ったらちょっと楽しかった。
0124デフォルトの名無しさん
2006/09/27(水) 01:31:25今試してみたが、
file.textに、CFileDialogで選択したファイルのフルパスが、きちんと書き込まれたぞ。
file.textを排他ロックしてるか、読み取り専用属性になってるんじゃね?
0125デフォルトの名無しさん
2006/09/27(水) 01:34:06ありがとうございます!!
ほんとに感謝です!
これを参考に解析のプログラムをこれから頑張ってみたいと思います。
0127デフォルトの名無しさん
2006/09/27(水) 02:54:57---- 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)
0128デフォルトの名無しさん
2006/09/27(水) 02:58:17for 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
の間違い。
0129デフォルトの名無しさん
2006/09/27(水) 07:57:250130デフォルトの名無しさん
2006/09/27(水) 08:15:19#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');
}
}
どうでしょうか?
0131デフォルトの名無しさん
2006/09/27(水) 08:44:08処理できない。それに、空行時はスキップするようにした方がいいと思う。
0132デフォルトの名無しさん
2006/09/27(水) 08:45:54すいません・・・これ以上思いつかないんですがヒントをいただけませんか?
0133デフォルトの名無しさん
2006/09/27(水) 08:53:53拡張子を.cppか.ccに変更+Pythonというランタイムが必要、
と言い放てばいいんじゃね?
0134デフォルトの名無しさん
2006/09/27(水) 09:14:47ありがとうございます!
みなさんほんとに親切な方ばかりで、、、
助かりました。何とか今日中にレポートとして仕上がりそうです。
ほんとにほんとにありがとうございました!!!
0135デフォルトの名無しさん
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;
}
}
0136デフォルトの名無しさん
2006/09/27(水) 16:43:55xor使うな。s[l] == s[r]の時ゼロになってしまうぞ。
配列とポインタは、どちらを使っても最近のコンパイラは同じようなコードを吐く。
0137デフォルトの名無しさん
2006/09/27(水) 16:52:34そうですか。
という事はこれが一番効率良いコードでしょうか?
0138(^-^) ◆MONSOON/qo
2006/09/27(水) 16:58:06CPUレジスタを使う
0139(^-^) ◆MONSOON/qo
2006/09/27(水) 16:59:50関数ではなくマクロにする
0140デフォルトの名無しさん
2006/09/27(水) 17:24:11ここで教えてくれてる人ってアセンブラも使えますか?
0141デフォルトの名無しさん
2006/09/27(水) 17:36:08> s[l] == s[r]の時ゼロになってしまうぞ。
排他論理使ってもスワップはできる
0142デフォルトの名無しさん
2006/09/27(水) 17:37:16アセンブラも少しはできるけど、激しくスレ違い
0143デフォルトの名無しさん
2006/09/27(水) 17:39:25普通のswapですむ状況ならそっちを使うほうがマシ
0144デフォルトの名無しさん
2006/09/27(水) 17:48:00ttp://www.dd.iij4u.or.jp/~okuyamak/Information/xor_fixed_swapping.html
0145デフォルトの名無しさん
2006/09/27(水) 17:58:37a = b - a;
b -= a;
a += b;
0146(^-^) ◆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);}
0147つーか、お前が余計なお世話
2006/09/27(水) 18:04:58register宣言はコンパイラによって無視されるか余計なお世話。
>>139
今時のコンパイラは積極的にインライン展開するから余計なお世話。
0148デフォルトの名無しさん
2006/09/27(水) 18:08:00マクロを展開した後の形をみて己の馬鹿さ加減を悔いれ
0149デフォルトの名無しさん
2006/09/27(水) 18:08:57複文マクロをdo while(0)でくくる常識も知らない奴は消えてほしいです。
0150(^-^) ◆MONSOON/qo
2006/09/27(水) 18:13:04勉強になった
0151デフォルトの名無しさん
2006/09/27(水) 18:15:28x86系なら XCHG
http://www5c.biglobe.ne.jp/~ecb/assembler/9_2.html
コンパイラがよっぽど馬鹿じゃない限り、一時領域使おうが加減の演算使おうが
xor 使おうが、この種のエクスチェンジ命令に最適化されるはず。
よっぽどコンパイラが信用ならんのなら、実際に計測してみてコーディングに拘ってみたら。
大抵の CPU がエクスチェンジ命令を備える現在、高級言語のでもエクスチェンジを行う
演算子があれば便利なんだけどね。
というか、リソースかつかつの20年前のプログラミングや、物理的にリソースが制限される
組み込み系ないら話しは分かるけど、現代の学校の宿題レベルでそんな所に拘る必要は
皆無だろうと。
0152デフォルトの名無しさん
2006/09/27(水) 18:17:240153(^-^) ◆MONSOON/qo
2006/09/27(水) 18:17:31無限ループしてるっぽい
0154(^-^) ◆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);
}
0155デフォルトの名無しさん
2006/09/27(水) 18:42:59手法として古くさい上に、どうでもいい部分だからな
最近じゃ小手先のコーディングテクニックの高速化なんて、
膨大なCPUクロック上の些末な変化でしかない
よほどアホな書き方をするとか、実行環境がチープでない限り実測時間には影響しない
0156デフォルトの名無しさん
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)
0157(^-^) ◆MONSOON/qo
2006/09/27(水) 18:51:24#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--;}}
0158デフォルトの名無しさん
2006/09/27(水) 18:58:260159デフォルトの名無しさん
2006/09/27(水) 18:59:530160デフォルトの名無しさん
2006/09/27(水) 19:01:23さぁ?
レジスタ使うかもしれんし、スタック使うかもしれんし、そもそもスタックという概念のない環境もあるかもしれんし
0161デフォルトの名無しさん
2006/09/27(水) 19:01:35forループで毎回「l/2」「l-m」[l-m]やってるからでしょ。
0162デフォルトの名無しさん
2006/09/27(水) 19:06:40次の宿題まだー?
0163(^-^) ◆MONSOON/qo
2006/09/27(水) 19:15:05改行区切りで、一行1000文字以下のファイルが2つあります
ファイルの一方に存在しない行を抽出してください
0164delta ◆OM5/jtEIXw
2006/09/27(水) 19:19:28[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] その他の制限: 上記に書いたとおりです
0165デフォルトの名無しさん
2006/09/27(水) 19:21:07がんばってね
0166デフォルトの名無しさん
2006/09/27(水) 19:25:400167デフォルトの名無しさん
2006/09/27(水) 19:29:480168(^-^) ◆MONSOON/qo
2006/09/27(水) 19:36:49ファイルサイズが20Mバイト以上とかだとアルゴリズムが
大事だと思うんですけどどういった戦略でいけばいいんでしょうか?
0169デフォルトの名無しさん
2006/09/27(水) 19:50:41http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2692.txt
dateじゃなくてdataだろってずっとつっこみたい気持ちを抑えながらやりました。
0170デフォルトの名無しさん
2006/09/27(水) 19:55:13if(max < *p++) max = *p;
これは
if(max < *p++) max = p[-1];
こうだね。
なんなんだ、このウンコな問題は。
0171デフォルトの名無しさん
2006/09/27(水) 19:56:33富豪的ぷろぐらみんぐ
0172デフォルトの名無しさん
2006/09/27(水) 19:58:55↑これ、date[i++] = value;でいいのでは?
for(i = 0 ;date[i] != 0 ; i++)
printf("%9d\n",date[i] ); /* 配列要素の表示 */
↑これ、参照用ポインタ使わなくていいの?
while(*p ){
↑個人的にこの無神経な書き方は許せない。
いや、わざとなんだろうけどさ。
0173デフォルトの名無しさん
2006/09/27(水) 20:01:310174デフォルトの名無しさん
2006/09/27(水) 20:01:43え・・・こんな質問されると普通に萎える。
0175delta ◆OM5/jtEIXw
2006/09/27(水) 20:03:25どうもありがとうございました
こんなに早く回答してもらえるとは思ってたなかっただけに嬉しかったです
でもこれがうんこな問題なんですか…
どこが駄目なのか全然分からないorz
0176デフォルトの名無しさん
2006/09/27(水) 20:08:080177delta ◆OM5/jtEIXw
2006/09/27(水) 20:42:33答えていただいたのを入れてコンパイルしたら
「45: 文法エラー at end of input 」とでてしまいました
これで文法合ってると思ったんですけど何処が違うんですか?
0178デフォルトの名無しさん
2006/09/27(水) 20:50:24if(argc != 2){
printf("\n使用法 : プログラム名 入力ファイル名\n");
exit(-1);
が、閉じてない。
0179(^-^) ◆MONSOON/qo
2006/09/27(水) 20:51:27括弧がたらないよ
最後に } をつける
0180デフォルトの名無しさん
2006/09/27(水) 20:56:330181デフォルトの名無しさん
2006/09/27(水) 21:16:440182デフォルトの名無しさん
2006/09/27(水) 21:23:58漏れもw
0183delta ◆OM5/jtEIXw
2006/09/27(水) 21:48:48警告は出ましたがコンパイル通りました
本当に何から何までありがとうございました
そろそろ真面目に自分で勉強しないとまずいと思い始めてきました
ここにいる皆さんは独学でプログラミングできるようになったんでしょうか?
大学の授業についていけてないので危機感を持つようになりました…
0184デフォルトの名無しさん
2006/09/27(水) 22:45:35僕は授業についていけませんでしたが、
こんなんあったら便利だろうなという作りたいものが後々でてきたので
C言語を勉強しなおしてある程度のものは作れるようになりました。
スレ違いですどうもありがとうございました。
0185デフォルトの名無しさん
2006/09/27(水) 22:45:51プログラムを仕事や趣味でやるつもりなら、教わらないとできないのはヤバい。
そんなつもりがなければ、なんとか単位とるまで頑張って、試験終わったら忘れればいい。
0186デフォルトの名無しさん
2006/09/27(水) 22:53:56#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]);
}
よろしければ解説もよろしくおねがいします。
0187デフォルトの名無しさん
2006/09/27(水) 23:01:30出力結果
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。*/
}
っていうか}が}になってるみたいだけど自動的に変換されるのか?のテスト。
0188デフォルトの名無しさん
2006/09/27(水) 23:04:090189デフォルトの名無しさん
2006/09/27(水) 23:07:30解説
全角の記号が各所に埋め込まれており、C言語の体裁をなしていないため、コンパイル不能です。
当然プログラムの実行も不可能なので、解無し。
0190デフォルトの名無しさん
2006/09/27(水) 23:12:44わかりやすい解説でよくわかりました、ありがとうございます。
{が{になっているのはC言語のソフトをもっていなくて今自分で書いたからです。
0191delta ◆OM5/jtEIXw
2006/09/27(水) 23:17:34そうなんですか
将来プログラム関係の仕事につきたいので真面目に勉強してみます
どうもありがとうございました
あとすれ違いすいませんでした
0192デフォルトの名無しさん
2006/09/27(水) 23:23:01#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);
}
できれば解説も書いていただけるとありがたいです。宜しくお願いします。
0193デフォルトの名無しさん
2006/09/27(水) 23:24:190194デフォルトの名無しさん
2006/09/27(水) 23:26:22i=5
1x2x3x4x5を電卓で計算してみればわかるんじゃない?
0195デフォルトの名無しさん
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] その他の制限:
0196デフォルトの名無しさん
2006/09/27(水) 23:43:44while(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
こんな風に分解して考えると分かりやすいかも?
0197デフォルトの名無しさん
2006/09/27(水) 23:46:28data01〜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で割ったもの)
0198195
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] その他の制限: 特になし
お願いします!!
0199デフォルトの名無しさん
2006/09/28(木) 01:00:19std::set_symetric_difference()
0200199
2006/09/28(木) 01:04:030201デフォルトの名無しさん
2006/09/28(木) 01:10:16指針
・Matrixを次のように定義する
int rows, cols;
int[][] m;
・テキストファイルからMatrixを読み込めるようにする
・Matrixに実数倍のMatrix加算をできるようにする
・Matrixを実数倍できるようにする
・Matrixをテキストファイルに書き出せるようにする
これだけなんだが、めんどう
0202195
2006/09/28(木) 01:47:18そうなんですよ。
特に割るのと引くののやり方がよくわかりません。
涙が出そうです。
0203デフォルトの名無しさん
2006/09/28(木) 01:47:19Cで作成したexeファイルをURLを引数に実行したら、
そのURLがインターネットエクスプローラーで開く。
イメージはtest.exeという名前のCのexeファイルを作って
test.exe http://www.yahoo.co.jp
を実行したら、インターネットエクスプローラーで
http://www.yahoo.co.jpのページが開くということです。
難しいですが、どうぞ宜しくお願いいたします。
0204デフォルトの名無しさん
2006/09/28(木) 01:55:51そのURLで、ダミーの .urlファイルを作成し、ShellExecuteすれば開ける
0205デフォルトの名無しさん
2006/09/28(木) 01:58:33ううーん…
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");
}
}
-----------------------------
0206デフォルトの名無しさん
2006/09/28(木) 01:59:16トチ狂っとるwwwwwwwwwwwwwwww
寝れwwwwww
0207195
2006/09/28(木) 02:18:01大変ありがたいご助言ですが、
私にはなんだか余計に理解できないのですが・・・。
すみません。
もっと初心者向けの解説をお願いいたします〜(涙)
0208 ◆sUfWYz9MSA
2006/09/28(木) 03:15:47[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以外の関数は使用できません。
初心者です。
みなさんのソースを参考にさせてください。
宜しくお願いします。
(返信が遅くなるかもしれません。)
0209デフォルトの名無しさん
2006/09/28(木) 03:27:151までやった。
同じようにすりゃできっだろwww
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2705.txt
0210209
2006/09/28(木) 03:43:55http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2706.txt
暇だから追加した反省してない。
0211デフォルトの名無しさん
2006/09/28(木) 03:44:14ひとつずつ書くのじゃなく、もっとエレガントな方法ないかな。
一個ずつやんないと無理かね?
freadとか使ったらどうだ?
0212(^-^) ◆MONSOON/qo
2006/09/28(木) 03:59:35なんだよこの無駄の多そうなソースは
0213デフォルトの名無しさん
2006/09/28(木) 04:03:52BMIのやつな
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2707.txt
0214デフォルトの名無しさん
2006/09/28(木) 08:35:30色々試したのですが、どうもうまくいきません。
具体的にはどのようなプログラムになるのでしょうか?
教えて頂ければうれしいです。
どうぞどうぞ宜しくお願いいたします。
0215デフォルトの名無しさん
2006/09/28(木) 08:52:24WindowsならShellExecuteに直接URLを渡せば動く。
ShellExecute(0, TEXT("open"), TEXT("http://www.google.com/"), 0, 0, SW_SHOW);
IE以外を標準のブラウザにしている場合はそれで開かれる。
強制的にIEで開かせる(単純な)方法もあるが。
0216デフォルトの名無しさん
2006/09/28(木) 09:22:54stdio.hっていつから関数になったの?
基礎力付けなきゃな。かえれ
0217デフォルトの名無しさん
2006/09/28(木) 11:41:50問題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];
}
0218デフォルトの名無しさん
2006/09/28(木) 11:43:01{
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';
0219デフォルトの名無しさん
2006/09/28(木) 12:25:23大学辞めて働け。
0220デフォルトの名無しさん
2006/09/28(木) 12:34:12丸投げしてくる内容は糞簡単なものばかりだしな
0221デフォルトの名無しさん
2006/09/28(木) 12:53:42しょしんしゃはくちだししなくていいよ^^
0222デフォルトの名無しさん
2006/09/28(木) 13:06:48(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;
}
0223195=197=198
2006/09/28(木) 13:13:35ちっともうまくいきませぬ。。。
0224デフォルトの名無しさん
2006/09/28(木) 13:20:16授業のうちの一つでプログラムがあったってだけで、単位得するくらいじゃね?
別にプログラマー目指してるわけじゃないだろwwwwwwwwww
プログラマーになりたいのに丸投げしてるんだったら終わりだな
0225デフォルトの名無しさん
2006/09/28(木) 13:23:27>>210でできてんじゃん
0226デフォルトの名無しさん
2006/09/28(木) 13:37:20最後の1行には同意だが、情報系の大学でもコピペで提出する奴は多いぞ
0227デフォルトの名無しさん
2006/09/28(木) 13:47:410228デフォルトの名無しさん
2006/09/28(木) 13:51:170229デフォルトの名無しさん
2006/09/28(木) 13:52:34情報系の大学があったか。
実態を知らないけど、情報の専門学校となにが違うんだ?
プログラマ目指しててコピペするやつは人として終わってるな。
なんのための授業で、なんのための宿題かがわかってないな。
自分に何の利益がないことも、目の前の「提出しないとやばい」って事だけに目を向けすぎ
0230デフォルトの名無しさん
2006/09/28(木) 13:53:59チェックするって言ったって、出来るのは精々、部分一致のチェック位だろ。
一致したとしてもパクリとは限らないしな。
0231デフォルトの名無しさん
2006/09/28(木) 13:55:57別にC言語がすべてじゃないし、将来C言語は使う気がないなら捨てても構わないと思う。
もっと高級なことに力を費やすのは悪くない。
0232デフォルトの名無しさん
2006/09/28(木) 13:57:29プログラムの勉強だけをやる→専門学校
主にプログラムの勉強をする(他にも勉強する)→情報系の大学
あとはあれだ、勉強する期間の違いとか、学士が貰えるとかそこらへんじゃない?
まぁ人として終わってるのは同意だけど、いまさらそれを言ったところで意味無いわけで。
0233デフォルトの名無しさん
2006/09/28(木) 14:01:04アメリカではパクリに対する認識が厳しくて(アカデミックな提出物でパクリと見なされると、犯罪になることもある)、パクリの傾向を統計的に集めている機関もある。
そういう統計に基づいてるから、けっこう当たるみたいよ。
0234デフォルトの名無しさん
2006/09/28(木) 14:06:28それ面白いな。
日本もやればいいのに・・・。あほ学生があほのまま卒業して、
はりぼての学歴振りかざして社会に出てこられてもね・・・。
0235デフォルトの名無しさん
2006/09/28(木) 14:11:290236デフォルトの名無しさん
2006/09/28(木) 14:17:35C言語が大事とか関係ないし。
授業の一つもまともにこなせない事に問題があるって話だ。
>>235
プログラマに学歴なんて関係ない
0237デフォルトの名無しさん
2006/09/28(木) 14:23:530238デフォルトの名無しさん
2006/09/28(木) 14:26:520239デフォルトの名無しさん
2006/09/28(木) 14:29:27普通にdiff取ったら、関数まるごとレベル…
いや、全ソース、改行位置すら同じだったりするんじゃないか?w
0240デフォルトの名無しさん
2006/09/28(木) 14:31:200241デフォルトの名無しさん
2006/09/28(木) 14:33:360242デフォルトの名無しさん
2006/09/28(木) 14:59:07もう、回答があるようだけど、もうちょいすっきり書けそうな気もするんで
とりあえず�@の方だけ参考程度に別解。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2708.txt
0243242
2006/09/28(木) 15:03:34上のプログラムじゃ、dataファイルと出力ファイルを DATA フォルダに纏めてるけど、
それだと問題あったらそこは自分で変えちくれ。
0244デフォルトの名無しさん
2006/09/28(木) 15:49:410245242
2006/09/28(木) 19:22:43while ループの後にこの fclose() を入れといて。
0246デフォルトの名無しさん
2006/09/28(木) 20:00:31遅レスだが世の中にはこういう物もある
ttp://sel.ist.osaka-u.ac.jp/cdtools/ccfinder.html
>プログラミング言語の構文に応じた処理を行い、変数名が書き換えられたりしていても、正しくコードクローンを検出する
こういった物を利用すれば同じ処理をしている限り、変数名を変えたりインデント変えたりしたところで無意味
0247デフォルトの名無しさん
2006/09/28(木) 20:07:040248デフォルトの名無しさん
2006/09/28(木) 22:12:030249デフォルトの名無しさん
2006/09/28(木) 22:20:150251デフォルトの名無しさん
2006/09/29(金) 02:31:49度々申し訳ございませんが、よく分かりません。。。
私が考えたプログラムは下の通りですが、エラーばっかりです。
具体的にプログラムを教えて頂ければ大変大変うれしいです。
どうぞ宜しくお願いいたします。
#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のページが開くということです。
難しいですが、どうぞ宜しくお願いいたします。
0252デフォルトの名無しさん
2006/09/29(金) 03:40:42│ω・`))))))
0253デフォルトの名無しさん
2006/09/29(金) 03:45:42↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
251です。
申し訳ございませんが、スレ違い(私は宿題ではなく、
個人的に勉強をしております)でしたので、
【ANSI-C】 C言語なら俺に聞け! Part 129)
の804番目のスレに改めて書かせて頂きます。
また、そちらのスレにも、最初ここに書き込んで、
ShellExecuteを使用すれば良い旨を聞いていることを
お伝えさせて頂こうと思います。
お手数をお掛けして誠に申し訳ございませんが、
204様、215様、【ANSI-C】 C言語なら俺に聞け! Part 129)
の804に回答を頂ければ嬉しいです。
どうぞ宜しくお願いいたします。
0254デフォルトの名無しさん
2006/09/29(金) 04:00:43コンナジカンマデベンキョウカ、モマエ、エライナ
タスケテヤリタイガ、モレコウコウチュウタイノニートデ、プログラムノコトハワカランガ
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpshell/html/_win32_shellexecute.asp
ハサンコウニナラナイノカ?
│ω・`)))
イマワモレノカツドウジカンデ、アッチコッチハイカイシテクルヨ
ベンキョウ、ガンバレ
0255デフォルトの名無しさん
2006/09/29(金) 04:35:32ニートノモレガ、モマエノタメニネットハイカイシテキタヨ
/*---- 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 ----*/
0256デフォルトの名無しさん
2006/09/29(金) 06:55:14惜しいな、それを書くなら"usage"だ。失せ毛ではなく兎毛と覚えておくといいぞ。
0257デフォルトの名無しさん
2006/09/29(金) 12:00:040258デフォルトの名無しさん
2006/09/29(金) 12:35:510259デフォルトの名無しさん
2006/09/29(金) 13:41:55[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] その他の制限: 特にありません。
文系なもので、知識が不足しており困っています。どうにか助けていただけないでしょうか。
よろしくお願い致します。
0260デフォルトの名無しさん
2006/09/29(金) 13:57:19完全にスレ違い。くだ質スレにでも池
0261デフォルトの名無しさん
2006/09/29(金) 14:05:39ファイルが足りないので不可能。
0262デフォルトの名無しさん
2006/09/29(金) 14:28:15宿題に見えないから、リンクに必要なコードだけな。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2714.txt
0263デフォルトの名無しさん
2006/09/29(金) 16:53:480264(^-^) ◆MONSOON/qo
2006/09/29(金) 17:05:0050メガ超の改行区切り一行1000文字以下のテキストファイルが2つのあります
一方に存在しない行をできる限り速く抽出するプログラムを作ってください
0265デフォルトの名無しさん
2006/09/29(金) 17:06:150266デフォルトの名無しさん
2006/09/29(金) 17:13:27<?php
$diff = array_diff(file("file1.txt"), file("file2.txt"));
foreach ($diff as $line)
echo $line;
?>
0267(^-^) ◆MONSOON/qo
2006/09/29(金) 17:23:490268デフォルトの名無しさん
2006/09/29(金) 17:34:490269デフォルトの名無しさん
2006/09/29(金) 17:47:24サイテーだな。
0270デフォルトの名無しさん
2006/09/29(金) 17:57:2950M超の改行区切り一行1000文字のテキストファイルを二つ用意したらつくってやらんでもない
0271デフォルトの名無しさん
2006/09/29(金) 18:09:56#include <stdlib.h>
int main(void) { system("diff file1 file2"); return 0; }
0272デフォルトの名無しさん
2006/09/29(金) 18:57:470273デフォルトの名無しさん
2006/09/29(金) 19:05:340274デフォルトの名無しさん
2006/09/29(金) 19:23:22そんな贅沢な環境はツマラン。
フリーエリア48KB以下の環境で考えようぜ。
0275デフォルトの名無しさん
2006/09/29(金) 19:27:10ファイルシステム存在できないでFA
0276デフォルトの名無しさん
2006/09/29(金) 19:37:280277(^-^) ◆MONSOON/qo
2006/09/29(金) 19:45:190278お願いします!
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]); }
}
0279お願いします!
2006/09/29(金) 22:39:06どうもファイルのオープン書き込みなどがうまく行きません。
どなたかお願いいたします。
0280デフォルトの名無しさん
2006/09/29(金) 22:39:41>[5] その他の制限: 二重配列を使用すること
こういう必須条件は最初から書いてくれ><
0281お願いします!
2006/09/29(金) 22:43:29本当にすみません。
0282デフォルトの名無しさん
2006/09/29(金) 22:47:04二重配列って変な言葉だな。
これって規格でもこの用語を使ってんのかね。
面倒なんで自分では調べないけど。
0283デフォルトの名無しさん
2006/09/29(金) 22:49:07アレだろ、100要素くらいの配列へ生の値与えて演算してたやつだろ?
forでくくるなり別のファイルに隠蔽するなりすればいいんじゃね?
特に動かないわけでもないし、用件も満たしていたようだし。
0284デフォルトの名無しさん
2006/09/29(金) 22:54:07出したら却下って、提出したら教官に却下されたってことか?
それなら担当教官もこのスレみてるんじゃね。それと
> 二重配列を使用すること
って後付されるとすげーはらたつ。
0285デフォルトの名無しさん
2006/09/29(金) 22:55:57はやくしろよカス
0286お願いします!
2006/09/29(金) 23:01:34提出したら、、
「もっと簡単な方法あるでしょ」
ごちゃごちゃごちゃと言った後、
「二重配列使ってやってこい」
とつき返されました。。。。。。。
0287デフォルトの名無しさん
2006/09/29(金) 23:06:02なるほど。
別に、おまいが条件を書き忘れてたわけじゃなく、駄目出しの改善策として
二次元配列を使うよう指示されたわけね。
0288デフォルトの名無しさん
2006/09/29(金) 23:19:03http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2721.txt
これは三重配列(w)を使っているので、適宜二重配列に直したって
ください。どうして二重配列で作ってくれないかって?すぐ直せるから。
0289デフォルトの名無しさん
2006/09/29(金) 23:47:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2722.txt
やっぱ無責任かもしれんので、二重配列(ww)を使ったプログラムを
うpしとくから、動作を確認の上提出してみてくれ。
必ず動作の確認を行ってくれ。検証してないので。多分大丈夫だと
思うけど。
0290デフォルトの名無しさん
2006/09/29(金) 23:48:20[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言語の復習らしいのですが,
前段階の科目より難易度が大幅に上がっていてさっぱりです。よろしくお願いします
0291デフォルトの名無しさん
2006/09/29(金) 23:48:58課題が出された時の講義風景をちゃんと聞き取れる音声付きで
まるごと動画を併せてうpすることが望ましい。
講義内容の理解度を把握するための課題なんだから
そこからかけ離れてちゃダメだろう。
0292デフォルトの名無しさん
2006/09/29(金) 23:55:31> 前段階の科目より難易度が大幅に上がっていてさっぱりです。よろしくお願いします
釣りだよな?
これが出来ないって、漢字で自分の名前書けません、九九が全部言えませんってレベルだぞ?
前段階の科目ではfor文もwhile文もdo while文も扱わなかったってか?
0293290
2006/09/30(土) 00:01:37[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問目です。
0294デフォルトの名無しさん
2006/09/30(土) 00:01:55int 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);
}
0295デフォルトの名無しさん
2006/09/30(土) 00:10:340296290
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)
の部分が直していいのか全くわからないんです。
決してつりではないです。よろしくおねがいします
0297デフォルトの名無しさん
2006/09/30(土) 00:12:21> 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は良くペアで使われます。
0298お願いします!
2006/09/30(土) 00:14:39ありがとうございます!
288の3重配列は無事に動きました。
これから289を試してみます。
どうもありがとうございました!!
0299デフォルトの名無しさん
2006/09/30(土) 00:23:40#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;
}
何というのか、理解力を見たいというだけの課題なら習ってなくて分からない部分は
素直にそう申告した方がいい話しな気がするが。
0300デフォルトの名無しさん
2006/09/30(土) 00:24:230301290
2006/09/30(土) 01:02:45こんなに初歩的なことだったんですね・・・。
それでも解いてくれて本当にありがとうございました。
0302290
2006/09/30(土) 01:06:57しらべるなりなんなりしてかいていかないといけなくて・・・。
こっちを間違えると減点されてしまうんです。
ところで
void setvalue(int*, int);
の
int*
の部分は何を表しているんですか?せっかく教えていただいたのに
知識不足ですみません・・・
0303デフォルトの名無しさん
2006/09/30(土) 01:10:20int型のポインタ。
0304デフォルトの名無しさん
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;
}
どなたか、お手数をおかけしますが
どうかよろしくお願いします。
[1] 授業単元: ソフトウェア
[2] 問題文(含コード&リンク): ランジサーチング(range searching)はマウスによる
ディスプレイ操作のときに使われる基本ルーチンの一つである。
平面上で多数の点を与えられ、指定された長方形領域に含まれる点のみを出力する問題である。
二分探索法やヒープ法などによるソーティング法を利用して、
Cプログラムを作成し、実行結果を出力する。
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:Visual Studio.NET2003
[3.3] 言語:CでもC++でも可
[4] 期限:10月3日
[5] その他の制限:ソーティングと探索については高速アルゴリズムを
用いたプログラムにする。
ソーティング−クイックソート
探索−二分探索法
0306デフォルトの名無しさん
2006/10/01(日) 00:52:34何がしたいかわからん。
出された問題って、本当にこれが全文?
0307デフォルトの名無しさん
2006/10/01(日) 01:07:490308(^-^) ◆MONSOON/qo
2006/10/01(日) 01:08:57点 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)をすべて出力せよ
0309デフォルトの名無しさん
2006/10/01(日) 01:11:01換言しただけじゃないか
やっぱりまだ行間読むことは出来ないんだねMONSOON
0310デフォルトの名無しさん
2006/10/01(日) 01:19:33これならなんとか大体理解できます。
そしてまた質問なのですが
#include<stdlib.h>
はどこでつかわれているんですか?
何度も何度もすみません。
0311デフォルトの名無しさん
2006/10/01(日) 01:23:430312(^-^) ◆MONSOON/qo
2006/10/01(日) 01:30:47#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);}//長方形領域の入力
//続きをよろしく
}
0313(^-^) ◆MONSOON/qo
2006/10/01(日) 01:33:43最適化問題は興味のあるところだが...誰もやらないと速いのかどうかがわからない
http://www.msc.cs.gunma-u.ac.jp/~nakano/Algo/tech6.html
それで全文です;
ソーティングして範囲内の点を切り出すだけ
らしいですが・・・;
#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(); //時間の計測を開始
0316デフォルトの名無しさん
2006/10/01(日) 01:41:15srand((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]);
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;
}
0318デフォルトの名無しさん
2006/10/01(日) 01:42:16{
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;
}
}
0319デフォルトの名無しさん
2006/10/01(日) 01:42:36俺は降りる
高速アルゴリズムにしたら、この単純アルゴリズムの処理時間が
どうなるか
が問題みたいです;
いろいろとすいません;
0321デフォルトの名無しさん
2006/10/01(日) 01:45:28それを最初に書いてくれ><
ごめんなさい;
0323デフォルトの名無しさん
2006/10/01(日) 01:55:15もう宿題出した教官に「日本語でおk」とでも言っとけ
条件が少なすぎる
0324(^-^) ◆MONSOON/qo
2006/10/01(日) 01:58:40すべての点に対して長方形領域内にあるかどうかをチェックする方がはやいかもしれないよ
ソートするのは再利用をする目的があるためだろうし
0325デフォルトの名無しさん
2006/10/01(日) 02:12:470326デフォルトの名無しさん
2006/10/01(日) 02:23:34儂は口頭ではきちんと説明したぞ。
0327デフォルトの名無しさん
2006/10/01(日) 02:41:32いや不足ありまくり
「長方形」とか「座標」とかソースに落とすにはちと曖昧
高速化するのならバイナリサーチで全数検索するんじゃなくて、
まずはスクリーンを16×16大のタイルが敷き詰められたものとみなして、
「どのタイルに属するのか」という値を先ず作っちゃう。
長方形というか矩形領域が与えられたら、その領域を含むか未満で最大となるのタイル群を選択し、
選択されたタイル群の点を列挙すれば結構速い
と経験で語ってみる俺
まぁバケツソート使ってるわけだが…
0328(^-^) ◆MONSOON/qo
2006/10/01(日) 02:45:34ソースもてでるよ
0329デフォルトの名無しさん
2006/10/01(日) 02:51:23有名なヒキニートとかいう奴か?それともただのガキ?
ソースが出てるのがそんなに嬉しいか?
0330デフォルトの名無しさん
2006/10/01(日) 02:57:07[5] その他の制限:ソーティングと探索につゐては高速アルゴリズムを
>ソーティング−クイックソート
>探索−二分探索法
これを見る限り、点入力と探索の処理は別々で、
まぁ大体、x, yが入った配列それぞれをソートして二分検索で挟んで(ry みたいなことやれって事だろ。
見方によっちゃアルゴリズムも指定してるわけだし、そういう小細工を仕込む余地はないのでは。
0331デフォルトの名無しさん
2006/10/01(日) 03:01:18んだね
いまさら何書いても遅いけど、>>324とかにいいt(ry
うわぁ、俺もMONSOONと同類だぁwww
エヘヘ |門|λ,,....
<rem>
ああ、座標の点を表す型をTにしてtemplate使えばいいのか…
さらにいえばCのqsort()使えば(ryry
</rem>
0332デフォルトの名無しさん
2006/10/01(日) 03:20:29なるほど、そういうことですか。
これからはこんな質問しなくていいように、もっと勉強しておきます
ありがとうございました。
0333デフォルトの名無しさん
2006/10/01(日) 03:38:58> >>325
> いや不足ありまくり
> 「長方形」とか「座標」とかソースに落とすにはちと曖昧
ソース読めないのかよ
0334デフォルトの名無しさん
2006/10/01(日) 04:48:430335デフォルトの名無しさん
2006/10/01(日) 13:29:390336デフォルトの名無しさん
2006/10/01(日) 15:34:240337デフォルトの名無しさん
2006/10/01(日) 19:41:05長方形が一つだけ与えられてその中から探すのなら,
データの前のほうから包含チェックが最速.O(n).
長方形がたくさん与えられて,各入力に対して答えるのなら
データをフラクショナルカスケーディング付きの領域木に入れておく.
これで構成 O(n log n),質問 O(log n + k).ただし k は領域内の点の数.
0338デフォルトの名無しさん
2006/10/01(日) 19:46:18なんで2者択一になってんの?
情報が全部でてればコーディングするだけでいいじゃん。
そういう風に決められない部分があることこそ、情報が全部でてない証拠じゃないの?
0339デフォルトの名無しさん
2006/10/01(日) 20:11:04気に食わなければスルーしろ。
0340デフォルトの名無しさん
2006/10/01(日) 21:42:530341デフォルトの名無しさん
2006/10/01(日) 22:54:370342デフォルトの名無しさん
2006/10/02(月) 01:28:39ファイルから、変数をとり込むのはどうすればできますか?
0343デフォルトの名無しさん
2006/10/02(月) 01:29:40>>1 ついでに言うと、趣旨がさっぱり分からん
0344デフォルトの名無しさん
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);
}
0345344
2006/10/02(月) 03:26:58よろしくお願いいたします。
0346デフォルトの名無しさん
2006/10/02(月) 03:54:25誘導元で答えでてるじゃん。
0347デフォルトの名無しさん
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); の時点で発生し、正常に動作しません。
直接起動してもだめでした。
自分では原因が特定できないので、どうか対処方法を教えてください。
ソースは次の書き込みに記載します。
どうかよろしくお願いします。
0348347
2006/10/02(月) 07:47:27{
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;
}
0349347
2006/10/02(月) 07:49:15すみません、間違いがありました。
>というエラーが free(pt_c); の時点で発生し、正常に動作しません。
ではなく、
>というエラーが free(pt_i); の時点で発生し、正常に動作しません。
でした。
それでは改めてよろしくお願いします。
0350デフォルトの名無しさん
2006/10/02(月) 07:55:080351デフォルトの名無しさん
2006/10/02(月) 07:56:17pt_i = A;
0352デフォルトの名無しさん
2006/10/02(月) 08:05:17>pt_i = (int *)malloc(sizeof(int)*4);// 配列分のメモリを確保
したのに、
>pt_i = A;// 配列を確保したメモリに代入
したら、mallocした領域が漏れる。
memcpyとか使ってちゃんとコピーしないと意味なしだよ。
>free(pt_i); //ここでエラー発生
この時点で、pt_iが指す領域は、A。
解放できないのでこけている。
0353347
2006/10/02(月) 08:08:31うーん、なんだかよくわからないのですが、
*pt_iは解放する必要はないんでしょうか?
pt_i = A; で、配列Aの先頭ポインタが格納されて
free(pt_i) で結果的にpt_Aではなく配列Aを解放している?ということでしょうか?
すみません、もう少しだけ詳しく教えてもらえないでしょうか・・・。
0354347
2006/10/02(月) 08:10:24あああ、なるほど!
そういうことですか、わかりました。
修正してみます。
皆さんお答えくださって本当にありがとうございます。
助かりました!
0355デフォルトの名無しさん
2006/10/02(月) 19:22:12どうしてですか?
0356デフォルトの名無しさん
2006/10/02(月) 20:54:08ってほめてみるテスト
0357デフォルトの名無しさん
2006/10/02(月) 21:03:010358デフォルトの名無しさん
2006/10/02(月) 21:27:58ってことだ
0359デフォルトの名無しさん
2006/10/02(月) 21:33:350360デフォルトの名無しさん
2006/10/02(月) 21:40:490361デフォルトの名無しさん
2006/10/02(月) 21:52:580362デフォルトの名無しさん
2006/10/02(月) 21:54:410363デフォルトの名無しさん
2006/10/02(月) 21:57:220364デフォルトの名無しさん
2006/10/02(月) 22:02:46旧帝国大学未満
0365デフォルトの名無しさん
2006/10/02(月) 22:04:120366デフォルトの名無しさん
2006/10/02(月) 22:04:580367デフォルトの名無しさん
2006/10/02(月) 23:22:120368デフォルトの名無しさん
2006/10/02(月) 23:27:230369デフォルトの名無しさん
2006/10/02(月) 23:29:170370デフォルトの名無しさん
2006/10/02(月) 23:38:140371デフォルトの名無しさん
2006/10/03(火) 02:24:44Fランク大学なんて高校と同じ扱いだぜ?
0372デフォルトの名無しさん
2006/10/03(火) 02:30:410373デフォルトの名無しさん
2006/10/03(火) 02:30:540374デフォルトの名無しさん
2006/10/03(火) 02:37:460375デフォルトの名無しさん
2006/10/03(火) 02:43:510376デフォルトの名無しさん
2006/10/03(火) 03:16:04興味もなくついていく努力もする気ないんなら、最初っから講義とるなよ。
0377デフォルトの名無しさん
2006/10/03(火) 05:42:34専門をバカにするなよ、いつもの彼?
0378 ◆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
0379デフォルトの名無しさん
2006/10/03(火) 07:49:46問題は誤解がないよう丸写し推奨なんだぜ
0380デフォルトの名無しさん
2006/10/03(火) 07:50:180381デフォルトの名無しさん
2006/10/03(火) 08:14:29[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] 配列、クラス、ポインタなどは習っていません。
簡潔な方法がうまく思いつきません。
ヒントだけでもいいのでお願いします。
0382 ◆8zHol6NAOo
2006/10/03(火) 08:30:375行です。
0383デフォルトの名無しさん
2006/10/03(火) 08:34:22遅いけど。
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);
}
0384デフォルトの名無しさん
2006/10/03(火) 08:48:44k-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];
}
0385デフォルトの名無しさん
2006/10/03(火) 09:11:17http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2727.c
0386デフォルトの名無しさん
2006/10/03(火) 16:21:27[2] 問題文(含コード&リンク): 整数を入力し、1の位から順に表示するプログラム
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語: c
[4] 期限: 明日[5] その他の制限:ナシ
0387デフォルトの名無しさん
2006/10/03(火) 18:30:27char ln[256];
int n;
gets(ln); n = strlen(ln);
while(0 <= --n) printf("[%c]\n", ln[n]);
}
0388デフォルトの名無しさん
2006/10/03(火) 18:52:56数字を入力させて適当に100まで表示させようかと思っていた自分に絶望した
0389デフォルトの名無しさん
2006/10/03(火) 20:26:44[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まで
0390389
2006/10/03(火) 20:34:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2728.txt
これを利用して下さい。
0391デフォルトの名無しさん
2006/10/03(火) 20:41:11/* ヒストグラム作成用変数 hist[] の初期化
埋めてね */
/***************************************************************/
は
for(i=0;i<DMAX;hist[i++]=0);
/***************************************************************/
/* 乱数を引いて, 結果に応じて hist[] を更新
埋めてね */
/**************************************************************/
は
hist[(int)(6*get_uniform_random())]++;
かと
0392デフォルトの名無しさん
2006/10/03(火) 20:52:10ありがとうございます。
このfor(i=0;i<DMAX;hist[i++]=0);
{
}
の範囲を教えてほしいのですが・・・
0393デフォルトの名無しさん
2006/10/03(火) 20:57:29とりあえず書いてみて、動かしてみてよ
話はそれからじゃ
0394デフォルトの名無しさん
2006/10/03(火) 21:02:31デバックしたらdとrがつかわれてませんと出て
実行結果は
サンプルの個数?
6
シード?
203098
6 0.000000 0.166667 0.333333 0.166667 0.000000 0.333333 Press any key to continu
e
でした
0395デフォルトの名無しさん
2006/10/03(火) 21:06:46ということでコンパイルできたから、文法上は問題ないことが保証されたわけですね
正解と微妙に数値は違いますが、アプローチは大体OKのはずです
もし暇があれば、
> このfor(i=0;i<DMAX;hist[i++]=0);
> {
> }
> の範囲を教えてほしいのですが・・・
これに対して、今のプログラムの見比べて納得できる回答を考えてみてください。
0396デフォルトの名無しさん
2006/10/03(火) 21:07:31標準関数にそんなのあったかと思ってググったら、こんなの見つけた。
ttp://www.a.math.ryukoku.ac.jp/~hig/course/compsci_2002/21/src/dbgtest1.c
0397デフォルトの名無しさん
2006/10/03(火) 21:08:250398デフォルトの名無しさん
2006/10/04(水) 00:21:29[2] 問題文(含コード&リンク):要素数3の1次元配列を用いて3次元ベクトルを表すこととする。
このとき、3次元ベクトルa[3]とb[3]の内積を求めて表示するプログラム
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語: c
[4] 期限: 明日[5] その他の制限:ナシ
0399デフォルトの名無しさん
2006/10/04(水) 00:26:500400デフォルトの名無しさん
2006/10/04(水) 00:30:00int 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);
0401デフォルトの名無しさん
2006/10/04(水) 00:31:080402デフォルトの名無しさん
2006/10/04(水) 00:47:070403デフォルトの名無しさん
2006/10/04(水) 00:48:51>>1
0404デフォルトの名無しさん
2006/10/04(水) 10:26:58[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
よろしくお願いします。
0405デフォルトの名無しさん
2006/10/04(水) 11:43:14どうでもいいけどワードファイルって作成者の名前も保存されてるんだよね。
まぁ偽名だろうけど。
0406デフォルトの名無しさん
2006/10/04(水) 12:02:21すげーこわくてひらけねーです
0407デフォルトの名無しさん
2006/10/04(水) 12:07:480408デフォルトの名無しさん
2006/10/04(水) 12:11:20● int型の変数にキーボードから正の整数を入力し、
unsigned short型の変数に代入してから16進数で表示
する。さらに、上位バイトと下位バイトを反転し、結果を16
進数と10進数で表示するプログラムを作成しましょう。
● 印刷したソースコードと自分の学籍番号下4桁で試した結
果を記入して提出しましょう。
● プロジェクト名:03byte ファイル名:03byte.c
0409デフォルトの名無しさん
2006/10/04(水) 13:10:13int
0410デフォルトの名無しさん
2006/10/04(水) 13:11:13[2] 問題文(含コード&リンク):
�@本の名前と値段を格納する構造体BookDataを定義し、標準入力から構造体に値を読み込む関数
readBookと構造体の値を表示する関数showBookを作成して、それを利用して5冊分のデータ入力を
おこない、vその結果を表示するプログラムを作成せよ。
�A関数の『引数として構造体を使用する際、1構造体そのものを引数とる場合 2構造体のポインタを
引数にとる場合で本質的にどのような違いがあるか、メモリ上で引数の構造体及び仮引数の構造体
がどのように確保されているかという観点に基づいて説明せよ
[3] 環境
[3.1] OS: Linux
[3.2] gcc 3.4)
[3.3] C++
[4] 期限: 明日
[5] その他の制限: 構造体習いました。なるべく簡単なプログラムでお願いします。
0411デフォルトの名無しさん
2006/10/04(水) 13:39:02自分で絞殺しろ。
0412デフォルトの名無しさん
2006/10/04(水) 13:56:16[2] 問題文(含コード&リンク)
fscanfを使わないで指定されたデータファイルから
データを読み込みデータ件数、最大データ長、最大値、最小値
を出力するプログラム:
[3.1] UNIX
3.3]C
[4] 来週の火曜日
[5] break文continue文fscanf
です。お願いします
0413デフォルトの名無しさん
2006/10/04(水) 14:03:23[5]により、fscanfを使わなければならないんだな?
0414デフォルトの名無しさん
2006/10/04(水) 14:05:500415412
2006/10/04(水) 14:38:24しかし制限でfscanfを使わないでやれとのことです
0416デフォルトの名無しさん
2006/10/04(水) 15:17:590417414
2006/10/04(水) 15:28:11ダイジョウブです
0418デフォルトの名無しさん
2006/10/04(水) 15:33:10データファイルの書式ぐらいかけやぼけ
0419412
2006/10/04(水) 15:56:12ごめんなさいわからなくて
0420デフォルトの名無しさん
2006/10/04(水) 16:02:03それを上げちまえばいいんだぜ
0421412
2006/10/04(水) 16:05:24ただ問題が書いてあるプリントをもらっただけですので
0422デフォルトの名無しさん
2006/10/04(水) 16:09:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2732.txt
0423デフォルトの名無しさん
2006/10/04(水) 16:14:280424412
2006/10/04(水) 16:18:14数字が並んでるデータなんですけど
数字の中にアルファベットが含んであるとデータ件数に含まれないです
数字は小数点も含まれています
0425デフォルトの名無しさん
2006/10/04(水) 18:44:37[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
これを元に減算プログラムを作るのですが・・・わかりません・・・
よろしくお願いします。
0426425
2006/10/04(水) 18:46:11http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2733.txt
のプログラムは、VC2005で作りました。
0427デフォルトの名無しさん
2006/10/04(水) 18:55:210428デフォルトの名無しさん
2006/10/04(水) 19:46:54減算を加算でやってみれば?
たとえば
A - B = A + (-B)
てのと
-B = (B xor (-1)) + 1
をつかえばAとBから
A - B ができるきがするけどホントかどうかは知らないんだから!
0429デフォルトの名無しさん
2006/10/04(水) 20:06:45#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;
}
0430404
2006/10/04(水) 21:39:04http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2735.txt
どうかよろしくお願いします。
zipは消させていただきました(^^;;
0431デフォルトの名無しさん
2006/10/04(水) 22:47:51[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
0432デフォルトの名無しさん
2006/10/05(木) 06:23:460433デフォルトの名無しさん
2006/10/05(木) 08:24:50[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] その他の制限:
お願いします
0434デフォルトの名無しさん
2006/10/05(木) 10:28:55[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
0435デフォルトの名無しさん
2006/10/05(木) 12:16:03http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2738.txt
タブが残ってた(´・ω・`)
0436デフォルトの名無しさん
2006/10/05(木) 17:24:23http://pc8.2ch.net/test/read.cgi/tech/1149349035/264-265
こちらをお願いします
0437デフォルトの名無しさん
2006/10/05(木) 22:08:41ある関数の中でchar型のバッファをcallocで作ったのですが、
このバッファをreturnしなければならないんですけど
freeはどうやってやるのでしょうか?returnの前にfreeしたら意味ないし、
returnのあとに記述しても遂行しないしどうすればいいのかわかりません。
0438デフォルトの名無しさん
2006/10/05(木) 22:47:43char *buf;
buf = calloc(SIZE, sizeof(char));
return buf;
}
int main(void){
char *p;
p = foo();
/* なんか処理 */
free(p);
return 0;
}
0439デフォルトの名無しさん
2006/10/05(木) 23:29:21あ(・∀・)り(・∀・)が(・∀・)と(・∀・)う!ございます!
0440437
2006/10/06(金) 00:22:17なるほど、呼び出し側のpをfreeするとbufもfreeされるということですね。何で気づかなっかたんだろ。
ひとつ勉強させていただきました。ありがとうございます。
0441デフォルトの名無しさん
2006/10/06(金) 00:30:34いいえ、その理解は間違っています。
スレ違いなので詳細は割愛。
0442437
2006/10/06(金) 00:54:24pを開放することでbufを開放できると理解したのですが・・・
0443デフォルトの名無しさん
2006/10/06(金) 01:05:06つ 誘導
じゃあわざわざpなんて定義して使わないで、bufを直接使えばいいだろ?
0444 ◆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] その他の制限: ありません
つい最近習い始めたばかりの初心者です。
宜しくお願いします。
0445デフォルトの名無しさん
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);
}
たぶん
0446デフォルトの名無しさん
2006/10/06(金) 01:49:21[2] 再帰(int factorial)を用いて nCrを導けるプログラムを作れ
nCr = n!/r!*(n-r)! int combination(int n, int r)と置く
よろしくお願いします
0447(^-^) ◆MONSOON/qo
2006/10/06(金) 01:56:45nCr = n-1Cr + n-1Cr-1じゃなかった?
0448デフォルトの名無しさん
2006/10/06(金) 02:08:17nCr=n-1Cr + ・・・の漸化式じゃなくて、n! = n * (n-1)!の漸化式の方で再帰しろ、
と問題文で指定しているのではないのか?
なぜそんな問題にしたのかはわからんが。
0449デフォルトの名無しさん
2006/10/06(金) 02:21:47こんなんでいいのかな?
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));
}
0450デフォルトの名無しさん
2006/10/06(金) 12:43:25[1] C言語
[2] 問題文
http://www.uploda.org/uporg538701.txt
0451デフォルトの名無しさん
2006/10/06(金) 12:51:36factorialは用いるんじゃなくて参考かよ!
まあそっちのほうが自然だけどさ。
0452デフォルトの名無しさん
2006/10/06(金) 13:00:030453デフォルトの名無しさん
2006/10/06(金) 13:30:300454デフォルトの名無しさん
2006/10/06(金) 13:41:56int factorial(int n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
この?って何だ?
0455デフォルトの名無しさん
2006/10/06(金) 13:44:54しなければifで書くしかないよな
0456デフォルトの名無しさん
2006/10/06(金) 13:52:43まあいいや。とりあえず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; /* ←こっちの方が高速 */
}
0457デフォルトの名無しさん
2006/10/06(金) 14:24:38する。
0458デフォルトの名無しさん
2006/10/06(金) 14:43:50int 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 の部分をどう変えればいいのか分かりません
お願いします
0459デフォルトの名無しさん
2006/10/06(金) 14:45:02その前に何のために変えたいのかわからん
0460デフォルトの名無しさん
2006/10/06(金) 15:48:540461デフォルトの名無しさん
2006/10/06(金) 16:01:210462デフォルトの名無しさん
2006/10/06(金) 19:33:110463デフォルトの名無しさん
2006/10/06(金) 20:42:55[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] その他の制限:無し
0464デフォルトの名無しさん
2006/10/06(金) 21:45:29#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;
}
0466デフォルトの名無しさん
2006/10/06(金) 22:36:010467至福
2006/10/07(土) 00:40:25Rabin法を用いた1億以下の素数の高速判定アルゴリズムが欲しいです
C言語でお願いします
0468デフォルトの名無しさん
2006/10/07(土) 01:49:28テンプレみて出直せ。
まぁ出直してきたところでこたえる気はないがな!!
0469デフォルトの名無しさん
2006/10/07(土) 02:00:590470デフォルトの名無しさん
2006/10/07(土) 02:35:29[2] 問題文
UNIXのcatコマンドと同等機能のmycatコマンドを作成せよ
という課題で
mycat file | mycat >file2
の | 機能をどう実現すればよいのか…悩んでいます
宜しくお願いします
[3] 環境
[3.1] OS: UNIX
[3.2] 言語:C 言語
[4] 期限:4日後
[5] その他の制限:無し
0471デフォルトの名無しさん
2006/10/07(土) 03:55:40パイプはシェルさんが担ってる機能であって、catやもちろんmycatは一切関与しない
0472デフォルトの名無しさん
2006/10/07(土) 17:39:09実行結果
誕生年を入力してください
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
期限 来週水曜日
よろしくおねがいします
0473デフォルトの名無しさん
2006/10/07(土) 17:48:06>>1読んで書き直し
0474デフォルトの名無しさん
2006/10/07(土) 20:50:22t[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]);}
0475 ◆t7E0r9geLg
2006/10/07(土) 21:21:55[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] その他の制限: なし
よろしくお願いします
0476デフォルトの名無しさん
2006/10/07(土) 21:29:300477デフォルトの名無しさん
2006/10/07(土) 22:36:55[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] その他の制限: ポインタを使う
お願いします
0478デフォルトの名無しさん
2006/10/07(土) 22:44:50main(){
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);
}
}
0479 ◆t7E0r9geLg
2006/10/08(日) 00:24:18問題文間違ってました('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 ;
}
宜しくお願いします
0480デフォルトの名無しさん
2006/10/08(日) 00:26:480481デフォルトの名無しさん
2006/10/08(日) 02:44:11[2] 問題文(含コード&リンク):
eのx乗を計算するプログラムを作成せよ。
[3] 環境
[3.1] LINUX
[3.2] gccc
[3.3] どちらでも可
[4] 期限: 10/10(火)
よろしくお願いします
0482デフォルトの名無しさん
2006/10/08(日) 02:55:28#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;
}
0483デフォルトの名無しさん
2006/10/08(日) 03:00:09eってのは自然対数の底じゃないのかい
0484デフォルトの名無しさん
2006/10/08(日) 03:44:43#include <stdio.h>
#include <math.h>
int main()
{
double x;
scanf("%lf",&x);
printf("%e",exp(x));
return 0;
}
これでいいのか?
マクローリン展開とかを使ってexp()を自作しろって課題なんかな。
0485デフォルトの名無しさん
2006/10/08(日) 03:47:45文句は言えないな。
0486481
2006/10/08(日) 03:50:58そみません。
テーラー展開を使ってexp()です。
0487デフォルトの名無しさん
2006/10/08(日) 03:52:150488デフォルトの名無しさん
2006/10/08(日) 03:55:47次の方どうぞー?
0489デフォルトの名無しさん
2006/10/08(日) 05:49:09かなり手抜きだが。
テーラー展開した式を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;
}
0491デフォルトの名無しさん
2006/10/08(日) 09:21:09doubleの精度なら10項でも多すぎるくらいではあるまいか。
0492デフォルトの名無しさん
2006/10/08(日) 09:35:24letter文字目のみも表示しないといけないんですが、お願いできますか?
0493デフォルトの名無しさん
2006/10/08(日) 09:42:40#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);
}
}
0494デフォルトの名無しさん
2006/10/08(日) 09:52:49あと以降についてなんですが、Mondayの1文字目以降だったらMは入らないんですかね?
0495デフォルトの名無しさん
2006/10/08(日) 09:54:46Mを入れるなら0文字以降と指定するべし。
0496デフォルトの名無しさん
2006/10/08(日) 10:03:58日本語的な意味ではどうなんですか?
0497デフォルトの名無しさん
2006/10/08(日) 10:05:41不満があるなら、大した修正じゃないんだし、自分で直せば良いんじゃないかな?
0498デフォルトの名無しさん
2006/10/08(日) 10:07:20何が言いたいか分からん。
Mondayの0文字目はMで、0文字目以降はMondayだろ?
「a以降」にa自体が含まれるのが普通の日本語の解釈だと思うが。
それとも、MondayのMは1文字目として考えろ、ということ?
0499デフォルトの名無しさん
2006/10/08(日) 10:10:50配列の添え字では0から始まるから、そういう風なんだと思いますが、
日本語では0文字目とは言わないので・・・・
a以降にはaが含まれるんですね。わかりました。
dname[day]+letter-1って風に修正します
0500デフォルトの名無しさん
2006/10/08(日) 10:12:35いちおう指摘しておくと、元の問題文では曜日を0番目〜6番目で指定させている。
0501デフォルトの名無しさん
2006/10/08(日) 10:17:53文章的「以降」なら対象は含まないな
そういうことでしょ?
問題文には0から始まるという仕様が書かれているから日本語的に正しいかどうかで
回答を曲げるのは違うと思うんだが
0502デフォルトの名無しさん
2006/10/08(日) 10:21:000503デフォルトの名無しさん
2006/10/08(日) 10:39:15わかりました。
0504デフォルトの名無しさん
2006/10/08(日) 10:49:49[2] 問題文(含コード&リンク): コンパイラのオプションで警告メッセージが最も詳しくでるように設定する
[3] 環境
[3.1] OS: WindowsXp
[3.2] コンパイラ名とバージョン: BorlandC++Builder 5
[3.3] 言語: C++
[4] 期限: 無期限
[5] その他の制限: 特に無し
コマンドプロンプトから bcc32 -Ox と入力してみたのですが、ファイル名が指定されていないといわれます。
ここから手詰まりに……スレ違いとは分かっていますが、ボスケテ。
0505デフォルトの名無しさん
2006/10/08(日) 11:36:10[2] 問題文(含コード&リンク): 下のデータをエディタで入力してテキストファイルを作成
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 10月11日水曜日まで
[5] その他の制限: 特に無し
0506505
2006/10/08(日) 11:40:4817 奥田 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分探索法により検索するプログラムを作れ
0507デフォルトの名無しさん
2006/10/08(日) 11:42:38数字が全角と半角が混ざってるのがネックだなw
0508デフォルトの名無しさん
2006/10/08(日) 11:43:260509505
2006/10/08(日) 11:43:38全角でお願いします
説明不足ですいません・・・
0510デフォルトの名無しさん
2006/10/08(日) 11:44:27>505を読む限り、>506の全てがデータなのだろうからそれをファイルにすればいいんでね?
0511デフォルトの名無しさん
2006/10/08(日) 11:47:32ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2751.txt
0512デフォルトの名無しさん
2006/10/08(日) 12:39:09ちょっとだけおもしろかった。ちょっとだけな。
0513デフォルトの名無しさん
2006/10/08(日) 13:47:11エディタで入力してテキストファイルを作成
したら
そのテキストファイルに対して処理をしろっつーことでいいのかもしれない
「[2] 問題文」のテンプレに本来の問題文>>506の先頭一行だけをindex的に入れちゃったのかなと
0514デフォルトの名無しさん
2006/10/08(日) 14:58:310515デフォルトの名無しさん
2006/10/08(日) 15:05:46KSコード?
0516デフォルトの名無しさん
2006/10/08(日) 17:15:16[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
途中まで作ったこのプログラムに訂正を加えていただくとうれしいです
0517デフォルトの名無しさん
2006/10/08(日) 18:00:58区切り文字も全角スペース?
0518デフォルトの名無しさん
2006/10/08(日) 18:13:14構造体つかって>>506を全部読み込ませて
パースまでさせようっていう魂胆だな
きっとこういう構造体なんじゃないか?
N(02) //番号
N(01) //スペース
N(04) //名前
N(01) //スペース
N(02) //月
N(01) //補助単位("月")
N(02) //日
N(01) //補助単位("日")
COBOLで書いちゃったけど意味は通じると思う
ソートのことを考えると1レコードずつメモリを動的に確保するのが正解だろう
0519デフォルトの名無しさん
2006/10/08(日) 18:38:12[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]なし
よろしくお願いします。
0520デフォルトの名無しさん
2006/10/08(日) 18:42:27入力する文字列は必ず5個でいいの?
入力するのはアルファベットだけ?
0521デフォルトの名無しさん
2006/10/08(日) 18:44:20つhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2753.txt
0522デフォルトの名無しさん
2006/10/08(日) 18:49:50#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;
}
0523505
2006/10/08(日) 18:54:15全角でお願いします
0524デフォルトの名無しさん
2006/10/08(日) 19:00:070526デフォルトの名無しさん
2006/10/08(日) 20:00:37[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の画像を得られるようにすること。
0527デフォルトの名無しさん
2006/10/08(日) 20:23:510528デフォルトの名無しさん
2006/10/08(日) 20:43:43[2]整数iの平方根を挟み撃ち法により求めるプログラムを作成し、1〜30までの平方根を求めよ。
[3]
[3.1] OS:LINUX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4]10月12日まで
[5]なし
よろしくお願いします。
0529デフォルトの名無しさん
2006/10/08(日) 20:55:06実数で求めるのか?
0530デフォルトの名無しさん
2006/10/08(日) 21:07:140531デフォルトの名無しさん
2006/10/08(日) 21:14:39実数でお願いします。
0532デフォルトの名無しさん
2006/10/08(日) 21:18:280534デフォルトの名無しさん
2006/10/08(日) 21:45:51double 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;
}
0535デフォルトの名無しさん
2006/10/08(日) 21:50:07#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;
}
0536デフォルトの名無しさん
2006/10/08(日) 23:26:50#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));
}
0537デフォルトの名無しさん
2006/10/08(日) 23:27:33int 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]);
}
}
}
0538デフォルトの名無しさん
2006/10/08(日) 23:28:04//ファイル出力
fp=fopen(FILENAME_OUT, "w");
if (fp==NULL)
{
printf("出力ファイルが開けません\n");
return 1;
}
fwrite(&birthday, sizeof(birthday[0]), 10, fp);
fclose(fp);
return 0;
}
0539デフォルトの名無しさん
2006/10/09(月) 00:24:532の誕生日順ソート
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2758.txt
構造体のchar crlf[1];ってchar crlf[2];が正しいはず(CRとLFで2Byteあるので)
と思って変更してみたらうまくいかない……、なぜ?
0540デフォルトの名無しさん
2006/10/09(月) 00:28:27なんでやねん
メモリ内では常に\nだけだぞ。
WindowsのCOOKED MODEに騙されてるな。
0541デフォルトの名無しさん
2006/10/09(月) 00:29:25テキストモードで開いている限り、fread()で読もうがfgetc()で読もうが、改行コードは'\n'だ。
0542デフォルトの名無しさん
2006/10/09(月) 00:30:44別にそれが保障されているわけではない。
環境による。
0543デフォルトの名無しさん
2006/10/09(月) 00:35:36テキストモードが存在するなら、保証されているだろ?
普通のOSなら、テキストモードなんてやくざなものそのものがないが。
0544デフォルトの名無しさん
2006/10/09(月) 04:43:060545デフォルトの名無しさん
2006/10/09(月) 10:16:31無知は黙ってろ
0546デフォルトの名無しさん
2006/10/09(月) 11:10:42申し訳ありませんでした。
0547デフォルトの名無しさん
2006/10/09(月) 12:06:31C/C++規格にはtext/binaryモードの区別があるけれども
0548デフォルトの名無しさん
2006/10/09(月) 12:10:420549デフォルトの名無しさん
2006/10/09(月) 12:11:25たとえば>>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;
}
こんな風でも使ったことになるのでしょうか?変な質問ですみません
0550デフォルトの名無しさん
2006/10/09(月) 12:18:560551デフォルトの名無しさん
2006/10/09(月) 12:33:24#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);
}
0552デフォルトの名無しさん
2006/10/09(月) 13:06:07C++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 の区別が書いてあるよ
0553デフォルトの名無しさん
2006/10/09(月) 13:22:55二人プレイだと開始直後になくなっちゃうよな
0554526
2006/10/09(月) 15:15:20ロダのファイルは消しておきました。もし考えてくれた人がいたら申し訳ないですが・・・。
0555デフォルトの名無しさん
2006/10/09(月) 18:55:17[2] 問題文(含コード&リンク): 名前をローマ字で入力し、その名前に含まれる母音の数を出力せよ
例 hiroyuki nishimura 8
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 10月11日水曜日まで
[5] その他の制限: なし
0556デフォルトの名無しさん
2006/10/09(月) 19:01:18# 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;
}
0557555
2006/10/09(月) 19:06:26ありがとうございます。
こんな簡単そうな問題で質問ですいません・・・
0558デフォルトの名無しさん
2006/10/09(月) 19:10:04#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;
}
0559デフォルトの名無しさん
2006/10/09(月) 19:13:22それだとO(n^2)になって重いな
if(p[i]=='\0')break;
にしとけばO(n)で抑えられる。
0560デフォルトの名無しさん
2006/10/09(月) 19:14:55なるほど。
0561デフォルトの名無しさん
2006/10/09(月) 19:24:440562デフォルトの名無しさん
2006/10/09(月) 19:27:380563デフォルトの名無しさん
2006/10/09(月) 19:28:40strcspnは普通に実装すればO(n)だと思うが。
0564デフォルトの名無しさん
2006/10/09(月) 19:31:500565デフォルトの名無しさん
2006/10/09(月) 19:35:060566デフォルトの名無しさん
2006/10/09(月) 19:37:470567デフォルトの名無しさん
2006/10/09(月) 19:42:19それをはっきりと書かないのがO記法というもの。
0568デフォルトの名無しさん
2006/10/09(月) 20:16:180569デフォルトの名無しさん
2006/10/09(月) 20:20:460570デフォルトの名無しさん
2006/10/09(月) 20:39:00#ってのは誰のネタだったかなぁ……
0571デフォルトの名無しさん
2006/10/09(月) 21:10:42O記法はこういうのを無視するってばっちゃが言ってた
0572デフォルトの名無しさん
2006/10/09(月) 21:20:22int 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;
}
0573デフォルトの名無しさん
2006/10/09(月) 21:57:260574デフォルトの名無しさん
2006/10/09(月) 22:05:360575デフォルトの名無しさん
2006/10/10(火) 03:59:430576デフォルトの名無しさん
2006/10/10(火) 04:57:08問題は最後のページ(15)で、そこまでは授業内容です。
できることなら授業の内容に沿うようにお願いします。
0577デフォルトの名無しさん
2006/10/10(火) 06:14:07通常課題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);
}
0578デフォルトの名無しさん
2006/10/10(火) 06:15:09応用課題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;
}
0579デフォルトの名無しさん
2006/10/10(火) 11:42:20わけあってC++でプログラミングをしなければならなくなった者です。
プログラミングの完全なる初心者で、参考書の最初のほうの初歩レベルでストップしてます。
…こんなプログラムを作りたいんだけどどうしたら良いですか?
みたいな質問も受け付けてくれますか?
0580デフォルトの名無しさん
2006/10/10(火) 11:45:24受付ません。
「ど素人の俺をC++ハッカーに育てるスレ」とか立てたほうがよろし。
0581デフォルトの名無しさん
2006/10/10(火) 12:15:21そういう質問は大抵ウザがられるので、もっと具体性を絞って質問した方が良い。
0582デフォルトの名無しさん
2006/10/10(火) 12:32:41マルチうざい
0583デフォルトの名無しさん
2006/10/10(火) 12:50:380584デフォルトの名無しさん
2006/10/10(火) 12:53:15http://pc8.2ch.net/test/read.cgi/tech/1150105712/933
0585デフォルトの名無しさん
2006/10/10(火) 14:23:20[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] その他の制限: 特になし
よろしくお願いいたします。
0586デフォルトの名無しさん
2006/10/10(火) 14:26:18書き忘れましたが、もしお時間がありましたら
nCr = n-1Cr-1 + n-1Cr (ただし nC0 = nCn =1、nC1 =n )
が成り立つ数学的説明もお願い申し上げます。
0587デフォルトの名無しさん
2006/10/10(火) 14:45:56↓課題のページです
ttp://www.ipc.shizuoka.ac.jp/~x2006047/exam/exam01.htm
0588デフォルトの名無しさん
2006/10/10(火) 15:08:11int 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;
}
}
0589デフォルトの名無しさん
2006/10/10(火) 15:10:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2759.c
0590デフォルトの名無しさん
2006/10/10(火) 15:40:12ここは数学板じゃないよ
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
0591デフォルトの名無しさん
2006/10/10(火) 15:41:34n-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
0592デフォルトの名無しさん
2006/10/10(火) 16:22:34n個の候補から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に等しくなる。
0593585
2006/10/10(火) 16:45:09>>590
>>591
>>592
回答ありがとうございます
お手数ですが、追加でもう1個お願いします
この問題(>>585)を再帰関数を使って書くとどうなりますか?
あと簡単な説明もお願いします
よろしくお願いします
0594デフォルトの名無しさん
2006/10/10(火) 16:48:26リア厨なのですかこれはどのようにすればいいのですか?
0595デフォルトの名無しさん
2006/10/10(火) 16:49:10ミスった気にしないでください
0596デフォルトの名無しさん
2006/10/10(火) 16:51:11>>588
このソースほど簡単な説明は無い。
0597デフォルトの名無しさん
2006/10/10(火) 17:14:50[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>
どなたかお願いします。
0598よろしくお願いします
2006/10/10(火) 17:15:48[2] 問題文(含コード&リンク):複利計算で元金が10年で2倍になる年利率を求めよ(Newton法を使って)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006年10月11日13:00まで
[5] その他の制限:ニュートン法を使って求めなくてはいけない。
0599デフォルトの名無しさん
2006/10/10(火) 17:29:46この関数を使うと
5C3と入れた時はいいですが、3C5と入れた時におかしな数字になってしまいます
あと一つ質問なのですが
何故else ifを使ったのでしょうか?(なぜelseではいけないんですか?elseに書き換えたらコンパイルするときにエラーになりました)
0600デフォルトの名無しさん
2006/10/10(火) 17:30:19>#include <ctime>
>#include <iomanip>
嫌がらせとしか思えないな。
0601デフォルトの名無しさん
2006/10/10(火) 17:56:413C5の場合どうなればいいのさ?
0602デフォルトの名無しさん
2006/10/10(火) 17:56:44複利計算なんかに縁がないのであってるかは知らんが
#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;
}
0603588
2006/10/10(火) 17:59:18>>5C3と入れた時はいいですが、3C5と入れた時におかしな数字になってしまいます
そりゃなるだろうよ。
2項係数をnCrと表すとして
条件は0 <= r <= n
だかんな。
だから、不満があれば、それに条件不一致の時のreturn文も書きなはれ。
>>あと一つ質問なのですが
>>何故else ifを使ったのでしょうか?(なぜelseではいけないんですか?elseに書き換えたらコンパイルするときにエラーになりました)
C言語を勉強しよう。
0604デフォルトの名無しさん
2006/10/10(火) 18:17:25ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2760.txt
0605デフォルトの名無しさん
2006/10/10(火) 18:23:260606デフォルトの名無しさん
2006/10/10(火) 18:34:17でも、それだとコンピュータがすごく弱いぞ
0607デフォルトの名無しさん
2006/10/10(火) 18:34:51仕様だからしょうがない。
0608デフォルトの名無しさん
2006/10/10(火) 18:36:20なるほど。
>>597
修正
int dice(void)
{
int a[3] = {1,2,6};
return a[(rand() % 3)];
}
0609デフォルトの名無しさん
2006/10/10(火) 18:43:09問題文:キーボードから誕生年を入力して、年齢(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
0610デフォルトの名無しさん
2006/10/10(火) 18:54:030611デフォルトの名無しさん
2006/10/10(火) 18:55:310612デフォルトの名無しさん
2006/10/10(火) 19:00:300613597
2006/10/10(火) 19:01:33言葉が足りませんでした。
1なら1点、2なら2点、3なら3点、4なら4点、5なら5点、6なら6点入ります。
簡潔に書いたつもりだったんですが、書き忘れていたことがありました…
ダイスを振る前にコイントスで順番を決める、ダイスは一度に二回振る、
プレイヤー(プレイヤーだけに適用ルール)の振ったダイスが両方1なら今まで加算した全ての点を失う、というものです。
問題文を全て載せなかったことを反省しています…なにせ英語なので自分で和訳して載せるしかなくて…
>>604さん、もしよかったらもう一度お願いできませんか?
0614デフォルトの名無しさん
2006/10/10(火) 19:10:23#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;
}
0615よろしくお願いします
2006/10/10(火) 19:17:45ありがとう。
できれば複利計算でのニュートン法の使用法について解説つけてくれると
ありがたいです。
0616デフォルトの名無しさん
2006/10/10(火) 19:23:22ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2761.txt
dice関数間違えたままだった。
int dice(void)
{
return (rand() % 6) + 1;
}
0617デフォルトの名無しさん
2006/10/10(火) 19:27:19ググれよ
0619デフォルトの名無しさん
2006/10/10(火) 19:36:56金額 = 原価*(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の初期値を与えてニュートン法を適用する。
0621デフォルトの名無しさん
2006/10/10(火) 19:43:30固定観念は捨てなさい。
2chには良い人も悪い人も居る。
0622よろしくお願いします
2006/10/10(火) 20:30:07ありがとう。
0623585
2006/10/10(火) 20:39:42自己解決しました。ありがとうございました。
>>588
else if(n==r || r==0){
っていうのは削っても正常に実行できましたが、ここでは
何を行っているのでしょうか??
>>C言語を勉強しよう。
ifを使うときは
if→eise if →else の順に使って
2つの時は if→else と使っていたのですが
これでは、どこが違いますか??
教えてください。よろしくお願いいたします。
0624デフォルトの名無しさん
2006/10/10(火) 21:32:26if(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が含まれている時
}
0625デフォルトの名無しさん
2006/10/10(火) 21:47:58[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] 期限: 明日の朝
よろしくお願いします。
0626デフォルトの名無しさん
2006/10/10(火) 21:59:36#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;
}
0627625
2006/10/10(火) 23:26:49ありがとうございます。
助かりました。
0628デフォルトの名無しさん
2006/10/11(水) 00:06:02マルチかよ。
0629デフォルトの名無しさん
2006/10/11(水) 11:19:53[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日
0630デフォルトの名無しさん
2006/10/11(水) 11:55:29マルチ
0631デフォルトの名無しさん
2006/10/11(水) 12:16:52#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;
}
0632デフォルトの名無しさん
2006/10/11(水) 12:18:26×char i[2];
○char i[3];
0633デフォルトの名無しさん
2006/10/11(水) 13:35:18教えられてもいないポインタや関数を多用していると怪しまれたりする?
0634デフォルトの名無しさん
2006/10/11(水) 14:21:04適当に起動させて動いたら○付けて次の生徒。
0635デフォルトの名無しさん
2006/10/11(水) 14:51:330636デフォルトの名無しさん
2006/10/11(水) 14:56:050637デフォルトの名無しさん
2006/10/11(水) 14:57:24これってもしかして「プロジェクトごとupしてください」って言うんじゃないだろうな・・・
0638デフォルトの名無しさん
2006/10/11(水) 15:07:19いま、そういうのを普通化の高校で教えてるんじゃなかったっけ?
選択科目だと思うけど。
0639デフォルトの名無しさん
2006/10/11(水) 17:12:33電脳のやつやったな、、高校で。
//暫くやってC++に変更になっちゃったけどw
0640デフォルトの名無しさん
2006/10/11(水) 17:38:28少なくとも俺はしっかりと見てるよ.
まあ一言一句同じコードが飛んできたりするから気にはしない.
俺は課題程度を自力で解けない人は,そういうのが得意な友人を探すほうが
重要だと思ってるから,写したコードであっても評価を減らしたりはしていない.
0641デフォルトの名無しさん
2006/10/11(水) 17:52:15教官様でつか?
0642デフォルトの名無しさん
2006/10/11(水) 18:08:520643デフォルトの名無しさん
2006/10/11(水) 18:39:07TAって?た・・・?
0644デフォルトの名無しさん
2006/10/11(水) 18:44:53[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
0645デフォルトの名無しさん
2006/10/11(水) 18:45:36ティーチングアシスタント
0646デフォルトの名無しさん
2006/10/11(水) 19:03:07#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;/* 必ず何か返す */
}
0647デフォルトの名無しさん
2006/10/11(水) 19:07:12#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;/* 必ず何か返す */
}
0648デフォルトの名無しさん
2006/10/11(水) 19:10:55普通、分散は√を取らない。
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
0649デフォルトの名無しさん
2006/10/11(水) 19:20:21カッコ悪いけど・・・
#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;/* 必ず何か返す */
}
0650デフォルトの名無しさん
2006/10/11(水) 19:21:460651デフォルトの名無しさん
2006/10/11(水) 19:24:54#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はじめて半月の俺にはこれが限界だった…
0652デフォルトの名無しさん
2006/10/11(水) 19:54:10今回のなら for (i = 100; i > 0; i /= 10) { ... } としたほうが分かりやすいんじゃないかな。
0653デフォルトの名無しさん
2006/10/11(水) 20:02:190655631
2006/10/11(水) 20:44:11だから俺ってニートなのかなぁ・・・。
0656デフォルトの名無しさん
2006/10/12(木) 01:40:33うん、間違いないね(はあと
0657デフォルトの名無しさん
2006/10/12(木) 01:43:290658デフォルトの名無しさん
2006/10/12(木) 05:53:39[2]
問2-1:ある文字列を逆順に出力するプログラムを作成せよ。
問2-2:問2-1で作成したプログラムを、str2を動的メモリ割付に変更せよ。
問2-3:二つの文字列が与えられたとする。
一方のテキスト文字列に含まれるもう一方の照合文字列の開始位置を求めるプログラムを作成せよ。
長さxの文字列中の位置は、0,1、・・・、x−1と数えるようにする。
[3]Linux gcc3.4
[4]本日中
[5]配列・ポインタ・構造体の基礎まで習っています
0659デフォルトの名無しさん
2006/10/12(木) 06:44:092-2: 動的割り当てって最初に malloc するだけでいい? relloc も必要?
2-3: アルゴリズムの指定は?複数照合文字列があった場合は?照合しない場合は?
0660658
2006/10/12(木) 07:08:392-1は改行までです
2-2はmallocだけです
2-3は特に指定は無かったと思います
複数照合される場合は最初のものだけかかればいいです
照合しない場合はそのまま終了で・・・
よろしくお願いします
0661デフォルトの名無しさん
2006/10/12(木) 07:21:012-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;
}
0662デフォルトの名無しさん
2006/10/12(木) 07:35:56#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;
}
>そういうのが得意な友人を探すほうが重要
(´A`)…
野球のトライアウトでソロバン能力を評価するようなもんか。
0664デフォルトの名無しさん
2006/10/12(木) 17:48:50基本的に作文と同じで人が書き上げたコードには筆跡が残る。
だから見ようと意識しなくても自然に見える。
実際に、コピペで済ませたり、他人に丸投げした奴は呼び出されて厳重注意を受けてる。
うちでは必修で出席者の点呼を取るんだが、懲りずにコピペした連中は名前呼ばれずに自動的に欠席扱いにされてた。
0665デフォルトの名無しさん
2006/10/12(木) 18:05:500666デフォルトの名無しさん
2006/10/12(木) 18:11:020667デフォルトの名無しさん
2006/10/12(木) 18:13:440668デフォルトの名無しさん
2006/10/12(木) 21:22:18[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();
};
0669668
2006/10/12(木) 21:23:34{
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();
};
0670668
2006/10/12(木) 21:25:24cout<<"社名"<<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;
}
0671668
2006/10/12(木) 21:26:43main.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] その他の制限:長いので分割させていただきました。全部つながっています。みにくくて申し訳ありません。
0672デフォルトの名無しさん
2006/10/12(木) 21:28:31using namespace std;
0673デフォルトの名無しさん
2006/10/12(木) 21:29:17using namespace std;
が足りないんじゃないかとよく読まずに書いてみる
0674668
2006/10/12(木) 21:39:54VCを学校で使っていたので基本を忘れてました。本当にありがとうございます!
0675デフォルトの名無しさん
2006/10/12(木) 21:46:41#include <string>
じゃなくて
#include <cstring>
の方が適切じゃないかと書いてみる
0677>>675ではないが。
2006/10/12(木) 22:10:051. <string>はstd::stringを使うためにincludeするものであり、提示されたコード
では使われていない。よって#include <string>は必要ない。
2. <cstring>は<string.h>をstd名前空間に入れたもので、いわゆる「レガシーCの
文字列」(char*を利用した文字列)を操作するための関数が宣言されている。
3. 2.と、提示されたコードにおいてレガシーCの文字列関連の関数(strcpy)が
使われていることから、#include <cstring>とせねばならない。
4. 1.〜3.より、本来は、提示されたコードはstrcpyを使用する部分でコンパイル
エラーになるのがコンパイラの正しい挙動である。
0678デフォルトの名無しさん
2006/10/12(木) 22:16:56> エラーになるのがコンパイラの正しい挙動である。
標準ヘッダは適宜ほかの標準ヘッダをincludeしても良いんじゃなかったか。
0679デフォルトの名無しさん
2006/10/12(木) 22:25:100680デフォルトの名無しさん
2006/10/12(木) 22:32:59たまたま動くだけ、ってこと
0681デフォルトの名無しさん
2006/10/12(木) 22:39:130683デフォルトの名無しさん
2006/10/13(金) 02:31:28[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2764.txt
[3] 環境
[3.1] OS: (WindowsXP-SP2)
[3.3] 言語: (C++)
こんなんで俺、卒業できるのかなぁ・・・
0684デフォルトの名無しさん
2006/10/13(金) 02:59:27#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;
}
}
0685デフォルトの名無しさん
2006/10/13(金) 03:35:42#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;
}
0686デフォルトの名無しさん
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;
}
0687デフォルトの名無しさん
2006/10/13(金) 04:05:27#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;
}
0688デフォルトの名無しさん
2006/10/13(金) 04:40:36if文を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;
}
0689デフォルトの名無しさん
2006/10/13(金) 10:17:59退学すりゃいいじゃん。
高等教育は義務教育と違って卒業出来ることは前提になってない。
ついていけない者は去る。これがあたりまえ。
0690デフォルトの名無しさん
2006/10/13(金) 10:26:54[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に組み込む前までのところでお願いします。
0691デフォルトの名無しさん
2006/10/13(金) 10:52:54授業受けてる人にしか伝わらない雰囲気をたった一言で言われてもなぁ
0692690
2006/10/13(金) 10:57:29そうですね。失礼しました。
この次にGUIに組み込んで地図を画面上に表示させる予定だそうで、
実際に画面上で表示させるのはまだいいという意味です。
まずはプログラムとして動かせということです。
0693ニャー
2006/10/13(金) 12:22:50[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] その他の制限:なし
久しぶりですけど、お願いします!
0694デフォルトの名無しさん
2006/10/13(金) 12:30:09int型なのに返却値は無いの?
0695デフォルトの名無しさん
2006/10/13(金) 12:55:10int *を二つとる関数と言うことでしょ。どっかで同じ問題見た気がするし。
0696ニャー
2006/10/13(金) 12:55:48すみません
void change( int& , int& ) を使えということらしいです。
どうかよろしくお願いします。
0697デフォルトの名無しさん
2006/10/13(金) 13:10:59ググレばいろんなとこに解説載ってるから
この程度のことは自分で調べろや。
0698デフォルトの名無しさん
2006/10/13(金) 13:12:23#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;
}
0699698
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;
}
0700デフォルトの名無しさん
2006/10/13(金) 13:17:11fuck you
0701デフォルトの名無しさん
2006/10/13(金) 13:19:42なにこのばか。
0702デフォルトの名無しさん
2006/10/13(金) 13:20:58fuck you!!!!!
どうだ、これで満足か?
0703デフォルトの名無しさん
2006/10/13(金) 13:22:210704デフォルトの名無しさん
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;
}
0705デフォルトの名無しさん
2006/10/13(金) 13:58:250706わん
2006/10/13(金) 16:59:06#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;
}
0707デフォルトの名無しさん
2006/10/13(金) 17:09:41>>698==>>706
0708デフォルトの名無しさん
2006/10/13(金) 19:54:27↓
#include <iostream>
using namespace std;
0709デフォルトの名無しさん
2006/10/13(金) 20:10:07[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] その他の制限: なし
0710デフォルトの名無しさん
2006/10/13(金) 20:25:22[2] 問題文(含コード&リンク):2つの整数を入力すると相加平均と相乗平均を実数で表示し、戻り値として2つの
値の差を返す関数avg()を作成
(2つの値の差は絶対値を求めるabs()関数を使う)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: c言語
[4] 期限: 無期限
[5] その他の制限: なし
0711709
2006/10/13(金) 20:40:30ちょっと訂正です
0712デフォルトの名無しさん
2006/10/13(金) 20:45:03#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;
}
0713デフォルトの名無しさん
2006/10/13(金) 20:49:03#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;
}
0715デフォルトの名無しさん
2006/10/13(金) 22:18:03[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]その他の制限:
よろしくおねがいします。
0717デフォルトの名無しさん
2006/10/13(金) 22:27:541. の部分っているの?
2. の部分
ans=1;
for(i=0;i<y;i++)
ans*=x;
以上
void main(void) → int main(void)
0718デフォルトの名無しさん
2006/10/13(金) 22:35:242 の部分:
for (ans = 1; y > 0; y >>= 1) {
if (y & 1) ans *= x;
x *= x;
}
計算量は O(log n)。
0719715
2006/10/13(金) 22:41:20>>718
ありがとうございます、しかし問題文が穴埋めになっていて�@と�Aを考えるようになっているので
�@もつかわないといけないんです。�@を使う考え方も教えてください。
0720 ◆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] その他の制限: 特になし
グラフがわからず、とても困ってます。どうかおねがいします。
0721デフォルトの名無しさん
2006/10/13(金) 22:45:081. {
0722デフォルトの名無しさん
2006/10/13(金) 22:49:58GUI 作るのがかったるいな
0723質問
2006/10/13(金) 22:59:18[2]
名前と国語、算数、英語の点数をメンバに持つ構造体studentを
宣言し、テキストファイル"meibo.txt"から10名分のデータを読み込み画面に表示せよ。
また、3教科の平均点を返す関数を作成せよ。ただし、関数の引数は構造体への
ポインタとし、関数内では->演算子を用いること・・・・
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:10/14朝まで
[5] その他の制限: 特にないと思います。
0724質問続き
2006/10/13(金) 23:00:04typedef struct {
charname[20];
doublekokugo;
doublesansu;
doubleeigo;
doublehei;
} student;
void ave(student *std)
{
std->hei=(std->kokugo+std->sansu+std->eigo)/3;
}
0725質問続き
2006/10/13(金) 23:00:43{
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);
}
一応ここまでできたのですが、
無駄がないかをチェックください。お願いします。
0727デフォルトの名無しさん
2006/10/13(金) 23:03:09http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2772.txt
�Aの出力ファイルを使うのか�Aのソートの後に検索するのか
わからんかったんで、ソート後に検索するようにした。
0728デフォルトの名無しさん
2006/10/13(金) 23:09:41無限ループ対策有り?
到達不能チェック有り?
GUIの部分は問題無しってことでおk?
0730デフォルトの名無しさん
2006/10/13(金) 23:35:520731デフォルトの名無しさん
2006/10/13(金) 23:45:030732デフォルトの名無しさん
2006/10/13(金) 23:52:19�@ans=1
�Afor(i=1;i<=y;i++)
ans*=x;
こうしたら出来たんですけど、ans*=x;というのはどういう処理をしているんでしょうか?
0733デフォルトの名無しさん
2006/10/14(土) 00:00:210734デフォルトの名無しさん
2006/10/14(土) 00:00:53#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"},
};
0735デフォルトの名無しさん
2006/10/14(土) 00:01:25double 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));
}
0736デフォルトの名無しさん
2006/10/14(土) 00:02:00int 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;
}
0737デフォルトの名無しさん
2006/10/14(土) 00:06:43#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;
0738723
2006/10/14(土) 00:15:06ありがとうございます。
非常に恐縮なのですが、
723-725のプログラム(C++なのかもしれない・・・)
の余分な部分が無いかチェックしてほしかったのです。(宣言とか)
言葉足らず&間違えてすみません。
0739デフォルトの名無しさん
2006/10/14(土) 00:26:33不要な行 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 つけてコンパイルすればある程度分かる
0740デフォルトの名無しさん
2006/10/14(土) 00:28:01[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]その他の制限:
関数はよくわからなくて困っているのでよろしくおねがいします。
解説も書けたら書いてくださるとありがたいです。
0742デフォルトの名無しさん
2006/10/14(土) 00:43:150743デフォルトの名無しさん
2006/10/14(土) 00:44:43void main(void)
って誰がそんな事を教えてるの?
ANSI準拠なら main の返り値は int で
K&R方式なら main() でないと…
ってオレの方が間違ってる?
0744デフォルトの名無しさん
2006/10/14(土) 00:46:00FAQ
0745デフォルトの名無しさん
2006/10/14(土) 00:46:47*q=m*m*m;
または >>742
0746デフォルトの名無しさん
2006/10/14(土) 00:49:030747デフォルトの名無しさん
2006/10/14(土) 00:50:13ハァ?
0748デフォルトの名無しさん
2006/10/14(土) 02:07:45[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]その他の制限:
よろしくおねがいします
0749デフォルトの名無しさん
2006/10/14(土) 02:40:36�@
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)とかいう呼び出しが気味悪くて仕方が無い。
ポインタの学習用の課題だからそうなってるんだろうけど。
0750デフォルトの名無しさん
2006/10/14(土) 03:20:010751720 ◆HYwgg5QUFo
2006/10/14(土) 03:36:51>無限ループ対策有り?
>到達不能チェック有り?
>GUIの部分は問題無しってことでおk?
無限ループ、到達不能チェックはなくてもいいと思います。
0753デフォルトの名無しさん
2006/10/14(土) 13:49:05ありがとうございます。そしてすいません、�Bはkeisan(n,&wa)の間違いでした。
その場合はどうなるか教えてください。
よろしくおねがいします。
0754デフォルトの名無しさん
2006/10/14(土) 14:20:59[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);
}
自分なりにやってみたのですがエラーがでます、どこがいけないのでしょうか?
0755デフォルトの名無しさん
2006/10/14(土) 14:22:43(1),(2)のみでGUI無し
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2774.lzh
0756scanf()のフォーマットが違う
2006/10/14(土) 14:36:13>どこがいけないのでしょうか?
エラーの内容も書けないあんたの頭。
0757デフォルトの名無しさん
2006/10/14(土) 14:37:38#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; ←正常終了
}
0758寧ろ変数の型と%dが間違っている方に一票。つーか、色々ダメすぎw
2006/10/14(土) 14:38:03同意。
0759デフォルトの名無しさん
2006/10/14(土) 14:40:38>>1 くらい読め
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
0760デフォルトの名無しさん
2006/10/14(土) 14:52:45d:\c言語\b\b.c(5) : warning C4716: 'keisan' : 値を返さなければいけません
エラーではないのですがワーニングが出てきます。
それで底辺を入力した後高さが入力できません。
0761デフォルトの名無しさん
2006/10/14(土) 14:55:01>>757 の通り
0762浮いてしまった>>756、>>758乙
2006/10/14(土) 15:15:05>>760
ここは宿題丸投げスレだから、>>757見て事が足りなければ初心者スレにでもどうぞ。
0763749
2006/10/14(土) 15:54:12その場合keisanの戻り値は普通voidじゃないか?
*p = a*(a+1)*(2*a+1)/6;
もし戻り値もあるなら
*p = a*(a+1)*(2*a+1)/6;
return *p;
0764デフォルトの名無しさん
2006/10/14(土) 16:07:20[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' : 関数ではありません。
それと不成立の場合のやり方もわかりません。
おねがいします。
0765デフォルトの名無しさん
2006/10/14(土) 16:10:38return *p=sqrt(g*(g-x)*(g-y)*(g-z));
だとおも
0766デフォルトの名無しさん
2006/10/14(土) 16:11:30g=(x+y+z)/2;
0767デフォルトの名無しさん
2006/10/14(土) 16:16:38[2] 問題文(含コード&リンク): キーボードから文字列を読み込んで、読み込んだ文字列を逆にした文字列を表示するプログラムを作成せよ。
例)papa→apap,level→level
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VisualStudio2003
[3.3] 言語: C
[4] 期限:2006年10月16日午前10時まで
[5] その他の制限:よろしくお願いします。
0768デフォルトの名無しさん
2006/10/14(土) 16:20:03不成立のチェックはあってるかどうか自信がない
これは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);
}
0769デフォルトの名無しさん
2006/10/14(土) 16:31:41#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;
}
0770デフォルトの名無しさん
2006/10/14(土) 16:37:300771デフォルトの名無しさん
2006/10/14(土) 16:43:09辺の長さが正の数かどうかのチェックも必要かも
あと、三角形じゃないなら面積は求まらないと思われ
0772デフォルトの名無しさん
2006/10/14(土) 17:46:19for文を使うんですか?
0773デフォルトの名無しさん
2006/10/14(土) 17:52:10BOOL 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);
0774デフォルトの名無しさん
2006/10/14(土) 17:54:20すいません BOOL checkというのは習ってないのでfor文が使いたいのですが
無理ですか?
0775デフォルトの名無しさん
2006/10/14(土) 17:54:590776デフォルトの名無しさん
2006/10/14(土) 17:57:11禿同。ここまで的外れだと釣りだと思うが、
マジで言ってることもあるのが宿題スレなんだよな。
0777デフォルトの名無しさん
2006/10/14(土) 17:58:430778デフォルトの名無しさん
2006/10/14(土) 18:00:16いい加減関数の使い方を覚えられない阿呆を構うのやめろや。
0779デフォルトの名無しさん
2006/10/14(土) 18:09:17#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;
}
0780デフォルトの名無しさん
2006/10/14(土) 18:28:300781デフォルトの名無しさん
2006/10/14(土) 18:33:25int main(void){
printf("ぐだぐだ言わんでさっさとちゃんと動くプログラムよこせや。\n");
return 0;
}
0782デフォルトの名無しさん
2006/10/14(土) 18:34:57せっかく初心者にもわかるようにコメント入りで解いてたのに晒す気無くなったよ
俺の30分を返せ
0783デフォルトの名無しさん
2006/10/14(土) 18:40:06どの問題?
>>720 の解答なら >>720 じゃないけど興味ある
他だったら別にあってもなくてもいいや
0784デフォルトの名無しさん
2006/10/14(土) 19:22:220785デフォルトの名無しさん
2006/10/14(土) 20:33:48API叩きでいいならできないこともないが・・・・やっぱやりたくないな
0786デフォルトの名無しさん
2006/10/14(土) 20:44:290787デフォルトの名無しさん
2006/10/14(土) 21:17:510788デフォルトの名無しさん
2006/10/14(土) 21:28:24俺、フリーソフト作って公開してるけど、C言語でGUI部分を書いてる。
特別なライブラリを使わずにWindowsAPIの呼び出しやメッセージのやり取りだけで。
小規模なものならそんなに猛者ってこたないだろ。
0789デフォルトの名無しさん
2006/10/14(土) 21:36:01荒らしと疑われることなくここでソースを公開できる程度に小規模なら
0790デフォルトの名無しさん
2006/10/14(土) 21:37:100791デフォルトの名無しさん
2006/10/14(土) 21:44:02[2] 問題文(含コード&リンク): 大文字のAからZまでを表示するプログラムを作成せよ。ただし文字定数および文字配列を使ってはいけない(文字コードは使用可)
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VisualStudio.net2003
[3.3] 言語: c言語
[4] 期限: 10月17日
[5] その他の制限: よろしくお願いします。
0792デフォルトの名無しさん
2006/10/14(土) 21:55:12#include <stdio.h>
int main()
{
int i;
for(i=0;i<128;i++)fputc(i,stdout);
return 0;
}
0793デフォルトの名無しさん
2006/10/14(土) 21:55:55#include <stdio.h>
int main()
{
int i;
for(i = 65; i<=90; i++ )
printf("%c", i);
return 0;
}
0794788 ◆3.JjF77I26
2006/10/14(土) 22:05:07小規模っていっても3000行くらいある。
GUI部分だけで言えば700行かそこら。
>>790
既に公開しているものなのでURLだけ貼っとく。
http://saito.s4.xrea.com/software/wci098.zip
0795デフォルトの名無しさん
2006/10/14(土) 22:12:50>>793
ありがとうございます。
0796デフォルトの名無しさん
2006/10/14(土) 22:16:083000程度なら規模云々のレベルではない
サンプルコードだよ
0797デフォルトの名無しさん
2006/10/14(土) 22:19:25?
サンプルコードならMSDN見ればいいんでない?
0798デフォルトの名無しさん
2006/10/14(土) 23:34:180799デフォルトの名無しさん
2006/10/14(土) 23:39:53http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2775.cpp
投稿者の希望はかなり無視してしまったが,とりあえず書いた.
Windows プログラミングなんて本当に久々だから筋が悪いけど,
弁解事項:
1. C++ です.STL 使ってます.
2. GUI は SDK を直叩きしました.手抜きです.
3. 設計せずに書いたので無駄だらけです.
4. きちんとデバッグしてません.
0800デフォルトの名無しさん
2006/10/14(土) 23:44:21いまさら・・・
この程度なら5分でかけよ
0801720 ◆HYwgg5QUFo
2006/10/15(日) 00:00:49Cプログラムでと書いてあるのでC++でもいいのかな・・・。
C++はわからないので何が無駄かさえわかりませんが。。。
わがまま言うなら、C言語がいいです・・・申し訳。。。
0802デフォルトの名無しさん
2006/10/15(日) 02:23:21[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]その他の制限:
よろしくおねがいします。
0803デフォルトの名無しさん
2006/10/15(日) 02:33:56??
順位って?
点数って?
実行例を表現するプログラム書けばいいの?
つ
#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; }
0804デフォルトの名無しさん
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
それで実行例を表示するんではなくて、配列の中にある数字を点数の高い順に並べるということです。
0805デフォルトの名無しさん
2006/10/15(日) 02:41:130806デフォルトの名無しさん
2006/10/15(日) 03:13:38void 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]);
}
こんな感じで作ってみたんですけど、エラーは出ないけどソートどころかうまく値が入りません
どうすればいいんでしょうか?
0807デフォルトの名無しさん
2006/10/15(日) 03:39:29ソート部分が意味わかんねえ・・・
>>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];
0808デフォルトの名無しさん
2006/10/15(日) 03:49:48常識的に考えて。
0809デフォルトの名無しさん
2006/10/15(日) 03:53:40代入の方向とか、{ }の付け方とかがグダグダ過ぎ
#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]);
}
0810デフォルトの名無しさん
2006/10/15(日) 03:56:25if (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;
}
0811デフォルトの名無しさん
2006/10/15(日) 05:34:01要するに一次元配列をバブルソートしろってことでいいんだよね?
0812デフォルトの名無しさん
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;
}
0813デフォルトの名無しさん
2006/10/15(日) 17:23:13漏れ、依頼者じゃないけど、凄くGUIプログラミングの参考になりました。熱烈多謝
0814デフォルトの名無しさん
2006/10/15(日) 17:50:45InvalidateRect なんて知らなかったよ。
この知識を使うことは無いだろうけど…
0815デフォルトの名無しさん
2006/10/15(日) 18:14:55[2] 問題文(含コード&リンク):キーボードから文字列を読み込んで、読み込んだ文字列が逆から読んでも同じ(回文のようなもの)文字列かどうかを判定するプログラムを作成せよ。
(例) papa→no, level→yes
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VisualStudio2003
[3.3] 言語: C
[4] 期限: 2006年10月18日
[5] その他の制限: よろしくお願いします。
0816デフォルトの名無しさん
2006/10/15(日) 18:16:560817デフォルトの名無しさん
2006/10/15(日) 18:22:29#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;
}
0818デフォルトの名無しさん
2006/10/15(日) 21:24:40[2] 問題文:三角形の面積を求める関数fa(), fb()を作成しその値を
比較するプログラムを作成しなさい.
[3] 環境
[3.1] OS:Linux
[3.2]gcc
[3.3] 言語: c
[4] 期限: 明日
[5] その他の制限: なし。
0819デフォルトの名無しさん
2006/10/15(日) 21:33:54#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;
}
0820デフォルトの名無しさん
2006/10/15(日) 21:34:30三角形の面積を2つの方法で求めてその2つの方法で得た面積を比較するってこと?
どのような方法で求めるのか具体的なことが全く書かれていないし
どんな方法で求めてもいいってことだとしても、どのような情報が与えられているのか(辺の長さとか角度とか)が全くわからない
0821デフォルトの名無しさん
2006/10/15(日) 21:51:26俺も同じこと書こうとしてた
0822デフォルトの名無しさん
2006/10/15(日) 21:55:46> 関数fa(), fb()
なんだよその関数名は。
そんな仕様書が出てきたらキレていいぞ。
0823名無しさん
2006/10/15(日) 22:05:405個の整数値をキーボードにより入力してその合計を求めるプログラムを
つくる。
そして、その問題において、キーボードより入力した値をつくっておいた
ファイルinput.datよりファイル入力するようにして、ディスプレイに表示
していた値をout.datというファイルに出力する。
こんな問題なんですけれど・・・・・
0824デフォルトの名無しさん
2006/10/15(日) 22:08:21>>1 の質問テンプレ
0825デフォルトの名無しさん
2006/10/15(日) 22:08:320826名無しさん
2006/10/15(日) 22:21:57[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]その他制限:なし
0827デフォルトの名無しさん
2006/10/15(日) 22:24:46つ リダイレクト
0828名無しさん
2006/10/15(日) 22:34:160829デフォルトの名無しさん
2006/10/15(日) 22:34:54問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");
}
0831デフォルトの名無しさん
2006/10/15(日) 22:38:58氏ね
0832名無しさん
2006/10/15(日) 22:39:000833デフォルトの名無しさん
2006/10/15(日) 22:57:20#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;
}
0834名無しさん
2006/10/15(日) 22:59:500835デフォルトの名無しさん
2006/10/15(日) 23:01:15どなたさま?>>826?
0836デフォルトの名無しさん
2006/10/16(月) 00:38:52http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2776.txt
>>799のより機能少ないし癖のあるGUIだけどCで書いたので勘弁して。
グラフを扱うプログラムはろくに書いたことがないんで勉強になった。
0837デフォルトの名無しさん
2006/10/16(月) 01:29:25[2]キーボードから整数 m と n (ただし m≤n) を入力し, m 以上 n 以下の整数のうち 3 で割り切れるものの和を求めるプログラムを作成せよ.
[3]wndowsとgcc
[4]2006年10月17日
[5]while文習ったばっかりです
よろしくです
0838デフォルトの名無しさん
2006/10/16(月) 01:29:430839デフォルトの名無しさん
2006/10/16(月) 01:40:49どうでした、午後2?
0840デフォルトの名無しさん
2006/10/16(月) 01:41:16午後�Uは楽勝でしたよ。
午前がやばい。
0841デフォルトの名無しさん
2006/10/16(月) 01:42:51おまいら、昨日ソフ開試験受けてきた俺様が帰ってきましたよ
駄目だったよ...orz...やけ酒飲んでたらこんな時間になってしまったよ、チキショー
0842デフォルトの名無しさん
2006/10/16(月) 01:44:01いいな・・・('A`)
0843デフォルトの名無しさん
2006/10/16(月) 01:46:06どっちやねん…(・ω・)
俺もなんていうか午後�Uで地獄へ落ちたよ。
悔しいので調べたら・・調べてもわからんかったorz
0844デフォルトの名無しさん
2006/10/16(月) 01:49:43http://pc8.2ch.net/test/read.cgi/prog/1142866538/l50
こんなとこでやってる喪前ら、落ちたな、半年後ガンバレ
0845720 ◆HYwgg5QUFo
2006/10/16(月) 02:26:00ありがとうございました。とても助かりました。
GUIがんばって理解してみます。
一つ、atan2:DOMAIN error の原因が分からないのですが、なぜでしょか?
0846デフォルトの名無しさん
2006/10/16(月) 02:39:52int 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);
}
0847お願いします
2006/10/16(月) 06:04:24[2] 問題文(含コード&リンク): 7並べ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: C++
[4] 期限:今月中
[5] その他の制限:COM3人と対戦 パスは3回まで ジョーカーあり 勝敗判定を行う
0848デフォルトの名無しさん
2006/10/16(月) 09:40:110849デフォルトの名無しさん
2006/10/16(月) 16:43:25(゚∀゚)人(゚∀゚)ナカーマ
0850デフォルトの名無しさん
2006/10/16(月) 18:25:28スレチ乙
0851デフォルトの名無しさん
2006/10/16(月) 18:50:510852デフォルトの名無しさん
2006/10/16(月) 19:14:070853デフォルトの名無しさん
2006/10/16(月) 19:24:520854デフォルトの名無しさん
2006/10/16(月) 20:24:03ありがとうです
0855デフォルトの名無しさん
2006/10/16(月) 21:02:06ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2783.txt
行き当たりばったりで書いたから酷い。
STL使ってるけどいいよね・・?
0856デフォルトの名無しさん
2006/10/16(月) 21:16:24[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日(木)
0857デフォルトの名無しさん
2006/10/16(月) 23:19:49さらに何か取るつもりらしいのが・・ショボンヌ。。
0858デフォルトの名無しさん
2006/10/16(月) 23:54:54[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] その他の制限: なし
何卒何卒、よろしくお願いいたします。
お忙しいところ、読んでくださってありがとうございました。
0859デフォルトの名無しさん
2006/10/17(火) 00:00:35遅レスで悪いのだが、
> return *py-*px;
この技はchar以外では使えん。オーバーフローする。
解ってて書いたならごめん。
0860デフォルトの名無しさん
2006/10/17(火) 00:16:48>任意のsample.c をコンパイルし
という意味がわからない。作業ディレクトリにある sample.c に対して
bcc32 sample.c を実行してやればいいのかな?
0861デフォルトの名無しさん
2006/10/17(火) 00:28:57既に答えは出ているが、せっかく書いたので晒してみる。Cだけど。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2784.c
0862861
2006/10/17(火) 00:42:420863デフォルトの名無しさん
2006/10/17(火) 01:08:24新しく型作るのかな
0864デフォルトの名無しさん
2006/10/17(火) 01:27:35作業ディレクトリにあるc++のsampleソースコードに対して、
borlandc++builderのF9を実行したいです。
書き方がおかしくてすみません、書き込みありがとうございます。
0865デフォルトの名無しさん
2006/10/17(火) 01:34:22今私は、
フォームからコマンドプロンプトを呼び出し、
引数としてコマンドラインを渡し、
コンパイル実行、コンパイルの成功と失敗を判定し、
失敗した場合エラーメッセージの取得と表示をしたい
と書いているのですが、エラーばかりで
実行ファイルにもなりません。
0866デフォルトの名無しさん
2006/10/17(火) 01:36:17「BCBで F9 を押したときと同じような処理」だよね?
それとも,実際に BCB に対して F9 コマンドを飛ばすの?
ところでそれ本当に宿題?問題文は正確?
0867デフォルトの名無しさん
2006/10/17(火) 01:41:39宿題です、問題は口頭でしたので、私の言語力で正確に再生できているか
不安です。
ご迷惑をおかけし、すみません。
応答ありがとうございます。
0868デフォルトの名無しさん
2006/10/17(火) 02:16:32867は、>866へのレスです。
0869デフォルトの名無しさん
2006/10/17(火) 02:49:22[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] その他の制限: なし
この宿題で、どうやってプログラムをつくればいいかずっと悩んで
困ってるんですが、(プログラミング初心者なんで・・)できれば
教えていただきたいのですが・・。お願いします。
0870デフォルトの名無しさん
2006/10/17(火) 02:59:060871デフォルトの名無しさん
2006/10/17(火) 03:11:550872デフォルトの名無しさん
2006/10/17(火) 04:46:570873デフォルトの名無しさん
2006/10/17(火) 05:30:170874デフォルトの名無しさん
2006/10/17(火) 05:42:12そのコンパイラでクロスコンパイルできる?
ライブラリは?
等々って、おい!
0875デフォルトの名無しさん
2006/10/17(火) 06:59:580876デフォルトの名無しさん
2006/10/17(火) 07:59:47はい
0877デフォルトの名無しさん
2006/10/17(火) 09:10:00どっかの専門学校で使ってるんかな?
0878デフォルトの名無しさん
2006/10/17(火) 10:43:380879デフォルトの名無しさん
2006/10/17(火) 10:51:21専門学校生だけは、ここの解答を元に勉強してると思いたい
0880デフォルトの名無しさん
2006/10/17(火) 11:13:35学生の8割以上は想像力不足で、自分が今一番すべき事を想像できず、目の前の事にしか気が回らないバカなのです。
まともな学生は2割以下でしょう。
0881デフォルトの名無しさん
2006/10/17(火) 12:56:55ゆとり教育をしてきた学生にこの言葉を自覚させたい
0882デフォルトの名無しさん
2006/10/17(火) 13:05:08自分は先の2割だと思ってる罠。
0883デフォルトの名無しさん
2006/10/17(火) 13:13:230884デフォルトの名無しさん
2006/10/17(火) 13:33:480885デフォルトの名無しさん
2006/10/17(火) 13:41:520886デフォルトの名無しさん
2006/10/17(火) 13:49:410887デフォルトの名無しさん
2006/10/17(火) 13:58:04>技術を身に付けるのが目的なのか単位を取るのが目的なのか
技術を身につけてITドカタ(PG)になる? ITドカタになるのは止めた方が良いぞ
学生はITドカタの現実を知らんからPGになりたいと思う香具師いるかもしれんが
>>881
>ゆとり教育をしてきた学生
こっちの表現ほうが、"ゆとり教育をさせられてきた学生(大人たちに)"、よくね?
0888デフォルトの名無しさん
2006/10/17(火) 14:06:000889デフォルトの名無しさん
2006/10/17(火) 15:17:59わかった人いないの
0890デフォルトの名無しさん
2006/10/17(火) 16:44:37単にめんどくさいからやらない。
0891デフォルトの名無しさん
2006/10/17(火) 17:09:42勿論にちゃんではない。
0892デフォルトの名無しさん
2006/10/17(火) 18:14:530893近似値
2006/10/17(火) 18:44:47[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] その他の制限:特にありません
0894近似値
2006/10/17(火) 18:51:19#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項目まで計算に使われた。]
となってしまいます。これはエラーが改善されれば直るのでしょうか?
長文で申し訳ないのですが、よろしくお願いいたします。
0895デフォルトの名無しさん
2006/10/17(火) 18:52:000896デフォルトの名無しさん
2006/10/17(火) 18:52:410897デフォルトの名無しさん
2006/10/17(火) 19:26:27これ中学生の時にやったなぁ
ふふふ・・・
0898デフォルトの名無しさん
2006/10/17(火) 19:54:110899デフォルトの名無しさん
2006/10/17(火) 20:07:53[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日(木)
0900デフォルトの名無しさん
2006/10/17(火) 20:13:50正直問題が理解できない俺はどうすれば。
0901デフォルトの名無しさん
2006/10/17(火) 20:49:58int 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;
}
試してないけど、多分こう。
0902901
2006/10/17(火) 20:52:38-for( n = 1 ; ; n++ ) {
+for( n = 0 ; ; n++ ) {
-if( n & 1 ) pi += Sn;
+if( !(n & 1)) pi += Sn;
0903デフォルトの名無しさん
2006/10/17(火) 20:56:12#include <stdio.h>
main(){
float hoge;
scanf("%f", &hoge);
printf("%f", hoge);
}
入力フォーマットとやらはscanfの%fが条件を満たしてる気がするが
floatでもdoubleでも仮数部のサイズが合わないんだよなあ・・・
0904デフォルトの名無しさん
2006/10/17(火) 21:23:35kinji をループ内で計算する意味が分からん。
それと問題文があいまいだから仕方ないんだが、
π の小数点以下5桁の精度を確保するという風に出題者の意図を類推すると、
0.00001 と比較するのはソース中 Sn ではなく Sn * 4 になるのでは。
0905デフォルトの名無しさん
2006/10/17(火) 21:40:35[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] その他の制限: 上記にある通り
0906デフォルトの名無しさん
2006/10/17(火) 22:41:10[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] その他の制限: 特にないです
お願いします
0907デフォルトの名無しさん
2006/10/17(火) 22:41:15要するに小数を浮動小数点型で2進数表示にする
0908デフォルトの名無しさん
2006/10/17(火) 22:55:32ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2788.txt
こんなかんじかな
>>907
なるほど。そういってくれるとわかりやすい。
0909近似値
2006/10/17(火) 23:37:29#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項目まで計算に使われた。]
と表示されます。ほかに改良すべき点はございませんか?
0910デフォルトの名無しさん
2006/10/17(火) 23:53:33aを0で初期化したらwhileの条件のa>0.00001が満たせなくなるぞ
0911デフォルトの名無しさん
2006/10/18(水) 00:19:000912デフォルトの名無しさん
2006/10/18(水) 00:29:33処理系依存
0913デフォルトの名無しさん
2006/10/18(水) 00:34:45そもそも小数点位置が固定でないから、小数第何位までOKとかいう概念は適合しない。
http://ja.wikipedia.org/wiki/IEEE754
0914デフォルトの名無しさん
2006/10/18(水) 00:36:390915911
2006/10/18(水) 00:44:200916デフォルトの名無しさん
2006/10/18(水) 00:45:33フシアナはとりあえず義眼でもつけて来い
>>912-914
0917911
2006/10/18(水) 00:48:240918911
2006/10/18(水) 00:50:310919911
2006/10/18(水) 00:51:53騙るな
0920デフォルトの名無しさん
2006/10/18(水) 00:54:0210進数で言うならIEEE754のfloatは6桁
doubleは15桁
特別な理由がないかぎりfloat使うのは得策じゃないね。
0921デフォルトの名無しさん
2006/10/18(水) 00:57:13[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
・
・
0922デフォルトの名無しさん
2006/10/18(水) 00:59:10すいません。
0923デフォルトの名無しさん
2006/10/18(水) 02:08:310924デフォルトの名無しさん
2006/10/18(水) 06:03:260925デフォルトの名無しさん
2006/10/18(水) 06:53:23どうもありがとうございます
プログラム読みながら構造体を理解したいと思います
0926デフォルトの名無しさん
2006/10/18(水) 09:09:19gnuplot用のコマンド&データを標準出力して,パイプで渡すとか。
http://t16web.lanl.gov/Kawano/gnuplot/datafile2.html#7.4
0927デフォルトの名無しさん
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] その他の制限: なし
お願いします
0928お願いします
2006/10/18(水) 13:36:51[2] 問題文(含コード&リンク):
サンプル数6個で、2つの変数(x、y)を入力してその共分散と相関係数を出力する
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: Cでお願いします
[4] 期限: 今週末の金曜日までです
[5] その他の制限:
使う命令は、printf,scanf,for文等長くなってもいいので
初心者が使う文法みでお願いします。
0929デフォルトの名無しさん
2006/10/18(水) 13:49:47//台形公式と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);
}
0930929
2006/10/18(水) 14:05:53if(n == 0 && b == a) に直しといて
0931デフォルトの名無しさん
2006/10/18(水) 14:22:080932デフォルトの名無しさん
2006/10/18(水) 14:35:51すぐに解答をもらえると思うなよ。
共分散と相関係数の式をそのまま当てはめるだけ。
まずは、その二つの値を求めるための式を書いてみろ。
0933デフォルトの名無しさん
2006/10/18(水) 14:36:00[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]に代入するときに問題が起きてるようです。
でも何が原因なのか良く分かりません。助けてください;;
0934デフォルトの名無しさん
2006/10/18(水) 14:41:00-> を . に変えたら普通に動作したのですが、
構造体にした場合 . を -> に変えるだけではダメなのでしょうか?
ポインタでやらないと後々不便なのでここで妥協したくはないのですが・・・
0935デフォルトの名無しさん
2006/10/18(水) 14:44:48ネタか?釣りか?それとも真性か?
cellの構造体がどう定義されてるのか、一体誰が分かると思う?
このスレには回答者はいるがエスパーはいない。
0936デフォルトの名無しさん
2006/10/18(水) 14:46:57すみません、真性でした。
構造体はこんな感じです。
struct celldata{
int a;
int b;
int c;
};
0937デフォルトの名無しさん
2006/10/18(水) 14:59:10main関数での構造体の定義は
struct celldata *cell[HEIGHT][WIDTH];
で、HEIGHTとWIDTHは#includeの下あたりで
#define WIDTH 3
#define HEIGHT 3
で定義しています。
0938デフォルトの名無しさん
2006/10/18(水) 15:04:570939デフォルトの名無しさん
2006/10/18(水) 15:14:03ありがとうございました!
mallocでメモリ確保したら動作しました。
メモリ確保なんて自己参照構造体でくらいしか
使わないものだと思ってました・・・。
0940928
2006/10/18(水) 15:18:49main()
{
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);
}
これで精一杯です・・・
0941デフォルトの名無しさん
2006/10/18(水) 17:03:37円周率を計算するプログラムなんだけど↓
#define _ -F<00||--F-OO--;
int F=00,OO=00;
main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
このプログラムの中で、どのようにして円周率を計算するのか考えなさい
有名っぽいプログラムだったので検索したのですが解説してるサイトとかなかったので困ってます。
よろしくお願いします。
0942デフォルトの名無しさん
2006/10/18(水) 17:10:31main(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);}}
このプログラムを実行するとコマンドラインの引数すべての部分集合を表示することができるらしいのですが
どうして表示されるのか解説をしろという問題なのですが
どうしてなるのかわかる方はいらっしゃいませんか?
解説できる方がいたら解説をお願いします。
0943デフォルトの名無しさん
2006/10/18(水) 17:27:51| | |
| [G]oogle | |
| /ー[]{] /ー[]{] 冂 ┌冖ー┐ 冂 | |
| く, グ / .く, グ / . | .レ'7´フ カ l | .レ'7 lー┐.| |
| ∠/ ∠/ !__/ /_/ l__/ |__./..└‐┘.| |
| ⊂二⊃ | |
| | l | | |
| |_l__| | |
| ( ´_ゝ`) シェフの味! | |
| / |: ヾ ∧_∧ ドウダカ | |
| / / |: l、 l (´<_` ).、 | |
|__(__コつ| ̄|С,ノ __ (二二つ二ノ __ | |
| /⌒\** | |
| .ゝ二二二ノ | |
| ググ(・∀・)レ!! | |
|_____________________________|/
ググレカレー [google curry]
(発売 2006〜)
0944デフォルトの名無しさん
2006/10/18(水) 18:37:18[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日(木)
0945デフォルトの名無しさん
2006/10/18(水) 22:37:5941bitの表現に変換するのか?
0946デフォルトの名無しさん
2006/10/18(水) 22:49:392:問:16
苗字/名前 といった形式で文字列を入力する
苗字と名前を表すふたつの文字列に分割するプログラムを作成せよ
実行例
苗字と名前を入力してください:takeda/wataru
takeda
wataru
仕様
苗字を表すポインタ *lastname
名前を表すポインタ *firstname を宣言する
入力された文字列から/を探す
無ければエラーを吐く
3:C言語 Linux gcc3.4
4:今週中
5:今週でポインタ、構造体の基礎まで学んでいます
よろしくお願いします
0947デフォルトの名無しさん
2006/10/18(水) 23:01:46#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;
}
0948デフォルトの名無しさん
2006/10/18(水) 23:10:13そうです
0949デフォルトの名無しさん
2006/10/19(木) 00:08:33*lastname=NULL;
↓
*lastname='\0';
っしょ?
0951デフォルトの名無しさん
2006/10/19(木) 00:16:30建前としては規格からはずれるので動かない可能性もある
見たことねーけどな
0952デフォルトの名無しさん
2006/10/19(木) 00:20:05今の規格ではNULLは整数の0と等価にみなせるんじゃなかったか?
C99だったかC++のどこからかだったかは覚えてないんだが…
0953デフォルトの名無しさん
2006/10/19(木) 00:28:16その問題、何度か尋ねてるようだけど、とりあえず出力例を出してくれ。
あと指数部の基数は幾つだ?下駄は?
仮数部の正規化の形式は?
0954デフォルトの名無しさん
2006/10/19(木) 00:35:47入力フォーマット {-},[0-9]+{.[0-9]+}|{-}.[0-9]+
のうち|の前の {-} につづく , カンマが入ってるのは間違いだよな?
0955954
2006/10/19(木) 00:50:20受け取れる数値のフォーマットは
1.125
-1.125
.125
-.125
だと思いたいわけだが、問題の通りだとカンマがあるせいで
,1.125
-,1.125
.125
-.125
こんなものを処理しないといけなくなってしまうぞ
0956デフォルトの名無しさん
2006/10/19(木) 01:29:03すいません,は.の間違いです
0957デフォルトの名無しさん
2006/10/19(木) 01:31:04>>956で訂正されてしまったので身もふたもないが…
おそらく適正を見ているのだろう。
勝手に解釈して , を抜かす奴→不可
間違いではないかと質問に来る奴→不可
書いてあるとおりに実装する奴→可
どちらの場合にも対応できるように実装する奴→良
このスレに丸投げしてねらーが答えないのが悪いと責任転嫁する奴→優
0958デフォルトの名無しさん
2006/10/19(木) 01:38:29最近はNULLは#defineで0設定されてたと思う。
0959デフォルトの名無しさん
2006/10/19(木) 01:44:021.1.25
-1.1.25
これは一体どんな数値に変換すれば…
0960デフォルトの名無しさん
2006/10/19(木) 01:47:30955の通りです
0961デフォルトの名無しさん
2006/10/19(木) 02:12:35.1.25
-.1.25
だろ?あげあし取りスマソ
>>944 の解き方としては
1.整数部分だけを二進数に変換
2.少数点以下を二進数に変換
3.1.2.の結果を合わせて初めてビットが1になる次のビットを仮数部の最上位ビットにする
で一応できるけど、無限大の表現と 0 の表現が未定義だな
0962デフォルトの名無しさん
2006/10/19(木) 08:29:59指数部はどうするの?
0963デフォルトの名無しさん
2006/10/19(木) 09:45:260964デフォルトの名無しさん
2006/10/19(木) 10:15:59-1.1
.25 (0.25)
と解釈できるけど?
0965デフォルトの名無しさん
2006/10/19(木) 10:20:260966デフォルトの名無しさん
2006/10/19(木) 10:21:36世にあるIEEE以外の多くの実装では、最上位ビットも記録するわけだが。
0967デフォルトの名無しさん
2006/10/19(木) 10:38:52いっそのこと、atofで変換して基数部を指定ビット数で切り捨てるとか。
0968デフォルトの名無しさん
2006/10/19(木) 10:58:190969デフォルトの名無しさん
2006/10/19(木) 11:16:540970デフォルトの名無しさん
2006/10/19(木) 11:55:000971デフォルトの名無しさん
2006/10/19(木) 12:21:130972デフォルトの名無しさん
2006/10/19(木) 13:09:380973デフォルトの名無しさん
2006/10/19(木) 14:35:400974デフォルトの名無しさん
2006/10/19(木) 15:13:401+xです
0975デフォルトの名無しさん
2006/10/19(木) 15:56:32C++では0だし、Cでも0になっていることはある。
でも、だからと言って文字列の終端にNULLを使ってよいという理由にはならない。
0976デフォルトの名無しさん
2006/10/19(木) 16:05:44うっとうしいからさっさとやっちゃおうぜ
0977デフォルトの名無しさん
2006/10/19(木) 16:14:53とりあえず、基数は2。バイアスは無し。正規化は小数第1位に有効ビットを
持ってくる。入力フォーマットのカンマは無視ってことでいいのか?
0978デフォルトの名無しさん
2006/10/19(木) 16:41:29それでいいと思うよ
0979デフォルトの名無しさん
2006/10/19(木) 17:05:190980941
2006/10/19(木) 17:09:26マジで誰か分かる方いませんか?
0981デフォルトの名無しさん
2006/10/19(木) 17:22:30#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の問題って
入力規則ってのがわかんないんっすけど
こんな感じっすかね。問題の意図が違いますかね?
0982デフォルトの名無しさん
2006/10/19(木) 17:42:20955のような入力規則です
0983デフォルトの名無しさん
2006/10/19(木) 17:46:38955のような入力規則です
0984デフォルトの名無しさん
2006/10/19(木) 18:01:50Bnはuintじゃたりなくね。
0985デフォルトの名無しさん
2006/10/19(木) 18:18:54[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回目の宿題でつまづいてしまいました。お願いします。
0986デフォルトの名無しさん
2006/10/19(木) 18:31:051scanf("%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);
0987985
2006/10/19(木) 18:46:01できました!ありがとうございました。
0988デフォルトの名無しさん
2006/10/19(木) 19:06:51その邪悪な糞コードをこう書き換えれば少しは分かり易いだろう。
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/
0989デフォルトの名無しさん
2006/10/19(木) 19:49:47[2] 問題文:行列の積を用いた性能評価プログラムを作成しなさい
計算に何秒かかったのか表示し、行列の大きさは任意で変更が出来るように組むこと
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 2006年10月20日14時
[5] その他の制限: コンパイルオプションには最適化を指示する。
倍精度浮動小数点を用いること
よろしくお願いします
0990デフォルトの名無しさん
2006/10/19(木) 19:53:22[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] その他の制限:
0991デフォルトの名無しさん
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
0992デフォルトの名無しさん
2006/10/19(木) 20:39:36うまくいかないんですが
0993デフォルトの名無しさん
2006/10/19(木) 20:39:570994デフォルトの名無しさん
2006/10/19(木) 20:40:36http://pc8.2ch.net/test/read.cgi/tech/1161257941/
0995デフォルトの名無しさん
2006/10/19(木) 21:07:23問題文に問題があるんだが、変更していいのはあくまでも
struct nibun *add_nibun(struct nibun *x,int k)
って関数だけなの?
0996デフォルトの名無しさん
2006/10/19(木) 21:14:39そうです
問題に書いてある部分は変更しちゃいけないみたいです
0997デフォルトの名無しさん
2006/10/19(木) 21:15:060998デフォルトの名無しさん
2006/10/19(木) 21:28:39void 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分木リスト構造って何だ?
0999デフォルトの名無しさん
2006/10/19(木) 21:31:551000デフォルトの名無しさん
2006/10/19(木) 21:36:54struct 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
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。