C/C++の宿題片付けま ..
[2ch|▼Menu]
616:デフォルトの名無しさん
09/07/04 21:34:14
>>615
これでいいのかな

#include<stdio.h>
#include<string.h>
#define SIZE 100



int main(){

    int i;
    student_type students[SIZE];
    for( i = 0; i < SIZE; ++i ){
        read_student( &students[i] );
    }
}


617:デフォルトの名無しさん
09/07/04 22:26:52
>>613
高校生でも分かる簡単なプログラムになりませんかね?
図々しくてごめんなさい…
ぜひお願いします。

618:613
09/07/04 22:37:57
>>617
いや、そう言われても…
この板の住人なら高校生でも>>613は読めると思うが

一般的な高校生レベルってどんなのよ
まあ、どの行がわからんのか言ってみれ

619:デフォルトの名無しさん
09/07/04 22:52:23
ホント無知で申し訳ないっす。。

printf("%s : %d --> %d\n", filename, N, min);

free(array);
fclose(fp);
}

int check_okikata(int *array, int size, int index, int color)
{

らへんがよく分かりません
どういう意味でしょう?


620:デフォルトの名無しさん
09/07/04 23:30:29
>>614
そうです。
項目が削除されたリストと、項目が追加されたリストを出力します。

621:デフォルトの名無しさん
09/07/04 23:35:28
>>619
つまり動的な配列の確保(mallocとfree)がわからないんだな
じゃあ固定配列で書き換えるから

622:デフォルトの名無しさん
09/07/04 23:56:20
>>619
malloc()とfree()を使わないようにした
URLリンク(kansai2channeler.hp.infoseek.co.jp)

623:デフォルトの名無しさん
09/07/05 00:18:10
>>620
えっ?2つのリストが出力されるの!?
追加や削除をして変更された「現在のデータベースのデータ」のリスト1つじゃないの?

624:デフォルトの名無しさん
09/07/05 01:35:36
[1]数値情報解析
[2]ガウス−ザイデル法によりn元1次方程式を解くプログラムを作りなさい。
[3]
[3.1]Windows
[3.2]Visual Studio 2008
[3.3]C
[4]2009年7月15日
[5]ほぼ素人なので、少しでも優しい表現にしていただけるようよろしくお願い致します。
 あと、パワーポイントでこのプログラムのフローチャートを書いていただければありがたいです。

625:デフォルトの名無しさん
09/07/05 02:42:19
>>624 >>162 問題 >>174 >>177 >>183 解答

626:デフォルトの名無しさん
09/07/05 02:57:38
ガウスザイデル法って反復法だからガウス法と違うだろ

627:デフォルトの名無しさん
09/07/05 03:19:53
C++なんですが、
文字変数aの中身が'a'ならば『aが格納されています』と表示させ、'a'でないならば、
『'a'でない文字が格納されています』と表示させるプログラムを作成せよ
誰かお願いします

#include<iostream>
using namespace std;
int main(){


return 0;
}


628:デフォルトの名無しさん
09/07/05 03:21:02
>>627ですが、間違えました。
文字変数aの中身→文字変数mの中身
でした

629:デフォルトの名無しさん
09/07/05 03:22:32
ファイルから読み込みするの?
それともキーボードの入力を待って入力された文字を判断するの?

630:デフォルトの名無しさん
09/07/05 03:26:02
>>627
文字変数mの中身が'a'ならば『aが格納されています』と表示させ、'a'でないならば、
『'a'でない文字が格納されています』と表示させるプログラムを作成せよ
としか書かれてないんですよね。
ただ書き始めと終わりは下の定型文みたいのを使うんですが
#include<iostream>
using namespace std;
int main(){


return 0;
}

631:デフォルトの名無しさん
09/07/05 03:26:46

>>630ですが間違えました

>>627じゃなくて>>629でした

632:デフォルトの名無しさん
09/07/05 03:55:39
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
下に示すように,非負の整数を次々と読み込んでいき,各値の二乗値の和を表示するプログ
ラムを作成せよ.なお,整数の読み込みは,負の整数を読み込んだ段階で終了するものとし,
その数の二乗値の和は加算しないものとする.

整数を入力してください
整数1 : 3
整数2 : 5
整数3 : -1
二乗値の合計は34 です.
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2008
 [3.3] 言語: C
[4] 期限: 09年07月07日
[5] その他の制限:なし。

633:デフォルトの名無しさん
09/07/05 04:00:22
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
下に示すように,行数と列数を読み込み,1 行目には1234567890…を列数の個数だけ,2 行
目には2345678901…を列数の個数だけ,…と表示するプログラムを作成せよ.
ファイル提出: 実行ファイル
何行ですか: 7
何列ですか: 12
123456789012
234567890123
345678901234
456789012345
567890123456
678901234567
789012345678
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2008
 [3.3] 言語: C
[4] 期限: 09年07月07日
[5] その他の制限:なし。

634:デフォルトの名無しさん
09/07/05 04:02:16
>>632
#include <stdio.h>

int main(void)
{
int i = 0, sum = 0, n;

while(1) {
printf("整数%d :", ++i);
scanf("%d", &n);
if(n < 0) break;
sum += n * n;
}

printf("二乗値の合計は%d です.\n", sum);

return 0;
}

635:デフォルトの名無しさん
09/07/05 04:06:28
>>633
#include <stdio.h>

int main(void)
{
int i, j, n, m;

printf("何行ですか:");
scanf("%d", &n);
printf("何列ですか:");
scanf("%d", &m);

for(i=1; i<=n; i++) {
for(j=0; j<m; j++) printf("%d", (i+j)%10);
putchar('\n');
}

return 0;
}

636:デフォルトの名無しさん
09/07/05 06:59:52
>>627
#include<iostream>
using namespace std;
int main(){
char m;
if (m == 'a') cout << "『aが格納されています』" << endl;
else cout << "『'a'でない文字が格納されています』" << endl;
return 0;
}


637: ◆/91kCCQXBo
09/07/05 09:01:09
>>627 関数が使えるなら。
#include<iostream>
using namespace std;
namespace {
  int m;
  void sub(void) {
    if (m == 'a') cout << "『aが格納されています』" << endl;
    else cout << "『'a'でない文字が格納されています』" << endl;
  }
}
int main(){
  m='a';
  sub();
  m='x';
  sub();
  return 0;
}

638: ◆/91kCCQXBo
09/07/05 09:47:08
>>627 テンプレートの中だけ書く。>>626 は無しで。
char m = '\a';
int i;
char data[4]={'m', 'a', 'i', 'n'};

for(i=0; i<=sizeof data/sizeof(char); m = data[i++]) {
    if (m == 'a') cout << "『'a'が格納されています』\n";
    else         cout << "『'a'でない文字が格納されています』\n";
}

639:デフォルトの名無しさん
09/07/05 10:42:52
そのループはギャグのつもり?

640:デフォルトの名無しさん
09/07/05 10:51:16
1週間ぐらい前に文字列表示とか、四則演算とか聞いてた人でしょ。
授業は if 文に入ったらしいが、何も分からないから全部聞くと。

641: ◆/91kCCQXBo
09/07/05 12:35:40
>>595 ループか関数のどちらかは使う必要あり。
#include <stdio.h>
void div10(int c) {
  if(c%10) ; else printf("%dは10で割り切れる数\n", c);
}
int main() {
  div10(1);
  div10(20);
  div10(21);
  div10(30);
  div10(13);
  return 0;
}

642:デフォルトの名無しさん
09/07/05 13:10:10
>>638

そのおソースは頂けない
せめてこうしよう

#include <iostream>
using namespace std;

int main()
{
char* data = "main";

for(char* ite = data;*ite != '\0';ite++){
if(*ite == 'a') cout << "aが格納されています" << endl;
else cout << "'a'でない文字が格納されています" << endl;
}

return EXIT_SUCCESS;
}

643: ◆/91kCCQXBo
09/07/05 13:29:31
>>627 どお?
#include <iostream>
using namespace std;
int main(){
  int i = 0;
  char m, data[] = {'m', 'a', 'i', 'n'};

  while( m = data[i], i++ < sizeof data/sizeof(char) ) {
    if (m == 'a') cout << "『'a'が格納されています』\n";
    else         cout << "『'a'でない文字が格納されています』\n";
  }
  return 0;
}

644:デフォルトの名無しさん
09/07/05 13:53:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
モンテカルロ法を用いて、円周率を計算しなさい。なおランダムに打つ点は1000点用いること。
また上記プログラムを改良して、50点打つごとに、真の円周率(ここでは3.1415926とします)
との差を求め、その差をスペースと*を用いてグラフ化しなさい。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:7/9
[5] その他の制限:

申し訳ありませんがよろしくお願いします

645:デフォルトの名無しさん
09/07/05 16:52:12
>>644
喜べ、これでキミは英雄だ
URLリンク(kansai2channeler.hp.infoseek.co.jp)

hit-or-missは中心(0,0)半径1の円に入るかどうかで判定した
一様乱数はC標準のものを用いた
おまけとして100000回試行したデータも付けておいた
この判定法と乱数では試行回数が1000回では不十分であると分かるはずだ
改善は他の住人に任せた

646:デフォルトの名無しさん
09/07/05 17:11:25
>>535
遅くなりました
ありがとうございます><

647:デフォルトの名無しさん
09/07/05 17:40:26
>>638
sizeof data/sizeof(char)
>>639が指してるのがこれかどうか分からんけど、とりあえず気持ち悪い

648:デフォルトの名無しさん
09/07/05 17:43:21
>>647
固定配列のサイズを表現する普通の記述だが
なんで気持ち悪いと思う?

649:デフォルトの名無しさん
09/07/05 17:46:18
そっか。
俺ならsizeof(data)/sizeof(data[0])と書くから。
片方にしか括弧つけない意味も分からないし。

650:デフォルトの名無しさん
09/07/05 17:49:14
ああ、そういう意味なら気持ち悪いな
確かに

651:デフォルトの名無しさん
09/07/05 17:51:08
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):Ax=bの連立1次方程式の解を求めるプログラムを作成しなさい。
   (この行列を使用してください
     A={{10,-9,0,0,0,0,0},
  {-9,17,-8,0,0,0,0},
  {0,-8,17,-9,0,0,0},
{0,0-9,13,-4,0,0},
{0,0,0,-4,12,-8,0},
{0,0,0,0,-8,10,-2},
  {0,0,0,0,0,-2,2}}
b={0,0,0,0,0,0,7})

[3] 環境
 [3.1] OS: Windows Vista
 [3.2] Visual Studio 2008
 [3.3] 言語: C++
[4] 期限: 2009年7月1日まで]
[5] その他の制限:特にありませんがなるべく簡単なものでお願いします
解が{0.37,0.41,1.28,2.06,3.81,4.69,8.19}に近いものになるはずです。




652:デフォルトの名無しさん
09/07/05 17:53:09
>>651
既に期限過ぎてるんだが

653:デフォルトの名無しさん
09/07/05 17:53:15
あとsizeof(char)は常に1だから冗長とかいう奴もよくいるねw
おれは冗長でも書くべきと思う派

654:デフォルトの名無しさん
09/07/05 17:54:36
>>650
どういう意味なら気持ち悪くないの?

655:デフォルトの名無しさん
09/07/05 17:57:09
>>648
読みにくいし i <= sizeof〜 だと境界越えてるじゃん
>>642とどっちが読みやすいよ

656:デフォルトの名無しさん
09/07/05 18:00:36
うわあほんとだ。。。
sizeof記述の気持ち悪さに気を取られすぎた俺バカ

657:デフォルトの名無しさん
09/07/05 18:18:03
<<651
私の計算ミスでした。すいません


658:デフォルトの名無しさん
09/07/05 18:55:03
>>651 >>162 問題 >>174 >>177 >>183 解答
何の計算ミス?

659:デフォルトの名無しさん
09/07/05 19:38:56
>>623
返信遅れてすみません。
追加、削除された1つのリストで大丈夫です。

660:デフォルトの名無しさん
09/07/05 20:49:18
[1] 授業単元:情報
[2] 問題文(含コード&リンク):
パソコン甲子園 2008 予選問題 問7 ふしぎな虫
URLリンク(www.pref.fukushima.jp)
[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン:Visual Studio 2008
 [3.3] 言語: C
[4] 期限: 7月6日

よろしくお願いします。

661:デフォルトの名無しさん
09/07/05 21:34:32
>>645
ありがとうございます。
凄い。誤差ってなかなか安定しないんですね
ですが中身が問題分からなかった低能では
いささか理解が追いつきません
このまま出したら本当に英雄になっちゃいそうです

662: ◆/91kCCQXBo
09/07/05 21:47:10
>>644 差の絶対値をグラフにした。
#include <stdio.h>
#include <stdlib.h>
#define PI 3.1415926
int main() {
  int  i, j, imax = 1000;  /* 乱数の発生回数 1000 */
  int  n, inter = imax/20;  /* グラフの表示インターバル 50 */
  float x,y,pi=PI,eps,mul;
  for(n=0, i=1; i<=imax; i++) {
    /* 0以上1未満の乱数を生成する */
    x = rand()/((float)RAND_MAX+1);
    y = rand()/((float)RAND_MAX+1);
    /* 0<=x,y<=1の範囲にある中心原点半径1の扇形の中に乱数による点が入ったらカウントする */
    if( x*x + y*y < 1) n++;
    if( i%inter ) ; else {    /* 円周率の計算とグラフの表示 */
      pi = (float)n/i*4;    /* 半径1の円の面積すなわち円周率 */
      eps = PI-pi; eps = (eps<0)? -eps : eps;
      if(i==inter) mul = 70/eps; /* 1回目はグラフの倍率を決める */
      printf("%5.3f ", pi);
      for(j=eps*mul; j>=1; j--) putchar(' '); printf("*\n");
    }
  }
  printf("PI=%f\n", pi);
}

663:デフォルトの名無しさん
09/07/05 22:30:36
>>662
ありがとうございます
コメントまで…

何度実行しても値が変わらない気がするのはそういう物ですか?

664: ◆/91kCCQXBo
09/07/05 22:37:17
srand(time(NULL)); を、最初に呼べば毎回変わるはず、>>645のように。

665:デフォルトの名無しさん
09/07/05 22:41:51
>>664
出来ました。が、ときたまグラフが崩れるので封印しときます
勉強になりました

666:デフォルトの名無しさん
09/07/05 23:08:32
>>234で、>>251さんに
URLリンク(kansai2channeler.hp.infoseek.co.jp)
というプログラムを書いて頂いたのですが、RAND_MAXがrand関数の利用に当たるとして
再提出になってしまいました。

rand_maxはrandのとる最大値とのことですが、これを使わないで同様の趣旨を実現するにはどうしたらよいのでしょうか?

667:デフォルトの名無しさん
09/07/05 23:14:25
RAND_MAXをINT_MAXに変える

668:デフォルトの名無しさん
09/07/05 23:53:23
2つの整数をキーボードから入力して、最初の数の方が小さい場合には、『最初の数の方が小さいか等しいです』と表示させて、大きい場合には、『後の数の方が小さいです』と表示させるプログラムを作成せよ

#include<iostream>
using namespace std;
int main(){


return 0;
}


の中に入る文を作るんですが、どうすればいいですか。使うのはifとcoutとelseくらいだと思うんですが


669:デフォルトの名無しさん
09/07/05 23:54:46
>RAND_MAXがrand関数の利用に当たるとして

何ソレ
ただの定数マクロでしょ?

670:デフォルトの名無しさん
09/07/06 00:24:57
>>666
関数の利用に当たる・・・だと・・・
数学科で出された問題?
だったらそのトンチンカンな主張も納得できるけど工学科だったら・・・

671:デフォルトの名無しさん
09/07/06 00:28:29
>>668 例はいらない。
// ↑C++テンプレート
int a1, a2;

cout << "2つの数を入力してください:";
cin >> a1 >> a2;
if(a1<=a2) cout << "最初の数の方が小さいか等しいです\n";
else cout << "後の数の方が小さいです\n";
// ↓C++テンプレート

672:デフォルトの名無しさん
09/07/06 00:49:54
>>671
// ↑C++テンプレート
// ↓C++テンプレート

なんだよ、このコメントは。w
まぁ、>>671の予想通り、minを使うのが速いよってことですね。

673: ◆jmI6IAV7WI
09/07/06 05:28:45
[1] 授業単元: 構造体
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 7月10日
[5] その他の制限:

よろしくお願いします


674:デフォルトの名無しさん
09/07/06 06:48:27
書くとこ入力部だけじゃねーかw

675: ◆jmI6IAV7WI
09/07/06 07:43:14
>>674
入力部だけでもお願いできないでしょうか
難しくて何がなんだかさっぱりわからないので
すみません

676: ◆/91kCCQXBo
09/07/06 14:11:15
>>673
1.
  printf("1番目のX Y座標をスペースを開けて入力して下さい:");
  scanf("%lf%lf", &my_line.p1.x, &my_line.p1.y);
  printf("2番目のX Y座標をスペースを開けて入力して下さい:");
  scanf("%lf%lf", &my_line.p2.x, &my_line.p2.y);
  printf("2点間の直線距離は:");
2. 三角形の面積 area = fabs(t.p2.x * t.p3.y - t.p3.x * t.p2.y)/2;
  printf("1番目のX Y座標をスペースを開けて入力して下さい:");
  scanf("%lf%lf", &my_triangle.p1.x, &my_triangle.p1.y);
  printf("2番目のX Y座標をスペースを開けて入力して下さい:");
  scanf("%lf%lf", &my_triangle.p2.x, &my_triangle.p2.y);
  printf("3番目のX Y座標をスペースを開けて入力して下さい:");
  scanf("%lf%lf", &my_triangle.p3.x, &my_triangle.p3.y);
  printf("3点で囲まれた三角形の面積は:");

677: ◆/91kCCQXBo
09/07/06 14:25:27
>>624 ガウス・ザイデル法の計算方法 山本昌志 2005年12月16日
URLリンク(akita-nct.jp)

必要なら以下にコメントも付けとく。仮にエクセルのPADでもいい?
#if 0
for( j=1; j<=N; j++ ){
  temp += a[i][j] * x[j];
}
/* a[i][i] * newx + (temp - a[i][i] * x[i]) = b[i]; */
/* a[i][i] * newx = b[i] - (temp - a[i][i] * x[i]); */
newx = 1.0 / a[i][i] * (b[i] - (temp - a[i][i] * x[i]));
#else
for( j=1; j<=N; j++ ){
  if( i==j ) continue;
  temp += a[i][j] * x[j];
}
/* Xi(k+1) = 1/Aii * ( Bi - (Ai,1*X1(k) + Ai,2*X2(k) + ... + Ai,i-1*Xi-1(k) + Ai,i+1*Xi+1 + ... + Ai,n*Xn )) */
newx = (b[i] - temp)/a[i][i];
#endif

678:デフォルトの名無しさん
09/07/06 17:30:17
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C/C++
[4] 期限: [2009年7月7日10:00まで]
[5] その他の制限: 特にありません。 

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

679:デフォルトの名無しさん
09/07/06 18:07:23
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS: VineLinux4.2
 [3.2] コンパイラ名とバージョン: GCC 4.3
 [3.3] 言語: C/C++
[4] 期限: [2009年7月8日10:00まで]
[5] その他の制限: 特にありません。

C言語なら俺に聞け(入門篇) Part 50
スレリンク(tech板)
>>221で質問しましたが結局分からなかったので
ここに投げさせて頂きました。よろしくお願いします。

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

680:デフォルトの名無しさん
09/07/06 18:25:28
>>493で質問し、一題目を当スレで解答していただいたものです。
その際二題目は問題の意味が解らないということで保留にしていたんですが、
二題目もしなければ駄目ということで再度質問願います。
[1] 授業単元:Cプログラミング入門編
[2] 問題文(含コード&リンク):URLリンク(www-it.sci.waseda.ac.jp)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ: gcc
 [3.3] 言語: C

二題目の問題の意味ですが、outputでV1〜Vnが表示される度にそれぞれの行列の要素の中で
『V1二乗+V2二乗−V3二乗』を画面Printするという意味と思います。
教授曰くピタゴラスのなにやらと言うらしいのですが、、、。

よろしくお願いします。

681: ◆jvdNOCQgZU
09/07/06 18:31:14
[1] 授業単元:windows開発
[2] 問題文(含コード&リンク): URLリンク(down11.ddo.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2008
[3.3] 言語:C++
[4] 期限: [2009年7月9日まで]
[5] その他の制限:DirectX SDK N2008を使用します。
ファイルが大きかったので別のロダ借りました。パス「111」

682:デフォルトの名無しさん
09/07/06 18:49:24
>>680
最初に解答いただいたプログラムです
URLリンク(codepad.org)

よろしくお願いします。

683:デフォルトの名無しさん
09/07/06 19:01:54
>>679
問題 >>前930(9532)>>093(9559)>>172(9532)
このプログラムに、リダイレクション、パイプ機能を実装してください。
>>265(9607)

684:デフォルトの名無しさん
09/07/06 19:23:17
>>679
もう上で答えられてるけど作っちゃったので俺も
URLリンク(kansai2channeler.hp.infoseek.co.jp)

685:デフォルトの名無しさん
09/07/06 19:35:09
>>680
#include <stdio.h>
#include <stdlib.h>
void multiply(int *mat, int *vec, int *out, int N) {
int i, j;
for (i = 0; i < N; i++) {
out[i] = 0;
for (j = 0; j < N; j++) {
out[i] += mat[i*N+j] * vec[j];
}
}
}
int main(void) {
int i, k, N = 3, n = 10;
int *v = (int *)malloc(N * sizeof(int));
int *t = (int *)malloc(N * sizeof(int));
int *P = (int *)malloc(N * N * sizeof(int));
v[0] = 3; v[1] = 4; v[2] = 5;
P[0] = 1; P[1] = -2; P[2] = 2;
P[3] = 2; P[4] = -1; P[5] = 2;
P[6] = 2; P[7] = -2; P[8] = 3;
for (k = 1; k <= n; k++) {
multiply(P, v, t, N);
for (i = 0; i < N; i++) {
v[i] = t[i];
}
printf("v_%d = (%d, %d, %d), ", k, v[0], v[1], v[2]);
printf("v1^2 + v2^2 - v3^2 = %d\n", v[0]*v[0]+v[1]*v[1]-v[2]*v[2]);
}
free(v); free(t); free(P);
return 0;
}

686:デフォルトの名無しさん
09/07/06 20:04:06
>>678
URLリンク(kansai2channeler.hp.infoseek.co.jp)

687:デフォルトの名無しさん
09/07/06 21:00:23
>>685
ありがとうございます。
本当に助かります。
こんなにサッと出来るなんて尊敬します。

688:デフォルトの名無しさん
09/07/06 21:30:15
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
多数のファイルをクローズせずに何個もオープンするとどうなるか実験せよ.
実験用プログラム fopen.c のソースと実験結果と考察をレポートすること.

% ./fopen
入力ファイル:fopen.c
オープン 1 回目
オープン 2 回目
オープン 3 回目
...
オープン ??? 回目
これ以上オープンできません!

注意:「○○回までオープンできた」とかでは,現象・結果の説明にすぎず,考察とは言えない. その結果から何が理解できるのか?推理せよ. 換言:実験結果(具体例)から一般規則を導き出せ.

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:09/07/08
[5] その他の制限: 特になし

689:デフォルトの名無しさん
09/07/06 21:36:20
>>688
追記
その他の制限:ファイル名は決め打ち(ソースファイルなど)でよい.
自分なりに作ったソースは
URLリンク(kansai2channeler.hp.infoseek.co.jp)
考察がわかりません.
セグメンテーションエラーが出るのはわかるのですが…

690:デフォルトの名無しさん
09/07/06 21:47:23
>>689
セゲメンテーションフォルトは fclose(NULL) が悪いだけで考察とは関係ないよ

691:デフォルトの名無しさん
09/07/06 21:55:34
>>690
fclose(NULL)がエラーになる理由を考察に書けばいいと思うんですが、具体的にどう書けばいいのでしょうか


692:デフォルトの名無しさん
09/07/06 21:55:34
>>680
ピタゴラスのなにやらって、三平方の定理じゃねーかw

693:デフォルトの名無しさん
09/07/06 22:11:23
>>691
ストリームをクローズします。

fclose は,引数 stream で指定されたストリームをクローズします。
そのストリームに対応付けられているすべてのバッファは,クローズする前に
フラッシュされます。システムが割り当てたバッファは,クローズすると解放されます。
setbuf または setvbuf を使って割り当てられたバッファは,自動的に解放される
わけではありません(ただし,setvbuf にバッファポインタとして NULL が渡されると,
クローズするときに解放されます)。

とあるから、NULLを無理矢理クローズしようとしてエラーが生じるんじゃない?
規格票には何か書いてあるかな

694:デフォルトの名無しさん
09/07/06 22:16:47
>>691
perror()かなにかでエラー原因表示させてみ

[略)
perror("fopen"); ←ここらへんでperrorを呼んでみる
printf("これ以上オープンできません. \n");
[略)

695:デフォルトの名無しさん
09/07/06 22:23:45
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):
リスト構造で接続された構造体に含まれる名前を比較し、辞書順にリスト構造の接続を再構成せよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年07月7日8:00まで
[5] その他:自分で書いたのですが、セグメントエラーになってしまいます。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
なお、これは一番若い名前を見つけたら一旦保持して、最後まで探し終えたら、先頭と保持したものを入れ替えるという動作を
最後までループさせるつもりで書きました。


696:デフォルトの名無しさん
09/07/06 22:36:25
>>693ご教示ありがとうございます.
ファイルをオープンできなかった場合に,そのファイルをクローズしようとするとどうなるかと言う課題もあるのですが,
これも同じ原因でエラーが発生するのでしょうか.
ソースは
URLリンク(kansai2channeler.hp.infoseek.co.jp)
です.

>>694
1回オープンしました.

46回オープンしました.
47回オープンしました.
fopen: Error 0
これ以上オープンできません.

となりました

697:デフォルトの名無しさん
09/07/06 23:01:33
>>684>>685
ありがとうございます。
ちゃんと動作しました。

698:デフォルトの名無しさん
09/07/06 23:06:42
整数2つをキーボードから入力し、(最初にキーボードから入力させる数値を
入れる変数をa、2番目にキーボードから入力させる数値を入れる変数をbとする。)、
最初の数の方が大きい場合には、『最初の数の方が大きいです』、等しい場合には、『両方は等しいです』、2番目の数の方が大きい場合には、『2番目の数の方が大きいです』と表示するプログラムを作成せよ

ある整数変数をキーボードから入力し、その数値が9以下なら『入力した値は1桁です』と表示させて、10以上、99以下の場合は、『入力した値は2桁です』と表示させ、
100以上なら『入力した値は3桁以上です』と表示するプログラムを作成せよ
#include<iostream>
using namespace std;
int main(){

return 0;
}
の中に入る文を作るんです。else とか else if とか ifとか使うはずなんですが誰か教えてくれませんか

699:デフォルトの名無しさん
09/07/06 23:12:55
>>695
ちょっと見ただけだが、
↓これはまずくない?
>struct data* str,str1,str2,tmp,target;

>struct data *str,*str1,*str2,*tmp,*target;

後、動作可能な形で全体をさらす方がアドバイスを受けやすいと思うよ。

700:デフォルトの名無しさん
09/07/06 23:15:40
int first,second;

printf("first: ");
scanf("%d",&first);
if(first>=100)
printf("入力した値は3桁以上\n");
else if(first>=10)
printf("入力した値は2桁以上\n");
else if(first<=9)
printf("入力した値は1桁\n");

printf("second: ");
scanf("%d",&second);
if(second>=100)
printf("入力した値は3桁以上\n");
else if(second>=10)
printf("入力した値は2桁以上\n");
else if(second<=9)
printf("入力した値は1桁\n");

if(first>second)
printf("firstが大きい\n");
else if(first==second)
printf("同じ\n");
else
printf("secondが大きい\n");

701:デフォルトの名無しさん
09/07/06 23:28:11
>>700
あれ?C++なんですけど
coutとかなのですが

702:デフォルトの名無しさん
09/07/06 23:30:28
>>701
C++もCコードかけるからねえ
最初にそういうのは注文で出しておいた方がいいかも

703:デフォルトの名無しさん
09/07/06 23:32:19
using〜を見落としてたわ
もう寝るから別の人やって

ところで、テンプレ使えと逆ギレOK?

704:デフォルトの名無しさん
09/07/06 23:45:35
だから、今まで何度もC言語とC++は別言語だからスレッドを分けてくれと言ってきたじゃないか

705:デフォルトの名無しさん
09/07/06 23:54:07
初耳だ

706:デフォルトの名無しさん
09/07/07 00:09:40
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
URLリンク(www.dotup.org)
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:c
[4] 期限: 7月7日23:59
[5] 特になし

よろしくお願いします

707:デフォルトの名無しさん
09/07/07 00:54:21
>>701
なにがcoutなのですか?
printfはC++じゃないとおっしゃる?

708: ◆/91kCCQXBo
09/07/07 00:56:04
>>698
// ここまではC++テンプレート
cout<<"1番目の整数: ";
cin>>first;
cout<<"2番目の整数: ";
cin>>second;
if(first>second)
  cout<<"最初の数のほうが大きいです"<<endl;
else if(first<second)
  cout<<"2番目の数のほうが大きいです"<<endl;
else
  cout<<"両者は等しいです"<<endl;

cout<<"3番目の整数: ";
cin>>first;
if(first>=100 || first<=-100)
  cout<<"入力した値は3桁以上です"<<endl;
else if(first>=10 || first<=-10)
  cout<<"入力した値は2桁です"<<endl;
else
  cout<<"入力した値は1桁です"<<endl;
// ここからはC++テンプレート

709:デフォルトの名無しさん
09/07/07 01:02:07
>>689
多数のファイルをだからこんな感じじゃないの
うちの環境だとエラーすら出ずに29ファイル目で終わった
コンパイラはbcc,OSはXP SP3
原因はリソース不足?
#include <stdio.h>
#define N 1000
int main(){
int i;
char fname[256];
FILE* in[N];
FILE* out;
for(i = 0;i < N;i++){
sprintf(fname,"hoge%u",i);
out = fopen(fname,"w");
fclose(out);
if((in[i] = fopen(fname,"r")) == NULL){
perror("error");
for(i--;i >= 0;i--){
fclose(in[i]);
}
exit -1;
}
}
for(i = 0;i < N;i++){
fclose(in[i]);
}
return 0;
}

710:512
09/07/07 01:07:49
>>680
>>685で解答済みみたいだけど、一応>>512のコードで求めてみた
URLリンク(codepad.org)
「ElementOf(mat,row,clm)」と「PrintPythagoreanTheorem(int v1, int v2, int v3)」を追加して
main関数に1行追加しただけ
#こっそりMltMatrixをMulMatrixに修正してたりw

711:デフォルトの名無しさん
09/07/07 01:09:23
>>709
1020ファイル作ってsegmentation faultだった。
CentOS5.3(仮想マシン) gcc4.1.2

712:デフォルトの名無しさん
09/07/07 01:11:50
>>711
丁度 out==NULL になったんじゃないかな

713:711
09/07/07 01:12:41
流れをなんにも見てなくてとりあえず動かしただけだったすまん。

>>691
ええと、fclose(NULL)がなぜダメなのかを考察するのはちょっとズレてる
その前にfopenがNULLを返したことに対して考察をすべきよー

714:デフォルトの名無しさん
09/07/07 01:14:45
>>712
大抵out==NULLになって終わるんじゃないかな

715:デフォルトの名無しさん
09/07/07 01:15:34
>>714
in[i]==NULL になることもあるさ

716:711
09/07/07 01:22:12
#include <stdio.h>
#include <stdlib.h>
#define N 10000
int main(){
int i;
char fname[256];
FILE* in[N];
FILE* out;
for(i = 0;i < N;i++){
sprintf(fname,"file/hoge%04u",i);
out = fopen(fname,"w");
if(out == NULL){
perror("error[out]");
for(i--;i >= 0;i--){ fclose(in[i]); }
exit(-1);
}
fclose(out);
if((in[i] = fopen(fname,"r")) == NULL){
perror("error[in]");
for(i--;i >= 0;i--){ fclose(in[i]); }
exit(-1);
}
}
for(i = 0;i < N;i++){ fclose(in[i]); }
return 0;
}

とりあえずちょっと変えてみた。
まあ、他の要因で落ちることを考慮すればin[i]==NULLになることもあるのだろうけれど、
ファイルの開きすぎで落ちるという観点で行けばoutのみじゃない?

717:デフォルトの名無しさん
09/07/07 01:35:43
>>695
いろいろ間違ってる。
nextを使うべきでないところで使っている(このためstr->next・str2->nextでstrやstr2がNULLになることがある)。
最小値がstr1でない場合に、次のループではstr1を跳ばしている(このためstr1がNULLになることがある)。
どうしてもtop入れ換えでやりたいなら、図でも書いて落ち着いて考えること。

top入れ換えではなく、最小値を1個ずつ抜いて別のツリーをつくる方がややこしくなくてお勧め。

struct data *sort(struct data *top){
  struct data work, *d, *target = top, *current = &work;
  for(target = top; target != NULL; target = top){ //元のツリーがなくなるまで
    for(d = target->next; d != NULL; d = d->next){ //最小値探索
      if(strcmp(target->name, d->name) > 0) target = d;
    }
    if(top == target){
      top = target->next; //最小値がtopならtopにnextを保持
    }else{
      for(d = top; d->next != target; d = d->next) ; // 最小値がtop以外なら最小値の親と最小値の子をつなげる
      d->next = target->next;
    }
    current->next = target; // 新しいツリーの末尾に最小値を追加
    current = target;
    current->next = NULL;
  }
  return work.next;
}

718:デフォルトの名無しさん
09/07/07 01:42:03
1] 授業単元:C言語
[2] 問題文(含コード&リンク):n個の整数データを入力し,最後に平均を出力,nは最初に入力する(nは自然数),平均は小数部まで求める実行例として
[3] 環境
 [3.1] OS:Windows
 [3.2] gcc 3.4
 [3.3] 言語:C
[4] 期限:7/7 18時まで
#include<stdio.h>
void main(void)
{
int x,y,z,sum;
double ave;
y=1;
sum=0;
printf("入力するデータ数は? ");
scanf(" %d", &x);
if(x>1){
for(y=1; y=x; y++){
printf("No .%d",y);
y++;
scanf("%d", &z);
sum=sum+z;
}
ave=sum/x;
printf("以上%d個の平均は:%.6f",x,ave);
}
}
とりあえず自分でここまでやってみましたけどわかりません><

719:デフォルトの名無しさん
09/07/07 01:52:24
>>716
横レスだけどファイルを開きすぎて落ちるってどういうこと?
outはきちんとfcloseしてるから再利用してよさそうなんだけどやっちゃダメなの?
後学のためにご教示願います。

720:デフォルトの名無しさん
09/07/07 01:57:27
outはちゃんと閉じてるけどinは増える一方でしょ

0
1 out open
0 out close
1 in open
2 out open
1 out close
2 in open

というながれで、ファイルカウントが最初に最大になるのはoutをopenしたときでしょ

721:デフォルトの名無しさん
09/07/07 02:06:14
なるほどそういうことか。サンクス。

722:デフォルトの名無しさん
09/07/07 02:26:49
>>718
#include<stdio.h>
void main(void)
{
int x,y,z,sum;
double ave;
sum = 0;
printf("入力するデータ数は? ");
scanf("%d", &x);
if(x>=1){
for(y=1; y <= x; y++){
printf("No.%d ",y);
scanf("%d", &z);
sum=sum+z;
}
ave=(double)sum/x;
printf("以上%d個の平均は:%.6f",x,ave);
}
}

723:デフォルトの名無しさん
09/07/07 02:48:35
>>722
ありがとうございます

724: ◆jmI6IAV7WI
09/07/07 05:34:13
>>676
ありがとうございました
助かりました

725:デフォルトの名無しさん
09/07/07 12:44:06
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 整数 nissu をキー入力して、1 月1 日から数えて nissu 日目が何月何日かを表示
したい。 main() 関数を以下のように作った。ここで呼ばれている関数 tuki_hi () を作成せよ。
#include <stdio.h>
int main(){
int nissu, tuki, hi;
void tuki_hi(int, int *, int *);
printf("日数を月日に変換\n");
printf("日数は? "); scanf("%d", &nissu);
tuki_hi(nissu, &tuki, &hi);
printf("%d 日目は%d 月%d 日です", nissu, tuki, hi);
return 0;
}
[3] 環境
[3.1] OS: Windows/vista
[3.2] コンパイラ名とバージョン: borland c++
[3.3] 言語:C
[4] 期限: ([2009年07月7日2:30まで]
[5] よろしくお願いします

726:デフォルトの名無しさん
09/07/07 12:55:20
>>725
void tuki_hi(int nissu, int *tuki, int *hi)
{
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; /* days[0]は使わない */
int i;
for (i=1; i<=12 && nissu>days[i]; ++i) { nissu -= days[i]; }
*tuki = i;
*hi = nissu;
}

727:デフォルトの名無しさん
09/07/07 14:09:24
>>686 ありがとうございました。

ただ、それぞれの問題につき1つのプログラムという形にしていただけないでしょうか?
自分なりにやってみたんですが、どうも上手くいきませんでした。

お手数ですが、よろしくお願いしますm(_ _)m

728:デフォルトの名無しさん
09/07/07 14:48:07
>>726
ありがとうございましたm(__)m

729:デフォルトの名無しさん
09/07/07 14:56:29
>>727
何も理解できてないな
>>686動かしてみた?

730:デフォルトの名無しさん
09/07/07 16:35:47
>729 すみません… 本当に何も理解しておりません。
>実行結果です。
t23.c: In function `insert_node':
t23.c:130: error: `new' undeclared (first use in this function)
t23.c:130: error: (Each undeclared identifier is reported only once
t23.c:130: error: for each function it appears in.)
t23.c:130: error: parse error before "node_t"
t23.c: In function `remove_node':
t23.c:139: error: `delete' undeclared (first use in this function)
t23.c:139: error: parse error before "del"
t23.c: In function `random_list':
t23.c:149: error: 'for' loop initial declaration used outside C99 mode
t23.c: In function `get_node':
t23.c:155: error: 'for' loop initial declaration used outside C99 mode

731:デフォルトの名無しさん
09/07/07 16:53:30
それ実行じゃなくてビルド時のエラーだろう。
とりあえず C++ でやってみては。

732:デフォルトの名無しさん
09/07/07 17:03:29
[1] 授業単元: プログラミングC
[2] 問題文(含コード&リンク):
キーボードから半角英数で文字列を入力し、英字については大文字を小文字に、小文字を大文字にするプログラムを作成せよ。

実行例 文字列入力 :AbCdEfG123
    変換文字列 :aBcDeFg123
[3] 環境 windows
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 2009/7/9
[5] その他の制限:全くの初心者なのでよろしくお願いします。

733:デフォルトの名無しさん
09/07/07 17:32:46
すいません>>732のものなんですがもう一問あったのでこちらもよろしくお願いします
[1] 授業単元: プログラミングC
[2] 問題文(含コード&リンク):
キーボードから半角英数で文字列を入力し、これを数字(0→9)、大文字(A→Z)、
小文字(a→z)の順に並べ替えるプログラムを作成せよ。
ヒント:並べ替えアルゴリズムは、バブルソート(隣接交換法)を使うと簡単だろう。
    文字列長はstrlen命令を使うとよい。みたいです。
[3] 環境 windows
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 2009/7/9
[5] その他の制限:

734:デフォルトの名無しさん
09/07/07 17:36:08
>>731 提出先のコンパイラーでg++がインストールされてないようです…

cに書き換えるにはどうしたら良いでしょうか?

735:デフォルトの名無しさん
09/07/07 17:37:38
>>730
コンパイルすらできていないのに>>727のコメントが出てくるのがおかしいんだよ。
自分なりに何をやったんだ?って思うんだよなぁ。
てっきりmainがありませんぐらいまではたどり着いてるものだと思っていたが。。

736:デフォルトの名無しさん
09/07/07 17:40:05
>>734
new deleteをmalloc/calloc freeにする
変数の宣言をブロックの先頭で行うようにする

737:デフォルトの名無しさん
09/07/07 17:57:20
Cに書き換えるのも書こうかと思ったんだけど
元々の条件にC/C++って書いてあったからなー

738:デフォルトの名無しさん
09/07/07 18:00:05
>>736 ありがとうございます。

739:デフォルトの名無しさん
09/07/07 18:02:11
>>732
#include <stdio.h>
#include <ctype.h>

int main(void)
{
char str[128];
int i;
scanf("%s", str);
for (i = 0; str[i]; ++i)
if (isupper(str[i])) str[i] = tolower(str[i]);
else if (islower(str[i])) str[i] = toupper(str[i]);
puts(str);
return 0;
}

740:デフォルトの名無しさん
09/07/07 18:31:32
>>733
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int compare(char x, char y)
{
if (isdigit(x)) return isdigit(y)? y - x: 1;
if (isupper(x)) return isdigit(y)? -1: isupper(y)? y - x: 1;
if (islower(x)) return isdigit(y) || isupper(y)? -1: islower(y)? y - x: 1;
return 0;
}
void bsort(char *str)
{
int i, j;
for (i = 0; i < strlen(str) - 1; ++i) {
for (j = 1; j < strlen(str) - i; ++j) {
if (compare(str[j], str[j - 1]) > 0) {
char t; t = str[j]; str[j] = str[j - 1]; str[j - 1] = t;
}
}
}
}
int main(void)
{
char str[128];
scanf("%s", str);
bsort(str);
puts(str);
return 0;
}

741:デフォルトの名無しさん
09/07/07 18:57:59
>>737 そうですね、迂濶でした。
今度こそ自分なりにやってみますが、ダメだったときはお願いしてもよろしいでしょうか…

742:デフォルトの名無しさん
09/07/07 19:02:25
>>734
> 提出先のコンパイラーでg++がインストールされてないようです…
何のエラーメッセージでそう思った? 

とりあえず int main(void){return 0;} の一行を追加して、g++でコンパイルみてはどうだろう。

743:デフォルトの名無しさん
09/07/07 19:52:53
>>742 g++: p11.cpp: No such file or directory
>g++: no input files   です。
>

744:デフォルトの名無しさん
09/07/07 19:56:43
>>743
ばっちりインストールされてるじゃねーかw

745:デフォルトの名無しさん
09/07/07 19:57:03
>>743
which g++
とでもしてろよwwwww

746:デフォルトの名無しさん
09/07/07 19:57:41
↑間違えました。


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

4981日前に更新/375 KB
担当:undef