C/C++の宿題を片付けます 117代目at TECH
C/C++の宿題を片付けます 117代目 - 暇つぶし2ch331: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関数、アドレス演算子(&)は習いました。
お願いします。

429: ◆Mn9bS1g7Ng
08/11/08 11:21:54
>>428のプログラムの実行例

平方根を求めたい数を入力してください: 5.0 ↓
解を求めるための初期値を入力してください: 2.0 ↓
5.000000 の平方根は 2.236068 です.

平方根を求めたい数を入力してください: 123.456 ↓
解を求めるための初期値を入力してください: 10.0 ↓
123.456000 の平方根は 11.111076 です.

430:デフォルトの名無しさん
08/11/08 11:36:00
>>428
そこまで計算式や判定法が分かってるなら、すぐに解けそうなものだけど。。。

#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
static const double e = 1.0e-10;
double x0, x1, a;

printf("平方根を求めたい数を入力してください: ");
scanf("%lf", &a);
printf("解を求めるための初期値を入力してください: ");
scanf("%lf", &x0);
x1 = (x0 + a/x0)*0.5;
while (fabs(x1-x0) > e) {
x0 = x1;
x1 = (x0 + a/x0)*0.5;
}
printf("%f の平方根は %f です\n", a, x1);
return 0;
}

431: ◆Mn9bS1g7Ng
08/11/08 12:01:33
>>430
本当に有難う御座いました。
大変助かりました。

432:354 ◆zeyvxEAaZQ
08/11/08 15:07:01
>>359
>>370
>>395
ありがとうございました!

>>370さんのやり方も試してみます。

>>395さん
「こうすると楽だよ」的な流れだと思います。他にもやりたい事はあるのですが、teki.hとel.hいうファイルが何なのかよくわかりません。消しても平気でしょうか?


433:354 ◆zeyvxEAaZQ
08/11/08 15:07:43
すみません、sage忘れました。

434:414
08/11/08 16:17:14
名前付きパイプの方も自力で一応出来ました!ありがとうございました。
>>425
今週の宿題は完了しました。次回はメッセージキューと共有メモリみたいです。
次次回がソケット関連みたいでした。また困ったら投稿させて頂きます。
疲れた。。寝ます。

435:デフォルトの名無しさん
08/11/08 17:02:52
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
キーボードから自分の学生番号を半角小文字整数で、氏名を半
角小文字のローマ字で、身長(cm)を実数で、体重(kg)を実数で入力し、
学生番号と氏名・身長・体重・身長(cm)+体重(kg)を表
示するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:XP
 [3.2] VC 6.0等
 [3.3] 言語: C
[4] 期限: ([2008年mm月11日11まで
[5] その他の制限:やってまもないです
   少しやってみたんですがここで詰まっています 
    #include<stdio.h>
    void main(void)
    {
int x,y;
printf("学生番号を半角小文字整数で入力;\t");
scanf("%d",&x);
printf("10進数表示 ; DEC(x)=%d\n",x);
printf("氏名を入力する;\t");
    }

436:435
08/11/08 17:04:02
訂正
11月11日までです

437:デフォルトの名無しさん
08/11/08 17:11:44
>>435
#include<stdio.h>
int main(void)
{
int x;
char s[1000];
double h, w;
printf("学生番号を半角小文字整数で入力;\t");
scanf("%d",&x);
printf("氏名を入力する;\t");
scanf("%s", s);
printf("身長を入力する;\t");
scanf("%lf", &h);
printf("体重を入力する;\t");
scanf("%lf", &w);
printf("学生番号: %d\n", x);
printf("氏名: %s\n", s);
printf("身長: %f\n", h);
printf("体重: %f\n", w);
printf("身長 + 体重: %f\n", h + w);
return 0;
}


438:デフォルトの名無しさん
08/11/08 17:32:54
>>435
せめてBMI判定くらいはしてやれwwww

439:デフォルトの名無しさん
08/11/08 17:58:46
>>435

単位の違うものを足すの?

440:デフォルトの名無しさん
08/11/08 18:31:03
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:11/10
[5] その他の制限:おそらく実行例の関数にさえ対応していれば大丈夫だと思います

よく分からない問題だと思いますがよろしくお願いします

441:デフォルトの名無しさん
08/11/08 21:58:45
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
文字列str1の中身が半角から全角に切り替わる箇所にはその文字の前に16進数の{0x40}を
全角から半角に切り替わる箇所には16進数の{0x41}を挿入し
その結果をテキストtest1.txtに出力をするプログラムを作成しなさい。(結果の確認はバイナリエディタで行うように)
なお、文字列str1の文字コードはSJISとする。

※問題文では触れられておりませんが
 文字列の1文字目が全角の場合は最初に{0x40}を
 最後の文字が全角の場合は一番最後に{0x41}を付加しなければならないようです。


出力例:
  挿入前の文字列str1:スレタイ C/C++の宿題を片付けます117代目
  テキストに出力される文字列:{0x40}スレタイ {0x41}C/C++{0x40}の宿題を片付けます{0x41}117{0x40}代目{0x41}


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

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:11/11
[5] その他の制限:
全角文字と半角文字を区別する箇所までは出来たのですが
文字列の中に16進数を挿入する過程で詰まってしまいました。
特に制限は無く、私が作った部分の改変をするのもおkですのでよろしくお願い致します。

442:デフォルトの名無しさん
08/11/08 22:04:34
0x40は@、0x41はAのことか?
そもそも宿題なのか?

443:デフォルトの名無しさん
08/11/08 22:25:41
>>442
ソースコート上では単純に文字として挿入するのではなく16進で挿入しなければならないようです
memcpyの使い方に関する宿題です(;´Д`)

444:デフォルトの名無しさん
08/11/08 23:00:20
>>441
挿入してるのは ASCII だからべつにバイナリエディタでなくても確認できるな
URLリンク(kansai2channeler.hp.infoseek.co.jp)

あ、test1.txt に出す部分作るの忘れたからそれはご自分で。最後の printf を fprintf に置き換えるだけだね

445:デフォルトの名無しさん
08/11/08 23:12:21
>>444
ばっちりです!ありがとうございました
あとは自分で改変してみます

446:デフォルトの名無しさん
08/11/09 01:02:30
>>437
ありがとうございます。
>>439
そういう適当な課題なんです

447:デフォルトの名無しさん
08/11/09 02:20:57
440の問題微妙に難しくない?コンパイラ?

448:デフォルトの名無しさん
08/11/09 02:40:51
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:11/12
[5] その他の制限:特になし

よろしくお願いします


449:デフォルトの名無しさん
08/11/09 02:52:06
[1] 授業単元:C
[2] 問題文 
 初期設定された任意の整数配列内のデータを,大きい順に並べ換えるプログラム
をつくりなさい。ただし,並べ換える部分を関数にして,配列とデータ数を引数として
渡しなさい。例として,次の10 個の整数を格納した配列に適用してみなさい。
static int dd[10] = { 27, 89, 45, 18, 55, 64, 92, 73, 34, 88 };

出力例:
ソート後 = 92 89 88 73 64 55 45 34 27 18

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2008年11月10日 24:00
[5] その他の制限:次のようなプロトタイプ宣言をもつ関数isort を定義しなさい。
void isort(int *, int);

できましたら、C言語の基本的な関数のみでお願いします。



450:デフォルトの名無しさん
08/11/09 03:15:08
>>447
関数の名称その他の抽出って感じだろう
構造体を誤認識しないようにしつつ

451:450
08/11/09 03:16:42
ごめんたしかにかなり面倒ですね
どのくらいまでやればいいんだろ

452:デフォルトの名無しさん
08/11/09 03:25:55
>>449
void isort(int * ary, int nelem)
{
int i;

for ( i = 1; i < nelem; ++i ) {
int j;
int tmp = *(ary + i);

for ( j = i - 1; j >= 0 && *(ary + j) < tmp; --j ) {
*(ary + j + 1) = *(ary + j);
}
*(ary + j + 1) = tmp;
}
}
適当に作ってみた。

453:デフォルトの名無しさん
08/11/09 04:05:41
>>448
シンプレックス法だね。でもコードにするのめんどい・・・

454:デフォルトの名無しさん
08/11/09 04:06:41
>>440
途中までやってみた。

・ 基本的に改行を取り除くため1つの char 配列に読み込む
・ // は行単位の処理が必要なので読み込み時に処理
・ /* ~ */ は未対処
・ void, int, char, float, double のいずれかとマッチするところを探す
→ データ型を省略した関数定義は取りこぼす
・マッチしたらそれぞれの直後が ' ' か '\t' か '\n' の条件に絞る
・ '(' が来るまでに ',' か ';' か ')' か '{' か '}' が来たら関数ではない
・以上の条件に合致したら、型名と関数名を出力

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

455:デフォルトの名無しさん
08/11/09 04:16:44
>>452

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

456:454
08/11/09 05:20:37
>>440
short が抜けてたので改良を加えてみた。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
検索の順序の関係上お手本とは順番は異なるが、いちおう関数は拾えている


457:354 ◆zeyvxEAaZQ
08/11/09 05:42:14
[1] 授業単元: C++
[2] 問題文(含コード&リンク): 敵が一周回ったら再び中央へ移動して、波を描きながら画面外へ消える。これをクラスを使わないで作って欲しいです。
中央へ移動までは、>>395さんに作っていただきました。URLリンク(www.dotup.org)
最終的にこのような感じの動きです。URLリンク(www.dotup.org)
あと、敵の当たり判定もお願いします。これがサンプルです。URLリンク(www.dotup.org)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC2005またはVC2008
 [3.3] 言語: C++
[4] 期限: ([2008年11月9日22:00まで
[5] その他の制限: クラスについてどのようなものかまだ習っていなかったのに、曖昧な返事をしてしまって申し訳ございません。
プログラムに関しては、自機の表示と弾を出すのはできましたが、それ以降ができません。どうかお願いします。

458:デフォルトの名無しさん
08/11/09 05:43:08
>>457
構造体はつかってもいいですか?

459:デフォルトの名無しさん
08/11/09 06:16:06
[1] 授業単元: C++
[2] 問題文(含コード&リンク):数個のポイントを含むクラスポリゴンを定義しなさい。
(a) デストラクター・コピーコンストラクター・アサインメントオペレーターを作成し、クラスを定義しなさい。ディフォルトコンストラクターは空のポリゴンを作成すると仮定しなさい。
(b)Pointクラスがプライベートメンバー、また、(x,y)を返すコンストラクタPoint(int, int)を持つように変更しなさい。そうすることによってポリゴンクラスがコンパイルしなくなります。問題点を発見し、修正しなさい。
(一応骨組みは作ってみました。)
class Point {
  public:
    float x;
    float y;}
class Polygon {
   Point * points; //the points
   int size; //number of points
  public:
   Polygon() {...};
   Polygon(const Point * pts, int n) {...};
   Point getPoint(int n)const {
    //n番目のポイントを返す}
   void setPoint(const Point& p, int n) {
    //sets the nth point}
   int getSize()const {
    return size;}};
 [3.1] OS: linux redhat
 [3.2] コンパイラ名とバージョン: VC2005またはVC2008
 [3.3] 言語: C++
[4] 期限: ([2008年11月11日22:00まで
[5] その他の制限:ポリゴンを作成するプログラムを作る課題を出されました。
  日本の皆さまのお力をお借りしたく、投稿させて頂きます。
  上の骨組みで作成することが、条件として出されました。
  よろしくお願いいたします。

460:デフォルトの名無しさん
08/11/09 07:49:14
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
void Wa(int a,int b);
…2つの引数の和を計算し、結果を表示する(xとyの和)
int abs_Sa(int a, int b);
…2つの引数の差を計算し、その絶対値を返す(xとyの差の絶対値)
double Heikin(int a,int b, int c, int d int e);
…5つの引数の平均値を返す(num[5]の平均値)
このような演算を行う関数をそれぞれ定義し、下記のプログラムに処理を追加せよ

#include<stdio.h>
void Wa(int a,int b);
int abs_Sa(int a, int b);
double Heikin(int a,int b, int c, int d int e);

int main(void){
int k,x,y,num[5]={19,51,100,32,6};
double z;
printf("xを入力してください:")
scanf("%d",&x);
printf("yを入力してください:")
scanf("%d",&y);
/* これ以降に処理を追加する */
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual stdio 2005
 [3.3] 言語: C
[4] 期限: 11/11 18:00
[5] その他の制限:
関数習いたてです。よろしくお願いします

461:デフォルトの名無しさん
08/11/09 08:35:36
>>460
main 残り
printf("x + y = ");
Wa(x, y);
printf("\n");
k = abs_Sa(x, y);
printf("|x - y| = %d\n", k);
z = Heikin(num[0], num[1], num[2], num[3], num[4]);
printf("average of %d, %d, %d, %d, and %d = %f\n", num[0], num[1], num[2], num[3], num[4], z);
return 0;
関数
void Wa(int a, int b)
{
printf("%d", a + b);
}
int abs_Sa(int a, int b)
{
if (a >= b)
return a - b;
else
return b - a;
}
double Heikin(int a, int b, int c, int d, int e)
{
return (a + b + c + d + e) / 5.0;
}


462:デフォルトの名無しさん
08/11/09 09:35:58
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):

長くなったので↓にアップします。

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

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: VC2005またはVC2008
 [3.3] 言語: c++
[4] 期限: 11月12日
[5] その他の制限:
for文、if文、配列等まで習いました。よろしく御願いします。

463:デフォルトの名無しさん
08/11/09 10:09:10
[1] 授業単元:演習
[2] 問題文:
数値が何(バラバラ)行2列でかかれた複数のファイルがあり
それぞれのファイルを読み込み、表示させるプログラムを書きなさい。
何行かはファイルを開かないとわからないのでプログラムで行数をはかる。
[3] 環境
 [3.1] OS:LINUX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:2008年11月9日

464:460
08/11/09 10:10:41
>>461
ありがとうございます、助かりました

465:デフォルトの名無しさん
08/11/09 10:58:28
>>462
メインのループの部分だけ

int pos = 0;
for(i = 0; i < 20; i++) {
x = rnd();
if (x < 0.3) {
pos--;
printf("左に進みました。");
} else {
pos++;
printf("右に進みました。");
}
printf("現在位置 ");
if(pos > 0)
printf("右に %d ", pos);
else if(pos < 0)
printf("左に %d ", pos);
else if(pos > 0)
printf("原点");
printf("です。\n");
}


466:465
08/11/09 11:04:45
ちょっと読み違えてたので訂正
double x;
int i, pos = 2;
char *place[] = {"盗賊", "湖", "入り口", "森", "宝"};

srand((unsigned int)time(NULL));

for(i = 0; i < 20; i++) {
x = rnd();
if (x < 0.3) {
pos--;
printf("左に進みました。");
} else {
pos++;
printf("右に進みました。");
}
if(pos >= 4){
printf("宝を見つけました。");
pos = 2;
} else if (pos <= 0){
printf("盗賊に会いました。");
pos = 2;
}
printf("現在位置 %s です。\n", place[pos]);
}


467:デフォルトの名無しさん
08/11/09 12:53:26
>>466

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


468:デフォルトの名無しさん
08/11/09 13:16:10
[1] 授業単元:数値計算法1
[2] 問題文(含コード&リンク):

gyoretu[n][n]に格納された、n次の行列の逆行列を求め、出力するプログラムを作成せよ。

対角要素に0や0に近い要素があっても、正しく答えが求められるように工夫せよ。

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


お願いいたします!!

469:デフォルトの名無しさん
08/11/09 13:18:27
>>463
ファイル読んでその場で表示するだけなら行数とか考える必要ないんだけど
いったん全部読み込んだあとにまとめて表示するようにした方が良い?
#include <stdio.h>
#define MAX 256
int main(int argc, char **argv)
{
FILE *fp;
double a, b;
while(argc-- > 1){
fp = fopen(argv[argc], "r");
if(fp == NULL){
fprintf(stderr, "Cannot open %s\n", argv[argc]);
continue;
}
while(fscanf(fp, "%lf %lf", &a, &b) != EOF)
printf("%f %f\n", a, b);
fclose(fp);

}
return 0;
}


470:デフォルトの名無しさん
08/11/09 13:18:52
ライブラリ使ったほうが正確

471:デフォルトの名無しさん
08/11/09 14:43:22
>>415
返信遅れてすいません。
cinとcoutはやりました。
でも授業が難しいのでなかなか理解できないんですよね。。。


472:デフォルトの名無しさん
08/11/09 15:00:33
[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] その他の制限: 標準ライブラリ可

よろしくお願いします。


473:デフォルトの名無しさん
08/11/09 15:13:53
>>458
構造体は使っても大丈夫です。

474:デフォルトの名無しさん
08/11/09 16:17:50
[1] 授業単元:C言語

[2] 問題文(含コード&リンク):
入力した値までの素数を列挙させるプログラムを作成せよ。
例)整数を入力:5
2は素数です
3は素数です
5は素数です

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VisualStudio2005
 [3.3] 言語:C/C++/どちらでも可

[4] 期限: 2008年11月12日まで
[5] その他の制限:for文まで。できるだけ簡潔に。

よろしくお願いします。

475:デフォルトの名無しさん
08/11/09 16:32:24
>>474
なにも考えないDQNメソッドだけど
#include <stdio.h>
int main()
{
int i, j, n;
printf("整数を入力:");
scanf("%d", &n);
for(i = 2; i <= n; i++) {
for(j = 2; j < i; j++){
if (i % j == 0)
break;
}
if (j >= i)
printf("%d は素数です\n", i);
}
return 0;
}


476:学生
08/11/09 16:46:51
1から1000までの正の整数において、13の倍数の個数を出力するプログラム

よろしくお願いします

477:デフォルトの名無しさん
08/11/09 16:47:53
>>456
ありがとうございます!
面倒だったようで申しわけないです

478:デフォルトの名無しさん
08/11/09 16:48:32
>>476
#include <stdio.h>
main(){
printf("%d\n", 1000/13);
}


479:学生
08/11/09 16:48:35
訂正
マイクロソフトビジュアルベーシックC++で作成

480:デフォルトの名無しさん
08/11/09 16:50:17
>>479
>>476
#include <stdio.h>
int main(){
printf("%d\n", 1000/13);
return 0;
}


481:デフォルトの名無しさん
08/11/09 18:01:36
>>472
C++です。VS2008で確認。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

482:デフォルトの名無しさん
08/11/09 18:51:28
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] C
[4] 期限:11月10
[5] その他の制限:出来るだけ簡単に

よろしくおねがいします!!!

483:482
08/11/09 18:52:44
URL訂正します
URLリンク(kansai2channeler.hp.infoseek.co.jp)

484:デフォルトの名無しさん
08/11/09 19:11:25
>>483
#include <stdio.h>

int main(int argc, char *argv[])
{
unsigned int i, n;
char str[21];

puts("符号なし32ビット整数を入力してください。");
scanf("%u", &n);
printf("%u が格納されている先頭アドレスは 0x%p です。\n", n, &n);

puts("20文字以内の文字列を入力してください。");
scanf("%s", str);
printf("%s が格納されている先頭アドレスは 0x%p です。\n", str, str);
for (i = 0; str[i] != '\0'; i++) {
printf("%c が格納されているアドレスは 0x%p です。\n", str[i], &str[i]);
}
return 0;
}

485:457 ◆zeyvxEAaZQ
08/11/09 21:08:03
期限を11月9日23:30までにするので>>457をどうかお願いします。

486:デフォルトの名無しさん
08/11/09 22:53:54
1] 授業単元:プログラム
[2] 問題文(含コード&リンク):遺伝的プログラムで木構造に新しいノードを追加しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年11月11日まで
[5] その他の制限:
お願いします。

487:デフォルトの名無しさん
08/11/09 22:59:03
>>486
遺伝的プログラムってだけ言われても困るぞwwwwwwww
他になんか情報はないのか

488:デフォルトの名無しさん
08/11/09 23:17:23
>>487
例えばどういう情報があればいいですか?

489:デフォルトの名無しさん
08/11/09 23:22:37
>>485

cで書けと?

490:デフォルトの名無しさん
08/11/09 23:23:59
>>475
ありがとうございました。助かりました。

491:デフォルトの名無しさん
08/11/10 00:34:44
[1] 授業単元:C
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:11/11
[5] その他の制限:特になし

よろしくお願いします

492:デフォルトの名無しさん
08/11/10 00:43:01
宿題丸投げするつもりはないんだが質問させてくれないか
bccコンパイラを使っているんだ。

プログラムの実行時間測定に
#include <sys/time.h>
を参照したいんだがtime.hがどうも入ってないみたいなんだ。
標準搭載されてる関数で少数点以下まで実行時間を計れるものってないかな?

493:デフォルトの名無しさん
08/11/10 00:52:26
#include <time.h>
じゃねーの?

494:デフォルトの名無しさん
08/11/10 00:59:37
#include <sys/timeb.h>
だと思うが、Linux使いなので詳しくはしらないが
struct timeb now;
int millisec;

ftime(&now);
millisec = now.millitm; /* これがミリ秒らしい */
こんな感じだと思う。
詳しくは、ググるかヘッダファイル読め。

495:493
08/11/10 01:01:04
俺がいってたのは
#include <time.h>
のclock()ね


496:デフォルトの名無しさん
08/11/10 01:02:14
>>493
俺の探し方がアホなだけかもしれんが、#include <time.h>だと少数点以下まで測れる方法が見つからなかったんだorz
>>494
ありがとう
参考にする

497:デフォルトの名無しさん
08/11/10 01:04:32
>>495
ΣΣclock!!
見落してた マジサンキュ やってみる

498:デフォルトの名無しさん
08/11/10 01:26:15
>>489
C++でお願いします。

10日の18:00まででいいのでどうかお願いします!

499:デフォルトの名無しさん
08/11/10 01:27:58
>>498

クラスを使うなと書いてあるが?
そこだけ関数?

500:デフォルトの名無しさん
08/11/10 01:33:51
[1] 授業単元:C言語
[2] 問題文 
 初期設定された任意の文字列の順序を,逆に並べ換えるプログラムをつくりなさ
い。ただし,並べ換える部分を関数にして,関数には文字列を引数として渡しなさい。
文字列の例としては,
char str[] = "My name is Tarou Tanaka";
のように自分の名前を用いてみなさい。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2008年11月12日 24:00
[5] その他の制限:
・次のようなプロトタイプ宣言をもつ関数reverse を定義すること。
void reverse(char *);
・引数で渡された文字列自身が逆順になること。

C言語の基本関数のみでよろしくお願いします。

501:デフォルトの名無しさん
08/11/10 01:37:34
>>499
構造体はつかっていいらしいかららクラスと差し替えちゃえばいいんじゃね

502:デフォルトの名無しさん
08/11/10 01:57:40
>>499
クラスは使わず、構造体でお願いします。

503:デフォルトの名無しさん
08/11/10 02:10:50
>>502
ほんとうにいいんだな
構造体にコンストラクタとデストラクタとメンバ関数つけられるぞ?

504:デフォルトの名無しさん
08/11/10 02:11:50
>>500
void reverse(char * s)
{
size_t len = strlen(s); /* 文字列の長さ */
size_t half_len = len / 2; /* 文字列の半分の長さ */
size_t i;

for ( i = 0; i < half_len; ++i ) {
char tmp = *((s + len - 1) - i);
*((s + len - 1) - i) = *(s + i);
*(s + i) = tmp;
}
}
こんなのでいいかな。

505:デフォルトの名無しさん
08/11/10 02:21:28
[1] 授業単元:Cプログラミング
[2] 問題文:
#include <stdio.h>
#define SIZE 10
int main(void)
{
FILE *infile;
int i, data[SIZE];
infile = fopen("sample61a.txt", "r");
if(infile == NULL) {
printf("入力ファイルを開くことができません\n");
return 0;
}
for(i = 0; i < SIZE; i ++ ) {
fscanf(infile, "%d", &data[i]);
}
for(i = 0; i < SIZE; i ++ ) {
printf(" %3d", data[i]);
}
printf("\n");
return 0;
}

506:デフォルトの名無しさん
08/11/10 02:21:58
505の続きです。

このプログラムを改造し、データの値を奇数と偶数に分けそれぞれ合計値・個数・平均値を出力せよ。
その際奇数データの数、偶数データの数がそれぞれゼロの場合は平均値を求めないようにせよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Microsoft Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:11月11日

締め切りが急ですみません。
さっぱりわからなくなってしまったので、良ければよろしくお願いします。

507:デフォルトの名無しさん
08/11/10 02:39:50
>>504

ありがとう!

508:デフォルトの名無しさん
08/11/10 02:45:05
>>505
#include <stdio.h>
#define SIZE 10
int main(void)
{
FILE *infile;
int i, data[SIZE], sum[2]={0}, num[2]={0};
char *str[2] = {"奇数", "偶数"};

infile = fopen("sample61a.txt", "r");
if(infile == NULL) {
printf("入力ファイルを開くことができません\n");
return 0;
}

for(i = 0; i < SIZE; i ++ ) {
fscanf(infile, "%d", &data[i]);
sum[data[i]%2] += data[i];
num[data[i]%2]++;
}
for(i = 0; i < SIZE; i ++ ) {
printf(" %3d", data[i]);
}
printf("\n");

for(i=1; i>=0; i--){
printf("%s:合計値%d, 個数%d個", str[i], sum[i], num[i]);
if(num[i] > 0) printf(", 平均値:%f", (float)sum[i] / (float)num[i]);
printf("\n");
}
return 0;
}

509:デフォルトの名無しさん
08/11/10 02:46:41
あ、奇数と偶数の表示が逆

510:デフォルトの名無しさん
08/11/10 02:52:08
[1] 授業単元: OS
[2] 問題文(含コード&リンク):
ITIMER_REAL, ITIMER_VIRTUAL, ITIMER_PROF タイマーを用いて、プロセスのプロセッサ利用状況を測定するソフトウェアを実装する。
出力には、実行の経過時間、プロセッサ時間、ユーザ空間時間、カーネル空間時間が含むこと。
詳細
(1)すべての時間はミリ秒の分解精度を持つこと
(2)1秒毎にsignalを発生させ、経過した秒数をカウントする
(3)再帰を用いたFibbonacci数を計算するプログラムを子プロセスとした実行結果をしめすこと
[3] 環境
 [3.1] OS: Linux Kernel 2.6.x
 [3.2] コンパイラ名とバージョン: gcc4.x
 [3.3] 言語: C言語
[4] 期限: 2008年11月12日12:00
[5] その他の制限: sigactionやitimervalを用いて実装するのが今回の目的です。時間を計るものはできたのですが、ミリ秒単位の分解精度をどうやって出すのかがわかりません。よろしくお願いします。


511:デフォルトの名無しさん
08/11/10 02:54:37
510です。
稚拙ながらもソースコードを示します。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
int realSec = 0;
int profSec = 0;
int virtualSec = 0;
static void myHandler(int s) {
int errSave;
if (s == SIGALRM) realSec++;
else if (s == SIGVTALRM) virtualSec++;
else if (s == SIGPROF) profSec++;
}
static int setupInterrupt(void) {
struct sigaction act;
act.sa_handler = myHandler;
act.sa_flags = 0;
return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0;
}
static int setupitimer(void) {
struct itimerval value;
value.it_interval.tv_sec = 1; value.it_interval.tv_usec = 0;
value.it_value = value.it_interval;
return (setitimer(ITIMER_PROF,&value, NULL) == setitimer(ITIMER_VIRTUAL,&value, NULL) == setitimer(ITIMER_REAL,&value, NULL) == 0)? 0: -1 ;
}


512:デフォルトの名無しさん
08/11/10 02:56:23
510です。続きです。
int main(int argc, char** argv) {
pid_t child, retVal;
struct itimerval real, virtual, profile;
int status;
if (setupInterrupt()) {
perror("Failed to set up handler for SIGPROF"); return 1;
}
if (setupitimer() == -1) {
perror("Failed to set up the ITIMER_PROF intervaltimer");return 1;
}
if (argc < 2){
fprintf (stderr, "Usage:%s command\n", argv[0]);return 1;
}
if ((child = fork()) == -1) {
perror("Failed to fork"); return 1;
}
if (child == 0) { // child code
execvp(argv[1], &argv[1]);
perror("Child failed to execvp the command");
return 1;
} else { // parent code
while((retVal = waitpid(-1, &status, WNOHANG)) != child);
getitimer(ITIMER_REAL, &real);getitimer(ITIMER_PROF, &profile);getitimer(ITIMER_VIRTUAL, &virtual);
//ここも要修正
printf("real = %d.%ld", realSec, 1000000 - real.it_value.tv_usec);
printf(" virtual = %d.%ld", virtualSec, 1000000 - virtual.it_value.tv_usec);
printf(" profile = %d.%ld\n", profSec, 1000000 - profile.it_value.tv_usec);
}
}
よろしくお願いします。

513:デフォルトの名無しさん
08/11/10 03:19:23
[1]授業単元:C言語
[2] 問題文:次のことを行うプログラムを,for文を用いて作成しなさい。
10個の要素をもつ整数配列dataを初期化して宣言する。
配列要素の中の最大値と最小値を出力しなさい。
なお,配列要素の値として,すべて負のものがあるデータも試してみること。
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ名とバージョン:VC++ 6.0
[3.3] 言語:C言語
[4]期限:なし

初歩的な問題で申し訳ないですが、よろしくお願いします。

514:デフォルトの名無しさん
08/11/10 03:30:10
>>513
#include <stdio.h>
#define SIZE 10
int main() {
//int data[SIZE] = {83,28,35,84,43,21,8,51,2,12};
int data[SIZE] = {-83,-28,-35,-84,-43,-21,-8,-51,-2,-12};
int min, max;
int i;

min = max = data[0];
for (i = 1; i < SIZE; i++) {
if (data[i] > max) {
max = data[i];
} else if (data[i] < min) {
min = data[i];
}
}
printf("min = %d, max = %d\n", min, max);
}



515:デフォルトの名無しさん
08/11/10 05:45:39
>>503
はい、お願いします。

516:デフォルトの名無しさん
08/11/10 05:47:28
追記

>>503
クラス使わないで、構造体で作って動けば問題ないのでお願いします。

517:デフォルトの名無しさん
08/11/10 08:36:06
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境:
 [3.1] WindowsVista
 [3.2] Borland C++Compiler
 [3.3] C言語
[4] 期限: 2008年11月10日23:59まで

518:デフォルトの名無しさん
08/11/10 09:02:31
>>514
ありがとうございます!

519:デフォルトの名無しさん
08/11/10 09:12:11
>>517

#include <stdio.h>
void main(void){
int i,t;t=0;
for(i=1; i<=100; i++){if(i %3 == 0){printf("%d \n" ,i);t++;}}
printf("\n total %d\n",t);}

520:デフォルトの名無しさん
08/11/10 11:43:48
>>511
どうでもいいところかもしれんが

return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0;

これ、意図したとおりに動くの? A == B は A と B が等しかったら 1 を返すよ

一つでも 0 以外のを返したら、とやりたいんだったら && とか使うべし

521:デフォルトの名無しさん
08/11/10 13:44:10
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月12日
[5] その他の制限: 特になし

よろしくお願いします。

522:デフォルトの名無しさん
08/11/10 14:06:25
>>521 該当箇所だけ。push, pop はもうできてるんでしょ?
while(!isempty()) {
y = pop();
x = pop();
if (map[y][x] == ' ') {
map[y][x] = '*';
/*ここを適切に埋める(3) */
// up
push(x);
push(y - 1);
// down
push(x);
push(y + 1);
// left
push(x - 1);
push(y);
// right
push(x + 1);
push(y);
/*塗るたびにマップを表示する */
for(y = 0; y < 7; y++)
printf("%s\n", map[y]);
printf("\n");
}
}


523:374
08/11/10 14:22:12
すいません誰か>>374をお願いします。もう締め切りも近いのでどうか頼みます

524:デフォルトの名無しさん
08/11/10 14:28:40
>>508
ありがとうございます!助かりました!

525:デフォルトの名無しさん
08/11/10 14:37:57
>>523
1年分ってのは、入力した年の1月から12月を表示すればよいのか
入力した月から翌年の同月-1 を表示すればよいのか
入力した月を含む前後6か月を表示すればよいのか


526:デフォルトの名無しさん
08/11/10 15:02:16
>>523
カレンダーは >> 525 の返答次第
フィボナッチその1
#include <stdio.h>
int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);
for(i = 0; i < num; i++){
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
}
return 0;
}


527:デフォルトの名無しさん
08/11/10 15:02:58
>>523
フィボナッチその2
#include <stdio.h>

int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);

i = 0;
while(i < num){
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
i++;
}
return 0;
}


528:デフォルトの名無しさん
08/11/10 15:03:33
>>523
フィボナッチその3
#include <stdio.h>

int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);

i = 0;
do{
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
i++;
} while(i < num);
return 0;
}


529:初心者
08/11/10 15:59:23
[1] 授業単元:
[2] 問題文(含コード&リンク):
★下記の仕様を満たすプログラムをC言語で作成しなさい.

【仕様】日数計算プログラム

▼今日の日付と生年月日を入力すると,今日が生年月日から数えて何日目にあたるかを表示する.西暦・月・日をスペースで区切って入力する.
▼この場合,「うるう年」を考慮しなければならない.「うるう年」の条件は,
①西暦が4で割り切れる.
②ただし,西暦が100で割り切れる年は除く.
③ただし,西暦が400で割り切れる年は含める.
▼「今日は、あなたが生まれた日から数えて~日目です。」と表示する.
▼計算式は,(西暦1年1月1日から今日までの日数)-(西暦1年1月1日から生年月日までの日数)を使えばよい.
▼生年月日が今日の日付より後になっているときは,「生年月日が今日の日付より後になっています!」とエラーメッセージを表示する.
▼最低限,次の関数を使うこと.
①main関数(これは当たり前ですが)
②入力された値が計算に適切な値かをチェックする関数(4月31日などありえない日付を入れると,「年月日が正しい範囲にありません」と表示する)
③日付を計算する関数
▼日付の入力やメッセージの表示はmain関数で行うこと(ポインタに関する課題なので参照渡しを使うこと).

[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン: 分からないです。
 [3.3] 言語: C言語
[4] 期限: 今週中ぐらい
[5] その他の制限: 繰り返し文、条件判断文、ポインタを使ってお願いします。
初心者なので、初心者にも分かるようなプログラムをお願いします。

530:デフォルトの名無しさん
08/11/10 16:09:07
課題が出たんですが、まったく手に負えません、、、、、
ぜひ、教えてください!
今、XPでvisualを使ってます。

『課題』
円周率πの値を近似式

π≒4Σ(←n=0から100で)(ー1)^n×(2n+1)^(-1)×{(0.5)^(2n+1)+(3)^(ー2nー1)}
を用いて、小数第8位まで正しい値(3.14159265)を出力し、
そのπの値を用いて入力された数値εに大して、次の不等式を満たす最小の自然数Nを求めるプログラムを作れ。
|(π^2/6)-Σ(←k=1からN)k^(-2)|<ε

531:デフォルトの名無しさん
08/11/10 16:32:39
viの正式名称なんて久しぶりに見たな

532:デフォルトの名無しさん
08/11/10 16:45:16
>>530
こんなんでいい?
#include <stdio.h>
#include <math.h>

int main (void)
{
int i;
double pi, sum, eps;

sum = 0.0;
for(i=0; i<=100; i++){
pi = 4.0 * (sum += pow(-1, i) / (2*i + 1) * (pow(0.5, 2*i+1) + pow(3, -2*i-1)));
}
printf("π≒%.8f\n", pi);

printf("ε:");
scanf("%lf", &eps);

i = 1; sum = 0.0;
while(fabs(pi*pi/6 - (sum += pow(i, -2))) >= eps)
i++;
printf("N = %d\n", i);

return(0);
}

533:デフォルトの名無しさん
08/11/10 17:06:14
誰か>>457をお願いします。
期限は今日中で良いのでお願いします!

534:デフォルトの名無しさん
08/11/10 17:48:20
printf("ε:");
かわいいな

535: ◆25LbU5YSxg
08/11/10 18:09:49
[1] 授業単元:プログラミング演習
[2] 問題文:
プログラム1を改良し、データをファイルから読み込みつつ小さい順にソートして格納するプログラムを作成せよ、。
手順を以下に示す。
1.cell構造体へのポインタとして、struct cell *new、*start、*p1、*p2;の4つを準備し、それぞれNULLで初期化する。
2.データファイルからデータ数を読み込む。
3.データを1つ読み込み、cell構造体を作成してnewにセットした後、その構造体に格納。
  ・はじめてのデータであれば、ポインタstartとp1をnewにセット。
  ・2つ目のデータであれば、p2をnewにセットし、p1が示すリスト要素(構造体)の次に追加接続する。
   ただし、2つ目のデータが1つ目のデータよりも小さい場合には、p1とp2の指す構造体内のデータを入れ替える。
   もしくはリスト要素(構造体)自体の位置を入れ替えポインタをセットし直す必要があることに注意。
  ・3つ目以降のデータであればリスト先頭から順に走査を行う。この際、p1、及びp2をそれぞれ1つずつリスト内の次の要素に進めてゆく。
   。読み込まれたデータが、リスト先頭要素(構造体)の持つ値より小さい場合には、新規作成された構造体newをリスト先頭に追加し、ポインタstartをnewにセットする。
  
   。リスト途中で、p1には読み込まれたデータより小さい値、p2には読み込まれたデータより大きい値となる場所が見つかれば、この間に新規作成された構造体newを挿入する。
  
   。リスト最後尾まで読み込まれたデータより大きい値が見つからなければ、新規作成された構造体newを最後尾に追加する。
4.3をデータ入力数だけ繰り返す。
5.全てのデータを読み込み終えたら、リスト先頭から順にデータを出力する。

num-data.txt
5
23
43
67
14
9



536: ◆25LbU5YSxg
08/11/10 18:15:43
プログラム1
#include<stdio.h>
struct cell{
int data;
struct cell *next; };
int main(void){
int num;
struct cell *new, *start, *ptr;
new = NULL;
start = NULL;
ptr = NULL;
while(1){
scanf("%d",&num);
if(num == -1){ break; }
new= (struct cell *)malloc(sizeof(start));
if(new == NULL){ fprintf(stderr,"Error!:malloc short(struct cell).\n"); }
new->data = num;
new->next = NULL;
if(ptr == NULL){
start = new;
ptr = new;
}else{
ptr->next=new;
ptr = new; } }
ptr = start;
while(ptr != NULL){
printf("%d\n",ptr->data);
ptr=ptr->next; }
return 0;}
[3] 環境 [3.1] OS: Linux[3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C
[4] 期限:2008年11月21日17:00まで


537:デフォルトの名無しさん
08/11/10 18:18:32
>>529
URLリンク(kansai2channeler.hp.infoseek.co.jp)
参照渡しをする合理的理由がみあたらないので抜きで作った。
どっか適当に変えてくれ

538:374
08/11/10 19:36:44
>>525>>526
カレンダーは入力した年の1月から12月を表示するものでよかったです。

>>526-528
助かります。本当にありがとうございます

539:525
08/11/10 20:03:17
>>538
URLリンク(kansai2channeler.hp.infoseek.co.jp)

540:374
08/11/10 20:27:03
>>539
もうなんとお礼を言えばよいのかわかりません。本当にありがとうございました。

541:デフォルトの名無しさん
08/11/10 21:12:16
>>535
#include<stdio.h>
#include<stdlib.h>
struct cell {
int data;
struct cell *next;
};
int main(void){
int num;
struct cell *new, *start, *p1, *p2;
new = start = p1 = p2 = NULL;
while (1) {
scanf("%d", &num);
if (num == -1) break;
new = (struct cell *) malloc(sizeof(start));
if (new == NULL) { return 1; }
new->data = num;
new->next = NULL;
for(p1=start,p2=NULL; (p1) && new->data > p1->data; p2=p1, p1=p1->next);
if(p2){
p2->next = new;
new->next = p1;
}else{
new->next = start;
start = new;
}
}
for (p1=start; (p1); p1=p1->next) { printf("%d\n", p1->data); }
return 0;
}

542:デフォルトの名無しさん
08/11/10 22:01:28
[1] 授業単元:プログラミングC演習
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Unix
 [3.2] コンパイラ名とバージョン: gcc(versionは不明
 [3.3] 言語: C
[4] 期限: 2008年11月13日(木曜日)12:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
・ポインタをメインに使用してください

よろしくお願いします

543:デフォルトの名無しさん
08/11/10 23:11:51
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月12日
[5] その他の制限:

よろしくお願いいたします。

544:デフォルトの名無しさん
08/11/10 23:14:37
>>542
malloc は ok なの?
最大長とか単語数は別プログラムで調べるんだったらいいけど、
一度にやるんだったら必ず必要だよ

545:デフォルトの名無しさん
08/11/10 23:22:34
>>543
printf("学籍番号:%d 氏名:%s\n",
p->id, p->name);
○○○   //pに次の構造体のポインタを代入
   ↑↑↑
ここを p = p->next とやるだけでとりあえず動くものはできるけど・・・

List3 は点数を取り込んでないよね。点数を取り込むようにしたいの?
読み込むデータのサンプルはないの?

546:デフォルトの名無しさん
08/11/10 23:25:53
>>542
ツッコミどころが多すぎるんだが・・・

とりあえず
- char *dict[999], *input[50]
+ char dict[999][100], input[50][100]
として、適当に文字列を格納する領域を確保しておくこと。

勘違いだと思うけど
- for(i = 0; scanf("%s",input[i]) != '\n'; i++);
+ for(i = 0; scanf("%s",input[i]) == 1; i++);

添字が逆
- judge = compare( dict[j], input[k]);
+ judge = compare( dict[k], input[j]);

それから、そもそも input[j] に入っているのは標準入力から得た一行だから、単語ごとに分割する処理が必要

547:デフォルトの名無しさん
08/11/10 23:36:49
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
10 個の要素をもつ整数配列data を初期化して宣言する。
配列の隣り合った添え字のデータ同士の差(data[i] – data[i-1])を調べる。
その値が,最も大きなものを探し,データの差がい
くつなのか,添え字の何番と何番との間の差なのか出力しなさい。
最大のものが複数あったときには,添え字の最も大きなものを出力すること。
例えば,data[10]={-6,4,7,-3,-1,9,5,-5,4,6}
で初期化したときには,4 と5 の間の10 が最大となる。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++ 6.0
 [3.3] 言語:C言語
[4] 期限:11/14
[5] その他の制限:特になし

よろしくお願い致します。

548:デフォルトの名無しさん
08/11/10 23:45:02
>>547
6,7番目の間の10が最大値になる?

549:デフォルトの名無しさん
08/11/10 23:46:40
>>547
素直に書いてみた
差の絶対値じゃなくて差の比較だけでいいんだよね?
#include<stdio.h>
#define N 10
int main(){
    int data[N]={-6,4,7,-3,-1,9,5,-5,4,6};
    int*max_diff = data;
    int*it;
    for(it=data+1;it!=data+N-1;++it)
        if(1[max_diff]-0[max_diff] <= 1[it]-0[it])
            max_diff = it;
    printf("%dと%dの間の差%dが最大\n",
        max_diff-data,max_diff-data+1,1[max_diff]-0[max_diff]);
    return 0;
}

550:デフォルトの名無しさん
08/11/11 00:50:44
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
一次元配列を用いて5人分の得点を100点満点で入力し、平均値を画面およびファイルに書き出すプログラムを作成しなさい。
書き出し用ファイル名はave.txtとする。
[3] 環境:
 [3.1] Windows Vista
 [3.2] Borland C++
 [3.3] C言語
[4] 期限: 11月11日12:00

昼すぎ提出なので時間があまりないですが、どなたかお願いします。

551: ◆8w4FYxc7TQ
08/11/11 00:52:24
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
三つの数字a,b,cを入力したとき、大きい順に出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++ 9.0
 [3.3] 言語:C++
[4] 期限:11/12
[5] その他の制限:
この問題で使えそうなものは、if、もしくはswitchしか習っていないので、それでお願いします。

自分でif文を使って組み立てると、どうしても思い通りに並べてくれません…
どうかよろしくお願いします。

552:デフォルトの名無しさん
08/11/11 01:11:20
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (Windows vista)
 [3.2] コンパイラ VisualStudio2005
 [3.3] 言語: C言語
[4] 期限: 2008年11月13日15:00まで
[5] その他の制限: (C言語検定2級程度の途中まで習ってます)

すいません、お願いします


553:デフォルトの名無しさん
08/11/11 01:17:33
>>491お願いできませんか?

554:デフォルトの名無しさん
08/11/11 01:25:42
>>549
はい、差の比較のみです。
言葉が足りなくてすみません。
ありがとうございました!

555:521
08/11/11 01:34:59
>>522
ありがとうございます。

誰か、もう一つの課題のほうもお願いいたします。

556:デフォルトの名無しさん
08/11/11 01:46:23
>>550
#include <stdio.h>

int main(void)
{
int i, score, sum=0;
FILE *fp;

for(i=1; i<=5; i++){
printf("%d人目:", i);
scanf("%d", &score);
sum += score;
}
printf("平均値:%f\n", (double)sum / 5.0);

if((fp = fopen("ave.txt", "w")) == NULL){
printf("ファイルが開けません\n");
return 1;
}
fprintf(fp, "平均値:%f\n", (double)sum / 5.0);
fclose(fp);

return 0;
}

557:デフォルトの名無しさん
08/11/11 01:48:54
ああ、配列使うのか
#include <stdio.h>

int main(void)
{
int i, score[5], sum=0;
FILE *fp;

for(i=0; i<5; i++){
printf("%d人目:", i+1);
scanf("%d", &score[i]);
sum += score[i];
}
printf("平均値:%f\n", (double)sum / 5.0);

if((fp = fopen("ave.txt", "w")) == NULL){
printf("ファイルが開けません\n");
return 1;
}
fprintf(fp, "平均値:%f\n", (double)sum / 5.0);
fclose(fp);

return 0;
}


558:デフォルトの名無しさん
08/11/11 01:57:47
>>551
if(a < b){
tmp = a;
a = b;
b = tmp;
}
if(a < c){
tmp = a;
a = c;
c = tmp;
}
if(b < c){
tmp = b;
b = c;
c = tmp;
}

559:デフォルトの名無しさん
08/11/11 02:18:50
>>481
お礼おくれて申し訳ありません。
助かりました。ありがとうございます。

560:デフォルトの名無しさん
08/11/11 02:33:03
>>556-557
ありがとうございます助かりました!
一次元配列使うんです、まぎらわしくてすいません。
二度もありがとうございました。

561:デフォルトの名無しさん
08/11/11 02:39:30
>>552
2番はちょっと余計なこともしてるけど
URLリンク(kansai2channeler.hp.infoseek.co.jp)

562:デフォルトの名無しさん
08/11/11 03:37:42
>>561
rewind(stdin)なんて標準以外の使い方すんなカス

563:デフォルトの名無しさん
08/11/11 03:49:35
[1] 授業単元:
[2] 問題文
0~9の数字のみからなる文字列を引数として受け取り、
同じ数字並びの整数を返す関数ascii2int()を作り、動作を
確認せよ。ただし、非負の整数のみ考える。
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: 11月15日

564:デフォルトの名無しさん
08/11/11 03:56:49
[1] 授業単元:スタック
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限:2008/11/12
[5] その他の制限:なし

すいませんが、よろしくお願いします!




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