1 :
デフォルトの名無しさん :
2010/01/18(月) 23:25:55 BE:265079647-S★(508111)
ぬるぽ
マジかよゴキブリ湧いてきた
痴漢はこんなとこにもわくのかよw
★宿題をやってあげる方は仕事でやっているわけではないので 品質に文句を付けるのはやめてください(質問は構いません) ★宿題をやった方は依頼者がまだ居るか確かめてから貼るように 心がけて下さい。 ★複数やってくださった方が居た場合でも依頼者は全員に貼って もらう必要はありません。批評を書き込むことは慎みましょう
何をどうやって確かめろと?
>>7 アップローダを使ってくださいませんか。コンパイルするまでが面倒です。
てかテンプレに沿った形にするのもプログラミングの練習
scanf系ってあんな柔軟だっけ?
11 :
デフォルトの名無しさん :2010/01/19(火) 13:08:40
前スレにも書きましたが お願いします [1] 授業単元: プログラミング演習V [2] 問題文(含コード&リンク): Printfを作る。 %d, %c, %sのみサポートする。 既存の関数・マクロは呼んではいけない。 使えるものはputchar()のみ。 [3] 環境 [3.1] OS: WindouwsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年1月21日(木)まで [5] その他の制限: 特にありません
大学のプログラミングで使っている教科書だと、 main() { プログラム } なのに対して、時々ネット上で int main() { プログラム } と言うのを見かけます。何が違うのでしょうか?
すいません。自己解決しました。
14 :
デフォルトの名無しさん :2010/01/19(火) 15:15:08
15 :
デフォルトの名無しさん :2010/01/19(火) 15:18:06
14>>
授業単元は情報数学演習です。
すみません
>>11
>>007 #include <stdio.h>
#define DATA_MAX 5 /* データの最大件数 */
#define NAME_LEN_MAX 16 /* 名前の長さ */
#define TEL_NUMBER_LEN_MAX 16 /* 電話番号の長さ */
#define YUUBINN_LEN_MAX 8 /* 郵便番号の長さ */
#define ADDRESS_DATA_MAX 64 /* 住所の長さ */
typedef struct Address_Note {
char name[NAME_LEN_MAX]; /* 名前 */
char tel_number[TEL_NUMBER_LEN_MAX]; /* 電話番号 */
char zip_code[YUUBINN_LEN_MAX]; /* 郵便番号 */
char address[ADDRESS_DATA_MAX]; /* 住所 */
} NOTE;
int g_address_data_count = 0;
int main(void) {
int i, sts;
NOTE data[DATA_MAX];
NOTE *p;
FILE *fp;
if((fp = fopen("address_note.txt", "r"))==NULL) {
printf("ファイルが見つかりませんでした---address_note.txt\n");
exit(1);;
}
for(i=sts=0; i<DATA_MAX; i++) {
p = &data[i]; /*データの読み込み*/
sts = fscanf(fp,"%16s%16s%8s%64s", p->name, p->tel_number, p->zip_code, p->address);
if(sts==EOF) break;
g_address_data_count++;
printf("\n名前:%s\n電話番号:%s\n郵便番号:%s\n住所:%s\n", p->name, p->tel_number, p->zip_code, p->address);
}
}
21 :
デフォルトの名無しさん :2010/01/19(火) 23:02:01
22 :
デフォルトの名無しさん :2010/01/19(火) 23:09:41
>>21 全角と半角、大文字小文字が入り混じってハイフンが一になってることから
OCR ソフトでも使ったかな?
最近のは優秀なんだねぇ
24 :
デフォルトの名無しさん :2010/01/19(火) 23:13:16
>>23 はい。
もし見にくければ、もとの画像ファイルもアップしますのでよろしくお願いします。
>>24 ソースコード部分だけでいいからコンパイルできるように修正してよ
26 :
デフォルトの名無しさん :2010/01/19(火) 23:35:27
>>19 char *resの領域が確保されていない
★依頼してから「納品」までは最低24時間は下さい。 (ただし最低品質です)
>>26 と同じ問題でした
よく見ずに書き込んでしまい申し訳ありません
ご協力ありがとうございました
33 :
デフォルトの名無しさん :2010/01/20(水) 22:39:30
[1] プログラミング基礎実習 [2] 文字列strを逆順に格納する関数("SEC"を受け取ったら"CES"とする) void rev_string(char str[]){ /*…*/ } を作成せよ。 [3] 環境 [3.1]Linux [3.2]gcc、バージョンはわかりません。 [3.3]C言語 [4]明後日まで [5]ポインタ使えません。 よろしくお願いいたします。
ポインタ禁止といいながら、いきなり仮引数strがポインタ…
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10398.txt @insert_btを、再帰関数を使わずに繰り返し構文で書き換えよ
A指定した数字を削除する関数delete_btを作成せよ
[3] 環境
[3.1] OS:WindowsVista
[3.2] コンパイラ名とバージョン:VisualC++2008ExpressEdition
[3.3] 言語:どちらでも可
[4] 期限: 2010年1月25日まで
[5] その他の制限: 習っているのはポインタ、構造体辺りまで。
よろしくお願いします。
特に@は再帰無しで2分木をつなげるヒントだけでもいただけると幸いです。
36 :
34 :2010/01/20(水) 23:23:37
>>33 ポインタ禁止ではなく間接/アドレス演算子使用不可ということだと判断しておく
#include <stdio.h>
#include <string.h>
void rev_string(char str[]){
char c;
int s = 0;
int e = strlen(str) - 1;
do{
c = str[s];
str[s] = str[e];
str[e] = c;
}while(++s < --e);
}
int main(){
char str[] = "SEC";
printf("%s\n", str);
rev_string(str);
printf("%s\n", str);
return 0;
}
37 :
34 :2010/01/20(水) 23:29:39
>>37 ってこれだと空文字列の時にバグるか…訂正
void rev_string(char str[]){
char c;
int s = -1;
int e = strlen(str);
while(++s < --e){
c = str[s];
str[s] = str[e];
str[e] = c;
};
}
39 :
19 :2010/01/21(木) 02:06:45
>>30 解決できました.すごく丁寧なプログラムわざわざありがとうございます.
スレ荒れの原因になるんで、期限迄十分余裕を持って 依頼して欲しいですな。期限まで15時間、しかも 時間帯を考えると実質7〜8時間しかない。 平日の昼間に他人の宿題を無償で片付けられるような 暇人が居るとでも思っているんだったらちょっと自分の 常識を疑ったほうがよいんじゃないでしょうか?
>>40 荒れるほど難解な問題でもないっしょ
即答できない人は荒らそうとせずにスルーすればいいだけだ
即答ラッシュになってつまらぬ喧嘩を始める 奴らが過去に居たもんで....
C++なんですが .datファイルがもともとありまして、 文字列(単語が1つでない場合あり) 実数 文字列(単語が1つでない場合あり) 実数 …… の順に200行まで入ってるファイルを ifstream使用して 文字列は文字列の配列に、実数は実数の配列に入れたいのですが、 どうすればよいか分かりますか? 入力ストリームfinを文字列lineに入れるとすると int i=0; string s[200]; double d[200]; while(getline(fin,line)){ s[i]=line; fin>>d[i]; i++; } かな、と思ったんですが出力の時にうまくいかなくて どなたか教えてください お願いします
>>38 期限間違ってました。
金曜日まででお願いします。
本当すいません。
>>40 申し訳ありません。
46 :
デフォルトの名無しさん :2010/01/21(木) 11:16:52
1] プログラミング演習I [2] [3] 環境 [3.1] OS: WindouwsXP [3.2] microsoft visual stadio 2005 [3.3] 言語: C [4] 期限: 2010年1月21日(木)11:45まで 5 おねがいしまつ
47 :
デフォルトの名無しさん :2010/01/21(木) 11:20:03
〉〉46でつ・・・まちがました。。。 1] プログラミング演習I [2] int型,long型,double型の三つのメンバを持つ構造体xyzを定義して各メンバに値を格納する関数 void set_xyz(struct xyz*p.int X,long y.....)」を作成 [3] 環境 [3.1] OS: WindouwsXP [3.2] microsoft visual stadio 2005 [3.3] 言語: C [4] 期限: 2010年1月21日(木)11:45まで 5 おねがいしまつ
>>47 #define xyz struct{¥
int int_member;¥
long long_member;¥
double double_member}
void set_xyz( xyz *p,int X,long Y,double Z){
(*p)->int_mbmer=X;
(*p)->long_mbmer=Y;
(p*)->double_membr=Z;
}
49 :
デフォルトの名無しさん :2010/01/21(木) 11:37:59
〉〉48 神!! 書いていただいた回答を見てわかりますた!! ありがとうございました!!
え?w
>>43 ありがとうございます、助かりました。
それと、設計が酷いとは具体的にはどういうことでしょうか?
>>044 質問は質問スレへ
#include <iostream>
#include <fstream>
using namespace std;
int main(){
int i;
double d[200];
string line[200], s;
ifstream fin("test.txt");
for(i=0; getline(fin, line[i], '\n') && getline(fin, s, '\n'); i++){
d[i] = atof( s.c_str() );
cout << i <<":"<< d[i] <<"="<< line[i] <<endl;
}
return 0;
}
53 :
52 :2010/01/21(木) 13:41:56
#include <iostream> #include <fstream> using namespace std; int main(){ int i; double d[200]; string line[200], s; ifstream fin("test.txt"); for(i=0; getline(fin, line[i], '\n'); i++){ fin >> d[i]; getline(fin, s, '\n'); cout << i <<":"<< d[i] <<"="<< line[i] <<endl; } return 0; }
昨日から、ラウンジにアクセスしようとすると403になるんだが、俺だけか?
[1] 授業単元:情報処理入門
[2] 問題文(含コード&リンク):
データファイルdata.binには,数値データがバイナリ形式で保存されている
(1行に羅列).データの数は75×75=5625,データの型はshortである.
data.binのデータを,freadを用いて読み出して配列に格納し,gnuplotで3次元表示できる形式のテキスト
ファイル(data2.txt)に保存するプログラムを作成せよ.(ファイルrep2.c,data2.txt)
[3] 環境
[3.1] OS: (Windows/Linux/等々)
Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc 3.4
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
Cでおねがいします。
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
提出期限2010年1月25日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
特にございません。
わたしはもともと情報系の学生ではないのですが、情報処理の授業も履修しています。簡単な課題なのかもしれませんが私にとっては全く分かんないです。どなたか教えていただけたらありがたいです。よろしくお願い致します。
data.binのファイルはこちらになります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10402.zip
>>55 11,250/4 割り切れないから元データが不正じゃない?
#include <stdio.h>
#pragma pack(1)
typedef struct POINT{
short x;
short y;
};
#pragma pack()
int main(){
struct POINT pt;
FILE *fin,*fout;
fin = fopen("data.bin","rb");
if(fin==NULL)return -1;
fout = fopen("out.txt","w");
if(fout==NULL)return -1;
fprintf(fout,"#X\tY\n");
while(fread(&pt,sizeof pt,1,fin)==1){
fprintf(fout,"%d\t%d\n",pt.x,pt.y);
}
fclose(fin);
fclose(fout);
return 0;
}
11,250/2 = 75*75 いいんだよ
うーん、3次元なのに75*75って分かんないなぁ
>>57 スルーしてください
1ブロック25ポイントで75ブロックって事なのかな
>>055 IPOで言う、PROCESSとOUTPUT両方提出すればいい課題なのかな?
OUTPUTは決まって無いのかな?
62 :
デフォルトの名無しさん :2010/01/21(木) 20:11:16
>>62 // typedef struct KAMOKU;
printf("プログラムを終了します。\nデータベースファイルは作成されていません。\n");
}
}
}
65 :
44 :2010/01/21(木) 23:52:47
>>64 printf("%2d %2d %u\n",j,i,dat[wx0*i+j]);
>>055 // data.binのデータを,freadを用いて読み出して配列に格納し,gnuplotで3次元表示できる形式のテキストファイル(data2.txt)に保存するプログラムを作成せよ.
#include <stdio.h>
#define wx0 75
#define wy0 75
main()
{
int i,j;
unsigned short dat[wx0*wy0];
FILE *fp;
fp=fopen("data.bin","rb");
for(i=0;i<wx0*wy0;++i) fread(&dat[i],sizeof(short),1,fp);
fclose(fp);
fp=fopen("data2.txt","w");
for(i=wy0-1;i>=0;--i){
for(j=wx0/2;j<wx0;++j){
fprintf(fp,"%2d %2d %d\n",j,i,dat[wx0*i+j]);
/* fprintf(fp,"%d\t",dat[wx0*i+j]);*/
}
for(j=0;j<wx0/2;++j){
fprintf(fp,"%2d %2d %d\n",j,i,dat[wx0*i+j]);
/* fprintf(fp,"%d\t",dat[wx0*i+j]);*/
}
/* fprintf(fp,"\n");*/
}
fclose(fp);
}
74 :
デフォルトの名無しさん :2010/01/22(金) 19:03:45
[1] 授業単元:プロトタイプ宣言 [2] 問題文(含コード&リンク):『私は○○です』と表示する関数を作成して、main関数でそれを三回呼び出して、画面に三回出力プログラムを作成せよ。表示のための関数の名前は『display_name』とせよ [3] 環境 [3.1] OS:xbunt [3.3] 言語:C++ [4] 期限: 2010年1月23日 [5] その他の制限:出力→cout,入力→cin,あと、簡単にお願いします。始まりは、 #include <iostream> using namespace std;です。
75 :
74 :2010/01/22(金) 19:04:48
xbuntuでしたすみません。
>>73 さん、他の皆さん、本当にありがとうございました。本当に助かりました。感謝しています。
77 :
無能 :2010/01/22(金) 21:39:27
[1] 授業単元:プログラミング実習 [2] 問題文:クラスタリングk-means法 1、初期値として、クラスタ数および初期のデータ分割を与える。 2、データ分割に基づき各分割の重心を求める。 さらに、重心と各事例データとの距離を求める 3、各事例を最も近いクラスタに割り当てる。 4、上記の割り当てが前回と同じであれば終了。 更新があれば2に戻る [3] 環境 [3.1] OS:Windows [3.3] 言語:C言語 [4] 期限:2010年1月23日 できなくて本当に困ってます。お願いします。
>>77 >>1 >・問題文は、出題されたまま全文を書いてください。
・クラスタリングするデータの型は?
・データの入力はどうするのか、ランダム生成するのか?
・クラスタリング結果はどう出力するのか?
表示用のプログラムがあるのか、gnuplotか何かで描くのか、
ただテキストで吐けばいいのか
>>74 #include <iostream>
using namespace std;
void display_name(){
std::cout << "私は○○です。" << std::endl;
}
int main(){
display_name();
display_name();
display_name();
return 0;
}
[1]プログラミング演習(大学専門過程演習授業) [2] コマンドライン引数で与えられたテキストファイルを読み込み 空行でなければ、その行に含まれているスペース、タブを 除去したものを標準出力するプログラム。但し英数字と"_"で 構成される文字列同士の間には一つのスペースは残す。 ",'で囲まれた部分に関してはスペース、タブはそのまま残す "で囲まれた部分について最後の文字が¥であってはならない。 'で囲まれた部分について最後の文字が¥であってはならない。 (テキストファイルの空行と余計な空白/タブを除去する プログラムでクオテーションに配慮したもの) [3-1] Windows Vista [3-2] Visual studio 2008 [3-3] C言語 [4] 2/7迄 [5] 使用出来る標準ライブラリはstdio.h stdlib.h string.h定 義のものだけでこれらのヘッダファイルのみインクルード可 ファイルI/O,標準出力が出来るのはmain関数内のみとする。
★品質によるトラブル防止の為、片付けた宿題を貼る場合は 依頼者がまだ見ているかを確認してから貼るようにしましょう。 ★依頼者は、宿題を片付けて下さる方が出てからすぐもらえる とは考えず、一定時間のテスト、チェック時間を考慮して下さい。 ★依頼者は、依頼してから次にスレをいつ見るのかも記述して 下さると助かります。(ずっと見てますというのは非現実的で 信用されません)
85 :
83 :2010/01/23(土) 14:12:11
今日明日は入試関連のバイトと期末試験準備が あるんで次見るのは月曜日夜以降になると思いますが 片付けて下さる方がいらっしゃいましたら、お助け 下さい。
>>84 いやがらせか
>>74 #include <iostream>
using namespace std;
void display_name(){
cout << "私は○○です。" << endl;
}
int main(){
for(i=0;i<3;i++)
display_name();
return 0;
}
軽いものはすぐに出来るだろうけど時々かなり重いもの もあるしな...(依頼者にはわかりようがないかも) やっぱし少しでも間を取ったほうがいいよ
88 :
無能 :2010/01/23(土) 18:52:58
>>80 77のものです。
属性数d=2
x,y
事例データ数n=5
事例No.1 x=5,y=1
事例No.2 x=4,y=2
事例No.3 x=1,y=5
事例No.4 x=5,y=4
事例No.5 x=5,y=5
クラスタ数;2
初期クラスタ{1,3},{2,4,5}
結果はテキストでお願いします。
>>82 >>86 >>74 の授業単元にプロトタイプ宣言ってあるから
問題文に書いてなくてもプロトタイプ宣言した方が良いような。
>>80 ありがとうございます。
自宅では開発環境ないので月曜の朝学校で動作確認してみます。
[1] 授業単元:情報処理 [2] 問題文: 問1 キーボードから3個の実数(整数でない)値を1行に1組として計5組入力し、 ファイル(ファイル名data1.txt)に保存する。 問2 問1で作ったファイルから実数値を読み込み、総合計と各組の実数の平均を求める。 ただし、ファイルに書かれている組の数は不明とする。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C言語 [4] 期限:2010年1月25日 [5] その他の制限: なし よろしくお願いします。
92 :
74 :2010/01/23(土) 22:45:54
ありがとうございました
93 :
デフォルトの名無しさん :2010/01/24(日) 01:09:15
[1] 授業単元:プロトタイプ宣言 [2] 問題文(含コード&リンク): 次の式を以下の条件(値)に基づいて計算.表示するプログラムを作成せよ。ただし式は簡単化せずそのままプログラムすることとして、更に表示するときは計算の答えと合わせて条件(値)も表示して分かりやすくせよ。 計算する式 {(a+b)c-a(b-c)}/{(c/b)a+abc-ca} 条件1 a=3 b=4 c=2 a=3 b=4.3 c=2.5 a=32.6 b=57.82 c=2.543 この問題を、 式の分だけを関数化した場合 式と出力部分を関数化した場合 の2つの場合でプログラムを作成せよ [3] 環境 [3.1] OS:xbuntu [3.3] 言語:C++ [4] 期限: 2010年1月25日 [5] その他の制限:出力→cout,入力→cin,あと、簡単にお願いします。始まりは、 #include <iostream> using namespace std;です。
94 :
デフォルトの名無しさん :2010/01/24(日) 02:09:37
[1] C [2] 反復列 x_n+1=a*x_n(1-x_n),0<=a<=4,0<=x<=1 に対して、x_nが1周期(不動点)、2周期、4周期、8周期、16周期 をもつaの範囲について、プログラムを作成して確かめよ。 ※ ○周期というのはaがある値のとき、○個の解で振動するという意味です※ [3] LINUX C [4] 1/24 18:00
>>87 このスレで放置されるパターンの多くは
問題が難解なのではなく問題文が難解なんだ
難解というか不備だな
出題者の不備、質問者のコピペミスなどで
解答を一つに絞れず面倒なやり取りが目に見えるので
放置されちゃう
ま、重いっちゃ重いけど症状が重いという意味合いだな
103 :
◆NPjWSW9EXI :2010/01/24(日) 18:57:41
104 :
homi :2010/01/24(日) 20:19:28
本当に困ってます。 このままでは留年して泣いてしまいます>< 20 桁までの自然数の足し算と掛け算を浮動小数点演算を用いないで実施するプログラムlongcomp.c を 作成し、C のソースコードを提出しなさい。 実行形式をlongcomp とした動作仕様は以下です。 >./longcomp 12345678901234567890 + 12345678901234567890 >12345678901234567890 + 12345678901234567890 = 24691357802469135780 >./longcomp 1234567890 * 1234567890 >1234567890 * 1234567890 = 1524157875019052100
105 :
homi :2010/01/24(日) 20:23:41
上の人です;; b01, b001 のように二進数をb で始まるように表記する。二進数の集合を、できるだけ少ないノード数 の二分木に分類するためには、二分木のノードに蓄積する二進数の桁数を可変にすることが有効である。こう することで二進数表記した値(たとえばキーワードとか、位置とか、日付とか)に紐づけられたデータを少な い検索で見つけることができる。 扱う二進数の集合を、たとえば b00, b001, b0011, b00111, b1000, b11100, b0 として、これらを図1に示すようにニ分木に分類して、帰りがけ(ポストオーダ)で次のように出力するプロ グラム(tree) を作成し、C のソースコードを提出しなさい。 >./tree >1 1 1 0 0 000 1100 0 1 b 提出期限は1/26 23:59までです;; 上も合わせてC++です;;
テンプレ使ってね
CなのかC++なのかくらいはっきりしろ
109 :
homi :2010/01/24(日) 20:35:05
上のヒトです;;
フォーマットに気が付きませんでした
[1] データ構造とプログラミング
[2]
http://www.geocities.jp/t07644fb/kadai.pdf [3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C++)
[4] 期限: ([2010年1月26日23:59まで])
[5] その他の制限
ご迷惑おかけしました;;
げげ、2ちゃんに依頼するなんてどこのFランかと思ったら慶應かよ……orz
>>104 > 20 桁までの自然数の足し算と掛け算を浮動小数点演算を用いないで
多倍長整数のライブラリを使えばおk
>>109 課題1だけ。手元に多バイト長演算ライブラリの自作がありましたのでそれを使いました。
http://codepad.org/0WrPn4ib >>84 > ★品質によるトラブル防止の為、片付けた宿題を貼る場合は
> 依頼者がまだ見ているかを確認してから貼るようにしましょう。
意味不明。依頼者がみてるかどうかと、品質とどんな関係があるのですか?
回答者はできたら貼るだけいいのでは?
生徒さんですか。最近の学校ではこんなんがはやっているのですか?
シェルによっては * を解釈してしまうでしょうから、 ./a.exe 2 '*' 3 のように入力してください。
116 :
デフォルトの名無しさん :2010/01/24(日) 22:05:21
>>99 ありがとうございました
int main()の後のvoidって、今までいらなかったんですが、今回はいるんですか?
118 :
homi :2010/01/24(日) 22:16:02
>>114 、117
助かりました!!ありがとうございます!!
>>102 とりあえず問2は、こういう発想でうまく動きました(投げやり
修正は2つの関数を以下のように書き換えました。
あとは適当に修正してください。
struct node *make_clist(char *s){
struct node *head = initlist();
struct node *p = head;
int len = strlen(s);
int i;
//while (*s != '\0'){
for (i = 0; i <= len; i++) {
insert(p, *s);
p = p->next;
s++;
};
return head;
}
void print_clist(struct node *p) {
printf("[");
while (p->next) {
/* 表示する文字が\0なら終了 */
if (p->next->element == '\0') {
break;
}
printf("%c", p->next->element);
p = p->next;
}
printf("]\n");
}
テスト
テスト
[1] 授業単元: Cプログラミング入門 [2] 問題文(含コード&リンク): 入力された2つの文字列(日本語その他バイト文字は不可) を比較するプログラムを作成せよ。ただし、大文字小文字の違いは無視。単語間に連続して スペース・タブが複数入っていても単独のスペースとしない。 [3] 環境 [3.1] OS: vista [3.3] 言語: C [4] 期限: [2010年1月26日12:00まで] [5] その他の制限: 文字列とポインタまでやってます。 入力に関して、キーボードから1つ目の文字列を1行で入力し、改行する。 この時、入力を促す文字は一切表示しない。入力文字数は128文字まで。 出力に関して、一致すれば何も表示しない。不一致の場合は最初に不一致となる 入力1の文字と入力2の文字(1文字+スペース+1文字+改行)を表示する。 どちらかが末端の場合は代わりにスペースで埋める。 どうかよろしくお願いします。
125 :
120 :2010/01/24(日) 23:20:27
126 :
デフォルトの名無しさん :2010/01/24(日) 23:44:27
>>121 ごめんなさい。calcoutputとかcalcというのは何か特殊な効果があったりしますか?習ってないんですが
>>126 >>93 で
> この問題を、
> 式の分だけを関数化した場合
> 式と出力部分を関数化した場合
> の2つの場合でプログラムを作成せよ
って書いてあるでしょ
calcは「式の分だけを関数化した」もの、
calcoutputは「式と出力部分を関数化した」ものだよ
129 :
128 :2010/01/25(月) 00:44:03
>>126 言い忘れてた。
calcとかcalcoutputとかは適当に決めたものだから別の名前に変えてもいい
130 :
デフォルトの名無しさん :2010/01/25(月) 00:59:34
>>127 void quick(int a[], int left, int right) {
int p, center;
if(left != right){
p = pivot(a, left, right);
center = partition(a, left, right, a[p]);
check(a, left, right, p, center);
quick(a, left, center - 1);
quick(a, center, right);
}
}
>>127 3箇所修正
(1) pivot関数の書き換え
return (left + right + 1) / 2;
(2)partition関数内の条件
while (a[j] > p) // 軸以下のデータを探索
(3)quick関数先頭にブロック
if (left >= right) return;
[1] 授業単元: プログラミング概論 [2] 問題文:"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいると仮定した上で、この入力ファイルの中のデータを1行に5個ずつきれいに並べて"out_file"という名前のファイルに出力するCプログラムを作成せよ。 入力ファイルの内容が -1111111111 2222222 333333 4444 55 6 7 8 9 0 1 2 3 4 5 6 7890123 -5666 の時には、例えば次のような内容を"out_file"に書き出す _-1111111111_____2222222______333333________4444__________55 _________________6_______________7______________8_____________9___________0 ________________ 1_______________2______________3_____________4___________5 _________________6_____7890123________-5666 [3] 環境 [3.1] OS:windows7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年1月26日まで [5] その他の制限: とくにありません 問題文ではアンダーバーではなく半角の空白記号でしたが、見やすさを考慮して_に変えておきました 講義で構造体やファイル入出力等、基本的なことは終わっています よろしくお願いします
138 :
デフォルトの名無しさん :2010/01/25(月) 07:34:39
>>141 期待していただいては困るのであらかじめ行っておけば、
この種のプログラミングは専門性が高いので、
経験豊かな人間にしか手をつけられません。
必修というのであれば、ココに期待しないほうがいいと思います。
143 :
homi :2010/01/25(月) 13:38:14
[1] データ構造とプログラミング [2] 演習問題4.5 逆ポーランド記法による入力文字列(空白で区切られている)に対して、 16進数と10進数で答えを返すプログラムrpnを作りなさい。 (入力例)rpn 5 2 + 7 * (出力例)0x31, 49(decimal) [3] 環境 [3.1] (Windows) [3.2] (gcc) [3.3] (C++) [4] 期限: ([2010年1月25日23:59まで] ) [5] 特にないです お願いします
144 :
homi :2010/01/25(月) 13:44:30
[1] データ構造とプログラミング [2] [1] データ構造とプログラミング [2] 自然入力した数式を逆ポーランド記法に変換するアルゴリズムを考えなさい。アルゴリズムをPADやフローチャートで示すだけでもよい。プログラム化することができれば、ボーナスポイントです。 (入力例)./a (5+2)*7 (出力例)5 2 + 7 *[3] 環境 [3.1] (Windows) [3.2] (gcc) [3.3] (C++) [4] 期限: ([2010年1月25日23:59まで] ) [5] 特にないです
145 :
homi :2010/01/25(月) 13:46:13
上ちょっとフォーマット崩れました。ごめんなさい。 [1] データ構造とプログラミング [2] 自然入力した数式を逆ポーランド記法に変換するアルゴリズムを考えなさい。アルゴリズムをPADやフローチャートで示すだけでもよい。プログラム化することができれば、ボーナスポイントです。 (入力例)./a (5+2)*7 (出力例)5 2 + 7 * [3] 環境 [3.1] (Windows) [3.2] (gcc) [3.3] (C++) [4] 期限: ([2010年1月25日23:59まで] ) [5] 特にないです よろしく願いたします
>>125 いえいえ、助かります。問2について解決致しました。
規制にて書き込みできず遅れましたが、ありがとうございました。
提出期限は過ぎてしまいましたが、どなたか
>>102 の問3をよろしければお願いします。
★依頼してから「納品」までは最低6時間は下さい。それ 以下の場合は、品質が著しく低い場合があります。 ★依頼してからの宿題内容の修正はやめてください。 やむをえず行う場合は3時間以内にしてください。6時間 を経過した場合は依頼自体を取り消して貼り直して下さい。 (宿題をやって下さる方も、問題の内容自体の理解も覚束ない 人間が一発で問題文を正確に転記/略述することは出来ない ので、少なくとも3時間以内までには修正が入るかもしれないと いう前提でお願いできないでしょうか?) ★宿題をやってあげる方は仕事でやっているわけではないので 品質に文句を付けるのはやめてください(質問は構いません) ★複数やってくださった方が居た場合でも依頼者は全員に貼って もらう必要はありません。時間を割いて片付けてくれた人を 比較するようなことは失礼に当たります。(宿題を貼る場合は 依頼者がまだ見ているかどうか確かめてから貼るように お願いします。)最初に貼ってくれた人の回答で満足なら 回答をお寄せ下さった方にお礼と回答を貼ることを遠慮して もらうようにして下さい。
> ★複数やってくださった方が居た場合でも依頼者は全員に貼って > もらう必要はありません。 書いている意味がよくわからない。 複数回答が出た場合に、どこにだれが何を貼るって?
依頼者はどんなにひどい回答でも、喜んで受け取り、 以降その人以外から回答は受け取らないようにしろだと? 依頼者には酷かもしれないけど正論だな。 ようするに既に回答者が出てた場合は、最初の回答者を通 す形にしてやったほうがいいかも。 但し最初の回答者になる為に意図的に糞コード貼ってる と認識された場合は袋叩きにあうかも知れないんで 回答者も少し辛くなる。
いやそれ構わなくていいから・・・
>>148 が一体何を望んでいるのか、サッパリ分からない。
>>153 最近こんな生徒さんが多いですね。こういうのが学校ではやっているんですかね?
>>154 さすがにこれに答えちゃいけないでしょう。自力でなんとかしなさい。
>>136 遅くなりました
ありがとうございました
161 :
デフォルトの名無しさん :2010/01/25(月) 20:11:44
[1] 授業単元: プログラミング演習(木構造と数式処理) [2] 問題文(含コード&リンク): 累乗の計算の逆を行うプログラムを作ってください。 例 x*x*xと入力されればx^3と画面に出力する。 x*x*x*aなどの場合はx^3*aと出力されればよい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年1月28日12:00まで
162 :
◆NPjWSW9EXI :2010/01/25(月) 20:28:20
103です
>>113 遅くなりました
有難うございました。
どなたか2番を解いてくださいお願いします。
163 :
デフォルトの名無しさん :2010/01/25(月) 20:46:36
>>129 すみません…ありがとうございます。あと、昨日聞き忘れてしまったんですが、
意味的に同じであると思うんですが、この2つを書き方分けてる理由は何ですか?
cout << "{(a+b)c-a(b-c)}/{(c/b)a+abc-ca} = ";
cout << ((a+b)*c-a*(b-c))/((c/b)*a+a*b*c-c*a) << '\n';
164 :
93 :2010/01/25(月) 20:51:51
言い忘れてしまいました。これを考察というのをするんですが、この2つを比較でもしようかなと思うんですが、 プログラムの文章の書き方が違うとかそういう事以外で何かありますか?
165 :
120 :2010/01/25(月) 22:20:29
>>162 #include <stdio.h>
void mult_array(int a0[4][4],int a1[4][4],int result[4][4]){
int x,y,k;
for(y=0;y<4;y++){
for(x=0;x<4;x++){
for(k=0;k<4;k++){
result[y][x]+=a0[y][k]*a1[k][x];
}
}
}
}
int main(){
int a0[4][4]={0};
int a1[4][4]={0};
int result[4][4]={0};
int y;
for(y=0;y<4;y++)scanf("%d%d%d%d",&a0[y][0],&a0[y][1],&a0[y][2],&a0[y][3]);
for(y=0;y<4;y++)scanf("%d%d%d%d",&a1[y][0],&a1[y][1],&a1[y][2],&a1[y][3]);
mult_array(a0,a1,result);
for(y=0;y<4;y++)
printf("%d %d %d %d\n",result[y][0],result[y][1],result[y][2],result[y][3]);
return 0;
}
167 :
hoge :2010/01/25(月) 23:07:26
上の105ですが、もう一度質問させて頂きます。 なぜなら、課題2対しての回答がないからです。 皆様よろしくお願いします。 [1] データ構造とプログラミング [2]b01, b001 のように二進数をb で始まるように表記する。二進数の集合を、できるだけ少ないノード数 の二分木に分類するためには、二分木のノードに蓄積する二進数の桁数を可変にすることが有効である。こう することで二進数表記した値(たとえばキーワードとか、位置とか、日付とか)に紐づけられたデータを少な い検索で見つけることができる。 扱う二進数の集合を、たとえば b00, b001, b0011, b00111, b1000, b11100, b0 として、これらを図1に示すようにニ分木に分類して、帰りがけ(ポストオーダ)で次のように出力するプロ グラム(tree) を作成し、C のソースコードを提出しなさい。 >./tree >1 1 1 0 0 000 1100 0 1 b [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C++) [4] 期限: ([2010年1月26日23:59まで]) [5] その他の制限
169 :
◆NPjWSW9EXI :2010/01/26(火) 00:39:43
170 :
homi :2010/01/26(火) 00:46:56
171 :
homi :2010/01/26(火) 00:50:11
前にこれを上げたものです。
課題1はすでにやってもらったのですが、
課題2がまだです。
再UPになりますが、もしできる方いらっしゃいましたらよろしくお願いします><
[1] データ構造とプログラミング
[2]
http://www.geocities.jp/t07644fb/kadai.pdf [3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C++)
[4] 期限: ([2010年1月26日23:59まで])
[5] その他の制限
失礼しました
>>171 あなたはそのために単発スレまで建てたんだからそっちでやりなよ
173 :
137 :2010/01/26(火) 01:27:20
>>156 返事が遅くなってすいません
全角スペースは対応しなくても大丈夫だと思います
私の独自解釈では、おそらく"in_file"内の整数18個を5*3+3の4行に分け、最も長くなる行に揃えて出力すればいいのかと…
適当に入力した数値が綺麗に並んで出力されたので、問題ないと思います
助かりました
ありがとうございました
174 :
デフォルトの名無しさん :2010/01/26(火) 01:30:22
[1] データ構造とプログラミング
[2]
リングバッファを使って、9個のキューを作り、データを追加したり、
データを取り出すプログラムを完成させなさい。
以下の添付にあるプログラムを完成させろという課題です。
http://www.geocities.jp/pegasus_violet/en5-2.pdf [3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C++)
[4] 期限: ([2010年1月26日23:59まで])
[5] その他の制限
よろしくお願いいたします
いつから質疑応答スレになったんだ? 宿題を依頼し、片付けてもらうスレだろ?
>>175 あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他の発言はスルーの方向で。
気に入らない質問やその他の発言はスルーの方向で。
気に入らない質問やその他の発言はスルーの方向で。
気に入らない質問やその他の発言はスルーの方向で。
気に入らない依頼やその他の質問はスルーの方向で。
179 :
83 :2010/01/26(火) 07:46:44
>>97 ,98
遅くなりましたがどうもありがとうございました。
問題文の曖昧さと回答の多様性の擦り合わせの先に真の回答が あるんじゃね? ことプログラム作文に関しては 問題、回答、終了という気持ちのよいスケジュールが 立てられるとは思わないほうがいいかも 数学問題の影響受け過ぎ(てか数学が異常な学問)
>>180 が一体何を望んでいるのか、サッパリ分からない。
>>182 が
>>180 の望みをわかることも
>>180 は望んでいる
んだろう。しかしね。ここは2chでプログラミング
の宿題を片付けるスレで、いろいろと制約も多い
んで、質疑応答形式になってしまっているんだ。
>>184 が一体何を望んでいるのか、サッパリ分からない。
>>180 >問題文の曖昧さと回答の多様性の擦り合わせの先に真の回答が
>ある
そうなんだろうが、誰もがそういう水準に到達出来るわけじゃ
ない。国語の作文の授業みたいに完全に自由か、
数学の入試問題のように極度に不自由かのいずれ
か一つじゃないと皆やらないだろ?
188 :
デフォルトの名無しさん :2010/01/26(火) 10:49:19
>>178 遅くなりましたが
ありがとうございました!
189 :
デフォルトの名無しさん :2010/01/26(火) 10:52:56
[1] データ構造とプログラミング
[2]
ツリーにノードを追加するプログラムを完成させなさい。またプログラム中 に使われている要素 mitsugi, emura, satou, yonemura, murai, nakamura, kwkt がツリー上でどのように配置され ているか書きなさい。
以下の添付にあるプログラムを完成させろという課題です。
http://www.geocities.jp/pegasus_violet/en9-5.pdf [3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C++)
[4] 期限: ([2010年1月26日23:59まで])
[5] その他の制限
よろしくお願いいたします
190 :
デフォルトの名無しさん :2010/01/26(火) 11:00:16
>>189 void AddChild(struct NODE** p, char* name){
if (!*p) {
*p = (struct NODE *)malloc(sizeof (struct NODE));
(*p)->left = (*p)->right = 0;
strcpy((*p)->name, name);
} else {
AddChild(strcmp(name, (*p)->name) < 0 ? &(*p)->left : &(*p)->right, name);
}
}
192 :
デフォルトの名無しさん :2010/01/26(火) 13:15:50
193 :
デフォルトの名無しさん :2010/01/26(火) 13:23:04
[1] 授業単元:プロトタイプ宣言とか引数 [2] 問題文(含コード&リンク):[3〜6]∫x^2 dx(これだと正解は63)を計算するプログラムを作成せよ。 尚、積分本体(始点と終点)と関数本体f(x)に分けること。dx=1/N N=(10,1000…10000)誤差評価を行う事。積分範囲を変更すること。x^2の関数を変更すること。 [3] 環境 [3.1] OS:xbuntu [3.3] 言語:C++ [4] 期限: 2010年1月25日 [5] その他の制限:出力→cout,入力→cin,あと、簡単にお願いします。始まりは、 #include <iostream> using namespace std;です。
>>193 期限後なのに1時間も経たずにやってくれた人が
居たのはラッキーだったと思うべし
つーか期限後の宿題を片付けるのはややルール違反
気味
>>195 もういいからお前は消えろ。
二度とこのスレに来るな。
[1] 計算機概論 [2] 8bit整数が8つ与えられている。これをunsigned char配列と みなしa[]と名付ける。 unsigned char 整数のor,not演算だけを用いて1<=n<=8からa[n]を 計算するC計算式を出力するプログラム 例:a[]={1,2,3,4,5,6,7,8}; 出力 return n; a[]={1,0,1,0,1,0,1,0}; 出力 return !(!n or 11111110b); [3.1] OS:Mac OS-X [3.2] XCode 3.0(gcc 4.0) [3.3] C言語 [4] 1/25 正午(厳守) [5] 出来るだけ短いコードを出力するプログラムを書く事
仕切り男が不快だから、次のスレのテンプレから期限を外そうじゃないか。
気に入らない質問やその他の発言はスルーの方向で。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): A組、B組、C組にそれぞれn人の生徒がいて、 A組の生徒が一列に並んでいる。 このとき、B組の生徒をA組の生徒の隣に並ばせたいが なるべく隣同士で身長に差がないようにしたい。 どうやって計算すればいいでしょう? 加えて、C組の生徒もB組の隣に並ばせたい場合はどうすれば? (身長の配列) double height_a[n], height_b[n], height_c[n]; [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 2010年1月28日(木)16:00 [5] その他の制限: 特にありません B組だけを考える場合はn!、C組も考える場合はn!×n!の並び方を生成して、 身長差の合計を計算して最小ならその並び方を保存って感じでいいと思うんだけど そのやり方が思いつかない・・・ B組のみの場合 (B組をn!通り並ばせるループ){ diff = sum(n人の身長差の合計); if(diffが最小){ B組の並び順を保存 } } こんな感じになると思うんだけど・・・ お助けください。
>>201 a[n-1] と等価となる NOT, AND, OR の連結で得られる式を作るプログラムを作れ
だと思うが… 俺には難しい。 a[n] が 0〜255 を取り得るからなぁ
>>200 A<Bの時
A:1 2 3 4 5 6
B:1 2 3 4
こういう並びはアリですか?
ナシならA=Bの時と同じで
Bがどのように並んでも身長差の合計は同じですよね
★期限の過ぎた問題を依頼してはいけません
>>202 オレは加算演算子や添え字を使わずに
a[n],*(a+n)をnot,orのみで表現しろと言う事か
添え字が1からなので減算も必要だしめんどくさそうだね
206 :
200 :2010/01/26(火) 17:54:01
>>203 すいませんA<Bっていうのがよくわかりません
B組のほうが平均身長が高いという意味でしょうか?
身長の値については定まったものではなく任意です。
A,B,C組で人数は同じn人です。n=6だとすると下のようになります。
A:1 2 3 4 5 6 は固定で隣同士の身長差の和が最小となる
B:5 1 6 2 4 3 みたいな並び方をn!で総当りで調べる・・・
B組の並び順をint narabi_b[n]として、
narabi_b[n]にn!通りの1〜nの数字を入れる?
うーん・・・
>>206 人数の事ね。
不等号が逆だったごめん。
A,B,C組で人数は同じn人で
身長差の和が最小となる
という条件ならどう並んでも同じだよ。
(A1-B1)+(A2-B2)+(A3-B3)=(A1+A2+A3)-(B1+B2+B3)
>>202 添字n(1,2,3,4,5,6,7,8)から対応するa[n](これは任意の0~255
となり得る)をor とnotからなる式で表す。nと定数は
使っても良い。
(n or (! n or 11110011b) ) or !( !n or 10110111b) ....
という式のn=1,2,3,4,...,8 に対する値が指定したものに
なるように式を選ぶプログラムを作れ
って意味じゃないかなと思うが、これは多分不可能じゃないかと...
a[n] = n >> 1 とかの場合はどーすんだ?
ネタじゃないかとは思ってはいるが...
211 :
200 :2010/01/26(火) 18:07:01
>>207 確かにその通りです。
ちょっと私の書き方がよくなかったです。
身長差の絶対値の和というべきでした。
すいません。
212 :
デフォルトの名無しさん :2010/01/26(火) 18:52:01
>>212 #include <stdio.h>
#include <stdlib.h>
int average(int *nums, int size) {
int i, sum = 0;
for (i = 0; i < size; i++) sum += nums[i];
return size ? sum / size : -1;
}
static int min_distance_target;
int min_distance_cmp(const int *a, const int *b) {
int diff = abs(min_distance_target - *a) - abs(min_distance_target - *b);
return diff ? diff : (*a - *b);
}
void min_distance_sort(int *nums, int size, int target) {
min_distance_target = target;
qsort(nums, size, sizeof (int), (int (*)(const void*, const void*))min_distance_cmp);
}
void scan(int *nums, int size) {
int i, tmp;
for (i = 0; i < size; i++) {
scanf("%d", &tmp);
nums[i] = tmp;
}
}
>>212 つづき
void print(int *nums, int size) {
int i;
for (i = 0; i < size; i++) printf("%s%d", i ? " " : "", nums[i]);
puts("");
}
int main() {
int size, nums[100];
scanf("%d", &size);
if (100 < size) size = 100; // (最大で100とする)
scan(nums, size);
min_distance_sort(nums, size, average(nums, size));
print(nums, size);
return 0;
}
注:肝心のソートが手抜き(qsort頼り)だから先生によっては怒られるかも。
やむをえずstatic int min_distance_target; というグローバル変数も使ってしまってる。
216 :
備忘録 :2010/01/26(火) 20:49:27
C++でOpenGLの勉強してます。OpenGLなんですが、言語はC++なのでこちらで質問していいのかな?
OpenGLに限らずそういう専門的なものはあんまり期待しない方が良いよ。 ダメとは言わないけど
219 :
誘導 :2010/01/26(火) 21:46:59
>>220 age2 = (char*)malloc(sizeof(char));
これでは、char一文字分しか確保されない。
文字数nの文字列の場合、
age2 = (char*)malloc(sizeof(char) * n + 1);
と書く。+1は終端文字'/0'のために準備。
getline(age2, sizeof(age2));
これでは、int nとして渡すには不十分。
sizeof (char *)の意味になる。
文字数nの文字列の場合、
getline(age2, n);
と書く。getlineが実際にどう動くかは想像しかしてないけど。
223 :
212 :2010/01/26(火) 22:13:29
やはりここでOpenGLの質問は、あまりよくないようですねorz
>>219 様の誘導先は質問スレではないのでダメかな?
って思ってやめておいたのですが、そちらのスレに質問を書かせていただきました。
もしOpenGLのことも分かる方が居ましたらOpenGLの掲示板に書かせていただきましたので
ご回答していただけるとすごく嬉しいです><
>>225 void DspArray(int *p,int n){
while(n--){
printf("%d ",*(p++));
}
printf("\n");
}
こう言う事?
228 :
226 :2010/01/26(火) 23:19:42
>>225 よく読んでなかった。
void DspArray(int array[],int n){
int i;
for(i=0;i<n;i++){
printf("%d ",array[i]);
}
printf("\n");
}
231 :
デフォルトの名無しさん :2010/01/27(水) 01:17:34
232 :
デフォルトの名無しさん :2010/01/27(水) 01:27:49
[1] 授業単元:プロトタイプ宣言とか引数 [2] 問題文(含コード&リンク): 得点を入力して以下のルールに従った成績を返す関数を実装せよ。 90点以上 S 80点以上 A 60点以上 B それ未満 C ()の中に何か入るらしいです () score(int sc) { [3] 環境 [3.1] OS:xbuntu [3.3] 言語:C++ [4] 期限: 2010年1月28日 [5] その他の制限:出力→cout,入力→cin,あと、簡単にお願いします。始まりは、 #include <iostream> using namespace std;です。
233 :
デフォルトの名無しさん :2010/01/27(水) 01:29:01
[1] 授業単元:プロトタイプ宣言とか引数 [2] 問題文(含コード&リンク): 入力された数字が偶数なら、trueを返す関数。それ以外ならfalse ()の中に何か入るらしいです () even(int sc) { [3] 環境 [3.1] OS:xbuntu [3.3] 言語:C++ [4] 期限: 2010年1月28日 [5] その他の制限:出力→cout,入力→cin,あと、簡単にお願いします。始まりは、 #include <iostream> using namespace std;です。
>>227 http://codepad.org/hRbZ2Z1N 左端の数字は元の行数。修正した行には/*修正*/
修正内容は
・後半のソートの呼び出しの引数が逆になっていたのを修正(26行目)
・ & を && に変更(42行目)
・ ++p などを p++ に変更(11,42-45行目)
N=10000だと表示がアレなんだがN=100くらいだとちゃんと表示される
>>232 char score(int sc){
if(sc>=90) return 'S';
if(sc>=80) return 'A';
if(sc>=60) return 'B';
return 'C';
}
>>233 bool even(int sc){
return (sc%2 == 0);
}
237 :
デフォルトの名無しさん :2010/01/27(水) 03:28:16
>>235 実行してみたんですが、できないんですが、どうしてでしょうか
>>237 「できないんです」 は禁句
何を期待したか、どんな操作をしたか、そしてどんな結果になったかの 3 点を書かないと
何が問題なのか見た人には分からない
240 :
227 :2010/01/27(水) 12:07:55
>>234 ありがとうございます。大変面倒な課題のほうたった2時間余りで
迅速にやって頂けて試験前なので助かりました。
(1月31日位になるかと思ってました)
実はもっと長いもの(数値計算関連で長さ約300行)も出てい
るので(そちらのほうは必須ではないですが試験が出来なかっ
た場合に提出していれば不可になる確率がずっと低くなるそうで)
そちらもやって頂けると非常に嬉しいのですがよろしいでしょうか?
241 :
147 :2010/01/27(水) 13:09:03
147をどなたかお願いできないでしょうか? よろしくお願いします。
242 :
デフォルトの名無しさん :2010/01/27(水) 13:37:16
>>232 #include <iostream>
using namespace std;
char score(int sc){
if(sc>=90) return 'S';
if(sc>=80) return 'A';
if(sc>=60) return 'B';
return 'C';
}
fatal error LNK1120: 外部参照 1 が未解決です。
未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。
とでるんですが…
243 :
デフォルトの名無しさん :2010/01/27(水) 13:38:14
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): キーボードから正の整数nを入力し、n!を計算して画面表示するプログラムを 作成せよ。ただし、階乗を計算する関数のプロトタイプを「void kaiyo(int , int *)」 とし、第1引数にnを、第2引数に計算結果を格納する変数のポインタを指定すること。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 2010年1月28日木 [5] その他の制限: よろしくお願いします
>>245 #include <iostream>
void kaiyo(int , int *);
int main() {
int n, ret;
std::cin >> n;
kaiyo(n, &ret);
std::cout << ret;
}
void kaiyo(int n, int *ret) {
*ret = 1;
for (int i = 1; i <= n; i++) {
*ret = *ret * i;
}
}
>>234 よくこんな糞問題に手を出すなぁw
show()が2つあるのはソート前後の比較用でしょ
ソート途中を示すものじゃないと思うよ
N=10000でもエディタの設定で折り返しなしにすれば
見れないことは無いけど1行8000バイトだからひどいもんだ
[1] 授業単元:情報処理演習
[2] 問題文(含コード&リンク):
次のプログラムで作成される縞パターンを縦にした画像を作成するプログラムを作成せよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10454.txt [3] 環境
[3.1] OS: (Windows/Linux/等々)
Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc 3.4
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
提出期限2010年1月29日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
特にないです
よろしくお願いします。
>>250 txtでうpしてるのに何でインデント潰すの?
必要なスペースまで潰すのは嫌がらせ?
//if(i>=75 && i<=125){
if(j>=150 && j<=250){ //元々の数字がマジックナンバーなので好きに替えてくれ
sin のマクローリン展開とコンピュータ定義のsinとの誤差を求めよとの問題なのですが エントリーポイントを定義しなければならないとエラーが出ているのですが解決方法がわかりません #include <stdio.h> #include <math.h> #define gosa 0.00001 double sa(double x){ double d,dt; int k; k=1; d=0; dt=x; d=d+dt; while(1){ if(fabs(sa(x)-cos(x))<gosa)break; } dt=dt*(-1)/((k+1)*(k+2))*x*x; k=k+2; return fabs(sa(x)-cos(x)); } int main(){ double x; x=0.00; while(1){ printf("x=%3f cosの差=%12f\n",x,sa(x)); x=x+0.01; if(x<=1.00)break; } } どうかよろしくお願いします 計算式が間違ってる・・・とかはスルーして貰って結構です [3] 環境 [3.1]windows vista[3.2] visual C++ 2008[3.3] C++[4] [無期限]
254 :
デフォルトの名無しさん :2010/01/27(水) 21:34:44
>>249 #include <iostream>
using namespace std;
char score(int sc){
if(sc>=90) return 'S';
if(sc>=80) return 'A';
if(sc>=60) return 'B';
return 'C';
}
mainをどこに入れるんですか?
依頼者が見てるか確認してから貼るのがマナーだよん
見てるかどうか確かめても返事がない場合や、見てそうにも
ない場合で、世間を騒がせたまま逃げ出した依頼者の尻拭い
をしたいという気持ち(大抵の場合は杞憂)でコードを貼る
場合はアンカーは
>>1 にしようぜ
>>252 スレタイ嫁
hello worldからやり直して貼り付けろカス
>>254 http://codepad.org/L4M6uCey 問題自体は関数を実装せよ、ということでしたから、回答者は関数 score() だけを回答した(と思います)のですが、
実際に score() の動作を確かめたいというのであれば、こんな感じで main() から書かないといけないでしょうね。
>>255 > 依頼者が見てるか確認してから貼るのがマナーだよん
そんなマナーがあるのですか?そんなマナーにどんな意味があるのですか?
>>252 エラーは要約しないで、丸ごとコピペしろ。
259 :
デフォルトの名無しさん :2010/01/27(水) 22:05:15
>>257 プログラムを作成せよじゃないから多分そうですね。一応、
>>236 はどうすると実行ができますか?
260 :
デフォルトの名無しさん :2010/01/27(水) 22:23:44
>>261 next_permutation使えば?
C限定ならまだ分かるけど。
>>263 >[3.3] 言語: C++
>[5] その他の制限: 特にありません
え?
266 :
200 :2010/01/27(水) 22:54:07
>>261 うおおーありがとうございます!
Cの最低限しか学んでないんで
C++っぽいclassとかの使い方の勉強にもなります。
>>262 ぐぐるとそれ使えばいけそうですね。ありがとうございます!
いやーそうか、やりたいことのキーワードで検索すれば
ライブラリであったりするんだな。
今回は順列でpermutationか。
そういった意味でも勉強になりました。ありがとうございました!
>>252 これで動くと思うけど問題の意味を取り違えてるような
あとなぜかcosが出てきたけどsinに書き換えといた。
#include <stdio.h>
#include <math.h>
#define gosa 0.00001
double sa(double x){
double d,dt;
int k;
k=1;
d=0;
dt=x;
d=d+dt;
while(1){
if(fabs(d-sin(x))<gosa)break;
dt=dt*(-1)/((k+1)*(k+2))*x*x;
d=d+dt;
k=k+2;
}
return fabs(d-sin(x));
}
int main(){
double x;
x=0.00;
while(1){
printf("x=%3f sinの差=%12f\n",x,sa(x));
x=x+0.01;
if(x>1.01)break;
}
}
>>268 理由は、必要としているのは私ではないから。
便利な道具があることを教えるのもいいことだと思います。
個人的には、(テーマが「宿題」ということもあり)ブラックボックスのままよりは、
多少勉強のネタになる状態で提供するのも、悪くはないかなという意見ですが。
270 :
200 :2010/01/27(水) 23:52:51
わたし非常に勉強になりましたのでいいじゃないですか!
>>269 えと、あなたのレスに疑問を抱いたのに
質問者にあれこれ問い質しても意味不明ですよね?
自分が学生時代のころは
特に明記の無い限り標準関数の車輪は減点対象でしたので。
>>270 私もちょっと困惑気味…
>>271 「next_permutation使えば?」と言われましたが、使う機会の無い私に言われるのも
意味不明ですから、質問者へのアドバイスとして言われればよいと判断したまでです。
また、何が減点対象で何が加点対象かは、時代背景も無いとはいいませんが、主には
講義や目的や教授の方針に依るよるでしょうから、質問者が適切に判断されれば良いと
思いますけれど。車輪を自分で発明をするのも勉強のうちですし。
「講義や目的や」は「講義の目的や」の間違いです。すみません。
基本的にここ、質疑応答スレじゃないんで。 知力、実力共に実態が質問者と教授回答者 であっても、形式的かつ論理的かつ法的には 依頼者と作業実行者の関係になります。
要するに宿題代行を依頼する人もコード記述を代行する人も かかる行為が世に100%賛同されているとは 言い切れないという認識は常に頭の片隅にでも...
>>272 明らかな糞ソースを張って突っ込みが入ったとしても
苦情は質問者に言ってくれ!ってことね。おkw
277 :
デフォルトの名無しさん :2010/01/28(木) 02:10:52
依頼者が代行者のコードに苦情を言うのはマナー違反 だが程度問題 偶然の別代行者が代行者のコードを見てあれこれ アドバイスするのは美徳でないとは言い切れない。 別の代行者からコードを受け取ったことがわかって いる時点でコードを渡すのは美徳とは言い切れない。 複数の代行者が同調していたとしても 依頼者の依頼の仕方が悪いと決めつけられ るかは状況依存
>>278 不毛だな
宿題スレ代行者のレスを添削するスレ
とか出来そうだ
280 :
233 :2010/01/28(木) 03:01:29
>>236 で回答もらったんですがboolってやつを習ってないんですよね…double.int.charとかは習ったんですが…しかしそれ以外だと出来ないとするとそれが正解ですよね
>>280 bool を int に置き換えればOK
282 :
デフォルトの名無しさん :2010/01/28(木) 16:20:52
283 :
257 :2010/01/28(木) 18:04:29
>>282 ん、そうです。自力でかけば力がつくことでしょう。
284 :
デフォルトの名無しさん :2010/01/28(木) 18:16:16
>>283 これじゃダメなんですよね…
#include <iostream>
using namespace std;
int even(int num) {
if(0 == sc%2) {
return true;
}
return false;
}
>>284 int main() から実行されますから、int main() を書かなくてはいけません。
>>257 をちょっと変えればいいです。がむばってください。
>>284 じれったいw
boolをintに書きかえれ、と教えてもらってるでしょうに。
booをintに。
bool even(int sc){
return (sc%2 == 0);
}
を
int even(int sc){
return (sc%2 == 0);
}
に。
>>284 //int even(int num) {
int even(int sc) {
にしましょう
true/falseで返すなら
bool even(int sc) {
にしたほうがいいと思います。
int even(int sc) {
ならば
return 1;
return 0;
としたほうがいいと思います。
288 :
286 :2010/01/28(木) 18:30:39
あ、失礼。
元々、
>>233 > [2] 問題文(含コード&リンク): 入力された数字が偶数なら、trueを返す関数。それ以外ならfalse
> [3.3] 言語:C++
なのか。だったら
bool even(int sc){
return (sc%2 == 0);
}
か。
自分で書いて使うだけなら括弧はいらないが、 省略する癖はつけないほうが良い
だからといって return (0)とか return (1.0)とか return ("aho-desuka?") とかはやり過ぎ 式には括弧を付ける癖をつけましょう 失礼しました
292 :
デフォルトの名無しさん :2010/01/28(木) 18:50:37
#include <iostream> using namespace std; int even(int sc){ return (sc%2 == 0); } int main() { int num; cout << "> "; cin >>num; cout << even(num); return 0; } これじゃダメなんですよね…boolっていうの使えないからもう滅茶苦茶ですよね
293 :
デフォルトの名無しさん :2010/01/28(木) 18:52:44
return 0とかreturn 1とかは何か習ったみたいですがboolとかどこにもないんですよね
>>292 #include <iostream>
using namespace std;
bool even(int sc){
return sc%2==0;
}
int main(){
int num;
cout << ">";
cin >> num;
cout << boolalpha << even(num) << endl;
return 0;
}
習っていようがいまいが、true/falseで返せってのはboolを使えと言う事だから使うしかない。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 10個の要素を持つ動的な整数配列を作るプログラムを作成しなさい。 動的な配列へのポインタを整数ポインタに代入しなさい。 次に、ポインタ算術または配列の添字を使って、1から10までの値を配列を構成する整数に代入しなさい。 最後に、代入した値を表示し、メモリを解放しなさい。 [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:2010年1月29日16:00まで [5] その他の制限: 特にありません よろしくお願いします。
297 :
デフォルトの名無しさん :2010/01/28(木) 20:01:53
>>294 三行目に書いたところは、scじゃなくてnumでした。すみません。boolalphaってなんですか?
>>296 #include <iostream>
int main() {
int *p = new int[10]; // 動的な配列へのポインタを整数ポインタに代入
for (int i = 0; i < 10; i++) {
p[i] = 1 + i; // ポインタ算術または配列の添字を使って、1から10までの値を配列を構成する整数に代入
}
for (int i = 0; i < 10; i++) {
std::cout << p[i] << std::endl; // 代入した値を表示し
}
delete p; // メモリを解放
return 0;
}
[1] 授業単元:コンピュータリテラシー
[2] 問題文(含コード&リンク):
あるファイルの名簿を呼びだし、名前もしくは名字で検索しその結果を新しいファイルに保存する。あるファイルの名簿は特に決められていない。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10456.txt [3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名とバージョン:BCC Developer Borland C++ 5.5.1
[3.3] 言語:C++
[4] 期限:2010年1月29日12:00まで]
[5] その他の制限: 上記のプログラミングの他に fp while float else puts gets
strlen strcpy strcat 以外は使用しないでください。授業で習っていないので…
よろしくおねがいしまつ。
PC規制で携帯からですみません…
301 :
デフォルトの名無しさん :2010/01/28(木) 20:40:23
>>193 今更なんですが、『厳密解』って所に『double exact=63』ってあるんですが、これを計算するプログラムを作るんじゃないんですか?これをプログラムに書いてもいいんですかね?
302 :
301 :2010/01/28(木) 20:42:52
でも //厳密解 の部分は出力される結果は同じですね。入れるとどう違うんですか
303 :
298 :2010/01/28(木) 20:43:48
て、訂正!
>>296 さん気をつけて。
×delete p; // メモリを解放
○delete[] p; // メモリを解放
305 :
デフォルトの名無しさん :2010/01/28(木) 20:52:41
306 :
デフォルトの名無しさん :2010/01/28(木) 20:56:54
ごめんなさい。納得しました
307 :
デフォルトの名無しさん :2010/01/28(木) 20:57:01
>>299 > fp while float else puts gets
>strlen strcpy strcat 以外は使用しないでください。
その条件じゃオレには無理。
//(前略)
fin=fopen(filename1,"r");//fout=fopen(filename1,"r");
fout=fopen("kojin.txt","w");//fin=fopen("kojin.txt","w");
for(i=0;i<100;i++)
if(fscanf(fin,"%s%s%s%s",&date[i].myouji,&date[i].name,&date[i].jusho,&date[i].denwa)==EOF)break;
fclose(fin);//fclose(fout);
printf("名前もしくは名字=");
scanf("%s",&ss);
for(i=1; i<=5; i++){
if(strcmp(ss,date[i].myouji)==0){
//printf("%s %s %d %d\n",date[i].myouji,date[i].name,date[i].jusho,date[i].denwa);
fprintf(fout,"%s %s %d %d\n",date[i].myouji,date[i].name,date[i].jusho,date[i].denwa);
k=k+1;
}
if(strcmp(ss,date[i].name)==0){
//printf("%s %s %s %s\n",date[i].myouji,date[i].name,date[i].jusho,date[i].denwa);
fprintf(fout,"%s %s %s %s\n",date[i].myouji,date[i].name,date[i].jusho,date[i].denwa);
k=k+1;
}
}
fclose(fout);//fclose(fin);
}
[1] C言語プログラミング演習(大学任意科目) [2] コマンドラインで指定された各テキストファイルに対して個別に以下の処理を行うCプログラムを作成 ☆テキストファイルを通読し、各行のインデント深度の最大値を求める(それをNとおく) ☆テキストファイルの先頭から再度読み出し、それぞれの行についてインデント深度がnなら ば、インデント深度をN-nに変更したものを標準出力する。 ☆新しいテキストファイルのNが判明した時点で、その改行とファイル名、改行を標準出力する。 ここでインデント深度とは、行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合 深度=nとする。 [3] [3-1] Windows XP Professional Edition [3-2] Visual-C++ 6.0 SP6 [3-3] C言語 [4] 2/1迄 [5] stdio.hを使用可 (他は暗黙的にNG)
310 :
309 :2010/01/28(木) 21:24:53
すみません。転記ミスです × ☆新しいテキストファイルのNが判明した時点で、その改行とファイル名、改行を標準出力する。 ここでインデント深度とは、行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合 深度=nとする。 ○ ☆新しいテキストファイルのNが判明した時点で、改行とそのファイル名、改行を標準出力する。 ここでインデント深度とは、行頭からタブ、空白以外の文字が現れるまでタブがn回(n>=0)現れた場合 深度=nとする。
>>308 わざわざご返答ありがとうございます。そうですか…無茶振りすいません。
一応引き続き、
>>299 お答え出来る方いらっしゃいましたら厚かましいですが宜しくお願い致します…
>>310 スペースがいくら続こうともタブが一つも無ければ深度=0ですか?
>>313 すみません。習ってないのでわからないです…
315 :
デフォルトの名無しさん :2010/01/28(木) 22:03:34
317 :
デフォルトの名無しさん :2010/01/28(木) 22:06:10
318 :
316 :2010/01/28(木) 22:08:10
あ、Resultsの中の for (i = 0; i < N; i++) printf("%d:%d\n", i, COM[i]); for (i = 0; i < n; i++) printf("%d:%d\n", i, MAN[i]); printf("count = %d\n", count); この三行はデバッグ用なので不要です。消しておいてください。
>>311 その条件で問題を解くのは不可能だから、
あきらめるか、条件を見直すしかないね。
>311 あ、コマンドラインパラメタとパイプ・リダイレクトを使えばいけるな。 type 入力ファイル | 宿題.EXE 検索語句 > 出力ファイル こんな起動方法はあり?
322 :
デフォルトの名無しさん :2010/01/28(木) 22:44:06
323 :
デフォルトの名無しさん :2010/01/28(木) 22:49:08
>>321 ありがとうございます!
なんとかのりきれそうですm(_ _)m
>>320 あの…
名簿の人数が大体5人と考えてみても無理でしょうか?
その中から一人検索するので…
条件が習ってる範囲なので変えることができないのですが。
>324 データ数は関係ない。 その条件だとファイルの読み書きができない。 使用可能関数に記述もれは無いのか? fで始まる名前の関数を習って無いのか?
>>299 > fp while float else puts gets
>strlen strcpy strcat 以外は使用しないでください。
これだけだと、ファイルに入出力できない。
>>320 タソが言ってる方法もあるが・・・
> 名簿の人数が大体5人と考えてみても無理でしょうか?
人数は関係ないかと。
というか、名簿のフォーマットは決められていないですか?
ファイルの入出力関数について何も習ってないならば、
この問題は解けないと思います。
とりあえず、講義資料とかノートとか読み返して、
fgetsとかfputsとかを習っていないか確認してください。
>>324 >上記のプログラミングの他に fp while float else puts gets
>strlen strcpy strcat 以外は使用しないでください。授業で習っていないので…
それ、あなたが勝手に付けた条件だよね?
上記に記載されていない
fopen,fclose,scanf,printf,struct等使ってるけど
それはいいの?
fopenやfcloseは使ってるのに
fprintf,fgets,fputs等のファイル入出力関数は使っちゃダメなの?
・問題文は、出題されたまま全文を書いてください。
翻弄された回答者が(´・ω・)カワイソス
>>320 >>326 すみません!!見直したところfscanf、fprintf、fputsとfgetsも使ってました。
不注意でご迷惑お掛けしました…
>>330 それがEOFとbreakがつかえないもので…すみません。
連投すみません。これ以上書くと私物化も甚だしいので控えます。 頂いたヒントで頑張ります。情報不足でご迷惑お掛けしました。 本当にありがとうございました。
下痢便飲みたいのかそうか
334 :
デフォルトの名無しさん :2010/01/29(金) 16:23:54
>>334 #include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
FILE *fp,*fin;
char s[256]="gomibako";
char fname[256], buff[256];
long pos;
printf("出力するファイル名を入力せよ。\n");
fgets(fname,256,stdin); //スペース入りファイル名なので
fname[strlen(fname)-1]='\0'; //\n → \0
strcat(fname, ".txt");
fp = fopen(fname, "a"); fin = fopen("word.txt","r");//fpは"a"追記モード
if ((fp == NULL)||(fin == NULL)) {
printf("ファイルオープン失敗。\n");
exit(EXIT_FAILURE);
}
fseek(fp,0,SEEK_END); //ファイル名出力は最初の1回目のみのようなので
pos=ftell(fp);
if(pos==0)
fprintf(fp,"%s\n",fname);
while(fscanf(fin,"%s",buff)!=EOF)
if(strcmp(buff,s)!=0)
fprintf(fp,"%s\n",buff);
fclose(fin);
fclose(fp);
printf("読み込み完了/書き込み完了。\n\n");
return 0;
}
336 :
デフォルトの名無しさん :2010/01/29(金) 20:20:50
337 :
200 :2010/01/29(金) 22:56:13
>>200 ですがおかげさまでプログラムを完成させられました。
do{
}while(next_permutation(intary.begin(), intary.end()));
を使いました。
ところで
>>200 ではn!もしくはn!×n!の組み合わせを計算することになりますが
nが10だとn!×n!は1.31681894 × 10^13もの組み合わせになります。
この辺をうまいことごまかす方法ってないものでしょうか。
厳密な解でなくともそこそこの解を短時間で計算できる、みたいな・・・。
338 :
デフォルトの名無しさん :2010/01/29(金) 23:26:09
>>335 さん。
詳しい解説助かります。本当にありがとうございました。
>>337 「B組の隣にA組を並ばせる」「身長差を最小にする」
の2つを同時に満たす解があるとは限らないので、よくあるのは重みWを利用して
点数=(1-W)×(Bの隣にAがいるか?)+W×(身長差が最小か?)
で並びを評価する。2つの条件のどちらを重視するかでWの値を調節する。
あとは色々とアルゴリズムあると思うけど、ランダム山登り探索でもすればいいんじゃないかね
@今の並びの点数を計算
Aランダムに2つ選んで交換してみる
B交換したあとの点数を計算
C点数が高くなっていたら交換を採用、低くなっていたら元に戻す
を繰り返していって、何回か連続で失敗したら終了。
>>339 これは組み合わせ最適化ってカテゴリになるんですかね?
う〜ん、なかなか手の込んだことしないといけないっぽいなぁ。
>>337 計算途中で、過去の最小を超えたら中止したらいいんじゃね?
少しはラクになるはずw
身長順にソートして、 隣の組の子と手を繋がせて、 A組の子を元の順に並べる。 これじゃダメなの?
344 :
342 :2010/01/30(土) 11:33:03
あ、中止つうのは、端折って次へ、という意味。
>>341 宿題のレベル超えるから最適化アルゴリズムでも調べてくれ
>>342 それをやったとしても計算量のオーダーには寄与しないよ
テクニックとしては重要だが。
>>343 そのやり方だと「AとBが隣り合う」という条件を完全に満たして、
「身長差が小さい」についてはそこそこ、という解が得られる。
そういう解が欲しいときにはその手の方法がベストだと思う。
>>200 の問題文を見る限り、その解釈でいいと思う。
346 :
デフォルトの名無しさん :2010/01/30(土) 13:21:56
Microsoft社 Visual Studio C++のソフトウェアを用いて チャットアプリケーションを作れと言われたのですが、 当方C言語系がとても苦手で困っています;; システムの仕様は ・1対1の環境でのみ動作。 ・サーバ側はポート番号を指定して、クライアントからの接続を待つ。 ・クライアント側はサーバのIPアドレスとポート番号を指定して、サーバに接続する。 ・この時の通信はTCPで行う。 ・クライアントが通信をやめたい場合は"endc" ・サーバ側がやめたい場合は"ends"と入力。 ・WinSockを使用してWindowsのコンソールプログラムとして基本的な簡易なチャット 以上の条件でプログラミングしていただけると幸いです。 よろしくお願いします m__)m
348 :
200 :2010/01/30(土) 14:21:39
身長順にソートできれば確かに楽になりそうですね。
ただ
>>200 の問題はもっと複雑なものの一部分を抜き出したもので、
本当は身長順というよりも2次元平面上で距離が近いもの同士って感じなんです。
そうなると・・・ちょっと安易にはソートできないかな?
なんにしても宿題としては提出してしまっているので自分が気になってるだけです。
最適化アルゴリズムでいろいろ見てみようと思います。
Cマガのプログラミング研究会を思い出した。
>>345 343じゃないけど、
>>343 のやり方で、
身長差が最小とならない場合って、どんな場合?
計算してみたら、常に最小になりそうなんだが。
それとも「そこそこ」ってのは
「最小にならない場合がある」って意味ではない?
[1] 授業単元:プログラミング演習U [2] 問題文(含コード&リンク): □1□2□3□4□5□6□7□8□9 の□に四則の演算子(+,−)や空白を入れて100なるような 小町算の全ての解を求めるプログラムを作成すること 例えば 12 + 3 - 4 + 5 + 67 + 8 + 9 = 100 123 - 45 - 67 + 89 = 100 [3] 環境 [3.1] OS: Windows [3.2] VC3.5SP1 [3.3] 言語: C++ [4] 期限: 本日4時まで [5] その他の制限: 特にないです かなり切羽詰まってるのでお願いします…
352 :
350 :2010/01/30(土) 15:42:36
と、思ったけど、AとBが隣り合わない場合を考慮すると、 343のやり方では、身長差が最小とならない場合がある、 という意味だったのね。 失礼、読み違えてました。
[1] 授業単元:コンピュータグラフィック [2] 問題文(含コード&リンク):10468.txt モノクロ画像を読み込み,(319,239) の画素値を 0 とする 画像を関数を使用して読み込み,それを 2 次元配列に格納する関数を作成する. 指定した画素の画素値をセットする. 2 次元配列に格納していた画像を 1 次元配列に再度格納し,関数を使用して画像ファイルとして書き戻す. [3] 環境 [3.1] OS:WindowsXP [3.2] VC 05 [3.3] 言語:C [4] 期限: ([2010年2月1日01:00まで] [5] その他の: 前スレで24日辺りに回答を頂いた問題なのですが、差し戻されました 自分なりに分かる部分を書き直してみましたが、一向に解決しないので回答をいただけないでしょうか?
>>351 31分でコードを作ってもらおうという考えは非常識
[1] 授業単元:計算機自論 [2] 問題文(含コード&リンク): LISPはCと同じで関数型言語ではないということを200文字以内で表現してください [3] 環境 [3.1] OS: すべて [3.2] コンパイラ名とバージョン: すべて [3.3] 言語: 日本語 [4] 期限: 無期限
358 :
デフォルトの名無しさん :2010/01/30(土) 19:15:44
>>358 #include <stdio.h>
int main(int argc,char *argv[]){
FILE *fp1=NULL,*fp2=NULL;
char buf;
int i=1;
int result=0;
if(argc!=3){
printf("引数が不正\n");
result=-1;
goto EXIT;
}
fp1 = fopen(argv[1],"rb");
fp2 = fopen(argv[2],"w");
if(fp1==NULL || fp2==NULL){
printf("file open error\n");
result=-1;
goto EXIT;
}
while(fread(&buf,1,1,fp1)){
fprintf(fp2,"%02X ",buf);
if(i%16==0)
fprintf(fp2,"\n");
i++;
}
EXIT:
if(fp1) fclose(fp1);
if(fp2) fclose(fp2);
return result;
}
361 :
デフォルトの名無しさん :2010/01/30(土) 20:26:12
360さん。回答ありがとうございます。 早速、このソースでコンパイルしたところ問題なくビルドは出来ました。 しかし、その後の「デバックなし」で実行してみましたが、 「引数が不正」と表示されてしまい、上手く出来ません。 これは何故でしょうか?しょぼい質問ですいません・・・。
>>361 ≪問題と条件≫
第1引数に指定したファイルからバイナリーモードで1バイトずつファイルを読み込み、
ファイルの内容を16進数で示したものを第2引数に指定したファイルに書き込むプログラムを作成せよ。ただし、16バイトごとに改行を入れること。
(実行)
>free1.exe test.txt test2.txt
でしょ?
>>361 横からだけど、
今の場合引数っていうのは、プログラム実行時にプログラム名の後に続けて書くもの
>free1.exe test.txt test2.txt
この場合はtest.txtが第1引数で、test2.txtが第2引数
例えばここを
>free1.exe hoge.txt fuga.txt
にしても、ちゃんとhoge.txtから読み込んでfuta.txtに出力するような
プログラムを作れっていうのが、この課題なんじゃないかな
364 :
デフォルトの名無しさん :2010/01/30(土) 20:45:52
365 :
デフォルトの名無しさん :2010/01/30(土) 20:51:31
>>363 はい、test.txtとhoge.txtは、あらかじめ作成している状態です。
分かってねー
367 :
363 :2010/01/30(土) 20:59:19
>>365 だったら実行時に指定しないと。
VC++でどうやって指定するか分かんないけど
[1] 授業単元: プログラム演習U [2] 問題文(含コード&リンク): 3次元空間において線分が平面を通過しているか判定するプログラムを作りなさい (線分の座標(x1,y1,z1) (x2,y2,z2)と平面の四隅の座標は入力する) 平面を通過していても平面の四隅の中に交点がない場合は通過していないものとする [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VC [3.3] 言語: C [4] 期限:2010/2/8 お願いします
370 :
デフォルトの名無しさん :2010/01/30(土) 22:43:05
>>370 Cドライブ直下にfreeフォルダを作成します。
C:\free です。
>>360 のソースを free1.c などとしコンパイルして free1.exe を作成します。
作成された free1.exe を C:\free フォルダ内にコピーします
C:\free\free1.exe です。
作成済みのデータ test.txt も同様に C:\free フォルダ内にコピーします
C:\free\test.txt です。
C:\free フォルダの中には free1.exe test.txt 2つのファイルがあります。
コマンドプロンプトを起動します。
スタート>ファイル名を指定して実行>cmd.exe OKボタン
コマンドプロンプトが立ち上がりました。
C:\............... >_ (_は点滅状態)
となります。
カレントディレクトリを C:\free に移動します。
C:\............... >cd c:\free
です。
C:\free>_ (_は点滅状態)
になりました。
この状態で
C:\free>free1.exe test.txt test2.txt
を実行します。
C:\freeフォルダの中に test2.txt が作成されました。おしまい。
373 :
デフォルトの名無しさん :2010/01/30(土) 23:03:50
>>340 ありがとうございます!助かりました!
課題4、5については引き続きどなたかよろしくお願い致します。。
375 :
デフォルトの名無しさん :2010/01/31(日) 00:04:17
372さん。回答ありがとうございます。 アドバイス通りにしてみて、実行したのですが、 「Lhaplus slef extractor」というのが 表示されます。展開先のフォルダはC:\free を選べるのですが、 展開されるファイルが何故かfree1.cしか選べません・・・。 何度も見直して実行したのですが、結果は一緒です。 これは、なにか他に原因があるのでしょうか?
>>375 それ以上の質問はスレ違いどころか板違い。
乱数は言語学習レベルの人がうかつに手を出すべきものじゃない。 補助的に使うのならともかく 高度に依存するプログラムの生成には高度な専門知識が必要で 専門家”集団”レベルで扱うべきもの。 みだりに使う癖だけは付けないほうが良い 以上自戒を込めて
379 :
378 :2010/01/31(日) 02:37:05
誤爆につき謝罪
381 :
デフォルトの名無しさん :2010/01/31(日) 07:47:50
漠然としすぎ
383 :
357 :2010/01/31(日) 15:40:24
ほとほと困っています。どなたか回答お願いします。
384 :
◆QZaw55cn4c :2010/01/31(日) 15:41:15
[1] 自主課題:前スレ
http://pc12.2ch.net/test/read.cgi/tech/1260532772/776 関連
[2] パイプ機能(prog1|prog2|prog3) を有するシェルを作成せよ。
[3.1] WindowsXP/cygwin または Linux(Vine linux 4.2)
[3.2] gcc3
[3.3] C
[4] 特になし
前スレ
http://pc12.2ch.net/test/read.cgi/tech/1260532772/776 を解こうとして挫折しました。
なにとぞ、お手本のプログラムを示していただきたく、お願いいたします。
私のほうでは、
まず、pipe() -> fork() ->read()/write()またはgetchar()/printf() の流れでチャイルドプロセスの鎖の間をパイプでつなごうとしましたがうまくいきません。
プログラムは
http://codepad.org/lkCrVtuo です。
#define LOWLEVEL ではパイプが頭からお尻までつながって、 read()/write() 低水準入出力てデータが渡り、最後にプロンプトが表示されます。
ところが、
/* #define LOWLEVEL */ とコメントアウトした場合、FILE stdin, stdout でデータの読み書きを行うのですが、EOF を検出できず
チャイルドプロセスがロックしてしまいます。
ヒントでもかまいませんので、この種のプログラムのやりかたをどうか教えていただきたくよろしくお願いいたします。
>>384 > EOF を検出できず
EOFではなく0x0Aを検出したらどうでしょ
息抜きにって下さい。 自分は分からないっす お客様に「今後の夏のセールには、必ず連絡してほしい」といわれた時 お客様に「もらいもので気に入らないので他の商品と取り替えて欲しい」といわれた時 販売員の正しい行動を。
上司に聞け
390 :
384 :2010/01/31(日) 23:00:10
>>389 提示されたコードを読ませていただき、私のコードがうまくいかなかった原因がわかりました。
int fd[2];
pipe(fd);
dup2(fd[0], 0);
close(fd[0]);
のあとに、
close(fd[1]);
が必要でした。
その他、いろいろと示唆にとむコードを掲示していただき、ありがとうございました。
>>391 追加ですいません
バイナリファイルです
>>391 名前〜年齢間のタブ数が一定ではないけどそのルールはどうなってるの?
394 :
デフォルトの名無しさん :2010/02/01(月) 05:48:48
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 住所録の機能を実現するプログラムを作成せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2月3日 17時まで [5] その他の制限: 特になし
>>384 ,390
EOFの検出はfeof()でできるよ。
>>391 連投スマソ。
構造体も,fwrite() も使ってなかったorz
忘れて下さい。
[1] 授業単元: C++実習 [2] 問題文(含コード&リンク): ●自由にクラスを設計する 設計図を提出 : クラスのデータメンバ、メンバ関数、仕様、 使い方等を詳しく説明したドキュメント 形式自由 (ただし電子化されたものに限る) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VisualStudio2008 [3.3] 言語: C++ [4] 期限: 2010年2月7日まで プログラム作成ではないのですが、よろしければよろしくお願いします。
設計図て。図まで書けと申すか。
401 :
デフォルトの名無しさん :2010/02/01(月) 11:32:51
配列の使い方がイヤすぎるw
schaffleって英語じゃないよな?何語?
シャッフルしてランダムな結果を返すならシャッフル関数は2つもいらない気がする
schaffle1(int n, int a[]) { while(n > 1) { int i = rand() / (RAND_MAX + 1.0) * n + 1; int temp = a[n]; a[n--] = a[i]; a[i] = temp; }} schaffle2(int n, int a[]) { int i, j, temp; for(i=1; i<=n; i++) { j = rand() / (RAND_MAX + 1.0) * i + 1; temp = a[j]; a[j] = a[i]; a[i] = temp; }}
407 :
390 :2010/02/01(月) 18:25:32
>>395 C 言語というより UNIX/POSIX システムコールの問題でした。
パイプを pipe() で作成した後適切に処理しなければ、パイプが閉じたことにならず、EOF が検出できずに getchar()やread() がブロックされたのでした。
これは fcntl() で NONBLOCK 属性をつけてもうまくいきませんでした。
http://codepad.org/WiYTFttG
408 :
395 :2010/02/01(月) 19:13:22
>>407 オレの言いたかったのはget_line()の方。
これじゃコマンドを入力するときのEOFを検出できないと言いたかったの。
[1] C言語演習 [2] int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10} int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5} が与えられている。 値x[0]*y[0]+2*x[1]*y[1]+3*x[2]*y[2]+4*x[3]*y[3]+5*x[4]*y[4]+6*x[5]*y[5] が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム [3] Windows XP/Borland C++ 5.0/C言語 [4] 2/18迄 [5] 特に無し
>>408 拙作のgetline() のほうでしたら、fgets() が NULL を返すのをみて、一行入力の終わりがきたことを検知できます。特に問題はありません。
413 :
410 :2010/02/01(月) 20:41:12
>>411 わざわざ Ctrl-Dを入力しなくとも、一行の終わりは検知できていますが、何か?
414 :
409 :2010/02/01(月) 20:43:57
すみません。誤りがありましたので訂正させて下さい。 [1] C言語演習 [2] int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10} int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5} が与えられている。 値x[0]*y[0] - 2*x[1]*y[1]+3*x[2]*y[2]- 4*x[3]*y[3]+5*x[4]*y[4]-6*x[5]*y[5] +7*x[6]*y[6]-8*x[7}*y[7]+9*x[8]}*y[8]-10*x[9]*x[9] が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム 最大/最小になる時のx[],y[]とその値を出力すること [3] Windows XP/Borland C++ 5.0/C言語 [4] 2/18迄 [5] 特に無し
>>415 特になにもおこりません。というか fgets() で一行入力できているのですが。
どんな振る舞いが発生して、どうおかしいのか教えていただけないでしょうか?
>>416 > >
cannot found
がずっとでたけど。
EOFになったら綺麗に終了したほうがいいよ。
420 :
デフォルトの名無しさん :2010/02/02(火) 00:56:53
[1] 授業単元:プログラミング実践 [2] 問題文 アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして90°回転した結果を出力せよ。 (図)affin.txt 00000 00000 11111 00000 00000 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名: gcc [3.3] 言語:C++ [4] 期限:2010年2月4日まで [5] その他の制限:特にありません 色々試しましたが、うまくいきませんでした。 よろしくお願いします。
421 :
409 :2010/02/02(火) 00:59:25
すみません。
>>414 の問題なんですがこちらの写し間違いみたいですので
結構です。取り敢えず今回はお願いを取り消させてください。
もういちど確かめてお願いするかもしれません。
422 :
418 :2010/02/02(火) 14:40:57
423 :
デフォルトの名無しさん :2010/02/02(火) 15:56:42
[1] 授業単元:DirectX研究 [2] 問題文(含コード&リンク): サイコロを転がして目を決める。 ・テーブルとサイコロを作成する。 ・キー操作でサイコロを投げ下ろすように振る。 ・落下してきて,1つの目を上にして止まる。 ・何度でも遊べる ◎テーブルにサイコロの影がある ◎回転しながら落下してくる ◎自由な方向から見ることができる ◎テーブルの上でサイコロは跳ね,転がる。 ◎サイコロとして正しい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2008 [3.3] 言語:C++ [4] 期限: 2月10日まで [5] よろしくお願いいたします。
>>420 どのように試したの?
>>421 素朴だが10!x10!の組み合わせ最適化問題
この手には一般論は無いだろから、奇麗なCプロ
グラム一つに纏めるという発想が頭にあると困難かと.
(いろいろ「補助手段」を開発しているうちに
別の手段で偶然、解けてしまって目的自体が大
きく喪失してしまう危険性がこの手の問題に
はつきまとう)
てか宿題としてC言語限定というのは不適当
>>422 SQLをわかる奴は少ないとオモ
SQL文はわかるが、プログラムに組み込めといわれると・・・
>>422 RDBMSには何を使うの?
コネクションを張ってSQL文を投げるのには何のライブラリ使うの?自作するの?
SQL文を組み込むんじゃなくて、SQLで書かれた 抽象的な処理仕様に基づいて実装しろってことじゃ? SQL鯖とかが出てなかった昔は結構この手の奴あった 常識的にこの手の奴ではテーブル配列自体は勝手に ソート出来なかったり項目を拡張してはならなかったり とか色々とウルサイし、処理速度向上の為に細かい 最適化が要求されてメンドイんで俺はパス
>>429 どこの大学か知らんが、宿題として汎用SQLパーサーを
作れって奴出す教師も、それを真に受ける奴もちょっと
って感じ。
てか市販のRDBMSのSQLパーサーの性能は相当に
高くなってきてるけど、ちょっと大きなデータ+複雑なSQLに
なると手動で作ったCPG+CSVデータにパフォーマンスで
大敗することも多い。
酷いSQLだったり酷い構造のテーブルが多いってことも
多いけど
432 :
429 :2010/02/02(火) 18:09:32
>>430 俺はそこらへんの事情を全く知らないんで勘弁して。
問題文の意図が分からなかったんで
>>429 と…
あんだけgroup byがネストしてたらやる気失う。
434 :
429 :2010/02/03(水) 00:28:45
>>431 とりあえずありがとうございます。
がprologではなくあくまでもCの宿題なので、
参考のみにさせて頂きます。
ちなみにそのスレに私は書き込んでいません。
もし誰かが転記したのをやって頂いてここに貼りなおして
下さったというのであれば結果的に相当無駄なお手数を
おかけしたことになります。
構造体をほぼSQLのまま定義しその構造体の配列にデータ
が詰め込まれた状態でlist関数が呼び出されるという前提で、
SQLが記述しているセレクト処理で得られるレコードを
そのままコンソール出力すれば良いと
同輩が言ってたのですがやっぱり皆様が御指摘の
通りめんどうなコードになるんでしょうか?
(ちなみにSQL自体が何をする処理なのか
今ひとつつかめてません。おわかりの方が
いらしゃいましたら教えて頂けると嬉しいです)
DB板というのがあるそうでそちらのほうでも
聞いてみます。
435 :
デフォルトの名無しさん :2010/02/03(水) 00:29:10
どなたか317を作ってもらえませんか? 私の力では手におえません。。。
436 :
418 :2010/02/03(水) 00:30:16
配列 int out[3]={1,5,3}; の配列の各要素の大小関係を比べるプログラムをfor文で作りたんですけど どうすればいいですか?
質問は「俺に聞け」スレで
>>434 >>431 じゃないけどSQLは多少わかる
「テーブルSEISEKIHYOUから、
より人数が多いクラスの5科目平均点
以上の5科目成績の生徒で、より人数が
多いクラスの国語平均点の最高よりは
下の国語成績で、数学が最も成績が
高かった生徒について、その担当教師
と氏名、数学成績、国語成績を
リストする。」
440 :
デフォルトの名無しさん :2010/02/03(水) 00:58:45
420のものです。 ファイル読み込みまではいけたのですが、回転はさっぱりでした。 ご教授ねがいます。
>>440 公式を当てがうだけのつまらない問題だね
出来ないのは言語によるものじゃなくて
アフィン変換がどういうものか分かってないだけ。
00000 00000 11111 00000 00000 を90度 回転させると 00100 00100 00100 00100 00100 これじゃ駄目?
>>435 書こうと思ったけどエラー処理がめんどくさいんだよな
444 :
デフォルトの名無しさん :2010/02/03(水) 17:13:38
>>442 まさにその通りなんですが、それをプログラムでかくことができなかったです・・・
448 :
434 :2010/02/03(水) 19:33:42
DB板で相談したところすんなりとコードを 書いて頂けました。 もちろん許可をとってないのでお見せする わけにはいかないのですが合計250行にも なる立派なコードでした。
449 :
デフォルトの名無しさん :2010/02/03(水) 19:43:01
>>446 ご回答ありがとうございます。
試してみたんですが、コンパイルはうまくいきましたが何も表示されませんでした。
何か打ち込まなくては、いけないのですか?
質問ばっかですいません。。。
[1] 授業単元:情報処理入門
[2] 問題文(含コード&リンク):
rep1.ppmとrep2.ppmの2つの画像を加算するプログラムを作成せよ.
プログラム中で加算したデータは,コントラスト強調を行った上で
PPM画像ファイル(h12r.ppm)として保存するようにすること.
Cのソースファイルh12r.cおよび実行することにより作成
される画像ファイルを提出すること.rep1.ppmとrep2.ppmの
サイズはいずれも横124×縦124画素である.h12r.ppmのサイズも同じとする.
rep1.ppm
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10487.zip rep2.ppm
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10488.zip [3] 環境
[3.1] OS: (Windows/Linux/等々)
Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc 3.4
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
Cでおねがいします。
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
提出期限2010年2月8日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
特にありません。
前回は皆さんに本当にお世話になりました。あらためてお礼を言いたいです。本当にありがとうございました。
今回が最終レポートになるのですがどうか助けていただけないでしょうか?
よろしくお願い致します。
>>451 #include <stdio.h>
#define W 124
#define H 124
int main(){
double d,cl = -10.0;
unsigned char data1[H*W*3],data2[H*W*3],data3[H*W*3];
char buff[128];
FILE *fin1,*fin2,*fout;
int i;
if((fin1=fopen("rep1.ppm","rb"))==NULL)goto EXIT;
if((fin2=fopen("rep2.ppm","rb"))==NULL)goto EXIT;
if((fout=fopen("h12r.ppm","wb"))==NULL)goto EXIT;
for(i=0;i<3;i++)fgets(buff,128,fin1);
for(i=0;i<3;i++)fgets(buff,126,fin2);
fread(data1,1,sizeof(data1),fin1);
fread(data2,1,sizeof(data2),fin2);
for(i=0;i<H*W*3;i++){
d=data1[i]+data2[i];
d=d+cl*(d-127.5);
if(d>255)data3[i]=255;
else if(d<0)data3[i]=0;
else data3[i]=(unsigned char)d;
}
fprintf(fout,"P6\n124 124\n255\n");
fwrite(data3,1,H*W*3,fout);
EXIT:
if(fin1)fclose(fin1);
if(fin2)fclose(fin2);
if(fout)fclose(fout);
return 0;
}
>>447 ひえーこの場合はこれで正解なのか
偶然だな
454 :
デフォルトの名無しさん :2010/02/03(水) 22:51:55
>>447 ご回答ありがとうございます。
その処理を
00000
00000
11111
00000
00000
でしたいんですが、どうしたらいいですか?
457 :
447 :2010/02/04(木) 01:19:54
>>454 // 入力
for(i=0; i<MAX; ++i)
for(j=0; j<MAX; ++j)
a[i][j] = (i==MAX/2)?1:0;
458 :
デフォルトの名無しさん :2010/02/04(木) 01:28:05
>>457 ありがとうございます。
ちゃんと表示されました。
459 :
デフォルトの名無しさん :2010/02/04(木) 01:35:10
[1] 授業単元:プログラミング実践 [2] 問題文 アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして60°回転した結果を出力せよ。 (図)affin.txt 000000000 000010000 000010000 000010000 011111110 000010000 000010000 000010000 000000000 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名: gcc [3.3] 言語:C++ [4] 期限:2010年2月5日まで [5] その他の制限:特にありません 420のものです。 度々申し訳ありませんが、よろしくお願いします。
>>459 ・問題文は、出題されたまま全文を書いてください。
もしそのまま出題されているとするなら糞問題です
添削スレで晒しちゃいましょう
良問自作テキスト:熱心な先生だ 悪問自作テキスト:着服しただろこいつ
462 :
447 :2010/02/04(木) 02:45:18
>459 アンチエイリアシング
>>460 なぜ糞問題と思ったのでしょうか、そこをひとつ。
>>466 オレなら
if(x>=-4 && x<=4 && y>=-4 && y<=4)
mat2[i][j] = mat1[4 + x][4 + y];
こうするな
はみ出たらカット
468 :
447 :2010/02/04(木) 12:23:47
>>462 間違い sqrt(3)/2 だった。
x = i - MAX/2;
y = j - MAX/2;
m = x/2.0 - y*SQRT3/2;
n = x*SQRT3/2 + y/2.0;
x = m + MAX/2;
y = n + MAX/2;
if(x<0 || x>=MAX) continue;
if(y<0 || y>=MAX) continue;
// 左回転
if(b[x][y]==0)
b[x][y] = a[i][j];
469 :
デフォルトの名無しさん :2010/02/04(木) 20:21:37
470 :
466 :2010/02/05(金) 16:32:53
要素の計算方法が逆だったのかな?と今考えてるけど。 変換先位置から変換元の要素を求めたんだけど、 画像の変換の問題じゃないんだから、逆の方が良かったかな?
>>470 90度回転なら、どちらの方法でも、隙間ができない。
60度回転では、・・・
ってことがポイントになる問題だったのでは?
画像かどうかは関係ないでしょ。
どなたか406お願い出来ないでしょうか?
474 :
っっ :2010/02/06(土) 16:26:33
このプログラミングの前まではうまくいっているのですが、この部分がうまくいきません。助けてくださいm(_ _)m printf("A/Sの式\n"); for(j=1;j<=12;j++){ a[i][j]/s[j]; printf("%3.1f\n",a[i][j]); }
475 :
っっ :2010/02/06(土) 16:32:18
_. - ._ _ /. -−- \ l `i __ // ヽ } ´ ̄ ´ '´ う |{ /\ ____ j / ( ヽ '.l. ___/ ヽ´ ー-=ニ.¨`7 r ' r──’ `ヽ .ゞ ' ´ '. `丶、 / (´_ ̄ ヽ / | \ \/ ‘ー⊂. \ / , l | |、 ヽ‐-,ヽ  ̄ ̄\ \. / / ! ∧ ||ヽ__| ∨ ` \ \ / / | / ' ||'´ヽ l l. ', オワタ \ \l ' | ,ィ´′ ∨ ハ. | Nヽ. |、 i \ \l. | /|/ / / ', |、ヽ! \ ヽ、. | i ∨ 三三 ハ. ! \ \. /\ | | xィ彡 ・{ l. ∧ / /\ / }'ヽ! "´ ,、_, l |∨ ∨ / / / \ ‘7´ ) .ノ | l { / ',\ 、__,. ' ,/ | / \ / ', ヽ----r ' ´ | | ./ | ー ´ ', ', ヽ | | / 提出期限過ぎてしまった
>474 s/\//\/=/
>>474 a[i][j]/s[j];
の結果をどうしたいのですか?どこに保存するのですか?
>>475 小学校の国語から始めるべきです
C言語はその後で良いでしょう
[2] プログラム 環境 [3.1] OS:Linux [3.2] コンパイラ名:gcc [3.3] 言語:C++ 以下の実行結果はどうなるか #include<stdio.h> #define N10 int main(){ int i,wa=0; for(i=1;i<N;i++){ if((i%2) == 0) continue; wa+=i;} printf("%d\n",wa); return 0;} よろしくお願いします。
>>480 Nが未定義という類のエラーが出るでしょう
[1] C言語プログラミング初歩(専門学校) [2] int型の配列変数A[64][32]をB[32][64]に代入する. 次の対応があるようにすること A[0][0] -> A[0][1] -> A[0][31] ->A[1][0] ->....->A[63][31] B[0][0] -> B[0][1]-> B[0][31] -> B[0][32]->....->B[31][63] (上の段と下の段が一致) A[m][n]には値 (m+n) % 31が入っているものとする。 [3] Windows Vista /Visual studio 2008/C言語 [4] 2/15迄 [5] 1月開講です。ポインタはまだ習ってません
>>483 こんな感じ?
#include<stdio.h>
int main()
{
static int A[64][32], B[32][64];
int m,n;
for(m=0;m<64;m++)
for(n=0;n<32;n++)
A[m][n]=(m+n)%31;
for(m=0;m<32;m++)
for(n=0;n<64;n++)
B[m][n]=A[2*m+n/32][n%32];
return(0);
}
return(0)はかっこ良すぎ(カッコ付け過ぎ) return 0;で十分w てか関数呼び出しと見間違えやすいので付けないほうが吉
int *a = &A[0][0], *b = &B[0][0]; for(m=0;m<32;m++) for(n=0;n<64;n++) *b++ = *a++;
>>487 O(n^2) 実際に適当な値入れて何回実行されるか考えたらいいと思う。
そういう捉え方もできなくもないが別物。
三項演算子とかでググったらいいと思う。
>>488 このプログラムを作ったくれた作者さんのレスを載せると
>数列のn[i]について毎回「n[i]の前後にn[i]よりも大きい数と小さい数があるか」を調べる場合、
>計算量は数列の長さをLとして O(L^2)かかる。
>一方、
>>646 のように、n[i]までの最大値と最小値を先に計算してしまうと計算量はO(L)で済む。
と書いてあり、
自分で考えてみてもl-1回計算するfor文が2個あるので2l-2なので、やはりO(L)といえる気もしますが・・・よくわかりません。
?は条件演算子ですね。分かりました。ありがとうございました。
>>487 >計算量は2LなのでO(L)と言えるのでしょうか?
YES。入れ子になってれば積になってO(L^2)だけど、
別々になっているので全体の計算量は多い方(今回は同じ)になる。
?は "c ? a : b" という三項演算子の一部。詳細はぐぐれば分かる。
基本的にはifとは別物だが、非常に限定された場面では代わりに使うこともできる。
491 :
488 :2010/02/07(日) 12:30:26
最初の奴はよく見てなかった。
しかも、今度は途中送信スマン
それでは計算量は作者のとおりO(L)ということで正しいのですね? ありがとうございます!勉強になりました!
494 :
デフォルトの名無しさん :2010/02/07(日) 13:14:34
【質問テンプレ】 [1] 授業単元:C言語入門 [2] 問題文: キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する。ただし、入力を終了するときはCtrl+Zを押すものとする。(vowel.c) [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2月8日 [5] その他の制限:特にありません。 よろしくお願いします。
>>495 ありがとうございます!
ですがコンパイル出来ませんでした;
制御構造の単元なのですが、While文などを使ってもう少し簡単にしていただくことはできるでしょうか?;
497 :
495 :2010/02/07(日) 16:46:58
>>496 エラーメッセージを全部コピペしてもらえます?
>>497 vowel.c:
エラー E2140 vowel.c 31: ここでは宣言はできない(関数 countVowel )
エラー E2141 vowel.c 32: 宣言の構文エラー(関数 countVowel )
エラー E2139 vowel.c 70: 宣言に ; がない(関数 countVowel )
エラー E2134 vowel.c 70: 複合文に } がない(関数 countVowel )
*** 4 errors in Compile ***
です。
>>497 すみません。
こちら側のミスでエラではなく警告のみでした。
vowel.c:
警告 W8057 vowel.c 68: パラメータ 'argc' は一度も使用されない(関数 main )
警告 W8057 vowel.c 68: パラメータ 'argv' は一度も使用されない(関数 main )
>>499 int main (int argc, char* argv[])
を
int main ()
もしくは
int main(void)
に書き換えてみてください。
>>500 int main()に書き換えたらコンパイル出来ました!
for文苦手なので本当に助かりました。
ありがとうございました!!
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 入力された2つの文字列str1,str2を比較し、str1にstr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す関数、strcmpを作成せよ。 int strcmp( char *str1, char *str2); ex. str1=”abaabab” , str2=”aab” 1 ex. str1=”abaabab” , str2=”abb” -1 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 出来れば今日中に。急ぎで申し訳ありません。 #include<stdio.h> #include<string.h> #define LENGTH 10 int strcmp(char *sp1,char *sp2); int main(){ char str1[LENGTH+1]; char str2[LENGTH+1]; printf("aとbを使って10文字入力してください。\n"); scanf("%s",str1); printf("aとbを使って2文字入力してください。\n"); scanf("%s",str2); printf(結果) strcmp(&str1[0],&str2[0]); ここまで作ったのですが(中途半端ですみません)関数に行き詰まり、ネットで調べたところ本来のstrcmpの使い方とこの課題で求められているstrcmpの使い方が異なることが分かりどうすればいいのか混乱してしまいました。 この後、関数strcmpを使い、str1とstr2を比較して・・・をどうのようにすれば良いでしょうか?
strstrだよね
strstrでググったら実装がすぐ見つかっちゃうからじゃないの strcmpと被せたのは<string.h>使わせないためとか
それ以前に今日中という期限設定は常識を疑いたいもの
#include<string.h>をはずして関数名strcmpにしてなんとか形になりました。
>>503 さん、本当にありがとうございました。
またこのスレにお世話になってしまうかもしれませんが宜しくお願いします。
>>456 ちょっと皆さんにご意見をお聞きしたいところです。
二分木で番兵(sentinel) をおく意義がわからない、どんなsentinel をおけばいいかわからないのですが、
どうすればいいのでしょうか。
sentinel をおくことで if 文が減らなければならない、と考えているのですが。
>>509 [1] 授業単元:プログラミングコミュニケーション演習
[2] 問題文:
>>456 の正解を皆さんに”必ず”知らせてください。
[3] 環境
[3.1] OS:2ch
[3.2] コンパイラ名とバージョン:jd等
[3.3] 言語:無制限
[4] 期限:無期限
>>508 単純な台形則による定積分で、関数F(X)のXY座標を、X座標の小さい順に
V[][0], v[][1] に入力と解釈するなら
#include <stdio.h>
double daikei(double xa, double ya, double xb, double yb){
return(ya+yb)*(xb-xa)/2;
}
int main(void){
int n;
int i;
double V[1000][2];
double S,D;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%lf",&V[i][0]);
scanf("%lf",&V[i][1]);
}
S=0.0;
for(i=0;i<n-1;i++)
S+=daikei(V[i][0],V[i][1],V[i+1][0],V[i+1][1]);
printf("\n面積:%f\n",S);
return 0;
}
とか?
>>509 NODE sentinel;
NODE *root = &sentinel;
以降、全ての NULL を &sentinel に置き換える。
(malloc の戻り値チェックの NULL はそのまま)
元々 NULL が番兵の役割を果たしていたので、簡単な変更で済む。
NULL が番兵ではないと誤認識させる糞問題でした。
【質問テンプレ】 [1] 授業単元:C言語 [2] 問題文: input.ppm というPPMフォーマットのファイルを読み込み, ヘッダをつけて縦横をそれぞれ 1/2(面積にして1/4) にして出力するプログラムを書きなさい. input.ppm のサイズは 410x307 である. [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2/8 よろしくお願いします。
>>516 丁寧にありがとうございます
ですが難しくてよく分からないです
たぶんもっとシンプルで(いい加減で)良い課題なので、それを参考にもう少し頑張ります
>517 論理ミスしていた diff main.c main.c.bk 75,76c75,76 < rl.x = (x == 0 ? 1 : x*2); < rl.y = (y == 0 ? 1 : y*2); --- > rl.x = x*2; > rl.y = y*2; 縦横1/2の間引きだから、単純に縮小先の画素から見た縮小元の2x2の画素の平均値を新しい画素値にすればいいけど、 1/2の線形補間はになるためあまりきれいに縮小できない 以下疑似コード x, yは、整数, imageは元画像, new_imageは縮小画像を表す array(u, v)は、imageの縦u, 横vの値を表す height, widthは、それぞれ元画像の縦幅と横幅を表す for y in 0 <= y < height/2 for x in 0 <= x < width/2 new_value <- image(y*2, x*2) + image(y*2, x*2+1) + image(y*2+1, x*2) + image(y*2+1, x*2+1) new_value <- new_value / 4 new_image(y, x) <- new_value end end 実際のコードでは、RGBの値をそれぞれ計算しないといけないけど
>518 diff恥ずかしいなぁ、寝不足はいかんね
>>515-517 mkr_allocate_3d_array()で行のポインタがheightを一つ越えて
初期化されてしまってますね。バグバグバグ。
台形近似でも面積を求めることに変わりはないと思うんだが・・・
>>521 それを求める公式の一つが台形則。
希望があるならそれを明記しないと伝わらんぞ。
すみません;; 教科書読んだら台刑則のプログラムで面積を求めることが出来ると書いてありました… あとプログラムについて質問なのですが S+=daikei(V[i][0],V[i][1],V[i+1][0],V[i+1][1]); の部分の+=という演算子はどのような働きがあるのかと コンパイルしたあとは始点(xa,ya)終点(xb,yb)だけを打ち込めばいいのかわかりません そこについてもよろしくお願いします
a+=bはa=a+bと同義
>520 ありがとうございます 潜在的なバグの原因になり兼ねますね 有効なアドレスを参照しているからメモリチェッカでは検出できていませんでした 修正は簡単だけど、エレガントなコードが浮かばない もう、ppm.c自体の完成度が低すぎて笑える、即席の使いまわしの接ぎ木
528 :
至急お願いします。 :2010/02/09(火) 03:50:53
[1] 授業単元:C言語 [2] 問題文: ガウス分布における数値積分 I=∫f(x)dx,←xmin〜xmax f(x)=1/√(2*π*σ)*exp(a) a=-(x-μ)*(x-μ)/(2*σ*σ) 積分区間は[xmin,xmax]=[myuu-2siguma,myuu+2siguma]として計算すること。なおμ=0,σ=1とした場合、I=0.95449と なるので確認すること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2/9 正午まで 出来ればすぐにお願いします。
530 :
至急お願いします。 :2010/02/09(火) 04:09:11
追記 528>>関数を使ってください。
531 :
至急お願いします。 :2010/02/09(火) 04:10:07
529>>どういうことですか?
計算すること 確認すること 参考書のページ数稼ぎによくあるパターンだな
>>528 多少誤差があるけど
#include <stdio.h>
#include <math.h>
double f(double sigma, double mu, double x)
{
return 1/sqrt(2*M_PI*sigma) * exp(-(x-mu)*(x-mu)/(2*sigma*sigma));
}
int main(int argc, char *argv[])
{
int i, n = 10000000;
double sigma=1, mu=0;
double xmin = mu-2*sigma, xmax=mu+2*sigma;
double a = f(sigma, mu, xmin), b;
double sum = 0.0;
for(i = 0; i < n; i++){
b = f(sigma, mu, xmin+(xmax-xmin)/n*i);
sum += (a+b)*(xmax-xmin)/n/2;
a = b;
}
printf("%f\n", sum);
return 0;
}
534 :
デフォルトの名無しさん :2010/02/09(火) 07:18:38
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 配列に Institute of Technology という文字列を代入し、ポインタを利用して ・各文字が格納されているアドレス ・そのアドレスに格納されている文字 を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:[2010年2月9日まで] [5] その他の制限: お願いします。
535 :
デフォルトの名無しさん :2010/02/09(火) 07:33:03
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): まず次の内容のテキストファイルを準備せよ。 (メモ帳で作成し、test02.txtという名前で保存すること) abc 123 def 456 ghi 789 jkl 000 次に、作成したテキストファイルから内容を読み出し、 各行の先頭に 01 02 03 というように番号を付加して 画面に出力するプログラムを作成せよ。 [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:[2010年2月10日まで] [5] その他の制限:
>>534 #include <stdio.h>
int main(void)
{
char *pstr,str[30]="Institute of Technology";
pstr = str;
for(;*pstr!='\0';++pstr)
printf("%08x: %c\n",&*pstr,*pstr);
}
>>535 #include <stdio.h>
int main(void){
int i=0;
char text[200];
FILE *ifp;
ifp = fopen("test02.txt", "r");
if(!ifp) return 1;
while(fgets(text,200,ifp) != NULL)
printf("%02d %s", ++i, text);
fclose(ifp);
}
>>535 #include <stdio.h>
int main(void){
FILE *f;
f=fopen("test02.txt","r");
if(f==NULL) return 0;
fclose(f);
printf("01abc¥n02123¥n03def¥n04456¥n05ghi¥n06789¥n07jkl¥n08000¥n");
return 0;
}
センセーが期待した解答とは異なるだろうがよ
539 :
至急お願いします。 :2010/02/09(火) 14:07:26
534>>ありがとうございます。argvの後はなんてかいてあるのですか?
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://codepad.org/9ra3PWuv 上のコードが正しく動かないんです・・・
input.txtとして
1
2
3
4
5
の内容を保存して実行ファイルから読み込ませる
./a input.txt
[3] 環境
[3.1] OS:ubuntu
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:[出来れば今日中で]
[5] その他の制限:
>>540 自分が作ったプログラムを理解出来ていないようだ。(笑)
input.txtとして↓を与える。
5
1
2
3
4
5
うわ、そんな安易な間違いでしたか・・・ ずっとプログラム睨んでました。 ありがとうございます。
バカもん。 > ずっとプログラム睨んでました。 プログラム睨んでたら普通気が付くだろ。
コードは鏡、自分自身が見えます。
自分で書いてないのがバレバレだなw
547 :
デフォルトの名無しさん :2010/02/09(火) 22:17:58
[1] 情報処理応用 [2] Fortranで, 階乗 n! を計算する関数を作成し, 順列 n個の異なるものからr個取り出して並べる。 このときの順列の総数をnPrとあらわす。 nPr=n(n-1)(n-2)・・・(n-r+1) を計算する関数を作成し, 組み合わせ 異なるn個からr個取り出して組を作る。 このときの組合せの総数をnCrとあらわす。 nCr = nPr/r! を計算するプログラムを作成してください [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語:fortran [4] 期限: 明日まで。急ぎですみません。 [5] その他の制限: 特にないですが、板を間違えていたらすみません。
[1]C言語課題 [2] コマンドラインに与えられた文字列が単数で自然数を表しているとい 下の例ように出力されるプログラムを作れ 入力==>3 132 231 入力==>5 1304 2552 4031 入力==>10 136107 259084 480952 710631 入力==>20 13610150016 25914201711 48131918127 71218191384 11172014952 16001510631 [3] [3-1]Linux [3-2]GNU C++ [3-3]C言語 [4] 2/22日正午迄 それ以降は不可 [5]stdio.h string.h stdlib.hを使用可能
549 :
デフォルトの名無しさん :2010/02/09(火) 22:39:57
[1] 授業単元:プログラミング 1 [2] 問題文(含コード&リンク): 球の体積をもとめよ。またこの問題は間違っているのでそれを書き換えよ #include<stdio.h> int main(void) { double r,v; printf("直径を入力して下さい\n"); scanf("%1f",&r); v=4.0/3.0*3.14159*(r/2.0)*(r/2.0)*(r/2.0); printf("直径%fの球の体積は%fです。\n",r, v); } [3] 環境 [3.1] OS:windows vista [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:[2010年2月10日まで] [5] その他の制限:
>>547 とりあえずスレタイをn!回声に出して読んでみようか
551 :
デフォルトの名無しさん :2010/02/09(火) 22:47:32
[1] 授業単元:プログラミング 1 [2] 問題文(含コード&リンク): 二つの数列の和を表示したい。またこの問題は間違っているのでそれを書き換えよ #include<stdio.h> main() { int suretu1[]={2,4,6,8,10,12,14,16,18,20}; int suretu2[]={1,2,4,8,16,32,64,128,258,512}; int kotae; int count; for (count = 0; count <=10; count++ ) printf("%d,", suretu1[count]+suretu2[count]); { suretu1[count] = 2 * count +2; suretu2[count] = count* count; kotae= suretu1[count] + suretu2[count]; printf("二つのの整列の和によってできる数列は,\n"); printf("%d\t",kotae); } } [3] 環境 [3.1] OS:windows vista [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:[2010年2月10日まで] [5] その他の制限:
>>548 入力==>15
136101511
259141127
481311384
712114952
111510631
入力==>11
1361011
2590007
4800084
7000952
1110631
入力==>9
13607
25984
48952
70631
入力==>8
1367
2584
4852
7631
入力==>6
1364
2552
4631
入力==>4
134
202
431
554 :
デフォルトの名無しさん :2010/02/09(火) 23:19:47
[1] 授業単元:プログラミング 1 [2] 問題文(含コード&リンク): /************************* ある二つの文字列str1,str2 の編集距離はつぎの3つの操作を行うことによりstr1 をstr2 に変換するのに要する操作の最低回数である ・ 1文字挿入する ・ 1文字削除する ・ 1文字を他の1文字に置き換える たとえば str1="sport" はstr2="sort" に, 文字 'p' を削除することによりstr2 に変換できるため編集距離は 1 である str_n を文字列str の頭からn 番目までの部分列としm(i,j)をstr i とstr j の編集距離を表すものとする.m(i,j)とm(i+1,j),m(i,j+1),m(i+1,j+1)の間に成り立つ再帰式を記述しなさい この再帰式に基づき効率良く編集距離を計算するプログラムを2次元配列を利用して作成しなさい.ただし,関数m(i,j)はint型の編集距離を返り値とする. ******************************/ [3] 環境 [3.1] OS:windows vista [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:[2010年2月10日まで] [5] その他の制限:
[1]C言語とプログラミング [2] キーボードから3つの整数を受け取り大きさの小さい順に出力するプログラムを作りなさい。 但しmain関数内ではint変数一つだけが使えるものとします。またmain関数の再帰呼び出しも 出来ません。(main関数の引数、argc,argvをint変数として使用することも勿論禁止します) main関数のみで構成されるプログラムとして下さい。 入力される数は1から10までの範囲にあることを常にチェックし、それ以外の入力の場合は 再入力を促して下さい。 [3] [3-1]Windows XP HomeEdition [3-2]Visual Studio 2008 [3-3]C言語 [4] 2/11迄 [5] 特に無し
まぁどれも期日まで時間があるからゆっくりやるべきだ 最近の学生は甘え過ぎ 粘って苦しめてやれというのはウソにせよ 期日ぎりぎりに催促されたら貼ってやる って感じで
>>549 scanf("%1f",&r); の %1f を %lf に修正。※lは小文字のL
main関数が値を返して無いので、最後に return 0; 等を追加。
558 :
デフォルトの名無しさん :2010/02/09(火) 23:32:55
>>556 余計なこと書くなよw
日付変えてくるだろうが
>>551 問題の題意がイマイチよく分からんので、適当に解釈
#include<stdio.h>
main()
{
int suretu1[]={2,4,6,8,10,12,14,16,18,20};
int suretu2[]={1,2,4,8,16,32,64,128,258,512};
int kotae=0;
int count;
printf("二つの整列の和によってできる数列は\n");
for (count = 0; count <10; count++ )
{
printf("%d ", suretu1[count]+suretu2[count]);
kotae += suretu1[count] + suretu2[count];
}
printf("\n数列の和は %d\n",kotae);
return 0;
}
>>535 #include <stdio.h>
#include <string.h>
int main(void){
#define CONTENTS "01abc¥n02123¥n03def¥n04456¥n05ghi¥n06789¥n07jkl¥n08000¥n"
FILE *f;
int i=0;
char Fgets[256],Strcat[256],Sprintf[256];
f=fopen("test02.txt","r");
if(f==NULL) return 0;
Strcat[0]=0;
for(;;){
if(NULL==fgets(Fgets,256,f))break;
sprintf(Sprintf,"%02d%s",++i,Fgets);
strcat(Strcat,Sprintf);
}
fclose(f);
if(0==strcmp(Strcat,CONTENTS))printf("%s",CONTENTS);
return 0;
}
>>552 1.Swapの引数が値渡しなので、Swap関数内で値を変更しても
関数呼び出し元の変数には影響を与えないから。
2.Swap関数内のbuf変数がポインタで定義されていて、その初期化されていないポインタの
示す先を一時保存場所として使用している為、正しく値が交換されない。
3.
void Swap(int *p1, int *p2)
{
int buf;
buf = *p1;
*p1 = *p2;
*p2 = buf;
}
>>561 素早い回答ありがとうございます。助かりました。
565 :
564 :2010/02/10(水) 02:17:10
567 :
566 :2010/02/10(水) 02:38:49
入力==>200 1361015212836455566789110512013615317119000000000191 2591420273544546577901041191351521701890000000192172 4813192634435364768910311813415116918800000193173154 7121825334252637588102117133150168187000194174155137 1117243241516274871011161321491671860195175156138121 1623314050617386100115131148166185196176157139122106 2230394960728599114130147165184019717715814012310792 2938485971849811312914616418301981781591411241089379 3747587083971121281451631820199179160142125109948067 4657698296111127144162181020018016114312611095816856 5668819511012614316118020001811621441271119682695746 6780941091251421601791990182163145128112978370584737 7993108124141159178198018316414612911398847159483829 9210712314015817719701841651471301149985726049393022 1061221391571761961851661481311151008673615040312316 1211381561751950186167149132116101877462514132241711 1371551741940001871681501331171028875635242332518127 1541731930000018816915113411810389766453433426191384 1721920000000189170152135119104907765544435272014952 1910000000019017115313612010591786655453628211510631
[1]数値計算演習 [2] 極座標で表される曲線 r(t)=sin^2(πt) θ(t)=α sin(πt^2) (0<=t<=1)でαを指定した時 の曲線の長さと囲む面積の近似値を求め、π/4<=α<=πまで変化させる時、 面積/曲線の長さが最大になるαを推定する 曲線上の代表点をとり隣接する点の間の距離の和で曲線の長さを近似。 面積は隣接する代表点と原点が作る三角形の面積の和で近似する。 [3] [3-1] Mac-OS-X panther [3-2] XCode [3-3] C/C++どちらでも可能 [4] 2/18迄 [5] 特に無し
おまえら必死だな
576 :
553 :2010/02/10(水) 09:05:02
>>575 入力==>200
13610152128364555667891105120136153171190
259142027354454657790104119135152170189
48131926344353647689103118134151169188
7121825334252637588102117133150168187
111724324151627487101116132149167186
1623314050617386100115131148166185
2230394960728599114130147165184
29384859718498113129146164183
374758708397112128145163182
4657698296111127144162181
56688195110126143161180200
678094109125142160179199
7993108124141159178198
92107123140158177197
106122139157176196
121138156175195
137155174194
154173193
172192
191
1)文字列を繋いで、1〜nまでの三角形を作る(上の図参照)
2)それを1文字ずつに分解して、上下反転、左右反転する
3)1と2で出来た物を左右に並べて、隙間がなくなるまで近づける
4)空いた隙間には0を詰める
>>575 問題が魅力的だったからみんなやったんだろうな
579 :
553 :2010/02/10(水) 12:56:23
#define MAXL 100 main(){ int num, i, j, k, len, maxlen; char wrk[4], mat1[MAXL][MAXL*2], mat2[MAXL][MAXL*2], tmp[MAXL]; printf("入力==>"); scanf("%d", &num); for(i=0;i<MAXL;i++) mat1[i][0] = mat2[i][0] = (char)0; i=1, j=0, k=0; while(i<=num){ if(k<0) { k = ++j; if(j >= MAXL) {puts("ERR"); return 1;} // てきとう } sprintf(wrk, "%d", i++); strcat(mat1[k--], wrk); /* LEFT */ strcpy(tmp, mat2[k+1]); /* RIGHT */ sprintf(mat2[k+1], "%d", i-1); strcat(mat2[k+1], tmp); } maxlen = k = 0; for(i=0;i<=j;i++){ len = strlen(mat1[i]) + strlen(mat2[j-i]); if(len > maxlen) maxlen = len, k=i; } for(i=0;i<=j;i++){ len = strlen(mat1[i]) + strlen(mat2[j-i]); for(k=maxlen-len-1;k>=0;k--) strcat(mat1[i], "0"); // めんどう strcat(mat1[i], mat2[j-i]); } for(i=0;i<=j;i++) puts(mat1[i]); }
>>548 デバッグ用のprintfがあるので見づらいが、
>>580 では
1) 上半分の三角形(
>>576 のような)の各行の長さを求める
2) 出力される配列の長さを決める( (i行目の長さ + (h-1-i)行目の長さ)の最大値 )
3) 出力
という流れ。三角形の(i,j)の位置のにある数字は簡単に計算できるので
メモリには各行の長さだけ記憶すれば十分。
582 :
デフォルトの名無しさん :2010/02/10(水) 13:13:57
584 :
570 :2010/02/10(水) 13:32:22
585 :
570 :2010/02/10(水) 13:46:27
スマン まだ一カ所ミスが... 入力チェックをミスってる #define INPUT()で でwhileロジックを while ( (m<1)||(m>10) ) に修正して
586 :
デフォルトの名無しさん :2010/02/10(水) 13:51:16
>>336 課題4と課題5どなたかよろしくお願いします。期日すぎても提出できるので、なんとかならないか必死です。
588 :
デフォルトの名無しさん :2010/02/10(水) 17:40:46
入力データの例 1.2 3.7 2.1 4.2 2.9 1.3 4.0 2.5 x,y軸を-や+で表現して、それぞれ座標の点(4つ)を*でプロットする感じです。
589 :
555 :2010/02/10(水) 19:03:12
>>572 >>573 >>570 どうもありがとうございました。
>>570 さんのコードは非常にわかりやすいです。
3600行を5分で入力とは凄いですね。
タッチタイピング速度はどの位でそれくらいに
なるんでしょうか?自分は1分間に賞味150文字が
精一杯です。(IME変換時間を含む)
他の皆様もいろいろと工夫をされておられ特にビット
操作とかポインタ操作とか裏技的な技法は非常に参考
になると思います。
世間では一昔前はコード1行1万が
相場だった時代もあったね。
>>570 のコードだといくらになるんだかw
**確認事項**
ここで答えてやっても事後を含め
一切依頼者に報酬を請求出来ない
>>591 ここで答えるようなのって単体じゃどうせ金にならなくないか?
ここで解かれている問題とその回答を 応用してもいいけど事後問題になる可 能性もあるんで(2ちゃんねるから 引用ってw格式ある組織ではそれだけ で処分対象w)
595 :
570 :2010/02/10(水) 22:38:17
>>555 いえいえ。
タッチタイピングの上達のコツは
このスレの他の回答者に聞いてくれ
企業秘密なんで。
この業界では毎分400文字〜500文字
(IME入力変換時間を含む)の入力が
生き残りの最低条件なんでw
今回は実にのんびりしたテンポで入力
したよ。
>>590 >>593 何かおもしろいところあるのかい?
いやここまで冗長なプログラムは初めて見たもんで 一行いくらならこういう方法でガツガツ稼げるなw
冗長? 見た目だろ。 ロジックそのものはこれほど直接的なものはない コードは常に短く書けばいいというもんでもないと 目から鱗が落ちたような気分 コードを(最初から)短く書くのが偉いとかそういう 奇妙な信仰はかなり弊害もあるんじゃないかと もっとも一つのint変数しか使えない状況での プログラミングもかなりナンセンスだと思うが
回路に例えるとワイヤードロジックな 普通のプログラムがマイクロプログラムに例える事が出来るかも
>>555 って__asmでスタックとレジスタ使えばint変数一つでも楽勝なんじゃないのw
勉強になるなぁ。hhdかー。
602 :
デフォルトの名無しさん :2010/02/11(木) 13:05:19
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): #include <stdio.h> int main(void){ int a=0,k; for (k=0;k<100;k++){a++; if(a%5==0&&a%9==0)printf("A\n"); else if(a%5==0)printf("B\n"); else if(a%9==0)printf("C\n"); else printf("%d\n",a); }return 0;} この処理のプログラムをスペース、改行を含み140字以内で書き直したい。 [3] 環境 [3.1] OS:Windows XP Pro [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語:C [4] 期限: [5] その他の制限:特になし よろしくお願いします。
>>602 #include <stdio.h>
int main(){
int k;
for (k=1;k<=100;k++){
printf(k%5==0&&k%9==0?"A\n":k%5==0?"B\n":k%9==0?"C\n":"%d\n",k);
}}
#include <stdio.h> int main(void){ int a; for(a=1;a<=100;a++) printf(a%45?a%5?a%9?"%d\n":"C\n":"B\n":"A\n",a); return 0; }
>>602 変な問題ですが無理なのでは166byte
606 :
デフォルトの名無しさん :2010/02/11(木) 14:05:22
602です。 <<603 <<604 の方ありがとうございます。 助かりました。
607 :
605 :2010/02/11(木) 14:05:28
失礼3項演算子があったのね
>>602 code golfするの?
a;main(){for(;++a<101;)printf(a%45?a%5?a%9?"%d\n":"C\n":"B\n":"A\n",a);}
>>555 int a;
scanf("%ld %ld %ld%*c", (long *)&a, (long *)&argc, (long *)&argv);
じゃだめか
Windows XP HomeEditionって64bitないよね
>>610 たった3行の制約条件を見逃すようじゃ、お前マの適性ない。
転職を勧める。
614 :
612 :2010/02/12(金) 01:26:00
615 :
デフォルトの名無しさん :2010/02/12(金) 01:32:57
このスレの人ってちょっと考えると皆精神病院予備軍だな
>>585 とか
>>548 を解いて喜ぶ人とかw
さすが現役精神病の方は言うことが違うね
トルヒーヨのハルディンはここですか?
626 :
625 :2010/02/12(金) 20:26:28
ミスった… × #define PSHORT_A(x) (((uint16_t*)&x)+2) ○ #define PSHORT_A(x) (((uint16_t*)&x)+1) SHORT_Aも同様。
>>555 の問題って、入力がintの範囲内であることは暗黙の了解としても、[0, 10]の範囲にあることの確認は不可能だよね?
charの範囲内としたら、(たとえintが規格的に最小な16bitでも)できそうだが。
>>628 「半角文字以外に「あ」とか「阿」のような全角文字が入力される場合まで考えると、正しい結果が得られなくなる場合があるのでは?」
って言ってるんだと俺は推測する。
JISとかユニとかの知識が乏しいので、俺には実際どうなのかはわからんが。
誰も
>>585 のコード見て苛つかないの?
同レベルだとみなされかねないし...
常連回答者だったら清書したくならないか?
632 :
622 :2010/02/13(土) 05:17:54
んじゃ、マクロを大文字に修正 #n s/v(\(.\))/V(\1)/g s/swap/SWAP/g s/w\([^h]\)/W\1/g p
しかしこういうビット演算は今までまったくやったことが無いので、
回答者のみんながホントスゲーんだなと分かる。
>>625 さんのようなバケットソートぽいのを自分でも書こうと思ったが、
まったく書けなかったのが辛いところ。
>>633 まずは愚直なコードからでもいいから一歩を踏み出す事が大事。
>>555 たぶんできてるはず。570のインスパイヤ
#include <stdio.h>
#include <stdlib.h>
int compareInt(int * left, int * right) { return *left - *right; }
FILE * OUT; int length = 3, * ans, * vals;
void createSwitch(int current, int * vals) {
int i;
if (current == length) {
for (i = 0; i < length; i++) ans[i] = vals[i];
qsort(ans, length, sizeof(int), (int(*)(const void*, const void*)) compareInt);
fprintf(OUT, "printf(\"");
for (i = 0; i < length; i++) { if (i != 0) fprintf(OUT, " "); fprintf(OUT, "%%d"); } fprintf(OUT, "\\n\", ");
for (i = 0; i < length; i++) { if (i != 0) fprintf(OUT, ", "); fprintf(OUT, "%d", ans[i]); } fprintf(OUT, ");\n");
return;
}
fprintf(OUT, "val = getchar() - '0';\ngetchar();\nswitch (val) {\n");
for (i = 0; i < 10; i++) {
vals[current] = i;
fprintf(OUT, "case "); fprintf(OUT, "%d", i); fprintf(OUT, ":\n");
createSwitch(current + 1, vals);
fprintf(OUT, "break;\n");
}
fprintf(OUT, "default:\nputs(\"input error\");\nreturn 1;\n}\n");
}
int main(void) {
OUT = fopen("shukudai555.c", "w"); vals = (int *) malloc(sizeof(int) * length); ans = (int *) malloc(sizeof(int) * length);
fprintf(OUT, "#include <stdio.h>\nint main(void) {\nint val;\n");
createSwitch(0, vals);
fprintf(OUT, "return 0;\n}");
return 0;
}
C言語の宿題と聞いて飛んできました。
>>629 @Aは、環境が書いてあるから、intを4bytesとして扱ったりポインタとして扱ったりの環境依存コードがかけるという解釈なんだろうか。
638 :
568 :2010/02/13(土) 20:45:46
>>571 ありがとうございました。自分今のところFORTRANしか
組めないんでFORTRANに移植するのやってみます。
>>635 すげ〜
といいたいところだが
>>584 と同レベルかそれ以下である
ということを示していない気がしないでもない
うむ。 マクロを使うとここまで短く出来るんだな。 行数で稼いでいるプログラマは犯罪的だ という教条の根拠か... しかしこれは逆に言えば、マクロを使うことが 禁止された時、それを読む人が地獄の責め苦 を受けることをまた意味しているとも言えるなw
>>641 コードのアセンブリ(実行最小単位)に対する圧密
度はC言語の出身地であるシステム記述の分野
では非常に重要な評価ポイントらしいね
その世界ではコードは圧密に書けば良いというもので
もなく逆に極端に希薄に書けば良いというものでも
なく結構奥深いらしい。
それにしても
>>584 と
>>640 の例は同じ記述が書き
方によって極端に変わる良い例なんだろな
555 たぶんできてるはず。570のインスパイヤ >>639
>>635 のを借りて見た目I/Oを改良
#include <stdio.h>
#include <stdlib.h>
FILE *OUT; int length = 3, *ans, *vals;
int compareInt(int *left, int *right) { return *left - *right; }
void createSwitch(int current, int *vals) {
int i;
if (current == length) {
for (i = 0; i < length; i++) ans[i] = vals[i];
qsort(ans, length, sizeof(int), (int(*)(const void*, const void*)) compareInt);
fprintf(OUT, "puts(\"");
for (i = 0; i < length; i++) { if (i != 0) fprintf(OUT, " "); fprintf(OUT, "%d", ans[i]); }
fprintf(OUT, "\");");
return;
}
fprintf(OUT, "while((val=1, printf(\">\"), scanf(\"%%d%%*c\", &val)) != 1 || val<1 || val>10) {\n"
"\t\t\t\t\tprintf(\"ERROR\\n\"); if(val==1) scanf(\"%%*s\");}\n\tswitch (val) {\n");
for (i = 0; i < 10; i++) {
vals[current] = i + 1;
fprintf(OUT, "\t\tcase "); fprintf(OUT, "%d", i + 1); fprintf(OUT, ": ");
createSwitch(current + 1, vals);
fprintf(OUT, " break;\n");
}
fprintf(OUT, "\t}\n\t\t\t");
}
int main(void) {
OUT = fopen("shukudai555.c", "w");
vals = (int *) malloc(sizeof(int) * length); ans = (int *) malloc(sizeof(int) * length);
fprintf(OUT, "#include <stdio.h>\nint main(void) {\n\tint val;\n\t\t\t\t");
createSwitch(0, vals);
fprintf(OUT, "return 0;\n}\n");
/* return 0; */}
あのー。誰も突っ込まないので俺が言う。
>>555 > 但しmain関数内ではint変数一つだけが使えるものとします。
> またmain関数の再帰呼び出しも出来ません。
> (main関数の引数、argc,argvをint変数として使用することも勿論禁止します)
> main関数のみで構成されるプログラムとして下さい。
お前一人だけどうあがいても落第だよw
ソースを生成するんだろうけど、出てくるのはつまらなそうだね。 これなら、秀丸のマクロでいいんじゃね。
なんか、問題自体が不毛だよなぁ。
とんち合戦の様相を呈してきたな。
いやむしろIOCCC2ch版というべきか
652 :
633 :2010/02/14(日) 16:09:58
あ、思いついちゃった。
>>648 さんの方法で、データを0-9で保存して1-10と表示させると、
INT_MAX.to_s.sizeの個数の数を扱えそう。
けどソートはどうするんだろうw
てか依頼者が消えた問題にいつまでも拘泥するのは 宿題スレのマナー違反
【質問テンプレ】 [1] 授業単元:データ構造とアルゴリズム [2] 問題文(含コード&リンク): 生徒数1000人分の学力テスト(五教科)の得点データが有る。ここで、任意の生徒Aと 得点の傾向が一番近い生徒の番号を高速で抽出できるようデータ構造を組みなさい。 (合計点が近い、ではなく、各教科の得点の傾向が大事のようです。) [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: VC++ [3.3] 言語: どちらでも可 [4] 期限: 無期限 [5] その他の制限: 無し 生徒のデータはstruct seito{int tensuu[5];};こんな感じです。 単に全部検索して得点差を計算したのを提出したらダメと言われました。 こういう問題を解く定石のようなものがあるのでしょうか・・・ 先輩方、よろしくお願いします。
>>654 簡単に考えれば、
0-20をE
21-40をD
41-60をC
61-80をB
81-100をA
みたいに評価をつけて、同じものを抽出すればいい気がする。
もうちょっと細かくランク分けしたほうがいいかな
>>654 プログラムを組む以前の問題として、どうゆう回答をすれば先生が満足するのか
そこがイマイチ不明だ・・・。
傾向が似ているかどうか、というだけなら、各教科の得点を偏差値に変換して、
5次元空間上にプロットした時に、任意の生徒Aとのユークリッド距離が
最も近い生徒を選べばいい気がする・・・。
仮にそれでいいとして、高速抽出するためのデータ構造を組め、ってなると
要は任意の生徒Aに最も近い得点の傾向の生徒Bを予め計算しておいて
AとBを対で持たせておけばいいとか、そうゆうことかな?
モデル化してそれに最適なデータ構造考えろと言ってるんだろ。 モデル化の部分はこれまで授業で触れられていると思う。
>>654 皆全員0点だった場合は誰を選べばいい?
誰でもいいんじゃね? みんな一緒だし。
656 のやり方で、データを読み込むとき予めソートしておくというのはどう?
日本語おかしいな。 データを読み込むときソートした状態にスレばいいんじゃないか?
>>654 極端な例の場合
ある生徒の得点分布が(50,51,52,53,54)
の場合(52,52,52,52,52)よりも(95,96,97,98,99)
の人のほうを選出したほうがいいの?
(0,20,40,60,100)のほうが近いとオモ
単に差を出したらダメって言ってるんだから、{52,52,52,52,52}だろうよ
>>654 「傾向が近い」というのは、例えば
A (70,63,77)
B (70,70,70)
C (90,81,99)
だと、A≒B じゃなくて A≒C、という解釈
・・・でいいのか?
1) 合計の偏差値を取り、Aに近い10%を抽出候補を絞る 2) 五科目点数の総当たりの大小比較を行い、Aと共通なら1異なったら0として その合計が最大のBを選出。 3) Bが複数出たらさてどうするか。
取り敢えずまだまだC言語で純正に一気に解決終了! って出来る問題じゃなさそうだな 数学の複素多様体の知識とかデータベースの知識も要りそう な問題で他のシステム(殆どが固有の言語を持つ)との 連携も要るような..
[4] 期限: 無期限 てのも何かコエーよw
foreach(生徒 in 生徒たち) { if(指定生徒 == 生徒) continue; match_average = 0; for(科目番号 = 0; 科目番号 < 5; 科目番号++) { diff = 生徒の得点[科目番号] - 指定生徒の得点[科目番号]; match_average += diff * diff; } if(best_match_average > match_average) { best_match_average = match_average 傾向が似ている生徒 = 生徒 } } 考え方は、これでいいのかな? match_average は、ユークリッド距離とか平均二乗偏差を意味する数値だけど、 あえて平方根をとらないことが高速化になってるしw
>>667 問題によっては複数の支援ツールからなるソリューションパッケージは
あっても単独ソルバーアプリにまではとても出来てない問題って沢山あ
るからな
671 :
669 :2010/02/15(月) 18:56:34
俺だったら「極座標」を使い、生徒の得点を中心からの距離と 緯度、経度とかの角度で表す。 「成績球」を半径方向と角度方向の非合同領域に分割し 生徒がどこに所属しているかで似ているかどうかを決める。 データ入力の段階で所属を決めるから、検索はデータの1回の 通読だけで至って単純。 だが領域の取り方が相当恣意的になりデータの分布が事前に 分かっていたら結果のコントロールもかなり出来るんで 敢えて書くべきコードじゃないと思うんでパス (実際の問題では球の中に決して一様に分布しないんで この方法は不適)
>672 出だしと、まとめが矛盾してるぞ? まあ、つべこべ言わずにコードを書いてみろ。 言ってることが難しすぎて俺にはトンと理解できねえ、 どんなコードになるのか興味あるわ。 書いてください、お願いします。
>>670 CとかC++とかJavaがソリューション系では好かれない理由は
書くべきプログラムは音楽みたいにmainで始まりトップダウ
ンに一気に終了ってパターンであるという固定観念を印象づ
けるからじゃね?ソリューション系ではどっちかというと
「絵」とか「図」を書くに近いんで。
多くのC/C++ Javaプログラムの実際はそうではないことは
ベテランにはわかってるんだが、教育プロセスにおいて
OJTで新人に教える時にコード字面から植え付けられる先入観が
結構邪魔してると認識されることが多いんじゃないかと
675 :
671 :2010/02/15(月) 20:25:39
>651 問題をよく読んでいなかった、データ構造を組まなきゃいけないのね。 0点だわwww
677 :
676 :2010/02/15(月) 23:03:19
>>676 一番近いものだけ分かればいいから qsort じゃなくてもよかった
依頼者(今回は質問者かな?)のレベルに追いついたことはわかったw
>>615 問題を解説してくれたまへ
ここまでで挫けた
ステップ1
double v(double x){
return 4*(pow(x, -12)-pow(x, -6));
}
v(x)==εn (但しεn=-0.75) となる二つの x を二分法で求めよ
ステップ2
ステップ1 で求めた xin xout を用いて次の積分を計算せよ
s(εn)=2*γ*∫sqrt(εn-v(x))dx
ステップ3
ステップ2 の結果を用いて n を求めよ
ステップ4
???
ステップ1〜4 を使って γ の値を変化させ…頑張れ
680 :
デフォルトの名無しさん :2010/02/16(火) 01:59:58
ちょっと関係ないかもしれないんだが、今の時期って大学とか休みだから、今ある質問って何の宿題? 長期休暇とかの?それとも高校のか?
大学院の専門分野での研究課題や入試問題を貼ってて、その後何も反応が 無い依頼は釣りだと思って、スルーしてたんだけど(´・ω・`) チガウノカナ?
実際に解く内容は簡単だけど 問題を理解するのが難しいw
数式こそ長くて複雑だが、やってることは方程式の解を求めることや数値積分だ。 2分法、セカント法、シンプソン公式を使えばいい。
>>676 これは>654の求めてるものと違うんじゃないかな?
『使いまわしの効かない検索用情報』の収集を
フルスキャンで行っているので、力まかせの探索にしかなってないよね。
>>689 一応正規化した段階の情報だけは使いまわせる
データ数が増えた時のパフォーマンスの低下率 条件付きUPDATE処理に置ける実更新率 こういった観点からデータ構造に見直しが入る やりかたは一つじゃなく、データの分布に 前提条件を置くことによって、相当のパフォーマンス 改善になるが、汎用性と信頼性は犠牲になる
k-dimension tree の出番ですか。
>>693 ある範囲内をすべて列挙するのは簡単そうだけど
ある場所の近所だけを調べるってのは簡単なの?
C言語固有の問題では無さそう。 データベース板か数学板で聞いてからの ほうが良さげ。てか依頼者はもう見てないのか?
こういう問題は、「相関度」は外部関数としてブラックボックス として扱うんじゃね?
相関度に最適なデータ構造の設計も課題なのだが。 そうだ、これもブラックボックスにしよう。
699 :
デフォルトの名無しさん :2010/02/17(水) 06:34:49
>>699 無料デバッガ募集でつか?(・∀・)ニヤニヤ
無料デバッグしてやるでつよ(・∀・)ニヤニヤ m_SumList.AddTail((void*)&List1); m_SumList.AddTailに渡すのは(void *)(CStringList **)&List1で本当にいいんでつか?
>699 いくらでも生じる可能性はある それにしてもC++で(void *)とか何考えているんだ
funkてw
>>697 そうだね。だが難しい。相関度に適当な仮定を入れないと
無理だろ
>>698 は回答として完全にナンセンスだが、それ以前に
問題も曖昧過ぎかもね。
>>697 この問題の場合は高速で処理できることも重視されてるようだから、
ブラックボックス化しても処理速度が同等以上ならそのほうが良いけれど、
そうでなければ、どちらがいいかは一概には言えないよ。
[1] 授業単元:
期末レポート
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10536.txt [3] 環境
[3.1] OS: (Windows/Linux/等々)
FreeBSD バージョンは知りません
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc バージョンは知りません
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
2月末日まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
C言語どころか、UNIXマシンの操作もおぼつきません。急ぎませんので
片付けて頂ければうれしいです
>>708 int binarycopy(FILE *, FILE *);
int main(int argc, char **argv){
FILE *src, *dest;
if (argc != 3) return -1;
src = fopen(argv[1], "rb");
if(src == NULL) {
fprintf(stderr, "%s が開けない\n", argv[1]);
return -1;
}
dest = fopen(argv[2], "wb");
if (dest == NULL) {
fprintf(stderr, "%s が作成できない\n", argv[2]);
return -1;
}
if(!binarycopy(src, dest)) {
remove(argv[2]);
fprintf(stderr, "複製に失敗\n");
return -1;
}
fclose(src);fclose(dest);
return 0;
}
>>708 続き。
int binarycopy(FILE *s, FILE *d) {
#define BUFFSIZE 256
char buff[BUFFSIZE], size = sizeof (char);
size_t n = 0, total = 0, buffsize = BUFFSIZE;
#undef BUFFSIZE
for (;;) {
n = fread(buff, size, buffsize, s);
n = fwrite(buff, size, n, d);
total += n;
// エラーが生じた場合や、end-of-file(ファイルの最後)に達した場合、
// 返り値は指定した個数よりも小さい値(またはゼロ)となる。
if (n == 0 || n < buffsize) break;
}
return total;
}
>>699 いf(pぃst2){
POSITION pos2 = plist1->GetHeadPositon();
CString str = plist1->GetNext(pos2);
}
HPはどのページも3クリック以内でたどり着けるのが良いとされています。 さて問題です。どのページからも、すべてのページへこの条件を満たすようにするには 各ページにリンクはいくつ必要でしょうか。 link(n)をページnのリンク数としたとき min { link(n) } を決定するという問題です。
714 :
713 :2010/02/19(金) 15:27:42
ページ数は、1000から1万の任意の値が与えられる物とします。
min(Σlink(n))じゃなくて? インデックスページを作り、 他のページはインデックスページへ1つのリンクを持てば どのページへも2クリックで行けるから min(link(n))はインデック以外のページすべて=1
∩★テンプレに即していないんで★雑談扱いとさせて頂きます★∩
min(max(link(n)))
ページのリンクの最大数を、最も小さくするようにするってことでした。
面白いけど奥深すぎ
>>654 クラスタリング k-meansでググれ
>>713 ページ数Nに対して 2√N くらいじゃないかね
戦略:
・全部のページを同じ大きさのm個のグループに分ける(各グループには N/m ページある)
・各グループにインデックスページを作り、
グループ内の他の全てのページと相互リンクする
・各グループのインデックスページを全て相互リンクする
・任意の2ページ間は多くても
自グループのインデックス→目標グループのインデックス→目標ページ
の3クリックで移動できる
一番リンクの数が多いのは各グループのインデックスページで、
max(link(n)) = (インデックス間の全結合) + (グループ内のリンク) ≒ m + N/m
これが最小になるのは m=√N のときで min(max(link(n))) ≒ 2√N
>>721 を書いてから半分にできることに気づいた
戦略:
・全部のページを同じ大きさのm個のグループに分ける
・グループ内のページは全て相互リンクする
・グループ内の(m-1)個のページにそれぞれ担当のグループを割り当て、
グループ間の担当のページ同士を相互リンクする
・任意の2ページ間は多くても
自グループの担当ページ→目標グループの担当ページ→目標ページ
の3クリックで移動できる
このとき、リンクの数が一番多いのはグループ間を繋ぐ担当のページで、
max(link(n)) = (グループ内の全結合) + (担当グループへのリンク) = N/m-1 + 1
最も効率が良くなるのは、グループ内の全てのページが他のグループの担当ページになるとき、
つまり N/m = m のときで、そのときm = √Nであって、 min(max(link(n))) = √N。
独り言を書くのは俺も含めて勝手だが... >一番リンクの数が多いのは... と勝手に決めて、それが最小になるのは... とする論法は頂けませんなw 希望的見積もりというのなら分かるが... このスレで常連回答者やってる人どんな質問にも 答えがあって、答えなければいけないんだと 思い込む空気が醸成されておりそれに毒されてしまっ てるかもしれないことに常に気をつけなければならないね。 プログラミングの場合は、数学の問題と違って 必ずしも正解があるとは限らない対象も扱わざるを得ない 場合が多くて大変だからこそ...
724 :
722 :2010/02/20(土) 01:51:03
>>723 >>一番リンクの数が多いのは...
>と勝手に決めて、それが最小になるのは...
>とする論法は頂けませんなw
ごめんなさいごめんなさい。
>>721 の勢いで適当なこと書きました。
ちゃんと計算したら max(link(n)) ≒ N/m + m/(N/m) で、
min(max(link(n)) ≒ 1.89*(N)^(1/3) くらいでしたorz
というかC/C++の宿題じゃないな、その点についても謝る
論点がずれてた件… 「この戦略のもと」ってちゃんと書かないといけないな 採った戦略が厳密に最適かは分からんが、 それでも準最適な戦略を考え出すのがプログラムに必要な能力
>>713 最適解かどうかは不明だけど、実現可能な解
#include<stdio.h>
#include<stdlib.h>
int max_min(long n)
{
long i, j;
if(n==1) return 0;
if(n<=4) return 1;
for(i=0;;i++)
{
for(j=1;j<=i;j++)
{
if(j*(i-j+1)*(i+1)+j>=n) return i;
}
}
return -1;
}
int main(int argc, char *argv[])
{
int n=1000;
if(argc==2) n=atoi(argv[1]);
printf("%d\n", max_min(n));
return 0;
}
727 :
726 :2010/02/20(土) 02:32:46
頭の中のハイパーリンクも含めたらそうなるなw
729 :
726 :2010/02/20(土) 03:03:20
>>713 これで実現可能になった…はず
#include<stdio.h>
#include<stdlib.h>
int max_min(long n){
long i, j;
if(n==1) return 0;
if(n<=4) return 1;
if(n<=7) return 2;
for(i=2;;i++){
for(j=2;j<=i;j++){
if(j*(i-j+1)*(i-j+1)+j>=n){
return i;
}
}
}
return -1;
}
int main(int argc, char *argv[]){
int n=1000;
if(argc==2) n=atoi(argv[1]);
printf("%d\n", max_min(n));
return 0;
}
スレ違いだけど解きたくなっちゃうのは仕方ないよな
解くべきはまずはその問題の出所。というよりも問題意識に共感できること。 そして実は対象に問題はなく真の問題は解きたいと思う汝自身に発している かも知れないということも考えると間違いは少ない。 以上チラ裏
http://pc12.2ch.net/test/read.cgi/tech/1261443439/739 #include<stdio.h>
int main(void){
int n,m,i,j;
float ans;
/* 解答 */
printf("ページ数:");
scanf("%d%*c", &n); m=n;
ans = (n+1)/3.0;
if((n=ans) != n) n++;
printf("\n%d[page] %d[link/page]", m, n);
/* 結果 */
for(i=1;i<=m;i++){
printf("\n%d:",i);
for(j=0;j<n;j++){
printf("%d ", (i + j*(n-1))%m+1 );
}
}
puts(""); return 0;
}
なんか、今見たら違ってる。
もっと減らせそう #include<stdio.h> int main(void){ int n,m,i,j; float ans; /* 解答 */ printf("ページ数:"); scanf("%d%*c", &n); m=n; ans = (n+1)/3.0; if((n=ans) != n) n++; printf("\n%d[page] %d[link/page]", m, n); /* 結果 */ for(i=1;i<=m;i++){ printf("\n%d:",i); for(j=0;j<n;j++){ printf("%d ", (i + j*3)%m+1 ); } } puts(""); return 0; }
>>737 >>722 のアルゴリズムの場合
ページ数 20 のときリンクの最大数は 4
これより減ることはあっても増えるのは無しだろう
1 : 2 3 4 5
2 : 1 6 7 8
3 : 1 2 9 10
4 : 1 2 11 12
5 : 1 2 13 14
6 : 1 2 15 16
7 : 1 2 17 18
8 : 1 2 19 20
9 : 1 2
10 : 1 2
11 : 1 2
12 : 1 2
13 : 1 2
14 : 1 2
15 : 1 2
16 : 1 2
17 : 1 2
18 : 1 2
19 : 1 2
20 : 1 2
739 :
738 :2010/02/20(土) 14:50:48
実際にリンク組んで確かめるプログラムはないんですか。
ていうか、あってるかどうか確認するプログラムって、オーダはどうなる? ページ数をN、最大クリック数をCとしたら、NCでできるのか?
U個のユニットに分け、ユニットをそれぞれG個のグループに分ける。 各々のグループにはn枚目のページがあるとする。 また、n >= Uという条件をつける。 このとき、総ページ数N = U*G*n まず、グループ内のn枚のページで、相互リンクを貼る。 相互リンクの数は (n-1)個 次に、グループ内のm枚目のページにm番目のユニットの各々のグループ内のページ(どれでもいい)各1枚へのリンクを貼る。 グループ外リンクの数は、G個 こうすると、(ユニット, グループ, ページ) = (u1, g1, p1)から(u2, g2, p2)へ行くのに、最大でも (u1, g1, p1) -> (u1, g1, u2) -> (u2, g2, ??) -> (u2, g2, p2)の3クリックで行ける。 また、このとき合計リンク数はG + (n-1)個 G + (n-1)が最小となり、N = U*G*n, n >= Uを満たす数字を考えると ・まず、Uを増やして数を稼ぎたいので、U=n ・よって、N=G*n^2を満たし、G+(n-1)が最小となるn, Gを求める ・計算の結果、それはn^3=2N, G=n/2のとき
例えば、64ページあるとき、 Unit 0{ Group 0{ Page 0 = [(0,0,1), (0,0,2),(0,0,3),(0,1,0)], Page 1 = [(0,0,1), (0,0,2),(0,0,3),(1,0,0),(1,1,0)], ...} Group 1{ Page 0 = [(0,1,1), (0,1,2),(0,1,3),(0,0,0)], Page 1 = [(0,1,1), (0,1,2),(0,1,3),(1,0,0),(1,1,0)], ...} } Unit 1{ Group 0{ Page 0 = [(1,0,1), (1,0,2),(1,0,3),(0,0,0),(0,1,0)], Page 1 = [(1,0,1), (1,0,2),(1,0,3),(1,1,0)], ...} Group 1{ Page 0 = [(1,1,1), (1,1,2),(1,1,3),(0,0,0),(0,1,0)], Page 1 = [(1,1,1), (1,1,2),(1,1,3),(1,0,0)], ...} } ... になって、グループ数=2, ユニット数=ページ数=4で、最大リンク数は5
ヒューリスティックアプローチを探したいものだが C/C++言語ではやめたほうがいいかも VM上で実行できる処理系でないと カーネルコードが書ける処理系ではお勧め出来ない
745 :
738 :2010/02/21(日) 02:02:28
746 :
デフォルトの名無しさん :2010/02/21(日) 08:46:43
>>713 です。みなさんサンクスです。動かして確認してみます。
>>745 1000個のほうはあってたよ。
10000個のほうは、おれの作った糞ツールでは、検証不能w
よかったらソースうpしてくれないか?
ちなみに>747とは別人です。
749 :
738 :2010/02/22(月) 00:03:29
>749 ありがと。 ここにあがってる回答はどれも不正解だった。 自分も正解はわからないけど、手計算で次の最適解を発見した。 ページ数 8 の答えは 2 ページ数 12 の答えは 3 ページ数 8 の最適解の例 1: 2 3 2: 4 5 3: 6 7 4: 8 1 5: 2 3 6: 4 5 7: 6 7 8: 8 1
floor(n^(1/3))でいけそうなものだけどだめなのかね
ceilだねごめん。
リンク3、リンク4で賄える最大ページ数を求める方が良いと思う。 それが決まればその表引きで求まる。
どの2点とっても、3つ以内の矢印でつながってるってことだろ。 総当たりやると矢印生成でかなり時間かかるな。 それを全ての2点でつながるかチェック。このチェックは時間かからないが、塵も積もれば山となる。
同じ場所へ複数リンクが付くと無駄なので、最大リンク3なら 初めの方はリンクがかぶらないように配置していいはずだな。 リンク3なら、総数が3*3*3=27より上には出来ないから、この範囲で増減しながらしらみつぶしでやるか。 1: 2 3 4 2: 5 6 7 3: 8 9 10 4: 11 12 13
このスレでちょくちょく出る宿題のテーマの道具 使えば最適解とは違うかも知れないがそれに肉薄 するのは簡単に出せるだろ? 但しヒューリスティックス系はC/C++では 書かないほうがいい。個人でやるのは止められないが ネット公開するのはやめたほうがいい。今時。
1000は18で出来るらしいが17以下の解見つけた人
759 :
548 :2010/02/22(月) 16:53:39
>>579 >>580 無事提出できました。
ありがとうございました。最初は
どちらのほうを参考にさせてもらえ
ばよいのか悩みましたが、結局
友達と相談しながらやったらみなさんと
同じ結果が出るようになったので
そちらをだしました。
>>757 1: 1 2 3 4 5 6 7 8 9 10
2: 11 12 13 14 15 16 17 18 19 20
以下略
金太郎飴方式恐るべし
金太郎飴方式 yowa
>>760 どこが金太郎飴かわからんけど、その調子でもう少し書いてみようか
金太郎飴方式 towa?
>>764 バイナリが更新されていないからじゃないかな
>>762 問題によっては最適解近辺は金太郎飴の断面みたい
な状況であることを原理とした探索法のことではな
いかと想像
>>766 修正前の実行ファイルを動かしたまま ソース修正
→ コンパイル
→ リンク (で、実行ファイルが上書きできなくて エラー)
→ 再実行 →あれ? 古いままの挙動じゃん
→ 実行ファイルのタイムスタンプ確認 アチャー
>>768 試してみましたが、それはないと思います。実際自分が作ったものは10.11行があっても動きますが、実際本に書いてあるのは
それの10,11行目がないものが書いてありました。
>>768 申し訳ありません。もう一度試してみたらうまくいきました。どうやらその行をctrl+xで切り取ったあと再び貼り付けてしまったようでした。
本当に申し訳ありませんでした。
俺試してみたけど削除したらピラミッドなんて出てこんよ
>>764 こちらで試したところでは、10行目、11行目を省くとピラミッドにはなりませんでした。
段数を入力してください。(0から40まで)
5
*
*
*
*
*
>>770 >うまくいきましたというのは768さんのいう通りということです。
すいません。
つまり?
>763 どこを切り取ってみても、数字がおなじ規則で並んでいる。 >760 の 1 の例だと 1 クリック目 9 種類のページにアクセス可能 2 クリック目 9 * 10 種類のページにアクセス可能 3 クリック目 9 * 10 * 10 種類のページにアクセス可能 もともといたページを含めて、ちょうど千種類のページにアクセスできる。 これは、どこを切り取ってみても、同じように数字が並んでいるので、 1 以外の数字についてもあてはまる。 規則的にならんでいるので、検証するにしても、 1 だけ検証できれば全部OKみたいな感じ。 1クリック目の選択肢が 9 種類しかなくて、n^3 の爆発力をかなり損しているけど ぎりぎり届いてた。n^3 の爆発力が重要な問題だった。
数学的なことはわからんけど、こんな法則をみつけた。 a = pow(N, 1/3) /* ページ数の3乗根をとる */ min = floor(a) /* 天井とそこをとる */ max = ceil(a) min = pow(min, 3) /* 3乗して元に戻す */ max = pow(max, 3) if(min < N && N <= max) { /* レンジに収まってれば */ printf("答えは %f だよ", ceil(a)) } else { printf("答えは %f だよ", floor(a)) }
>>750 のように一つずつずらしていけば、3クリック以内で到達できるようにできるってことか。
1000なら10個でいいってこと? 1000から999へいけるか。 1000 -> 1(2-11) -> 11(102-110) -> 110で最大到達地点は110では。
間違えた。一手目が1だけではない。再考する。
1から初めて全部いけそうだな。他の数字も純粋しているだけだから同様ってことか。 1 2- 2 12- 3 22- ・・・・ 10 92- 11 102- 12 112- ・・・・ 100 992- ・・・・ 998 972- 999 982- 1000 992-
>>776 9通りがよくわからなかったが今わかった。1は自分自身に向かわせてるからね。
2から初めて他所で自分自身に向かわなければこっちの方が効率良いはず。
一番重要なことは、金太郎飴方式だと、 リンク先のユニーク性を簡単に確保できることだね。 N^3 + N^2 + N + 1 >= N この付近が最適解だってのはわかってたけど、 ユニーク性の確保が悩みの種だったし。 1クリック目のとび先と、2クリック目の飛び先がかぶってたら 大きなロスになるし。
max(links(n)) * Σlinks(n) これで評価してみれば?
N=8の時の金太郎飴状態なリンク例 1:4 7 2:1 7 3:1 6 4:7 5:1 6 6:1 8 7:5 8 8:2 3
786 :
デフォルトの名無しさん :2010/02/23(火) 02:52:45
【質問テンプレ】 [1]プログラム演習 [2]標準入力から入力した自然数を変数iに格納し i<(2のj乗)となる最小の自然数j を求める。ただし再帰関数を用いる。 [3] Windows 7/Borland C++ 5.0/C言語 [4] 3/1迄 再帰関数がよくわからないので分かり易いサイトなどあれば教えてください。
int mypower2(int n) {
788 :
787 :2010/02/23(火) 09:38:29
ごめミスwスルーしてくれwww
789 :
787 :2010/02/23(火) 10:28:58
>>786 再帰関数は、自分で自分を呼ぶ関数と考えておけばおk
わざわざ関数作らなくてもシフトで良かったんだったw
int minpower(int j,int i)
{
return (1 << j) > i ? j : minpower( j+1, i);
}
main()
{
int i,j;
scanf("%d", &i);
j = minpower( 0, i);
}
790 :
◆RYJnp/9orQ :2010/02/23(火) 13:36:10
>>789 ありがとうございます。すみませんが
return (1 << j) > i ? j : minpower( j+1, i);
この行の?と:の意味がよくわかりません。
これはどういう動作をしてるのでしょうか?
?:は三項演算子。教科書読みなさい。
792 :
◆RYJnp/9orQ :2010/02/23(火) 13:48:36
>>791 ありがとうございます。すいませんでした。
クローンゲーム?
797 :
708 :2010/02/26(金) 12:37:08
>>709 ,710
ありがとうございます。
ただ課題の条件を満たしてる
とは私でもちょっと思えないのです。
どこに問題があるのかがわからない
ので多分NGじゃないかと
>>797 「問題」が何なのか書いてない、微妙に不親切な課題だけど
「問題」は「同じファイル名を指定したときにオリジナルのファイル消される」だと思う
今のところ使われている関数はstdio.hで定義されている分だけなのに
使われていないunistd.hがインクルードされていて、ヘッダファイルの追加を禁止しているところをみると
unistd.hで定義されている関数でどうにかしろってことだと思うぜ
799 :
708 :2010/02/26(金) 13:49:49
>>798 ありがとうございます
なんかそんなかんじですね。
しかし私にはここからどうすればいいのやら..
800 :
709 :2010/02/26(金) 15:22:57
>>708 > プログラムのmainの部分であるが、
> 既に問題を含んでいる。
> 問題を修正し、mainが呼び出している
> 関数で追加する必要がある部分を記述
ここでの問題、とは、
>>708 > int main(int argc,char **argv){
> FILE *src,*dest;
> int binarycopy(FILE*,FILE*);
> if(argc!=3)
上記三行目部分で、問題を修正とは、
>>709 > int binarycopy(FILE *, FILE *);
> int main(int argc, char **argv){
> FILE *src, *dest;
> if (argc != 3) return -1;
のように単に入れ替えること、と個人的には解釈した。
まさかとは思うけど、エラーが発生したときにfcloseしていないとか、そういうことを問題と言ってるんじゃないよね? 「同じファイル名を指定したときにオリジナルのファイル消される」のを修正するのは以外と難しい。 $ ./a.out foo ./foo のようなものは実際にファイルを開いてみないとわからないし、 $ ln -s bar foo してあったら $ ./a.out foo bar でも、オリジナルのファイルが消されてしまいます。
802 :
709 :2010/02/26(金) 15:33:02
と、思ったら、嫌な予感。
まさかと思い確認すると、
>>708 > int main(int argc,char **argv){
> FILE *src,*dest;
> int binarycopy(FILE*,FILE*);
> if(argc!=3)
これは間違いでも何でもなかった。
ごめんw
同じファイルをコピーしても消えないように力技で対策してみたw&removeする前にファイル閉じないといけないかもなんで閉じといたw int main(int argc, char** argv) { FILE *src, *dest; int binarycopy(FILE*,FILE*); if (argc != 3) return -1; src = fopen(argv[1], "rb"); if(src == NULL) { fprintf(stderr, "%s が開けない\n", argv[1]); return -1; } //読み書き両用で開く dest = fopen(argv[2], "rb+"); if(dest==NULL){ //開けなかったら書き込み用で再試行 dest = fopen(argv[2], "wb"); } if (dest == NULL) { fclose(src); fprintf(stderr, "%s が作成できない\n", argv[2]); return -1; } if(!binarycopy(src, dest)) { fclose(src); fclose(dest); remove(argv[2]); fprintf(stderr, "複製に失敗\n"); return -1; } fclose(src);fclose(dest); return 0; }
これは
>>710 を改造させてもらった
unix系の環境が手元にないんで、動くかどうかシランw
int binarycopy(FILE *s, FILE *d) {
#define BUFFSIZE 256
char buff[BUFFSIZE], size = sizeof (char);
size_t n = 0, total = 0, buffsize = BUFFSIZE;
#undef BUFFSIZE
// 出力ファイルポインタを先頭にもっていく
rewind(d);
for (;;) {
n = fread(buff, size, buffsize, s);
n = fwrite(buff, size, n, d);
total += n;
// エラーが生じた場合や、end-of-file(ファイルの最後)に達した場合、
// 返り値は指定した個数よりも小さい値(またはゼロ)となる。
if (n == 0 || n < buffsize) break;
}
// 出力ファイルをtotalサイズで切り詰める
ftruncate(_fileno(d),total);
return total;
}
805 :
708 :2010/02/27(土) 06:41:00
806 :
デフォルトの名無しさん :2010/03/02(火) 21:39:22
[1] 授業単元:C++ [2] 問題文(含コード&リンク): 成績を表示するプログラムを作成せよ。処理する人数は40人であるとする。以下の様な仕様である 1番の成績を入力せよ 85 1番は85点です 2番の成績を入力せよ 100 2番は100点です for(i=___;i<=____;____) { cout << i << "______\n"; cin >> n; cout << i << "____" << n << "_____\n"; } この上のプログラムの一部を使って(アンダーラインを穴埋めして)、上の使用を満たすプログラムを作成せよ。[3] 環境 [3.1] OS: xbuntu [3.3] 言語: C++ [4] 期限: 2010年3月3日まで [5] その他の制限: for文でお願いします。できるだけ簡単にお願いします。 あと、 #include<iostream> using namespace std; int main() { で始めて return 0; }で終えるようにしてもらえますか
807 :
デフォルトの名無しさん :2010/03/02(火) 21:42:14
[1] 授業単元:C++ [2] 問題文(含コード&リンク): 角度0から90°,10°刻みのsin,cos,tanの表を作成せよ [3] 環境 [3.1] OS: xbuntu [3.3] 言語: C++ [4] 期限: 2010年3月3日まで [5] その他の制限: for文でお願いします。できるだけ簡単にお願いします。 あと、 #include<iostream> using namespace std; int main() { で始めて return 0; }で終えるようにしてもらえますか
>>807 #include<iostream>
using namespace std;
int main() {
cout << " | sin | cos | tan " << "\n"
<< "----+-------------------------------" << "\n"
<< " 0 | 0.000000 | 1.000000 | 0.000000" << "\n"
<< " 10 | 0.173648 | 0.984808 | 0.176327" << "\n"
<< " 20 | 0.342020 | 0.939693 | 0.363970" << "\n"
<< " 30 | 0.500000 | 0.866025 | 0.577350" << "\n"
<< " 40 | 0.642787 | 0.766045 | 0.839099" << "\n"
<< " 50 | 0.766044 | 0.642788 | 1.191753" << "\n"
<< " 60 | 0.866025 | 0.500000 | 1.732050" << "\n"
<< " 70 | 0.939693 | 0.342020 | 2.747475" << "\n"
<< " 80 | 0.984808 | 0.173648 | 5.671272" << "\n"
<< " 90 | 1.000000 | 0.000000 | --------" << endl;
return 0;
}
809 :
デフォルトの名無しさん :2010/03/02(火) 22:41:19
>>808 いつも出力ってcoutで始めていたんですが、今回はcoutって使わないんですか?
;は分の最後のいらないんですか?
810 :
デフォルトの名無しさん :2010/03/02(火) 22:43:50
>>808 これって、多分、予め、表を作ると、プログラムの意味ないし、まずくないですか
sin,cos,tanの値は全部、計算するんですよね
>>810 表を作れとは書いてあるがどこに計算しろと書いてあるんだ
>>809 そこまで気づいてるなら自己解決できそうなもんだが。
5行目の「cout <<」から16行目の 「<< endl;」までがながーい1つの文だ。
for文を使えとは書いてあるがな
814 :
デフォルトの名無しさん :2010/03/02(火) 23:11:51
>>811 そうですね。しかし、これは、cout(6行目から)や;(それぞれの文末)はいらないんですか?
815 :
デフォルトの名無しさん :2010/03/02(火) 23:14:23
>>812 >>814 の事はもう出ていました。ごめんなさい。endl;は\n;にしているのでそこはそっちにしようと思います。
>>1 #include <iostream>
#include <cmath>
#define M_PI 3.14159265358979323846
using namespace std;
int main(){
cout << fixed;
for(int deg=0; deg<=90; deg+=10)
cout << deg << " "
<< sin(deg/180. * M_PI) << " "
<< cos(deg/180. * M_PI) << " "
<< tan(deg/180. * M_PI) << endl;
}
817 :
デフォルトの名無しさん :2010/03/03(水) 01:10:13
818 :
デフォルトの名無しさん :2010/03/03(水) 01:13:35
>>817 これ、コンパイル行うとtan90°だけ、とんでもない値が出てしまうんですが…
819 :
デフォルトの名無しさん :2010/03/03(水) 01:14:36
>>818 tan90° がいくらになるか分かってる?
tan90°=1/0=+NAN
NaNに+も-もなかろう
823 :
デフォルトの名無しさん :2010/03/03(水) 17:05:05
>>822 定義されてるCPUもある
無視してもしなくても使用者次第
825 :
デフォルトの名無しさん :2010/03/03(水) 19:31:36
>>816 tan90°は値が無いのでそうでてもいいと思うし、そうします。ありがとうございました。
826 :
デフォルトの名無しさん :2010/03/03(水) 19:36:14
[1] 授業単元:C++ [2] 問題文(含コード&リンク): 任意の整数から整数までの合計を計算するプログラムを作成せよ。ただし、必ず、(始めに入れた数字)<(最後に入れた数字)となるように数値を入力するものとする。 始めの数を入力せよ 156 終わりの数を入力せよ 328 156から328までの合計は41866です。 上の問題では(始めに入れた数字)<(最後に入れた数字)としたが、これを、(始めに入れた数字)≧(最後に入れた数字)と入力しても合計を計算できるようなプログラムも作成せよ [3] 環境 [3.1] OS: xbuntu [3.3] 言語: C++ [4] 期限: 2010年3月4日まで [5] その他の制限: for文でお願いします。できるだけ簡単にお願いします。 あと、 #include<iostream> using namespace std; int main() { で始めて return 0; }で終えるようにしてもらえますか
>>824 NaNの+と-ってどうやって見分ければいいの?
+と-のInfinityと勘違いしてるに2ガバス
>>826 #include<iostream>
using namespace std;
int main() {
int m, n, t, sum = 0;
cout << "始めの数を入力せよ" << endl;
cin >> m;
cout << "終わりの数を入力せよ" << endl;
cin >> n;
if (n < m) {
t = m;m = n;n = t;
}
for (int i = m; i <= n; i++) sum += i;
cout << m << "から" << n << "までの合計は" << sum << "です" <<endl;
return 0;
}
#include <cstdlib> #include <fstream> // ここから始まる... #include <iostream> using namespace std; int main() { ofstream of("prog.cpp"); int i, start, end; cout << "初めの数字を入力せよ" << endl; cin >> start; cout << "終わりの数字を入力せよ" << endl; cin >> end; of << "#include <iostream>" << endl; of << "using namespace std;" << endl; of << endl; of << "int main()" << endl; of << "{" << endl; of << "\tlong int sum = " << start; for (i = start + 1; i <= end; ++i) of << " + " << i; of << ";" << endl; of << "\tcout << " << start << " << \"から\" << " << end; of << " << \"までの合計は\" << sum << \"です。\" << endl;" << endl; of << "\treturn 0;" << endl; of << "}" << endl; of.close(); system("g++ prog.cpp -o prog"); system("./prog"); return 0; }
831 :
デフォルトの名無しさん :2010/03/03(水) 20:18:54
#include<iostream> using namespace std; int main(){ cout << "始めの数を入力せよ" << endl; int m; cin >> m; cout << "終わりの数を入力せよ" << endl; int n; cin >> n; if (n < m){ int t = m;m = n;n = t; } cout << m << "から" << n << "までの合計は" << (((m + n) * (n - m + 1)) >> 1) << "です" <<endl; return 0; }
>>826 #include<iostream>
using namespace std;
int main() {
int s,e;
cout << "始めの数を入力せよ" << endl;
cin >> s;
cout << "終わりの数を入力せよ" << endl;
cin >> e;
cout << s << "から" << e << "までの合計は" << s*(e-s+1)+(e-s)*(e-s+1)/2 << "です。" << endl;
return 0;
}
834 :
831 :2010/03/03(水) 20:59:50
これって 始めの数 3 終わりの数 8 って入れても 始めの数 9 終わりの数 2 って入れてもどっち(始めの数が大きい場合と小さい場合)でも計算できるのを作るのが2番目だと思うんですが、(始めに入れた数字)≧(最後に入れた数字)の場合しか計算できないんですよね…
>>834 あなた自身の書き込みに
>ただし、必ず、(始めに入れた数字)<(最後に入れた数字)となるように数値を入力するものとする。
という前提条件がありますけど?
836 :
831 :2010/03/03(水) 21:12:52
>>835 上の問題ではその様にしましたが、下の問題では(始めに入れた数字)≧(最後に入れた数字)でも計算できるようにせよって事ではないんですかね?
あぁ見逃してた if (e < s){ int t = s;s =e;e = t; } swapすればいいだけかと。
838 :
831 :2010/03/03(水) 21:28:01
#include<iostream> using namespace std; int main(){ int t,s,e; cout << "始めの数を入力せよ" << endl; cin >> t; cout << "終わりの数を入力せよ" << endl; cin >> s; if (e < s){ int t = s; s = e; e = t; } cout << t << "から" << s << "までの合計は" << (((t + s) * (s - t + 1)) >> 1) << "です" <<endl; return 0; } どこが違いますかね…どちらにしても、for文を使うんですよね…
>>826 #include<iostream>
using namespace std;
int main()
{
int s, e, is, ie;
cout << "始めの数を入力せよ" << endl;
cin >> s;
cout << "終わりの数を入力せよ" << endl;
cin >> e;
is = s;
ie = e;
if (s > e) {
is = e;
ie = s;
}
cout << s << "から" << e << "までの合計は"
<< ie * (ie + 1) / 2 - is * (is - 1) / 2
<< "です。" << endl;
return 0;
}
840 :
831 :2010/03/03(水) 21:45:35
>>839 すみません。やっぱり結果がおかしくなってしまうんですよね。
どうおかしくなるのかわからないと直しようがないと思うんだけど 端末に吐き出されるデータ貼ってみたら?
842 :
831 :2010/03/03(水) 22:08:13
>>841 ごめんなさい。勘違いしておりました。申し訳ありませんでした。
ありがとうございます
(start+end)(end-start+1)/2 じゃね?
844 :
831 :2010/03/03(水) 23:01:08
>>843 でも、 ie * (ie + 1) / 2 - is * (is - 1) / 2 でも出ますよ
ie * (ie + 1) / 2 - is * (is - 1) / 2 = ((ie^2 - is^2) + ie - is) / 2 =((ie + is)(ie - is) + (ie - is)) / 2 = (ie + is)(ie - is + 1) / 2 よってどちらでも同じ
846 :
831 :2010/03/03(水) 23:44:03
確認で、自分で数字代入したらどっちでも等しくなりました。 ありがとうございました
847 :
831 :2010/03/03(水) 23:57:44
[1] 授業単元:C++ [2] 問題文(含コード&リンク): 入力した整数の桁を数えるプログラムを作成せよ 整数値を入力せよ 5659693 7桁である。 プログラムの一部を以下に示す ____{ a=a/10; keta++; }_____ ___ を穴埋めしてください。 [3] 環境 [3.1] OS: xbuntu [3.3] 言語: C++ [4] 期限: 2010年3月4日まで [5] その他の制限: while,do-while文辺りでお願いします。できるだけ簡単にお願いします。 あと、 #include<iostream> using namespace std; int main() { で始めて return 0; }で終えるようにしてもらえますか
#include <iostream> using namespace std; int main() { int a, keta = 0; cout << "整数値を入力せよ" << endl; cin >> a; do { a = a / 10; keta++; }while(a); cout << keta << "桁である。" << endl; return 0; }
849 :
デフォルトの名無しさん :2010/03/04(木) 00:16:03
ありがとうございました
850 :
839 :2010/03/04(木) 00:28:16
>>843 > (start+end)(end-start+1)/2 じゃね?
なるほど、843の方がオーバーフローしにくいから、良いですね。
[1] 授業単元:知識情報基礎実験 [2] 問題文(含コード&リンク): 乱数を希望数取得し、それをバブルソート、挿入ソート、クイックソート、ヒーブソートの各種を用いてソートせよ(4個のプログラムを作成する)。 また、それぞれ比較回数、実行時間を計測せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Cygwin Bash Shell [3.3] 言語:C言語 [4] 期限:明日 [5] その他の制限:できるだけ標準ライブラリ関数は使わないでください。特にクイックソートはqsort関数を使わないでください。
>[3.2] コンパイラ名とバージョン:Cygwin Bash Shell こんな学校あるの?
853 :
デフォルトの名無しさん :2010/03/04(木) 00:53:59
do〜while文と同じ機能を持つ文章をwhile文で書くにはどうすればいいですか? for文と同じ機能を持つ文章をwhile文で書くにはどうすればいいですか?
do{ }while(〜) while(1){ ... if(〜)break; }
>>852 すいません、素人なんでその辺よく分かってなくて。なんか変でしたか?
Cygwinなら何でもいいんだろ MinGWでもいいし 要するにgccならLinuxだっていいんでわ
OSも指定されてるじゃないか。 意地悪して曲解しないで、WindowsのCygwin環境でgcc使う、と解釈してやれよ。
説明下手ですいません。
>>857 さんの言うとおりです。
WindowsでCygwin、gccでお願いします。
ホント、説明下手ですいません。
>>857 いや。
授業料を払ってまで
> WindowsのCygwin環境でgcc使う
なんてのは嫌だなぁとね
>>859 でも、フリーのコンパイラの方がいまや権威がありませんか?
それともVC の cl のほうがいいですかね?
俺はgccじゃなくてWindowsが嫌なのかと思ったが これはマ補正か
Cygwin with bashコンソールと 言えばgccが定番だがこの環境である限り gcc以外にもVcやらbccも動いてしまう (コマンドライン版だが) 幸い、課題はコンパイラの種類に 鋭敏に依存って系統じゃないが。 コンパイラが記載されてない場合は コンパイラの種類を極力選ばない コードってことになるが、これは不可能か 当然時間がかかるかのいずれかで 明日までとの期限設定は相当無謀ぢゃないかと。
864 :
デフォルトの名無しさん :2010/03/04(木) 15:18:52
>>854 それって1番の問題ですか?あと、〜や…には実際例えばどんな事が入るんでしょうか
>>863 なんでこんな課題でそんなにコンパイラ依存のコードを思いつけるんだ?
Windows上のC処理系はそれぞれがかなり拡張されていて 処理系非依存なコードを書くのは至難の技だったりする これは一般論的常識(但し勿論そんなに知られていない) プロンプト上で動かす配列ソートプログラム程度では あまし当て嵌まらない。 これ特殊な例外になるがトレーニングレベルではむしろ こっちのほうが目立つ。 テンプレに沿う限り一般論を基礎にせざるを得ないだろ?
867 :
デフォルトの名無しさん :2010/03/04(木) 17:27:26
#include <iostream> using namespace std; int main() { int ninzu=1,ten; while(1){ cout << ninzu << "人目の点数を入力してください\n"; cin >> ten; if(ten == 999) break; if(ten >= 101 || ten < 0){ cout << "点数が不正です。再度入力してください\n"; continue; } cout << ninzu << "人目の点数は" << ten << "点です\n"; ninzu++; } cout << "点を入力した人数は" << ninzu-1 << "人です\n"; return 0; } このプログラムで最後のcoutの行の『ninzu-1』ではなくて『ninzu』と直接人数を表せる風にするにはどうすればいいですか
int ninzu=1を int ninzu=0に書き換える
--ninzu;を表示する前に入れる。
870 :
デフォルトの名無しさん :2010/03/04(木) 19:17:08
871 :
デフォルトの名無しさん :2010/03/04(木) 20:08:03
int ninzu=1を int ninzu=0に書き換えて、最後から4行目の上に--ninzuu;って入れるんですかね?
やってみてから聞け
873 :
デフォルトの名無しさん :2010/03/04(木) 20:28:44
>>872 4人目に999入れると
入力した人数は2人って出るんです
普通に考えるとどっちか1つでいいと思うんだが・・・
インクリメントでカウントしていくときは 初期値を0にしておくのが一般的
入力した人数を少なめに申告するのは女の嗜み
877 :
デフォルトの名無しさん :2010/03/04(木) 20:46:38
>>874 0人目の点数を入力してください
90
…
5人目の点数を入力してください
999
点数を入力した人数は4人です
って出ました
#include <iostream> using namespace std; int main() { int ninzu=0,ten; while(1){ ninzu++; cout << ninzu << "人目の点数を入力してください\n"; cin >> ten; if(ten == 999){ninzu--;break;} if(ten >= 101 || ten < 0){ cout << "点数が不正です。再度入力してください\n"; continue; } cout << ninzu << "人目の点数は" << ten << "点です\n"; } cout << "点を入力した人数は" << ninzu << "人です\n"; return 0; } これでどう?終了判定の部分をもうちょっときれいにしたいけど・・・
879 :
デフォルトの名無しさん :2010/03/04(木) 21:19:57
>>878 これって、3人目に999を入れると、。入力した人数2人って出るんですが、それはいいんですか
999ってのは「データの入力が終わりますよ」って意味で入力してるんじゃないの? if(ten == 999)ってところを見るとそういう風に見えるんだけど。 あと、if(ten >= 101 || ten < 0)としている時点で999を点数として処理しないようになってるし。
881 :
デフォルトの名無しさん :2010/03/04(木) 22:01:36
>>880 そうですね。999はそういう意味ですよね。ありがとうございました。
#include <iostream> using namespace std; int main() { int ninzu=1,ten; while(1){ cout << ninzu << "人目の点数を入力してください\n"; cin >> ten; if(ten == 999){break;} if(ten >= 101 || ten < 0){ cout << "点数が不正です。再度入力してください\n"; continue; } cout << ninzu << "人目の点数は" << ten << "点です\n"; ninzu++; } ninzu--; cout << "点を入力した人数は" << ninzu << "人です\n"; return 0; } 致命的な間違いをしてたorz
883 :
デフォルトの名無しさん :2010/03/05(金) 00:02:53
ぽっくり?
>>883 100より大きい点数を入れてみれば分かる
886 :
デフォルトの名無しさん :2010/03/05(金) 00:44:39
>>885 その101以上の点数の人も数えちゃってるって事ですね。
ありがとうございます
887 :
デフォルトの名無しさん :2010/03/05(金) 01:13:47
>>885 すみません。これ元のにninzu--入れたみたいなんですが、888とか入れてみても結果は同じなんですよね
888 :
デフォルトの名無しさん :2010/03/05(金) 01:17:14
>>887 つまりこれが、ninzu-1をninzuと直接表せるやり方って事ですか。納得しました。ありがとうございます
int ninzu=0,ten; while(1){ cout << ninzu+1 << "人目の点数を入力してください\n"; cin >> ten; if(ten == 999) break; if(ten >= 101 || ten < 0){ cout << "点数が不正です。再度入力してください\n"; continue; } ninzu++; cout << ninzu << "人目の点数は" << ten << "点です\n"; } cout << "点を入力した人数は" << ninzu << "人です\n";
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 行列のrankを求める関数 rank( ) を実装せよ (提示ソースコードは後記) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 3/15 [5] その他の制限: 提示されたプログラムは下記のもの。
892 :
891 :2010/03/10(水) 11:08:16
>>891 の続き
include <iostream>
#include <cstdlib>
using namespace std;
#define ROWS 5
#define COLS 4
int rank( double array[ROWS][COLS] )
{
}
int main( )
{
srand( time(NULL) );
double array[ROWS][COLS];
for( int r=0; r<ROWS; ++r ){
for( int c=0; c<COLS; ++c ){
array[r][c] = rand( );
}
}
rank( array );
return 0;
}
893 :
891 :2010/03/10(水) 11:12:49
>>891 基本変形とかLUでいいの?
それともSVDやQRでってこと?
895 :
891 :2010/03/10(水) 14:12:55
速度より私が理解できた方が良いので 基本変形が嬉しいです。
最近宿題が少ないなあ。もしかしてマークされているのか?
春休みに宿題が出る人は留年生じゃねw?
そっかー、世間は春休みなんだ。うらやましいなあ。
全国風俗店、乳揉み料金通常の50%引きサービス中って噂だけは 信じるなよ
[1] 授業単元: [2] 問題文(含コード&リンク): C++/CLI で、Hello People! な問題。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC.NET [3.3] 言語: C++/CLI [4] 期限: [201x年3月13日23:59まで] [5] その他の制限: s-巣ファイルは1ファイルでお願いします。
fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? 追加はしていませんけど?削除はしました?何か? このエラー、ちょっと世間的にはどう解釈する? using namespace System::Diagnostics; int main() { Debug::WriteLine(L"こんにちは"); return 0; }
VC++だったら'#include "stdafx.h"'は必要 >'#include "stdafx.h"' をソースに追加しましたか? っていうのは、'#include "stdafx.h"' を追加する作業をきちんとやっているかどうかの確認メッセージ
>追加はしていませんけど?削除はしました?何か? 追加しろっていわれてるんだよw
>>904 #include "stdafx.h"
あと死ね。
>>904 プロジェクトでプリコンパイル済みヘッダを使う設定になっている
空のプロジェクト以外だとたぶんデフォルトでオンだから
プロジェクトのプロパティで設定を解除してくれ
ややこしいのは、プロジェクトのプロパティとは別にソースファイル別にも設定が可能なので
ソースコードごとに設定されている場合は右クリックのプロパティからそれも解除してくれ
ソースファイル別の設定をいじると、次からプロジェクト全体の設定を変えても ソースファイル別の設定を連動して変えられなくなるーなあ。 なぜなら、.vcproj で覚えてるから。 > 右クリックでなくてもファイルをクリックしてプロジェクトのプロパティで設定出来るよ。
[1] 授業単元:なし [2] 問題文(含コード&リンク): [source] int func(int b, int n){ if (n == 0) return 1; else return b * func(b, n-1); } [問題] 1.funcは何を計算する関数か述べよ 2.この関数の計算コストをオーダで答えよ。理由も述べよ [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン: 不明 [3.3] 言語:C [4] 期限: できるだけ早くお願いします [5] その他の制限:Cを初めて3ヶ月程度です。 どうぞよろしくお願いいたします。
>>912 1. func(b,n) = b^n (bのn乗)
2. O(n)
再帰的に func(b,n), func(b,n-1), func(b,n-2), ... ,func(b,0) を呼び出す。
また、再帰呼出以外の処理は定数時間で終了する。
その他:nに負の数を渡すと酷い目にあう(きっとスタックオーバーフローで落ちる)
>>913 こんな遅い時間にありがとうございます。感謝します。
915 :
デフォルトの名無しさん :2010/03/15(月) 07:16:45
[1] 授業単元:Unix プログラミング
[2] 問題文(含コード&リンク): C++/CでUnixのls -R -lと同じ動作をするmyls.c (.cpp)を作成して下さい。
ls:ディレクトリ内のファイルをリストアップ。-R:サブディレクトリも探査。-l:sys/stat.hを使いファイルの詳細を表示する。
[3] 環境
[3.1] OS: FreeBSD, MacOSX 10.5.6
[3.2] コンパイラ名とバージョン: GCC
[3.3] 言語: C++/C
[4] 期限: [2010年3月16日19:00まで]
[5] その他の制限: 一応自分で書いてみたのですが(リンクはソースコード)、サブディレクトリを再帰してくれません。
(ソースコード)->
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10554.txt 宜しくお願いします。
917 :
デフォルトの名無しさん :2010/03/15(月) 09:18:14
>>916 お力添え感謝します!
動作はしているんですが、ディレクトリ内のサブディレクトリに対する再帰処理のやり方で困惑しています。
多分可変箇所は70行目〜80行目のディレクトリかファリルかを区別し再帰する部分にあるとおもうんですが、
いまいちやり方が分からずにいます。
918 :
916 :2010/03/15(月) 18:18:32
919 :
915 :2010/03/15(月) 19:28:28
>>918 救われました。有り難うございます。memset()とstrcat()の使い方に惚れそうです。
確かに私のFreeBSDの挙動とも少し違いますね。
最初にrootディレクトリを走査・表示してから、各サブディレクトリの方に移って行っているようです。
そのoutputの部分は私自身でなんとか出来ると思うので、頂いたコードに加筆させて頂いてもいいでしょうか?
改めて有り難うございます。
920 :
デフォルトの名無しさん :2010/03/16(火) 10:28:07
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 1.fgets関数を用いてpgmファイルの始めの2行(添付ファイルの場合, P2, 304, 322)をそれぞれ、変数header, width, heightに格納するプログラム 2.上記で記憶したheader, width, heightを別ファイルに書き出すプログラム 1.と2.をそれぞれ作成せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc *すみませんバージョン不明です。 [3.3] 言語: C [4] 期限: 3/23 [5] その他の制限:pgmファイルは最初の3行下記のようになってます。 P2 304 322 255
921 :
デフォルトの名無しさん :2010/03/16(火) 13:48:49
[1] 授業単元:Unix プログラミング
[2] 問題文(含コード&リンク):時間昇降順で表示するwhoをC/C++で書きなさい。
[3] 環境
[3.1] OS: FreeBSD, MacOSX 10.5.6
[3.2] コンパイラ名とバージョン: GCC
[3.3] 言語: C++/C
[4] 期限: [2010年3月16日19:00まで]
[5] その他の制限:
915の者です。連続投稿申し訳ありません。
またもや問題発生しまして、お力を借りにきました。
あと一歩だと思うのですが、Undifined Symbolsと出て、アウトプットが出ません。
(ソースコード)->
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10556.txt 何卒宜しくお願いします。
922 :
921 :2010/03/16(火) 14:39:59
なお、プログラムの著作権は私に帰属しますので、ご理解ください。
著作権www
>>921 undefined symbolsの意味を理解して下さい。どのシンボルが解決できていないかを書かないと、
問題を解決できません。手元のMac OS X 10.5ではコンパイルできたので、環境に起因するの問題か
もしくはg++ではなくてgccでコンパイルしようとしていた可能性があります。
すごいのがきたな著作権てww
宿題に著作権・・・?
928 :
921 :2010/03/16(火) 19:18:34
>>924 有り難うございます。
MacOSX10.5でコンパイルできたんですか?仰る通り環境から来る問題かも知れませんので設定調べてきます。
>>925 有り難うございます。
頂いたものだと無事コンパイルできたのですが、アウトプットが出てきません・・・。
UTMPX_FILEからは43行目のutmpx[READING]に正確に読み取っていると思うんですが、その後のqsortでこけてるのかもしれないです。
>>922 著作権を貰える様な、デカイもの書けるようになりたいですwww
なんでもいいけど著作権はもらわずとも勝手にできてるもんだろ それをいうなら「大手を振って著作権を主張できるよう」なものじゃね?
930 :
デフォルトの名無しさん :2010/03/16(火) 19:49:27
>>929 著作権は元々備わっているものなんですよね。
「著作権を主張しても恥ずかしくないもの」がしっくり。
>928 正しくパッチを当てたら43行目はブレースのはずだけど 僕の環境では、出力がwhoとは多少異なるけど、期待通りの出力が得られた メモリエラーなどは全く無かった(ツール使って確認済) 怪しいのは36行目と思っているんだけど メモリエラーなどは全く無く(ツール使って確認済) g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46) Linux 2.6.18-164.11.1.el5.centos.plus i686
932 :
921 :2010/03/16(火) 21:22:36
なぜかパッチ後に43行目がutmpx[READING]になっている・・・。 手動で打ち直してみたけどやっぱしだめだった。 修正後のファイルをtxtあげてくれたら、すごく嬉しいです・・・。 いつの間にか朝になってる・・・
934 :
921 :2010/03/16(火) 21:46:46
>>933 アウトプット正常にでました!
私が処理したやつはパッチの当て方がなにか悪かったのか、RedHat to Macはデフォでラインオーバーしてしまうのか。
本当に感謝です。
std::multiset 使って insert していくほうが楽じゃないか?
>>921 #include <stdio.h>
#include <stdlib.h>
#include <utmp.h>
#include <time.h>
typedef struct utmp u; typedef const void v;
static int o(v* x,v* y){long a=((u*)x)->ut_time, b=((u*)y)->ut_time;return(-((a>b)?+1:((a<b)?-1:0)));}
void main(){ long i=0,t;u b[99];u* p=b;fread(b,sizeof(u),99,fopen(UTMP_FILE,"r")); qsort((void*)b,99,sizeof(u),o);
while(i++<99){t=p->ut_time; if(p->ut_type==USER_PROCESS){printf("%-9s%-13s%.16s%s\n",p->ut_name,p->ut_line,ctime(&t)+4,p->ut_host);}p++;}
}
新しいほど上の方にでるwhoコマンドみたいなのです。whoコマンドっての今日はじめて知りました。エロゲーしかしないんで。
昇降順?って言葉、よくわかんないでした… どっちだ〜〜(・_; ↑うえかな? ↓したかな? ってなっちゃう… ばかなので…
わかんないんで、上なほど新しい時間にました。まぁ、べつにどっちでもいっか…、死にやしないし
あと、ボクmacOSとか高くて買えないし、英語よめないからBSDインストールわかんないし、なのでlinux画面で書いちゃったけど、
これマックじゃうごかないかもなぁ〜… まぁい〜や、べつに
921の課題を動作するようにすることに成功したが、著作者の権利を守るために 不特定多数の人が見られる場所にアップロードせずに闇に葬ることにした。
原型をとどめていないがw int main(void){ std::multiset<utmpx, mycompare> log; std::ifstream fp(UTMPX_FILE, std::ios::in | std::ios::binary); utmpx temp; while(fp.read((char*)&temp, sizeof(temp))){ log.insert(temp); } fp.close(); for(std::set<utmpx>::iterator it=log.begin();it!=log.end();++it){ INFO_DISPLAY(&(*it)); } return 0; }
939 :
920 :2010/03/17(水) 07:44:26
920です。誠にすみません。書き忘れがあったので… 添付ファイル名はtest_barbarar.pgm です。 2.の別ファイルの名前は任意でよろしいです。 よろしくお願いします。
940 :
907 :2010/03/17(水) 12:51:48
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]){ int i, j, a[10]; FILE *ifp; if(argc != 2) return -1; ifp = fopen(argv[1], "r"); if(!ifp) return -2; for(i=0; i<10; i++) fscanf(ifp, "%d", &a[i]); srand(time(0)); for(i=0; i<5; i++) { j = rand()/(RAND_MAX/(10-i)+1); printf("%d\n", a[j]); a[j] = a[10-i-1]; } fclose(ifp); return 0; }
socketでint型の値を2つ連続して送信してます。 int i, j; send(sd, &i, sizeof(i), 0); send(sd, &j, sizeof(j), 0); これを受信側で recv(sd, &x, sizeof(x), 0); recv(sd, &y, sizeof(y), 0); のように受信すればいいのでしょうか? 必ずしもsizeof(x)の4バイトのデータが1度に返されるとは限らない事 があるのでしょうか?
あ ココ宿題スレだったか…
>>942 的確な回答ありがとうございます。
理解しました。やっぱ、受信側ではばらけたりするのですね。
それを考慮してプログラム書き換えます。
プロトコル書いてませんでしたね。TCPでした。
非常に助かりました。
945 :
940 :2010/03/18(木) 00:44:00
誰もできないようだな
お前がやれよw
>>945 CDに焼きました。提出先を書いてください。
他言語のコピペしたwebpageを、ただwordに貼っただけ。 問題は出された通りに書き込んでください。 参考にするwebpageのURLがあってもいいけど、サンプル などと言って自分の成果のように誤解させないこと。
Cがわかってもベアストウ法が わからないとお手上げだな。 とりあえず2次の多項式の解を求める ルーチンでも作ってどうするか考えたら?
>>951 無期限にソースが保存されるのはいいかもね。
codepadは期限付きだった気がしたんだけど
貼ったソースの有効期限について書いてあるところが見つからなかった
codepadとideoneの違いって何?
>>952
文法・言語の対応が多い
ideoneは実行時の標準入力を指定できるらしい 使ったことないから詳しくは知らん
codepadでも ungets("Test\nString\n"); みたいに標準入力設定もどきできてたけどな void ungets(const char *str) { int i; for(i=0; *(str+i)!='\0' ; i++); for(i--;i>=0;i--) ungetc( (int)(*(str+i)) ,stdin ); }
だが自分のコードを変更しなければならないではないか
>>956 だが、ungetc は一文字しか保障されていない
codepad で動くなら別にいいんだけどさ
C++で解答してもかまわないと言われたので、こちらで質問させてください [1] 授業単元: コンピュータグラフィックスアルゴリズム [2] 問題文(含コード&リンク): 任意の画像A(形式.ppm)と画像B(形式.ppm)を用意する。 画像A上の任意の4点の座標をマウスのクリックにより取得し、その4点を結んだ四角形の形、大きさにBを変形し、 AとBを合成した画像Cを描画し、それを、ppmファイルで出力せよ。 なお、画像の変形には逆マッピング変換(inverse mapping)とバイリニア補完(bilinear interpolation)を使うこと。 [3] 環境 [3.1] OS: Windows 7 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2008 [3.3] 言語: C++ [4] 期限: 2010年3月23日まで [5] その他の制限: 画像の変形には逆マッピング変換(inverse mapping)とバイリニア補完(bilinear interpolation)を使い、APIを使ってはならない 期限が近くてすみません。よろしくお願いします。
C++以外の選択肢はなんだったんだろうか MFCは使っていいのだろうか
961 :
959 :2010/03/22(月) 02:15:17
>>960 言語に制限はないのですが、自分が理解できるのがC++とJavaだったので
このふたつに絞らせて貰いました。
逆マッピング変換とバイリニア補完を学ぶというのが主目的なので、
それ以外ならば、APIを使って頂いてかまいません。MFCも大丈夫です。
あと、逆マッピング変換する際の、行列(8×8)の方程式を解くとき、どんなライブラリを使っても問題ないとのことでした。
962 :
デフォルトの名無しさん :2010/03/23(火) 02:44:04
[1] 授業単元: C言語基礎 [2] 問題文(含コード&リンク): 数値中のすべてのビットを左端までシフトするプログラムを作成しなさい。 例えば、01010110(二進法)は11110000(二進法)となります。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年3月23日12:00まで [5] その他の制限:とくにありません
#include <stdio.h> int main(void) { unsigned int n, u, ans = 0; scanf("%u", &n); for(u=1 << sizeof(int)*8-1; n; n >>= 1) { if(n & 1) { ans |= u; u >>= 1; }} printf("%u\n", ans); return 0; }
#include <stdio.h> int main(void) { unsigned int i, j, u; scanf("%u", &u); for(i=j=1<<sizeof(unsigned int)*8-1; i; i >>= 1) { if(i & u) { u &= ~i; u |= j; j >>= 1; }} printf("%u", u); return 0; }
965 :
デフォルトの名無しさん :2010/03/23(火) 03:54:29
<<63-64 ありがとうございます。コンパイル時には何を入力すればよいのでしょうか?
966 :
デフォルトの名無しさん :2010/03/23(火) 10:14:26
ビットクリアとビットオンの順番おかしいだろ。
968 :
デフォルトの名無しさん :2010/03/23(火) 10:33:25
>>962 unsigned bit_shift(unsigned value)
{
unsigned i, bit_count=0;
for(i=0;i<32;i++)
{
bit_count+=(value>>i)&1;
}
return ((1<<bit_count)-1)<<(32-bit_count);
}
無題 Bairstow - 2010/03/21(Sun) 15:50 No.10561
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10561.zip とりあえず他の方の作ったやつで.exeファイルをつくってみました。
Excelのやつは一番理想的ですがさどうしません。
ありがとうございます。
----------------------------------------------------------------------------------------------
なんかよくわかりません。 Bairstow - 2010/03/21(Sun) 15:57 No.10562
またエラーなりました。ここで前書き込みをいしたらいつの間にかちゃんと投稿されていました。今回はどうすればいいのかわかりませんので、またここ「ろだ」に書かせてもらいます。
名前: 945
E-mail:
内容:
945 です。
皆様、お返事ありがとうございました!この前書き込みしたときにエラーになってしまったので、書き込みできていないと思っていたらで今日またベアストウで検索したら自分のがでてきました!!本当に申し訳ありませんでした。
ワードファイルの件、申し訳ありませんでした。何がなんだかわからないのでベアストウ法でコードを見つけてはコピペしておりました。
>>948 ありがとうございます!
とりあえず他の方の作ったやつで.exeファイルをつくってみました。
Excelのやつは一番理想的ですがさどうしません。EmailもZipに入っています。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10561.zip
【質問テンプレ】 [1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): typedef struct Position { double x,y,z; }Position; typedef struct Triangle { Position p1,p2,p3; }Triangle; 第1引数のTriangle型で示される3角板の中の、第2引数に最も近い座標を返す関数 Position GetNearestPosition( Triangle *tri, Position *tgt ); を作成しなさい。 [3] 環境 [3.1] OS:WindowsXP SP3 [3.2] VC2008 [3.3] C言語 [4] 2010年3月26日 13:00まで よろしくお願いします。
Position GetNearestPosition(Triangle *tri, Position *tgt) { double d1=(tri->p1.x-tgt->x)*(tri->p1.x-tgt->x)+(tri->p1.y-tgt->y)*(tri->p1.y-tgt->y)+(tri->p1.z-tgt->z)*(tri->p1.z-tgt->z); double d2=(tri->p2.x-tgt->x)*(tri->p2.x-tgt->x)+(tri->p2.y-tgt->y)*(tri->p2.y-tgt->y)+(tri->p2.z-tgt->z)*(tri->p2.z-tgt->z); double d3=(tri->p3.x-tgt->x)*(tri->p3.x-tgt->x)+(tri->p2.y-tgt->y)*(tri->p3.y-tgt->y)+(tri->p3.z-tgt->z)*(tri->p3.z-tgt->z); if(d1 < d2) { if(d1 < d3) return tri->p1; return tri->p3; } if(d2 < d3) return tri->p2; return tri->p3; }
>>973 >>974 問題をよく読め、3頂点から一番近い物を求めるのではない。
三角形の範囲内の点ならどれでもOKなんだよ。
任意の点から三角形を含む平面上におろした垂線の足が 三角形の内部にあればその位置座標 外部にあればその点にもっとも近い三角形上の点として 先の点が三角形のいずれかの辺における、この三角形を含む平面における垂線上にあれば その辺に対して点からの垂線の足が求めるべき点で それ以外ならばその点にもっとも近い三角形の頂点が求めるべき点だな
めんどくさいな
>>976 間違えた
各辺の垂線について調べたらダメだ
三辺のうち、もっとも遠い辺を調べる必要はない
っていうか調べると誤った結果がでちまう
>>978 三辺全部調べる方が簡単だと思うけど。
1.三角形の内部かを調べて内部ならその点。
2.外部のときは3つの線分(辺)と点の距離を求めて一番近いものとし、そこで求めた点を採用する。
でいいでしょ。
線分と点の距離というのは(無限)直線と点の距離を求めて、
その垂線の足が線分上になければ線分の端点からの距離という意味ね。
コーディングはパスするw
実は三次元座標なんだぜ
三角形のある平面に垂線下ろしてからの話なんだぜ、実はw
垂線おろすのは不可欠だろうからな、多分
三角形の3頂点から平面が定義できるから、
その平面にすべての点を投影した上で
>>979 を行えばいい。
コーディングはパスするw
三角形内の点Pに対してベクトルPTが最小になるように二元二次方程式を解く。 コーディングはパスするw
次スレ立てます
http://codepad.org/c8Eip5FK 三角形のローカル座標に座標変換してから判定。
ローカル座標は p1=(0,0)', p2=(1,0)', p3=(0,1)' になるような座標系。
この空間ではz=0にすると垂線の位置が求められる。
z=0の平面を7つの領域に分けて、一番近い点を求める(コメント参照)
三角形が潰れている場合は三角形は直線(または点)になって、
点に一番近い直線上の点を求める計算が必要になるが、コーディングはパスした。
あと面倒になったので動作確認もパスした。
当然のようにmain関数のコーディングもパスした。
@の判定式間違ってた\(^o^)/ 誤:if(q.x >= 0 && q.y >= 0 && q.z >= 0 && q.x+q.y+q.z <= 1){ 正:if(q.x >= 0 && q.y >= 0 && q.x+q.y <= 1){ zも入れたら四面体の交差判定になっちまうのぜ
20点