C/C++の宿題を片付けます 91代目at TECH
C/C++の宿題を片付けます 91代目 - 暇つぶし2ch353:デフォルトの名無しさん
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         ! |' 夂__ -'_,ド ヽ、_}-、_:ヽ




377:デフォルトの名無しさん
07/06/27 19:08:37
>>373
なんでfmod()使わないといけないの?

378:デフォルトの名無しさん
07/06/27 20:04:00
>>359
中途半端になってしまった
URLリンク(kansai2channeler.hp.infoseek.co.jp)

379:デフォルトの名無しさん
07/06/27 20:07:46
>>362 >>308
>>341 の3つめのreturn 0; の前に free(mvt); を忘れとった・・・もう見てへんよな・・・まぁ良いっか・・・
知~らねっ ^^;

380:デフォルトの名無しさん
07/06/27 20:51:20
fmod()を使うよう指定されました(泣)

381:デフォルトの名無しさん
07/06/27 21:13:32
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 下記のプログラムで
a[3][3] = {{2.4, -3, 6.1}, {-1.1, 2, 3.5}, {0.5, 0, 3.2}}
b[3][3] = {{1.9, -4.7, 2.5}, {2, 0.9, 5.4}, {2.7, 0.6, 3.5}}
c[3][3] = {{-2, -3.5, 0}, {1.4, 7.3, -1}, {2.1, 0.4, 6.2}}
に置き換えたとき、この要素で与えられる行列を求め出力するプログラムを作成せよ。
#include <stdio.h>
int main(void)
{
int i, j, n;
double b[3][3] = {{3.2, -1.5, 3.9}, {3.8, 4, -1.8}, {1.9, -3, 0}};
double c[3] = {-5, 2.7, 1.5};
double a[3] = {1, 5.1, 6.2};
n = 3;
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
a[i] +=b[i][j] * c[j];
}
printf("y[%d]=%f\n", i, a[i]);
}
return 0;
}

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 6月30日16:30まで
すみません、よろしくお願いします。

382:デフォルトの名無しさん
07/06/27 22:50:20
>>371 どっかの木構造を解説してるサイトにあったのをパクったやつ
typedef struct tagTree{
    int no;
    struct tagTree *left, *right;
}Tree;

void PrintTree(Bin *root, int depth)
{
    depth++;
    if (root != NULL) {
        int i;
        PrintTree(root->left, depth);
        for (i = 0; i < depth; i++)
            printf("   ");
        printf("%3d\n", root->no);
        PrintTree(root->right, depth);
    }
}

mainで呼ぶときはdepthを0にすればおk

383:デフォルトの名無しさん
07/06/27 22:53:56
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
getchar関数を使用し、コマンドラインからの数字を10回入力し、
入力の中でもっとも大きな数字を表示しなさい。
※入力桁数のエラーについて対処する事

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: CPAD、LSI C-86 Ver 3.30
 [3.3] 言語: C
[4] 期限: できれば今週中
すみません、どなたか分かる方、よろしくお願いします。

384:デフォルトの名無しさん
07/06/27 22:57:07
>>383
実行例くらい書いてくれ。

385:382
07/06/27 23:00:19
>>382
しまった……
typedef struct tagBin{
    int no;
    struct tagBin *left, *right;
}Bin;
に修正plz

386:デフォルトの名無しさん
07/06/27 23:22:21
>>384
すいません。恥ずかしくてのせてませんでした。
初心者のため、おかしい点等をびしびしあげていただければと思います。

#include <stdio.h>
#include <stdlib.h>

void hikaku(int *pX,int *pY);
int main(void){
int x= 0;
int y,i,j;
char str[100];
printf("数字を入力してください。\n");
for(i=1 ; i < 11; i++){
for(j=0; str[j-1] != '\n'; j++){
str[j] = getchar();}
if(j-1 >= 5){
printf("5桁以上は入力桁数エラーです。0にします。\n");}
else{y = atoi(str);
if(y == 0 && str[0] != '0'){
printf("数字以外は入力できません。0にします。\n");}
else {hikaku(&x ,&y);}}}
printf("最大値は%dです。\n",x);
return 0;}
void hikaku(int *pX,int *pY){
if(*pY > *pX){
*pX = *pY;}}


387:デフォルトの名無しさん
07/06/27 23:25:02
>>386
それは実行例じゃないだろ

388:デフォルトの名無しさん
07/06/27 23:26:12
>>386 それができていてなぜ質問したん?w

389:デフォルトの名無しさん
07/06/28 00:19:51
簡単やん

390:デフォルトの名無しさん
07/06/28 00:22:52
>>355
をお願いしたいのですが

391:デフォルトの名無しさん
07/06/28 00:40:33
>>390
while(j>=0 && x[j]>t) { を
while(j>=0 && x[j]<t) { に変更するだけじゃ駄目かな?
inp1.datとか用意するのだるいからまともに見てないけど

392:デフォルトの名無しさん
07/06/28 00:50:17
>>387
すいません、実行例とは何でしょうか?
>>388
自分でここまでは作ったのですが、最初にアルファベットを打ったときなど
特殊な対応が出来ません。また、全く自信がないためです。


393:デフォルトの名無しさん
07/06/28 00:54:23
今、コンパイルが出来ない環境なので確認できないのですが、いまいち右からつめる
降順の解釈の仕方がわからないんです。
左を右に、昇順を降順にしなくてはいけないので、while(j>=0 && x[j]<t) {の変更
だけでは出来ないと思うのですが。

394:デフォルトの名無しさん
07/06/28 00:56:53
>>392
実行例は例えばこのプログラムを実行するとこういう出力になって欲しいんですよ、的な内容。
入力に関しては、一回charに入れた時点で数字かどうか判定すれば?
どの程度のレベルかわからんが、学校授業で4月開始なら上等なレベルかと。



395:デフォルトの名無しさん
07/06/28 01:00:55
>>392 こんなのはどうかな。
#include <stdio.h>
#include <ctype.h>
int main(void)
{
    int c, max = -1, m, n, nc = 0, f, sign = 1;
    while ((c = getchar()) != EOF) {
        if (isdigit(c)) {
            n = f = 0;
            do {
                if ((m = n * 10 + c - '0') < n) f = 1;
                n = m;
            } while ((c = getchar()) != EOF && isdigit(c));
            ungetc(c, stdin);
            if (f) puts("桁あふれしますた");
            else {
                n *= sign;
                printf("%d\n", n);
                if (n > max) max = n;
                if (++nc == 10) break;
            }
        }
        else if (c == '-') { sign = -1; }
        else sign = 1;
    }
    if (max != -1) printf("最大値: %d\n", max);
    return 0;
}

396:デフォルトの名無しさん
07/06/28 01:10:04
>>393
ああ、右からつめるってそういうことか
単に降順にすればいいだけかと思ってた

めんどくさいからパス。せめてdatファイルがあればなぁ

397:デフォルトの名無しさん
07/06/28 01:16:17
datファイルでなくても、テキストファイルに整数を入れてinp.txtとしても大丈夫だと思うのですが。


398:デフォルトの名無しさん
07/06/28 01:18:19
>>392
ありがとうございます。
10回数字を入力して(ただし、アルファベット、空欄など数字でないやつははじく。また、小数点にも対応する)
桁数は自分で設定し(私のやつは適当に5桁)、最大値を出力する。

>>入力に関しては、一回charに入れた時点で数字かどうか判定すれば?
ずばり、バッファリングの理解が甘く、そこのプログラムが打てず悩んでいます。
分かる方、どうかやり方をご教授願います。

>>392
すいません。書き忘れてしまったのですが、入力の終了はEOFではなく改行でといわれています。


399:デフォルトの名無しさん
07/06/28 01:19:44
>>398
アンカーのつけかたを覚えなさい。全部自分へのレスになってるよ

400:デフォルトの名無しさん
07/06/28 01:21:49
>>398
全て自分に安価する君に惚れたwww
atoi関数に渡す前に
if ( '0' <= str[ j ] && str[ j ] <= '9' ) {
とかでいいんじゃない?
ソースあんま読んでないから、的外れだったらスマソ。

401:デフォルトの名無しさん
07/06/28 01:22:13
>>397
それを用意するのがだるいんだ
まぁやる気が無いだけなんだけどさ

402:デフォルトの名無しさん
07/06/28 01:22:23
>>399
あせってコピペしてしまいました。大変申し訳ありませんでした。

403:デフォルトの名無しさん
07/06/28 01:23:45
>>378
元のプログラムをあまり書き換えないでお願い出来ますか。
注文ばかりですいません。

404:デフォルトの名無しさん
07/06/28 01:28:23
>>400
atoiの前にif ( '0' <= str[ j ] && str[ j ] <= '9' ) {

??????
すいません意味が分かりません。どういうプログラムになるのでしょうか?

405:デフォルトの名無しさん
07/06/28 01:29:31
>>401
無理を言って申し訳ありません。
では、左からつめるを右からに書き換えるにはどうすればいいでしょうか。

406:デフォルトの名無しさん
07/06/28 01:39:11
>>405
左端が0 右端がn-1
今はj=0とかi=1からだんだん加算されていってn-1までループしているのを
n-1から減算していって0までループさせればいい

407:デフォルトの名無しさん
07/06/28 01:47:17
>>355 >>405
for(i=n-2;i>=0;i--) {
t=x[i];
j=i+1;
while(j<=n-1 && x[j]>t) {
x[j-1]=x[j];
j++;
}
x[j-1]=t;
}
てきとー まさかどこと差し替えればいいかなんか聞くなよ?

408:デフォルトの名無しさん
07/06/28 01:49:57
URLリンク(www.infonet.co.jp)
EBCDICでも0~9は連続したコードに登録されているからおkだお ^ω^

409:デフォルトの名無しさん
07/06/28 01:59:50
>>404
ちょっと無理矢理だけど例えば、str[j] = getchar();に下に次の1文を入れてみる。
if ( (str[j] < '0' || '9' < str[j]) && str[j] != '\n' ) j--;
今回getchar関数によって入力された文字が数字じゃなければ、読み込まなかったことにする。
ただ、改行コードもはじかれちゃうのでそれはOKにしておく。

極力、今のソースに手を加えないで変更しようとしたらこんなのになってゴメン・・・orz

410:デフォルトの名無しさん
07/06/28 02:01:29
>>406>>407
ありがとうございます。参考にさせていただきます。
もうひとつ>>359についてお願いできますか?
>>378さんが答えて下さっているのですが、元のプログラムの値をあまり
書き換えないで欲しいのですが。


411:デフォルトの名無しさん
07/06/28 06:01:56
[1] 授業単元:プログラミング
[2] 問題文:
 URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:WindowsXP
 [3.3] 言語:c言語
[4] 期限:6月30日(木)


412:デフォルトの名無しさん
07/06/28 08:34:40
>411
(1)
#include <stdio.h>
#include <stdlib.h>

void putchar_n(char c1, char c2, int num){
if(num <= 0){
return;
}
putchar(c1);
putchar_n(c1,c2,num-1);
putchar(c2);
}

int main(int argc, char* argv[]){
if(argc != 4){
return 1;
}

putchar_n(argv[1][0],argv[2][0],atoi(argv[3]));

printf("\n");
return 0;
}


413:デフォルトの名無しさん
07/06/28 08:44:04
>>411
(2)
#include <stdio.h>

int main(){
int i = 0;

for(i = 0 ; i+31 < 126+1 ; i++){
printf("%c %d %o %x\n",i+31,i+31,i+31,i+31);
if(i%8 == 7){
printf("--------------------\n");
}

}
return 0;
}

414:デフォルトの名無しさん
07/06/28 10:10:46
>>409
ありがとうございます。
ただやってみたのですが、例えば「fsa256」や「256faj」などを入れるとそれも256として
反映されてしまいます。
何とかはじく方法があればと思うのですが・・・。

415:デフォルトの名無しさん
07/06/28 10:14:22
>>410ですが、>>378さんの書いてくださったプログラムをコンパイルしてみたところ、
35以上でかつ95未満の要素の数の処理は出来たのですが、countの要素の合計の処理が
0となり、うまく処理出来ませんでした。

416:デフォルトの名無しさん
07/06/28 10:39:07
getcharじゃなきゃだめなの?

417:デフォルトの名無しさん
07/06/28 10:46:53
まあそれはいいとして
atoi使わずに
URLリンク(www.bohyoh.com)
使えば済む話だと思う

418:デフォルトの名無しさん
07/06/28 10:55:29
>>415
main()だけ修正

int main(void) {
    int i, *x, n, size, count[11] = { 0 }, sum;
    setp(&x, array(&size));
    for (set(&i,0); less(i,size); inc(&i)) {
        set(&n,div(at(x,i),10));
        if (less(10,n)) set(&n,10);
        inc(&count[n]);
    }
    for (set(&i,0); less(i,10); inc(&i))
        printf("%3d台: %d\n", mul(i,10), at(count,i));
    set(&sum,0);
    for (set(&i,0); less(i,11); inc(&i))
        set(&sum,pls(sum,at(count,i)));
    printf("countの要素の合計は%d\n",sum);
    if (eq(sum,size))
        printf("総和は正しいです\n");
    else
        printf("総和が違います\n");
    for (set(&n,0),set(&i,0); less(i,size); inc(&i))
        if (and(less(34,at(x,i)),less(at(x,i),95))) inc(&n);
    printf("35以上でかつ95未満の要素の数は%d\n", n);
    return 0;
}

419:418
07/06/28 10:57:07
すまん、化けたか?
int main(void) {
    int i, *x, n, size, count[11] = { 0 }, sum;
    setp(&x, array(&size));
    for (set(&i,0); less(i,size); inc(&i)) {
        set(&n,div(at(x,i),10));
        if (less(10,n)) set(&n,10);
        inc(&count[n]);
    }
    for (set(&i,0); less(i,10); inc(&i))
        printf("%3d台: %d\n", mul(i,10), at(count,i));
    set(&sum,0);
    for (set(&i,0); less(i,11); inc(&i))
        set(&sum,pls(sum,at(count,i)));
    printf("countの要素の合計は%d\n",sum);
    if (eq(sum,size))
        printf("総和は正しいです\n");
    else
        printf("総和が違います\n");
    for (set(&n,0),set(&i,0); less(i,size); inc(&i))
        if (and(less(34,at(x,i)),less(at(x,i),95))) inc(&n);
    printf("35以上でかつ95未満の要素の数は%d\n", n);
    return 0;
}

420:デフォルトの名無しさん
07/06/28 11:02:03
>>414
後から細々と注文をつけるんなら、「正しい入力」を正確に定義汁。
最初に正確に仕様を述べないから、>>1で言う
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
の状況に結果的にはなっている。

正規表現で言うと、
^-?[0-9]{0,5}$
以外はエラーと思っていいのかな。
負値はどうする?マイナスの場合の桁数の処理は?スペースも許さない?
00004
は正常?

421:デフォルトの名無しさん
07/06/28 11:30:41
-0や00や-000はどうか?という問題もある。
^(0|[1-9][0-9]{0,4}|-[1-9][0-9]{0,3})$
こうか?

422:デフォルトの名無しさん
07/06/28 12:01:40
>>374>>382

早速のレスありがとうございます。ためしにやってみたのですが、うまくいきませんでした。

できれば、
       1
      /\
    /     \
   2        3
  /\      /\
  4  5     6  7

このように表示できたらいいです。表示するデータは3桁の整数です。

おねがいいたします。


423:デフォルトの名無しさん
07/06/28 12:36:11
[1] 授業単元:プロC
[2] 問題文(含コード&リンク):
コマンドライン引数から十進整数値として解釈できる文字列のみを選び、
値が小さい順に並べ替えて、一行に一つずつ標準出力に出力するプログラムを書け。
ただし、十進整数値として解釈できる文字列とは、正規表現 ^[-+]?[0-9]+$ に
マッチするものとする。
ヒント:小さい順に並べ替えるには、 qsort()が便利です。
こちらも、使い方は、manコマンドで調べることができます。

コマンドライン引数すべてについて、 含まれるアルファベットすべてを対応する大文字に置き換えて、
一行にコマンドライン引数一つずつ標準出力に出力するプログラム。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:今週中
[5] その他の制限: 特になしです

どうかよろしくお願いします。


424:デフォルトの名無しさん
07/06/28 12:44:31
>>419さん、>>378さんのプログラムと変更が無いようなのですが。
コンパイルしても変わりませんでした。

425:デフォルトの名無しさん
07/06/28 12:48:03
>>423
#include <stdio.h>
int main(int argc, char **argv)
{
    FILE *fp = popen("egrep '^[-+]?[0-9]+$' | sort -n", "w");
    while (*++argv)
        fprintf(fp, "%s\n", *argv);
    pclose(fp);
    return 0;
}

426:デフォルトの名無しさん
07/06/28 12:50:09
>>424
もう一度確認してみろ。

427:デフォルトの名無しさん
07/06/28 13:53:21
[1]単元:プログラミング技術
[2]問題文:ローダーのNo.4433にアップしました。
[3]環境
OS:リナックス
コンパイラ:cc
言語:C
[4]期限:できれば本日14時30分ごろまでにお願いします。

どうぞよろしくお願いします。




428:デフォルトの名無しさん
07/06/28 13:54:15
授業単元:C言語
環境:if文・for文・while文・do~while文・switch~case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題1
文字型の配列変数mojiに設定されている文字数を答えなさい
char moji[] = "ABCDEFG";
実行画面
文字数:7


429:デフォルトの名無しさん
07/06/28 13:55:39
授業単元:C言語
環境:if文・for文・while文・do~while文・switch~case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題1
文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい
実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e


430:デフォルトの名無しさん
07/06/28 14:40:31
>>427
#include <stdio.h>
#include <string.h>

void search(char *s1, char *s2)
{
    int i;
    char *p = s1;
    while((p = strstr(p, s2)) != NULL){
        *p++ = '#';
        for(i = 0; i < strlen(s1) - 1; i++)
            *(p + i) = *(p + i + strlen(s2) - 1);
    }
}

int main(void)
{
    char text[1024], word[1024];
    printf("Please input text : ");
    gets(text);
    printf("text = %s\n", text);
    printf("Please input search word : ");
    gets(word);
    search(text, word);
    printf("text = %s\n", text);
    return 0;
}

431:デフォルトの名無しさん
07/06/28 14:44:40
このスレでgets()使うと袋叩きにあうよ。

432:デフォルトの名無しさん
07/06/28 14:45:32
>>427
void search(char *s1, char *s2)
{
    while((s1 = strstr(s1, s2)) != NULL){
        *s1++ = '#';
        strcpy(s1, s1 + strlen(s2) - 1);
    }
}

433:デフォルトの名無しさん
07/06/28 14:46:56
>>431
俺だって使いたかねーけど、問題文に指定してあるからな。

434:デフォルトの名無しさん
07/06/28 14:54:08
授業単元:C言語
環境:if文・for文・while文・do~while文・switch~case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題
文字列と検索文字、置換文字を入力し文字列中の検索文字を置換文字に置き換えなさい
実行画面
文字列(m1)入力==>ABCDEFAABCDABC
削除文字==>A
置換文字==>*

結果文字列(m1):BCDEF**BCD*BC



435:デフォルトの名無しさん
07/06/28 15:06:21
授業単元 関数

言語 C言語

引数の階乗(1*2*3*....*n)を関数を作れ

お願いします

436:デフォルトの名無しさん
07/06/28 15:09:45
int kaijo(int a)
{
   if(a == 1){
       return 1;
   }
   return a*kaijo(a-1);
}

437:デフォルトの名無しさん
07/06/28 15:13:47
int kaijo(int a)
{
   int i, result=1;
   for(i=1; i<a; i++){
       result *= i;
   }
   return result;
}

438:デフォルトの名無しさん
07/06/28 15:14:47
授業単元 関数

言語 C言語

引数の階乗(1*2*3*....*n)を返す関数を作れ

の間違いでした 申し訳ありません

439:デフォルトの名無しさん
07/06/28 15:20:43
>>378はネタだろw

440:デフォルトの名無しさん
07/06/28 15:21:44
>>422
適当だし、エクスプローラ風の樹形図になっちゃうけど、それでよければ

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

441:デフォルトの名無しさん
07/06/28 15:24:36
428 429何方かお願いします

442:デフォルトの名無しさん
07/06/28 15:30:51
>>428

int main()
{
   char moji[] = "ABCDEFG";
   int i;
   for(i=0; moji[i] != '\0'; i++);

   printf("文字数:%d\n", i);
}

443:デフォルトの名無しさん
07/06/28 16:11:45
マイナスの引数でエラーを出さない平方根を返す関数を作れ

C言語でお願いします

444:デフォルトの名無しさん
07/06/28 16:14:43
>>443
>>1

445:デフォルトの名無しさん
07/06/28 16:23:53
授業単元 関数

問題文 マイナスの引数でエラーを出さない平方根を返す関数を作れ

環境
LINUX
C言語
期限 いつでも

>>1 よんでおらず申し訳ありませんでした

446:デフォルトの名無しさん
07/06/28 16:28:04
負の数が入ったときの動作は?

447:デフォルトの名無しさん
07/06/28 16:28:05
>>439
もしネタだとしたら、真面目にお願いしたいのですが。

448:デフォルトの名無しさん
07/06/28 16:30:52
>>446

例として2の 平方根 だと 1.4142135...
ー2 の 平方根 だと -1.4142135...

となるようにです

449:デフォルトの名無しさん
07/06/28 16:33:41
マイミクしてください!
URLリンク(mixi.jp)

450:デフォルトの名無しさん
07/06/28 17:00:35
>>448

double exsqrt(double x)
{
if(x<0){
x=-x;
return -sqrt(x);
}
return sqrt(x);
}



451:デフォルトの名無しさん
07/06/28 17:01:37
>>447 まじめにやってもこの程度だが
URLリンク(kansai2channeler.hp.infoseek.co.jp)

452:デフォルトの名無しさん
07/06/28 17:14:08
あ~~fmod()を使って10進数を2進数に変えたいんです。C++


453:デフォルトの名無しさん
07/06/28 17:17:17
[1] 授業単元:多次元配列
[2] 問題文(含コード&リンク):
 以下のステップに従って,行列表示及び演算を行う関数群を作成し,3行3列の行列A,Bのかけ算を行い,結果を表示するプログラムを作成してください.なお,行列AとBは,キーボードから値を入力するようにしてください.

1.3行3列の行列を表示する関数hyoujiを作成
(メイン関数で任意の値で初期化した3行3列の行列Aを引数にしてhyoujiを呼び出し,内容を表示させ,動作確認を行う)
2.3行3列の行列A,Bの足し算を行い,結果を行列Cに代入する関数tasizanを作成
(メイン関数で任意の値で初期化した3行3列の行列A,B,Cを引数にしてtasizanを呼び出し,関数hyoujiにより行列Cを表示させ,動作確認を行う)
3.tasizanをコピー・雛形にして,3行3列の行列A,Bのかけ算を行い,結果を行列Cに代入する関数kakezanを作成
(メイン関数で任意の値で初期化した3行3列の行列A,B,Cを引数にしてkakezanを呼び出し,関数hyoujiにより行列Cを表示させ,動作確認を行う)
4.キーボードから3行3列の行列に見立てた配列に数値を入力する関数nyuryokuを作成
(メイン関数で任意の値で初期化した3行3列の行列Aを引数にしてnyuryokuを呼び出し,関数hyoujiにより行列Aを表示させ,動作確認を行う)
kakezanのヒント:3重ループにすると効率よくプログラムできます
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名:Borland
 [3.3] 言語:C
[4] 期限:7月10日まで
[5] その他の制限:多次元配列までならってます


454:デフォルトの名無しさん
07/06/28 17:30:44
>>451
迅速な返答ありがとうございます。無事実行の確認ができました。

455:デフォルトの名無しさん
07/06/28 19:00:07
>>453

void hyouji(int array[][3])
{
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%3d",array[i][j]);
putchar('\n');
}
}

void tasizan(int A[][3],int B[][3],int C[][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
C[i][j]=A[i][j]+B[i][j];
}

456:455
07/06/28 19:04:02
続き

void kakezan(int A[][3],int B[][3],int C[][3])
{
int i,j,k;
for(i=0;i<3;i++)
    for(j=0;j<3;j++)
    for(k=0;k<3;k++)
    C[i][j]+=A[i][k]*B[k][j];
}

void nyuryoku(int A[][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
printf("A%d%d:",i,j);
scanf("%d",&A[i][j]);
}
}

457:デフォルトの名無しさん
07/06/28 19:08:04
[1] 授業単元:C++
[2] 問題文:
メイン関数で整数numに0が入力されるまでキー入力を繰り返し実行する。
負の値も有効とし、0も有効な値とする。
入力が終了した時点での入力値の最大値上位3つと最小値下位3つを画面に出力する。
[3] 環境
 [3.1] OS:窓
 [3.3] 言語:C++
[4] 期限:明日
[5] その他の制限:出力にはprintf、入力にはscanfの使用

習い始めなため、出来るだけ簡単な物にしてくれると助かる。
お願いします。

458:デフォルトの名無しさん
07/06/28 19:08:46
>>453
#include <stdio.h>
void hyouji(double a[3][3]){
    int i, j;
    for(i = 0; i < 3; i++){
        for(j = 0; j < 3; j++) printf("%4.1f", a[i][j]);
        printf("\n");
    }
}
void tasizan(double a[3][3], double b[3][3], double c[3][3]){
    int i, j;
    for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) c[i][j] = a[i][j] + b[i][j];
}
void kakezan(double a[3][3], double b[3][3], double c[3][3]){
    int i, j, k;
    for(i = 0; i < 3; i++)
        for(j = 0; j < 3; j++){
            c[i][j] = 0;
            for(k = 0; k < 3; k++) c[i][j] += a[i][k]*b[k][j];
        }
}
void nyuryoku(double a[3][3]){
    int i, j;
    for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) scanf("%lf", &a[i][j]);
}
int main(void){
    double a[3][3], b[3][3], c[3][3];
    nyuryoku(a); nyuryoku(b);
    tasizan(a, b, c); hyouji(c);
    kakezan(a, b, c); hyouji(c);
    return 0;
}

459:デフォルトの名無しさん
07/06/28 19:46:35
[1] 授業単元:C言語実習基礎
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
数字を昇順でソートできるようにする。
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C
[4] 期限: 6/29正午まで
[5] その他の制限: 挿入ソート、選択ソートまで習っています。

460:デフォルトの名無しさん
07/06/28 20:04:14
それはソースコードであって問題文ではない。

461:デフォルトの名無しさん
07/06/28 20:43:32
[1] 授業単元:C++研究
[2] 問題文
あるファイルの中にデータとして多くの0と1が書き込まれており、最後の1文字だけがEであるとする。
このとき、0と1の並びに着目し、データを圧縮することを考える。
ここでは、0と1のそれぞれが何個連続して並んでいるかを記録することで圧縮を行う。
たとえば、digit1.datというファイルに
111110000000000000000000000001E
というように0と1が並んでいるとき、
7 1 24 0 1 1
と圧縮できる。このとき圧縮結果に空白を挟むことに注意する。
上記の圧縮方法に従って、任意の0と1から成るデータを圧縮するプログラムを作成せよ。
ただしデータはリダイレクションを使用し、char型変数の1文字ずつ繰り返し世も困れるものとする。
最後には「圧縮完了」と表示のこと。

3] 環境
 [3.1] OS:windowsXP
 [3.2] cygwin
 [3.3] 言語:C++
[4] 期限:明日
[5] その他の制限:C++です。よろしくお願いします

462:デフォルトの名無しさん
07/06/28 20:51:54
[1] 授業単元: プログラミング序論
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C
[4] 期限: 29日まで
よろしくお願いします

463:デフォルトの名無しさん
07/06/28 20:52:00
>繰り返し世も困れる
読み込まれる?

464:デフォルトの名無しさん
07/06/28 20:58:31
>>460
申し訳ありませんでした。
このソースコードを昇順でソートできるように直しなさい。
という問題です。


465:デフォルトの名無しさん
07/06/28 21:07:00
>>462
(1)
#include <stdio.h>
int main(void) {
int array[7] = {4, 5, 0, 6, 2, 2, 4};
int i, sum = 0;
for(i=0;i<7;i++) sum += array[i];
printf("%d", sum);
return 0;
}

466:デフォルトの名無しさん
07/06/28 21:14:41
>>461
#include <iostream>
using namespace std;
int main()
{
    streambuf *sb = cin.rdbuf();
    int c, cc, n;
    const char *sep = "";
    while ((c = sb->sbumpc()) >= 0 && c != 'E') {
        for (n = 1; (cc = sb->sbumpc()) >= 0 && cc == c; ++n) {}
        sb->sungetc();
        cout << sep << n << " " << static_cast<char>(c);
        sep = " ";
    }
    cout << "\n圧縮完了\n";
}

467:デフォルトの名無しさん
07/06/28 21:20:17
>>462
(2)
#include <stdio.h>
int main(void) {
int array[7] = {4, 5, 0, 6, 2, 2, 4};
int array2[7] = {0};
int i;
for(i=0;i<7;i++) array2[i] = array[6-i];
for(i=0;i<7;i++) printf("%d", array[i]);
putchar('\n');
for(i=0;i<7;i++) printf("%d", array2[i]);
return 0;
}

468:453
07/06/28 21:40:36
>>455さんありがとうございます

469:462
07/06/28 21:59:36
>>465
>>467
ありがとうございます

470:デフォルトの名無しさん
07/06/28 22:45:46
>>457
(1)
#include <iostream>
#include <math.h>
#define BUF_MAX 64
#define DATA_MAX 128

char datanum=0;
long data[DATA_MAX];

void seikei(char*);
long henkan(char*);
void touroku(long);
void sort();
void output();


471:デフォルトの名無しさん
07/06/28 22:47:05
(2)
int main() {
char i, sign, buf[BUF_MAX];
long input;

do {
input = 0;

for(i=0; i<BUF_MAX; i++)
buf[i] = NULL;

printf("input number\n> ");
scanf("%s", buf);

if(buf[0]==45) sign = 1;
else sign = 0;

seikei(buf);
input = henkan(buf);

if(input==0) break;
else if(sign==1) input = 0-input;

touroku(input);
} while(1);

sort();
output();

return 0;
}

472:デフォルトの名無しさん
07/06/28 22:47:53
(3)
void seikei(char *buf) {
char i, j, max, str[BUF_MAX];

for(i=0; i<BUF_MAX; i++)
str[i] = NULL;

max = (char)strlen(buf);
for(i=0, j=0; i<max; i++) {
if(!(48>buf[i] && buf[i]<57)) {
str[j] = buf[i]-48;
j++;
}
}

for(i=0; i<BUF_MAX; i++)
buf[i] = str[i];

return;
}

long henkan(char *buf) {
char i, figure;
long input=0;

figure = (char)strlen(buf)-1;
for(i=0; buf[i]!=NULL; i++)
input += buf[i] * pow((double)10, (double)figure-i);

return input;
}


473:デフォルトの名無しさん
07/06/28 22:49:12
(4)
void touroku(long input) {

if(datanum<DATA_MAX) {
data[datanum] = input;
datanum++;
}

return;
}

void sort() {
char i, j, higher;
long tmp;

for(i=0; i<datanum; i++) {
for(j=i+1, higher=i; j<datanum; j++) {
if(data[higher]<=data[j]) higher = j;
}

tmp = data[higher];
data[higher] = data[i];
data[i] = tmp;
}

return;
}

474:デフォルトの名無しさん
07/06/28 22:50:56
(5)
void output() {
char i;

for(i=0; i<3; i++) {
if(data[i]==NULL) break;
printf("上位%d位: %d\n", i+1, data[i]);
}

for(i=datanum-1; i>(datanum-4); i--) {
if(data[i]==NULL) break;
printf("下位%d位: %d\n", datanum-i, data[i]);
}
}

単純なデータ構造にしたつもり。
殴り書きでsorry

475:デフォルトの名無しさん
07/06/28 23:19:21
1] 授業単元:c言語
[2] 問題文: 8個の配列データa={1,2,4,6,8,4,5,9}の和WAおよび平均値MA
を求めるプログラムを配列およびfor文を用いて作成せよ。

[3] 環境
 [3.1] OS:XP
[3.2] Visual studio.2005

 [3.3] 言語:C
[4] 期限:6月29日:3時まで
[5] その他の制限:特になし
よろしくお願いします

476:デフォルトの名無しさん
07/06/28 23:19:34
宿題じゃないんだが
01011010みたいに
日付が4桁4桁になってる
8桁の数字を生成するのはどうするん?



477:デフォルトの名無しさん
07/06/28 23:24:49
宿題スレじゃなくてC/C++質問スレで頼むわ

478:デフォルトの名無しさん
07/06/28 23:26:16
>>345
お願いします

479:デフォルトの名無しさん
07/06/28 23:28:41
>>475

#include <stdio.h>

int main(void){
double MA;
int i, WA=0;
int a[8] = {1, 2, 4, 6, 8, 4, 5, 9};

for(i=0; i<8; i++){
WA += a[i];
}
MA = WA/8.0;

printf("和 : %d", WA);
printf("平均値 : %lf", MA);

return 0;
}

直接書いてコンパイルとかしてないからエラーでたらおせーてね☆

480:デフォルトの名無しさん
07/06/28 23:35:04
>>478
345の結果ってさ、準決勝で早稲田が下になってるやんか、
あれって逆にしてもええのん?
あかんのやったらあかんでええけど、

481:デフォルトの名無しさん
07/06/28 23:36:28
ああごめんよく読んでなかったわ
得点と失点を記録するんやね

482:デフォルトの名無しさん
07/06/29 00:06:37
>>478
URLリンク(kansai2channeler.hp.infoseek.co.jp)

483:デフォルトの名無しさん
07/06/29 00:08:44
defineにこだわってる所為で汚くなってるじゃんとか言わないでね


484:デフォルトの名無しさん
07/06/29 01:02:03
わからねえよボケ!去ね!

485:デフォルトの名無しさん
07/06/29 01:06:28
>>470-474
サンクス。
ただ、素人がここまで書いてしまうと逆に相手に怪しまれると思うのですよ。
問題文を多少屁理屈で変えてもいいので、もう少し短く簡単にして頂ければ幸いです。

加えてもう一問。

[1] 授業単元:C++
[2] 問題文:
メイン関数a,bに任意の値を入力する。
変数aと変数bで加算と乗算を行い計算結果を表示する。
整数の範囲(-2147483648~2147483648)で正常な計算が行えることを確認する。
実数(float,double)は変数やキャスト等で一切使用しない。
[3] 環境
 [3.1] OS:窓
 [3.3] 言語:C++
[4] 期限:明日の午後
[5] その他の制限:出力にはprintf、入力にはscanfの使用

図々しいことは百も承知ですが、よろしくお願いします。

486:デフォルトの名無しさん
07/06/29 01:10:38
お願いします。
[1]C言語
[2]ファイルを読み込む
I am C.
CAT and ...
を別のファイルに下のように書き込む
1: I am C.
2: CAT and ...
 [3.1] OS:Linux
 [3.2] gcc 3.4
 [3.3] 言語: C
[4]今日の午前中

487:デフォルトの名無しさん
07/06/29 01:20:49
>>486
#include <stdio.h>

int main(void) {
FILE *fop,*fsv;
char buf[32];
int ch;

printf("読み込むファイル名を入力 > ");
scanf("%s",buf);
fop=fopen(buf,"r");
if( fop==NULL ) return 1;

printf("書き込むファイル名を入力 > ");
scanf("%s",buf);
fsv=fopen(buf,"w");
if( fsv==NULL ) { fclose(fop); return 1; }

while( (ch=fgetc(fop))!=EOF ) {
fprintf(stdout,"%c",ch);
fprintf(fsv,"%c",ch);
}

fclose(fop);
fclose(fsv);

return 0;
}

488:デフォルトの名無しさん
07/06/29 01:26:08
[1] 授業単元:情報系ゼミ
[2] 問題文:URLリンク(www.ipsj.or.jp)
 上記URLの文中「逆方向のスキャンによる枝刈り(P759)」「ビット列の長さによる枝刈り」
 の二項を聞いてる素人にも判る様に説明、解説する。という課題を受けました
 しかし今まで習った内容とは明らかにレベルが違いすぎるため、
 また、周りが自分を含めプログラムはズブの素人ばかりなので全く理解できず、
 一同困惑しています
 お時間のある方、この範囲のプログラム文の一行一行がどういう機能を果たしているのかを
 馬鹿にも判るように解説して頂けないでしょうか?
 よろしくお願いします
[3] 環境
 [3.1] OS:Windows 
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語:C++
[4] 期限:[2007年07月01日まで
[5] その他の制限: まったく習っていない段階

489:デフォルトの名無しさん
07/06/29 01:29:47
あ、書き込むときに
1: ~
2: ~
のように数字をつけたいんです、3行とか4行とかにも対応できるように…。
もしよければおねがいします

490:デフォルトの名無しさん
07/06/29 01:34:37
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: borland
 [3.3] 言語: どちらでも可
[4] 期限: 2007年07月01日23:00まで
[5] その他の制限: なし

491:デフォルトの名無しさん
07/06/29 01:41:48
>>489>>487さんへのレスです。

492:デフォルトの名無しさん
07/06/29 01:53:19
491です。解決しました。あともう一門わからないのがあるので
もしよければお願いします
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
テキストファイルをよみこんでたとえばファイルに
cccchaa
というのがかいてあったら下のような感じで画面とテキストファイルに表示する
c→4h→1a→2
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限:明日

493:492
07/06/29 01:59:20
[2]の例追加
abdcdoddooffffoo

abc→1 df→4 o→5

494:デフォルトの名無しさん
07/06/29 02:01:36
>>491 >>489
>>487 の一部だけ変更。変更部分は↓の一番上と下が一致するところの中
if( fsv==NULL ) { fclose(fop); return 1; }

i=1;
fprintf(stdout,"%d:",i);
fprintf(fsv,"%d:",ch);
while( (ch=fgetc(fop))!=EOF ) {
fprintf(stdout,"%c",ch);
fprintf(fsv,"%c",ch);
if( ch=='\n' ) {
i++;
fprintf(stdout,"%d:",i);
fprintf(fsv,"%d:",ch);
}
}
fclose(fop);


495:デフォルトの名無しさん
07/06/29 02:06:46
>>494 訂正
fprintf(fsv,"%d:",ch);  < の2箇所を
fprintf(fsv,"%d:",i);  < ,i に変更

496:デフォルトの名無しさん
07/06/29 02:07:39
>>495 じゃなくて、2箇所ある
fprintf(fsv,"%d:",ch);  < これを って意味ね。出力結果がおかしいから分かるだろうけど。

497:デフォルトの名無しさん
07/06/29 02:31:05
[1] 授業単元: プログラミング基礎A
[2] 問題文(含コード&リンク):
奇数かどうか判定する関数および,偶数かどうか判定する関数を作成しなさい.
  ◎以下を参考の事
奇数判定: int isOdd(int i)
数字iが奇数の場合1,
偶数の場合0を返す関数

偶数判定: int isEven(int i)
数字iが偶数の場合1,
奇数の場合0を返す関数

main関数ではif文を使って正しく動いているかどうか
チェックしてください.
※戻り値にはboolを利用してもOKです


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

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

498:デフォルトの名無しさん
07/06/29 02:33:07
>>497
int isOdd(int i){return i%2;}
int isEven(int i){return i%2==0;}

499:492
07/06/29 05:10:44
テンプレわかりづらかったので、もっかい質問します
是非、教えてください、お願いします。

[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
テキストファイルをよみこんでたとえばファイルに
cccchaa
というのがかいてあったら下のような感じで画面とテキストファイルに表示する
c→4h→1a→2
ほかの例は
abdcdoddooffffoo
の場合
abc→1 df→4 o→5
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限:5時間後くらい


500:492
07/06/29 05:13:41
>>494-496さん本当にありがとうございます!!

501:デフォルトの名無しさん
07/06/29 06:03:57
>>499
#include <stdio.h>

int main(void)
{
  int c, nc[256] = {0}, nmax = 0, n, found;

  while ((c = getchar()) != EOF) {
    nc[c]++;
    if (nc[c] > nmax)
      nmax = nc[c];
  }
  for (n = 1; n <= nmax; n++) {
    found = 0;
    for (c = 0; c < 256; c++) {
      if (nc[c] == n) {
        putchar(c);
        found = 1;
      }
    }
    if (found)
      printf("→%d", n);
  }
  printf("\n");
  return 0;
}

502:492
07/06/29 06:27:59
>>501さんありがとうございます。
けどコンパイルしてみたらエラーがたくさん表示されて…。
あとファイルから読み込んで結果を画面に表示してファイルに書き込む
プログラムをつくりたいです。またもしよければアドバイスおねがいします

503:デフォルトの名無しさん
07/06/29 07:02:16
>>500 そういや、int i; も追加だったっけ・・・ってできた?ようだから良いか。

504:492
07/06/29 07:07:45
>>503さんのをアレンジしたらできました!ありがとうございました!!
もしよければ>>499を教えてほしいです…何度もすいません。

505:デフォルトの名無しさん
07/06/29 07:24:24
>>501は全角スペースが入っているからでそ
#include <stdio.h>

int main(void)
{
 int c, nc[256] = {0}, nmax = 0, n, found;

 while ((c = getchar()) != EOF) {
  nc[c]++;
  if (nc[c] > nmax)
   nmax = nc[c];
 }
 for (n = 1; n <= nmax; n++) {
  found = 0;
  for (c = 0; c < 256; c++) {
   if (nc[c] == n) {
    putchar(c);
    found = 1;
   }
  }
  if (found)
   printf("→%d", n);
 }
 printf("\n");
 return 0;
}

506:492
07/06/29 07:32:56
これにファイルポインタとか使いしていけばいいんですかね?
これだけだと動きませんでしたので・・・

507:デフォルトの名無しさん
07/06/29 07:38:07
>>506
題意が良くわからないんだが、要するに文字列の中の各アルファベットの数を数えろってことかね?

508:デフォルトの名無しさん
07/06/29 07:39:33
492と493の例だと表示順がわからないんだけど。
出てきた順番でもないし、アルファベット順でも個数順でもない。

509:492
07/06/29 07:44:45
>>507さん、そうですねアルファベット順にしたいです。
cccchaaの例はちょっと間違って書いてましたすいません…。
もうひとつ例としては
aaabcddddee
の場合は
a→3 bcd→4 e→2
です。何度もすいません…アルゴリズムがいまいち思いつかないので…。

510:デフォルトの名無しさん
07/06/29 08:01:13
アルファベットの数を数える部分はできたが、同じ数のものを並べてってのが面倒やな・・・
もう少しで出来そうだが、そこんとこで手詰まり中。まぁ、なんとかなるさ。

511:デフォルトの名無しさん
07/06/29 08:09:25
>>459
ソースコードを昇順ソートできるようにするという問題です。
何度もすみません。

512:デフォルトの名無しさん
07/06/29 08:23:46
>>381お願いします

513:デフォルトの名無しさん
07/06/29 09:13:21
>>509 >>506 >>504 >>499 >>492
汚いソースだが我慢せい
URLリンク(kansai2channeler.hp.infoseek.co.jp)

514:デフォルトの名無しさん
07/06/29 09:15:32
>>509 >>506 >>504 >>499 >>492  訂正
URLリンク(kansai2channeler.hp.infoseek.co.jp)

515:デフォルトの名無しさん
07/06/29 09:27:10
>>509 >>506 >>504 >>499 >>492  さらにマクロでシェイプアップ
URLリンク(kansai2channeler.hp.infoseek.co.jp)

516:デフォルトの名無しさん
07/06/29 09:27:58
>>515 っつか str[1024], <これ要らなかった、削除プリーズ

517:459
07/06/29 12:12:43
時間延長してもらいました。
順を追って試してるんですがうまくいかないです・・・

518:デフォルトの名無しさん
07/06/29 12:41:20
[1] 授業単元:プロC
[2] 問題文(含コード&リンク):
↓*ndPtrPtr が指すリストの n 番目のノード(ノード番号は 0 番から始まる)を削除する.
削除したノードに割り当てられていたメモリは解放される.ただし,リスト中のノード数が
n 以下で,n番目のノードがない場合には,何もしない.
戻り値は,n番目のノードが削除できたときには SUCCESS,
n番目のノードが存在せず,削除できなかったときには FAILURE を返す.
URLリンク(kansai2channeler.hp.infoseek.co.jp)

上のnodeInsertを改良して,指定された挿入場所のインデックス n が負のときには,
新しく挿入されたノードがリストの末尾から数えて -n 番目になるようにせよ.
(たとえば,n == -1 のときには,末尾に挿入される)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:月曜日まで
[5] その他の制限: なし

よろしくお願いします。

519:デフォルトの名無しさん
07/06/29 12:43:12
[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年7月1日まで
[5] その他の制限: なし

お願いします



520:デフォルトの名無しさん
07/06/29 12:58:22
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):ふたつあります。
①文字列strをno回だけ連続して表示する関数
void put_stringn(const char str[], int no){/*…*/}を作成せよ。
②以下に示した関数をもとにして、文字列を後ろから逆に表示する("SEC"を受けたら"CES"と表示する)関数put_rstringを作成せよ。
#include <stdio.h>
void put_string(const char str[])
{
unsigned i = 0;
while(str[i])
putchar(str[i++]);
}
int main(void)
{
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
put_string(str);
putchar(!\n!);
return(0);
}
[3] 環境 [3.1] OS: (Windows/Linux/等々) Linux [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:今日中なるべく早く
[5] その他の制限: 明解C言語入門編テキスト使用
お手数おかけしますがどうかよろしくお願いします。


521:デフォルトの名無しさん
07/06/29 13:03:46
明解C言語入門編
URLリンク(www.bohyoh.com)
これか?

522:デフォルトの名無しさん
07/06/29 13:04:27
>>521さん
そうです。

523:デフォルトの名無しさん
07/06/29 13:04:39
[1] 授業単元:C++研究
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上記2つのプログラムのクラス(設計図)のインスタンス生成部分をnew演算子を用いた
ものに修正しなさい(すべての個所)。もちろんこのインスタンスをdelete演算子
で削除することを忘れないこと。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C++
[4] 期限: ([2007年7月1日12:00まで]
[5] その他の制限:特になし

よろしくお願いします。


524:デフォルトの名無しさん
07/06/29 13:06:42
>>520
#include <string.h>
void put_string(const char str[])
{
unsigned i = strlen(str)-1;
while(str[i])
putchar(str[i--]);
}

525:デフォルトの名無しさん
07/06/29 13:09:21
>>520 なんか全角が入ってたり putchar の括弧の中がおかしいから全部書くわ
#include <stdio.h>
#include <string.h>
void put_string(const char str[]) {
unsigned i = strlen(str)-1;
while(str[i])
putchar(str[i--]);
}

int main(void) {
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
put_string(str);
putchar('\n');
return(0);
}

526:デフォルトの名無しさん
07/06/29 13:15:04
>>525さん
ありがとうございます。
void put_stringをvoid put_rstringにすればいいんですかね?#include <string.h>て
習っていないのですが…
もしよろしければ問題①のほうもよろしくお願いします


527:デフォルトの名無しさん
07/06/29 13:23:43
内容:
[1] 授業単元:C++
[2] 問題文:
#include <stdio.h>
#define NUM4
#define NAME_LENGTH 20
struct seiseki{
char name[NAME_LENGTH];
int jpn;
int eng;
int math;
/*A*/
}
int main(void){
struct seiseki i06[NUM];
double max;
int max_i;
int i;
for(i=0;i<NUM;i++){
printf("%d番目の名前を入れてください",i);
scanf("%s",i06[i].name);
printf("%d番目の国語の成績を入れてください",i);
scanf("%d",i06[i].jpn);
printf("%d番目の英語の成績を入れてください",i);
scanf("%d",i06[i].eng);
printf("%d番目の数学の成績を入れてください",i);
scanf("%d",i06[i].math);
}
/*B*/
}


528:デフォルトの名無しさん
07/06/29 13:31:36
>>520
#include <stdio.h>
void put_stringn(const char str[], int no) {
int i;
for(i=0; i<no; i++)
printf("%s \n",str);
}
void put_string(const char str[]) {
int i = 0;
while(str[i]!='\0') i++;
while(i-->0)
putchar(str[i]);
}

int main(void) {
char str[100];
int no;

printf("文字列を入力してください:");
scanf("%s", str);

printf("①文字列strをno回だけ連続して表示する関数 no > ");
scanf("%d",&no);
put_stringn(str,no);

printf("②以下に示した関数をもとにして、文字列を後ろから逆に表示\n");
put_string(str);
putchar('\n');
return(0);
}

529:デフォルトの名無しさん
07/06/29 13:31:59
以下のプログラムに構造体を各人の名前と合計点を格納できるように拡張し、最終的には合計点が一番よい学生の名前を出力するプログラムを作成せよ。/*A*/ /*B*/に入れよ
また、成績のAランク(成績が80以上100以下)の個数を格納する変数に変更して、Aランクの数が一番多い学生の名前を出力するプログラムを作成せよ。/*A*/にAランクの数
[3] 環境
[3.1] OS:窓
[3.3] 言語:C++
[4] 期限:明日
[5] その他:制限 構造体 他にはとくになかったです。
よろしくお願いします。


530:デフォルトの名無しさん
07/06/29 13:34:25
>>528さん
ありがとうございます。
すみません、①と②の問題は別物なんです
ややこしくかいてしまってすみません
>>528にかいていただいたものをどうわければいいのでしょうか…
本当にすみませんorz


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