[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 06/05 09:03 / Filesize : 337 KB / Number-of Response : 864
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2008/10/30(木) 07:49:39 BE:113605834-PLT(24065)]
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

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

前スレ
C/C++の宿題を片付けます 116代目
pc11.2ch.net/test/read.cgi/tech/1222813731/

296 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:28:06 ]
>>294
横80文字縦20行としてとりあえず。上下非対称だがその辺は丸め誤差のせいにして。
#define WIDTH 80
#define HEIGHT 20
#define PI 3.14159265358979
int x, y;
int c[WIDTH];
for(x = 0; x < WIDTH; x++) c[x] = (cos(4 * PI / WIDTH * x) + 1)* HEIGHT/2;
for(y = 0; y <= HEIGHT; y++){
 for(x = 0; x < WIDTH; x++)
  if(c[x] == HEIGHT - y) putchar('*');
  else putchar(' ');
 putchar('\n');
}

297 名前:296 mailto:sage [2008/11/06(木) 01:30:01 ]
>>296
配列習ってないんだったら if(c[x] == の部分の c[x] を
cos(4*PI/WIDTH * x) + 1)*HEIGHT/2
に置き換える。すると最初の for(x = 0; は不要。

298 名前:296 mailto:sage [2008/11/06(木) 01:33:10 ]
と思ったけど、暗黙のキャスト使ってるから一度 int の配列に入れておくのが吉かも。


299 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:38:35 ]
>>295 全然トリッキーじゃなかった。
struct cell *next, *curr;
for (curr = head, next = NULL ; next = curr->next, curr != NULL; curr = next) {
free(curr);
}
せめてこうだったわ。半日修行してくる。

300 名前:294 [2008/11/06(木) 01:48:40 ]
>>296
配列習ってないので、c[x]を置き換えてやってみたんですけど、何かうまくいきませんでした。
どうすればよいでしょうか。
あと「横80文字縦20行とする」ってどういうことですか。

301 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:49:08 ]
>>290
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7952.txt

302 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:49:11 ]
>>264
2問目あがり。全角スペースは適当に置き換えてちょ。簡単に、簡潔にかいたつもり。

#include <stdio.h>
#define X 4 /* X,Yの値を交換しても動くから好きにしてちょ */
#define Y 3
int main(void)
{
 int i, j, max, min, array[X][Y];
 for( i = 0; i < X; i++ )
  for( j = 0; j < Y; j++ )
   scanf( "%d", &array[i][j]);

 max = min = array[0][0];
 for( i = 0; i < X; i++ ) {
  for( j = 0; j < Y; j++ ) {
   if(max < array[i][j])
    max = array[i][j];
   if(min > array[i][j])
    min = array[i][j];
  }
 }
 printf( "Max: %d\nMin: %d\n", max, min);
 return 0;
}


303 名前:301 mailto:sage [2008/11/06(木) 01:51:23 ]
問2の3行目は#include <string.h>だorz

304 名前:294 [2008/11/06(木) 02:08:21 ]
自分でもプログラムを組んでみたんですが、これから何とかなりませんか。
自分の組んだのだと、一つしか表示されません。
#include<stdio.h>
#include<math.h>

int main(){
double x, y, pai=3.14;

for(y=1; y>=0; y=y-0.1){

for(x=0; x<=pai/2; x=x+0.1){

if(y==cos(x)){
putchar('*');
}

else{
putchar(' ');
}

}
putchar('\n');

}
return 0;
}



305 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:19:51 ]
y==cos(x)
幅を持たせろ、なんで一致するとおもったんだ?


306 名前:294 [2008/11/06(木) 02:22:03 ]
幅を持たせるって、どういうことですか?

307 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:23:47 ]
yが0.1刻みなのにぴったり一致するわけないだろ?

308 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:27:23 ]
#include <stdio.h>
#include <math.h>
int main(){
double x, y, pai=3.14;
for(y=1; y>=-1; y=y-0.1){
for(x=0; x<= 4 *pai; x=x+0.1){
if(y - 0.05 < cos(x) && cos(x) <= y + 0.05){
putchar('*');
}
else{
putchar(' ');
}
}
putchar('\n');
}
return 0;
}

答えわたしとけばいいんじゃね?

309 名前:294 [2008/11/06(木) 02:28:13 ]
でも刻み幅を細かくしすぎたら、画面に収まりきらないと思うのですが・・・
そういう場合はどうすればよいでしょうか。

310 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:32:01 ]
>>301
おお!
あざーっす!!

311 名前:294 [2008/11/06(木) 02:32:57 ]
本当にありがとうございました。
自分の知識が足りず、申し訳ありませんでした。

312 名前:301 mailto:sage [2008/11/06(木) 02:39:00 ]
>>277
#include <math.h>を足して
関数のプロトタイプ宣言して

#define next(x) (((x)+1% (Q_SIZE+1))

#define next(x) ((x+1) % (Q_SIZE+1))

関数enqueue内の return 0; の前に rear = next(rear); 足して

○○○1つ目 enqueue(n) == -1
○○○2つ目 (n=dequeue()) == -1
viewqueueは printf("末尾(長さ:%d)\n", abs(front-rear));

313 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:39:31 ]
名前消すの忘れた(´・ω・`)

314 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:54:41 ]
Cで以下のような関数を作りたいのですが、可能でしょうか?
可能ならば、どのように実装すればよいのか教えてください。

int myrand(int Max, int N, int prob)

0からMaxまでのランダムな整数を返しますが、
probの確率でNを返してくれるような関数です。
例えば、myrand(100, 10, 50)は50%で10を返しますが、
それ以外は1〜100までランダム、という具合です。



315 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 03:03:44 ]
>>314
それ以外は1〜100までランダム
10は含むのか?

316 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 03:12:50 ]
if( (double)rand()/RAND_MAX < prob )
return N;
else
return (int)(rand()*(Max+1.0)/(1.0+RAND_MAX));

317 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 04:12:38 ]
>>316
probを100で割るか左辺を100倍しないと

318 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 09:54:40 ]
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
10進数⇔16進数の変換プログラムを作成せよ
-10進⇒16進か16進⇒10進かを最初に選択
-変数はint型で

実行例
10進⇒16進なら1,16進⇒10進なら2を入力してください: 1 ↓
10進数を入力してください: 1000 ↓
入力した数は16進数で 3e8 です.

10進⇒16進なら1, 16進⇒10進なら2を入力してください: 2 ↓
16進数を入力してください: f86a ↓
入力した数は10進数で 63594 です.

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子は習いました。
お願いします。

319 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:02:27 ]
>>318
strltolは使っちゃだめな課題っぽいけどそうなんだよね?

320 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:21:18 ]
>>318
そうですね。
strltolは使わないでお願いします。

321 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:22:38 ]
>>319
そうですね。
strltolは使わないでお願いします。

322 名前:デフォルトの名無しさん [2008/11/06(木) 10:46:05 ]
>>318
#include <stdio.h>
int main(void) {
int i, n;
printf("10進⇒16進なら1, 16進⇒10進なら2を入力してください: ");
scanf("%d", &i);

switch(i) {
case 1:
printf("10進数を入力してください: ");
scanf("%d", &n);
printf("入力した数は16進数で %x です\n", n);
break;
case 2:
printf("16進数を入力してください: ");
scanf("%x", &n);
printf("入力した数は10進数で %d です\n", n);
break;
}
return 0;
}

323 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 11:47:27 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7953.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:c
[4] 期限:11/10
[5] その他の制限:とくになし

よろしくおねがいします

324 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 12:07:30 ]
>>323
int kaibun(char str[]){
{
 int i, n;
 /* 終端文字 \0 または \n までの文字数を数える */
 for(n = 0; str[n] != '\0' && str[n] != '\n'; n++);
 /* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */
 for(i = 0; i < n; i++) if(str[i] != str[n - i - 1]) return 0;
 /* 最後まで return 0 されなかったら 1 を return */
 return 1;
}



325 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 12:11:06 ]
for(i = 0; i < n; i++)

for(i = 0; i < n/2; i++)
で十分だったな

326 名前:738 [2008/11/06(木) 12:23:09 ]
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 入力した文字の先頭と最後の文字を出力する。
               ”終わり”と入力すればプログラム終了。

[3]
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C言語
[4] 期限: 2008年11月8日までお願いします。
[5] その他の制限: scanfを使うのではなくgetcharを使用

327 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 13:23:19 ]
>>326
マルチバイト文字の処理を要求しているのか

328 名前:324 mailto:sage [2008/11/06(木) 13:28:33 ]
>>323
例文よく見てなかった。大文字小文字は区別しないのな
制限なしってことだから、ctype.h の tolower 使って書き換える
if(str[i] != str[n - i - 1])

if(tolower(str[i]) != tolower(str[n - i - 1]))


329 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 13:33:00 ]
>>252

ありがとうございました!



330 名前:324 mailto:sage [2008/11/06(木) 14:35:12 ]
何度もすまん。空白も無視しないとダメなんだな
int kaibun(char str[])
{
 int i, n;
 char buf[MAX_SIZE];
 /* 終端文字 \0 または \n までの文字数を数えて空白を除いて buf にコピー */
 for(i = 0, n = 0; str[i] != '\0' && str[i] != '\n'; i++) if(str[i] != ' ') buf[n++] = str[i];
 /* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */
 for(i = 0; i < n; i++)  if (tolower(buf[i]) != tolower(buf[n - i - 1]))   return 0;
 /* 最後まで return 0 されなかったら 1 を return */
 return 1;
}


331 名前:123 mailto:sage [2008/11/06(木) 16:34:15 ]
>>123をお願いできないでしょうか?

332 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:49:14 ]
>>324
なんども申し訳ありません
ありがとうございます!

333 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:58:02 ]
>>322
本当に有難う御座いました。
大変助かりました。

334 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:40:49 ]
お願いします
[1] 配列
[2]
下に示す行列の積を求めて表示するプログラムを作りなさい。
int x[2][3]={{1,2,3},{4,5,6}}
int y[3][2]={{1,5},{5,3},{8,1}}
実行結果
35 14
77 41

[3] 環境
 [3.1] XP
 [3.2] VC 6.0
 [3.3] 言語:C
[4] 期限:明日まで



335 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:59:36 ]
>>331
#include <string>
#include <iostream>
class Fish {};
class Wakana : public Fish{
protected: std::string name;
public:
Wakana() : name("ワカナ") { };
void show() { std::cout << name << std::endl; }};
class Tsubasu : public Wakana {
protected: std::string name;
public:
Tsubasu() : name("ツバス") { }
void show() { std::cout << Wakana::name << "→" << name << std::endl; }};
class Inada : public Tsubasu {
protected: std::string name;
public:
Inada() : name("イナダ") { }
void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" <<name << std::endl; };};
class Hamachi : public Inada {
protected: std::string name;
public:
Hamachi() : name("ハマチ") { };
void show() {
std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << name << std::endl;}};
class Buri : public Hamachi {
protected: std::string name;
public:
Buri() : name("ブリ") { };
void show() {std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << Hamachi::name << "→" << name << std::endl;}};
int main(){Buri().show(); return 0;}

336 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:08:41 ]
入出力関数は?

337 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:02:39 ]
題意がいまいち分からないので継承元の文字列を継ぎ足していく感じに
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7954.cpp
クラス名がinabaになっちゃった.

338 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:05:41 ]
>>334
上の方に行列の課題なかったか?
int ans[2][2] = {0};
int i, j, k;

for(i = 0; i < 2; i++)
 for(j = 0; j < 2; j++)
   for(k = 0; k < 3; k++)
    ans[i][j] += x[i][k]*y[k][j];
for(i = 0; i < 2; i++){
 for(j = 0; j < 2; j++)
  printf("%d ", ans[i][j]);
 printf("\n");
}



339 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:12:34 ]
[1] 授業単元: 配列を用いた計算
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7955.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:11月10日12:00まで
[5] その他の制限: 構造体を利用することになっています。
構造体のメンバーは
行のサイズ unsigned int
列のサイズ unsigned int
行列のデータへのポインタ double **
で構成するものとする。
と指定されています。

よろしくお願いします。

340 名前:334 mailto:sage [2008/11/06(木) 21:31:54 ]
>>338
ありがとうございます

341 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 23:13:24 ]
>>316, 317
ありがとうございます。

>>315
Maxはある程度大きく、それ程厳密な確率を求めているわけではないですので、
316さんの実装で十分です。


342 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:17:42 ]
[1] 授業単元: ポインタ配列
[2] 問題文(含コード&リンク):

#include <stdio.h>
int main(void)
{
char ??? = {
"1.振り込み",
"2.預け入れ",
"3.残高照会",
"4.通帳記録",
"5.終了",
???
};
char ???p;
p = menu;
while(*p){
printf("???\n",???);
}

上記の???の場所を適切に埋め、動作を確認する。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C++
[4] 期限: [2008年11月07日10:00まで]
[5] その他の制限:

よろしくお願いします。

343 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:34:56 ]
#include <stdio.h>
int main(void)
{
char *menu[] = {
"1.振り込み",
"2.預け入れ",
"3.残高照会",
"4.通帳記録",
"5.終了",
NULL,
};
char **p;
p = menu;
while(*p){
printf("%s\n", *(p++));
}
return 0;
}

344 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:37:17 ]
>>343
動作確認しました。
ありがとうございます!
助かりました。



345 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:05:48 ]
[1] 授業単元: C
[2] 問題文:
(1)自然数nの正の約数が6個あり(1及びn自身を含めて)
それらの総数の和が532である時のnの値を求めるプログラム。
(2)
nを2桁の偶数としn^2の下2桁がnと同じ時、nの値を求めるプログラム。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [11月7日8:00まで]
[5] その他の制限: 特になし

(2)については答えが76と分かっているのですが
(1)についてはさっぱりなんです…

346 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:55:20 ]
>>345 (1)
#include<stdio.h>
int main()
{
int n, c, a, s;
for (n = 1; ; n ++)
{
c = s = 0;
for (a = 1; a <= n; a ++)
{
if (n % a == 0)
{
c ++;
s += a;
}
}
if (c == 6 && s == 532)
{
printf("%d\n", n);
break;
}
}
return 0;
}

347 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:55:57 ]
>>345
すごい力まかせ、最適化の余地あり

void main(){

int count ;
int buff[6] ;

for ( int i = 1 ; i < 532 ; i++ ){
count = 0 ;
for ( int j= 1 ; j <= i ; j++ ){
if(i%j==0){
buff[count] = j ;
count++ ;
if ( count >= 6 ){
break ;
}
}
}
if ( count == 6 && buff[5]==i){
if( buff[0] + buff[1] + buff[2] + buff[3] + buff[4] + buff[5] == 532 ){
printf ( "%d\n", i ) ;
break ;
}
}
}
}

348 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 02:07:12 ]
(2)
#include <stdio.h>

int main(void)
{
int n, tmp;

for(n=10; n<100; n+=2){
if(n == n*n%100)
break;
}

printf("%d\n", n);

return 0;
}

349 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:36:24 ]
>>339
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7956.c
動作確認はあまりしてない。とりあえず動く程度。分割コンパイルは適当に。

350 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:51:50 ]
>>339
同じ学校だね。


351 名前:デフォルトの名無しさん [2008/11/07(金) 06:11:38 ]
突然すみません。getsで何も入力しなかった場合に特定の処理をしたいのですが、
下のif(a==NULL)が動作しないです。どう書けばいいか教えて下さい。
int main(){
char a[256];
gets(a);
if(a==NULL){
printf("何か入力して下さい");
}
puts(a);
}
宜しくお願いします。

352 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 06:41:13 ]
a[0]=='\0'

353 名前:351 [2008/11/07(金) 06:57:08 ]
>>352
ありがとうございました。

354 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 07:17:14 ]
[1] 授業単元: C++
[2] 問題文(含コード&リンク): 上下の画面外から敵を2つ出現させて、中央へ移動。左斜め上、右斜め下へそれぞれ移動し、矢印の方向へ一周回る。
一周回ったら再び、中央へ移動する。こんな感じの動きですwww.dotup.org/uploda/www.dotup.org18140.bmp.html
敵を表示させるところまでいったのですが、どうかお願いします。www.dotup.org/uploda/www.dotup.org18139.zip.html
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC2005又はVC2008
 [3.3] 言語: C++
[4] 期限: 2008年11月8日18:00まで
[5] その他の制限: 構造体でお願いします。説明不足な点など、何かあれば言って下さい。



355 名前:241 mailto:sage [2008/11/07(金) 08:35:49 ]
どなたか>>241を御願いできないでしょうか?

356 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:21:50 ]
>>354
クラスは使っていいの?

357 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:55:20 ]
>>356
使っても大丈夫です。

358 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:02:23 ]
>>241
問題文とか一部だけ見せられてもね・・・・

359 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:47:47 ]
自分の才能の無さに絶望した。

>>354
恥ずかしすぎるので実行ファイルのみ(DXライブラリ)
ttp://www.dotup.org/uploda/www.dotup.org18202.zip.html

360 名前:デフォルトの名無しさん [2008/11/07(金) 12:59:19 ]
[1] 授業単元: プログラミング
[2] 問題文 神経衰弱の作成
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Visual Studio
 [3.3] 言語: C
[5] その他の制限:行と列を入力し表にする、


361 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:08:15 ]
>>349
動作確認できました。
ありがとうございます<(_ _)>

362 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:09:35 ]
例えば一回出した乱数をaに入れて固定するのはどうしたらいい?
言語はc++です

363 名前:デフォルトの名無しさん [2008/11/07(金) 14:17:19 ]
[1] 授業単元: プログラミング
[2] 問題文 
# 下記のように,二つのベクトルを生成し,それらの内積を計算するプログラムを作成しなさい.ただし,ベクトルの各成分は0〜9の整数型の乱数で,ベクトルの長さは10とする.なお,乱数の生成にはrandを用いよ.

kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (8, 1, 4, 1, 7, 4, 9, 1, 2, 0)
b = (4, 0, 5, 4, 6, 0, 8, 6, 3, 6)

The value of the inner product of the two vectors = 182

kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (4, 8, 4, 6, 8, 1, 0, 3, 5, 8)
b = (8, 6, 4, 1, 6, 0, 4, 6, 1, 0)

The value of the inner product of the two vectors = 173

kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (8, 7, 3, 8, 8, 3, 8, 8, 3, 1)
b = (8, 9, 6, 3, 6, 3, 6, 3, 5, 8)

The value of the inner product of the two vectors = 321

kawasaki@orange ~/lectures/2008/C/5$
# 上と同じ計算をするプログラムを,乱数の生成にMersenne Twisterを用いて書け.ヒント:genrand_real2()に適切な値の整数をかけたものを整数型にキャストして,0〜9の整数乱数をつくる.
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[5]
お願いします・・・できれば1時間以内に・・・


364 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:24:44 ]
>>362
変数に代入すれば?



365 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:30:18 ]
>>363
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int a[10], b[10], i, sum = 0;
srand((unsigned int)time(NULL));
for (i = 0; i < 10; ++i) {
a[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX));
b[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX));
}
printf("a = (");
for (i = 0; i < 9; ++i) {
printf("%d, ", a[i]);
}
printf("%d)\n", a[i]);

printf("b = (");
for (i = 0; i < 9; ++i) {
printf("%d, ", b[i]);
sum += a[i] * b[i];
}
printf("%d)\n", b[i]);
sum += a[i] * b[i];
printf("The value of the inner product of the two vectors = %d", sum);
return 0;
}


366 名前:デフォルトの名無しさん [2008/11/07(金) 14:33:59 ]

[1] 授業単元: プログラミング
[2] 問題文 神経衰弱の作成
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Visual Studio
 [3.3] 言語: C
[5] その他の制限:行と列を入力し表にする、

できれば夕方あたりまでにおねがいします><


367 名前:デフォルトの名無しさん [2008/11/07(金) 14:39:12 ]
>>365 ありがとうございます!

368 名前:デフォルトの名無しさん [2008/11/07(金) 14:57:06 ]
>>365のはarrayを使うとどういった形になりますか?

369 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:08:25 ]
[1] 授業単元: C,C++、データ圧縮LZ78符合
[2] 問題文:以下に与えたデータ列をLZ78符合で圧縮し、画面に表示するプログラムを作成せよ。
      データ列:ABCBCBCDEBCDABCD
コンソールアプリケーションで作成すること。
      画面には最低限以下のものを出力すること。
      【1】与えたデータ列
      【2】作成した辞書の一覧
      【3】符号化したデータ列
[3] 環境
 [3.1] OS: WindousXP
 [3.2] コンパイラ名とバージョン: VisualStudio2005
 [3.3] 言語: C,C++どちらでも可
[4] 期限:2008年11月13日まで
[5] その他の制限: 標準ライブラリ可

370 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:56:14 ]
>>354
struct 座標 {
 int x, y;
};

struct 移動 {
 座標 end; // 移動先。この座標まで移動したら、次の方向(next)へ向かって移動する
 移動 *next; // 次の移動先へのポインタ
};

こんな感じで、画面中央と画面の端の点を結んで、ループごとにちょっとずつ点に移動するのはダメ?
見当違いな事言っていたらごめんね。

371 名前:241 mailto:sage [2008/11/07(金) 17:47:36 ]
>>358

すいません、241の問題が課題3でして、この前の課題1,2とそれの解答を下に。

課題1
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7957.zip
課題2
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7958.zip

課題1が1/2の確立で+-1となる記憶パターンを生成するプログラムで、
課題2がシナプスの結合の重みを決定するものです。

説明と資料の不足どうもすみませんでした…。
他にも情報、説明が足りない所があればお伝え下さい。
あと追記ですが、提出期限が11月9日→11月10日に変更になりました。

372 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:04:34 ]
>>371
これって正解?それとも自力で解いたやつ?
>weight[j][i]=pattern1[i]*pattern1[j];/* 結合の重みの計算*/
>weight[j][i]=weight[i][j];
課題2回答.txtのこの部分、おかしい気がするんだけど。

373 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:18:00 ]
>>371
課題2からしてコンパイルどころかインデントのチェックすら通らんな

例題も、定義によれば重みの対角成分は必ず+1じゃないとおかしいのに、
全部白(-1)になってる。問題に関する資料は全部晒したほうが良いと思われ


374 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:37:50 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7959.c
↑のカレンダープログラム(西暦と月を入力するとその月のカレンダーが表示されるもの)を
次のように改造せよ。
・月のカレンダーではなく一年分のカレンダーを表示させる。
・daysinyear()とdaysinmonth()でif文ではなくswitch文を使う。
というのと、
フィボナッチ数列を、指定された個数まで求めて表示するプログラムを書け。
ループにfor文を使ったもの、whileを使ったもの、doを使ったものをそれぞれ作ることで
プログラムを三つ書く。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月10日まで
[5] その他:上にあるカレンダープログラムは講師が生徒のレベルに合わせて
作成したものです。
2つになってしまいましたがどうかよろしくお願いします。



375 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:48:53 ]
>>366
一応クリアはできた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7960.c

376 名前:241 mailto:sage [2008/11/07(金) 18:51:32 ]
>>372
>>373
もうほんと色々すいません…。講義で使うPDFが重くてラウンジにupできなかったんですが、
違う所にここまでの講義内容のpdf全部上げときます。(第2回〜第5回迄)

www1.axfc.net/uploader/He/so/155985.zip
DLパスは「123」です。馬鹿学校ですいません…。


377 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:57:20 ]
>>376
上げてもらった資料まだ目を通してないけど
とりあえず対角成分だけ別に設定できるようにしてやってみた
例題と同じ値を入れてみても経過が一致しないww
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7961.txt

378 名前:377 mailto:sage [2008/11/07(金) 18:58:37 ]
例題と同じ値で試してみたい場合は最初のforループ(乱数でpattern生成するところ)を
ざっくりコメントアウトすればいい

379 名前:デフォルトの名無しさん [2008/11/07(金) 19:11:46 ]
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):

data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。
対角要素に0に近い要素があっても、正しく求められるように工夫せよ。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限: なし


お願いします!




380 名前:372 mailto:sage [2008/11/07(金) 20:23:47 ]
>>377
俺はお手上げだ。
それ、初期化忘れと、対角成分ってところに代入するのは0じゃね?
ってことでこれ。変更箇所に目印を付けてみた。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7962.txt


381 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 20:37:04 ]
>>380
対角成分はテキスト読んだかぎり+1にならない理由が見当たらないが、例題では0を入れているな。
weight は全要素に値が入るんだから初期化不要では?

あと、pattern2 の初期値だが、ランダムに「反転する」ならば
if(randv > 0.75)
 pattern2[i] = -pattern1[i];
else
 pattern2[i] = pattern1[i]
みたいな感じにすれば、この場合 25% の確率で反転する。

382 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:24:20 ]
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
円柱の半径と高さを実数で入力し,その体積を求めるプログラムを作りなさい
-変数はすべてdouble型を用いること
-円周率p=3.14159265358979として計算

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。

383 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:38:25 ]
>>382 ほんとに問題それであってる?
#include <stdio.h>
main()
{
double p = 3.14159265358979, r, h;
printf("半径: ");
scanf("%lf", &r);
printf("高さ: ");
scanf("%lf", &h);
printf("体積: %f\n", p*r*r*h);
}

384 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:46:30 ]
>>383
問題文はこれだけなので合っているのですが、どうかされましたか?



385 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:49:00 ]
公式と最低限の入出力関数さえ知ってれば何の苦労もなさそうだから
宿題とする価値がないというか何と言うか…

386 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:54:53 ]
>>385
そうなんですか。
一応、この問題はC言語のテキストの発展問題なんですがそんなに簡単だったんですね。
そんな問題が解らないって本当に自分やばいですね。
何はともあれ、宿題をやって下さって有難う御座いました。
本当に助かりました。

387 名前:デフォルトの名無しさん [2008/11/07(金) 23:06:11 ]
[1] 授業単元:Linuxプログラミング
[2] 問題文(含コード&リンク):
途中までつくって、コンパイルも出来るようになったのですが、動作が中途半端です。fork(), execvp, waitあたりが理解出来ていないからどこか
がおかしいと思うのですが、見て下さい。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7966.c
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7964.txt
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7965.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 4.1.2
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:
やろうとしていること:
実行すると、testプロンプトが表示されるので、好きなコマンドを実行すると、結果を表示する。->例えば、test> ls -l -a /tmp/temp.txt
exitを入力するまで繰り返し何度でもコマンドを実行出来る。
質問(1)なぜか最初の一回目はexecvpによるコマンド実行結果が表示されません。二回目からは正常に動作するのですが。。
質問(2)exitを入力するまでループにしているのですが、一回入力させれば終了したいのに、複数回コマンドを実行した場合は、exitも複数回入力しなければ
抜けられなくなってしまいました。
質問(3)二回目のコマンド実行時、一回目よりも短いオプションで実行するとなぜか「ls: p/temp.txt: ファイルかディレクトリが見つかりません」とエラーになります。
argv[i]に格納した文字列が途中で切れてしまっているように思われます。
質問(4)存在しないコマンドを入力するとエラーメッセージを出したいのですが、どうすればよいでしょうか。
質問(5)ソース中にシグナルキャッチャーの箇所がありますが、どのように使えばいいのかわかりません。不明確な質問ですが、この文脈で使い方がわかる
場合は教えて下さい。以上、長くなりましたが宜しくお願いします。

388 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:16:10 ]
>>386
悪いが383≠385だ。

389 名前:372 mailto:sage [2008/11/07(金) 23:18:14 ]
>>381
すまん、恥ずかしさを胸に吊ってくる

390 名前:377 mailto:sage [2008/11/07(金) 23:30:28 ]
>>376
資料に目を通した。
>>389
よくみると重み付き総和の計算で j≠i と小さくw書かれてたから w[i][i] = 0 が正解だわ
あと資料にいろいろ小出しにされたヒントを全部反映させといた。

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7967.c

>>377 は毎回全部のニューロンをもれなく更新してたたために2ステップで
ほとんど収束してたけど、ランダムに更新するニューロンを選択する部分作ったら
収束がほどよい感じになった。
NUM_OF_NEURON がニューロン数
NUM_OF_ERRORS を増やすと初期値の乱れ具合が増す。
ほどほどにしないと収束しなくなるw 結構おもしろかったわ

391 名前:377 mailto:sage [2008/11/07(金) 23:41:34 ]
何度もすまね、1か所間違いみっけた
 if (tmp[i] > 0)
  printf("■");
 else
  printf("□");
 /* neuron_state を tmp にコピーしてから使う */
 tmp[i] = neuron_state[i];
これは、printf する前に、for のすぐあとに書かないと表示が狂う
for(i = 0; i < NUM_OF_NEURON; i++) {
 /* neuron_state を tmp にコピーしてから使う */
 tmp[i] = neuron_state[i];
 if (tmp[i] > 0)
  printf("■");
 else
  printf("□");

392 名前:383 mailto:sage [2008/11/07(金) 23:56:36 ]
>>386
むかし専門学校で講師やってたんだが、scanf 教えたその日に出して
授業中に作らせた課題で、宿題にすらなってなかったんで確認してみた

393 名前:241 mailto:sage [2008/11/08(土) 00:09:19 ]
>>390

動作確認しました!ありがとうございました!
絶望してた課題だったので凄いうれしいです;;

多レスでご迷惑お掛けしてすいませんでした><

394 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:52:00 ]
>>387
初回の fork の前後で cmd->args[0] の内容が違って見えるね

cmd->args[i] の領域って、自分で malloc してないで、strtok() に任せてるでしょ

自分で malloc した領域をつかって strtok_r 使ってみたら?



395 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 02:14:04 ]
>>354
とりあえず、出題の動きをするものを作った
どことなく危険な香りのするプログラムになった
www.dotup.org/uploda/www.dotup.org18927.zip.html

出題者の意図がまったくわからないので
かなりの手抜きプログラムになっている
おそらく出題者の意図とはかけ離れたものであろう気がする
というか、何のシステムのないところにいきなりこれをやれって無理があるような
最初にめんどくさい思いをさせて「こうすると楽だよ」的な流れなのか
何か前説があってそれを踏まえた上でやるべき課題なのか・・・・

396 名前:394 mailto:sage [2008/11/08(土) 02:25:45 ]
>>387
あー、違うところかもしれん

原因はそこじゃなくて、gets() やってるところだと思う
simple_accept_input() のローカル変数 str[] に取り込んでるでしょ
strtok(str, " ") とやっているわけだから strtok によって得られるポインタは、
このローカル変数 str[] を参照する。
ローカル変数の寿命はその関数を抜けるまで。
実際 str[] はスタック領域に作られるわけだから、後に関数が実行されたときに
破壊される可能性大。
今回はそれがたまたま fork() 実行時に重なっただけで、fork() 自体によって
データロストしてたわけではなさそう(そもそも fork は全データコピーだしね)

普通、ポインタでいろんなとこから参照されるデータを、特定の関数のローカル変数にしまってはいけない。
gets したデータは、main のローカル変数なりグローバル変数なり malloc するなりして不揮発にしておかないと






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<337KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef