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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/19(木) 20:39:01
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0653デフォルトの名無しさん2006/11/02(木) 01:39:58
VC++おkなんですか!助かった!

[1] 授業単元:卒論の一部
[2] 問題文(含コード&リンク):
MFCダイアログベースでピクチャボックスに2値化された画像で、にょろにょろとした線分が一本あってですね、それを最小二乗法を使って一本の直線にしたいんですよ。
http://homepage3.nifty.com/ishidate/vcpp6_19/vcpp6_19.htm
こことか参考にしてるんですけど、ボタンを一つ押すと直線になるようなものを作りたいんですよ。。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VC2005 Pro
 [3.3] 言語: C++
[4] 期限: こいつができてないと先に進めないのでできるだけ早いほうが・・・
[5] その他の制限:ピクチャボックスの変数名はm_pictです。

ほんとにお願いします( ・∀・)!先生、卒業がしたいです・・・
0654デフォルトの名無しさん2006/11/02(木) 01:41:45
>>647
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2866.c
0655デフォルトの名無しさん2006/11/02(木) 01:52:16
>>651
#include <stdio.h>
#define COUNT 5

int main(void)
{
  int data[COUNT];
  int min,max;
  int i;
  
  /*入力*/
  for(i=0; i<COUNT; i++){
    printf("data[%d] ... ",i);
    scanf("%d",&data[i]);
  }
  /*最小値と最大値を求める*/
  min = max = data[0];
  for(i=0; i<COUNT; i++){
    if(min>data[i]) min = data[i];
    if(max<data[i]) max = data[i];
  }
  
  /*最小値と最大値にそれぞれ等しい値を全て表示する*/
  for(i=0; i<COUNT; i++){
    if(max==data[i]) printf("Max : data[%d] = %d\n",i,data[i]);
  }
  for(i=0; i<COUNT; i++){
    if(min==data[i]) printf("Min : data[%d] = %d\n",i,data[i]);
  }
  
  return 0;
}
0656デフォルトの名無しさん2006/11/02(木) 01:53:49
>>651
#include<stdio.h>
#define DATA_NUM 5

int main(void){
int data[DATA_NUM];
int maximum, minimum;
int i;

printf("-----------------------------\n");
for(i=0;i<DATA_NUM;i++){
printf("data[%d] ... ", i);
scanf("%d", &data[i]);
if(i==0)
maximum=minimum=data[0];
if(maximum<data[i])
maximum=data[i];
if(minimum>data[i])
minimum=data[i];
}
for(i=0;i<DATA_NUM;i++)
if(data[i]==maximum)
printf("Max : data[%d] = %d\n", i, data[i]);
for(i=0;i<DATA_NUM;i++)
if(data[i]==minimum)
printf("Min : data[%d] = %d\n", i, data[i]);
printf("-----------------------------\n");

return 0;
}
0657デフォルトの名無しさん2006/11/02(木) 02:00:50
>>655
>>656
ありがとうございます。非常に助かりました。
0658デフォルトの名無しさん2006/11/02(木) 02:08:38
>>652
#include<stdio.h>
#include<stdlib.h>
int main(void){
int figure, height, i;
while(1){
printf("1 三角形\n2 四角形\n");
scanf("%d", &figure);
if(figure==1 || figure==2) break;
}
printf("図形の段数(高さ)を入力してください :");
scanf("%d", &height);
if(height<=1){
printf("wrong number\n");
exit(1);
}
switch(figure){
case 1:
printf("\n*\n");
for(i=1;i<height-1;i++) printf("*%*s*\n", i-1, "");
for(i=0;i<height;i++) printf("*");
printf("\n");
break;
case 2:
printf("\n**********\n");
for(i=1;i<height-1;i++) printf("* *\n");
printf("**********\n");
break;
}
return 0;
}
0659デフォルトの名無しさん2006/11/02(木) 02:19:12
<<658
本当にありがとうございます。実行イメージを下のようにするには
どうすればよいですか?ほんと初心者でわからなくて、、教えてく
ださい、お願いします。
The figure is drawn.
1. Triangle
2. Rectangle
Please input the number ... 1 ←「...」の後ろはキーボード入力部
Please input height ... 5 ←「...」の後ろはキーボード入力部
*
* *
* *
* *
*********
三角形は正三角形のような形で
-----------------------------
(メニューとして「2」、段数として「5」を入力した場合)
*****
* *
* *
* *
*****
0660デフォルトの名無しさん2006/11/02(木) 02:20:49
[1] 授業単元:プログラミング
[2] 問題文:生成した乱数をファイルに出力するプログラムを拡張し2つの乱数を生成し出力するプログラムを作成する。
      それらの乱数データを配列に読み込み、その配列の行列の和と積を求め、結果をファイルに出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:11/3
[5] その他の制限:使えるようであればmalloc()、strtok()を活用するとの事です。

よろしくお願いします。
0661デフォルトの名無しさん2006/11/02(木) 02:21:09
<<659
すみません、図形がずれました。
三角形は正三角形
四角形は普通の四角形です。
0662デフォルトの名無しさん2006/11/02(木) 02:25:36
>>680
>生成した乱数をファイルに出力するプログラム
とりあえずこれあげないと作れねーだろ
06636582006/11/02(木) 02:34:56
>>659 ごめ問題読み違えてた
#include<stdio.h>
#include<stdlib.h>
void DrawTriangle(int height){
int i;
printf("%*s*\n", height-1, "");
for(i=1;i<height-1;i++) printf("%*s*%*s*\n", height-i-1, "", i*2-1, "");
for(i=0;i<height*2-1;i++) printf("*");
printf("\n");
}
void DrawRectangle(int height){
int i;
for(i=0;i<height*2;i++) printf("*");
printf("\n");
for(i=1;i<height-1;i++) printf("*%*s*\n", height*2-2, "");
for(i=0;i<height*2;i++) printf("*");
printf("\n");
}
int main(void){
int figure, height;
while(1){
printf("The figure is drawn.\n1. Triangle\n2. Rectangle\nPlease input the number ... ");
scanf("%d", &figure);
if(figure==1 || figure==2) break;
}
printf("Please input height ... ");
scanf("%d", &height);
if(height<=1){printf("wrong number\n");exit(1);}
if(figure==1) DrawTriangle(height);
else DrawRectangle(height);
return 0;
}
0664デフォルトの名無しさん2006/11/02(木) 02:39:38
>>660
>乱数データを配列に読み込み、その配列の行列の和と積を求め、
配列の行列???
0665デフォルトの名無しさん2006/11/02(木) 02:43:14
>>663
本当にありがとうございました!!これで提出に間に合います。
0666デフォルトの名無しさん2006/11/02(木) 02:46:00
>>653
>>654 で回帰直線の求め方は分かるんじゃないかな

なんで VC 多いんだろう。参加できねーよ
makefile 〜.rc 〜.cpp
でうpしても使い方分かってくれなさそうだし… orz
06676602006/11/02(木) 03:03:04
申し訳ないです・・・とりあえず作った生成した乱数をファイルに出力するプログラム です
#include<stdio.h>
#include<stdlib.h>

int main(void)
{

int i;
time_t current;

FILE *myFile;
myFile = fopen("random.dat","w");
if(myFile==NULL){
return 1;
}

srand((unsigned int)time(& current));

for (i=0; i<10; i++){
fprintf(myFile,"%3d\n",rand()/%10+1);
}
fclose(myFile);
fprintf(stderr,"done\n");
return 0;

}
問題文そのまま書いたんですけど・・・多分配列の行列っていうのは乱数を読み込ませた配列の値を使って行列計算をしろって
ことだと思うんですけど・・・どうでしょうか?
0668デフォルトの名無しさん2006/11/02(木) 04:36:47
>>666
へへへ、ダンナ。そういうことができないからここで聞かせてもらってるんでゲスぜ。
先生方が思っている以上にオイラの能力はありやせんぜ。
どなたか >>653 を作成してくれませんか?ボタンクリックのとこだけでいいんですよ( ;・∀・)
0669デフォルトの名無しさん2006/11/02(木) 04:54:54
>>668
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2867.zip
作ってから気付いたんだが、二値化画像からデータを取るんだよね?
これだとクリックしてプロットした点をデータとして使うからちょっと感じが違うんだけども。
0670デフォルトの名無しさん2006/11/02(木) 09:32:44
すいません教えてください。色々調べたのですが、混乱中です。
C++ではなく、Cでウィンアプリを作れと言われたのですが、
これはMFCっていうのは使ってもいいのでしょうか?
あと、開発環境はVSでもおkなんでしょうか??
しかも、CでDB接続とかもできるんでしょうか???
CとC++の情報を切り離せずに混乱しております。
助けて!
0671デフォルトの名無しさん 2006/11/02(木) 09:48:31
>>670
猫でもわかるのサイトか本みんさい
全部C言語だから。
あと、MFCはAPIをラップしたクラスだからC++になります。
猫でもの本とか買って、適当に載ってるソースコピペして
いじったらいいじゃな〜い。
0672デフォルトの名無しさん2006/11/02(木) 10:38:13
>>648
助かりました!ありがとうございました!!
0673デフォルトの名無しさん2006/11/02(木) 11:17:03
教えてください!!
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ベッセル関数 (j0() と j1()) の数表を出力する C のプログラムを作り、
その出力結果を Excel でグラフにして、Word 等でレポートを書いて
その中にグラフも挿入して、このWebCTで提出せよ。
作業手順は添付ファイルを参照のこと。
ベッセル関数 J0, J1 は sin, cos と同じようにCの標準関数として用意されているので、
それを呼び出せばよい。ただし borland C compiler には用意されていないようなので、
大学の cygwin あるいは Unix 環境でプログラムを行うこと。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限: 2006年11月15日まで
0674 ◆xQTfY.P6Xs 2006/11/02(木) 11:18:23
1] 授業単元: プログラム言語基礎
[2] 問題文(含コード&リンク):n個の整数を入力し、入力した値の中で奇数と偶数の個数を表示せよ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: borland 2,31
 [3.3] 言語: C
[4] 期限: 今日の17時まで
[5] その他の制限: まだ習い始めて間もないです。

#include <stdio.h>

void main(void)
{
int x;

printf("x = ");
scanf("%d",&x);
if(x%2 !=0)
{
printf("\n xは奇数");
}
else{
printf("\n xは偶数");
}
}
これを応用して作れだそうです。

どうかよろしくお願いします
0675デフォルトの名無しさん2006/11/02(木) 11:19:27
【添付ファイルの内容】
Excel を用いて計算結果のグラフを描く
描画データの準備:
 CSV ファイル(コンマ区切りファイル)として、C プログラムから計算結果を書き出す。
例えば2つの整数変数、i, n を出力するのならば、プログラム中の書式指定において、
printf("%d, %d\n", i, n);
のようにコンマで区切って出力するように指定する。さらに、このプログラムを実行するとき、
$ ./a > data.csv
というように指定してデータファイルに書き込む。
“>” はリダイレクトと呼ばれる機能であり、この後ろに指定されている data.csv という名
前のファイルに今まで画面に出ていた出力(標準出力)を書き込む。ファイル名はどのようにつけてもかまわないが、
日本語やスペースは使わない方がよい。また拡張子は、Excel で開くために .csv としておくこと。

Excel でグラフを描く:
 Windows 上でファイル data.csv を探してクリックすると、Excel が起動してデータが表示される。
 描画するデータ範囲を選択して、グラフウイザードを起動する
([挿入(I)]メニューから[グラフ(H)]を選んでもよい)。


グラフウイザードでグラフの種類を選択して実行する。この場合は散布図を選んでいる。
 画面にしたがって次へと進み、[完了]をクリックすると、Excelの画面にグラフが挿入される。

Word 文書への貼り付け:
 Excel 上のグラフを選択して、[編集]→[コピー] (あるいはCtrl+C )でコピーし、Word などで
[編集]→[貼り付け] (あるいは Ctrl+V) を選ぶと、文書中にグラフが挿入される。
0676デフォルトの名無しさん2006/11/02(木) 11:27:31
>>673
どうでもいいがj0,j1はCの標準関数じゃねー
0677デフォルトの名無しさん2006/11/02(木) 11:28:30
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):◎見にくくなりそうなので一番下に書きます。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++ 2005
 [3.3] 言語:C++
[4] 期限:明日 11/3
[5] その他の制限: 標準入出力ストリームで、

整数除算による商の計算表(下記の例を参照)を表示する.


÷ | 除数
-------+ 1 2 3 4 5 6 7 8 9
被除数 +--------------------------------------------
 1 | 1 0 0 0 0 0 0 0 0
2 | 2 1 0 0 0 0 0 0 0
3 | 3 1 1 0 0 0 0 0 0
4 | 4 2 1 1 0 0 0 0 0
5 | 5 2 1 1 1 0 0 0 0
6 | 6 3 2 1 1 1 0 0 0
7 | 7 3 2 1 1 1 1 0 0
8 | 8 4 2 2 1 1 1 1 0
9 | 9 4 3 2 1 1 1 1 1

これを出力するようなプログラムを教えてください。
0678デフォルトの名無しさん2006/11/02(木) 11:29:22
すいません、表がちょっとずれました。
0679デフォルトの名無しさん2006/11/02(木) 11:30:32
÷ | 除数
-------+ 1 2 3 4 5 6 7 8 9
被除数 +--------------------------------------------
 1 | 1 0 0 0 0 0 0 0 0
2 | 2 1 0 0 0 0 0 0 0
3 | 3 1 1 0 0 0 0 0 0
4 | 4 2 1 1 0 0 0 0 0
5 | 5 2 1 1 1 0 0 0 0
6 | 6 3 2 1 1 1 0 0 0
7 | 7 3 2 1 1 1 1 0 0
8 | 8 4 2 2 1 1 1 1 0
9 | 9 4 3 2 1 1 1 1 1
0680デフォルトの名無しさん2006/11/02(木) 11:40:27
>>677
表のフォーマットがよくわからんからその辺すこし適当。
#include<iostream>
#include<iterator>
#include<algorithm>
#include<iomanip>
#include<functional>
using namespace std;
int main(){
    int a[9];for(int i=1;i<=9;++i)a[i-1]=i;
    cout << "    ÷ | 除数" << endl;
    cout << "++++++++ ";
    copy(a,a+9,ostream_iterator<int>(cout," "));
    cout << endl << "非除数 +";
    *fill_n(ostream_iterator<char>(cout),18,'-')++ = '\n';
    for(int i=1;i<=9;++i){
        cout << setw(6) << i << " | ";
        transform(a,a+9,ostream_iterator<int>(cout," "),bind1st(divides<int>(),i));
        cout << endl;
    }
}
0681デフォルトの名無しさん2006/11/02(木) 11:57:29
>>674
#include<stdio.h>
int main(void){
int i,n,x,odd=0,even=0;
printf("n:");
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&x);
(x%2==0)? even++:odd++;
}
printf("偶数:%d,奇数:%d\n",even,odd);
return 0;
}
0682 ◆xQTfY.P6Xs 2006/11/02(木) 12:03:33
>>681さん 
 
ほんとうにありがとうございました。 いきなり課題とかだされて全くわからなくてこまっていたんです。ほんとうにありがとうございます。 
0683デフォルトの名無しさん2006/11/02(木) 12:24:02
当日、1日、2・3日前ならともかく、まだ1週間以上期限があるなら、
じっくり自分で考えてみた方が自分のためにもなるし、
出された回答を理解するだけより、よっぽど勉強になると思うんだ。
0684デフォルトの名無しさん2006/11/02(木) 12:45:30
すいません。677の者ですが、680の回答の#include<iterator> #include<algorithm> #include<iomanip> #include<functional> とかはまだ習ってないので、怒られます。
まことに勝手ながら<iostream>しか習ってません。setwとかcharとかも習ってません。
条件の後出しですいませんが、

//除数
//被除数
//商
//(1)計算表の第1行を表示
//(2)計算表の第2行を表示
//(3)計算表の第3行を表示
 //(4)各被除数について以下の処理を繰り返す(反復)
  //(4-1)当該被除数を表示する
  //(4-2)各除数について、被除数を除数で割った商を表示する
  //(4-3)改行する

おおまかに、このアルゴリズムでお願いできませんでしょうか?

0685デフォルトの名無しさん2006/11/02(木) 12:49:23
>>638
ありがとうございます!
今からじっくり見させていただきます。
0686デフォルトの名無しさん2006/11/02(木) 12:55:17

÷ | 除数
------+ 1 2 3 4 5 6 7 8 9
  被除数+---------------------
     1 | 1 0 0 0 0 0 0 0 0
     2 | 2 1 0 0 0 0 0 0 0
    3 | 3 1 1 0 0 0 0 0 0
     4 | 4 2 1 1 0 0 0 0 0
    5 | 5 2 1 1 1 0 0 0 0
    6 | 6 3 2 1 1 1 0 0 0
     7 | 7 3 2 1 1 1 1 0 0
     8 | 8 4 2 2 1 1 1 1 0
    9 | 9 4 3 2 1 1 1 1 1
ズレませんように
0687デフォルトの名無しさん2006/11/02(木) 16:30:07
684、ずっと考えても出来ません。

教えてもらえませんか?
0688デフォルトの名無しさん2006/11/02(木) 16:40:47
テスト
0689デフォルトの名無しさん2006/11/02(木) 16:53:47
>>669
>>653です。
おお。早い!
そうです、こんな感じですが2値化画像を参照して開くんで、とりあえず簡単な1本の完璧でない直線の画像(BMP)をリソースに登録してそれを表示して
そのにょろにょろ直線を直線にするプログラムがいいですね。。。
あと直線も画面の端から端ではなく、線分の一番左のX座標から右のX座標までの線分にしていただけませんか?
しかし、ここの先生方の馬力はすごいですね。お願いします><
0690デフォルトの名無しさん2006/11/02(木) 16:57:54
>>689
あっ!ちなみに線分は細線化されてますので太さは「1」です><
0691デフォルトの名無しさん2006/11/02(木) 23:08:42
いやいや、689先生もたいしたものですよ
0692デフォルトの名無しさん2006/11/02(木) 23:10:29
そんな・・・、691さんほどではありません><
0693デフォルトの名無しさん2006/11/02(木) 23:12:09
>>634
実行したのですが、何も表示されなかったのですが
どうすれば?
0694デフォルトの名無しさん2006/11/02(木) 23:22:31
>>689
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2868.zip

>>677
#include <iostream>
using namespace std;

int main()
{
    cout << "÷    | 除数" << endl;
    cout << "------+ 1 2 3 4 5 6 7 8 9" << endl;
    cout << "被除数+--------------------" << endl;
    for(int i=1; i<=9; i++){
        cout << "    " << i << " | ";
        for(int j=1; j<=9; j++){
            cout << i/j << " ";
        }
        cout << endl;
    }
    return 0;
}

>>693
それが正しい動作
0695デフォルトの名無しさん2006/11/02(木) 23:25:22
>>694
答えは無いってことですか?
0696デフォルトの名無しさん2006/11/02(木) 23:35:27
>>695
問題文くらい読まないのか?
0697デフォルトの名無しさん2006/11/02(木) 23:39:07
問題読みましたよ
反例があるっぽいんですけど。
0698デフォルトの名無しさん2006/11/02(木) 23:46:49
>フェルマーは、x^n+y^n=z^n (x,y,z,n:整数)においてn≧3に対して、
> この式を満たすものはないと断言した。これはつい最近になって証明された。
0699デフォルトの名無しさん2006/11/02(木) 23:54:47
つまり、反例がでないってのが答えなんですね
なるほど
0700デフォルトの名無しさん2006/11/02(木) 23:58:09
>>694
先生・・・すさまじいです。。。オイラの卒論なんて一週間でできちゃいそうですね。
ほんとに感謝感激です。ありがとうございました。
0701デフォルトの名無しさん2006/11/03(金) 00:41:32
694の方 ありがとうございました 手助け感謝します
0702デフォルトの名無しさん2006/11/03(金) 03:18:18
[1] 授業単元: 分割コンパイル、ポインタ
[2] 問題文(含コード&リンク): 見にくくなりそうなので下に書きます。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 2005
 [3.3] 言語: C
[4] 期限: 明日23時
[5] その他:分割コンパイルとポインタ習い始めましたが、よく分かりませんorz

1.分割コンパイル
引数として受け取ったint型の数値nについて、
1からnまでの総和を計算して返す関数 int sum(int n)
nの階乗を計算して返す関数 int fact(int n)
を作成しなさい。
ただし、main関数を記述するファイルとは別のファイルに作成すること。

2.ポインタによる疑似間接参照
要素数が10のint型の配列に
キーボードから数値を入力する関数を作成し
(main関数の中で)呼び出しなさい。
配列はmain関数の中で宣言し、
入力の関数には配列のアドレスを引数で与えること。
【ヒント】 void input(int *p)

2問ありますが、よろしくお願い致します。
0703デフォルトの名無しさん2006/11/03(金) 04:05:17
>>269が未だに解けてません。検定の前まででいいのでお願いします。
0704デフォルトの名無しさん 2006/11/03(金) 06:36:34
>>702
int sum(int n)
{
n*(1+n)/2
}
int fact(int n)
{
int i = 1;
int result = 1;
for(;i<=n;i++)
result *= i;

return result;
}
void input(int *p, int size)
{
int i = 0;
for(;i < size; i++)
fscanf(stdin,%d,p[i]);
}
0705デフォルトの名無しさん2006/11/03(金) 09:30:21
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
線形リストを作成するプログラムを作れ。
メニュー番号は以下の通りである。
1・・・先頭に新規ノードを挿入
2・・・最後に新規ノードを挿入
3・・・挿入したいノード名を指示して、指示されたノードの後ろに新規のノードを指定する
4・・・削除したいノード名を指示して、指示されたノード名を削除する
8・・・リストを先頭より表示する
9・・・終了
>>427 のプログラムの応用編です。
自分なりにやってみましたが、case3, 4の部分がうまく動いてくれないんです…
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2869.txt

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006/11/04 PM01:00
[5] その他の制限: 構造体、ポインタを使用
0706デフォルトの名無しさん2006/11/03(金) 09:39:53
[1] 授業単元:計算科学
[2] 問題文
確率変数Xが確率密度関数
1/6( -3 ? x < 0)
p(x)=2( 0 ? x < 1/4)
0( それ以外 )とする。
double get_uniform_random(void) を利用して, p(x)に従う乱数X を返す関数
double get_myrandom(void) をまず定義する.
繰り返し回数?
300
シード?
128478
と入力すると, double get_myrandom(void)でサンプルを300回発生し,
サンプル平均 10.0 嘘です
サンプル分散 1.0 嘘です
…
-3.050000 0.000000
-2.950000 0.016000
-2.850000 0.018000
…
のようにサンプル平均, サンプル分散, ヒストグラムを計算して出力するプログラムを作ろう, ここで,
-2.950000 0.016000
は, -2.95 を中心値とするビンに, 300回中 300*0.016 回はいったということをいっている.
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年11月07日09:00まで
[5] その他
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2870.txt
ヒントです。利用して下さい。
0707デフォルトの名無しさん2006/11/03(金) 10:11:48
>>703
>>386 のはどこがいけない?
0708デフォルトの名無しさん2006/11/03(金) 10:24:16
>>705 うっかり間違いが多いな

・ノード追加
trace = &work[n];
-> trace->next = &work[n];

・ノード削除
sento->next = trace->next
-> previous->next = trace->next;
previous = NULL;
-> previous = trace;
if( trace->name != value )
-> if ( trace == NULL )
0709デフォルトの名無しさん2006/11/03(金) 10:40:05
>>708
ありがとうございます
ちゃんと正常動作できました
0710デフォルトの名無しさん2006/11/03(金) 10:51:24
>>706
hist[(int)((x-xmin)/dx)]++;

average=sum/nn;
variation=(sum2-sum*sum/nn)/nn;

double get_myrandom(void){
double x;
double r;

r=get_uniform_random();
if(r<=0.5)
x=-r*6;
else
x=(r-0.5)/2;
return x;
}
0711デフォルトの名無しさん2006/11/03(金) 11:04:48
>>703 >>386 のここだけ修正すればいけるんじゃない?
return (double)rand()/(RAND_MAX-1);
↓
return (double)rand()/(RAND_MAX+1);
07127032006/11/03(金) 12:49:47
>>386
>>707
>>711
ごめんなさい。見逃してました…
ありがとうございました!これから解析してみます。
0713デフォルトの名無しさん2006/11/03(金) 13:51:43
>>704ありがとうございます。
しかし、正常動作しないので、>>702の問題答えてくれる方よろしくお願いします。
1と2、分けて書いてくれると有難いです。
0714デフォルトの名無しさん2006/11/03(金) 14:02:59
俺なんてまだwhile文を習ったレベルだよ。
0715デフォルトの名無しさん2006/11/03(金) 14:12:59
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):2 つの整数 a と b を入力し, 小さい方を出力するプログラムを条件演算子を用いて作成せよ
[3] 環境
 [3.1] OS: Windows98
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年11月3日16:00まで
0716デフォルトの名無しさん 2006/11/03(金) 14:32:54

(a >b) ? printf("%d",b) : printf("%d",a);;
0717デフォルトの名無しさん2006/11/03(金) 14:53:04
>>716
美しくない
0718デフォルトの名無しさん2006/11/03(金) 14:59:07
[1] 授業単元:計算機システム
[2] 問題文1整数のビットパターンを表示するプログラムを作成せよ
     2単浮動小数点数のビットパターンを表示するプログラムを作成せよ
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:borland C++ 5.5 
[3.3] 言語:C++
[4] 期限:今日中 11/3
0719デフォルトの名無しさん2006/11/03(金) 15:01:04
>>716
普通はこうじゃね?
printf("%d",a>b?b:a);
0720デフォルトの名無しさん2006/11/03(金) 15:04:16
>>716  ありがとうございます。助かりました。
0721デフォルトの名無しさん 2006/11/03(金) 15:08:13
#include <bitset>
0722デフォルトの名無しさん 2006/11/03(金) 15:09:20
久々ありがとうって言われちゃった
嬉しいからあげちゃお
0723デフォルトの名無しさん2006/11/03(金) 15:24:54
>>718
問題1

#include <stdio.h>
union {
int n;
struct {
unsigned b0: 1; unsigned b1: 1; unsigned b2: 1; unsigned b3: 1;
unsigned b4: 1; unsigned b5: 1; unsigned b6: 1; unsigned b7: 1;
unsigned b8: 1; unsigned b9: 1; unsigned b10: 1; unsigned b11: 1;
unsigned b12: 1; unsigned b13: 1; unsigned b14: 1; unsigned b15: 1;
unsigned b16: 1; unsigned b17: 1; unsigned b18: 1; unsigned b19: 1;
unsigned b20: 1; unsigned b21: 1; unsigned b22: 1; unsigned b23: 1;
unsigned b24: 1; unsigned b25: 1; unsigned b26: 1; unsigned b27: 1;
unsigned b28: 1; unsigned b29: 1; unsigned b30: 1; unsigned b31: 1;
};
}a;
int main()
{
scanf("%d", &a.n);
printf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
a.b31, a.b30, a.b29, a.b28, a.b27, a.b26, a.b25, a.b24,
a.b23, a.b22, a.b21, a.b20, a.b19, a.b18, a.b17, a.b16,
a.b15, a.b14, a.b13, a.b12, a.b11, a.b10, a.b9, a.b8,
a.b7, a.b6, a.b5, a.b4, a.b3, a.b2, a.b1, a.b0);
return 0;
}
0724デフォルトの名無しさん2006/11/03(金) 15:53:37
>>718
#include<iostream>
#include<bitset>
using namespace std;
int main(){
float f = 7.18;
bitset<32> a(*(int*)&f);
string s = a.to_string<char,char_traits<char>,allocator<char> >();
cout << s << endl;
}
0725デフォルトの名無しさん2006/11/03(金) 17:33:33
[1] 授業単元:C言語演習
[2] 問題文(コピペ)

引数で受け取ったunsigned int型変数を2進数で表示する関数を作成せよ。
(例えば,0xf0f0f0f0が入った変数の値を表示させると,
11110000111100001111000011110000 が画面に表示されるようにする。)

ヒント:
unsigned int mask = 1<<31; は1000 0000 0000 0000 0000 0000 0000 0000を表すので,
この変数maskをうまく使って最上位ビットを取り出す。次に mask = mask >>1; とすると,
0100 0000 0000 0000 00000000 0000 0000となるので,これを使うと,
最上位から2番目のビットを取り出すことが出来る。

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:borland C++ 5.5 
[3.3] 言語:C
[4] 期限:明日の朝まで。
0726デフォルトの名無しさん2006/11/03(金) 18:22:25
#define BIT 32

int xxx( unsigned int num)
{
unsigned int mask = 1 << BIT-1;
int i;

for( i = 0; i < BIT-1; i++ ){
printf( "%d", (num & mask) >> (BIT-1-i) );
mask = mask >>1;
}
printf("\n");

return 0;
}
0727デフォルトの名無しさん2006/11/03(金) 19:26:59
[1] 授業単元:アルゴリズム(並び替えと探索)
[2] 問題文(含コード&リンク):
英単語を各行に一語ずつ入力してもらい、単語がそれぞれ
何回ずつ出現したかの頻度を出力するプログラムを作りなさい。
単語を辞書式順序で出力しなさい。ここで、単語は、次のような
木構造で管理しましょう。
struct tree{
struct tree *left;
struct tree *right;
char *word;
int count;
};
wordが単語を表し、countがその単語の出現回数を表しています。
leftからリンクされている木の単語は、wordより辞書式順序で
前にあるものばかりで、rightはwordより後にあるものばかり
になるように木構造を管理しなさい。辞書式順序の比較には
strcmpを使います。文字列pとqに対して、
strcmp(p,q)
は、pがqより辞書式順序で前にある場合には-1を、
等しい場合には0を、後ろの場合には1を返します。
[3] 環境
 [3.1] OS:unix
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限: 2006年11月4日23:00
[5] その他の制限:今までは制御構造、ポインタ、構造体など、
今回はクイックソート、バブルソート、バイナリサーチまで習いました。
0728デフォルトの名無しさん2006/11/03(金) 19:52:19
>>726
ありがとうございます。参考になりました。
0729デフォルトの名無しさん2006/11/03(金) 20:48:05
>>723
>>723
どうもありがとうございます。
0730デフォルトの名無しさん2006/11/03(金) 21:14:44
>>727
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2871.c
07317272006/11/03(金) 21:30:34
>>730
素早い返答ありがとうございます。
非常に助かりました。
0732デフォルトの名無しさん2006/11/03(金) 22:15:24
>>731
すまんfreeの順序間違えた。
free(p->word);
free(p);
にしといて
0733デフォルトの名無しさん2006/11/03(金) 23:00:16
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):正の整数値を読み込み、その数を逆順に表示するプログラムを作成せよ
  例えば、1234が入力されたら4321と出力するする
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 11月7日
[5] その他の制限: while文を使う

10で割ってその余りを表示していくらしいんですがうまくいきません
0734デフォルトの名無しさん2006/11/03(金) 23:05:01
>>733
#include<stdio.h>
int main(void)
{
int number;
printf("Input positive number : ");
scanf("%d", &number);
while(number>0)
{
printf("%d", number%10);
number/=10;
}
return 0;
}
0735デフォルトの名無しさん2006/11/03(金) 23:36:43
>>734
ありがとうございます
こんなに早く答えてもらえるとは
0736デフォルトの名無しさん2006/11/03(金) 23:44:36
[1] 授業単元:OpenGLとアニメーション
[2] 問題文(含コード&リンク):これを利用して別の動き,オブジェクトを用いたOpenGLアニメーションを作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC 6.0等
 [3.3] 言語:C
[4] 期限: 11月6日(月)朝9:30まで
[5] その他の制限: なし

希望としましてはプログラム実行時の現在左下から動き出す1個の四角形を犬の口から3個発射できるようにして、
4回目の発射から四角形が四方八方に花火のように破裂する openglアニメーションを作成したいのですがどうすればいいですか?
実行ファイルはbackground.cです。

ファイル:
http://up2.viploader.net/mini/src/viploader84139.zip.html
0737デフォルトの名無しさん2006/11/04(土) 09:54:05
[1] 授業単元:プログラミング
[2] 問題文:与えられた漸化式に基づいて数列の第0項から第N項までの値を表示する。
      A0 = A1 = 1, An = An-1+An-2 (n≧2のとき)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++ 2005                 
 [3.3] 言語:C++
[4] 期限: 11月6日(月)まで
[5] その他の制限:よくわからないんで、プログラムを作るときの設定をいいますと、Win32→Win32コンソールアプリケーション→コンソールアプリケーション→(ここからプログラムを作ってます)
  アルゴリズムの指定制限:
 ・データ構造:
  An
An-1
An-2
添字(n)
・操作部:
    (1)第0項と第1項の値を表示する。
    (2)添字を上限値(20)まで1づつ増やしながら以下の処理を繰り返す(反復)
      (2-1)Anの値を求めて表示する。
      (2-2)An-1の値をAn-2に移す。
      (2-3)Aの値をAn-1に移-1す。

自分で、やってみるとAn-1とかのn-1などが漸化式の様に連動していかない(数値として変化していってない)みたいで、どういう風に記述したらいいのかわかりません。
数日前にもこの課題を答えて頂いたんですが、ビルドできませんでした。
参考にはなったんですが、自分はアホなのでこんな風につまづいてます。
0738デフォルトの名無しさん2006/11/04(土) 09:59:30
737に入りきれないと思ったので補足です。

最初のところは、
#include <iostream>
using namespace std;
void main(){          しか習ってません。

あと cout cin int for while if…else  くらいしか習ってません。       
0739デフォルトの名無しさん2006/11/04(土) 10:10:37
>>737
自分で書いたところまで晒してくれ
0740デフォルトの名無しさん2006/11/04(土) 10:12:27
>>737
google:フィボナッチ
0741デフォルトの名無しさん2006/11/04(土) 12:34:52
なぜ、いつもgoogleなの?
別にyahooでもinfoで変わらなくね?
0742デフォルトの名無しさん2006/11/04(土) 12:43:41
737の者です。739の返事を遅れてすいません。
#include <iostream>
using namespace std;

void main() {

#define N 20
int An //An
int An-1 //An-1
int An-2 //An-2
int n //Aの添字  …int n を一番最初にしてみましたけどダメでした。

int A1 = 1
int A2 = 1 ← どの辺で、A1=A2=1って書かないといけないのでしょうか。

cout << A1 << endl;
cout << A2 << endl; //(1)第0項と第1項の値を表示

for ( int 2; n <= N ; n++ ) { //添字を2から上限値まで1ずつ増やしながら表示

An = An-1 + An-2;    ←これもA1=A2=1と同じでどの辺に書くべきですか?

An-2 = An-1; //An-1の値をAn-2に移す
An-1 = An; //Anの値をAn-1に移す
cout << endl;
}
}
0743デフォルトの名無しさん2006/11/04(土) 12:48:01
742のコンパイル結果です。
------ ビルド開始: プロジェクト: enshu1-5-3, 構成: Debug Win32 ------
コンパイルしています...
enshu1_5_3.cpp
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(21) : error C2144: 構文エラー : 'int' は ';' によって先行されなければなりません。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(21) : error C2601: 'A_' : ローカル関数の定義が正しくありません。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(16): この行は '{' を含んでいますが、これに対応するものがありません。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(21) : error C2065: 'i' : 定義されていない識別子です。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(21) : error C2143: 構文エラー : ';' が '}' の前にありません。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(24) : error C2470: 'A_' : 関数定義のようですが、パラメータ リストがありません。外見上の本体をスキップします。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(27) : error C2371: 'i' : 再定義されています。異なる基本型です。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(36) : warning C4091: '' : 変数が何も宣言されていないときは、'int' の左辺を無視します。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(48) : error C2143: 構文エラー : ';' が '{' の前にありません。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(48) : error C2143: 構文エラー : ';' が '}' の前にありません。

An,An-1,An-2が計算上(An)-1,(An)-2とかになってるんですかね?
0744デフォルトの名無しさん2006/11/04(土) 12:54:35
コンパイラの言葉に耳を傾けてあげてください。・゚・(ノД`)・゚・。
0745デフォルトの名無しさん2006/11/04(土) 14:21:23
>>742
> 自分で、やってみるとAn-1とかのn-1などが漸化式の様に連動していかない

連動しないも何もコンパイル通らないぞ…

・行末のセミコロンがない
・An-1 ←変数名にマイナス記号は使えない(Anから1を引く計算と区別できないから)
・for ( int 2; n <= N ; n++ ) ←もの凄くおかしい(nをカウンタにするならn = 2だろ)

これでコンパイルは通るはず。

実際動かしてみるとforの中で最初のn = 2のとき
> An = An_1 + An_2;
An_1, An_2の値は何も代入されてないので不定。これがいけない。
An_1 = 1;
An_2 = 1;
とループの前に与えておけば問題ない。
あと、A1, A2は使ってない&必要ない。

> cout << endl;
これじゃ改行出すだけで答えが出力されない。
A_nを出力しよう。
0746デフォルトの名無しさん2006/11/04(土) 15:15:19
とりあえず仕様に沿って書き直してあげた。
#include <iostream>
using namespace std;
int main(){
int An; //An
int An_1; //An-1
int An_2; //An-2
int n; //添字
#define N 20;
_asm{
mov n, 2
mov An_1, 1
mov An_2, 1}
cout << An_2 << endl; //第0項
cout << An_1 << endl; //第1項
while(n <= N){
_asm{
mov eax, An_1
add eax, An_2
mov An,eax}
cout << An << endl;
_asm{
mov eax, An_1
mov An_2, eax
mov eax, An
mov An_1, eax
inc n}}
return 0;}
0747デフォルトの名無しさん2006/11/04(土) 15:58:45
>>746
ちょwwwおまwwww
0748デフォルトの名無しさん2006/11/04(土) 16:17:36
>>746
特定した
0749秋葉の大学生&rlo;望志んさ屋トフソ2006/11/04(土) 19:19:48
こんばんわ。C++暦2日目の学生です。

乱数で0が出るまでの回数をtemp[]配列に記憶しておき,それを1万回試行してtemp[]の平均を求める。
http://ipoko.skr.jp/ransuu.cpp.txt
というプログラムを考えたのですが,なぜか最初の1回だけランダムな数字が出て
残りの9999回は全部0になってしまいます。

何故でしょうか?誰か教えてくださいm(__)mペコ
0750デフォルトの名無しさん2006/11/04(土) 19:25:59
>>749
j = 0;
↓
j = 0; s=1;
0751秋葉の大学生&rlo;望志んさ屋トフソ2006/11/04(土) 19:27:54
>>750
アッー!
なるほど、どうもありがとうございましたw
0752デフォルトの名無しさん2006/11/04(土) 20:17:20
大学生の方にお願いです。
あまりにもレベルの低い宿題を晒さないでください。

大学いってもその程度ができないのかと思うと中学生ながら絶句してしまいます。
■ このスレッドは過去ログ倉庫に格納されています