C/C++の宿題を片付け ..
[2ch|▼Menu]
301:デフォルトの名無しさん
08/11/06 01:49:08
>>290
URLリンク(kansai2channeler.hp.infoseek.co.jp)

302:デフォルトの名無しさん
08/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
08/11/06 01:51:23
問2の3行目は#include <string.h>だorz

304:294
08/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:デフォルトの名無しさん
08/11/06 02:19:51
y==cos(x)
幅を持たせろ、なんで一致するとおもったんだ?


306:294
08/11/06 02:22:03
幅を持たせるって、どういうことですか?

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

308:デフォルトの名無しさん
08/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
08/11/06 02:28:13
でも刻み幅を細かくしすぎたら、画面に収まりきらないと思うのですが・・・
そういう場合はどうすればよいでしょうか。

310:デフォルトの名無しさん
08/11/06 02:32:01
>>301
おお!
あざーっす!!

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

312:301
08/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:デフォルトの名無しさん
08/11/06 02:39:31
名前消すの忘れた(´・ω・`)

314:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/06 03:03:44
>>314
それ以外は1〜100までランダム
10は含むのか?

316:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/06 04:12:38
>>316
probを100で割るか左辺を100倍しないと

318:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/06 10:02:27
>>318
strltolは使っちゃだめな課題っぽいけどそうなんだよね?

320:デフォルトの名無しさん
08/11/06 10:21:18
>>318
そうですね。
strltolは使わないでお願いします。

321:デフォルトの名無しさん
08/11/06 10:22:38
>>319
そうですね。
strltolは使わないでお願いします。

322:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/06 11:47:27
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:c
[4] 期限:11/10
[5] その他の制限:とくになし

よろしくおねがいします

324:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/06 12:11:06
for(i = 0; i < n; i++)

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

326:738
08/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:デフォルトの名無しさん
08/11/06 13:23:19
>>326
マルチバイト文字の処理を要求しているのか

328:324
08/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:デフォルトの名無しさん
08/11/06 13:33:00
>>252

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



330:324
08/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
08/11/06 16:34:15
>>123をお願いできないでしょうか?

332:デフォルトの名無しさん
08/11/06 18:49:14
>>324
なんども申し訳ありません
ありがとうございます!

333:デフォルトの名無しさん
08/11/06 18:58:02
>>322
本当に有難う御座いました。
大変助かりました。

334:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/06 20:08:41
入出力関数は?

337:デフォルトの名無しさん
08/11/06 21:02:39
題意がいまいち分からないので継承元の文字列を継ぎ足していく感じに
URLリンク(kansai2channeler.hp.infoseek.co.jp)
クラス名がinabaになっちゃった.

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

よろしくお願いします。

340:334
08/11/06 21:31:54
>>338
ありがとうございます

341:デフォルトの名無しさん
08/11/06 23:13:24
>>316, 317
ありがとうございます。

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


342:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/07 00:37:17
>>343
動作確認しました。
ありがとうございます!
助かりました。

345:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/07 04:36:24
>>339
URLリンク(kansai2channeler.hp.infoseek.co.jp)
動作確認はあまりしてない。とりあえず動く程度。分割コンパイルは適当に。

350:デフォルトの名無しさん
08/11/07 04:51:50
>>339
同じ学校だね。


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

352:デフォルトの名無しさん
08/11/07 06:41:13
a[0]=='\0'

353:351
08/11/07 06:57:08
>>352
ありがとうございました。

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

355:241
08/11/07 08:35:49
どなたか>>241を御願いできないでしょうか?

356:デフォルトの名無しさん
08/11/07 10:21:50
>>354
クラスは使っていいの?

357:デフォルトの名無しさん
08/11/07 10:55:20
>>356
使っても大丈夫です。

358:デフォルトの名無しさん
08/11/07 12:02:23
>>241
問題文とか一部だけ見せられてもね・・・・

359:デフォルトの名無しさん
08/11/07 12:47:47
自分の才能の無さに絶望した。

>>354
恥ずかしすぎるので実行ファイルのみ(DXライブラリ)
URLリンク(www.dotup.org)

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


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

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

363:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/07 14:24:44
>>362
変数に代入すれば?

365:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/07 14:33:59

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

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


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

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

369:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/07 16:56:14
>>354
struct 座標 {
 int x, y;
};

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

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

371:241
08/11/07 17:47:36
>>358

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

課題1
URLリンク(kansai2channeler.hp.infoseek.co.jp)
課題2
URLリンク(kansai2channeler.hp.infoseek.co.jp)

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

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

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

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

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


374:デフォルトの名無しさん
08/11/07 18:37:50
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
↑のカレンダープログラム(西暦と月を入力するとその月のカレンダーが表示されるもの)を
次のように改造せよ。
・月のカレンダーではなく一年分のカレンダーを表示させる。
・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:デフォルトの名無しさん
08/11/07 18:48:53
>>366
一応クリアはできた
URLリンク(kansai2channeler.hp.infoseek.co.jp)

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

URLリンク(www1.axfc.net)
DLパスは「123」です。馬鹿学校ですいません…。


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

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

379:デフォルトの名無しさん
08/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
08/11/07 20:23:47
>>377
俺はお手上げだ。
それ、初期化忘れと、対角成分ってところに代入するのは0じゃね?
ってことでこれ。変更箇所に目印を付けてみた。
URLリンク(kansai2channeler.hp.infoseek.co.jp)


381:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/07 22:46:30
>>383
問題文はこれだけなので合っているのですが、どうかされましたか?

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

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

387:デフォルトの名無しさん
08/11/07 23:06:11
[1] 授業単元:Linuxプログラミング
[2] 問題文(含コード&リンク):
途中までつくって、コンパイルも出来るようになったのですが、動作が中途半端です。fork(), execvp, waitあたりが理解出来ていないからどこか
がおかしいと思うのですが、見て下さい。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[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:デフォルトの名無しさん
08/11/07 23:16:10
>>386
悪いが383≠385だ。

389:372
08/11/07 23:18:14
>>381
すまん、恥ずかしさを胸に吊ってくる

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

URLリンク(kansai2channeler.hp.infoseek.co.jp)

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

391:377
08/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
08/11/07 23:56:36
>>386
むかし専門学校で講師やってたんだが、scanf 教えたその日に出して
授業中に作らせた課題で、宿題にすらなってなかったんで確認してみた

393:241
08/11/08 00:09:19
>>390

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

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

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

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

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

395:デフォルトの名無しさん
08/11/08 02:14:04
>>354
とりあえず、出題の動きをするものを作った
どことなく危険な香りのするプログラムになった
URLリンク(www.dotup.org)

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

396:394
08/11/08 02:25:45
>>387
あー、違うところかもしれん

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

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

397:394
08/11/08 02:41:38
>>387
てなわけで、simple_accept_input() の char str[256] をグローバルにしただけで動くようになった。
(1) str[] をグローバルにすれば解決
(2) 同上
(3) 同上
(4) execvp() の直後に exit(-1); とかやって子プロセスを終了させないと
  fork_cmd() から返って gets(str) はじめてループになるぞ
(5) シグナルで何やりたいかわからんが、signal システムコールでこの関数と
 シグナル関連付ければ、シグナル発生したときにこの関数に飛んでくる

398:387
08/11/08 03:11:24
>>397
ありがとうございました。char str[256]とchar *strpをmain関数の前で宣言するようにしました。
初回からきちんと動作するようになりました。それから、子プロセス側ではexecvp後にexit(-1)を
入れるようにしました。(1)、(2)が解決しました。
しかし、これで(3)と(4)も直るはずでしょうか?私の環境ではまだ直りません。。具体的な症状は以下の通りです。
(3)引数の数が前回より減った場合におかしくなる
(一回目)test> ls -l -a -s /tmp/temp.txt ---OK
(二回目)test> ls -l -a /tmp/temp.txt ---NG
ls: p/temp.txt: ファイルかディレクトリが存在しません
※ちなみに引数の数が前回より増える場合は問題ないです。
(一回目)test> ls -l -a /tmp/temp.txt ---OK
(二回目)test> ls -l -a -s /tmp/temp.txt ---OK
まだどこか修正する箇所がありますでしょうか?

(4)存在しないコマンド実行時、コンソールから実行したのと同じようにエラーを表示することは出来ないでしょうか?
例)test> jfodajfoeifji -l -a -l /tmp/temp.txt
-bash: jfodajfoeifji: コマンドが見つかりません

(5)そうですよね、これだけじゃ何がしたいか不明ですよね。。こちらは、無視して頂いて結構です。

399:デフォルトの名無しさん
08/11/08 03:36:41
>>398
(3) 原因は、cmd->args[i] の最後の要素に NULL が入っていないこと 。
simple_accept_cmd() 内で
if(strp != NULL){
 cmd_a->args[i] = strp;
 cmd_a->num_args++;
}
とやって cmd_a->args[i] には NULL が入らないようになってるけど、
cmd_a->args[i] = strp;
if(strp != NULL){
 cmd_a->num_args++;
}
と順序変えてやればおk
(5) コマンドの status を見てやればエラー処理できるでしょ
エラーの詳細知りたかったら、子プロセスでないとわからないから
execvp(cmd->args[0], cmd->args);
printf("Command error:%s\n", strerror(errno));
とでもすれば、strerror で得られる原因が表示される。ファイルが見つからない場合だけ
対処したいんだったら、execvp 直後の errno の値で場合分けを行う。

400:デフォルトの名無しさん
08/11/08 03:45:19
>>395
業務系じゃありえない魔術過ぎてワロタ
これがゲームプログラムって奴なのか
いくらなんでもお行儀が悪すぎだろう

401:387
08/11/08 03:52:59
>>399
解決しました!ありがとうございました。

402:デフォルトの名無しさん
08/11/08 04:09:43
[1] 授業単元:ポインタ
[2] 問題文(含コード&リンク):
検索対象文字列と検索文字列を入力して、発見位置と個数を出力する。
※検索対象文字列は50文字を超えないものとする
※標準ライブラリのstrstr関数を利用すること
※実行例のような出力が得られるようにすること
<実行例>
検索対象文字列→AAAAAAAAAAA
検索文字列→AAA
検索結果
AAAAAAAAAAA
*********
9個発見しました
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Borland C++ Compiler 5.5
 [3.3] C
[4] 期限:明日
[5] その他の制限:なし

ポインタ難しいです・・・この時間までやってましたができませんでした。
どなたかよろしくおねがいします!!

403:デフォルトの名無しさん
08/11/08 04:13:21
質問なのですが、ここでは問題文が英語の宿題もやって頂けますか?


404:デフォルトの名無しさん
08/11/08 04:23:06
>>403
何度かそういうのあったよ。

405:デフォルトの名無しさん
08/11/08 04:29:47
>>402
#include <stdio.h>
#include <string.h>
int main()
{
 char str[100], needle[50], *p;
 int i = 0;
 printf("検索対象文字列を入力:");
 scanf("%s", str);
 printf("検索文字列を入力:");
 scanf("%s", needle);
 printf("検索対象文字列→%s\n", str);
 printf("検索文字列→%s\n", needle);
 printf("検索結果\n%s\n", str);
 p = str;
 while(strstr(p, needle) != NULL){
  if(p == strstr(p, needle)){
   i++;
   printf("*");
  } else
   printf(" ");
  p++;
 }
 printf("\n%d個発見しました\n", i);
 return 0;
}

406:デフォルトの名無しさん
08/11/08 04:30:45
>>403
そうなんですか。それでは英語の問題文のまま載せても大丈夫ですか?
それとも和訳したほうが良いですか?
あまり自分の英語力に自信ないんで変な和訳になってしまったらと思ってるのですが。

407:デフォルトの名無しさん
08/11/08 04:42:37
構わん、載せろ。
多分俺はできないが。

408:デフォルトの名無しさん
08/11/08 05:24:42
>>407
ありがとうございます。それでは載せさせて頂きます。

[1] 授業単元:C++
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)   
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: Visualstudio 2005
 [3.3] 言語:C++
[4] 期限:2008年11月10日
[5]

xtxの中の図は自分が作って物です。図を載せようとしたのですが載せれなかったので。
わかりにくくてすいません。
英語の問題文ですがよろしくお願いします。


409:デフォルトの名無しさん
08/11/08 05:39:34
>>408
単なる C のプログラムになっちまったが
URLリンク(kansai2channeler.hp.infoseek.co.jp)

410:409
08/11/08 05:41:20
ぐは
偶数奇数判定逆だった
if(*in_val % 2 == 0)
 ↓
if(*in_val % 2 != 0)


411:デフォルトの名無しさん
08/11/08 05:57:20
>>408
本当に助かりました。ありがとうございました。

412:デフォルトの名無しさん
08/11/08 06:00:05
うまいこと図を書くなあ。
ただのCだから今までの授業で習ったものと毛色が随分と異なる場合はばれちゃうね。

413:デフォルトの名無しさん
08/11/08 07:18:54
>>412
図が文字化けしてましたね。すいません。
やはりCとC++とではだいぶ異なるんですか?
最近授業でプログラミング始めたばかりなんでわからないことだらけで。

414:デフォルトの名無しさん
08/11/08 07:41:14
すみません。ポインタが苦手なC初心者です。教えて下さい。パイプ相当の機能を
つくろうとしているのですが、まずは前段として以下のようなものをつくりたいです。
例えば「./a.out "cat -n test.c" "grep a"」
と引数を与えてプログラムを実行すると、
str1[0]=cat, str1[1]=-n, str1[2]=test.c, str1[3]=NULL,
str2[0]=grep, str2[1]=a, str2[2]=NULL,
のように格納させたいです。つまり、argv[1]の内容とargv[2]の内容をそれぞれstrtokで空白で
区切って格納させていき、最後にNULLを入れる。思うように出来ません。宜しくお願いします。

415:デフォルトの名無しさん
08/11/08 07:54:07
>>413
図はエンコード指定すればだいじょうぶ。

今までの授業で教えてもらったソースコードと雰囲気が似てるならいいよ。
授業でcinとかcoutとか使わなかった?

416:デフォルトの名無しさん
08/11/08 07:55:18
>>414
pipe や popen 使わずにどうやってパイプ相当の機能を作るのかわからないけど
URLリンク(kansai2channeler.hp.infoseek.co.jp)

417:デフォルトの名無しさん
08/11/08 08:11:34
シェル使えば標準入力に入ってくるからいいんじゃないの

418:414
08/11/08 08:11:58
>>416
有り難うございます。popenはわからないのですがpipeを使ってやってみようと思います。
ひょっとして全然とんちんかんなことやっているのかも知れませんがもう少しやってみて
駄目だったらまたご質問させて頂きます。

419:デフォルトの名無しさん
08/11/08 08:12:49
ってパイプ自体を作ろうとしてるんじゃないよね。
foo | ./a.out
ってやりたいだけだよね

420:デフォルトの名無しさん
08/11/08 08:17:00
作ってみた。でおじゃる、とは言わない(というと出てくるかしら)

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
char *str1[10];
char *str2[10];
char **p;

p = str1;
*(p++) = strtok(argv[1], " ");
while ((*(p++) = strtok(NULL, " ")) != NULL);

for (p=str1; *p!=NULL; p++) {
printf("%s\n", *p);
}

return 0;
}

インデント確認用アンカー >>420

421:414
08/11/08 08:19:53
>>417>>419
パイプ自体を作ろうとしています。シェルだとcat -n test.c | more
と打つところを、./a.out "cat -n test.c" "more"と打たせることで、
forkした親子プロセスでファイルディスクリプタなんちゃらというのを
使って(すみません勉強したてです)処理を渡すようなCプログラムを作ろうとしています。
自分の限界は恐らく1時間前後で見えてくると思いますのでしばしお待ち下さい。

422:デフォルトの名無しさん
08/11/08 08:22:39
アラヤダ。
そっか。がんばってねー。

またなんかあると聞くといい、、、けど宿題スレはちょと違うかもだ

423:414
08/11/08 08:38:11
出来ました!思ったより随分あっけなく。。というか、ウェブでみっけたソースがほとんど
そのまま流用出来たので。皆様、有り難うございました。
>>422
すみません。宿題は宿題なのですが、初心者なのに毎週難易度がぐんと上がるので、ある程度は
自分でやってみないと次から全くわからなくなってしまうので。。わからないところだけ小出しに
質問させて頂きました。スレに反していたら申し訳ないです。

あ、でも匿名パイプの次の宿題は名前付きパイプなのですが、こちらはちょっと読んだところ手も足も
出なそうなので、丸投げさせて頂くと思います。またちょっとしたら投稿します。ぐだぐだすみません。

424:デフォルトの名無しさん
08/11/08 08:49:57
名前付きパイプはファイルの読み書きと変わらないからむしろ簡単かも

425:デフォルトの名無しさん
08/11/08 08:51:24
>>423の、「でも匿名パイプの次の宿題は名前付きパイプなのです」
から察するに、pipeを使って2つのプロセスを繋げろという課題、
次の課題はsocketを使ってAF_UNIXのパイプを作って〃とみた。

426:デフォルトの名無しさん
08/11/08 10:45:59
vectorで自分で作ったクラスをタイプとして持たせるにはどうすればいいんですか?
たとえばABCとDEFという二つのクラスがあるとします。
DEFというクラスがABCから作られたオブジェクトを無制限に持つようにしたいんです。
この際にDEFのメンバやコンストラクターはどんな感じに作ればいいのでしょうか?

427:デフォルトの名無しさん
08/11/08 11:02:34
class DEF {
std::vector<ABC> abc;
};

メンバとして持たせたいなら、これだけじゃないの?

428: ◆Mn9bS1g7Ng
08/11/08 11:15:46
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
ニュートン法を利用して入力データの平方根を求めるプログラムを作りなさい.
-解を求めたい実数aを入力
-解を求めるための初期値x0を入力
・なんでもよいが普通はaの平方根に近い値を入力
-ニュートン法を用いた計算
・x1=(x0+a/x0)*0.5を計算
・x1-x0の絶対値がe以下ならばx1が求める平方根
- eは収束判定に用いる値でここでは1.0E-10を使用する
-差が-eからeの範囲に入れば繰り返し終了
-入らなければx1をx0に代入して再度繰り返してx1の計算

[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関数、アドレス演算子(&)は習いました。
お願いします。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4994日前に更新/337 KB
担当:undef