C/C++の宿題をやらせて。おながい。13代目

このエントリーをはてなブックマークに追加
>>951
数学的観点から見たら展開した方が汚いよ。
>>949
>>947のメインループを以下のようにしては?
for(k=0; k<90; k++){
for(i=0;i<n;i++){
y[i] =cos(pai*k/180)*a[i]+sin(pai*k/180)*b[i];
z[i] =-sin(pai*k/180)*a[i]+cos(pai*k/180)*b[i];
}
r = R(y, z, n);
if(r > r_max) { r_max = r; k_max = k; }
}
fprintf(fp,"k_max=%d R(k_max)=%lf\n",k_max,r_max);
for(i=0;i<n;i++){
y[i] =cos(pai*k_max/180)*a[i]+sin(pai*k_max/180)*b[i];
z[i] =-sin(pai*k_max/180)*a[i]+cos(pai*k_max/180)*b[i];
fprintf(fp,"y[%d]=%lf z[%d]=%lf",y[i] ,z[i]);
}
ちなみに前もって以下を定義しておく。
double r_max = 0, r;
int k_max;
double avg_pow4(double arr[], int N) {
int i; double result = 0;
for(i = 0; i < N; i++) result += pow(arr[i], 4);
return result / N;
}
double R(double y[], double z[], int N) {
return pow(avg_pow4(y, N) - 5, 2) + pow(avg_pow4(z, N) - 5, 2);
}
954946:03/10/26 19:49
>>953
どうも有り難うございましたm(__)m
感謝します!
955デフォルトの名無しさん:03/10/26 19:53
------------------------------------------------------------
テキストファイルの内容をバッファ読み込む関数
int file_load(const char *fname,char *buf)

バッファの内容をテキストファイルに読み込む関数
int file_save(const char *fname,char *buf)

ファイルオープン・クローズ、および必要なエラー処理は関数無いで行い
戻り値はエラー終了の場合-1、正常終了の場合0とする
------------------------------------------------------------
の作り方がどうしてもわかりません。。。
よろしければご教授おねがいします。

>>955
普通にfopenしてbufにメモリ割り当ててstrcpyすればいいのでわ?
957955:03/10/26 20:15
レスありがとうございます。
C言語まだ初めて数ヶ月の初心者でどこをどういじって
いいのやらみたいな感じで。。。
厨房同然で申し訳ありませんがが簡単な説明交えてサンプルソースなんか
作って頂けると有り難いです。。。
958944:03/10/26 20:36
>>951
それなりのコンパイラなら,最適化かけりゃどっちも同じマシンコードになるはず。
再帰で書いて欲しそうだったから,再帰にしてあげた。
>>956
その引数じゃ何をしたいのかわけワカメ。
, char **pbuf)
でバッファを動的に確保するとか,
, char *buf, size_t buf_size)
で確保済みバッファを渡すとか,
もう少し,意図を明確に。

バッファオーバーフロー上等ってのは勘弁してくれ。
960955:03/10/26 21:10
>>959
レスどうもです。
バッファオバーフローとかはまだ習っていない状態です。。
引数はconst char *fname,char *bufしか与えてはいけ
ないらしいです。。
>>960
> 引数はconst char *fname,char *bufしか与えてはいけ

このスレッド最大の難問だな。
962955:03/10/26 22:33
>>961 >>959
あ、もうしわけありません。
重要なことがぬけてたっぽいです。。。
「バッファのメモリ確保は関数外で行うものとする」
だそうです。。
>>955
インデントが崩れたら適当に調節してね。
で、main()も要る?

int file_load(const char* fname, char* buf)
{
FILE*fp = fopen(fname, "rt");
intch;

if(fp == NULL) return -1;
while( (ch = fgetc(fp)) != EOF ) {
*buf++ = ch;
};
fclose(fp);
*buf = '\0';

return0;
}

int file_save(const char* fname, char* buf)
{
FILE*fp = fopen(fname, "wt");
if(fp == NULL) return -1;
fwrite(buf, 1, strlen(buf), fp);
fclose(fp);

return0;
}
965910:03/10/26 23:16
>>962
#include <stdio.h>
size_t FileSize;
int file_size(const char *fname) {
FILE *fp;
if((fp = fopen(fname, "r")) == NULL) return -1;
fseek(fp, 0L, SEEK_END);
if((FileSize = ftell(fp)) == 0) return -1;
fclose(fp); return 0;
}
int file_load(const char *fname, char *buf) {
FILE *fp;
if((fp = fopen(fname, "r")) == NULL) return -1;
if(fread(buf, 1, FileSize, fp) != FileSize) return -1;
fclose(fp); return 0;
}
int file_save(const char *fname, char *buf) {
FILE *fp;
if((fp = fopen(fname, "w")) == NULL) return -1;
if(fwrite(buf, 1, FileSize, fp) != FileSize) return -1;
fclose(fp); return 0;
}
int main(int argc, char **argv) {
char *buf;
if(argc != 3) return -1;
if(file_size(argv[1]) != 0) return -1;
if(FileSize <= 0) return -1;
buf = (char *)malloc(FileSize);
if(file_load(argv[1], buf) != 0) return -1;
if(file_save(argv[2], buf) != 0) return -1;
return 0;
}
すまん。さっきから名前欄の数字を消し忘れてばかり…。
967955:03/10/26 23:25
>>964
ありがとうございます。感謝感激です。
main関数は次の授業でなにか作るらしいので結構です。
これからC言語の勉強がんばります。
ほんとにありがとうございました〜
授業でVC++使ってるんですが、「Tree作ってこい」とのことです。
( ゚Д゚).。oO(Treeって何?) っていう状態で困ってます(検索しても死ぬほどでてくる)。
>>968
普通ツリーっていったら木構造で、たぶん課題なら二分木だと思われ。
「アルゴリズム 二分気」とかって検索しる!
実はクリスマスツリーを作ってくる宿題に300モナー
っていうかさ、本当に教官が「Tree 作ってこい」と言っただけなんだったら
クリスマスツリーの AA 作って提出すりゃいいと思う。
それで単位落とされたら教務課にクレーム出してもいいくらい。

↑もちろん、その教官が授業中木構造について全く説明してないってのならの話ね。
ツリーツっていうのを食えってことだよ
聞き間違いだよ

埋めるためにほんわかさせてみた
>>968
フラクタル図形で木でも描いたら良いんだろ?
974968:03/10/27 00:57
友達に質問メール出してたらさっき返信が帰ってきますた。
”treeコマンドを作れ”とのことらしいです。
一応treeコマンドがどんなものか検索したら分かりましたので、
これからがんばってみることにします。
(今日は寝れるかな・・・)
友達居んなら来んなよ゚д゚) 、ペッ
WinAPIでそんなんがあったやうな
977デフォルトの名無しさん:03/10/27 13:30
関数テンプレートなのですが
これだと
エラー E2147 untitled.cpp 6: 引数宣言は 'type' で始められない
エラー E2303 untitled.cpp 6: 型名が必要
というエラーが出ますどこが間違っているのでしょうか?

#include<iostream>
using namespace std;

template <typename type> type f(type a, type b);

f(type a, tyep b)
{
return (a + b) * 4;
}
void main()
{
int a=9, b=3;
double c=3.8, d=5.8;
cout<<f(a, b);
cout<<f(b, c);
cout<<f(c, d);
cout<<f(d, a);
}

template <typename type> type f(type a, type b) /*;

f(type a, tyep b) */
>>978
そこがいらなかったのですか・・・プロトタイプ宣言とごっちゃになってました
ありがとうございました
エラー見たら推測できないなー
まーちゃんと返事も書いて礼儀正しいから良しとしますか
981sage:03/10/27 15:24
任意のウインドウに文字列を送信するって
どうやって実現しているのですか?

例えば、顔文字入力支援といったものがありますよね。

クリップボードを経由するやり方があるのでしょうか?
単にクリップボードにコピーするのであれば
・OpenClipboard()
・EmptyClipboard
・SetClipboardData
・CloseClipboard
という手順でやったことはあるのですが。

それとも、クリップボードなど経由でず、直接ウインドウの
例えばエディットコントロール等に文字列を送っているのでしょうか?

ご存知の方、いらっしゃいましたら教えて下さいませ。
宿題かよ
あれ?
>>981
クリップボードでしょう
>>984

レスありがとうございます。

推測ですが・・・
クリップボードへコピーした後に、CTRL+V 相当の
指示を対象ウインドウに送るのでしょうか?

だとしたら、それってどうやるんでしょう?
FindWindow() でウインドウハンドル取得して、
メッセージを投げるのでしょうか?

それとも、クリップボードからペーストする別の
機構が用意されているのでしょうか?
>>985
別のスレに行ったほうがいいよ。
スレ違いだし、ここはもう埋め立てるだけだから。
>955 KAIT(´ι_`)
Page 2B-3
>>985
ありがと。
そうします。
989代理人:03/10/28 11:16
昔、教えていただいたClass Newstringについて質問

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=157

これにmainを加えて、ちゃんと機能するか確かめてから宿題再提出になりました。
string1.concatenate(ch)の部分で上手くstring1の後ろにch(一文字)付け加え
出来ません。あと、string1.substring(string2)もディスプレーできません。
分かる人教えてください。
読みずれー!
まっとうなインデントしろよ。
つーか、
string1.concatenate(ch)なんてどこに書いてあるんだよ。
string1.substring(string2)なんてどこに書いてあるんだよ。
お前はどんなmainを書いたんだ?
そのmainがどう動作すること期待してて、
実際にはそのmainはどう動いたんだ?
それを書け。
>>990
(っていうか「質問」とか「教えて」とかいう状況じゃあなさそうだから、課題の文章を
 そのままコピペしてもらったほうがいいんじゃないかな。。。)
>>990
読みづれー!
まっとうな日本語使えよ。
993990:03/10/28 13:10
>>992
すまんこってす
delete [] 配列名;
で、なんかエラーが出るので、
配列名 = NULL;
こうしてみたのですが、
このやりかたで、メモリ解放できているのでしょうか?
配列?
とりあえず開放はされない。
ちゅーか、ソース抜き出して貼れよ。
996デフォルトの名無しさん:03/10/28 16:09
記念カキコ v(^-^=)
997994:03/10/28 16:10
error
終幕
1000デフォルトの名無しさん:03/10/28 16:14
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。