C/C++の宿題を片付けます 91代目at TECH
C/C++の宿題を片付けます 91代目 - 暇つぶし2ch127:デフォルトの名無しさん
07/06/25 00:30:14
[1] 授業単元:プログラミングⅡ
[2] 問題文リンク:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C言語のみ
[4] 期限: 2007年06月26日AM01:00まで
[5] その他の制限: 特にないです。
  自力ではどうしてもできませんでした。
  どうかよろしくお願いします。


128:デフォルトの名無しさん
07/06/25 00:30:57
【質問テンプレ】
[1] 授業単元: プログラミング言語
[2] 問題文:
数値の列を入力し,それをリスト構造にデータを
格納せよ.その際,数値が大きさの順に並ぶよう
にせよ.
- 入力する数値の数を限定してもよい
- たとえば5個
• リストの内容を先頭から出力せよ.
- 結果として入力された数値の列が,大きさ順
に並び替えられて表示されることになる.
• リスト構成する要素(セル)はmalloc関数でヒー
プ領域から確保するものとする.
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio2005
 [3.3] 言語:C++
[4] 期限:6月28日まで
[5] その他の制限:ポインタの練習です。一応、こんな感じらしいです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
どなたかご教授お願いします

129:デフォルトの名無しさん
07/06/25 00:46:17
|
| ∧         ∧
|/ ヽ        ./ .∧
|   `、     /   ∧
|      ̄ ̄ ̄    ヽ
| ̄ ̄月曜日 ̄ ̄ ̄ ̄)
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄.\
|ヽ-=・=-′ ヽ-=・=-  /
|::    \___/    / やぁ・・・・
|:::::::    \/     /


130:デフォルトの名無しさん
07/06/25 00:52:10
鬱入った。
寝る。

131:デフォルトの名無しさん
07/06/25 00:57:49
>>19
適当。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

132:デフォルトの名無しさん
07/06/25 01:33:09
>>125さん
できました!ありがとうございました!

133:デフォルトの名無しさん
07/06/25 02:53:58
>>131 ありがとうございました

134:デフォルトの名無しさん
07/06/25 03:06:59
[1] 授業単元:C++研究
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム1)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム2)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム3)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム4)
上記1~4のプログラムを下記のように修正します。

クラス(設計図)部分を概要部分(ヘッダファイル)と実装部分(ソースファイルに分け)
そしてメイン部分も分け、4つのプログラムを新しく作り直しなさい。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C++
[4] 期限: ([2007年6月26日12:00まで]
[5] その他の制限:特になし
どうかよろしくお願いします

135:デフォルトの名無しさん
07/06/25 03:17:42
>>134
単にソースをclass.cpp class.h main.cppとかってファイル作って
にコピペしまくるだけで終了しない?

136:デフォルトの名無しさん
07/06/25 03:51:42
>>124
これは難問だ
何をもって面白いとするかがわからんことには作りようがない

技術的には>>124は全然問題なさそうだから、こんなのはどうだ?
怪しいswitch文だが、ちゃんとコンパイルは通る
実行結果が予想できるかい?
プログラムの挙動的には面白いと思うんだが

int main(){
  switch(1){
    while(1){
      case 0:
        printf("0");
        break;
      default :
        printf("default");
      case 1:
        printf("1");
    }
  }
  return 0;
}

良い子はマネしないようにな

137:デフォルトの名無しさん
07/06/25 04:06:16
もう一つ怪しいswitch文
01default って出力されそうだけど、実行結果は case 1: のところで無限ループになる

int main(){
  int i = 0;
  switch(i){
    while(1){
      case 1:
        printf("1");
        i++;
        continue;
      case 0:
        printf("0");
        i++;
        continue;
      default :
        printf("default");
        break;
    }
  }
  return 0;
}

138:デフォルトの名無しさん
07/06/25 04:10:19
[1] 授業単元: プログラミング基礎A
[2] 問題文(含コード&リンク):
n乗の数を求める関数を、作成しなさい。
  ◎以下を参考の事
・n乗値を求める関数
n乗値
数字iのn乗値を返す関数
関数定義 double myPow(double i, int n)
例1:i=1.2,n=3の場合,1.728になる
例2:i=1.2,n=-3の場合,0.5787[037]になる
例3:i=1.2,n=0の場合,1.0になる

正,0,負の3つの場合があることに注意

[3]
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
 [3.3] 言語:C++
[4] 期限:2007年6月25日10時30分
[5] その他の制限:出来るだけ複雑ではなく簡単(初歩的)なものにすること。

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

139:デフォルトの名無しさん
07/06/25 04:27:21
>>137
コンパイラ何?
もしかしてBCCじゃね?w

140:デフォルトの名無しさん
07/06/25 04:35:55
BCCでもよく見たら01111…ってなってた
てっきり11111…と怪しい動作するもんだと思った
BCCを疑ってごめんなさい。

141:デフォルトの名無しさん
07/06/25 05:37:21
>>137
こんなコードは出来ればごめん被りたいが、
「switchはラベルに飛ぶだけ」てのが良く分かる例かもね。

142:デフォルトの名無しさん
07/06/25 05:43:33
[1] 授業単元: 複雑学
[2] 問題文(含コード&リンク):

次のH´enon 写像(エノン写像) のボックスカウンティング次元を考える.

(Xn,Yn)→(Xn+1,Yn+1)=(Yn+1-a*X^2*n, b*Xn) :a = 1.4, b = 0.3 に固定する.

10×10分割したマス目内にアトラクタの点が入っているかどうか調べる.点が入っているマス目の数を数えよ
サンプルプログラム URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 25日正午
[5] その他の制限: プログラムをリザイレクションしてdatファイルにしてGNUPLOTでグラフを表示させる。
          グラフ URLリンク(vista.jeez.jp)

よろしくお願いします。


143:デフォルトの名無しさん
07/06/25 07:23:55
>>138
double myPow(double i, int n)
{
    double a=1.0;
    if(n<0){
        n=n*-1;
        i=1/i;
    }
    if(n != 0){
        while(n-->0) a*=i;
    }
    return a;
}

144:デフォルトの名無しさん
07/06/25 09:24:55
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 簡単な絵を書いて画面に出力しろ
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 無し
[5] その他の制限: printf();などの出力関数のみを使った場合はNGとする

145:124
07/06/25 10:02:36
>>136
2つもレスしていただいて、本当にありがとうございます。
早速試してみます。


教授の面白いというのはどうもお笑い系のようです。
関西出身のようで、講義に使うプログラムもがんばって笑いを誘おうとしていますので。

146:デフォルトの名無しさん
07/06/25 10:34:26
>>142
nS
hist[i][j]
printf("%f %f\n", x, y), hist[px][py]++;

147:デフォルトの名無しさん
07/06/25 10:56:51
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): テキストファイルを読み込み、A~Zまでの文字がそれぞれ何個現れたかを数えろ。大文字と小文字は区別しないもとする。
[3] 環境
 [3.1] OS: (Windows/Linux/等々) WinXP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Borland C++ Compiler 5.5
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 無期限
[5] その他の制限: 

自分で書いたコード
URLリンク(kansai2channeler.hp.infoseek.co.jp)

上記のコードの中の
/* ファイルに含まれているアルファベットの個数をカウント */ 
この部分がうまく働きません

何がいけないんでしょうか?

148:デフォルトの名無しさん
07/06/25 11:01:39
>>147
なんだこれ。
--
if('a' <= ch && ch >= 'z')
--
やりたいことは、if (ch >= 'a' && ch <= 'z')かif ('a' <= ch && ch <= 'z')じゃないのか?

149:デフォルトの名無しさん
07/06/25 11:03:11
if('a' <= ch && ch >= 'z')
else if('A' <= ch && ch >= 'Z')

if('a' <= ch && ch <= 'z')
else if('A' <= ch && ch <= 'Z')

chと文字の位置を変えるから(略

150:デフォルトの名無しさん
07/06/25 11:04:41
>>148
ああああああああああ、、、
アホみたいなミスしてました・・・
恥ずかしい



151:デフォルトの名無しさん
07/06/25 11:07:42
[1] 授業単元: プログラミング
[2] 問題文:
1、英大文字は小文字に英小文字は大文字に変えて出力するプログラムを作りなさい

2、テキストの中に現れる0から9までの数字の頻度を調べるプログラムを作りなさい

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: ([2007年06月25日14:20まで
[5] その他の制限:特にありません

時間があまりありませんが、できるところまででも
よろしくお願いします

152:デフォルトの名無しさん
07/06/25 11:15:41
>>151

#include <stdio.h>
#include <ctype.h>
#include <conio.h>

int main(void)
{
char ch;

ch = getche();
if('a' <= ch && ch <= 'z') printf(" -> %c\n",toupper(ch));
else if('A' <= ch && ch <= 'Z') printf(" -> %c\n",tolower(ch));

return 0;
}


>>147のアルファベットのとこを数字に変える

153:デフォルトの名無しさん
07/06/25 11:21:14
is関数使っとけ

154:デフォルトの名無しさん
07/06/25 11:34:14
<ctype.h>使ってるんならis関数使わないほうが不自然だよな。

155:デフォルトの名無しさん
07/06/25 11:39:39
isalpha( ) か
存在を忘れてた


156:デフォルトの名無しさん
07/06/25 11:41:20
>>151
1.
#include <stdio.h>
#include <ctype.h>
int main(void){
   int ch;
   while((ch = getchar()) != EOF){
      if(islower(ch)) putchar(toupper(ch));
      else if(isupper(ch)) putchar(tolower(ch));
      else putchar(ch);
   }
   return 0;
}

2.
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void){
   int i, count[10] = {0};
   char buf[2] = {0}, *p = buf;
   while((*p = getchar()) != EOF)
      if(isdigit(*p))
         count[atoi(buf)]++;
   for(i = 0; i < 10; i++) printf("%d : %d\n", i, count[i]);
   return 0;
}

157:デフォルトの名無しさん
07/06/25 12:26:34
>>128
URLリンク(kansai2channeler.hp.infoseek.co.jp)
悪い。元のがちょっとアレだったんでコマンドライン引数から入力拾うように勝手に仕様変えちった
要点を掴んでほしい

158:デフォルトの名無しさん
07/06/25 12:47:34
152ー156の方々非常に迅速な解答ありがとうございました

159:デフォルトの名無しさん
07/06/25 16:15:49
[1] 授業単元: プログラミング
[2] 問題文:
成績を管理するプログラムを作成する.一人一人の学生には,学籍番号(整数)がつけられているの
で,学籍番号と成績(実数)の組みで管理することとする.本問題で作成するプログラムは,4人の学生について,
英語と数学の成績を入力すると,英語と数学の合計点で最高点を取った学生を出力するものとする.
成績を管理する構造体の名前をstudent_t(この名前はtypedefで定義した名前を指す)とし,構造体のメンバを,
学籍番号はint型とし,名前をidとする
英語の成績はdouble型とし,名前をengとする
数学の成績はdouble型とし,名前をmathとする
とする.また,以下の関数を作成し,それを利用すること.
n人のデータを入力する関数:void InputData(student_t s[], int n)
第一引数は学生の配列
第二引数は学生の人数
関数自体は,何人でも扱えるように作成すること

課題実行においては以下の点に注意すること.
プログラム名は「score」とすること.
結果の表示は小数点以下3桁で表示すること.
各教科の得点は,正の数に限定してよい.
最高点が複数人いた場合は,最高点を取った中で最初に入力された人を表示すること.
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
期限はいつでもいいです。よろしくおねがいします。

160:デフォルトの名無しさん
07/06/25 16:21:04
[1] 授業単元: プログラミング
[2] 問題文:
数字の書かれているテキストファイルを読み込んで、その数字に1を加えた数をテキストファイルに出力するプログラムを作成しなさい.
読み込むテキストファイルには1行目に整数が書かれており、2行目以降には何も書かれていないとする.
課題実行においては以下の点に注意すること.
プログラム名は「count」とすること.
読み込むテキストファイル名はcount.txtとする.
出力するテキストファイル名はcount.txtとする.

[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
これもわかりません。よろしくおねがいします。


161:デフォルトの名無しさん
07/06/25 16:23:20
>>159
#include <stdio.h>
main()
{
FILE *fpin,*fpout;
char c;
int i,j;
int B[3][3];
fpin = fopen("in-1.txt","r");
fpout = fopen("out-1.txt","w");
while(fscanf(fpin,"%c",&c)!=EOF)
if(c == 'B')
{for(i=0;i<3;i++)
{for(j=0;j<3;j++)
{fscanf(fpin, "%d", &B[i][j]);
}}}
for (i=0; i<3; i++) {
for (j=0; j<3; j++)
fprintf(fpout,"%3d",B[i][j]/3);
fprintf(fpout,"\n");
}

fclose(fpin);
fclose(fpout);
return(0);
}


162:デフォルトの名無しさん
07/06/25 16:26:54
>>127
#include <iostream>
#define STACK 10
#define QUEUE 10
typedef int stack;
typedef int queue;
static int sfirst = 0, slast = 0, qfirst = 0, qlast = 0, qcount = 0;
int push(stack *s, int i){ return slast == STACK ? -1 : (s[slast++] = i);}
int pop(stack *s){ return slast == sfirst ? -1 : s[--slast];}
int enqueue(queue *q, int i){
   if(qlast == qfirst && qcount) return -1;
   q[qlast] = i, qcount++;
   qlast = (qlast + 1)%QUEUE;
   return i;
}
int dequeue(queue *q){
   int ret;
   if(qlast == qfirst && !qcount) return -1;
   ret = q[qfirst], qcount--;
   qfirst = (qfirst + 1)%QUEUE;
   return ret;
}
int main(){
   stack s[STACK];
   queue q[QUEUE];
   std::cout << "push" << std::endl; for(int i = 0; i < 13; i++) std::cout << push(s, i) << std::endl;
   std::cout << "pop" << std::endl; for(int i = 0; i < 13; i++) std::cout << pop(s) << std::endl;
   std::cout << "enqueue" << std::endl;for(int i = 0; i < 13; i++) std::cout << enqueue(q, i) << std::endl;
   std::cout << "dequeue" << std::endl;for(int i = 0; i < 13; i++) std::cout << dequeue(q) << std::endl;
   return 0;
}

163:デフォルトの名無しさん
07/06/25 16:29:50
>>126さんありがとうございます
自分自身でも理解できるように勉強してみます

164:デフォルトの名無しさん
07/06/25 16:31:20
>>162
>  [3.3] 言語: C言語のみ

165:デフォルトの名無しさん
07/06/25 16:32:25
>>160
#include <stdio.h>
int main(void)
{
    int n = 0;
    FILE *fp;
    if ((fp = fopen("count.txt", "r+")) == NULL)
        return 1;
    fscanf(fp, "%d", &n);
    rewind(fp);
    fprintf(fp, "%d\n", ++n);
    fclose(fp);
    return 0;
}

166:デフォルトの名無しさん
07/06/25 16:41:16
>>144
$ cat vitamin.c
#include <stdio.h>
int main(int argc, char **argv)
{
    if (argc < 2 || argv[1][0] == 0)
        return 0;
    putchar(argv[1][0]);
    ++argv[1];
    return main(argc, argv);
}
$ cc vitamin.c
$ ./a.out "簡単な絵"

167:デフォルトの名無しさん
07/06/25 16:50:21
>>165
ありがとうございました。

168:デフォルトの名無しさん
07/06/25 16:54:15
>>160
#include <stdio.h>

int main(void){
   FILE *fp = fopen("count.txt", "r");
   size_t len;
   int i, flag = 1;
   char buf[1023], ret[1024] = {0}, *p;
   
   if(!fp) exit(1);
   fgets(buf, sizeof(buf), fp);
   if((p = strchr(buf, '\n')) != NULL) *p = '\0';
   
   len = strlen(buf);
   for(i = 0; i < len; i++){
      if(flag && (buf[len - i - 1] == '9')) ret[len - i] = '0', flag = 1;
      else if(flag) ret[len - i] = buf[len - i - 1] + 1, flag = 0;
      else ret[len - i] = buf[len - i - 1];
   }
   
   if(flag) ret[0] = '1', p = ret;
   else p = ret + 1;
   
   if((fp = freopen("count.txt", "w", fp)) == NULL) exit(2);
   fputs(p, fp);
   fclose(fp);
   
   return 0;
}

169:デフォルトの名無しさん
07/06/25 17:42:43
>>159
#include <stdio.h>

typedef struct tag_student_t{
    double eng, math;
    int id;
}student_t;

void InputData(student_t s[], int n){
    int i;
    for(i = 0; i < n; i++){
        printf("student %d\ninput data (id, eng, math) : ", i + 1);
        scanf("%d%lf%lf", &s[i].id, &s[i].eng, &s[i].math);
    }
}

int main(void){
    student_t s[4];
    double max = -1;
    int i, i_max = 0;
   
    InputData(s, 4);
   
    for(i = 0; i < 4; i++)
        if(max < s[i].eng + s[i].math)
            i_max = i, max = s[i].eng + s[i].math;
   
    printf("id : %d eng : %.3f math : %.3f sum : %.3f\n",
    s[i_max].id, s[i_max].eng, s[i_max].math, s[i_max].eng + s[i_max].math);
   
    return 0;
}

170:デフォルトの名無しさん
07/06/25 17:48:10
>>162
#include <stdio.h>
#define STACK 10
#define QUEUE 10
// <中略>
int main(void){
    stack s[STACK];
    queue q[QUEUE];
    int i;
    puts("push");
    for(i = 0; i < 13; i++) printf("%d\n", push(s, i));
    puts("pop");
    for(i = 0; i < 13; i++) printf("%d\n", pop(s));
    puts("enqueue");
    for(i = 0; i < 13; i++) printf("%d\n", enqueue(q, i));
    puts("dequeue");
    for(i = 0; i < 13; i++) printf("%d\n", dequeue(q));
    return 0;
}

171:デフォルトの名無しさん
07/06/25 17:52:09
>>162
すいません。C言語までしか習っていないのでC言語のみでお願いします。

172:デフォルトの名無しさん
07/06/25 17:53:48
>>170
できればでいいのですが問1と問2にわけて頂けないでしょうか

173:デフォルトの名無しさん
07/06/25 18:15:22
>>172
URLリンク(kansai2channeler.hp.infoseek.co.jp)

174:デフォルトの名無しさん
07/06/25 18:29:03
>>128
URLリンク(kansai2channeler.hp.infoseek.co.jp)

175:デフォルトの名無しさん
07/06/25 19:18:34
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
 [3.3] 言語:C
[4] 期限:2007/6/26 10:30
[5] その他の制限:入力はfopen系関数を使用したものではなく、コマンドプロンプトから入力が保存されたテキストファイルを読み込む方法で行うようにしなければならない。

どんなに考えてもわかりません。わからないまま前日になってしまいました…
よろしくお願いします。

176:デフォルトの名無しさん
07/06/25 19:24:03
まいったな……何の問題なのかも分からないや。

177:デフォルトの名無しさん
07/06/25 19:59:11
[1] 授業単元:プログラム技術
[2] 問題文:
 (2)次に引数の順番を入れ替えて逆順に表示するプログラムに直せ。
  ソースプログラムを書き込んで提出せよ。*/

main(int argc , char *argv[]){
int i;

printf("%d argument(s).\n" , argc -1);
for(i=argc-1; i>=0; i--){
printf("argv[%d] : \"%s\"\n", i , argv[i]);
}
}


引数の順番を入れ替えると(char *argv[] , int argc)入力した文字は反映されず、argument(s).の前に
意味不明の数字が表示されて動作を終了してしまいます。
C:\c>smp2 a b c
3616655 argument(s).

ちなみに、引数を入れ替えなければ、逆に表示されます。

回答、よろしくお願いします。


[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
 [3.3] 言語:C
[4] 期限:2007/6/26
[5] その他の制限:

178:デフォルトの名無しさん
07/06/25 20:02:43
>>173
ありがとうございました!
いろいろ注文多くすいませんでした。

179:デフォルトの名無しさん
07/06/25 20:05:55
>>177
argumentでスレを検索汁

180:デフォルトの名無しさん
07/06/25 20:07:42
>>177 >>14

181:デフォルトの名無しさん
07/06/25 20:11:23
>>177
> 引数の順番を入れ替えると(char *argv[] , int argc)
っつか吹いたっw

182:177
07/06/25 20:16:15
>>179>>180
検索しましたが、何の参考にもなりませんでした。
まだ習い始めたばかりでよく分からないんです・・・

>>181
なにか根本的に間違っていたりしますか?
いや、冗談抜きでこの授業分からないんです・・・


183:デフォルトの名無しさん
07/06/25 20:18:02
>>182
言葉の意味を勘違いしているだけでしょ。main関数の中の引数の変数の定義を逆にしてどーすんだと。
仕様からして不適切だし、もしそれで答えろっていうなら、そんな講師は全世界レベルで非難を浴びますw

184:デフォルトの名無しさん
07/06/25 20:22:35
[1] 授業単元:情報処理
[2] 問題文:
 3つのベクトルA=(a1,a2,a3),B=(b1,b2,b3),c=(c1,c2,c3)がある。次のベクトル三重積に関する等式を示すプログラムを条件にしたがって作成せよ。
(A×B)×C=-(B,C)A+(A,C)B ここにA×Bは外積(A,B)は内積を示す。

データの入出力はファイルを使用
ファイル入出力に関してもサブルーチン化
ベクトルはそれぞれ一次元配列化
外積、内積ともにサブルーチンを作成し、外積は左辺、内積は右辺を計算できるようにすること

[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:g77 fortran
 [3.3] 言語:fortran
[4] 期限:2007/6/26
ぜひともおねがいします><

185:177
07/06/25 20:24:28
>>183
レスどうもです。なるほどorz

>次に引数の順番を入れ替えて

↑では、これは何をしろと言っているのでしょうか・・・。
う~ん、ますます分からなくなってきたorz


186:デフォルトの名無しさん
07/06/25 20:24:50
>言語:fortran
( ^ω^)・・・


187:デフォルトの名無しさん
07/06/25 20:26:37
>>185
問題文を全て一字一句違わず書けばいいよNE☆

188:デフォルトの名無しさん
07/06/25 20:28:15
>>160
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *p;
long l;
char buff[128];
FILE *fop = fopen("count.txt","r");
fgets(buff,sizeof(buff),fop);
l =strtol(buff,&p,10);
fclose(fop);
fop =fopen("count.txt","a+");
fprintf(fop,"\n%d",l+1);
return 0;
}

189:177
07/06/25 20:29:13
>>187
/*(1)次のプログラムを実行し結果を確認せよ。
 (2)次に引数の順番を入れ替えて逆順に表示するプログラムに直せ。
  ソースプログラムを書き込んで提出せよ。*/

問題文はコレで全てですorz


190:デフォルトの名無しさん
07/06/25 20:33:31
>>189
だから、受け継いだ値を逆から表示しろって問題なんでしょ?そういうこと。
括弧の中を逆にして受け継げって問題だったら全世界レベルで爆笑もんだよw
スイスのジュネーブにあるISO団体が、んだごるぁ?てめぇんとこは俺らが決めた標準はおろか
C言語の基本も理解していないおかしな授業をしてんのかと?国際的な裁判にかけられちゃいますよ?

191:デフォルトの名無しさん
07/06/25 20:35:29
>>177
まぁ、もし 入れ替え っていうなら、例えば引数を3つ受け継いだのなら
1番目と3番目を入れ替えるコードを書けと?そして argv[1] から順に表示しろと?
そういう問題ならそうすべきだが、そんなことせずに単純に逆から表示すりゃ良いでそ。

192:177
07/06/25 20:41:53
みなさんどうもです。そうですね、main()の中を入れえ変えるってのは
いくらなんでも無さそうですね。

有難うございました。


193:デフォルトの名無しさん
07/06/25 20:41:56
>>177
mainに関して、いろいろ実験してみるといい。
例えば、こんなのも駄目だ。
#include <stdio.h>

int main(char *argv[])
{
    printf("%s\n", argv[0]);
    return 0;
}


194:デフォルトの名無しさん
07/06/25 20:42:00
>>189
ほれよ。無駄な上に君の環境で動くかどうか分からないソース
(多分大丈夫だろうけど)

#include <stdio.h>
int main(int argc, char **argv)
{
    int i, j;
    char *tmp;
    printf("%d argument(s).\n" , argc -1);
    printf("argv[0] : \"%s\"\n", argv[0]);
    for (i = 1, j = argc - 1; i < j; ++i, --j) {
        tmp = argv[i];
        argv[i] = argv[j];
        argv[j] = tmp;
    }
    for (i = 1; i < argc; ++i)
        printf("argv[%d] : \"%s\"\n", i, argv[i]);
    return 0;
}

195:デフォルトの名無しさん
07/06/25 20:49:58
乱数を発生させて、1~100までを網羅するように表示せよ。(順番は問わない)

まったく、わからんよ。見かけによらず重い

196:デフォルトの名無しさん
07/06/25 20:55:07
>>195
日本語でおk

197:デフォルトの名無しさん
07/06/25 20:59:13
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define swap(type, x, y) do{ type temp = x; x = y; y = temp;}while(0)

int main(void)
{
    int x[100], i, j, k;
    srand((unsigned int)time(NULL));
    for(i = 0; i < 100; i++) x[i] = i + 1;
    for(i = 0; i < 1000; i++){
        j = (int)(((double)rand()/(RAND_MAX + 1))*100);
        k = (int)(((double)rand()/(RAND_MAX + 1))*100);
        swap(int , x[j], x[k]);
    }
    for(i = 0; i < 100; i++) printf("%3d ", x[i]);
    return 0;
}

198:デフォルトの名無しさん
07/06/25 21:04:26
>>195
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
int a[100],i,tmp,pos;
int a_sz=sizeof(a)/sizeof(a[0]);

srand((unsigned)time(NULL));
for(i=0; i<a_sz; i++)
a[i]=i+1;

for(i=0; i<a_sz; i++) {
pos=rand()%a_sz;
tmp=a[pos];
a[pos]=a[i];
a[i]=tmp;
}
for(i=0; i<a_sz; i++)
printf("%d ",a[i]);
return 0;
}

199:デフォルトの名無しさん
07/06/25 21:07:18
[1] 授業単元:プログラミングⅠ
[2] 問題文(含コード&リンク):
・ポインタを説明せよ。(Wikipedia,Google等参照不可。また書籍の参照も不可。自分の文章で答えること)
・構造体を説明せよ。(同上)
[3] 環境
 [3.1] OS:NULL
 [3.2] コンパイラ名とバージョン:NULL
 [3.3] 言語:C
[4] 期限:2007年06月25日(本日)
[5] その他の制限:同じ文章を見つけた場合は成績評価「不可」とする。

よろしくお願いします。

200:デフォルトの名無しさん
07/06/25 21:08:14
そっか、配列の要素を一回ずつ交換してやればいいんだな。

201:デフォルトの名無しさん
07/06/25 21:09:29
>>199
同じ学校の学生が見てたら終わりじゃん

202:デフォルトの名無しさん
07/06/25 21:09:52
>>199
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)
何も丸々言葉を写さなきゃおk。自分が理解して自分の言葉で書けばええやん。

203:デフォルトの名無しさん
07/06/25 21:10:22
OS NULLって何?

204:デフォルトの名無しさん
07/06/25 21:10:59
>>203
Oナニー Siてたら NULLヌルしちゃった、てへっ ♥

205:デフォルトの名無しさん
07/06/25 21:11:53
むずいね。

206:デフォルトの名無しさん
07/06/25 21:12:03
>>199
先生がこのスレを見ている可能性は考えなかったのか

207:199
07/06/25 21:16:56
>>206

先生、にちゃんねる大嫌いそうだったから、つい書いてしまいました。

208:デフォルトの名無しさん
07/06/25 21:19:10
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

Mission 1 で作成した「Projection1.java 」は「0 列目」と,
「引数で指定した列」をCSV 形式で出力しましたが, 今度は
「0 列目」と「引数で指定した列以外の全ての列」をCSV 形式で
取り出すプログラムに変更せよ.
それを「Quiz6.java 」というファイルとして作成し,
いつもの要領で,WebCT に添付ファイルとして提出.
「CSV.java 」または「Projection1.java 」をコピーして作
ると良い. クラス名は「Quiz6 」としてください

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: Java?
 [3.3] 言語: C
[4] 期限: 今日中に提出
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

209:デフォルトの名無しさん
07/06/25 21:20:17
class Quiz6{
public static void main(String[] args){
String[][] seiseki = {
{"名前"," 国語"," 算数"," 英語"},
{"あべ","45","56","98"},
{"いいだ","70","45","30"},
{"いしかわ","32","70","75"},
{"おがわ","90","10","42"},
{"かご","85","32","80"},
{"かめい","75","92","40"},
{"こんの","30","30","100"},
{"たかはし","85","20","50"},
{"たなか","80","38","68"},
{"つじ","20","60","75"},
{"にいがき","82","42","75"},
{"ふじもと","18","70","78"},
{"みちしげ","60","46","88"},
{"やぐち","28","99","82"},
{"よしざわ","76","45","80"}
};
int col = Integer.parseInt( args[0] );
quiz6(seiseki,col);
}

210:デフォルトの名無しさん
07/06/25 21:21:26
public static void Quiz6(String[][] table,int col){
int i,j;
for(i=0; i<table.length; i++){
System.out.println(table[i][0]+","+table[i][col]);
}
}
public static void printTable(String[][] table){
int i,j;
for(i=0; i<table.length; i++){
System.out.print(table[i][0]);
for(j=1; j < table[i].length; j++){
if( ★指定した列でなければ ){
     System.out.print(★);
}
}
System.out.print( "\n" );
}
}
}


★の箇所がわかりません。お願いします。

211:デフォルトの名無しさん
07/06/25 21:21:26
>>208
スレ違い

212:デフォルトの名無しさん
07/06/25 21:21:35
>>208
スレタイ100回読み直せ
ついでに>>1

213:128
07/06/25 21:28:26
>>157さん、>>174さんありがとうございました
参考にさせていただきます

214:デフォルトの名無しさん
07/06/25 21:29:58
こいつCとJAVAの区別ついてないんじゃないの?

215:デフォルトの名無しさん
07/06/25 21:31:07
なるほど
> [3.2] コンパイラ名とバージョン: Java?
> [3.3] 言語: C
だものな

216:デフォルトの名無しさん
07/06/25 21:32:59
[1] 授業単元:情報数理

[2] 問題文(含コード&リンク):
複素数型を扱うライブラリcomplex.cを後述するヘッダ
ファイル complex.hに基づいて作ってください。
さらにmain.cというファイルで適当な計算のサンプル
を作り#include “complex.h”として作成したライブラリ
が適切に動作するか検証してください。

typedef struct complex complex; /* complex 型の宣言 */
struct complex {
double real; /* 実部 */
double imag; /* 虚部 */
};
/* プロトタイプ宣言 */
complex cAdd(complex, complex); /* 複素数の加算 x+y */
complex cMult(complex, complex); /* 複素数の乗算 xy */
complex cDiv(complex, complex); /* 複素数の除算 x/y */
double cAbs(complex); /* 複素数の絶対値 |x| */
complex cSub(complex, complex); /* 複素数の減算 x-y */
void printComplex(complex); /* 複素数型データのstdoutへの表示出力 */

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] bcc32
 [3.3] C
[4] 期限:無期限

217:デフォルトの名無しさん
07/06/25 21:37:10
sageし忘れました・・・。

218:デフォルトの名無しさん
07/06/25 22:09:55
>>134 どうかお願いしますー

219:デフォルトの名無しさん
07/06/25 22:12:28
>>216

加算と乗算と除算と表示。
あとは他の人に任せた。

complex cAdd(complex x, complex y){/* 複素数の加算 x+y */
complex ret; /*戻り値*/
ret.real = x.real + y.real;
ret.imag = x.imag + y.imag;

return(ret);
}

complex cMult(complex x, complex y){ /* 複素数の乗算 xy */
complex ret; /*戻り値*/
ret.real = (x.real * y.real) - (x.imag * y.imag);
ret.imag = (x.real * y.imag) + (x.imag * y.real);
return (ret);
}

complex cDiv(complex x, complex y){/* 複素数の除算 x/y */
complex ret;/*戻り値*/
ret.real = ((x.real * y.real) + (x.imag * y.imag)) / ((y.real)*(y.real) + (y.imag)*(y.imag));
ret.imag = ((x.imag * y.real) - (x.real * y.imag)) / ((y.real)*(y.real) + (y.imag)*(y.imag));
return (ret);

}


void printComplex(complex x){ /* 複素数型データのstdoutへの表示出力 */
printf("実部 = %lf, 虚部 = %lf", x.real, x.imag);
}

220:デフォルトの名無しさん
07/06/25 22:19:12
>>218
何ゆえ>135は無視?

221:デフォルトの名無しさん
07/06/25 22:21:23
途中までってのも気持ち悪いから、全部やるか…。

>>216
math.hは使ってもいいの?
使っていいのなら平方根の計算が楽なんだけど…。

222:デフォルトの名無しさん
07/06/25 22:25:10
216です。はい、math.hを用いていただいても大丈夫です。ありがとうございます。

223:デフォルトの名無しさん
07/06/25 22:32:24
絶対値と減算。
math.hを使っていいのなら、累乗もpow()で表現すればよかったか…。まあいいや、合ってれば。
気に入らない箇所があったら適当に直しておいて。
とりあえず、x(4,2)とy(-2,3)で検証した。
よく分からないけど、これは学部一回生レベル?

double cAbs(complex x){ /* 複素数の絶対値 |x| */
return(sqrt((x.real)*(x.real) + (x.imag)*(x.imag)));
}

complex cSub(complex x, complex y){ /* 複素数の減算 x-y */
complex ret; /*戻り値*/
ret.real = x.real - y.real;
ret.imag = x.imag - y.imag;

return(ret);
}

224:デフォルトの名無しさん
07/06/25 22:46:01
あ、もう答えのソース出たんだ。
ソース書いてて、「公式のコピーをC言語として写してるだけでちょうどだるくなったところだった」

225:デフォルトの名無しさん
07/06/25 23:03:32
どうか>>175お願いしますー。
グラフにおける深さ優先探索です。

226:デフォルトの名無しさん
07/06/26 00:22:48
>>225
問1
URLリンク(kansai2channeler.hp.infoseek.co.jp)

dfs.exe -r のようにして起動すると再帰版
引数なしだとスタック版として動作する

見ればわかると思うが
dfs_recurse()が再帰版の関数
dfs_stack()がスタック版の関数な

超適当に作ったから確認は自分でやってくれ

227:デフォルトの名無しさん
07/06/26 01:48:12
[2] 問題文(含コード&リンク):
指定されたテキスト(data.txt)から1行ずつデータを取り込んでいき、
1行のデータが300文字以上の時はその行数と共にエラーメッセージを表示し終了。
また行頭に#が付いた行をコメント行として読み飛ばす。
[3] 言語: C
[4] 期限:6.26

よろしくおねがいします

228:デフォルトの名無しさん
07/06/26 01:57:42
>>227
data.txt の中身の例を詳しく

229:デフォルトの名無しさん
07/06/26 02:07:37
>>226
ありがとうございました!

230:デフォルトの名無しさん
07/06/26 02:12:06
>>227
#include<stdio.h>
#include<string.h>
#define N 300
int main()
{
FILE *fp;
int i = 0;
char data[N+1];
fp = fopen("data.txt","r");
while(fgets(data,N+1,fp) != NULL)
{
i++;
if(strlen(data) > N)
{
printf("行数:%d エラーメッセージ\n",i);
break;
}
if(data[0] != '#')
{
;
}
}
return 0;
}
てきとー。質問がてきとーなんだから回答もてきとーでおkだよな?

231:デフォルトの名無しさん
07/06/26 02:14:28
if(strlen(data) > N)

if(strlen(data) >= N)

300より上を300以上に変えたときにミスった

232:デフォルトの名無しさん
07/06/26 03:55:32
[1] プログラミング実習
[2] 問題文(含コード&リンク):
要素数nの整数型配列からk個の要素を選んで足し合わせ
bを超えない範囲での最大数を求めるプログラムを書け

ただしnは100程度、kは3程度、配列とbの値は適当に設定すること
[3] 環境 
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: BCC5.5
 [3.3] 言語: C
[4] 期限: 7月20日
[5] その他の制限:特にありません

よろしくお願いします

233:232
07/06/26 03:57:41
すいません
>>232のkは95程度の間違いです

234:デフォルトの名無しさん
07/06/26 04:07:13
>>232
> 最大数
何の最大数?合計?範囲を超えないbの要素の個数k?

235:232
07/06/26 05:35:30
>>234
足し合わせた合計です。
kは自分で適当に設定してください。

236:デフォルトの名無しさん
07/06/26 08:07:25
>>232問題文はちゃんと書きましょう。
>要素数nの整数型配列からk個の要素を選んで足し合わせ
>bを超えない範囲での最大数を求めるプログラムを書け
>ただしnは100程度、kは3程度、配列とbの値は適当に設定すること
要素数を100として、その配列の中身は何?
どうやって設定するの?rand()で良いの?
>kは95程度の間違いです
>kは自分で適当に設定してください。
せめてお前が設定しろよ

237:デフォルトの名無しさん
07/06/26 09:59:09
[1] 授業単元: プログラミング
[2] 問題文:
テキストファイルを読み込んで、"{"の数と"}"の数を数え、テキストファイルに出力するプログラムを作成しなさい.
課題実行においては以下の点に注意すること.
プログラム名は「chkpair」とすること.
ここで指定するデータ(ファイル),は存在するものとして仮定してよい.
読み込むテキストファイル名はプログラムを実行後にキーボードから指定する.
ファイル名の長さは最大で(マクロ定数)FILENAME_MAX文字までとしてよい.
出力するテキストファイルはchkpair.outとする.すでにchkpair.outがあり書き込み権限がある場合は、出力を上書きすること.
入力ファイルによって結果が異なるので、必ずしも実行例と同じ出力になる必要はない.

[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C


238:デフォルトの名無しさん
07/06/26 10:01:19
[1] 授業単元: プログラミング
[2] 問題文:
商品の在庫を管理するプログラムを作成する.在庫を扱う場合,在庫の平均単価(実数),
在庫数(整数)を管理する必要がある.本問題で作成するプログラムは,4回商品を入荷した時の平均在
庫単価と在庫総数を出力するものとする.商品入荷の時は,商品の単価と入荷数を順に入力していくものとする.このとき,平均単価と在庫数をひとつの構造体で管理するものとする.
変数を管理する構造体の名前をstock_t(この名前はtypedefで定義した名前を指す)とし,構造体のメンバを,
平均単価はdouble型とし,名前をpriceとする
在庫数はint型とし,名前をquantityとする
とする.
課題実行においては以下の点に注意すること.
プログラム名は「stock」とすること.
プログラム実行開始直後の在庫数は0とする
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
./stock
100.0 10
200.0 10
300.0 10
555.0 30
377.5 60/*←出力*/

239:デフォルトの名無しさん
07/06/26 10:21:46
>>237
#include <stdio.h>

#define FILENAME_MAX 128 // 環境によってはマズイ

int main(void)
{
    FILE *fpin, *fpout = fopen("chkpair.out", "w");
    int ch, count1 = 0, count2 = 0;
    char filename[FILENAME_MAX], buf[128];
   
    printf("filename for input : ");
    scanf("%s", filename);
   
    if((fpin = fopen(filename, "r")) == NULL)
        perror(filename), exit(1);
   
    while((ch = fgetc(fpin)) != EOF){
        if(ch == '{') count1++;
        else if(ch == '}') count2++;
    }
   
    sprintf(buf, "{ : %d\n} : %d\n", count1, count2);
    fputs(buf, fpout);
   
    fclose(fpin);
    fclose(fpout);
   
    return 0;
}

240:デフォルトの名無しさん
07/06/26 10:30:48
>>238
#include <stdio.h>

typedef struct tag_stock_t{
    double price;
    int quantity;
}stock_t;

int main(void)
{
    stock_t x[4];
    double price_sum = 0, price_ave;
    int i, num = 0;
   
    for(i = 0; i < 4; i++)
        scanf("%lf%d", &x[i].price, &x[i].quantity);
   
    for(i = 0; i < 4; i++){
        price_sum += x[i].price*x[i].quantity;
        num += x[i].quantity;
    }
   
    price_ave = price_sum/num;
   
    printf("%.1f %d\n", price_ave, num);
   
    return 0;
}

241:227
07/06/26 10:43:16
data.txtはこんなかんじです。

#正の数
133
535
846
167
335
#負の数
-647
-673
-384
-384
-373


242:デフォルトの名無しさん
07/06/26 10:47:29
>>239
> #define FILENAME_MAX 128 // 環境によってはマズイ
うむ、かなりまずい。stdio.h にマクロ定義されていると思われるんで
敢えてそこで定義しない方が良いかも

243:デフォルトの名無しさん
07/06/26 10:56:24
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
  3d^2x/dt^2+dx/dt+2x=4
x(t=0)=0
dx/dt(t=0)=0

上記の微分方程式をルンゲークッタ法を用いて解け
[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ名とバージョン: bcc32
 [3.3] 言語: C言語
[4] 期限: ([2007年6月25日まで
[5] その他の制限: なし

お願いします


244:デフォルトの名無しさん
07/06/26 11:16:50
[1] 授業単元:プログラミング1
[2] 問題文(含コード&リンク):
年と月を入力すると、カレンダーを表示するプログラムの作成。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.3
 [3.3] 言語: C
[4] 期限: 6月27日
[5] その他の制限:入門者らしいつくりでお願いします。

URLリンク(kansai2channeler.hp.infoseek.co.jp)
此所まではやってみたのですが、実行したときに" 日 月 火 水 木 金 土"
の部分しか表示されないので困っています。


245:デフォルトの名無しさん
07/06/26 11:41:21
>>244
曜日を得るのは標準関数を使えばいいのに……

それはさておき、
・monthは1~12なのに[0~11]の配列をそのまま参照している。
・「土」の後に改行していない。
のは問題かな。
後はもっと細かく見ないと判らん。

246:デフォルトの名無しさん
07/06/26 11:49:09
if(month==2&&(year % 4 == 0 && year % 100 != 0 || year % 400 == 0))
return(day[2]+1);
これねぇ、本当は良くない。できればうるう年なら day[2] = 29; そうでないなら
day[2]=28; にした方が良い。ここでは問題ないけど、何回か呼び出しをした場合
これだとうるう年に該当するたびに2月の日数が1ずつ加算されていくから。

247:デフォルトの名無しさん
07/06/26 11:51:01
何を言ってるんだ

248:デフォルトの名無しさん
07/06/26 11:51:24
>>246
もしもーし、脳味噌入ってますか~?

249:デフォルトの名無しさん
07/06/26 11:59:00
>>247
>>248
理解力のない馬鹿は視ねよw

250:デフォルトの名無しさん
07/06/26 12:00:26
>>245,246返信ありがとうございます。
指摘頂いた部分やその他修正したらカレンダーらしいものは表示が出るようになりました。

あとは1月2月3月らへんが多少ずれてるのですがこれはどう直したら良いでしょうか。

251:デフォルトの名無しさん
07/06/26 12:01:34
>249
頭が腐ってるのか目が腐ってるのか知らんが、もう一度よく見直せ。

252:デフォルトの名無しさん
07/06/26 12:03:51
>>249
マジで言ってるなら医者に行くか、取り敢えず寝てきたら? 100年くらい。

>>250
エスパーじゃないからどうずれるのか判らんし、そこがデバッグの楽しみだろう。
つーか、曜日の計算と改行する条件判断はあってる?
youbiが1のときは何曜日のつもり?

253:デフォルトの名無しさん
07/06/26 12:05:23
やった!おまいら釣られてやんのっ(プ
コードを見りゃ加算されるわけねーってバレバレじゃんw

254:デフォルトの名無しさん
07/06/26 12:08:09
いや、顔真っ赤にして後釣り宣言しなくていいから。

255:デフォルトの名無しさん
07/06/26 12:12:20
プププッ、ネタでボケて書いたことをマジに受けて茶化し、煽りレス入れている
こんな時間にいる引きこもりニーツがきめぇ~~んだよ(プ
俺?俺は大学の研究室からやw

256:デフォルトの名無しさん
07/06/26 12:14:46
どこの脳内研究室なんだか。

257:デフォルトの名無しさん
07/06/26 12:15:18
都内の某ランクSの大学ですが何か?

258:デフォルトの名無しさん
07/06/26 12:16:38
それじゃ、次のボケをお願いします。もうちょっと判り難いのがいいかな。

259:デフォルトの名無しさん
07/06/26 12:19:03
>257
本当にSランクなら、そもそも釣りなんて無駄なことはしない

260:デフォルトの名無しさん
07/06/26 12:20:19
>>244 を実行してみたけど、1日の表示がおかしい、曜日がきちっと算出されていない。
もうこんなんじゃ、月(付き)合ってらんね~

261:デフォルトの名無しさん
07/06/26 12:21:39
>>259
Sランク級の釣りにビビッてんだろぉ?Sランク級の釣りにお前がチビッているのがわかるぜ?

262:デフォルトの名無しさん
07/06/26 12:25:59
ランクSAITEIのランクSだなw

263:デフォルトの名無しさん
07/06/26 12:28:03
ちっちっち、違うぜ?Sugoi、Super、SutekiのSだぜ?お前らとは質が違うよ、質が。

264:デフォルトの名無しさん
07/06/26 12:31:44
[1] プログラミング基礎
[2] 以下のプログラムは,都道府県名(ローマ字)を入力すると,各都道府県の人口(人)と面積(km2)が列挙されたファイル prefectures.dat
からデータを読み込み,指定した都道府県の人口,面積およびそれらの比である人口密度を表示するプログラムである.
このプログラムを以下の例のように,人口,面積について 日本全体の総和に対する比率(百分率) も表示されるように書き換えよ.

実行例:
nodabls?% ./a.out[Enter]
chiba[Enter]
Statistics of the Chiba
Population = 6056159 (4.7 %)
Area (km^2) = 5156.19 (1.4 %)
Density (per km^2) = 1174.54

[3.1] Unix
[3.2] gcc
[3.3] c
[4] 2007年6月29日(金)



265:デフォルトの名無しさん
07/06/26 12:33:21
続き
プログラム
/* density.c: calculate population density for the given prefecture */
#include <stdio.h>
#include <strings.h>

int main(void)
{
char name[20], query[20];
int pop;
double area, den;
FILE *fp;

fp = fopen("prefectures.dat", "r"); /* ファイルオープン */
if (fp == NULL) { /* オープンに失敗? */
fprintf(stderr, "Can't open file!\n");
return (-1);
}

scanf("%s", query); /* 都道府県名を入力 */

den = -1.0;
/* 1行分の情報を読み込みつつループをファイル末尾まで繰り返し */
while (fscanf(fp, "%s%d%lf", name, &pop, &area) != EOF) {
if (strcasecmp(name, query) == 0) { /* 都道府県名が一致? */
den = pop / area; /* 人口密度 = 人口/面積 */
printf("Statistics of the %s\n", name);
printf("Population = %10d\n", pop);
printf("Area (km^2) = %10.2f\n", area);
printf("Density (per km^2) = %10.2f\n", den);
break; /* ループから抜ける */


266:デフォルトの名無しさん
07/06/26 12:35:32
}
}
fclose(fp); /* ファイルクローズ */

if (den < 0.0) { /* 都道府県名が正しくない? */
fprintf(stderr, "No such prefecture (%s)!\n", query);
return (-1);
}
return (0);
}


267:デフォルトの名無しさん
07/06/26 12:38:46
続き
prefectures.dat ファイル

Hokkaido 5627424 83453.04
Aomori 1436628 9606.33
Iwate 1385037 15278.40
Miyagi 2359991 7285.07
Akita 1145471 11612.11
Yamagata 1216116 9323.34
Fukushima 2091223 13782.48
Ibaraki 2975023 6095.58
Tochigi 2016452 6408.28
Gumma 2024044 6363.16
Saitama 7053689 3797.30
Chiba 6056159 5156.19
Tokyo 12570904 2186.90
Kanagawa 8790900 2415.41
Niigata 2431396 12582.37
Toyama 1111602 4247.22
Ishikawa 1173994 4185.22
Fukui 821589 4188.75
Yamanashi 884531 4465.37
Nagano 2196012 13585.22
Gifu 2107293 10598.18
Shizuoka 3792457 7779.46
Aichi 7254432 5155.84
Mie 1867166 5776.40
Shiga 1380343 4017.36


268:デフォルトの名無しさん
07/06/26 12:40:30
Kyoto 2647523 4612.94
Osaka 8817010 1892.86
Hyogo 5590381 8392.03
Nara 1421367 3691.09
Wakayama 1036061 4725.55
Tottori 606947 3507.17
Shimane 742135 6707.29
Okayama 1957056 7112.13
Hiroshima 2876762 8476.95
Yamaguchi 1492575 6110.45
Tokushima 809974 4145.10
Kagawa 1012261 1875.88
Ehime 1467824 5676.22
Kochi 796211 7104.66
Fukuoka 5049126 4971.01
Saga 866402 2439.23
Nagasaki 1478630 4092.44
Kumamoto 1842140 7403.68
Oita 1209587 6337.97
Miyazaki 1152993 7734.40
Kagoshima 1753144 9186.71
Okinawa 1360830 2271.30

長くなってすみません。よろしくお願いします。

269:デフォルトの名無しさん
07/06/26 12:44:11
次のjavaのプログラムをcに直してください

public class JobShop_EDD{
static int Job=3;
static int Machine=2;
static int K=30;
static int [] duedate={0,7,9,13,14,20};
static int [] [] process={{},{0,3,3,2,},{0,2,3,2},{0,2,3,3},{0,3,2,3},{0,2,2,2}};
static int [] [] route={{},{0,1,2,3},{0,2,1,3},{0,3,1,2},{0,3,2,1},{0,2,1,3}};
static int [] weight={0,2,2,2,2,2};



270:デフォルトの名無しさん
07/06/26 12:45:02
>>252
URLリンク(kansai2channeler.hp.infoseek.co.jp)
直してみたものですが。

月曜じゃないんですか?人伝えに聞いたので曖昧ですが

271:デフォルトの名無しさん
07/06/26 12:49:23
>>270 よくわからんから俺流ツェラーの公式を使ってやんよ

int youbi(int year,int month,int day)
{
if(month<=2) { year--; month+=12; }
return ( year + year/4 - year/100 + year/400 + (13*month+8)/5 + day )%7;
}

272:デフォルトの名無しさん
07/06/26 13:04:56
>>239
>>240
ありがとうございました。またなにかありましたらよろしくおねがいします。

273:デフォルトの名無しさん
07/06/26 14:56:55
>>264
問題が長い時は、ロダにtxtでうpしてリンク貼る
長いソースは拡張子を変えずにロダにうp
複数のレスに別けられると見辛い

>>269
メソッドが無くて、変数だけか。それを構造体にすればいいのか?


274:デフォルトの名無しさん
07/06/26 15:37:20
day[2]じゃねーだろ

275:デフォルトの名無しさん
07/06/26 15:57:25
>>264
URLリンク(kansai2channeler.hp.infoseek.co.jp)

276:デフォルトの名無しさん
07/06/26 16:00:47
264をよろしくお願いします。

277:275
07/06/26 16:05:51
>>264
URLリンク(kansai2channeler.hp.infoseek.co.jp)

278:デフォルトの名無しさん
07/06/26 16:07:10
>>271
有り難うございます。この部分はすり替えておきます。


279:デフォルトの名無しさん
07/06/26 16:11:48
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): コマンドラインで指定した二つのファイルを交換しろ
[3] 環境
 [3.1] OS: (Windows/Linux/等々) XP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Borland C++ Compiler 5.5
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 無期限
[5] その他の制限: 
 
URLリンク(kansai2channeler.hp.infoseek.co.jp)

なんかうまく動きません
助けてください


280:デフォルトの名無しさん
07/06/26 16:16:23
一時ファイル使っちゃ駄目なの?

281:デフォルトの名無しさん
07/06/26 16:21:31
while(fputc(*p,fp2) != EOF)
;
多分、*p++なんだろうな

282:デフォルトの名無しさん
07/06/26 16:21:49
>>232
題意に沿ってるかワカランが
URLリンク(kansai2channeler.hp.infoseek.co.jp)

283:デフォルトの名無しさん
07/06/26 16:22:45
訂正
while(fputc(*p,fp2) != EOF)
p++;
のがいいか

284:デフォルトの名無しさん
07/06/26 16:24:07
>>280
どうやって使うんですか?
ファイル入ったばかりでどうしていいのかさっぱりです・・・

>>281
ミスです・・・どうもです


285:デフォルトの名無しさん
07/06/26 16:30:42
w+ → r+

286:デフォルトの名無しさん
07/06/26 16:32:01
>>279
こんなモンでいいと思うよ
#include <stdio.h>
int main(int argc, char **argv)
{
    char *tmp;
    /* 引数の制限 */
    if (argc != 3) {
        printf("使用法:<プログラム名> <ファイル名1> <ファイル名2>\n");
        return 1;
    }
    tmp = tmpnam(0);
    if (!rename(argv[1], tmp))
        if (!rename(argv[2], argv[1]))
            if (!rename(tmp, argv[2]))
                return 0;
    perror("rename");
    return 1;
}

287:デフォルトの名無しさん
07/06/26 16:45:04
>>286
名前じゃなくて中身を交換するようにしたいんです

できれば>>279の間違ってる部分を修正してもらえるとありがたいです


288:デフォルトの名無しさん
07/06/26 16:56:08
修正は面倒臭いんだよな
一から作った方がよほど早い

289:デフォルトの名無しさん
07/06/26 16:59:28
そこをなんとか・・・

290:デフォルトの名無しさん
07/06/26 17:11:27
名前の交換も中身の交換も結果としては同じなんだから、簡単なほうがいいと思うけど。

291:デフォルトの名無しさん
07/06/26 17:16:30
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):キーボードから2つのファイル名を指定し、1つめのファイルの末尾に2つめのファイルの内容を追加するプログラムを作成せよ.
ファイル名は最大15文字とする.
ファイルの1行の最大文字数は31文字とする.
[3] 環境
 [3.1] OS: (Windows/Linux/等々) XP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 無期限
[5] その他の制限: 
 

292:デフォルトの名無しさん
07/06/26 17:23:14
>>279 ほれ
#include <stdio.h>
int copy(char *from, char *to)
{
    FILE *fi, *fo;
    int c;
    if ((fi = fopen(from, "rb")) == NULL)
        return perror(from), 0;
    if ((fo = fopen(to, "wb")) == NULL)
        return perror(to), fclose(fi), 0;
    while ((c = getc(fi)) != EOF) putc(c, fo);
    return fclose(fi), fclose(fo), 1;
}
int main(int argc, char **argv)
{
    char *tmp;
    int result;
    /* 引数の制限 */
    if (argc != 3) {
        printf("使用法:<プログラム名> <ファイル名1> <ファイル名2>\n");
        return 1;
    }
    tmp = tmpnam(0);
    result = (copy(argv[1], tmp) && copy(argv[2], argv[1]) && copy(tmp, argv[2]));
    remove(tmp);
    return !result;
}

293:286=292
07/06/26 17:34:21
>>279
モード"r+"で2つのファイル開いて一時ファイルを使わずに内容を交換しようという
志自体は面白いが、読み書きのたびにftell()/fseek()の類で読み書き位置を
移動する必要があるし、ファイルサイズが異なるファイルを交換する場合、
最後にファイルサイズを変更する(切り詰める)手段が必要だ。
大抵のシステムにはそうした手段が用意されているが、C標準には存在しない。

まあおとなしく>>286>>292のコードを使っとけ。

294:デフォルトの名無しさん
07/06/26 17:34:42
>>291
ほれ。
制約の意味がわからんのだが、ファイル名の最大長とか1行の最大長とかはなんかの縛りなのか?

#include <stdio.h>

#ifndef EOF
  #define EOF -1
#endif

int main(int argc, char **argv){
  char c;
  FILE *fp1 = NULL, *fp2 = NULL;
  if( (fp1 = fopen(argv[1], "ab")) == NULL ||
    (fp2 = fopen(argv[2], "rb")) == NULL)
    return -1;
  
  fseek(fp1, 0, SEEK_END);
  while((c = fgetc(fp2)) != EOF){
    fputc(c, fp1);
  }
  
  fclose(fp1);
  fclose(fp2);
  return 0;
}

295:デフォルトの名無しさん
07/06/26 17:37:02
>>293
デカい方のファイルに合わせてバッファ確保して中身入れ替えりゃいいんじゃねぇの

296:デフォルトの名無しさん
07/06/26 17:39:36
>>295
ファイルを計4回開く気があるのならそれでいいね。
最初に"rb"で開いて一気読みして次に"wb"ね。
質問者の意図とは異なると思うが。

297:デフォルトの名無しさん
07/06/26 17:44:28
なんで4回も開く必要がある
r+とfseek()使え

298:デフォルトの名無しさん
07/06/26 17:46:35
>>297
だから、それだとファイルを切り詰められないでしょ

299:デフォルトの名無しさん
07/06/26 18:14:18
freopenってのがあったような

300:デフォルトの名無しさん
07/06/26 18:23:30
>>291
copy /B file1+file2

301:デフォルトの名無しさん
07/06/26 18:25:29
>>294さん
テストの過去問題なんで、テストの問題のうちなんだと思います。

302:デフォルトの名無しさん
07/06/26 18:54:38
>>301
なるほど、指定のテキストファイル読めとかそーゆう縛りね
んじゃ要求通りだとこんな感じかね?

#include <stdio.h>
#ifndef EOF
  #define EOF -1
#endif
#define LINE_MAX      32
#define FILENAME_MAXLENGTH  15

int main(int argc, char** argv){
  char buf[LINE_MAX];
  FILE *fp1 = NULL, *fp2 = NULL;
  
  if( strlen(argv[1]) > FILENAME_MAXLENGTH || strlen(argv[2]) > FILENAME_MAXLENGTH)
    return -2;
  
  if( (fp2 = fopen(argv[2], "rb")) == NULL || (fp1 = fopen(argv[1], "ab")) == NULL)
    return -1;
  
  while(fgets(buf, LINE_MAX, fp2) != NULL) // 1行が32文字を超えると切り捨てられるけど
    fputs(buf, fp1);
  
  fclose(fp1);
  fclose(fp2);
  return 0;
}

303:デフォルトの名無しさん
07/06/26 19:39:19
[1] 授業単元: プロC
[2] 問題文(含コード&リンク):
1.まず、 pwd を実行し、成功すれば、 ls を実行する。
ただし、コマンドライン引数はすべてls にそのまま渡すものとする。
2.オプション -c があれば、 date を実行し、その後、 cal を実行する。
オプションを指定しなければ、 date だけを実行する。
ただし、オプション -z timezone があれば、
環境変数TZの値をtimezoneに設定して、各コマンドを実行する。
3.findコマンドを呼び出して、指定されたディレクトリ
(複数可。指定がない場合は、カレントディレクトリ)
以下にあるディレクトリ(指定されたディレクトリ自身も含む)を表示する。
[3] 環境
 [3.1] OS:Vine Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:来週まで
[5] その他の制限:よろしくお願いします。

304:デフォルトの名無しさん
07/06/26 19:43:44

<サンプルプログラム1>
URLリンク(www.cc.kyoto-su.ac.jp)
<サンプルプログラム2>
URLリンク(www.cc.kyoto-su.ac.jp)

305:デフォルトの名無しさん
07/06/26 19:45:37

書き忘れです(汗)
pwdを実行し、成功すれば、その後、ls -lを実行するプログラムです



306:デフォルトの名無しさん
07/06/26 19:56:11
>>303-305
日本語でおk

307:デフォルトの名無しさん
07/06/26 20:19:36
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
学生のデータベースを作成する。
まずは学生の名前と大学名、学科、生年月日(年はintで月日はshortで定義する)、趣味で構成される構造体を作る。
これらは全て実際には存在するような名前にしないこと。
初めに学生5人が与えられている。->URLリンク(kansai2channeler.hp.infoseek.co.jp)

プログラムは、0から3のうちいずれかを入力し0が入力されるまでプログラムを繰り返す。
0を入力したときプログラムを終了する。
1を入力したときすべての学生をバイナリモードでテキストファイルに出力し、画面上にも出力する。
2を入力したとき何番目かの学生(1と入力したら1番目という風に)を画面上に出力する。
3を入力したとき新しい学生を追加する(名前,大学名,生年月日,趣味)。

またメモリーはでいつでも1人分の学生のデータしか保持しない。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 6/27
[5] その他の制限: 特になし
よろしくお願いします。

308:デフォルトの名無しさん
07/06/26 20:36:36
[1] 授業単元:プログラム技術
[2] 問題文(含コード&リンク):
1.正整数n を入力し,2 ~ n の範囲にある素数およびその個数を求めるプログラムを作成
しなさい.
2.年(西暦),月,日を入力したとき,入力した年月日の曜日を出力するプログラムを作成
しなさい.
3.下の表のような時間を入力したとき,その総時間を求めるプログラムを作成しなさ
い.なお,表のデータは例なので,汎用的に扱えるように,数と
時間は実行時に任意の数を入力すること.


1 動画50 分08 秒
2 動画29 分38 秒
3 動画15 分49 秒
4 動画22 分50 秒
5 動画11 分02 秒


[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限
来週の火曜辺りまで
[5] その他の制限
なし

よろしくお願いします

309:デフォルトの名無しさん
07/06/26 20:57:36
>>302さんありがとうございました。テストできるようにがんばります。

310:デフォルトの名無しさん
07/06/26 20:59:31
>>308
3は総時間をどう表示すればいい?
合計○○時間△△分□□秒でおk?


311:デフォルトの名無しさん
07/06/26 21:03:40
あと3の時間は
どう入力させればいいんだ?
>>310における○○、△△、□□をそれぞれ入力してもらう形?
それとも、「* 動画** 分** 秒」を全部入力させる形?


312:デフォルトの名無しさん
07/06/26 21:24:41
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
2つのベクトル要素の値をキーボードから読み込み、その内積を計算するプログラムを
作りなさい。要素の値はdouble型であるものとする。
・ベクトルの要素数の指定はオブジェクト形式マクロ(#define指令)で行う(値は6とする)
・ベクトルの要素の値はキーボードから読み込む
・データの読み込みや内積の計算などの繰返し部分はfor文で行う
・結果は、読み込んだ各ベクトルの値を横ベクトルとして表示した後、その次の行に出力する
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C言語
[4] 期限: 6月27日まで

全くわかりません 誰か助けてください

313:308
07/06/26 22:01:13
>>311
○○、△△、□□をそれぞれ入力してもらう形です。
総時間は△△分□□秒でお願いします。
○○時間△△分□□秒でも問題はないとは思いますが・・・・

314:デフォルトの名無しさん
07/06/26 22:14:13
>>312
URLリンク(kansai2channeler.hp.infoseek.co.jp)

315:デフォルトの名無しさん
07/06/26 22:16:32
あー
できてから気づいたけど、
ELEMENTを可変にするならprintfでベクトルを出力してるところは
もっとちゃんと書けばよかったな
カッコとかが汚いと思ったからこんな風に書いたけど

316:デフォルトの名無しさん
07/06/26 22:20:48
>>313
まあ時間あるみたいやし
ゆっくりやらせてもらうわ
他の人でやったるって人が出てきたら俺にかまわずやってください

317:デフォルトの名無しさん
07/06/26 22:29:24
>>314
ありがとうございました
ついでに多次元配列をつかったらどんなプログラムができるんですか?

318:デフォルトの名無しさん
07/06/26 22:31:20
見た目がちょっとよくなるだけで
プログラム自体はほとんど変化しないからあんまり気にしない方がいい

319:デフォルトの名無しさん
07/06/26 22:34:25
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
same.cをファイル入出力対応版に変更しなさい。
same.c →URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 27日正午まで
[5] その他の制限: 特にナシ

実行例
[home@***~/home]% cat filesame.in
ABC
ABC
[home@***~/home]% ./filesame
filename: filesame.in
[home@***~/home]% cat filesame.out
yes
[home@***~/home]%

よろしくお願いします。

320:デフォルトの名無しさん
07/06/26 22:55:27
[1] 授業単元: C言語
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc32
 [3.3] 言語: C
[4] 期限: 27日まで
[5] その他の制限:再帰法まで習った
よろしくお願いします。



321:デフォルトの名無しさん
07/06/26 23:22:46
[1] 授業単元: C言語
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C
[4] 期限: 27日まで
よろしくお願いします


322:デフォルトの名無しさん
07/06/26 23:45:03
>>306
おいっ、日本語が読めない在日が何こんなところで日本人の相手をしてんだ?
とっとと祖国へ帰れよ。お前みたいな役立たずはここには必要はない。

323:デフォルトの名無しさん
07/06/26 23:47:07
このスレから役立たずを取り除いたら、何が残るんだっていうんだ

324:デフォルトの名無しさん
07/06/26 23:48:55
>>321
キーボードから読み込む方法?
それって代入に含まれるんじゃないか?

とりあえず
・初期化
int array[] = {0, 1, 2, 3, 4, 5};
要素数を指定しなくても初期化子の数で勝手に合わせてくれる。
固定的なデータを保持する用途とかが一般的なんじゃないかな。

・代入
array[0] = 0;
変動的で、同じような系統のデータをまとめて保持するのに使うのが一般的。
ランダムアクセスには強いが、データの追加と削除に弱い。

まぁconstでもつけなきゃ初期化した配列も普通に代入できるから結局あんま差はない希ガス。

こんなんでいいの?

325:デフォルトの名無しさん
07/06/26 23:49:38
>>320
目に付いた(2)だけ

#include <stdio.h>

double pow_f(double x, int p) {
double f;
if(p==0) return 1;
f = pow_f(x, p-1) * (x-p+1);
return f;
}

int main(void) {
double x;
int p;
scanf("%lf %d",&x ,&p);
printf("%.1f",pow_f(x, p));
return 0;
}

326:デフォルトの名無しさん
07/06/26 23:50:35
>>323
宿題にスマートに答える役立つ人材

327:デフォルトの名無しさん
07/06/26 23:52:59
役立たずがいなくなるということは宿題丸投げ自体が無くなるということだから・・・
人がいるのかいないのか分からないままでdat落ちしてしまうね

328:デフォルトの名無しさん
07/06/26 23:54:30
>>327
出題者はスレの維持に役立っていますので
役立たずではありません

329:デフォルトの名無しさん
07/06/26 23:55:57
もともとそういう趣旨のスレだしな

330:デフォルトの名無しさん
07/06/27 00:02:10
>>320
全部再起なんか使わなくてもできる
非常に悪い再起の例

再起は必要以上にスタック喰い潰すから使わないで済むなら極力使わないほうがいい
って、なんの答えにもなっとらんな

331:デフォルトの名無しさん
07/06/27 00:03:30
綺麗なソースを作ろうと思い、セオリーを守ってる(グローバル変数を極力使わないようにしてる・・・etc)が
実に汚いソースになる。
汚いと分かっていながらどこをどの様に修正すれば良いのか皆目検討つかないから困る。

助けて・・・。

332:デフォルトの名無しさん
07/06/27 00:08:28
>>324
ありがとう
できればもう少し詳しく説明して欲しいです

333:デフォルトの名無しさん
07/06/27 00:17:42
>>331
広域変数は悪じゃない
staticで外部モジュールから参照できないようにするとか
きっちり管理さえすれば忌み嫌うものではない
むしろ広域変数を無理に避けようとして余計マズい設計になることの方が、本来避けるべき

>>332
これ以上詳しく説明しろといわれてもな
Cで使ってる以上は、constにさえ気をつければ初期化も代入もそんな大層な差はない
C++だとまた話が変わってくるんだけど
具体例見るのが一番手っ取り早いから、いろいろ調べてみ

334:デフォルトの名無しさん
07/06/27 00:18:49
>>308 1と2をとりあえず先に
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)

335:332
07/06/27 00:26:28
>>333
わかりました
色々ありがとうございました!


336:331
07/06/27 00:28:34
>>333
うん。
今日、指摘された。
staticのスコープは定義された箇所のみが有効範囲だよね?
でもアドレス渡ししたらスコープ外の場所でも値を書き換えたり出来る?

多分、出来たとしてもやっちゃ駄目なんだろうけど・・・。




337:デフォルトの名無しさん
07/06/27 00:38:00
どうでもよいが>>331よ。それは宿題の話なのか。
C言語に関する一般的な相談事ならスレ違いだぞよ。

338:デフォルトの名無しさん
07/06/27 00:41:11
>>336
そう、staticは参照の範囲を同一のファイル内だけに限定できる。
そして、指摘の通り

int g_data = 0;  // 広域変数
int *getGlobal(void) { return &g_data; }

みたいなのも、手法としてはある。
利点は、広域変数をモジュールの中に置ける事で、Cでオブジェクト指向もどきな設計ができること。
反面、C++のgetterと違ってポインタを取得できてしまうから、それを通じて外から値を書き換えてしまうこともできる。
でもgotoと一緒で使いどころさえ間違えなければ大丈夫。

339:デフォルトの名無しさん
07/06/27 00:52:26
>>320
再帰で(3)
int arr_max_pos(int arr[], int n){return n?arr[n-1]>arr[arr_max_pos(arr,n-1)]?n-1:arr_max_pos(arr,n-1):0;}

340:デフォルトの名無しさん
07/06/27 00:57:16
>>320 (1)
int div_pow(int n,int p){return n%p?0:div_pow(n/p,p)+1;}
int div_quo(int n,int p){return n%p?n:div_quo(n/p,p);}

341:デフォルトの名無しさん
07/06/27 00:59:12
>>308
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)

342:デフォルトの名無しさん
07/06/27 06:44:44
関数内で宣言したstatic変数(下の例ではa__)を自在にいじりたいなら…
下品だけどねw

static int a;

int hoge(){
  static int a__ = 123;
  a = a__;
  return(0);
}

int getglobal(){
  a+=10;
  return(a);
}

int main(){
  hoge();
  printf("%d", getglobal());
  return(0);
}

343:デフォルトの名無しさん
07/06/27 06:50:26
意味分らん

344:デフォルトの名無しさん
07/06/27 07:25:54
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):
以下の式のおいて、刻み幅が0.2のときの解析解をオイラー法で求めよ。

y(0)=0 y'(0)=0
y'=z
z'=-z-2y+cosx

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc-2.95
 [3.3] 言語: C、C++どちらでも良い
[4] 期限:6/27
[5] その他の制限:

お手上げ状態です。よろしくお願いします。

345:デフォルトの名無しさん
07/06/27 08:43:25
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 多次元配列
次の表は今年の全日本大学野球選手権における
早稲田大学の試合結果である。

2回戦 1 2 3 4 5 6 7 8 9
 早稲田大 0 0 1 0 1 0 0 0 0
九州国際大 0 0 0 0 0 0 0 0 1
準々決勝
 早稲田大 0 5 4 0 0 0 0 0 7
関西国際大 0 0 0 0 3 0 0 0 0
準決勝
  創価大 1 0 0 0 0 0 0 0 0
 早稲田大 6 0 0 1 0 1 0 2 0
決勝
 早稲田大 1 0 0 2 0 0 1 0 0
  東海大 0 0 0 0 0 1 0 0 0
それぞれの試合について各回の得点と失点(表裏ではないので注意)を 2×9の2次元配列に格納するものとする。
試合分のデータがあるので、4×2×9の3次元配列scoreを用意して、得失点を配列の宣言と同時に初期値として格納しなさい。
また以下の内容を計算して出力しなさい。
4試合の平均得点と平均失点
各回ごと(1から9回)の4試合の平均得点と平均失点
多次元配列の要素を参照するには‥多重ループを使う
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C [4] 期限:来週まで
[5] その他の制限: 特になし
お願いします


346:デフォルトの名無しさん
07/06/27 09:11:52
クソ簡単やないか
なめとんか

347:デフォルトの名無しさん
07/06/27 09:15:34
>>344
y' = z とう条件は不要なんじゃないかと思うが

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

#define N 100

double f(double y, double z)
{
 return -z - 2.0 * y + cos(y);
}

int main(void)
{
 double y[N], z[N], dx = 0.2;
 int i;

 y[0] = z[0] = 0.0;

 for (i = 0; i < N; i++) {
  y[i] = y[0] + i * dx;
  z[i + 1] = z[i] + dx * f(y[i], z[i]);
  printf("y = %f, z = %f\n", y[i], z[i]);
 }

 return 0;
}

348:デフォルトの名無しさん
07/06/27 09:20:12
>>347
師匠。

349:デフォルトの名無しさん
07/06/27 09:23:34
やべえ
 double y[N], z[N], dx = 0.2;

 double y[N + 1], z[N + 1], dx = 0.2;
に直しておいてくれ。

あとf()のcos(y)は題意ではcos(x)になっているが間違いだよな?

350:デフォルトの名無しさん
07/06/27 09:24:42
問題には cosx ってあるが cos y で宜しいんかな?

351:デフォルトの名無しさん
07/06/27 09:27:55
cos x だったとしたら解けん。

352:デフォルトの名無しさん
07/06/27 10:40:57
>>319
#include <stdio.h>
int mycmp(char *m1 ,char *m2)
{
while (*m1 != '\0')
if(*m1++ != *m2++)
return 0;

if(*m1 == *m2)
return 1;
}
int main(int argc, char *argv[])
{
char m1[256], m2[256];
FILE *fp;
fp = fopen(argv[1], "r");
fgets(m1,256,fp);
fgets(m2,256,fp);
fclose(fp);
if(mycmp(m1, m2))
puts("yes");
else
puts("no");
return 0;
}
エラー処理はしてないにょ。動かしてもいないけど、これ以上は自分で。
ちゃんと授業を受けるか、さもなくばIT関連の就職先はあきらめろ。


353:デフォルトの名無しさん
07/06/27 11:36:26
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
「在庫問題」
ある倉庫を考える。この倉庫は営業開始時において、毎日Sトンの初期在庫量を有する。1日の注文量rが確率的に発生するとき、営業終了時間の最終在庫量(S>rの場合)、不足量(S<rの場合)とする。
注文量rが正規分布N(100,20^2);すなわち平均100、標準偏差20の正規分布に従う乱数と仮定する。

平均100、標準偏差20の正規分布に従う乱数は以下で求められる。
0以上、1以下の一様実数乱数をUiとする。それを次式に代入することによって、標準正規乱数Xとなる。
X=U1+U2+……U12-6
Xを次式に代入することによってY(標準偏差20の正規分布に従う乱数)となる。
Y=20X+100

維持費:1トンにつき120円(最終在庫量に対して)
品切損失:1トンにつき180円(不足量に対して)
補充経費:1回につき15000円(補充量に依存せず)
総経費:維持費+品切損失+補充経費

(1)補充発注に関して、自分の採用した決定方法を述べよ。
   これは、
   2日目以降の初期在庫量が毎回200トンになるようにする。
   例えば、第一日目の初期在庫量が125トンだから、その日の注文量が100だとすると125-100=25で最終在庫量25トンだから、その日の
   補充量は200-25=175で175トン発注するというふうにする。
(2)そのような補充を行い、1000日間の、初期在庫量、最終在庫量、補充量、総経費について、1日あたりの平均値を求めよ。
   なお、第一日目の初期在庫量を125トンとする。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: borland
 [3.3] 言語: どちらでも可
[4] 期限: 2007年06月28日12:00まで
[5] その他の制限: なし

度々すいませんm(__)m

354:デフォルトの名無しさん
07/06/27 13:07:42
[1] 授業単元:プロC
[2] 問題文(含コード&リンク):
1.まず、 pwd を実行し、成功すれば、 ls を実行する。
ただし、コマンドライン引数はすべてls にそのまま渡すものとする。
2.オプション -c があれば、 date を実行し、その後、 cal を実行する。
オプションを指定しなければ、 date だけを実行する。
ただし、オプション -z timezone があれば、 環境変数TZの値をtimezoneに設定して、各コマンドを実行する。
3.findコマンドを呼び出して、指定されたディレクトリ
(複数可。指定がない場合は、カレントディレクトリ)
以下にあるディレクトリ(指定されたディレクトリ自身も含む)を表示する。
↓サンプルプログラム
pwdを実行し、成功すれば、その後、ls -lを実行するプログラム
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Vine Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:来週まで
[5] その他の制限:なし

よろしくお願いします。

355:デフォルトの名無しさん
07/06/27 13:35:02
[1] 授業単元:アルゴリズム論
[2] 問題文(含コード&リンク):
 インサートソートに関する問題
 左からつめる方式の昇順アルゴリズムである次のソートプログラムを、右からつめる
降順に書き直せ。
ソートプログラム
 URLリンク(kansai2channeler.hp.infoseek.co.jp)
 inp1.datというファイルには、20個の2桁の整数が入っているものとする。
[3] 環境
 [3.1] OS:Windows XP
 [3.3] 言語:C言語
[4] 期限:6月28日(木)まで

 お願いします


356:バケツ
07/06/27 13:50:59
[1] 授業単元:C言語演習2
[2] 問題文(含コード&リンク):
バケツ法-並び替え(詳細は後述)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ:gcc
 [3.3] 言語:C
[4] 期限: できれば早いほうがいいです。
[5] その他の制限: 特にありません

357:バケツ
07/06/27 13:53:03
aka
ao
kuro
これら三つのデータをアルファベット順に並び替える。
この場合、akaの後ろには半角スペースが1つあり、
aoの場合は2つあると考えて並び替える。

1  2  3  4
ao ao aka ao
aka aka ao aka
kuro kuro kuro kuro

優先順位としては
スペース>アルファベットです。


358:バケツ
07/06/27 13:55:07
1は語尾の文字列に焦点を合わせ、
2は前から三番目、3は前から二番目、4は頭文字に焦点を合わせて並び替える。

説明すると、1ではaoはスペース、akaはスペース、kuroはoなので
上記のような順になる。

このようにして最終結果(頭文字の並び替え)がでるまでこの作業を繰り返し、
出力する。

説明不足かもしれませんが、よろしくおねがいします
katori
nakata
murata
hanada
sakata
tanaka
を配列の要素として作成してください。

scanfを用いて作成してもらってもかまいません。

359:デフォルトの名無しさん
07/06/27 14:00:26
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
 次のプログラムをユーザー関数を用いて、階層化せよ。
 URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:WindowsXP
 [3.3] 言語:c言語
[4] 期限:6月28日(木)

 リンク先のプログラムは一つ前の問題を自分で書いたものですが、
コンパイルできることを確認しています。
 よろしくお願いします。

360:TKO48
07/06/27 14:20:23
ゲーミング
今回からあつかう問題は営業時間から翌日の営業時間の間の補充量を
可変とし、補充量決定方法をけんとうする。
もっとも単純な考え方として①営業終了時の最終在庫量②経費の合計
から翌日の初期在庫量(補充量)を決定
ただし、今回は補充発注1回ごと(補充量によらない)に一定の経費を
支払うものとする

発注する経費は以下のとうりである
維持費:1tにつき120円(最終在庫量にたいして)
品切れ損失:1tにつき180円(不足量にたいして)
補充量:1回につき15.000円(補充量によらない)




課題
 注文量が正規分布N(100,20^2);すなわち平均100,標準偏差20
の正規分布に従う乱数と仮定し、毎の補充量を入力することで1000日間
の経過を調べる。
(1)補充発注に関して自分の採用した決定方法を述べよ。
(2)そのような補充を行い、初期在庫量、最終在庫量、補
   充量、総経費について、1日あたりの平均値を求めよ。なお、第1日の
   初期在庫を125tとする。


お願いします。。。(´・ω・`)


361:デフォルトの名無しさん
07/06/27 15:03:15
>>353
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int xrand()
{
    double i, x = 0;
    for (i = 1; i <= 12; i++)
        x += (double)rand() / RAND_MAX;
    return 20 * (x - 6) + 100;
}
int main(void)
{
    double fstock_sum = 0, estock_sum = 0, supply_sum = 0, cost_sum = 0;
    int i, stock = 125, supply;
    srand(time(0));
    for (i = 0; i < 1000; i++) {
        fstock_sum += stock;
        stock -= xrand();
        cost_sum += (stock > 0 ? 120 : 180) * abs(stock) + 15000;
        if (stock < 0) stock = 0;
        estock_sum += stock;
        supply = (stock > 200 ? 0 : 200 - stock);
        supply_sum += supply;
        stock += supply;
    }
    printf("平均初期在庫: %g\n", fstock_sum / 1000);
    printf("平均最終在庫: %g\n", estock_sum / 1000);
    printf("平均補充量 : %g\n", supply_sum / 1000);
    printf("平均総経費 : %g\n", cost_sum / 1000);
    return 0;
}

362:308
07/06/27 16:00:14
>>341
ありがとうございます。危うく最後の動画のコメントの奴そのままで出しそうでした。

363:デフォルトの名無しさん
07/06/27 16:05:52
>>353
>>361
ありがとうございます!m(__)m
本当に悪いんですが、補充発注を1日置きごとすることは出来ませんか?
すいません…
1日目にしたら、次は3日目、次は5日目というふうに


364:デフォルトの名無しさん
07/06/27 16:07:05
>>360
>>353と同じ問題だな。
>>353は(1)について、補充方法を自分で書いている。その場合の解が>>361ね。
君はどうしたいのかな。それも回答者に決めて欲しいの?

365:デフォルトの名無しさん
07/06/27 16:13:15
>>363
- int i, stock = 125, supply;
+ int i, stock = 125, supply, f = 0;
-----------------------------------------
        estock_sum += stock;
+       if (!f) {
            supply = (stock > 200 ? 0 : 200 - stock);
            supply_sum += supply;
            stock += supply;
+       }
+       f = !f;
    }



366:デフォルトの名無しさん
07/06/27 16:25:30
これの戦略を無駄に考えてみたけど、
一切補充しないという、
ずっと品切れ作戦が実装の楽さの割りに結構いい感じという結論が出た。

367:デフォルトの名無しさん
07/06/27 16:43:31
>>365
早速ありがとうございます!
助かりました

368:デフォルトの名無しさん
07/06/27 17:03:56
>>367
すまん。補充しない日も補充費を計上してたので修正。
>>366のレスで気づいたw

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

369:デフォルトの名無しさん
07/06/27 17:12:05
>>368
ありがとうございます!
こちらこそスイマセンでした

370:デフォルトの名無しさん
07/06/27 17:12:47
さらにすまん。
- cost_sum += 15000;
+ if (supply > 0) cost_sum += 15000;


吊ってくる。

371:デフォルトの名無しさん
07/06/27 17:20:38
二分木を表示するプログラムについて教えてください。

なんらかの木を作ったあと、その木へのポインタを引数にして
木を表示したいと思っています。単純にデータだけを、行きがけ順などで
表示するのではなくぱっと見で木とわかるようなものがいいです。

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

372:デフォルトの名無しさん
07/06/27 17:31:29
>>370
いえいえ、とんでもないです!
頼んでいるのは私の方なんですから

373:デフォルトの名無しさん
07/06/27 18:45:07
fmod()を使って10進数を2進数に変えたいんです。C++
なかなかうまくいかなくて

374:デフォルトの名無しさん
07/06/27 18:58:52
>>371
graphviz用の入力ファイル(ただのテキスト)を作るのが楽かも
↓みたいな感じで
でも、宿題だとそれじゃ不可かな

#include <stdio.h>
typedef struct node {
    char *label;
    struct node *left, *right;
} node;
void tprint(node *n) {
    if (!n) return;
    if (n->left)
        printf("%s -> %s;\n", n->label, n->left->label);
    if (n->right)
        printf("%s -> %s;\n", n->label, n->right->label);
    tprint(n->left);
    tprint(n->right);
}
int main() {
    struct node tree[] = {
        { "a", &tree[1], &tree[2] }, { "b", &tree[3], &tree[4] },
        { "c", &tree[5], &tree[6] }, { "d", &tree[7], 0 },
        { "e", 0, &tree[8] }, { "f", 0, 0 }, { "g", 0, 0 },
        { "h", 0, 0 }, { "i", 0, 0 }
    };
    printf("digraph test {\n");
    tprint(&tree[0]);
    printf("}\n");
}

375:デフォルトの名無しさん
07/06/27 19:01:31
あの・・・
>>354
をお願いできますか?

376:デフォルトの名無しさん
07/06/27 19:05:51


            ヾヽ'::::::::::::::::::::::::::'',    / 時 .あ ま ヽ
             ヾゝ:::::::::::::::::::::::::::::{     |  間 .わ だ  |
             ヽ::r----―‐;:::::|    | じ て    |
             ィ:f_、 、_,..,ヽrリ    .|  ゃ る     |
              L|` "'  ' " ´bノ     |  な よ     |
              ',  、,..   ,イ    ヽ い う    /
             _ト, ‐;:-  / トr-、_   \  な   /
       ,  __. ィイ´ |:|: ヽ-- '.: 〃   `i,r-- 、_  ̄ ̄
      〃/ '" !:!  |:| :、 . .: 〃  i // `   ヽヾ
     / /     |:|  ヾ,、`  ´// ヽ !:!     '、`
      !      |:| // ヾ==' '  i  i' |:|        ',
     |   ...://   l      / __ ,   |:|::..       |
  とニとヾ_-‐'  ∨ i l  '     l |< 天  ヾ,-、_: : : .ヽ
 と二ヽ`  ヽ、_::{:! l l         ! |' 夂__ -'_,ド ヽ、_}-、_:ヽ





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