トップページ⇒tech
1001コメント340KB

プログラマー軍団がC/C++の宿題を解決します 34代目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
あなたのお悩み、ご相談下さい。
史上最強のプログラマー軍団の見解は?
――【注意点】――――――――――――――――――――――
・使用する言語(C/C++)や環境(CUI/GUIなど)は必ず書きましょう。
・問題文は、ちゃんと解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式自体をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その行とエラーの詳細を書きましょう。
 エラーメッセージが出た場合はそのままコピーしてください。
・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2-10】
0232デフォルトの名無しさんNGNG
sscanf()を使えないでstrtok()使う馬鹿。
0233デフォルトの名無しさんNGNG
>>231
どうでもいいが、突っ込みどころだらけなプログラムだな。

float * thetaから判るように、thetaはfloat へのポインタである。
したがって、* theta = 180.0 * atan2(y, x) / 3.141592;の意味は
atan2()関数を引き数y と x で呼び出し、その結果をラジアンから度に変換して
呼び出し元で用意した場所に格納している。
#atan2()関数が何をしているかくらいは自分で調べろ。

プログラム作成の方は、main()の方は同じ要領だから省略。
変換関数は、r とtheta を求める代わりにx とy を求めればいい。
それぞれ、r * cos(theta[rad]), r * sin(theta[rad])で求められる。
0234デフォルトの名無しさんNGNG
言語:C言語 環境:CUI OS:WindowsXP Pro
ソート:基本選択法を使用

キーボードから「番号、氏名」を複数入力する。
入力した各データは、一旦それぞれに配列に格納して、学籍番号をキーに昇順にソートする。
そして、ソートしたデータのそれぞれをカンマで区切ったレコードにして
csv形式のファイルへ出力するプログラムを考えてます。
どなたか宜しくお願いしますm(_ _)m
0235デフォルトの名無しさんNGNG
>>234
「配列」じゃないとダメなんでしょうか? ツリーに追加していくほうが楽なんですが。
0236234NGNG
>>235
すみませんが「配列」でお願いします。
0237デフォルトの名無しさんNGNG
>>156 やってみた。バブルソートだけど、いいかなあ・・・
Pop *Sort(Pop *top){
Pop dummy_top;//ダミーの先頭を作る
dummy_top.pop = 0;
dummy_top.NextPtr = top;

Pop *p_search = dummy_top.NextPtr;//検索対象
Pop *p_replace = &dummy_top;//置き換え対象(比較対象)の一つ前
while(p_search != NULL){
while(p_replace->NextPtr != p_search){
if(p_replace->NextPtr->pop > p_search->pop){
//置き換える
Pop *search_next = p_search->NextPtr;
Pop *replace_next = p_replace->NextPtr;
Pop *replace_next_next = p_replace->NextPtr->NextPtr;
p_search->NextPtr = replace_next;
p_replace->NextPtr->NextPtr = search_next;//p_replace->NextPtrより先に置き換えること
p_replace->NextPtr = replace_next_next;
//最初に戻して繰り返し
p_search = dummy_top.NextPtr;
p_replace = &dummy_top;
break;
}
p_replace = p_replace->NextPtr;
}
p_search = p_search->NextPtr;
p_replace = &dummy_top;
}
return dummy_top.NextPtr;
}
0238721NGNG
3点を通る円のプログラミングを作りたいのですが、
どのように式を作ったらよいかどなたか教えてください。
・分かってる点、始点(X1,Y1)中点(X2、Y2)終点(X3,Y3)です。
・(X-X0)^2+(Y-Y0)^2=r^2の式を使って連立方程式を立て中心(X0,Y0)と半径rを求めたいです。
0239デフォルトの名無しさんNGNG
そこまでわかってるんなら
3つの点代入して、その連立方程式の解を求めればいいんじゃないのか
0240238NGNG
>>239
そうなんですが、プログラムに直す時にどのようにしたら良いか分からなくて…
0241デフォルトの名無しさんNGNG
>>237
ソートできてませんでした…。なんでだろう?
0242デフォルトの名無しさんNGNG
そういえばそうだな…

円の方程式を
x^2+y^2+lx+my+n=0
という形で表して(円の方程式をばらしただけ、数�Uの教科書参照)
ばらした式に3つの点代入して3元連立1次方程式を解いてlとmとnを求めて
元の式(x-a)^2+.....と係数比較すれば強引に求まるかも

しかし検索したら解法のアルゴリズムとかありそうだなあ…
0243235NGNG
>>234
できたけどファイルがちょっと大きかった。ここに貼るのは難しい。
しかも今ちょっと忙しい(本業:システムエン死に屋)
捨てアドでも晒してくれたら今日・明日中にでも送りますが。
それまでにだれかがソース貼ってくれるかもしれませんがw
0244デフォルトの名無しさんNGNG
>>237
すみません、私のミスでした。
ていねいなソースありがとうございました。
0245238NGNG
>>242
アドバイスありがとうございます。
もう一度挑戦してみます。
0246デフォルトの名無しさんNGNG
中点てのはなのよ?
(x1,y1)(x3,y3)の中点では、異なる2点を与えたのと同値で
円は一意に定まらない
0247デフォルトの名無しさんNGNG
>>246
ポカーン
0248デフォルトの名無しさんNGNG
用語の使い方がおかしい
0249238NGNG
>>246
中点に特に意味は無いです。
区別をつけたつもりが変な区別のつけ方になってしまいました。
0250デフォルトの名無しさんNGNG
>>247は数学のできないプログラマー
0251242NGNG
ということでやってみた
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,k; double cx,cy,r;     double x[3],y[3];
double pivot; double a[3][4]; double erase;
printf("始点?:"); scanf("%lf,%lf", &x[0], &y[0]);
printf("中点?:"); scanf("%lf,%lf", &x[1], &y[1]);
printf("終点?:"); scanf("%lf,%lf", &x[2], &y[2]);
for(i=0; i<3; i++) {
 a[i][0] = x[i]; a[i][1] = y[i]; a[i][2] = 1.0; a[i][3] = -(x[i]*x[i] + y[i]*y[i]);
}
for(i=0; i<3; i++) {                   
  pivot = a[i][i];
  for(j=0; j<4; j++) {
    a[i][j] /= pivot;        
  }
  for(k=0; k<3; k++) {
    erase=a[k][i];                 
    for(j=i; j<4; j++){
      if(k != i) a[k][j] -= erase*a[i][j];
    }
  }
}
cx = a[0][3]/2; cy = a[1][3]/2;
r = sqrt((cx*cx) + (cy*cy) - a[2][3]);
printf("中心:(%lf, %lf)", cx, cy);
printf("半径:%lf", r);
return 0;
}
答えが整数になるような問題じゃないと解けないかも…
0252デフォルトの名無しさんNGNG
始点、中点、終点って3つの点ってことでいいよな
そもそも円だと始点と終点が同じ…
0253デフォルトの名無しさんNGNG
0除算チェック入れないと駄目だった…
0254デフォルトの名無しさんNGNG
中点の符号逆

あと始点のXが0だとだめだから
そのときは格納するときどこかと交換とか他色々
0255デフォルトの名無しさんNGNG
次の仕様を満足するプログラムを作成しなさい。

1.要素が50ある配列を二つ用意する。(とりあえずa[ ], b[ ]とする)
2.用意した配列a[ ]に数値をランダムに入れる
3.a[ ]の50個のデータのうち最小のものを求めて、b[0]に入れる
4.a[ ]の残りの49個のデータのうち最小のものを求めてb[1]に入れる
5.a[ ]の残りの48個のデータのうち最小のものを求めてb[2]に入れる
以下繰り返し。全部のデータがb[ ]に入ったらおしまい。
ど素人です。よろしくお願いします。
0256デフォルトの名無しさんNGNG
スレ違いでしたら、スイマセン。
N88BASICのプログラムをC言語に直せ。
という課題がでたのですが、一週間考えてもわかりません。
どうか教えてください。
0257デフォルトの名無しさんNGNG
Fractional Derivate
SCREEN2 : CONSOLE 0,25,0,0
KMAX=100:XMAX=300
RANDOMIZE
PI=3.14159*2:EK=PI/XMAX*.7
DIM ER(KMAX),EI(KMAX),F(XMAX)
FOR K=1 TO KMAX
GOSUB *GA : ER(K)=MO
GOSUB *GA : EI(K)=MO
NEXT K
*SA
CLS
INPUT "Fractional Derivate(1.0.-2.0)",D
A=5-2*D
FMAX=0 : FMIN=0
FOR K=1 TO KMAX : KA(K)=(EK*K)^(-A/2) : NEXT K
FOR X=0 TO XMAX
F(X)=0
FOR K=1 TO KMAX
KX=EK*K*X
F(X)=F(X)+KA(K)*(ER(K)*COS(KX)-EI(K)*SIN(KX))
NEXT K
IF FMAX<F(X) THEN FMAX=F(X)
IF FMIN>F(X) THEN FMIN=F(X)
NEXT X
RETURN
0258デフォルトの名無しさんNGNG
WINDOW (0,FMIN*1.2)-(XMAX,FMAX*1.2)
VIEW (0,200)-(XMAX,299)
FB=F(0)
FOR X=1 TO XMAX
LINE (X-1,FB)-(X,F(X))
FB=F(X)
NEXT X
GOTO *SA
*GA
MO=0
FOR GI=1 TO 10
MO=MO+RND-.5
NEXT GI
RETURN
0259デフォルトの名無しさんNGNG
256〜258までです。
どうかよろしくお願いします。
0260デフォルトの名無しさんNGNG
>>259
微妙にスレ違い。
で、Fractional Derivateってなんだ。
しかもLINEとかの描画処理が入ってるが、これはどうだろうな・・・。
こんな宿題出すやつの気が知れん。
OSはなんだ。Windowsか?
環境を明記しとけば、暇人が手伝ってくれるかもしれん。
0261234NGNG
>>243
本当にありがとうございます
捨てあどメ欄に書いておきます
0262デフォルトの名無しさんNGNG
C#の課題なのですが、DateTimeクラスでの、staticメンバとインスタンスメンバの違いは何か。
どう答えればいいかも
よく分からない小娘ですが、
宜しくお願いします。
0263デフォルトの名無しさんNGNG
まんこで釣ろうたって、そうはいかん
0264デフォルトの名無しさんNGNG
>>262
小娘なら小娘の武器を使え。
0265デフォルトの名無しさんNGNG
>>262
とりあえずおっぱいうp
0266デフォルトの名無しさんNGNG
>>262は大原ゆき
0267(・∀・)イイ!!NGNG
この喧騒の街で、一人ぼっちで
プログラミングする(・∀・)イイ!!
0268デフォルトの名無しさんNGNG
中途半端に小娘というキーワードの武器を使ったことで
さらに破壊的な武器を要求されてまつね

まぁこういう女を主張する香具師はロクに仕事できずに
給料平等にしろなどとのたまうんだろうがな
0269デフォルトの名無しさんNGNG
>>243
>>1
つーか、メルアド搾取が目的か?
0270デフォルトの名無しさんNGNG
>>262
臭いオシッコ飲ませろ。
0271(・∀・)イイ!!NGNG
プログラマ界に蔓延っている男尊女卑(・∀・)イイ!!
0272デフォルトの名無しさんNGNG
まあ問題はスレ違いってことだけなんだが…
メンバの違いとか言われてもなぁ…

クラスメンバはクラスで一つ
インスタンスメンバはインスタンスごとに一つ

とか?メソッドは違うけど。


つーかC#シラネ
0273169=173NGNG
>>214
失礼いたしますた
あまりビットとかバイトを理解してませんでした。
これではどうでしょうか?

指定されたファイルの指定された範囲のデーターをNOTで反転
例えば40ビット目から10ビットが1111001110だったら0000110001にして保存です。
0274デフォルトの名無しさんNGNG
>>271
何がイイんだかわかんねえよカスが!!
天の上にヒトを作らず、
天の下にヒトを作らず、
って言葉しらねえのかw?
だがな、天の下に実はヒトがいたんだよ!!
それが、ここにいる香具師ら、プログラマーなんだよWWWWWW
0275デフォルトの名無しさんNGNG
女プログラマーに言いたい

ひたすらコピペプログラミングしないで、きちんと清書下さい
なぜか動いてるから変えたくないとか言わないで下さい
殆どありえない場合だから構わないとか言わないで下さい
全然正しくない数式にいつまでもこだわらないで下さい
0276デフォルトの名無しさんNGNG
>>275
職にしてない者が言って悪いんだけど

そ れ っ て そ の 人 個 人 じ ゃ な い の ?


大半がそうならすまん
0277デフォルトの名無しさんNGNG
>きちんと清書下さい

pu
0278デフォルトの名無しさんNGNG
>>276
今のところ、俺の職場にあらわれては消えていった、そしていまいる
女プログラマーの共通項。その数10人以上
0279デフォルトの名無しさんNGNG
>>278
プログラマだから仕方ないじゃんw
0280259NGNG
環境はWindowsXPです。
非整数微積分をフーリエ変換を用いて表したものです。
フラクタルの授業の課題で出ました(T_T)
教官曰くC言語で簡単に書けるらしいのですが、全く掛けません。
0281デフォルトの名無しさんNGNG
>>275
確かにいるね
動いてるんだから他の部分変えたくないって人
ソース見たらごちゃごちゃしすぎて、行き当たりばったりでデバッグの繰り返しで継ぎ足していった感じ
そいつの直すのは根本的にむりぽ
0282デフォルトの名無しさんNGNG
>N88BASICのプログラムをC言語に直せ。

257と258の途中が抜けてるから無理
0283デフォルトの名無しさんNGNG
>>275
女じゃないけど、俺だvzo
0284259NGNG
>282 途中抜けてるんですか??
一応もらったプリントどおりにうつしてあるのですが^^;
0285デフォルトの名無しさんNGNG
>>281
女か?
0286デフォルトの名無しさんNGNG
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。
0287デフォルトの名無しさんNGNG
>>285
男でも女でもいる。
でも、女の方が多いように感じる
職場に女がいなくて目につきやすいせいかわからんが
0288デフォルトの名無しさんNGNG
>>283
早く土方にでも転職しろや
0289282NGNG
:
NEXT X
RETURN

ここから

ここ

WINDOW (0,FMIN*1.2)-(XMAX,FMAX*1.2)
VIEW (0,200)-(XMAX,299)
:


returnの直後になぜ命令が?
0290デフォルトの名無しさんNGNG
BLEA女子高等部
http://www.blea.jp/j/index.html
0291デフォルトの名無しさんNGNG
>>288
肉体労働はいいよ。徹夜とかないからな

>>286
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
と
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。
って何か関係あんの?
0292259NGNG
>289 確かにそうです。すいません。
確認したところ257の最後のretuenはいらないみたいです。
でも何か間違っている気がします。ややこしくてすいません。
0293282NGNG
>何か間違っている気がします

*SA
 :
GOTO *SA


...ダメポ
0294デフォルトの名無しさんNGNG
END無い…
0295デフォルトの名無しさんNGNG
N88BASICなんてすっかり忘れてるなあ。。。
0296デフォルトの名無しさんNGNG
How many files (0-15)?
0297259NGNG
とりあえず教官にメールして聞いてみます。
どうも自分では、よくわかりません(T_T)鬱になります・・・
0298デフォルトの名無しさんNGNG
ここは?
http://www.vector.co.jp/soft/dos/prog/se008400.html?site=n
0299259NGNG
>298 いいサイトありがとうございます!
でも残念ながら使えません。。
コマンドプロンプトでも試したのですが、使えませんでした。
0300デフォルトの名無しさんNGNG
半日見ないと結構延びるねぇ、無駄に。

>>274
>天の上にヒトを作らず、
>天の下にヒトを作らず、
>って言葉しらねえのかw?
「天は人の上に人を作らず、人の下に人を作らず」って言葉なら知ってます。
0301デフォルトの名無しさんNGNG
どっちみち使えたって、そんな機械変換は見てすぐにばれる
0302デフォルトの名無しさんNGNG
>>259
そもそもコンパイラは?VC++?BCC?cygwin+XWindow+gcc?
それ次第で描画系コードが変わると思うんだけど。
0303デフォルトの名無しさんNGNG
>>286
#include <algorithm>
#include <iostream>
#include <list>
#include <string>
struct pred{
  bool operator()(const std::string& x, const std::string& y)
    {return x.length() < y.length();}
};
int main(){
  std::list<std::string> li;
  std::string line;
  while (std::getline(std::cin, line))
    if (!line.empty())
      li.push_back(line.length() > 80 ? line.substr(0, 80) : line);
  li.sort(pred());
  for (std::list<std::string>::const_iterator first = li.begin(), last = li.end(); first != last; ++first)
    std::cout << *first << std::endl;
}
0304デフォルトの名無しさんNGNG
for文でxをdt=0.01刻みで増やし、テキストファイルに落としたいのですが、
全部が必要ではなく(この場合MAX/dt=10000)、1、501、1001…
というように500刻みにするにはどうすればいいのですか?

double x;
double dt=0.01;
int MIN=0;
int MAX=100;
for(x<MIN;X<=MAX;X+=dt){
 if(xを500刻みで表示させたい。)
 printf("hogehoge");
 }
}
ifの中身を教えてください。お願いします。
0305デフォルトの名無しさんNGNG
dt変えれば
0306デフォルトの名無しさんNGNG
500で割った余りが1
0307デフォルトの名無しさんNGNG
double なのに?
0308304NGNG
>>305
区間(MIN<x<MAX)をできるだけ細かし、必要なだけ(500個とか300個等)
取り出したいのです。
0309デフォルトの名無しさんNGNG
キャストでも何でも好きなようにすりゃいいじゃん。
0310デフォルトの名無しさんNGNG
>>309
考えが浅いですね
0311デフォルトの名無しさんNGNG
>304

ループ用のixとdtはintで。
あらためてdoubleのxを使え。
0312デフォルトの名無しさんNGNG
>>310
そうですね
0313デフォルトの名無しさんNGNG
入力された文字の中にハイフンが入っていたらハイフン以降の文字列を表示
するというプログラムを作成しているのですが
char mozi[100];
gets(mozi);
char *haihun = strchr(mozi, '-');
int len;
if(NULL != haihun){  // ***
len = strlen(haihun);  // ***
}else{  // ***
len = 0;  // ***
}  // ***
printf "一個目のハイフン以降の文字数は%d文字です", len;
cygwin上では正常にコンパイル出来て動くのですがRedHat7.3(gcc-2.96-113)
上ではparse errorが出てしまいます。
***の部分をlen = strlen(haihun);の1行にすればコンパイルは通り動作するものの、
入力文字列にハイフンが含まれていないとNULLをstrlenするためかコアダンプしてしまいます。
見ての通りぴよぴよですが解決をご教授下さいませ。
0314デフォルトの名無しさんNGNG
「氏名」「国語の点数」「数学の点数」「国語数学の合計点」
をメンバに持った構造体を定義し、vectorを用いて成績表を作成せよ。
10人分入力し、最後に合計点の高い順に整列させ一覧を表示する事とする。

環境はC++のコンソールです。お願いします。
0315デフォルトの名無しさんNGNG
>>313
C++としてコンパイルしてるのかな?
Cだとシンタックスエラーになるはずなんだが。
それにprintfに括弧がついてないけど。

ソースをコピペしてみて。
0316デフォルトの名無しさんNGNG
>>313
Cなら変数の宣言は前のほうにもってくるほうがいいと思うけど。

char mozi[100];
char *haihun;
int len;

gets(mozi);
haihun = strchr(mozi, '-'); 以下略
0317デフォルトの名無しさんNGNG
>>303
ありがとうございます。
0318デフォルトの名無しさんNGNG
>>273
>>214ではないが、まだ仕様がわからない。

対象のファイルは、バイナリ?テキスト?
バイナリであれば、どこからどこまでを1つの数字と見ていいのか?

「1、2、3」という「数値の」並びがファイルにあるとしたら、どう変更すればいいのか?
2進数だと、「00000001、00000010、00000011」
0319259NGNG
>302 コンパイラの種類というのがよくわからないのですが、
コンパイルする時は gcc ファイル名 -O ファイル名 です。
初心者で申し訳ありません。できる方どうかよろしくお願いしますm(_ _)m
0320デフォルトの名無しさんNGNG
>>314
10人分の入力はどうやってやるの?
入力機能を作るの?
0321デフォルトの名無しさんNGNG
unsigned char a = 0xF2; //反転させたいビット列

unsigned char HANTEN(unsigned char a)
unsigned char b = 0x01;
unsigned char work =0, out =0;
for(int i=0; i<8; i++){
work = a & b;
work << (7 - i);
out = out | work;
b << 1;
}
return out;
}

下位から1bitずつ取り出してその分シフト、orで足し算、と。
取り出したビットがゼロだったら飛ばしてもいいかも
0322デフォルトの名無しさんNGNG
申し訳ない、321は誤爆デス
0323314NGNG
>>320
すいません。できればscanfとかcinなどで、
一人目の氏名→一人目の国語の点数→一人目の数学の点数
という感じで順番に手入力し、314の構造体に入れ、順次vectorに追加していく、、、
これを10人分繰り返す、という感じでお願いします。
原始的というか、初歩的な感じで結構です。よろしくお願いします。
0324デフォルトの名無しさんNGNG
*SAの終了がRETURNで、*SAからRETURNまでは最初はスキップされるから、
*SAまでの初期化のあとに実行されるのは
WINDOW (0,FMIN*1.2)-(XMAX,FMAX*1.2)
から。
なのか?
それにしてもなんでGOTO*SAなんだ?
0325デフォルトの名無しさんNGNG
ttp://bungee.j.dendai.ac.jp/prog2/exe/08/
課題B教えて!
0326デフォルトの名無しさんNGNG
>教官曰くC言語で簡単に書けるらしいのですが、全く掛けません。
↑
この教官バカ。学校変えた方がいい。
0327デフォルトの名無しさんNGNG
馬鹿大学か
0328デフォルトの名無しさんNGNG
http://bungee.j.dendai.ac.jp/
・・・orz
0329デフォルトの名無しさんNGNG
>>328
ファラタ
0330デフォルトの名無しさんNGNG
今時の学校教育は VMware でつか
ttp://bungee.j.dendai.ac.jp/prog2/prep/login_logout.html
0331259NGNG
そのバカ教官からの返信メールですが、
そのプログラムは多少間違えてるけど、そこは推測してC言語に直すように
だそうです。。
嫌になります。とりあえず今から学校に行ってあがいてきます・・・
■ このスレッドは過去ログ倉庫に格納されています