C/C++の宿題を片付けます 46代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:Windows/Linux/等々
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか
[5] その他の制限:どこまで習っているか、等々

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

【前スレ】
C/C++の宿題を片付けます 45代目
http://pc8.2ch.net/test/read.cgi/tech/1118165596/

【歴代スレは>>2-13
2デフォルトの名無しさん:2005/06/23(木) 17:12:09
2
3デフォルトの名無しさん:2005/06/23(木) 17:12:12
4デフォルトの名無しさん:2005/06/23(木) 17:12:27
>>1
死ね
5デフォルトの名無しさん:2005/06/23(木) 17:12:47
6デフォルトの名無しさん:2005/06/23(木) 17:13:07
7デフォルトの名無しさん:2005/06/23(木) 17:27:17
[1] 授業単元:情報基礎
[2] 問題文(含コード&リンク):戻り値をvoidとし、char型のポインタを一つ進める
関数を作れ。但し、関数の引数は一つにしなさい。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): VC++ 6.0
 [3.3] 言語:C
[4] 期限:なるべく早く
[5] その他の制限:関数の引数が複数とか、戻り値がvoidじゃなければ
それらしいものは出来るのですが、引数一つで戻り値がvoidだとよく分からないです。
void func(char* s)みたいな形になると思うのですが.
8デフォルトの名無しさん:2005/06/23(木) 17:34:46
>>7

void charnext(char **ps) { ++*ps; }
9デフォルトの名無しさん:2005/06/23(木) 18:07:58
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
入試 センター試験で、入力データが

受験番号 受験科目数 第1科目得点 第2科目得点 第3科目得点
1111111  3      58     78      46
1111342  2      60     35

のように、受験科目数によって入力データの個数が異なる場合の
平均点を計算して出力するフローチャートおよびプログラムを
作成せよ。ただし、データは別のファイルにあらかじめキーイン
されており、明細印刷も同時に行う。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年06月24日まで
[5] その他の制限:whileまで習っています

なにとぞよろしくお願いいたします
10デフォルトの名無しさん:2005/06/23(木) 18:10:58
>>9
>[5] その他の制限:whileまで習っています

関数ポインタからwhileまで習っているのか…
11デフォルトの名無しさん:2005/06/23(木) 18:18:45
>>9
ファイルの形式がわからないと作れない。
12デフォルトの名無しさん:2005/06/23(木) 18:27:32
>>9
えーっと印刷ってstdprnだっけ?
それともAPIたたくんだっけ?
13デフォルトの名無しさん:2005/06/23(木) 18:31:26
>>11
授業では.datファイルを使ってます。
>>9
stdprnもAPIも初めて聞きます、、、m(_ _)m
14前スレ972:2005/06/23(木) 18:32:14
>>980さん
>>997さん
返信ありがとうございます!

>>980さん
一応追加分を書き直してコンパイルしたところ、
kadai04C-1.c: In function `main':
kadai04C-1.c:152: warning: assignment makes pointer from integer without a cast
と表示されました。ちなみに引っ掛かったところは
if (p = strchr(buff, '\n'))の部分です。

>>997さん
こんぱいるしたところ
/tmp/ccDNxE6c.o: In function `node_add':
/tmp/ccDNxE6c.o(.text+0x42): undefined reference to `_msize'
collect2: ld returned 1 exit status
と表示されてしまいました...
15デフォルトの名無しさん:2005/06/23(木) 18:38:09
>>14

>>980のぶんのウォーニングはif文の条件式の中で代入式を使っていることに対する警告だが、
コードはあれで正しいので無視してもかまわない
16デフォルトの名無しさん:2005/06/23(木) 18:39:37
>>13
おれが悪かった。
dat形式の内部仕様はどうなっているんだい?(データはどういう風にならんでるの?
印刷はプログラム本体でやるのあきらめてリダイレクトすればいいとおもうんだがどうだろう。
Linuxにはそういう機構があるらしいが・・・。(lprとかいうものかな?
17デフォルトの名無しさん:2005/06/23(木) 18:39:38
>>9

#include <stdio.h>

int main()
{
    char id[128];
    int i, nsubjects, tmp, score;
    FILE *fp;
    
    if ((fp = popen("lpr", "w")) == NULL) {
        perror("lpr");
        return 2;
    }
    
    while (scanf("%s %d", id, &nsubjects) == 2) {
        i = score = 0;
        while (i < nsubjects) {
            if (scanf(" %d", &tmp) != 1)
                break;
            score += tmp;
            ++i;
        }
        printf("%s %g\n", id, (double)score/nsubjects);
        fprintf(fp, "%s, %g\n", id, (double)score/nsubjects);
    }
    pclose(fp);
    return 0;
}
1816:2005/06/23(木) 18:41:44
>>17が、がんばってくれそうなので作るのやめた。
19デフォルトの名無しさん:2005/06/23(木) 18:42:09
>>16
ファイルの中身は
1111111 3 58 78 46
1111342 2 60 35 
というようにスペースで区切るだけです。
印刷はlprでやっています
20デフォルトの名無しさん:2005/06/23(木) 18:42:40
>>17
ありがとうございます。早速やってみます
2117:2005/06/23(木) 18:44:43
>>20

あー、入力はリダイレクトで食わせてくれ。
それと、さすがにフローチャートを書く気はないからな。
22デフォルトの名無しさん:2005/06/23(木) 18:53:50
>>20
うまくできていました。
フローチャートは自分で何とかします。
どうもありがとうございました
23デフォルトの名無しさん:2005/06/23(木) 19:12:46
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
任意の長さの文字列とルートノードを引数として与えられたときに、動的に増えていく
二分木の名前表を作る関数を書け。
ただし、二分木のノードには名前の文字列を持ち、左右の枝は実態がある場合もない場合もある。
深さ優先で左からたどると、辞書式の順に、
左枝の文字列<中央の文字列<右枝の文字列となるようにせよ。
ヒント:
再起呼び出しを用いて、深さ優先に探索して、子のないノードに追加していけばよい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:6月24日12:00
[5] その他の制限:とくになし

どなたかお願いいたします。
24デフォルトの名無しさん:2005/06/23(木) 19:16:33
25デフォルトの名無しさん:2005/06/23(木) 19:21:42
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
支店コードとつきと売上の対前月比からなるレコードが多数入力されるとき
(同一視店コードが複数月分連続する)、支店コードと最終月の対前月比だけを出力する。
入力例
101 1 1.25
101 2 0.96
103 1 0.82
103 2 0.92
103 3 1.53
  0   0
出力例
101 0.96
103 1.53

[3] 環境
 [3.1] OS:Windows98
 [3.2] コンパイラ(バージョン):MS−DOSプロンプト
 [3.3] 言語:C
[4] 期限:明日の朝まで(単位落とすかどうかの瀬戸際なんです)

よろしくお願いします
26デフォルトの名無しさん:2005/06/23(木) 19:27:43
どうでもいいが、MS−DOSプロンプトはコンパイラじゃないぞ。
それが分からないようなら、単位落としたほうがいいかもしれん。
27デフォルトの名無しさん:2005/06/23(木) 19:56:05
入力はファイルからなのかな
28デフォルトの名無しさん:2005/06/23(木) 20:00:11
うるさいな
29デフォルトの名無しさん:2005/06/23(木) 20:02:54
全角だから面倒そうだ。
30デフォルトの名無しさん:2005/06/23(木) 20:03:16
全角数字か、たいへんだな
31デフォルトの名無しさん:2005/06/23(木) 20:14:49
>>25
すみません数字は半角です
32デフォルトの名無しさん:2005/06/23(木) 20:15:58
>>25
この問題は別に全角だろうが半角だろうが関係ない、気にするな

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

struct rec {
    char code[32];
    int month;
    double ratio;
};

main()
{
    struct rec cur, prev;

    memset(&prev, 0, sizeof prev);
    while (scanf("%s %d %lf", cur.code, &cur.month, &cur.ratio) == 3) {
        if (*prev.code && strcmp(cur.code, prev.code))
            printf("%s %d %f\n", prev.code, prev.month, prev.ratio);
        prev = cur;
    }
}
33デフォルトの名無しさん:2005/06/23(木) 20:19:21
>>32
助かりました。ありがとうございます
34デフォルトの名無しさん:2005/06/23(木) 20:24:13
>>32
やっぱり全角だと全然ダメということに気づいた....OTL

monthとratioもchar[]型にしておけばまあ問題ないやね
35デフォルトの名無しさん:2005/06/23(木) 21:00:54
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
N行、M行の表に整数データを読み込み横計縦計および
総和を計算し表形式で出力するプログラムを書け。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月24日
[5] その他の制限:
宜しくお願いします
36デフォルトの名無しさん:2005/06/23(木) 21:03:28
>>34
半角だそうなので問題ないが、全角の場合はそう簡単な話じゃない。
全角スペースはscanfで分けれないから問題有りだ。
全角になるだけでかなりめんどい。
37デフォルトの名無しさん:2005/06/23(木) 21:32:03
38デフォルトの名無しさん:2005/06/23(木) 21:32:38
39デフォルトの名無しさん:2005/06/23(木) 21:37:55
40デフォルトの名無しさん:2005/06/23(木) 21:45:48
>>37-38
ありがとうございます、助かりました
41デフォルトの名無しさん:2005/06/23(木) 21:47:15
>>36
そんな馬鹿なと思ったら、確かにデリミタまで全角空白だな
こりゃウザいわ
42デフォルトの名無しさん:2005/06/23(木) 21:58:16
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
任意の長さの文字列とハッシュ表の大きさを引数として与えられたときに、
ハッシュ値を返す関数を書け。
−文字列を数値化(文字コードを用いて)し、ハッシュ表の大きさで剰余をとればよい。
ハッシュ表の大きさに近い素数を見つけ、これを用いて剰余を計算したり、衝突した場合は、
ハッシュ値に+1や+2を加えて剰余を計算するなど、拡張できる。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:6月24日13:00まで
[5] その他の制限:特にありません。
お願いいたします。
43デフォルトの名無しさん:2005/06/23(木) 21:58:20
[2] 問題文(含コード&リンク):
1)二つの文字列を入力し、比較して同じ文字列だったら「一致しました」と表示する。
ただし同じ文字数で位置しない場合はコードの小さいほうを多きほうにコピーし表示する。
また文字列の長さが違う場合は短いほうを長いほうにコピーし表示する。
strcmp(),strlen(),strcpyを使用すること
2)1文字入力し、アルファベットか数字だったら「ALPHANUMERIC」、スペースだったら「SPACE」、違う場合は「OTHER」と表示する。
改行コードが入力されるまで繰り返す。
3)2)を再起呼び出しを使い修正
3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): VC++ 5.0
 [3.3] 言語:C
[4] 期限:今日中
[5] その他の制限:文字列操作、分類、変換関数を使う
44デフォルトの名無しさん:2005/06/23(木) 22:08:28
明日とか今日中とか、みんな図々しすぎww
きちんと3日前くらいに依頼しよ(はぁと
45デフォルトの名無しさん:2005/06/23(木) 22:11:21
問題作る方もさ、もっと魅力的な問題にしてほしいな(はぁと
なんか問題文みてもやる気しないし。
ま、だからここに投げてんだろうが。
46デフォルトの名無しさん:2005/06/23(木) 22:13:04
外野が五月蝿いな
47デフォルトの名無しさん:2005/06/23(木) 22:13:43
これPrograming pearlsに載ってたのそのままだろ
って問題もちらほらあるな
48デフォルトの名無しさん:2005/06/23(木) 22:39:26
[1] 授業単元: C言語
[2] 問題文(含コード&リンク)
整数の配列に規則正しく数値を格納して、その値を出力するプログラムを書け。
配列内容
    0 1  2  3  4  5  6  7  8  9 
boxA 11、20、13、18、15、16、17、18、19、20
boxB 30、 6、24、12、18、18、12、24、6、30
boxC 1、 2、 3、 4、5、10、 9、 8、7、6
boxD 4、 7 、10、13、16、20、16、12、8、4
boxE 9、 7、 5、  3、1 、2、 4、6 、8 10
boxF 10、11、28、23、46、35 、64、47、88、59
※繰り返しの制御変数の値は初期値0、最大9まで。5回繰り返し。
出力フォーマット(配列内容は三桁)
(例)boxA = 111 111 111 111 111 111 111 111 111 111
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:明日
[5] その他の制限:while

よろしくお願いします。
49デフォルトの名無しさん:2005/06/23(木) 22:41:06
95行目の}のところでunknown dimensionというエラーがでてしまいます
どう直したらよいのでしょうか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/596.txt
50デフォルトの名無しさん:2005/06/23(木) 22:44:48
>>49
#include <stdio.h>
の直下の
int n, count, a[];
が要らない
51デフォルトの名無しさん:2005/06/23(木) 22:59:50
>> 42 43 48
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/597.txt

臭うので適当に流します。
52デフォルトの名無しさん:2005/06/23(木) 23:12:04
[1] 授業単元:情報科学
[2] 問題文(含コード&リンク)
http://www.i.h.kyoto-u.ac.jp/~tsuiki/lecture/jouka/3.html
上記のアプレットを用いて、次のプログラムを作成せよ。

1. data[0] (データ用メモリの 0 番地) に置かれた値の階乗を計算して出力す
るプログラム。

プログラムは、上記のアプレットのページで実行しているところを、プリント
アウトせよ。1. の場合、10 の階乗を計算しているところをプリントアウト
すること。それに、説明(どのメモリアドレスが何に用いられているかなど)
を書き加えること。
[3] 環境
 [3.1] OS:windows 
 [3.2] コンパイラ(バージョン):上記
 [3.3] 言語:上記参照
 [4] 期限:明日 (延期になった)

他学部で、data[0] に10、data[1]に1を入れてからmulすればいいのは分かりますが、
その後、(storeの仕方)がまったく分かりません。
よろしくお願いします。 
53デフォルトの名無しさん:2005/06/23(木) 23:32:44
[1] 授業単元:
[2] 問題文(含コード&リンク):ベクトル3D型に対して正規化を
行う関数vecNormalizeを作成する。引数は以下のような構成とする。
ただし引数に0ベクトルが与えられた場合は何もしないものとする。
void vecNormalize(struct Vector3D *v)
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:明日の午前中頃までです
[5] その他の制限:構造体、ポインタ辺りまで習いました
自分でも書いてみましたが混乱してしまってるので
ご指導お願いします。
54デフォルトの名無しさん:2005/06/23(木) 23:33:57
以下が自分で書いてみたものです。
#include <stdio.h>
#include <math.h>
struct Vector3D{
double x;
double y;
double z;
};
void vecNormalize(struct Vector3D *v){
double len;
len = sqrt(v->x * v->x + v->y*v->y + v->z*v->z);
len = *v;
return;
}
int main(){
struct Vector3D *v;
double Len;
double a,b,c,i;
v->x = a;
v->y = b;
v->z = c;
scanf("%lf",&a);
scanf("%lf",&b);
scanf("%lf",&c);
Len = vecNormalize(&i);
printf("%lf\n", Len);
return 0;
}
55デフォルトの名無しさん:2005/06/23(木) 23:36:03
[1] 授業単元: C言語
[2] 問題文:(1)以下のプログラム(aを1〜10まで入れ、最大値を表示する)の時、配列aの最後尾の配列要素に配列の最大値を入れ、最大値が入っていた要素位置に配列の最後尾にあった値を入れる関数koukan(a, n)を作成せよ。
(2)さらに、関数koukanを使って、配列aおよびそのサイズnが与えられるとき、昇順する関数A_order(a, n)を作成せよ。
両問とも、正しく動作するかチェックのためのメインも作成の事。

#include <stdio.h>

int main(void){
int i ,a[10], n = 10, max;
for(i = 0;i < n;i++){
printf("input a[%d]= ", i + 1);
scanf("%d", &a[i]);
max = a[0];
}
for(i = 0;i < n; i++){
if(max < a[i]) {
max = a[i];
}
}

printf("最大値=%d\n",max);
return 0;
}

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:明日
[5] その他の制限:よろしくお願いします。
56デフォルトの名無しさん:2005/06/23(木) 23:59:48
交歓
57デフォルトの名無しさん:2005/06/24(金) 00:07:44
【上記のアプレットのページで実行しているところを】の検索

PC等 [プログラム] C/C++の宿題を片付けます 46代目 52
http://pc8.2ch.net/test/read.cgi/tech/1119514274/52
PC等 [プログラム] 質問にやさしく親切に答えてくれるスレ 141
http://pc8.2ch.net/test/read.cgi/tech/1107946285/141
PC等 [プログラム] 計算アルゴリズム 771
http://pc8.2ch.net/test/read.cgi/tech/1090227743/771


【3 件見つかりました】
5849:2005/06/24(金) 00:08:56
>>50
ありがとうございます、本当に申し訳ないのですが
問題の条件にn,count,配列aの大域変数を付加することが
条件となっているのですが大域変数を残したまま
エラーをなくすことはできないのですか?
59デフォルトの名無しさん:2005/06/24(金) 00:13:10
>>54

× len = *v;
○ v->x /= len; v->y /= len; v->z /= len;
lenが0なら割らない

メンバは整数でいいんじゃね?
6052:2005/06/24(金) 00:14:55
>>57
ほんとだ。でもそれは私と別人です。
大学生活版にも同じ質問があったのでその人かと。
61デフォルトの名無しさん:2005/06/24(金) 00:15:02
>>53,54
なんとなく、おしいんだよね。
ポインタの部分の復習とかしてみるといいかも。
ポインタにはかならず実体(指す(ポイントする)もの)があるから、それを忘れずに。
一度ね、ポインタを使ってる例を幾つか、コピペじゃなくてキーボードで入力してみるといいよ。
62デフォルトの名無しさん:2005/06/24(金) 00:19:08
>>52
すれ違い。
メアドさらせ。送ってやるから。
6352:2005/06/24(金) 00:27:55
>>62
どうやらそうみたいですね。ではかなり切羽詰っているので危険を承知して。
宜しくお願いします。
64デフォルトの名無しさん:2005/06/24(金) 00:30:56
>>53-54
#include <stdio.h>
#include <math.h>

#define Normal(v) sqrt((v)->x * (v)->x + (v)->y * (v)->y + (v)->z * (v)->z)

struct Vector3D{
  double x;
  double y;
  double z;
};

void vecNormalize(struct Vector3D *v)
{
  double len;
  
  /* NULLポインタ、0ベクトルなら何もしない */
  if(!v || (v->x == 0 && v->y == 0 && v->z == 0)){return;}
  
  len = Normal(v); /* マクロにしちゃったけどやってることは同じ */
  /* 長さを求めたら、それで割らないと */
  v->x /= len;
  v->y /= len;
  v->z /= len;

  /* doubleにstruct Vector3Dは入らないでしょう
  len = *v;
  */
  
  return;
}
65デフォルトの名無しさん:2005/06/24(金) 00:31:09
int main()
{
  struct Vector3D v; /* ポインタでもいいけど、それなら確保しないと */
  double Len;
  double a,b,c;
  
  /* scanfで値を受け取ってからベクトルに代入しないと */
  scanf("%lf",&a);
  scanf("%lf",&b);
  scanf("%lf",&c);
  
  v.x = a;
  v.y = b;
  v.z = c;
  
  Len = Normal(&v);
  printf("%lf\n", Len);

  vecNormalize(&v); /* iは初期化されてないし渡すのdoubleじゃないし、戻り値voidだし */

  Len = Normal(&v);
  printf("%lf\n", Len);

  return 0;
}
6653:2005/06/24(金) 00:39:50
>>59,61,64さま
ご指導感謝致します
ありがとうございました
67デフォルトの名無しさん:2005/06/24(金) 00:40:06
>>61
あえて要点を外してるようにもみえなくもないなー。
6864:2005/06/24(金) 00:53:40
ゴメン
なんだNormal(v)って。Vector3DLen(v)とか適当に読み替えておくれ。
6961:2005/06/24(金) 00:56:46
要点って何だ・・・正規化のこと?
問題はポインタの使い方とかに慣れてないことだと思ったんだが。
7053:2005/06/24(金) 01:03:34
すみません、コンパイルしたところ
error: stray '\201' in program
error: parse error before `@' token
とエラーメッセージがずらーっと出てきたのですが
これは一体なんなんでしょうか・・・
71デフォルトの名無しさん:2005/06/24(金) 01:06:34
72デフォルトの名無しさん:2005/06/24(金) 01:07:01
>>70
全角空白か何かがしこたま入りこんでましたとさ
7352:2005/06/24(金) 01:08:04
>>62
できました!!ほんとに助かりました。ありがとうございます!!!
あなたは神です!!
74デフォルトの名無しさん:2005/06/24(金) 01:13:46
メールで返してやれよw
75デフォルトの名無しさん:2005/06/24(金) 01:16:07
>>70
全角*2→タブで置換してちょうだい。
76デフォルトの名無しさん:2005/06/24(金) 01:17:11
>>73
担当教官に通報しますた。
77デフォルトの名無しさん:2005/06/24(金) 01:23:50
>>71
ご返信、ホントにありがとうございます。
7853:2005/06/24(金) 01:31:46
できました
お手数おかけしました
ありがとうございます
79デフォルトの名無しさん:2005/06/24(金) 10:16:12
1] 授業単元:情報処理
[2] 問題文↓
   文字型1次元配列に空白を含む文字列を入力し、空白で区切られた文字列
   をwordとして読み分ける。読み分けたwordを文字型2次元配列に格納する。
   ただし、配列にwordの文字列を格納する際、最後に'\0'を追加すること。
   読み取ったwordを一つづつ改行しながら出力してください。    
[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月25日12:00まで
[5] その他の制限:2次元配列まで習いました

よろしくお願いします。
80デフォルトの名無しさん:2005/06/24(金) 12:02:35
[1] 授業単元:Data structure
[2] 問題文(含コード&リンク):
下記3つのテンプレート関数をもつプログラムを作成しなさい。
1.バブルソートを利用し、dequeのオブジェクトを検索
2.セレクションソートを利用し、vectorのオブジェクトを検索
3.挿入ソートを利用し、リストを検索

[3] 環境
 [3.1] OS:Windows2000/xp
 [3.2] コンパイラ(バージョン):Visual C++ .NET (コンソール)
 [3.3] 言語:C++
[4] 期限:2005年05月30日まで
[5] その他の制限:STLの概要、利用方法
81デフォルトの名無しさん:2005/06/24(金) 12:03:30
すいません。 >80 です。期限、6月30日の間違えでした。
82ktc:2005/06/24(金) 12:06:00
問2. 入力された文字列を連続して表示するプログラムを関数を使って作成せよ。
問3. 入力された文字列の文字を逆から表示するプログラムを関数を使って作成せよ。
83デフォルトの名無しさん:2005/06/24(金) 12:07:46
>>82
えらそうな奴だな
84デフォルトの名無しさん:2005/06/24(金) 12:08:57
マルチだしね。無視しよう。
85デフォルトの名無しさん:2005/06/24(金) 12:09:38
マルチかよ
86デフォルトの名無しさん:2005/06/24(金) 12:13:08
マルチな上に態度大きいは好かれませんね
87デフォルトの名無しさん:2005/06/24(金) 12:19:23
またまたすいません。 >>80 です。一度に複数の質問をしてしまってすいませんでした。1.のバブルソートに関する質問だけでもお力をお貸しいただければ大変助かります。どうかよろしくお願いします。
8814:2005/06/24(金) 12:25:11
前スレ>>980さんのプログラムをチェックしてもらったところ、
出力の結果は木を記号を利用した図で表すか
深さ優先探索でなぞった結果を表示する
(例の場合は前順だとa b c d e f g h iと表示するんだと思います)
ようにしないといけないと言われました。
結果的にプログラムの変更をお願いしてしまい大変申し訳ありません。
お手数だとは思いますが宜しくお願いします。
89デフォルトの名無しさん:2005/06/24(金) 12:33:25
【質問テンプレ】
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
次のアルゴリズムを作る
(1)2次方程式の解を求める.つまり,a,b,cが与えられたとき,
 a*x*x + b*x + c = 0
という条件を満たす x の値を出すアルゴリズム.

(2)自然数(0ないし正の整数)が与えられたとき,その階乗 n! を出すアルゴリズム.桁あふれなどの物理的問題は無視してよい.
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン): Visual C++ .NET
 [3.3] 言語:C
[4] 期限:2005年7月1日まで
[5] その他の制限:ポインタ、構造体

どうかおねがいします
90デフォルトの名無しさん:2005/06/24(金) 12:34:11
91デフォルトの名無しさん:2005/06/24(金) 12:35:50
>>82 コレやるからもう来るなよ
#include<stdio.h> main(){printf("文字列を入力してください\n");printf("マルチ\n");printf(”反転した文字列は「チルマ」です\n”);return 0;}
9224:2005/06/24(金) 12:35:54
>>14,88
24もチェックしてくれ
93デフォルトの名無しさん:2005/06/24(金) 12:55:26
>>89
(1)過去ログ参照。
(2)過去ログ参照。
94デフォルトの名無しさん:2005/06/24(金) 13:01:07
>>80
こういうことを聞いているのか?

template<class T>
void swapTemplate(T& ref1,T& ref2){
Tt = ref1;
ref1 = ref2;
ref2 = t;
}

template<class T>
void bubbleSort_forDeque(std::deque<T>& io_deq){
size_ti,k;
const size_tsize = io_deq.size();
if(size == 0) return;
for(i=0;i<size-1;i++){
for(k=i+1;k<size;k++){
if(io_deq[k] > io_deq[i]){
swapTemplate(io_deq[k],io_deq[i]);
}
}
}
}
95デフォルトの名無しさん:2005/06/24(金) 13:22:52
>> 94 さま まさしくその通りだと思います!といっても当方STLについてまだ習い始めたばかりなので、定かではありません。これから94さまのプログラムをよく読ませていただいた上、続きの問題を考えさせていただきます。本当にありがとうございました。
96デフォルトの名無しさん:2005/06/24(金) 14:35:45
iとkの定義位置がなぁ……
せめてreturn分岐の後にして欲しい。
97デフォルトの名無しさん:2005/06/24(金) 15:29:23
[1]Linux Red Hat [2]コンパイラ gcc [3]C言語 [4]期限 6月29日
問題文
(1)80字以内の英文をgets()を用いて入力し、putchar()を用いて出力する。また、文字の並びを逆向きにputchar()で出力する。
(2)80字以内の英文をgetchar()を用いて入力し、puts()を用いて出力する。

ただし、( strcpy(),streat(),strlen()等)は使用しないこと。また(1),(2)に対
しては、それぞれ文字列へのポインタを仮引数とする関数(例えば、process1
(char *p),process2(char *p))を各自定義し、それらの内部で処理させること、
処理の流れは以下に示す仕様に従ってください。

<仕様>
1、メニューを表示し、上記処理(1)か処理(2)のどちらを実行させるか選ばせる。これは「1」または「2」の入力によって選択させる。
2、上記ステップにおいて、「1」、「2」以外の不適切な入力がなされたときには再度メニューを表示し、正しい選択を求める。
3、「1」または「2」の適切な入力がなされたときには、それによって指示される関数が文字列を処理する。

<入出力例>
MENU:
1.Input characters by maens of gets(),output them by means of putchar().
2.Input characters by maens of getchar(),output them by means of puts().
Please choose 1 or 2:5
Try again!
MENU:
1.Input characters by maens of gets(),output them by means of putchar().
2.Input characters by maens of getchar(),output them by means of puts().
Please choose 1 or 2:1
Please input characters:Taro Yamada
You inputted the following:Taro Yamada
The reversed characters is as follows:adamaY oraT
以上です製作どうかお願い致します
98デフォルトの名無しさん:2005/06/24(金) 15:42:23
>>97
仕様と入出力例が矛盾しているが。
99デフォルトの名無しさん:2005/06/24(金) 16:43:02
     .┌━┐    ┌━┐
      ┃┌╋──╋┐┃
      └╋┘    └╋┘
        ┃ ・   ・  ┃        ┌━━┐
    ●━╋┐    ┌╂━━━━╂┐  ┃
    └━┷┴━━╂┘        └╋━┘
同じスレにはコピペ ┌╋┐        ┌╋┐
できるけど、違う  ┃└╋╋━━╋╋┘┃
スレにはコピペでき ┃  ┃┃    ┃┃  ┃
ない不思議コピペ ┃  ┃┃    ┃┃  ┃
           └━┘┘   └└━┘
100デフォルトの名無しさん:2005/06/24(金) 17:26:43
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
TCP/IP通信型クイズ出題プログラムを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:6月26日12:00まで
[5] その他の制限:特になし
自分なりにやってみたのですが、クイズの出題までは行くのですが、解答を出題したり、
問題がなかったりと、おかしくなってしまいます。おそらくクイズの出題のところがおかしいと思うのですが、
どこをどう直せばよいのかわかりません。
教えていただけるとうれしいです。お願いします。
サーバ: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/604.txt
クライアント:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/605.txt
問題と解答:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/606.txt
ユーザ名:000000 パスワード:111111
説明不足なところがあれば言ってください。
101デフォルトの名無しさん:2005/06/24(金) 18:05:41
>>100
前にもこのスレでソケットの問題質問してた人のようだな(w

TCP/IPはストリーム型だから、データは区切りのないバイトストリームに過ぎない。ゆえに、
read(sockfd, buff, 1024);
のように読み取れば、1〜1024byteまで読み取る可能性があるのであって、それは
1行分のデータであるとは全然限らない。

今のようにメッセージが行志向のプロトコルの場合、
サーバならaccept()後、クライアントならconnect()後にfdopen()して、後は
stdioを使って送受信するのが一番ラクだろう。

FILE *reader, *writer;

connect(....);
reader = fdopen(sockfd, "r");
writer = fdopen(sockfd, "w");
fgets(buff, sizeof buff, reader);  // メッセージの行読み
fprintf(writer, "%s\n", ....);      // メッセージ送信

こんな感じだな。
102デフォルトの名無しさん:2005/06/24(金) 18:10:01
次のコードはfortranのコードです。
GOTO文を使わないcのコードに直すとどのようになるか教えてください。

DO 521 I = 2,N
JE = I - 1
DO 520 J = 1,JE
IF (EIGV(I).GT.EIGV(J)) GOTO 520
KS = J
KE = I
AA = EIGV(I)
IA = I
DO 517 K = KS,KE
BB = EIGV(K)
IB = IND(K)
EIGV(K) = AA
IND(K) = IA
AA = BB
IA = IB
517 CONTINUE
GOTO 521
520 CONTINUE
521 CONTINUE
103100:2005/06/24(金) 18:30:55
ご指摘の通りだとは思いますが、講師はread()とwrite()の掛け合いをしてほしいようなので、
とりあえずこのままやってみます。
一行削除したらできるようになりました!
レスありがとうございました。
104デフォルトの名無しさん:2005/06/24(金) 18:36:39
105デフォルトの名無しさん:2005/06/24(金) 18:37:19
>>102
FORTRAN 知らないんだけど、これって多分ソートだよね?

for ( I = 1; I < N; I++ ) {
for ( J = 0; J < I; J++ ) {
if ( EIGV[ I ] < EIGV[ J ] ) {
AA = EIGV[ I ];
IA = I;
for ( K = J; K <= I; K++ ) {
BB = EIGV[ K ];
IB = IND[ K ];
EIGV[ K ] = AA;
IND[ K ] = IA;
AA = BB;
IA = IB;
}
break;
}
}
}

FORTRANの配列は 1〜 なのかな?C言語 0〜 で、宣言方法が違うので注意。
106デフォルトの名無しさん:2005/06/24(金) 18:43:52
f2cなんてのもあるよ

それはともかく、
変数が全て大文字というだけで
Cのコードに見えないのだから不思議なものだな
107デフォルトの名無しさん:2005/06/24(金) 18:45:52
>>103
レベルの低い講師の想定にあわせなきゃいかんとは学生さんも大変だな
108デフォルトの名無しさん:2005/06/24(金) 20:12:01
[1] 授業単元:Apro
[2] 問題文(含コード&リンク):
N 人の人がいて,それらは番号 0, 1, 2, ..., N-1 で表されているとする。
この N 人の人間関係(知り合いかどうか)を表した配列 a[N][N] がある。
ただし, i 番目の人と j 番目の人とが
知り合いであるときa[i][j] == a[j][i] == 1 であり,
知り合いでないとき a[i][j] == a[j][i] == 0 である。

このとき, x 番目の人から,知り合いの知り合いの知り合い.... という
繋がりで, y 番目の人まで辿り着くには,最小で何回の知り合いという
関係が必要か,
を返す関数 int acquaintDistance(int a[N][N], int x, int y) を作れ。
なお,x 番目の人から y 番目の人に辿り着けない場合には,
acquaintDistance は -1 を返すこととする。
関数名の acquaint は知り合いにさせる, distance は距離という意味である。

ヒント:待ち行列を利用する。最初に x を待ち行列に入れ,
後は,「待ち行列から一つ dequeue して,その人の知り合いを
待ち行列に enqueue する」ということを繰り返す。
ただし,一度 enqueue した人は二度と enqueue しないようにし,
y を enqueue する時点あるいは enqueue する一がいなくなった時点で,
終了する。x から各人までの知り合い距離を入れる配列も用意しておき,
新しい人を enqueue する度に,その人までの距離をその配列に入れる。

[3] 環境
 [3.1] OS:VineLinux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月25日10:00まで
よろしくおねがいします。

109デフォルトの名無しさん:2005/06/24(金) 20:48:24
>>108
普通、ダイクストラ法使わないか?
110デフォルトの名無しさん:2005/06/24(金) 20:55:27
>>108
queueよりstackのほうが作りやすいと思うなー。
111デフォルトの名無しさん:2005/06/24(金) 21:00:07
>>108
とりあえずヒントそのままに愚直に実装したつもり

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/609.txt
112デフォルトの名無しさん:2005/06/24(金) 21:02:14
>>110
幅優先探索をさせたいんじゃないのか
113デフォルトの名無しさん:2005/06/24(金) 21:05:43
[1] 授業単元:プログラミング
[2] 問題文:任意の画像を読み込み、任意の点を中心としたラインプロファイルを180度分とるプログラムを書け。

       つまり、任意の点を通る直線を画像に水平を0度として作成しその直線上の濃度を取得、
       1度ずつ回転し直線を作成してまた直線上の濃度を取得する。という感じです。
       始点と終点さえ分かれば出来そうですがその求め方が分かりません。
       

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):C++ Builder6
 [3.3] 言語:C++
[4] 期限:来週中
[5] その他の制限:特になし
114デフォルトの名無しさん:2005/06/24(金) 21:12:05
115デフォルトの名無しさん:2005/06/24(金) 21:13:56
>>113
濃度って何。 Σ(線分が通るピクセル値)?
任意の画像はどう読み込むの。

むしろ、来週中までの問題を今投げるってことは、
最初から割り切ってここにカキコんでんのか。
少しは自分で実装試みてたら?
116113:2005/06/24(金) 21:29:47
>>115
グレースケールの画像を読み込みます。濃度というより輝度値ですね。直線が通るピクセルの輝度値を取得します。
画像自体はBMPやTIFFをOpenDialogで読み込み、Image1に出力するという感じです。
int theFile = FileOpen(OpenDialog1->FileName, fmOpenRead);
・・・
Image1->Picture->Assign(theBitmap);

任意の点はマウスクリックしてEdit1,Edit2にX,Y座標が出力されておりこれを基にしてます。

所詮言い訳ですけど、課題が出たのは先々週あたりです、
課題自体は複数の問題があり、
1.画像に対する水平線を引きその濃度プロファイルを出力
2.画像に対する垂直線を引きその濃度プロファイルを出力
3.上記の課題
水平と垂直はすぐ出来たんですがこの課題で始点と終点の指定が出来ずに時で完全に詰まってます。
プログラム作成の方針だけでもかまわないので教えてもらえないでしょうか?
117デフォルトの名無しさん:2005/06/24(金) 21:51:06
>>116
Borland C++触ったことねーからOpenDialog()だのFileOpen()だの
ナンノコッチャだけど

イメージの座標が(0,0) 〜 (X,Y)
で、マウスクリックされた「始点」が(x,y)であるとすると、終点は
(X, y * tan(θ) * (X-x)): θが0から1/2πまで
(x, Y):          θが1/2π
(0, y * tan(θ) * (x)):  θが1/2πからπまで
とかそんな感じだろ?

ただの高校数学の問題だとおもうが
118デフォルトの名無しさん:2005/06/24(金) 21:54:19
任意座標(x1,y1)が分かり、直線の角度Cが分かるのならば、(0,Y)を求める(a)。
もし、Y<0ならば、(X,0)を求める(b)

(a)はX=0との交点、(b)はY=0との交点を求めることになる。
実際に紙に書いて試してみてください。分かったら、反対側も同様に。
119117:2005/06/24(金) 21:56:51
あ、式間違ってた
y + tan(theta) * (X-x)
y + tan(theta) * x
だな
120デフォルトの名無しさん:2005/06/24(金) 21:58:34
あと、Bresenhamのalgorithmを使うといいかも。
121デフォルトの名無しさん:2005/06/24(金) 22:23:17
1、プログラミング
2、コンパイラ gcc
指定された正の実数 a の n 乗根の計算
Newton法を用いて指定された正の実数 a の n乗根を求められるように
ただし、 nは自然数であり a も n も main() で与えることとします。
また fx(), dfx() には 元の引数だけでなく n も渡せるようにし、 fx(), dfx() の中で使われる x の べき乗の計算 ( xn) には for ループを用いなさい。

3、os LUNIX c言語
4、明後日までです。
122デフォルトの名無しさん:2005/06/24(金) 22:27:04
正の実数 a の n 乗根を求めます。
a, n を入力して下さい: 2.0 2
x fx dfx
1.500000 2.000000 4.000000
1.416667 0.250000 3.000000
1.414216 0.006944 2.833333
1.414214 0.000006 2.828431
2.000000 の 2 乗根は 1.414214

例(2)
% ./a.out
正の実数 a の n 乗根を求めます。
a, n を入力して下さい: 16.0 4
x fx dfx
12.000977 65520.000000 16384.000000
9.003047 20726.750000 6913.687500
6.757767 6553.889648 2918.962646
5.081286 2069.512451 1234.438843
3.841454 650.645142 524.784546
2.951653 201.762115 226.749710
2.369287 59.903343 102.862167
2.077716 15.511642 53.200199
2.004253 2.635670 35.877216
2.000014 0.136520 32.204563
2.000000 0.000435 32.000652
16.000000 の 4 乗根は 2.000000

123デフォルトの名無しさん:2005/06/24(金) 22:30:02
たびたび、121と122は、くっつかってますから、ここに来るのは、初心者なもんで
すみません。122が実行例です。
124デフォルトの名無しさん:2005/06/24(金) 22:33:04
> LUNIX
どこの国のOSだよ
125デフォルトの名無しさん:2005/06/24(金) 22:38:18
[1] 授業単元: プログラミング
[2] 問題文:
binaryファイルを読み込んで1バイト単位で16進数表示するためのプログラムを作成せよ
ただし256バイトごとに一時停止し継続、中断をできるようにすること
出力例 ./a.out
00 01 02 03 ・・・・・0e 0f
address -----------------------
00000000 30 31 32 33・・・・・45 46
00000010 00 01 02 03・・・・・0e 0f
中略
000000f0 41 42 43 44・・・・・4f 50
([ret]:continue, [q]:quit)?
[3] 環境
 [3.1] OS:mac
 [3.2] コンパイラ:gcc
 [3.3] 言語:C
[4]日曜まで
よろしくお願いします
126デフォルトの名無しさん:2005/06/24(金) 22:38:28
{1}情報処理
{2}階乗関数kaijo() の作成
自然数 n の階乗 (n!= n * (n-1)* ... * 3 * 2 * 1) を計算する関数 kaijo() を定義して、
n を入力すると n!を出力するプログラムを作りなさい。
n の入力と n! の値の出力は、実行例を参考にして main() で行ってください。

実行例
% ./a.out
nを入力してください> 5
5! ---> 120
{3、1}OS : LUNIX
{3,2} gcc
{3,3} C言語
{4}来週の月曜日までです。
('−'*)ヨロシク 御願いします。

127デフォルトの名無しさん:2005/06/24(金) 22:46:10
int kaijo(int s){
int r;
for(r=1;s>=1;r*=s--);
return r;
}
128デフォルトの名無しさん:2005/06/24(金) 22:46:11
>>126
#include <stdio.h>
#include <stdlib.h>
int kaijo(int n)
{
  if (n < 1)
    return 1;
  else
    return n * kaijo(n - 1);
}
int main(void)
{
  char buf[64];
  printf(nを入力してください> ");
  if (fgets(buf, sizeof buf, stdin))
  {
    int n = atoi(buf);
    printf("%d! ---> %d\n", n, kaijo(n));
    return 0;
  }
  return 1;
}
129デフォルトの名無しさん:2005/06/24(金) 22:47:39
LUNIXがブームなのか...
130デフォルトの名無しさん:2005/06/24(金) 22:50:03
らにっくす
131デフォルトの名無しさん:2005/06/24(金) 22:52:03
>>128様
アリガト!(´▽`)ございます。一様、学校にいってやってみます。
132デフォルトの名無しさん:2005/06/24(金) 22:53:57
>>131
nを入力してください"の前にダブルクォーテーションつけてくれ。
133デフォルトの名無しさん:2005/06/24(金) 22:55:42
>>132
(>Д<)ゝ”イエッサ!!
134デフォルトの名無しさん:2005/06/24(金) 23:08:34
[1]情報処理
[2]n の階乗を求める関数 kaijo() を
用いて自然対数の底 e を求めるプログラムを作りなさい。
ただし、結果は級数の第10項(1/9!)までループを使用して計算することとし、
項数についてはマクロを用いて定義することとします。
また、e の計算結果の出力は例を参考にして、 main()で行うこととします。
[3.1]OS LUNIX
[3.2]gcc 
[3.3]c言語
[4] 来週の火曜日までです。
よろしく御願いします。((((((^_^;)
135108:2005/06/24(金) 23:09:16
みなさん早いレスポンスありがとうございます。
参考にもなり助かりました。ありがとうございました。
136113:2005/06/24(金) 23:27:06
>>117-120
わかりました。
これらのことを参考にいろいろやってみます。
ありがとうございました。
137デフォルトの名無しさん:2005/06/24(金) 23:51:11
138デフォルトの名無しさん:2005/06/25(土) 00:20:49
>>134
#include <stdio.h>
#define N 10
double kaijo(int n) {
 return n < 1 ? 1.0 : n * kaijo(n - 1);
}
double e() {
 int i;
 double r = 0;
 for (i = 0; i < N; i++)
  r += 1.0 / kaijo(i);
 return r;
}
int main() {
 printf("%f\n", e());
 return 0;
}
139デフォルトの名無しさん:2005/06/25(土) 00:30:22
[1] 授業単元: 知能情報処理
[2] 問題文(含コード&リンク): 遺伝的アルゴリズムを用いて関数の最適解を求める
[3] 環境 
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン): Borland C++ 5.5.1
 [3.3] 言語:C
[4] 期限今週の水曜
[5] その他の制限:ポインタ 配列 ファイル操作(fopenとか)の序盤 までは習っています


一応自分なりに完成させたのですが望んだ解が得られません

value=(-1)*c1*exp((-1)*c2*sqrt(1/2 * (pow(x1,2) + pow(x2,2)))) + exp(1/2 *((cos(c3 * x1) + cos(c3 * x2)))) + c1 + M_E;

↑はソースの一部なのですがc1,c2,c3には定数が入ります
x1,x2にはランダムな数を入れ、遺伝的アルゴリズムによって最適な解(valueが最大になるx1,x2の組み合わせ)
を探そう、ということなのですが

x1,x2にどのような値を放り込んでもvalueの値が3.718282(double)になってしまいます
x1とx2には指定された範囲で次々にランダムな数が放り込まれているのは確認しています

上にコピペした関数が私のミスでx1,x2によらず3.718282を返してしまうので修正していただけないでしょうか

http://www.geatbx.com/docu/fcnfun10.html
この関数を表現しようとしてますです
140125:2005/06/25(土) 00:33:53
>>137様ありがとうございました
141デフォルトの名無しさん:2005/06/25(土) 00:33:56
[1] 授業単元:PROC
[2] 問題文(含コード&リンク):

catコマンドとegrepコマンドとwcコマンドをパイプでつないで起動することで、
テキストファイルから空行を除いた上で行数・単語数・バイト数を数えるプロ
グラムを書け。 複数のファイルが指定されたときは、合計のみを表示するよ
うにすること。

[3] 環境
 [3.1] OS:vineLinux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月25日12:00まで
おねがいいたします。。
142デフォルトの名無しさん:2005/06/25(土) 00:43:57
>>139
取りあえず、
+ exp(1/2 *((cos(c3 * x1) + cos(c3 * x2)))) + c1 + M_E; 

- exp(1/2 *((cos(c3 * x1) + cos(c3 * x2)))) + c1 + M_E; 

定数とか、型宣言見ないと、なんとも言えん。
143デフォルトの名無しさん:2005/06/25(土) 00:55:45
do-while文を用いてキーボードから入力された値が素数であるかどうかを判別するプログラム
を作成せよ。入力された値が素数の場合は素数と出力し素数で無い場合は最小の因数を出力せよ

と言う問題なんですがぜんぜんわかりません
144139:2005/06/25(土) 01:06:19
>>142
double calcval(int p[N])
{
  int i;
  double value,x1,x2,m1,m2;
  double c1=20.0 ,c2=0.2, c3=2.0*M_PI;
  
  m1=0;
  for(i=0; i<16; i++)
    {
      m1=(m1+p[i]*pow(2,i));
    }
  m1=m1-32768;
  x1=(double)m1/32768*5;

  m2=0;
  for(i=16; i<N; i++)
    {
      m2=(m2+p[i]*pow(2,i));
    }
  m2=m2-32768;
  x2=(double)m2/32768*5; 
    
  value=(-1)*c1*exp((-1)*c2*sqrt(1/2 * (pow(x1,2) + pow(x2,2)))) + exp(1/2 *((cos(c3 * x1) + cos(c3 * x2)))) + c1 + M_E;

  return value; 
}

これが関数全体です
p[N]はp[32]={ランダムに0か1}
145デフォルトの名無しさん:2005/06/25(土) 01:09:28
>>143
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
  char buf[256];
  int i, n, last;
  n = atoi(fgets(buf,sizeof(buf),stdin));
  if( n < 2 ) { fprintf(stderr, "input error\n"); return 0; }
  last = sqrt(n);
  i = 2;
  do { }while(++i <= last && n % i);
  if( i > last ) printf("%d は 素数\n", n);
  else  printf("%d は 合成数 [ 最小因数 %d ]\n", n, i);
  return 0;
}
146デフォルトの名無しさん:2005/06/25(土) 01:28:39
>>144
x1, x2の算出はそれでいいのか?
-32.768<=x(i)<=32.768の条件を満たさないぞ
147デフォルトの名無しさん:2005/06/25(土) 01:33:22
詳しいことは知らんが
1/2→0 で演算される(∵1も2もintだから)からそれに何を掛けようが0。
後は無駄な演算を最初からやめるべき。GAなら時間かかる実験をやるわけだろ?
1/2→0.5
pow(x1,2)→x1*x1
(-1)*→-
148デフォルトの名無しさん:2005/06/25(土) 01:57:44
>>143
テンプレくらい嫁
#include <stdio.h>
int is_sosuu( int val )
{
int num = 2;
do{
if( 0 == val % num ) return num;
num ++;
}while( num<val );
return 0;
}
int main( void )
{
int val;
scanf( "%d", &val );
val = is_sosuu( val );
if( 0 == val ) printf( "素数\n" );
else printf( "最小の因数 %d\n", val );
return 0;
}
149デフォルトの名無しさん:2005/06/25(土) 02:03:17
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク): ttp://acm.uva.es/problemset/v1/105.html これを解く
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年06月28日13:00まで

よろしくおねがいします
150デフォルトの名無しさん:2005/06/25(土) 02:26:53
>>149
ttp://online-judge.uva.es/board/viewtopic.php?t=7059
P.E.を無くすくらい何とかしろ
151デフォルトの名無しさん:2005/06/25(土) 02:38:01
[1]プログラム
[2]文字ピラミッドの作成
実行例に示すように文字 + を使って指定された高さの文字ピラミッドを書くプログラムを考える。 1行の幅を41文字とし、高さが1の時はその中央21文字目に + を書き、
高さが2の時はさらに中央21文字目を中心に幅3だけ + を書くことにします。
サンプルプログラムの関数 line_display()内を補って、完成させなさい。
 [3・1]OS:Linux
 [3・2]gcc
 [3・3]c言語
[4]来週の水曜日 です
152デフォルトの名無しさん:2005/06/25(土) 02:41:30
>>149
#include <stdio.h>
#include <string.h>
#define N30
int main(void)
{
int a[N];
int i, s, e, pos, height;
memset(a, 0, sizeof(a));
while (scanf("%d %d %d", &s, &height, &e) == 3) {
for (i = s; i < e; i++) {
if (height > a[i]) {
a[i] = height;
}
}
}
height = 0;
for (i = 0; i < N; i++) {
if (height != a[i]) {
printf("%d %d ", i, a[i]);
height = a[i];
}
}
printf("\n");
return 0;
}
153デフォルトの名無しさん:2005/06/25(土) 04:14:25
>>151
#include <stdio.h>
void line_display(int h)
{
char line[42];
int i, j;
for (i = 0; i < 41; i++) {
line[i] = ' ';
}
line[i] = '\0';
for (i = 0; i < h; i++) {
line[21 - i] = line[21 + i] = '+';
printf("%s\n", line);
}
}
int main()
{
int x;
printf("takasa?: ");
scanf("%d", &x);
line_display(x);
return 0;
}
154デフォルトの名無しさん:2005/06/25(土) 11:00:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
多項間の四則演算及び累乗(^で表現する)に対応し、多重括弧に対応する電卓を作れ。
演算子「+」「-」「*」「/」「^」間の優先順位も正しく扱えること。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1
 [3.3] 言語:C
[4] 期限:日曜PM6:00まで
[5] その他の制限:配列に数式を読み込んで、計算結果を出力させます。
ご指導をお願いします。
155デフォルトの名無しさん:2005/06/25(土) 11:03:43
[1]プログラム
[2]squeeze?の作成
getlineを使って文字列s2の文字と等しい文字を区切られた文字列s1(ただし「、」で区切られている)から除去されるようなプログラムをかく。
  [3・1]OS:Linux
 [3・2]gcc
 [3・3]c言語
[4]来週の火曜日 です

今独学で勉強しています。「プログラミング言語C第2版」のP59.演習2−4の変則問題です。答えの本:アンサーブックをみたのですが、

void squeeze(char s1[], char s2[])
{
int i, j, k;

for (i = k = 0; s1[i] != '\0'; i++){
for (j = 0; s2[j] != '\0' && s2[j] != s1[i]; j++)
;
if (s2[j] == '\0')
s1[k++] = s1[i];
}
s1[k] = '\0';
}

そこしかのっていませんでした。ほかの部分がわからないので教えてください。お願いします。

156デフォルトの名無しさん:2005/06/25(土) 11:15:16
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク): 引数で与えられた数だけ画面に * を表示する関数を作成する。それを用いて20以下の乱数で求まった長さの*線を10本引いて終了する。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):visual C++6.0
 [3.3] 言語:C++
[4] 期限:なるだけ早くお願いします
[5] その他の制限:関数の作成

どなたか助けて下さい
157156:2005/06/25(土) 12:14:44
なんとか出来ましたので、↑は無視してください
158本物の156:2005/06/25(土) 12:30:27
>>157は偽物です。

どうかお願いします。
159デフォルトの名無しさん:2005/06/25(土) 12:54:15
sin(x)のテイラー展開の近似がわからないんです。
教えてくれませんか?
160デフォルトの名無しさん:2005/06/25(土) 12:56:22
テイラーに聞けよ
161デフォルトの名無しさん:2005/06/25(土) 12:57:32
162デフォルトの名無しさん:2005/06/25(土) 13:00:23
163デフォルトの名無しさん:2005/06/25(土) 13:02:39
>>158
#include <stdio.h>
int main( int argc, char *argv[] )
{
   int i, j, line_length;
   if( argc < 2 ) return -1;
   sscanf( argv[1], "%d", &line_length );
   if( line_length > 0 )
      for( i=0; i<10; i++ ){
         for( j=0; j<line_length; j++ ) putchar('*');
         putchar('\n');
      }
   return 0;
}
164デフォルトの名無しさん:2005/06/25(土) 13:23:29
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
実空間サイズが200×200の2次元平面で、原点座標を実空間の中央(100.100)と考えた仮想空間があります。
その仮想空間で、座標値を入力し、原点からの入力座標の角度を求め、表示せよ。
※求める角度は整数値とする。
※X軸のプラス方向を0度とする。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):Visual C++
 [3.3] 言語:C++
[4] 期限:6月30日
[5] その他の制限:
atan(?)は使わなくて出来るとかおっしゃってました。

よろしくお願いします(_ _(--;
165デフォルトの名無しさん:2005/06/25(土) 13:29:31
>>159
f(x)=a0+a1*x+a2*x^2+a3*x^3+a4*x^4+…
と置く。(式1)(こういう形の式になってくれるとうれしいと願う気持ち)
f'(x)=a1+2*a2*x+3*a3*x^2+4*a4*x^3+…
f''(x)=2*a2+6*a3*x+12*a4*x^2+…
f'''(x)=6*a3+24*a4*x+…
f''''(x)=24*a4+…

だから、
f(0)=a0, f'(0)=a1, f''(0)=2*a2, f'''(0)=6*a3, f''''(0)=24*a4, …
これがどんな数列になっているのかと考えてみると、
f^(k)(0)=k!*ak (k=0,1,2,3,4,…)
<=> ak=f^(k)/k!
となる。(式2)(こうなる証明は省略)
さて、
f(x)=sin(x)だから、f'(x)=cos(x), f''(x)=-sin(x), f'''(x)=-cos(x), f''''(x)=sin(x), …
f(0)=0, f'(0)=1, f''(0)=0, f'''(0)=-1, f''''(0)=0, f'''''(0)=1…
これを式2に代入すると、
a0=0, a1=1, a2=0, a3=-1/3!, a4=0, a5=1/5!…
式1に代入すると、
f(x)=sin(x)=x-x^3/3!+x^5/5!+…
166デフォルトの名無しさん:2005/06/25(土) 16:04:24
載せてみようかな?
167デフォルトの名無しさん:2005/06/25(土) 19:54:16
>>164
atan2使えば楽なのに何故敢えて使わない?
168159:2005/06/25(土) 20:46:17
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
   「sin(x)=x-x^3/3!+x^5/5!+…∞を近似、計算し、数学関数の値を比較する」
[3] 環境
 [3.1] OS:Windows 
 [3.2] コンパイラ(バージョン): わかりません
 [3.3] 言語:C
[4] 期限:6月29日まで
[5] その他の制限:まだ初心者でほとんどわかりません

ホントわからないんでお願いします!
169デフォルトの名無しさん:2005/06/25(土) 20:55:39
>>168
比較とはグラフと数値のどっちだ?
170デフォルトの名無しさん:2005/06/25(土) 21:24:14
>>168
#include <stdio.h>
#include <math.h>
#define   factorial(x)   gamma((double)(x)+1.0)
#ifndef   M_PI
#define   M_PI   3.14159265
#endif
#define   X   (M_PI/6)   /* 30 degree */
int main( void ){
   double answer=0.0, work=-1.0;
   int i=1;
   while( work != answer ){
      work = answer;
      answer += (double)((i%4==3) ? -1 : 1)*pow(X, (double)i)/factorial(i);
      i+=2;
   };
   printf("x = %f\n", X);
   printf("sin(x) = %f\n", sin(X));
   printf("Maclaurin expansion -> %f\n", answer);
   printf("error = %f\n", sin(X) - answer);
   return 0;
}
171デフォルトの名無しさん:2005/06/25(土) 21:39:20
>>167
アークタンジェント(実は数学全然理解していない自分…orz)をつかえば一発ででるけど
別のやり方でできる、と言われました。
まぁ、使っては駄目とは言われてないので、atan(?)を使ってプログラム書いてもいいのかもしれませんが……。
172デフォルトの名無しさん:2005/06/25(土) 22:15:20
つ complex<double>
173デフォルトの名無しさん:2005/06/25(土) 22:27:04
「nとxを入力し、n^xを出力するプログラムを書け」
って課題が出たけど、pow関数使ったやつは作り直しになってた。
まあテーマが「アルゴリズム」だったからだろうけど
174デフォルトの名無しさん:2005/06/25(土) 22:33:13
175デフォルトの名無しさん:2005/06/25(土) 22:44:51
>173
もしかして
文字'n'をval1、'x'をval2に入力させて
printf("%c^%c\n", val1, val2);
176デフォルトの名無しさん:2005/06/25(土) 22:59:35
>>173
自然数オンリーなら
int mypow(int x, int y)
{
int r = 1;
int mask = 0x40000000;
for( ; mask ; mask >>= 1) {
r *= r;
if(mask & y) r *= x;
}
return r;
}
多分まともに動く。
177デフォルトの名無しさん:2005/06/25(土) 23:41:01
[1] 授業単元:情報処理C繰り返し
[2] 問題:数値を入力し、最大値、最小値、平均値を出力せよ。
※-999が入力されたら入力を終了し、最大値、最小値、平均値を表示する。
平均の値は小数6桁まで表示
↓↓↓実行結果↓↓↓
1
4
5
-999
平均3.333333
最大5
最小1
[3] 環境
 [3.1] OS:Windows
 [3.2] BCC++:
 [3.3] 言語:C
[4] 期限:2005年06月26日1:00まで
[5] その他の制限:とくになし。
178デフォルトの名無しさん:2005/06/25(土) 23:41:21
[1] 授業単元:情報処理C繰り返し
[2] 問題:数値を入力し、最大値、最小値、平均値を出力せよ。
※-999が入力されたら入力を終了し、最大値、最小値、平均値を表示する。
平均の値は小数6桁まで表示
↓↓↓実行結果↓↓↓
1
4
5
-999
平均3.333333
最大5
最小1
[3] 環境
 [3.1] OS:Windows
 [3.2] BCC++:
 [3.3] 言語:C
[4] 期限:2005年06月26日1:00まで
[5] その他の制限:とくになし。
179173:2005/06/25(土) 23:51:41
>>176
三ヶ月前の話ですので一応できました。
ちなみにx,n共に符号付対応です。
今見ると拙い出来だったので今から作り直して見ます
180デフォルトの名無しさん:2005/06/25(土) 23:56:20
>>177
#include <stdio.h>
#include <limits.h>

int main(void) {
    int n, max = INT_MIN, min = INT_MAX, num = 0, sum = 0;
    while (1) {
        scanf("%d", &n);
        if (n == -999) break;
        ++num; sum += n;
        if (max < n) max = n;
        if (n < min) min = n;
    }
    printf("平均%.6f\n最大%d\n最小%d", (double)sum / num, max, min);
    return 0;
}
181デフォルトの名無しさん:2005/06/26(日) 00:03:45
>>178
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
    int *pArray = 0;
    int Max = 0, Min = INT_MAX, Total = 0;
    int i, n;
    for (i = 0; ; i++) {
        int n;
        pArray = (int *)realloc(pArray, (i + 1) * sizeof (int));
        if (!pArray)
            return 1;
        else if (scanf("%d%*[^\n]%*c", &n) == 0)
            return 1;
        else if (n == -999)
            break;
        else if (Max < n)
            Max = n;
        if (Min < n)
            Min = n;
        Total += n;
        pArray[i] = n;
    }
    n = i;
    for (i = 0; i < n; i++)
        printf("%d\n", pArray[i]);
    printf("平均 %f\n最大%d\n最小%d\n", (double)Total / n, Max, Min);
    free(pArray);
    return 0;
}
182デフォルトの名無しさん:2005/06/26(日) 00:20:33
>>181
それは嫌がらせだろ(w
183デフォルトの名無しさん:2005/06/26(日) 02:42:25
>最大値、最小値、平均値
>-999が入力されたら入力を終了

入力値の条件が足りてないだろ?
マイナスを許可してるのか?(でも-999は別扱い...)
32bitなのか?
184デフォルトの名無しさん:2005/06/26(日) 03:51:14
[1] 授業単元: CG
[2] 問題文(含コード&リンク):
static GLfloat vertex[][3]={
{0.0,0.0,0.0},
{1.0,0.0,0.0},
{1.0,1.0,0.0},
{0.0,1.0,0.0},
{0.0,0.0,1.0},
{1.0,0.0,1.0},
{1.0,1.0,1.0},
{0.0,1.0,1.0}};
この頂点座標から法線ベクトルを計算するプログラムを作成し、結果をnormalに格納せよ
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン): Borland C++ 5.5
 [3.3] 言語:C
[4] 期限:26日午後1時まで
[5] その他の制限:特になし
すいません、アホで全く分からず(汗
よろしくお願いします
185デフォルトの名無しさん:2005/06/26(日) 03:56:08
>法線ベクトル
とは?

>normal
型と宣言は?
186デフォルトの名無しさん:2005/06/26(日) 05:30:03
>>184
main(){
normal[0][0] = 0; normal[0][1] = 0; normal[0][2] = -1;
normal[1][0] = 0; normal[1][1] = 0; normal[1][2] = 1;
}
187デフォルトの名無しさん:2005/06/26(日) 09:29:15
>>185
プッ
188デフォルトの名無しさん:2005/06/26(日) 11:00:34
よろしくお願いします。
[1] 授業単元:LINUXプログラミング
[2] 問題文:システムコールのforkとexecvを用いて、
コマンドインタープリタ(myshという名称とする)を作成せよ。
ただし以下の機能をサポートすること。
・設定ファイル(.path)にコマンドサーチパスを指定できること。
 なお、ファイル内のパスの指定方法は、各自で考えて定義すること。
・パイプを利用して複数のコマンドの入出力を結合できること。
・ヒストリの機能をサポートすること。
 "history"コマンドは、引数なしで実行すると過去のコマンド実行のヒストリを表示し、
 引数を指定するとその引数に相当するヒストリ内のコマンドを実行するものである。
・コマンドの実行中にCtrl-Cを入力すると、現在のコマンドの実行を中断できること。
・exitの入力により、myshを終了できること。
[3.1] OS:Linux
[3.2] コンパイラ:gcc
[3.3] 言語:C
[4] 期限:2005年6月28日23:59まで
よろしくお願いします。
189デフォルトの名無しさん:2005/06/26(日) 11:31:44
>>188
あと36時間がんばろうよ。
190デフォルトの名無しさん:2005/06/26(日) 14:12:14
>・設定ファイル(.path)にコマンドサーチパスを指定できること。
> なお、ファイル内のパスの指定方法は、各自で考えて定義すること。
ここくらいは自分で定義しようよ
191デフォルトの名無しさん:2005/06/26(日) 14:12:32
>>186-187
プッ
192デフォルトの名無しさん:2005/06/26(日) 14:15:19
>>191
プッ

for(;;)
193デフォルトの名無しさん:2005/06/26(日) 16:12:17
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
W杯予選対戦成績を入力して予選グループ内の順位表を表示するプログラムを作成しよう。
順位表 
Team MP W D L GF GA Pts
Iran 5 4 1 0 6 1 13
Japan 5 4 0 1 7 3 12
Bahrain 5 1 1 3 2 4 4
Korea DPR 5 0 0 5 2 9 0
略記和表記意味
MP 試合数現時点までの試合数
W 勝数 現時点までの勝った試合数
D 引分数 現時点までの引き分けた試合数
L 負数 現時点までの負けた試合数
GF 得点 現時点までの得点合計
GA 失点 現時点までの失点合計
Pts 勝点1試合での勝ちは3 点, 引き分けは1 点、負けは0点。現時点までの合計
194584:2005/06/26(日) 16:12:29
>>1-192
プッ
195↑続き:2005/06/26(日) 16:15:30
実現例
> a.exe
Type ’I’ or ’E’ [Input score:I/End:E] > I  <- 予選1戦を入力するので,’I’
<<Iran(IRN):0 Japan(JPN):1 Bahrain(BHN):2 Korea DPR(PRK):3>>
Type the code of home team > 2 <- ホームチームはバーレーン
Goals of Bahrain> 0             <- バーレーンの得点は0  
Type the code of away team > 0 <- アウェイチームはイラン
Goals of Iran> 0              <- イランの得点は0    
Bahrain(BHN)- Iran(IRN)[0 - 0 ] : OK ?[Y/N] >Y <- 確認 OK なので’Y’
Type ’I’ or ’E’ [Input score:I/End:E] > 3 <- 入力ミス 
Type ’I’ or ’E’ [Input score:I/End:E] > I <- 訂正  
<<Iran(IRN):0 Japan(JPN):1 Bahrain(BHN):2 Korea DPR(PRK):3>>
Type the code of home team > 1
Goals of Japan>2
Type the code of away team > 3
Goals of Korea DPR>1
Japan(JPN)- Korea DPR(PRK)[2 - 1 ] : OK ?[Y/N] >Y
196↑さらに続き:2005/06/26(日) 16:19:26
Type ’I’ or ’E’ [Input score:I/End:E] > I
<<Iran(IRN):0 Japan(JPN):1 Bahrain(BHN):2 Korea DPR(PRK):3>>
Type the code of home team > 3
Goals of Korea DPR>1
Type the code of away team > 2
Goals of Bahrain>2
Korea DPR(PRK)- Bahrain(BHN)[1 - 2 ] : OK ?[Y/N] >Y
Type ’I’ or ’E’ [Input score:I/End:E] > I
<<Iran(IRN):0 Japan(JPN):1 Bahrain(BHN):2 Korea DPR(PRK):3>>
Type the code of home team > 1
Goals of Japan> 10
Type the code of away team > 0
Goals of Iran> 0
Japan(JPN)- Iran(IRN)[10 - 0 ] : OK ?[Y/N] >N   <- 入力ミスなので’N’
Type the code of home team > 0
Goals of Iran> 2
Type the code of away team > 1
Goals of Japan> 1
Iran(IRN)- Japan(JPN)[2 - 1 ] : OK ?[Y/N] >Y
Type ’I’ or ’E’ [Input score:I/End:E] > I
197↑さらに続き:2005/06/26(日) 16:20:48
Type ’I’ or ’E’ [Input score:I/End:E] > E
=============================
Iran 3 2 1 0 4 1 7
Japan 2 1 0 1 3 3 3
Bahrain 2 1 1 0 2 1 4
Korea DPR 3 0 0 3 2 6 0
=============================

[3] 環境
 [3.1] OS:Linuxエミュレータ
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月27日
[5] その他の制限:ポインタ までやりました
長文失礼しました。【アップローダー==ラウンジ】が落ちているのかつながらなかったため、このような形式ですみません。
最終的に最後の表を出力させるのが目的です。
どうかよろしくお願いします。
198デフォルトの名無しさん:2005/06/26(日) 16:32:05
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):
2〜1000までの表をつくり、
エラトステネスのふるいを用いて、素数を求め、素数には○、素数以外には×をつけよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Visual C++
 [3.3] 言語:C
[4] 期限:6/30まで
[5] その他の制限:if,whlie,for,配列までしかやってないんでその範囲でお願いします
199デフォルトの名無しさん:2005/06/26(日) 17:08:10
>>198
どういう表が必要かがわからない。
#include <stdio.h>
#define N 1000
int main(void) {
    int i, sieve[N + 1], notprime;
    char marubatsu[2][3] = {"○", "×"};
    for (i = 2; i <= N; i++) sieve[i] = 1;
    sieve[0] = sieve[1] = 0;
    for (i = 2; i <= N / 2; i++) {
        notprime = i;
        while ((notprime += i) <= N) sieve[notprime] = 0;
    }
    for (i = 2; i <= N; i++)
        if (sieve[i]) printf("%s%d\t", marubatsu[0], i);
        else printf("%s%d\t", marubatsu[1], i);
    return 0;
}
200デフォルトの名無しさん:2005/06/26(日) 17:21:48
>>199
問題分には表については詳しく書いてなかったんで、こんな感じでいいんだと思います
ただ、そのプログラムだとやってないとこ使いまくりなんでちょっと心配w(まだ文字列もreturnすらもやってません)
ありがとうございました。これを参考になんとかバレないように改良します
201デフォルトの名無しさん:2005/06/26(日) 17:26:03
>>200
returnは決まり文句だと思っておいて気にするな。
202199:2005/06/26(日) 17:28:36
char[]いらんかった。(言い訳:最初3項演算子で書いてた)
これでprintfの中の文字列のspecifier使わなくてすむ。
#include <stdio.h>
#define N 1000
int main(void) {
    int i, sieve[N + 1], notprime;
    for (i = 2; i <= N; i++) sieve[i] = 1;
    sieve[0] = sieve[1] = 0;
    for (i = 2; i <= N / 2; i++) {
        notprime = i;
        while ((notprime += i) <= N) sieve[notprime] = 0;
    }
    for (i = 2; i <= N; i++)
        if (sieve[i]) printf("○%d\t", i);
        else printf("×%d\t", i);
    return 0;
}
203デフォルトの名無しさん:2005/06/26(日) 19:13:04
                 ,.,.,.,.,.,.,.,.,__
               ,;f::::::::::::::::::::::::::ヽ
               i/'" ̄ ̄ヾ:::::::::::i
               |,,,,_ ,,,,,,_  |::::::::|   
               (三);(三)==r─、|   見よ!この肉体美!!
               { (__..::   / ノ′  
.               ', ==一   ノ
                !___/_>、,,..- 、
          ィ'''フ''''=、r'"~ ヽ、-=- /i,, `ヽr''"`ヽ、ヽ、
       ,r'"´ ノ"    )=、.,_ゝニノ,,..ィ'"´i       ヽ、
       (       ノ  ´ ̄ `Y"´            i
         )     __,,..         レ      _,,,,、      j、、
      , '    ヽィ'''i"       J   ,,.ィ'"~  `'ヲ'''ー-、ノ、ヽ
     .{ _.ト、   Y人        ,,l、        ノt'  イノ.ノ    
      '、 >.ト  '/ `ゝ、       人       ,,イ  jt、 __...-'
       ' .,,_ _ ノ、   `ー--;::-ニ"_,ゝ=---‐''"    ノ
           ヽ、 r  、 f"   `i´ ̄` Y  `ヽ /
.              ヽj  ミi      !    j'   | /
               `i  、〉、.__,人,___,..イ、,i" j''
                i  ヽf     Y    ,j,.  ,/
               l ヽ、    .|   ノ ,. /
                 l  、j`ー‐‐'`ー="レ' j'
                l  ヽ  -ニ-  ノ  l
                l   `i     /  ,l
               人  ヽ    /   ノヽ
              / ヽ、       /  ヽ
204デフォルトの名無しさん:2005/06/26(日) 19:27:55
>>188
同じ学科だけどそれぐらい自分でガンバレ
205デフォルトの名無しさん:2005/06/26(日) 22:13:30
[1] 授業単元:配列、度数分布
[2] 問題文(含コード&リンク):
試験結果を用い、3科目の合計点の得点分布(度数分布)と平均、分散を求める。
ただし、合計点は、0〜29、30〜59、…270〜299、300と30点間隔にする。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:Visual C++
[4] 期限:6月27日15時まで
[5] その他の制限:↓に試験結果
206デフォルトの名無しさん:2005/06/26(日) 22:13:51
番号英語数学国語
1174330
2383955
31008658
4958863
5235272
6624958
7778084
8452562
9697348
10817795
11836455
12514747
13426285
14365064
15607638
207デフォルトの名無しさん:2005/06/26(日) 22:15:36
う、すいません。1から15番です
208デフォルトの名無しさん:2005/06/26(日) 22:19:50
区切りもじってないの?
100点取ったやつがいたり一桁台取ったやつがいた場合どうすんの?
209デフォルトの名無しさん:2005/06/26(日) 22:22:25
半角スペースがつぶれてるんだろ。
210デフォルトの名無しさん:2005/06/26(日) 22:25:59
すみません、書き直します
とりあえず、3番の英語が100点です。
あとは、100点も一桁もいません
211デフォルトの名無しさん:2005/06/26(日) 22:29:09
番号 英語 数学 国語
1   17  43  30
2   38  39  55
3   100  86  58
4   95  88  63
5   23  52  72
6   62  49  58
7   77  80  84
8   45  25  62
9   69  73  48
10   81  77  95
11   83  64  55
12   51  47  47
13   42  62  85
14   36  50  64
15   60  76  38
212デフォルトの名無しさん:2005/06/26(日) 22:37:33
>>205
試験結果はユーザに直接入力させるの?それともコードに配列を直書き?
それともファイルから読み込み?
213デフォルトの名無しさん:2005/06/26(日) 22:45:32
配列をつかって、書きます
214デフォルトの名無しさん:2005/06/26(日) 23:01:38
           , -'"´  ̄`丶、_
           ,.∩         `ヽ
         〃∪'´ ̄`二二人\  ヽ
         | ツ´ ̄ ̄ ̄ ̄´ ヾ ヽ. ',
         |ハ ,ニ、   ,. - 、 | | | l |
         | ハ ィハ     ,二ヽ. | | | | | 同じ板にコピペするとそのままだけど、
         | | | じ'   |トJ〉  /)} l | 違う板にコピペすると鬼のような怖い顔
         | ハ  、'_,   ̄,, 厶イ川| に変わる摩訶不思議な佳子様コピペ。
         l l /\    .. イV\川 |
         ,' l l ,イ `l ̄´ /   /ヽl l
         l | l ハ  `メ、    〃  ヽヽ、__ノ
         l  ∨ └‐イ「ト--ァ'´     ハヽ__ノ
         ヽ/  }  l」」 /     / }`ー
          〈_n| 八   / /     /ノ
          〈二二人 c /\/ / , イ
           /  /厂 /\__>< {_
215デフォルトの名無しさん:2005/06/26(日) 23:09:23
>>205
雑だが。
#include <stdio.h>
#define N 15
int main(void) {
    int score[N][3] = {
        { 17, 43, 30}, { 38, 39, 55}, {100, 86, 58}, { 95, 88, 63}, { 23, 52, 72},
        { 62, 49, 58}, { 77, 80, 84}, { 45, 25, 62}, { 69, 73, 48}, { 81, 77, 95},
        { 83, 64, 55}, { 51, 47, 47}, { 42, 62, 85}, { 36, 50, 64}, { 60, 76, 38}
    }, total[N];
    int i, dist[11] = {0}, sum = 0;
    double variance = 0.;
    for (i = 0; i < N; i++) {
        sum += total[i] = score[i][0] + score[i][1] + score[i][2];
        ++dist[total[i] / 30];
    }
    for (i = 0; i < N; i++)
        variance += (total[i] - (double)sum / N) * (total[i] - (double)sum / N);
    printf("得点分布\n");
    for (i = 0; i < 10; i++) printf("%3d〜%3d:%3d\n", i * 30, i * 30 + 29, dist[i]);
    printf("300   :%3d\n", dist[i]);
    printf("平均:%f\n", (double)sum / N);
    printf("分散:%f", variance / N);
    return 0;
}
216デフォルトの名無しさん:2005/06/26(日) 23:51:07
ありがとうございました
217デフォルトの名無し:2005/06/27(月) 01:06:17
[1] 授業単元: 関数
[2] 問題文(含コード&リンク):
 main関数内で0〜10までの5個ののランダムなint型整数値を一元配列data1に格納するものとする。
 また、0〜10までの10個のランダムなdouble型実数値を一元配列data2に格納する。
 この時、int型のデータ数nとint型の一元配列dataを引数として、
データのdouble型平均値を返す関数averageを作成し、この関数を多重定義することにより、
double型一元配列の平均値も算出できるようにせよ。
 最後に、main関数でdata1とdata2の平均値を出力するようなプログラムを
トップダウン方式で作成せよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:2005年6月27日まで
[5] その他の制限:関数辺りまで習ってます。
218デフォルトの名無しさん:2005/06/27(月) 01:16:32
↓前順による木のなぞりのプログラム例がある
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/619.txt
これを参考に2分木を作成し、その木をなぞるプログラムを作成してください
m(_ _)m ヨロシクお願いします
219デフォルトの名無しさん:2005/06/27(月) 01:22:01
>>217
「トップダウン方式」って、main()が最初に来るってコト?
220デフォルトの名無しさん:2005/06/27(月) 01:24:58
>>219
そうです。つまりは関数が下。
main()の上に関数プロトタイプ宣言っていうのが必要みたいですけど。
221デフォルトの名無しさん:2005/06/27(月) 01:27:19
酷い誤用だ
222デフォルトの名無しさん:2005/06/27(月) 01:39:17
>>217
適当だけど、こんなん?

#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;

double average(int, int*);
double average(int, double*);

int main(){
int data1[5];
double data2[10];

srand(time(NULL));

for(int i = 0; i < 5; i++)
data1[i] = rand() % 11;
cout << "data1: ave = " << average(5, data1) << endl;

for(int i = 0; i < 10; i++)
data2[i] = rand() * 10 / (double)RAND_MAX;
cout << "data2: ave = " << average(10, data2) << endl;
}
223デフォルトの名無しさん:2005/06/27(月) 01:39:39
続き


double average(int n, int *data){
double ave = 0;

for(int i = 0; i < n; i++)
ave += data[i];

return ave / (double)n;
}

double average(int n, double *data){
double ave = 0;

for(int i = 0; i < n; i++)
ave += data[i];

return ave / (double)n;
}
224デフォルトの名無しさん:2005/06/27(月) 01:49:13
>>217
こんなんで…いいわけないか。
#include <numeric>
#include <iostream>
#include <cstdlib>
#include <ctime>

double average(int, int*);
double average(int, double*);

int main() {
    int data1[5]; double data2[10];
    std::srand((unsigned)std::time(0));
    for (int i = 0; i < sizeof(data1) / sizeof(data1[0]); i++)
        data1[i] = (int)(std::rand() / (1. + RAND_MAX) * 11.);
    for (int i = 0; i < sizeof(data2) / sizeof(data2[0]); i++)
        data2[i] = (double)std::rand() / RAND_MAX * 10.;
    std::cout << average(5, data1) << '\n' << average(10, data2) << std::endl;
}

double average(int n, int* data) {
    return std::accumulate(data, data + n, 0.) / n;
}

double average(int n, double* data) {
    return std::accumulate(data, data + n, 0.) / n;
}
225デフォルトの名無しさん:2005/06/27(月) 01:50:22
>>222-223
ありがとうございますっ!
お陰で凄い助かりました!
226デフォルトの名無しさん:2005/06/27(月) 01:53:18
>>224
ありがとうございますっ!
同じ結果出すのにしても色々記述方法があるんですね・・。
227デフォルトの名無しさん:2005/06/27(月) 02:13:13
>193も助けて・・・
228デフォルトの名無しさん:2005/06/27(月) 02:15:40
>>193
実行例読むのがめんどい…
229218:2005/06/27(月) 02:18:53
書き方が悪かったので訂正しますね

[1]単元:cプログラミング
[2]コード&リンク
↓前順による木のなぞりのプログラム例がある
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/619.txt
これを参考に2分木を作成し、その木をなぞるプログラムを作成してください
m(_ _)m ヨロシクお願いします
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4]できるだけ早めにお願いしますm(__)m
[5]教科書は終わりました、演習中です
230デフォルトの名無しさん:2005/06/27(月) 02:39:11
Iran(IRN):0 Japan(JPN):1 Bahrain(BHN):2 Korea DPR(PRK):3
の順なのか...
Ptsの順ではなく

あと、PKで決まった場合の入力はどうすんだろ?
231デフォルトの名無しさん:2005/06/27(月) 02:48:53
>228
ぐは
>230
PKは考えなくていいみたいです
最終的に並び替えるときはPts順みたいでした。申し訳ないです。
これの最後に書いた表は並び替えの処理をしなかった場合の例だったようです
232デフォルトの名無しさん:2005/06/27(月) 07:02:28
>>231
まだいる?
233デフォルトの名無しさん:2005/06/27(月) 09:16:19
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):関数を利用してx*x+y*y+z*zの計算を求めなさい。この際、2種類のタイプ
              (1)void型(2)return
            をそれぞれ利用したプログラムを作りなさい。x、y、zは任意の値である。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:6月28日まで
[5] その他の制限:if,for,while、配列までやりました

234デフォルトの名無しさん:2005/06/27(月) 09:25:11
#include <stdio.h>
void kansuu1(double x, double y, double z, double * kekka)
{
  * kekka = x * x + y * y + z * z;
}
double kansuu2(double x, double y, double z)
{
  return x * x + y * y + z * z;
}
int main()
{
  double z;
  kansuu1(1, 2, 3, &z);
  printf("%f\n", z);
  z = kansuu2(1, 2, 3);
  printf("%f\n", z);
  return 0;
}
235デフォルトの名無しさん:2005/06/27(月) 09:38:36
>>233
遅かったけど、折角つくったからAGE。

#include <stdio.h>

void XYZ01(double *Val,double x,double y,double z){
*Val=x*x+y*y+z*z;
}

double XYZ02(double x,double y,double z){
return x*x+y*y+z*z;
}

int main(){
double x,y,z,a1,a2;

puts("input X");
scanf("%lf",&x);
puts("input Y");
scanf("%lf",&y);
puts("input Z");
scanf("%lf",&z);
XYZ01(&a1,x,y,z);
a2=XYZ02(x,y,z);

printf("Type[Void:%lf]\nType[Return:%lf]\n",a1,a2);


}
236デフォルトの名無しさん:2005/06/27(月) 09:54:33
>>234
>>235
二人とも、ありがとうございます
237デフォルトの名無しさん:2005/06/27(月) 10:13:19
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):一般項が(2nー1)である数列の和を求めるプログラミングを書け。
次に和を求める部分を関数として分離した形にせよ。n=1.2.3.4....に対して出力を工夫し
結果が人目でわかるような出力の関数を作れ。
[3]
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月28日
[5] その他の制限:
宜しくお願いします
238デフォルトの名無しさん:2005/06/27(月) 10:31:46
>>232
今来ました
239>>237:2005/06/27(月) 10:53:45
#include <stdio.h>
//1 + 3 +・・・+ 2(N-1)-1 + 2N-1の和
//N(1<=N<=65535)
unsigned int
Sn(unsigned int n){
n *= n;
return n;
}

int main(int argc, char* argv[]){
unsigned int n;
do{
printf("Sn = 1 + 3 + ・・・ + 2(N-1)-1 + 2N-1 を求める\nN(1<=N<=65535)を入力しる!:");
scanf("%ud",&n);
}while(n < 1 || n > 65535);
printf("Sn(n = %d) = %d\n",n,Sn(n));
return 0;
}
240239:2005/06/27(月) 10:57:55
訂正
printf("Sn(n = %d) = %d\n",n,Sn(n));

printf("Sn(n = %d) = %u\n",n,Sn(n));

241デフォルトの名無しさん:2005/06/27(月) 11:38:49
[1]単元「演習」C言語
問題文
「以下は、ポインタの1次元配列を使った国名と首都名を結び付ける文字列テーブルである。

char *na[]={"Japan Tokyo", "USA Washington", "UK London", "France
Paris", "China Beijing", "Russia Moscow", "Germany Berlin", "India New
Delhi", "Brazil Brasilia",""}

これを用いて、国名を入力すると、その首都名を表示するプログラムを作成し、実行しなさい。」
というものに対して以下のプログラムを組んでみました。ですが完全でないらしくこれ以上どこをいじっていいのかわかりません、プログラマーのみなさん、些細な点から大きなところまで突っ込みを頂けるとありがたいです、おねがいします
プログラム

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

int seek_len(char *object);
int match_nat(char *object, char *target);

char *na[]={
"Japan Tokyo",
"USA Washington",
"UK London",
"France Paris",
"China Beijing",
"Russia Moscow",
"Germany Berlin",
"India New Delhi",
"Brazil Brasilia",
""
};
242デフォルトの名無しさん:2005/06/27(月) 11:43:12
>>239-240
ありがとうございました
243デフォルトの名無しさん:2005/06/27(月) 11:43:46
int main(int argc, char *argv[])
{
int i;

if (argc!=2) {
printf("Usage: <Name of Program> <Name ofNation>\n");
printf("Try again!\n");
exit(1);
}

for (i=0; *na[i]; i++) {
if (!match_nat(argv[1], na[i])) continue;
else exit(0);
}

printf("The capital of %s is not found.\n", argv[1]);

return 0;
}
244デフォルトの名無しさん:2005/06/27(月) 11:44:39
int match_nat(char *object, char *target)
{
int length=seek_len(object);

if (*(target+length)!=' ') return 0;

while (*object) {
if (*object!=*target) return 0;
else {
object++;
target++;
}
}
printf("The capital of %s is %s.\n", object-length, target+1);

return 1;
}

int seek_len(char *object)
{
int i;
for (i=0; *(object+i); i++);
return i;
}
245デフォルトの名無しさん:2005/06/27(月) 11:45:17
実行結果
<適切な入力時>
% ./a.out Japan
The capital of Japan is Tokyo.

<不適切な入力時1>
% ./a.out Russia India
Usage: <Name of Program> <Name of Nation>
Try again!

<不適切な入力時2>
% ./a.out Greece
The capital of Greece is not found.

多数ログうめてごめんなさい
246デフォルトの名無しさん:2005/06/27(月) 12:54:06
>>241
前スレで同じ宿題見かけたな。
247デフォルトの名無しさん:2005/06/27(月) 13:23:50
>>246
同じ学校やらクラスの生徒で
「2Chで宿題教えてもらった」
と噂になる。
短期間で同じ問題がどっと押し寄せる。
ということなんだろう。
248デフォルトの名無しさん:2005/06/27(月) 13:47:14
>>246
そうか。じゃぁ突っ込みいれるまでもないね。
249デフォルトの名無しさん:2005/06/27(月) 13:49:49
いいじゃん馬鹿量産してやればwww
250デフォルトの名無しさん:2005/06/27(月) 13:54:10
251241:2005/06/27(月) 18:07:05
すみません。自己解決しました。
返事してくれたみなさんに感謝。
252デフォルトの名無しさん:2005/06/27(月) 18:44:05
[1] 授業単元: C言語A

[2] 問題文(含コード&リンク)

int a[8] と宣言された配列 a があり,
その要素の値は 0, 1, 2 のいずれかとする。
また,p を 0 <= p < 8 であるような整数とする。
a[p+1], a[p+2], ... と調査したとき,0を挟まず2が1個以上続いて,
その直後に 1 があるとき,その続いた2の個数を返し,
そうでないとき 0 を返す関数 int check(int a[8], int p)を作れ。


[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:6月28日 am7:00まで
[5] その他の制限:特にありません。

すいませんが、お願いいたします。




253デフォルトの名無しさん:2005/06/27(月) 18:59:03
int check( int a[8], int p )
{
int i;
for( i = 0, p++; p < 8; p++ ) switch ( a[ p ] ) { case 0 : i = 0; break; case 1 : if ( i ) return i; break; case 2 : i++; break; }
return 0;
}
254デフォルトの名無しさん:2005/06/27(月) 19:21:21
#include<stdio.h>
#include<stdlib.h>
#define V 2000
main()
{int i,j;
char data[V];
int data2[V];
FILE *fp;
fp = fopen("583904.txt","r");
for(i=0;i<V;i++){
data[i]=fgetc(fp);
}
fclose(fp);

for(i=0;i<V;i++){
data2[i]= atoi(data[i]);
}

return 0;
}
583904.txtには576786584684という感じにずーとデータが入っています。
文字列型で取り出したのを整数型で使いたいのでatoiという関数を使い
ましたが、”1 番目の引数を 'char' から 'const char *' に変換でき
ません。”というエラーが出ます。どうしたらいいんでしょうか?
255デフォルトの名無しさん:2005/06/27(月) 19:28:15
質問の内容だけに答えるなら、

data2[i]= atoi(data[i]);  ->  data2[i]= atoi(data);
256デフォルトの名無しさん:2005/06/27(月) 19:30:21
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):
Hough変換アルゴリズムを用いて、円 r=(x-a)^2 + (y-b)^2 を検出するプログラムを作成せよ。
(a)原画像を二種類以上用いよ。
(b)処理後のabrパラメータ空間をGnuplotを用いて表示せよ。
1:1点のエッジに対する軌跡(円錐)を表示せよ。
2:2点以上のエッジに対する軌跡(円錐)を表示せよ。
(c)3種類以上にし閾値を変化させた実験結果を逆変換し、その結果を原画像に投影した画像を表示せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月30日まで
[5] その他の制限:特になし
ほとんど分かりません。よろしくお願いします。
257デフォルトの名無しさん:2005/06/27(月) 21:51:43
[1] 授業単元: 信号処理
[2] 問題文(含コード&リンク):
date.csvファイルに入っているデータ(Excelのファイルで1列目に少数のデータ[例、-1.543579]
が多数入っている)のを読み込んで、
それぞれをA[i]という配列にしまう。iはデータの個数。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン):Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:2005/06/28
[5] その他の制限:特になし

お手数おかけいたしますが、どうかよろしくお願いいたします。
258257:2005/06/27(月) 22:25:03
↑分かりづらいかと思いますので補足させていただきます。
date.csvファイルには、1行1列目(1A)から1000行1列目(1000A)までデータが入っており、それらをそれぞれXという配列に読み込みます。
例えば1行1列目はX[0]に、2行1列目はX[1]にという具合です。
申し訳ございませんが、どうぞ宜しくお願いします。
259デフォルトの名無しさん:2005/06/27(月) 22:47:05
>>257
#include <stdio.h>
#define  DATA_MAX  65535
int main( void )
{
   double X[DATA_MAX]; unsigned int i=0; char ch='\0';
   do scanf( "%lf ", X+i++); while( scanf( "%c ", &ch ) > 0 && (ch == ',') );
   return 0;
}
260デフォルトの名無しさん:2005/06/27(月) 22:58:46
[1] 授業単元: C言語
[2] 問題文:整数配列 x とその大きさ s が引数とされているとき、配列中の最大値の配列要素の位置を返却する関数 saidai を作成してください。
さらに、配列 x の最後尾の配列要素に配列 x の最大値を入れ、最大値が入っていた要素位置に配列の最後尾にあった値を入れる関数 change を作成してください。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:明日
[5] その他の制限:どうかお願いします。
261デフォルトの名無しさん:2005/06/27(月) 23:02:37
>>259
X+i++ → &X[i++]
262デフォルトの名無しさん:2005/06/27(月) 23:12:02
>>260

#define   swap_int(a,b)   {int tmp = (a); a = (b); b = tmp;}

int saidai( int x[], int s )
{
   int i, max = x[0], pos_max = 0;
   for( i=0; i<s; i++ )
      if( x[i] > max ){
         max = x[i];
         pos_max = i;
      }
   return pos_max;
}

void change( int x[], int s )
{
   swap_int( x[s-1], x[saidai(x,s)] );
}
263デフォルトの名無しさん:2005/06/27(月) 23:20:04
>>262
有難うございました。
264257:2005/06/27(月) 23:20:14
>>259
早速わざわざありがとうございます!!
こちらのプログラムでは、date.csvファイルの宣言する必要はなしで良いんですかな?
265デフォルトの名無しさん:2005/06/27(月) 23:24:26
[1] 授業単元:ポインタ
[2] 問題文(含コード&リンク):
 現存ファイルに任意の数の数値が入っている。
 そのファイルを呼び出し、データ最大値・最小値・平均値・標準偏差値を
取り出すプログラムを関数へのポインタ変数の受け渡しを利用して作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月29日
[5] その他の制限:
 「任意の数の」なんでwhileを使え、ということらしいです。
 現存ファイルの名前はseiseki.txtです。
 内容は↓  列ごとに別の教科の点数、ってことみたいです。

70 56 66 45 88
66 85 68 55 73
55 65 53 67 55
85 72 76 58 65
92 70 45 73 55
56 57 52 62 82
72 62 33 85 95
46 95 48 72 34
83 42 88 92 56
68 65 91 82 66
266デフォルトの名無しさん:2005/06/27(月) 23:28:27
>>265
全体的に日本語が不自由なようだが
267デフォルトの名無しさん:2005/06/27(月) 23:39:54
>>264
じゃあこうしてみるとか

#include <stdio.h>
#define   DATA_MAX   65535
int main( void )
{
   double X[DATA_MAX]; unsigned int i=0; char ch;
   FILE *fp = fopen("data.csv","r");
   if( !fp ) return -1;
   do fscanf( fp, "%lf ", &X[i++] );
   while( fscanf( fp, "%c ", &ch ) > 0 && (ch == ',') && (i < DATA_MAX) );
   fclose( fp );
   return 0;
}
268デフォルトの名無しさん:2005/06/28(火) 00:04:20
[1] 授業単元: windows プログラミング
[2] 問題文(含コード&リンク):
簡単なオセロのような物を作ります。以下条件です。
※マウスの左が押されたら白、右ボタンを押されたら黒を置く。
※8×8の升目を2次元配列で実現。
※2次元配列のデータは
0→何も置かれていない  1→白が置かれている  2→黒が置かれている
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):Visual C++
 [3.3] 言語:C
[4] 期限:6月28日PM.1:00まで
[5] その他の制限:一応↑のような状態まで自分でやりました。
手元にソースがないので、今テキストに書きました。(間違えているかも知れません・・・)
あとは、反転処理だとは思うのですが、よくわかりません……。
forやifでできるとは思うのですが……。
よろしくお願いします。
269デフォルトの名無しさん:2005/06/28(火) 00:06:05
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/620.txt
すいません、張り忘れました・・・
270デフォルトの名無しさん:2005/06/28(火) 00:06:09
>>268
WindowsのGUIか…面倒くさいな。フルスクラッチ?
271デフォルトの名無しさん:2005/06/28(火) 00:10:08
[1]プログラム
[2]squeezeの作成
getlineを使って文字列s2の文字と等しい文字を区切られた文字列s1(ただし「、」で区切られている)から除去されるようなプログラムをかく。
  [3・1]OS:Linux
 [3・2]gcc
 [3・3]c言語
[4]水曜日 です
272デフォルトの名無しさん:2005/06/28(火) 00:18:44
>>270
初歩的なことですいません。フルスクラッチとはどういうことでしょうか?(´・ω・`)
とりあえず、挟んだ所をオセロのように反転させる処理ができればOKぽいです……。
273デフォルトの名無しさん:2005/06/28(火) 00:38:21
>>270
0から書くとこと。
274デフォルトの名無しさん:2005/06/28(火) 00:52:55
>>268
漏れまだそこまでいってない。
みんな進むの早いよ・・・
275デフォルトの名無しさん:2005/06/28(火) 01:11:38
[1] 授業単元: c言語
[2] 問題文(含コード&リンク): 行列A,Bの掛け算をするプログラム。A,Bのサイズと各要素は標準入力から入力し、
掛け算が可能かもチェックできるようにせよ。
[3] 環境
 [3.1] OS:Windows/Linux/等々  Windous
 [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1
 [3.3] 言語:C/C++/どちらでも可 のいずれか  c言語
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか  今月30日まで
[5] その他の制限:どこまで習っているか、等々  ポインター、構造体くらいまで習ってますがまだイマイチ理解が足りません
以下に未完成のプログラムを貼ります。int A[l][m],B[n][o],C[l][o]; って感じのことが出来たら完成すると思うんですが…
よろしくお願いします
276275:2005/06/28(火) 01:13:00
#include <stdio.h>
#include<stdlib.h>

main()
{
int l,n,m,o,i,j,k;

printf("行列A(行数l,列数m),行列B(行数n,列数o)の積を求めます。\n");
printf("lを入力してください。\n");
printf("l=");
scanf("%d",&l);
printf("mを入力してください。\n");
printf("m=");
scanf("%d",&m);
printf("nを入力してください。\n");
printf("n=");
scanf("%d",&n);
printf("oを入力してください。\n");
printf("o=");
scanf("%d",&o);
printf("行列Aは%d×%d行列、行列Bは%d×%d行列です。\n",l,m,n,o);

if(m!=n){
printf("指定された行列のサイズでは演算不可能です。\n");
}
else{
printf("A×Bは演算可能です。\n");
277デフォルトの名無しさん:2005/06/28(火) 01:13:25
for(i=0;i<l;i++){
for(j=0;j<m;j++){
printf("行列Aの%d行%d列の成分は?・・・",i+1,j+1);
scanf("%lf",&A[i][j]);
printf("行列Aの%d行%d列の成分は%lfです。\n",i+1,j+1,A[i][j]);
}
}

for(i=0;i<n;i++){
for(j=0;j<o;j++){
printf("行列Bの%d行%d列の成分は?・・・",i+1,j+1);
scanf("%lf",&B[i][j]);
printf("行列Bの%d行%d列の成分は%lfです。\n",i+1,j+1,B[i][j]);
}
}

for(i=0;i<l;i++){
for(j=0;j<o;j++){
for(k=0;k<m;k++){
C[i][j] += A[i][k]*B[k][j];
}
}
}

for(i=0;i<l;i++){
for(j=0;j<o;j++){
printf("ABの[%d]行[%d]列成分 = %lf\n", i+1,j+1,C[i][j]);
}
}
}
}
278デフォルトの名無しさん:2005/06/28(火) 01:38:12
1 abc
2 defg
3 hijk
-1 ****
0 1 10
0 2 34
1 2 55
2 1 28
-1 -1 0
1

上のようなデータが書かれたdatファイルがあり、これをプログラムで読み込んで、

 char型  x[****より上の要素の数(この場合3)][10]

   /        ヽ.
   | a b c     |
x   | d e f g    |
   | h i  j k    .|
   ヽ.        /

 int型  y[****より上の要素の数][****より上の要素の数]
   /       ヽ.
   | 0 10 34 .|
y  .| 0  0 55  |
   | 0 28 0   |
   ヽ.      /

  n = 1  (←一番下にあるデータ)

のように配列に格納するソースファイルを作ってもらえないでしょうか?
よろしくお願いしますm(__)m
279278:2005/06/28(火) 01:39:44
[1] 授業単元: C言語
[3] 環境
 [3.1] OS:Windows/Linux/等々  WindowsXP
 [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1
 [3.3] 言語:C/C++/どちらでも可 のいずれか  C言語

こちらを張り忘れました・・・(汗



280デフォルトの名無しさん:2005/06/28(火) 02:05:24
>>274
このスレの人らって同じ専門高校(大学?)の生徒なの?
281257&264:2005/06/28(火) 02:12:09
#include <stdio.h>
#define DATA_MAX 65535

main()
{
FILE *fp;

double X[DATA_MAX];
int i(0);
unsigned int k(0);
char ch;

fp=fopen("date.csv","r");

if( !fp ) return -1;
do fscanf(fp,"%lf",&X[k++]);
while (fscanf(fp,"%c",&ch) > 0 && (ch == ',') && (k < DATA_MAX) );
fclose(fp);
return 0;

for(i=0 ; i<=DATA_MAX ; i++)
{
printf("%d\n",X[i]);
}

}

コレなんですが、エラーは無くとも出力が何も出てきません。
どうしてでしょうか?
何度もすみません。
282デフォルトの名無しさん:2005/06/28(火) 02:22:34
>>281
うっそーん。ホントにコンパイル通る?
283257&264:2005/06/28(火) 02:30:24
282>>
一応、エラー、警告共に0ですが、実行しても何もでないです。
どうしてでしょう・・。
284デフォルトの名無しさん:2005/06/28(火) 02:33:05
C++かな。どうでもいいけど。

配列Xをmain()の外に出してみたらどうよ。
285282:2005/06/28(火) 02:40:12
(´・∀・`)ヘー そうなんだ。じゃ return 0; 取れ
286257&264:2005/06/28(火) 02:41:27
>>284
何も出ないっす(;_;)
お手数かけて本当にすみません。
287K:2005/06/28(火) 02:43:20
pascalのこと詳しい人いますか?
288デフォルトの名無しさん:2005/06/28(火) 03:09:56
>>287
黙れボケ
289257&264:2005/06/28(火) 03:15:52
何度も何度も申し訳ないですm(_ _)m
やはりどうしても出力がなされません。
return 0;もなくしてみました。
何か解決法がございましたら、ご教授お願いいたします。
290デフォルトの名無しさん:2005/06/28(火) 03:26:52
【質問テンプレ】
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): SJISの文字列を入力して、8バイト、
もしくは2バイト文字で重なっている場合は7バイトずつに文字列に
改行を挿入する。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1
 [3.3] 言語:C
[4] 期限:金曜まで
[5] その他の制限:どうかお願いします。
改行で区切るtokという関数を作ったのですが、うまく行きません。
例えば、"2あいうえおかきくけこ"だとうまく行きますが、
"ふぃdjそいfjs"とかだとうまく行きません。どこを変えたら
いいですか?
下に書きます。
291デフォルトの名無しさん:2005/06/28(火) 03:27:07
#include<stdio.h>
#include<string.h>
void tok(unsigned char str[8192],int tok);
void main(){
unsigned char str[8192];
fgets(str,8192,stdin);
tok(str,8);
printf("%s",str);
}
void tok(unsigned char str[8192],int j){
int i,l,ll,tok,cou;
unsigned char c1,c2,tokstr[8192];
tok=0;ll=0;cou=0;l=strlen(str);
while(ll<=l){
if(cou-j>=0){
c1=str[ll-1];
c2=str[ll];
if(((c1>=0x81 && c1<=0x9F) || (c1>=0xE0 && c1<=0xEF)) &&
((c2>=0x40 && c2<=0x7E) || (c2>=0x80 && c2<=0xFC))){
tokstr[tok-1]='\n';cou=0;ll--;
}
else{tokstr[tok]='\n';tok++;cou=0;}
}
else{tokstr[tok]=str[ll];ll++;tok++;cou++;}
}
strcpy(str,tokstr);
}
292デフォルトの名無しさん:2005/06/28(火) 03:33:01
>>257
#include<stdio.h>
int main(void)
int x[10000],result,n=0,i;
FILE *fp;
fp=fopen("date.csv","rt");
if(fp==NULL){printf("error:file not found.\n");
exit(1); }
while(1){
result=fscanf(fp,"%lf",&x[n]);
if(result==-1)break; n++; }
fclose(fp);
printf("input data\n");
for(i=0;i<n;i++)printf("%2d",x[i]);
printf("\n");
}
293訂正:2005/06/28(火) 03:34:18
>>257
#include<stdio.h>
int main(void) {
int x[10000],result,n=0,i;
FILE *fp;
fp=fopen("date.csv","rt");
if(fp==NULL){printf("error:file not found.\n");
exit(1); }
while(1){
result=fscanf(fp,"%lf",&x[n]);
if(result==-1)break; n++; }
fclose(fp);
printf("input data\n");
for(i=0;i<n;i++)printf("%2d",x[i]);
printf("\n");
}
294257&264:2005/06/28(火) 03:35:22
あ!?
出力は出る様になりましたが、
ずっと値は-858993460のままです。
295257:2005/06/28(火) 03:40:23
293>>
ありがとうございます!!
えっと、実行してみたのですが、真っ黒のまま何も表示されない状態です。
上の294は間違えですので気にしないでください(汗)
296訂正:2005/06/28(火) 03:44:15
>>295
ファイルに入ってるのって数字だけだよね?(一行にひとつの実数でそれが千行?)
ファイル名が間違ってることはない?
297257:2005/06/28(火) 03:48:22
>>296

えっと、実はファイル名はdate.xlsで間違っていたのですが、
自分で入力する際に変更していました。
中に入っているデータは数字だけで、
一行目が-2.36145、その後値は変化していき、
それが2005行目まであります。

298デフォルトの名無しさん:2005/06/28(火) 03:56:56
xlsとcsvはまったく違うものだが。
299訂正:2005/06/28(火) 03:57:19
int x[10000]じゃなくて
double x[10000]みしてみて
300訂正:2005/06/28(火) 03:58:11
int x[10000]じゃなくて
double x[10000]にしてみて
301257:2005/06/28(火) 04:00:58
>>299

xlsとcsvの間違え申し訳ございません。
doubleに変えてみたのですが、真っ黒の画面に白いバーが点滅しているだけで何も起きません。
遅くまですみません!!
302デフォルトの名無しさん:2005/06/28(火) 04:02:20
で、読みたいブツはxlsなのか?
303257:2005/06/28(火) 04:02:58
printf("input data\n");
↑も出力されていない状態です。
304257:2005/06/28(火) 04:03:38
>>302
date.xlsです。
すみません。
305訂正:2005/06/28(火) 04:03:52
ファイルの内容最初のほうと最後のほう書いて
306デフォルトの名無しさん:2005/06/28(火) 04:04:20
xlsかよ
オレは降りる。
307257:2005/06/28(火) 04:08:19
>>305
1行目から10行目までが↓
-2.36145
-1.641235
-2.959595
-2.776489
-1.775513
-2.947388
-2.300415
-1.616821
-2.874146
-2.739868

1996行目から2006行目までが↓
-2.581177
-2.605591
-1.921997
-3.081665
-2.715454
-1.885376
-3.057251
-2.312622
-2.373657
-3.276978

以上になります。
308訂正:2005/06/28(火) 04:28:43
#include<stdio.h>
int main(void) {
int n=0,i;
double x[2100];
FILE *fp;
fp=fopen("date.xls","rt");
if(fp==NULL){printf("error:file not found.\n");
exit(1); }
while(1){
fscanf(fp,"%lf",&x[n]);
if(x[n]==-3.276978)break; n++; }
fclose(fp);
printf("input data\n");
for(i=0;i<n;i++)printf("%lf\n",x[i]);
printf("\n");
}
309デフォルトの名無しさん:2005/06/28(火) 04:30:19
先生!
学校の教師がプログラミングの課題によく数学を絡めてくるんです。
数学の授業でもないのに、数学の部分で悩ませようとしてくるんです。
授業ではプログラミングの事しか勉強していないのに、
課題に数学を出すなんておかしいと思います><
310デフォルトの名無しさん:2005/06/28(火) 04:31:57
>>309
プログラミングと数学が関係を持つのはあたりまえ
311デフォルトの名無しさん:2005/06/28(火) 05:01:44
>>257
fscanf()の戻り値を-1(EOF)かどうかだけでチェックするのは危険だ。
fscanf()で値をNコ読み出すんなら戻り値はNかどうかをチェックしろ。
そうしないと、入力が不正な場合は、あっさり無限ループになる。

それと、本当に.xlsファイルなら、stdioのfscanf()のようなものを使って
お手軽な入出力、というわけにはいかない。
.xlsはただのテキストファイルではないからな。
.xlsファイルを一番簡単に読むやり方はオートメーションを使うことだが、
どうもそれは「宿題」の範囲を超えるような気がする。
312デフォルトの名無しさん:2005/06/28(火) 05:13:57
sage
>>253
大変助かりました!ありがとうございます。
313デフォルトの名無しさん:2005/06/28(火) 05:19:14
>>257
314257:2005/06/28(火) 08:53:45
>>308
遅くまで何度も何度もありがとうございました。
自分も何度も挑戦してみたのですが、難しいっすね(汗)
本当にありがとうございます。

>>311
.csvファイルであれば可能でしょうか?
もともと、C言語で作ったプログラムからデータを取った物なので、
.xlsファイルでなくても、.csvファイルにすることも可能です。
315デフォルトの名無しさん:2005/06/28(火) 09:04:17
>>257
csvからxlsに保存しちまっただけだろ。
xlsからcsvに簡単に変換できるのになぜそうする?
316257:2005/06/28(火) 09:10:13
>>315

そうなんです。
ですので、csvでファイルを扱うことも可能です。
無知なためにxlsとcsvとで、プログラムの組み方が変わってくると思わなかったので。
本当にすみませんm(_ _)m
317デフォルトの名無しさん:2005/06/28(火) 09:48:23
ん?
少数のデータが多数? どっちなんだ?

xlsファイルを一度、テキストエディタで開いて味噌。
318257:2005/06/28(火) 10:00:41
>>317
誤字です。すみません!!
正しくは小数のデータが1行目〜2006行目まで入っているということになります。
メモ帳で開けますかね?挑戦してみます。
319デフォルトの名無しさん:2005/06/28(火) 10:05:27
何でもいいからテキストエディタをインストールしろ。
話はそれからだ。
320257:2005/06/28(火) 10:16:52
>>319
ただいま通学中のためできないのですが、昼頃にはインストして開いてみますm(_ _)m
321デフォルトの名無しさん:2005/06/28(火) 10:30:55
べつにメモ帳でもいいけどなw
322デフォルトの名無しさん:2005/06/28(火) 10:51:48
>>268
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/623.txt
あまり綺麗なソースじゃないけど。
そこまで書ける人ならコレで分るんじゃないかな?
323322:2005/06/28(火) 10:58:13
間違った方のファイルアゲちまった。orz

BOOL _Stone_Reverse( POINT *ptSet, int iStone, POINT *ptVector )
{

// 省略

do {
ppiBorad[ tSearch.x ][ tSearch.y ] = iStone;
tSearch.x -= ptVector->x;
tSearch.y -= ptVector->y;
} while ( ppiBorad[ tSearch.x ][ tSearch.y ] != STONE_NONE );

return bResult;
}

に修正しておいて。
324308:2005/06/28(火) 11:17:21
俺はそれでうまくいったからたぶんファイルの種類が違うんだな。
因みに俺はデータをメモ帳に保存した。そしたら308でできた。
325デフォルトの名無しさん:2005/06/28(火) 12:54:45
[1] 授業単元: データ構造
[2] 問題文(含コード&リンク): PhysCheck型構造体で表されてる身体検査の
データ配列をクイックソートのアルゴリズムを用いて整列を行うプログラムを作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): Cygwin
 [3.3] 言語:C
[4] 期限:今週の木曜1時
326325:2005/06/28(火) 13:00:11
以下自分で作ってみたプログラムなんですけどコンパイルできないんです
大変見難いかと思いますがどうか宜しくお願いします

#include <stdio.h>
#define swap(type,h,i) do{type t = h; h=i; i=t;} while(0)

void quick_height(const PhysCheck a[],int l,int r)
{
int pl = l;
int pr = r;

do{
while(a[pl].height<a[(l + r) / 2].height) pl++;
while(a[pr].height>a[(l + r) / 2].height) pr--;
if(pl<=pr){
swap(int,a[pl],a[pr]);
pl++;
pr--;
}
} while(pl <= pr);

if(l<pr){
quick(a,l,pr);
}

if(pl<r){
quick(a,pl,r);
}

}
327325続き(構造体とmain関数):2005/06/28(火) 13:01:05
typedef struct{
char name[20];
int height;
double vision;
} PhysCheck;


int main(void)
{
int i;
PhysCheck x[] = {
{"AKANE Kouichi", 170,2.0},
{"TOKUTOMI Shyuji", 173,1.5},
{"NISHIDA Taro", 170,0.5},
{"TSUJINO Jiro", 175,0.4},
{"MATSUO Keiji", 167,0.6},
{"OHYAMA Kazuhiro", 168,0.2},
{"KITAYAMA Takuya", 179,0.6},
{"TANAKA Rina", 158,0.9},
};
int nx = sizeof(x)/sizeof(x[0]);


for(i=0;i<8;i++)
printf("%-18.18s%4d%5.1f\n",x[i].name,x[i].height,x[i].vision);

return(0);
}   
328257:2005/06/28(火) 13:03:52
>>324
メモ帳に保存しようと思うのですが、
コピペでいいのでしょうか?
それともプログラムから開くでやった方がいいのですか?
プログラムから開くと文字化けします。
329257:2005/06/28(火) 13:08:18
>>324
メモ帳に保存しようと思うのですが、
コピペでいいのでしょうか?
それともプログラムから開くでやった方がいいのですか?
プログラムから開くと文字化けします。
330デフォルトの名無しさん:2005/06/28(火) 13:12:56
>>328
最初からxlsだったわけじゃないんだろ?そのデータ使え
331257:2005/06/28(火) 13:23:14
もともとはcsvファイルで出力したものを、データの数が多すぎるんで編集してcsvで保存してあります。
そのcsvファイルのデータを読み込んで、配列に入れたいのですが。
332デフォルトの名無しさん:2005/06/28(火) 13:30:55
>>325

swap( PhysCheck, a[ pl ], a[ pr ] );
333デフォルトの名無しさん:2005/06/28(火) 13:31:33
>>325
const を外せ。
334デフォルトの名無しさん:2005/06/28(火) 13:33:45
>>257
csvを保存するのにメモ帳は関係ないだろ。
xlsをメモ帳(テキストエディタ)で開けば、
それがそのままでは利用しにくいと言うことが判るから>317はそう言ったんだと思うが。
335デフォルトの名無しさん:2005/06/28(火) 13:57:34
【質問テンプレ】
[1] 授業単元:モータ制御実験
[2] 問題文(含コード&リンク):計測プログラムのプログラム解析を行い、どのようにして読み込んだデータを電圧に変換表示しているのか説明せよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/541.txt
[3] 環境
 [3.1] OS:PC-9801 or PC-9821 DOS
 [3.2] コンパイラ(バージョン): BorlandCかTurboC
 [3.3] 言語:C
[4] 期限:2005年7月5日13:00まで
[5] その他の制限:特になし

よろしくお願いします。
336デフォルトの名無しさん:2005/06/28(火) 14:11:28
>>335
ADボードの説明書を読め。
337257:2005/06/28(火) 14:34:53
なんだかこんがらがってしまいすみません。。
csvよりかテキストファイルの方が読み込みが簡単なのかと思いこんで、書き換えようとしてました。
csvファイルがあらますので、そのまま配列に読み込みたいです。
何度も本当に申し訳ないのですが、宜しくお願いします。
338デフォルトの名無しさん:2005/06/28(火) 14:38:11
>>337
csvはテキストファイルだが?
339257:2005/06/28(火) 15:15:51
分からないことだらけですみません。
csvもテキストファイルなようですね。
csvファイルを読み込んで、配列に入れ込む方法を教えていただきたいです。
340デフォルトの名無しさん:2005/06/28(火) 15:23:44
それはひょっとしてジョークで言ってるのか?
341デフォルトの名無しさん:2005/06/28(火) 15:37:27
学校の宿題でプログラムを作れと言われたが授業中寝ててぜんぜんわからないから
サンプルの乗ってるいいサイトとかもし知ってたら教えてくれ。
342デフォルトの名無しさん:2005/06/28(火) 15:39:20
343デフォルトの名無しさん:2005/06/28(火) 15:41:46
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク): 関数 データ型 演算子 制御文 配列 ファイルの入出力を使って100ステップ以上のコンパイルできるソース
[3] 環境
 [3.1] Win2k
 [3.2] コンパイラ(バージョン): 不明
 [3.3] C
[4] 期限:2005年7月12日まで
[5] もうさっぱり
344デフォルトの名無しさん:2005/06/28(火) 15:43:12
サンキュー
345デフォルトの名無しさん:2005/06/28(火) 15:49:55
>>343
制御文っていうのがまたえらく抽象的だな。
346デフォルトの名無しさん:2005/06/28(火) 15:54:43
>>345
if文
if else文
関係演算子
論理演算子
繰り返し
while文
無限ループ
break文
continue文

多分これだと思います
つーかもう100ステップとかマジ無理
printfくらいしかわからんよ
347デフォルトの名無しさん:2005/06/28(火) 16:01:12
教えてクン養成マニュアル

1. 努力を放棄すること
いやしくも「教えてクン」たるもの、努力をしてはならない。
過去ログを読んだり、検索してはいけない。
「英語は苦手なので、分かりません。」は、高く評価できる。
辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。
他力本願と言われようと、自分で調べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい「教えてクン」である。
また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされるのも有効である。
「サッパリ」という単語が「やる気の無さ」を効果的に表現している。
「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格である。
348デフォルトの名無しさん:2005/06/28(火) 16:31:49
>>322
遅レスすいません。
#defineなどはまだ習ってないんですよね……。
そしてポインタを理解していない自分 orz
でも、今日やって方向性は見えてきました!
本当にありがとうございましたm( __ __ )m
349デフォルトの名無しさん:2005/06/28(火) 16:55:33
[1] 授業単元:
[2] 1 一行に一つの整数が書かれているファイルがある。
  2 このファイルを読み込んで、昇順にソートするプログラムを作りなさい。
  3 データファイルの名前はコマンドライン引数で与える。
  4 使い方を誤ったとき、ファイルが開けないときにはエラーを出力する。
  5 データが1000行以上あれば、警告メッセージを表示して最初の1000行分の
    データだけ与えられた動作を行う
[3] 環境
 [3.1] Linux
 [3.2] イーマックス
 [3.3] C
[4] 2005年6月30日まで

どなたか、お願いいたします。
350デフォルトの名無しさん:2005/06/28(火) 17:10:59
>[3.2] イーマックス
(;`Д´)・・・・・
351257:2005/06/28(火) 17:43:22
昨日より、ものすごく長くかかってしまいましたが、何とかcsvファイルの読み込みができました。
多くの方々の手助けをいただき、ご迷惑をおかけしましたが本当にありがとうごさいました。
352デフォルトの名無しさん:2005/06/28(火) 17:44:20
イーマックス
新鮮だ
つい私も書きたい衝動に駆られる
イーマックス

満足した
353デフォルトの名無しさん:2005/06/28(火) 17:57:17
イィーマッックスゥゥ
354デフォルトの名無しさん:2005/06/28(火) 18:47:00
[1] 授業単元:
[2] 配列の内容を値の小さい順に並び替える。
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] C
[4] 2005年6月30日まで
355デフォルトの名無しさん:2005/06/28(火) 19:07:15
>>349 イーマックスに萌えたんでヒント(可読性は無視)
static int intcmp(const int *s, const int *t) { return *s - *t; }
int main(int argc, char *argv[])
{  FILE *fp = NULL;
  int ary[ARRAY_MAX], i, sts, max;
  char buf[BUFSIZ];
  if(argc != 3) { fprintf(stderr, "使用法:%s infile outfile\n", argv[0]); goto Error; }
  fp = fopen(argv[1], "r"); if(fp == NULL) { perror(argv[0]); goto Error; }
  for(i = 0; i < sizeof ary && fgets(buf, sizeof buf, fp) != NULL; i++) ary[i] = atoi(buf);
  max = i;
  sts = fclose(fp), fp = NULL; if(sts != 0) { perror(argv[0]); goto Error; }
  if(max >= sizeof ary) fprintf(stderr, "%s:警告:データが1000行以上あります", argv[0]);
  qsort(ary, max, sizeof *ary, intcmp);
  fp = fopen(argv[2], "w"); if(fp == NULL) { perror(argv[0]); goto Error; }
  for(i = 0; i < max; i++) fprintf(fp, "%d\n", ary[i]);
  sts = fclose(fp), fp = NULL; if(sts != 0) { perror(argv[0]); goto Error; }
  return EXIT_SUCCESS;
Error: if(fp != NULL) fclose(fp), fp = NULL;
    return EXIT_FAILURE; }
356デフォルトの名無しさん:2005/06/28(火) 19:08:44
357デフォルトの名無しさん:2005/06/28(火) 19:34:39
宿題なんですが...。
     整数の2次元配列の計算2
例のように、2次元配列の縦横をrand関数を使用し、
2桁までの整数配列を作りなさい。


出力例:
    [0] [1] [2] 横計
[0]  ? ? ? ?
 [1] ? ? ? ?
[2] ? ? ? ?
[3] ? ? ? ?
縦計 ? ? ? ?

お願いしますです。。。。。。。。。。。。。。。。
358デフォルトの名無しさん:2005/06/28(火) 20:22:35
テ  ン  プ  レ  ー  ト
359357:2005/06/28(火) 20:26:21
>>358
テンプレートとは何ですか?
関数の名前でしょうか?
さっそく調べて見ます。ありがとうございました
360デフォルトの名無しさん:2005/06/28(火) 20:28:26
ワロタ
357頑張れよ先は長いぞ
361デフォルトの名無しさん:2005/06/28(火) 20:29:16
ネタにしても酷いな
笑ったから良いけど
362デフォルトの名無しさん:2005/06/28(火) 20:35:32
CString Abc = "CAT = '" + dog + "'";
これの意味なんですか?
なんか点が多くて意味が分かりません。
363デフォルトの名無しさん:2005/06/28(火) 20:37:56
>>362
点が少ない方が良いか?
364デフォルトの名無しさん:2005/06/28(火) 20:38:35
>>362
多分、意味を説明するのに点を使わないわけにいかないので、
説明してもらっても多分意味がわからないと思う。
365デフォルトの名無しさん:2005/06/28(火) 20:40:54
いきなりすいません。<COLOR>のタグで文字の色かえられるじゃないすか?!それでグラデーションのカラーのナンバー教えて下さい。
366デフォルトの名無しさん:2005/06/28(火) 20:42:07
>>365
質問に一個答えよう
変えられるよ
367デフォルトの名無しさん:2005/06/28(火) 20:49:23
あと、もう@個お願いしますm(__)mグラデカラーのナンバー教えて下さい。
368デフォルトの名無しさん:2005/06/28(火) 20:50:32
>>367
断る。
369デフォルトの名無しさん:2005/06/28(火) 20:58:05
<COLOR>のタグってあったっけ?HTML3.2 にも HTML 4.01transitional にも
ないんだけど……
370デフォルトの名無しさん:2005/06/28(火) 20:58:23
>>359>>357は別人。ホスト見れ。
あと>>1ちゃんと嫁。
371デフォルトの名無しさん:2005/06/28(火) 21:31:03
[1] 授業単元:
[2] sin65゚とsin64.8゚をラグランジュ補間法で求める
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] C
[4] 期限:金曜日
[5] 次のデータを使う:引数 関数値
0 0.0
15 0.25882
30 0.50
45 0.70711
60 0.86603
75 0.96593
90 1.0
372デフォルトの名無しさん:2005/06/28(火) 21:59:51
>>371
データファイルの内容は?
例えばsin0〜sin90まで(角度は15°とばしのとか)のデータがいるでしょ。
373371:2005/06/28(火) 22:00:18
もういいです。
374デフォルトの名無しさん:2005/06/28(火) 22:00:58
>>372
すまんなかったことにしてくれ。
375デフォルトの名無しさん:2005/06/28(火) 22:47:04
>>371
#include <stdio.h>
double mysin(double x) {
    return -9.02403152203135e-15 + x * (0.017454900000000606 + x * (-2.2098765424951852e-7 + x * (-8.746296296286118e-7 + x * (-2.9492455418896675e-10 + (1.7613168724302022e-11-3.0483158055678805e-14 * x) * x))));
}
int main(void) {
    printf("sin65°=%f\nsin64.8°=%f", mysin(65), mysin(64.8));
}
376デフォルトの名無しさん:2005/06/28(火) 22:50:46
多分>>257の最終的な課題はcsvファイルを読むことではないだろうし、
また来るんだろうな
377デフォルトの名無しさん:2005/06/28(火) 23:02:08
>>375
そんなのプログラムじゃなくて電卓の計算と同じじゃないか
378デフォルトの名無しさん:2005/06/28(火) 23:13:03
>>377
ハイハイ。せっかくのネタ振りを。
#include <stdio.h>
double lagrange_interpolation(double* data, unsigned int n, double x) {
    int i, j;
    double result = 0., temp;
    for (i = 0; i < n; ++i) {
        temp = 1.0;
        for (j = 0; j < n; ++j)
            temp *= (i == j ? 1 : (x - j) / (i - j));
        result += data[i] * temp;
    }
    return result;
}
int main(void) {
    double data[] = {0.0, 0.25882, 0.50, 0.70711, 0.86603, 0.96593, 1.0};
    const unsigned int n = sizeof(data) / sizeof(data[0]);
    printf("sin65°=%f\nsin64.8°=%f\n\n", lagrange_interpolation(data, n, 65 / 15.), lagrange_interpolation(data, n, 64.8 / 15.));
}
379デフォルトの名無しさん:2005/06/28(火) 23:42:47
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
(3n+1)問題。n22とする。
・nが偶数なら2で割る
・nが奇数なら(3n+1)とする
この操作をn22の整数に対して繰り返し行うことのできるプログラムを書け。
上の操作の部分の関数結果の数を次々と出力する関数に分けて書く。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 2005 06 30 木曜日
[5] その他の制限:
よろしくお願いします
380デフォルトの名無しさん:2005/06/29(水) 00:02:26
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
整数n(1≦n≦5)と2つのn次正方行列A,Bを読み込み、
A×Bを求めるプログラムを作成せよ。ただし、行列の要素は
すべて整数型としてよい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 2005 07 01 金曜日
お願いします.
381デフォルトの名無しさん:2005/06/29(水) 00:02:45
>>379
不満があればどうぞ
#include <stdio.h>
int modify(int n) {
    return n & 1 ? 3 * n + 1 : n >> 1;
}
void print_n(int n) {
    printf("%d\n", n);
}
int main(void) {
    int n22 = 23;
    print_n(n22);
    while (n22 != 1) {
        n22 = modify(n22);
        print_n(n22);
    }
    return 0;
}
382デフォルトの名無しさん:2005/06/29(水) 00:03:13
>>380
行列のデータはどこからどのようにして読み込む?
書式は?
383デフォルトの名無しさん:2005/06/29(水) 01:23:20
[1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク): 現在ファイル(tensuu.txt)に任意の数の数値が入っている。そのファイルを呼び出し、データの最大、最少、平均値、標準偏差値を取り出す
               プログラムを関数へのポインター変数の受け渡しを利用して作成せよ
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:6月30日まで
よろしくお願いします
384デフォルトの名無しさん:2005/06/29(水) 01:33:04
>>383
tensuu.txtの書式は?数(改行)数字(改行)…?
385デフォルトの名無しさん:2005/06/29(水) 01:35:01
[1]プログラミング演習
「2」標準入力から正の正整数を読み込み0が入力されたらそれらの整数を小さい順に表示するプログラムを作れ。
「3」1OS:Linux
   2コンパイラ(バージョン):gcc
   3言語:C 
[4]明日まで
 
386デフォルトの名無しさん:2005/06/29(水) 01:35:47
>>384
数字です。改行もします
387デフォルトの名無しさん:2005/06/29(水) 01:37:26
>>386
123
456
789

と続くの?
388デフォルトの名無しさん:2005/06/29(水) 01:49:09
>>383
#ヒント
BEGIN {
min = 1e300;
max = -1e300;
sum = 0;
s2 = 0;
}
{
sum += $1;
s2 += $1 * $1;
if ($1 < min) {
min = $1;
}
if ($1 > max) {
max = $1;
}
}
END {
printf("max:%g, min:%g, ave:%g, dev:%g\n", max, min,
sum / NR, sqrt((s2 - sum * sum / NR) / (NR - 1)));
}
389デフォルトの名無しさん:2005/06/29(水) 01:49:27
[1]授業単元:プログラミング言語
[2]問題文:行列A(L行M列)と行列B(M行N列)の積C(L行N列)を求めるプログラムを作りなさい。

[3]環境
  [3.1]OS:Linux
[3.2]コンパイラ(バージョン):gcc
[3.3]言語:C

[4]7月1日
390デフォルトの名無しさん:2005/06/29(水) 02:07:34
>>387
はい、そういう感じです
391デフォルトの名無しさん:2005/06/29(水) 02:10:53
>>390
標準偏差といわれてもnで割るのかn-1で割るのか…とりあえず前者。
#include <stdio.h>
#include <float.h>
#include <math.h>
int main(void) {
    int n = 0;
    double x, min = DBL_MAX, max = DBL_MIN, mean = 0., mean2 = 0.;
    FILE* fp = fopen("tensuu.txt", "r");
    while (fscanf(fp, "%lf", &x) != EOF) { /* 一応ポインタの受け渡し */
        ++n;
        if (x < min) min = x;
        if (max < x) max = x;
        mean += x;
        mean2 += x * x;
    }
    fclose(fp);
    mean /= n;
    mean2 /= n;
    printf("最大:%f\n最小:%f\n平均値:%f\n標準偏差:%f\n", max, min, mean, sqrt(mean2 - mean * mean));
    return 0;
}
392デフォルトの名無しさん:2005/06/29(水) 02:13:45
nで割る、でOKです。言葉足らずですいません。
>>388>>391
夜遅くにありがとうございます。
393デフォルトの名無しさん:2005/06/29(水) 02:28:03
>>389
多分、授業でL行M列行列の和なり差なりを求めるプログラムを習っていると思うので、
それを書いてください。
394389:2005/06/29(水) 02:38:54
>>393 いやそれが習ってないんですが・・・
395デフォルトの名無しさん:2005/06/29(水) 02:58:15
>>389 >>393-394
うーむ。 データをどう与えるかってってゆーのがワカランですね。
396389:2005/06/29(水) 03:03:51
>>395 あ、データは標準入力からでL,M,Nと行列A,Bを入力します。
397デフォルトの名無しさん:2005/06/29(水) 03:08:12
[1] 授業単元: 生体情報工学
[2] 問題文(含コード&リンク):
問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/624.txt

データファイル
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/625.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):VC++6.0
 [3.3] 言語:どちらでも可
[4] 期限:7月2日まで
[5] その他の制限:特に無し。
398デフォルトの名無しさん:2005/06/29(水) 06:38:02
>>383
関数への「ポインター変数の受け渡し」 か
「関数へのポインター変数」の受け渡し かと思った
399デフォルトの名無しさん:2005/06/29(水) 09:08:04
>>381
ありがとうございます。
400デフォルトの名無しさん:2005/06/29(水) 09:12:56
1] 授業単元: C言語
[2] 問題文(含コード&リンク):
sin(x)の近似式
sin(x)=x-(x^3/3!)+(x^5/5!)-(x^7/7!)・・・・
の値と、数学関数sin(x)を使用したときの値を比較するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:今日の正午まで(すみません・・・)
[5] その他の制限:なし
どなたかお願いします。締め切り近くて本当にすみません・・・。
401デフォルトの名無しさん:2005/06/29(水) 09:47:32
402デフォルトの名無しさん:2005/06/29(水) 10:02:05
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
クラスN人の試験の点数を配列grade[ ]に格納し、総和、平均を求めよ。
さらに最高点、最低点を求められるようにせよ。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:6月30日まで
[5] その他の制限:
おねがいします
403デフォルトの名無しさん:2005/06/29(水) 10:45:37
>>400
sinの近似
再帰を使ったパワーアップバージョン

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/627.txt
404デフォルトの名無しさん:2005/06/29(水) 10:56:02
[1] 授業単元:プログラミング演習I
[2] 問題文:
関数factを用いて大きさnのパスカルの三角形(もどき) を作成しなさい。パスカルの三角形は
2項係数を順次求めていった時に現れる。

1 1
1 2 1
1 3 3 1
1 4 6 4 1

という奴である。n 行目 r 列の成分は組みあわせの数 n C r によって与えられる。ただし
nCr = n! / ((n-r)! r! )
である。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:7/5まで
[5] その他の制限:関数の扱いまで習いました。

どなたかご教授お願いします。
405デフォルトの名無しさん:2005/06/29(水) 11:08:36
406デフォルトの名無しさん:2005/06/29(水) 11:23:42
>>404

#include <stdio.h>

int fact( int n, int r )
{
int c, i, t;
if ( r < n - r ) t = n - r; else t = r;
for ( c = 1, i = t + 1; i <= n; i++ ) c *= i;
for ( i = 1; i <= n - t; i++ ) c /= i;
return c;
}

int main( void )
{
int n, r;
for ( n = 1; n <= 16; n++ ) {
for ( r = 0; r <= n; r++ ) {
printf( "%d ", fact( n, r ) );
}
printf( "\n" );
}
return 0;
}
407デフォルトの名無しさん:2005/06/29(水) 11:28:58
408325:2005/06/29(水) 11:31:26
すみません遅くなりました、
>>332,333様、無事コンパイルでき、ちゃんとソートもできました
本当に助かりました、どうもありがとうですm(_ _)m
409デフォルトの名無しさん:2005/06/29(水) 11:31:37
>>405
ありがとうございます、助かりました
410404:2005/06/29(水) 11:52:07
>>406
すごい、完璧ですね。
ありがとうございます。おかげで助かりました。
411デフォルトの名無しさん:2005/06/29(水) 11:54:46
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ユークリッドの互除法で最大公約数を求める場合の再帰的関数呼び出しによる
プログラムを書け。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7/1まで
[5] その他の制限:

宜しくお願いします。
412デフォルトの名無しさん:2005/06/29(水) 12:03:42
[1] 授業単元:プログラミング
[2] 問題文:
キーボードから0以上100未満の整数を複数読み込み,0〜9,10〜19,20〜29,
・・・,90〜99の範囲の整数がそれぞれ何個ずつあるか数えるプログラムを
作成する。負数が入力された時点で入力の終了とする。
カウンタを配列で定義して(int counter[10])作ってください。

[3] 環境
 [3.1] OS:Windouws xp
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:7/3まで

よろしくお願いします。
413397:2005/06/29(水) 12:20:53
>>407
早速の解答、ありがとうございますっ!
実行してみたところ、一文字の割合だけ出力されました。
3文字を1文字へ変換出力するプログラムは自力でやれ、ってことでしょうか。。。
(問題文の文脈からちゃんと伝わっていなかったのでしたらこちらの不手際ですm(_ _)m)

もしよろしければ、3文字→1文字への変換出力も教えていただきたいです・・・
414デフォルトの名無しさん:2005/06/29(水) 12:24:39
>>413
そゆこと。
データファイルの形式が意味不明だからね。
415397:2005/06/29(水) 13:22:25
>>414
なるほど。
データファイルの形式が意味不明、ですか。。
ありがとうございましたっ。ちょっと頑張ってみます。
416デフォルトの名無しさん:2005/06/29(水) 13:28:14
[1] 授業単元:プログラミング演習I
[2] 問題文:
・整数n,mを引数にとり、返り値としてnとmの最大公約数をかえす関数
int gcd(int n, int m) を作成しなさい。

・次に関数 gcd() を利用して整数n,mを引数として与えたときに、
返り値としてnとmの最小公倍数を返り値として返す関数 int lcm(int n,int m) を作成しなさい。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:7/5まで
[5] その他の制限:関数の扱いまで習いました。

自分で作ろうとしてもどうしても上手くいかないので、
どなたかご教授お願いします。
417デフォルトの名無しさん:2005/06/29(水) 13:37:02
>>410
>406はちっとも完璧ではない。関数名が悪すぎる。
関数fact()はnCrを求めているじゃないか。
418デフォルトの名無しさん:2005/06/29(水) 13:47:42
>>416 ヒント:ユーグリットの互除法
int gcd(int m,int n)
{
    int r;
    do {
        r = m % n;
        m = n;
        n = r;
    }while(r!=0);
    return m;
}

最小公倍数ぐらいは最小公倍数がわかればできるだろう
419デフォルトの名無しさん:2005/06/29(水) 13:48:00
>>416
int gcd(int n,int m){int r;if(n<0)n*=-1;if(m<0)m*=-1;while(n){r=n%m;n=m;m=r;}return n;}
int lcm(int n,int m){int l,s,i;if(n<0)n*=-1;if(m<0)m*=-1;l=(n>m?n:m);s=(n<=m?n:m);for(i=1;i<l;i++)if(s*i%l==0)return s*i;return n*m;}
420410:2005/06/29(水) 13:54:05
>>417
そうですね。完璧という言葉は語弊がありました。
言い忘れてましたが、三角形の表示が難しかったら、

1 1
1 2 1
1 3 3 1
1 4 6 4 1

という表示の仕方でもいいとのことだったので、
406のプログラムでコンパイルしたらちゃんと上のように表示されたので、
いいのかと思ってましたが、何か問題あるんですかねぇ?
421デフォルトの名無しさん:2005/06/29(水) 13:54:27
プログラムの勉強してるやつに、そのもの自体が難しいことを作らせる先生もどうかと思うね。
コード自体は簡単になるわけだが。
422デフォルトの名無しさん:2005/06/29(水) 13:56:57
[1] 授業単元:プログラミング特別演習
[2] 問題文: 実数値をキーボードから入力し、小数点以下を四捨五入した値を表示する。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C ++
[4] 期限:本日22:00まで
[5] その他の制限:特に無し

どなたかご教授お願いします。
423406:2005/06/29(水) 14:14:32
>>410
factって階乗(factorial)って意味だったのね。今知ったよ。
ということで修正。

#include <stdio.h>

int fact( int n )
{
int d, i;
for ( d = 1, i = 2; i <= n; i++ ) d *= i;
return d;
}

int ncr( int n, int r )
{
return ( fact( n ) / fact( n - r ) / fact( r ) );
}

int main( void )
{
int i, j;
for ( i = 1; i <= 12; i++ ) {
for ( j = 0; j <= i; j++ ) {
printf( "%d ", ncr( i, j ) );
}
printf( "\n" );
}
return 0;
}

三角形にするのはできなくないけど、自分でやってみてね。
424デフォルトの名無しさん:2005/06/29(水) 14:14:55
#include <iostream>
#include <iomanip>
int main()
{
  double x;
  std::cin >> x;
  std::cout << std::fixed << std::setprecision( 0 ) << x << std::endl;
  return 0;
}
425デフォルトの名無しさん:2005/06/29(水) 14:15:54
おっと>>424>>422のやつね。
426417:2005/06/29(水) 14:18:29
>>420
質問の意図がわからない。
>404のような綺麗な三角形にするにはどうすればいいかってこと?
それなら、各段に左側の空白を補えばいいのだが。
#ヒント:最終段は0、その上の段は1、以下同様に。
427デフォルトの名無しさん:2005/06/29(水) 14:21:29
>>425 ありがとうございます。助かりました!!
428デフォルトの名無しさん:2005/06/29(水) 14:23:54
[1] 授業単元:情報数学演習
[2] 問題文:ファイルからデータを配列に読み込んでおき、キーボードから単語が入力されたとき、それに最も近い単語を配列の中から探して出力するプログラム

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C ++
[4] 期限:7月4日まで
[5] その他の制限:特に無し

どなたかご教授お願いします。
429デフォルトの名無しさん:2005/06/29(水) 14:26:36
誰かといてけれー↓
[1]アルゴリズム演習
[3]visualstudio2003 c++
[4]できるだけ早くお願いいたします。
[2]
1から100までの乱数を用いて1000個のデータを生成して
配列に格納する。その後、1個数字を入力させ、その数字が生成
されたデータ内にあるかどうかを確認せよ。データがあった場合
は、何番目にあったかを表示し、無かった場合はそのことを表示
する。
430410:2005/06/29(水) 14:34:08
>>423
ご丁寧に修正までしていただいてありがとうございます。
助かりました

>>426
意味不明な文章ですいません。そういうことです。
ヒントありがとうございます。頑張って作ってみます。
431デフォルトの名無しさん:2005/06/29(水) 14:41:25
>>429
#include <iostream>
int main()
{
  using namespace std;
  srand( time( 0 ) );
  int arr[ 1000 ];
  
  for ( int i = 0; i < 1000; i ++ )
    arr[ i ] = rand() % 100 + 1;
  
  int input;
  cout << "数字をいれやがれ: ";
  cin >> input;
  bool found = false;
  
  for ( int i = 0; i < 1000; i ++ )
    if ( arr[ i ] == input )
    {
      cout << i << "番目にありますが何か?" << endl;
      found = true;
      break;
    }
  
  if ( ! found )
    cout << "残念。" << endl;
  
  return 0;
}
// BCCだと#include <iostream>だけでいけたが、足りなかったら適宜includeしてくれ。
432デフォルトの名無しさん:2005/06/29(水) 14:48:40
>>431
すばやい回答ありがとうございました。
ビルドをかけると6行目に引数依存の照合をしてもみつかりせんと出ます。
なぜでしょう??
433デフォルトの名無しさん:2005/06/29(水) 14:55:27
すいません間違えました5行目でした。
timeの行です。
434デフォルトの名無しさん:2005/06/29(水) 14:56:27
>>423
#include <time.h>
435デフォルトの名無しさん:2005/06/29(水) 14:57:02
>>432だったorz。

つーか、breakあると最初のやつしか表示されないけどいいのだろうか。
436278:2005/06/29(水) 14:57:45

すいません、278ですがどなたかお願いできないでしょうか?

期日が迫っています。だれか助けてください。
437デフォルトの名無しさん:2005/06/29(水) 15:04:34
>>248
・ファイルの形式?特殊ならデータが格納されているフォーマットを
例示してくれなきゃ駄目じゃん。
・データの配列って型は?(cha*の配列の予感)
・最も近いって辞書的に近いってこと?近い遠いを定義してみて。

>>436
テンプレ嫁。
あと3X3の行列のデータを読めってことか?
それとも任意の行列のデータをめってことか?
438デフォルトの名無しさん:2005/06/29(水) 15:04:40
>>435

できましたーーー!!!どうもありがとうございました。
題意からbreakはきしておきます。
ただ高度すぎて先生にばれそうw
439デフォルトの名無しさん:2005/06/29(水) 15:05:02
マルチなんてするからだ
440437:2005/06/29(水) 15:05:27
441デフォルトの名無しさん:2005/06/29(水) 15:06:11
[1]授業単元:プログラミング演習
[2]問題文:表計算プログラム。各セルを構造体で表現し、表全体はリストによってセルを結合。セルの構造体は右および下のセルを示すポインタ変数2つと、セル値として保持する文字列へのポインタ変数1つを持つものとし、動的にメモリ領域を割り当てる。
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ(バージョン)
[3.3]言語:C
[4]期限:7月1日(金)
[5]その他の制限:・プログラムを起動すると、初期状態として、適当な行数x列数の表を生成する。この際、各セルの値は0とする。
         ・式入力では、多項間の四則演算および累乗、多重括弧に対応(逆ポーランド記法はなし)。
         ・コマンドによって、表の表示、行および列の追加、挿入、移動、削除、表の保存復元、ヘルプ、終了の各操作を行うものとする。              
442宿題お願いします:2005/06/29(水) 15:19:54
(Nは自然数)
2n乗≡2(mod n) 
{問題}2n乗ー2がnで割り切れるかどうかチェックします。
これが成り立つ時、素数表を参照して、
素数で無いものを選び出すプログラムです。C++です宜しくお願いします。
443デフォルトの名無しさん:2005/06/29(水) 15:45:33
>>428
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/630.txt

ファイルからの読み込みはテキトー。
データファイル名はdata.txt。単語が空白とか改行とかで区切られてれば問題ないと思う。
配列はvector使った。
文字列の類似性を見積もるアルゴリズムはパクりなのでバレないように。
444デフォルトの名無しさん:2005/06/29(水) 15:47:05
>>428
データが「和食 中華 フレンチ」とかで、キーボードから「コロッケパン」を
入力すると「フレンチ」を出力するようなプログラムを作るってこと?
# 「ヤキソバパン」だと「和食」と「中華」どっちになるのかな?
445デフォルトの名無しさん:2005/06/29(水) 15:51:58
>>444
大掛かりな宿題だなw
446デフォルトの名無しさん:2005/06/29(水) 15:57:34
>>442
2n乗って何だ?
2のn乗かな?
447デフォルトの名無しさん:2005/06/29(水) 16:03:32
わかる人だけで結構ですから、早目におねがいします。
448デフォルトの名無しさん:2005/06/29(水) 16:19:08
死ねば♥
449デフォルトの名無しさん:2005/06/29(水) 16:25:26
>>448
なんですか?あなたは。
わからない人はけっこうですと言ってるだけですよ?
450デフォルトの名無しさん:2005/06/29(水) 16:40:50
>>1も読めない>>442は徹底無視の方向性で。
451デフォルトの名無しさん:2005/06/29(水) 16:40:54
何なのコイツ。回答を得たいのではないのか?
素行が気に入らないから、皆答えなくて良い。
452442:2005/06/29(水) 16:41:29
自己解決しました。どうもありがとうございました。
453デフォルトの名無しさん:2005/06/29(水) 16:43:31
>>442=>>452
荒らしウザイ
454デフォルトの名無しさん:2005/06/29(水) 16:43:49
わからないなら黙ってればいいのに、なぜジャマをするんですか?
455442:2005/06/29(水) 16:47:53
452は私ではありません。早くお願いします。
456デフォルトの名無しさん:2005/06/29(水) 16:53:03
別に誰が誰でもいいけど、>>442やる奴もういないっしょ
もし>>442以外の書き込みが全て本人以外だったとしたら不運だったな。
ま、テンプレ読んでない時点でスルーされても文句言えないが。
457デフォルトの名無しさん:2005/06/29(水) 16:53:47
>>444
># 「ヤキソバパン」だと「和食」と「中華」どっちになるのかな?
何故そう言う発想になるのだろう。
「パン」の段階で和食でも中華でもない気がするのだが。
#つーか、「洋食」じゃなくて「フレンチ」かい。
458デフォルトの名無しさん:2005/06/29(水) 16:55:46
回答を得るのに必死wwww
459デフォルトの名無しさん:2005/06/29(水) 16:56:13
このスレもネタスレへと模様替えしたようですw
460デフォルトの名無しさん:2005/06/29(水) 16:56:35
この頃事後報告無し、同じ問題多しで厨が増えたよな
461宿題お願いします:2005/06/29(水) 17:04:34
442です。書き込み初なので、不快な思いをさせた事申し訳ありません。
2のn乗です。2n乗ー2がnで割り切れるかどうかチェックするプログラムです。
お願いできませんか?
462デフォルトの名無しさん:2005/06/29(水) 17:09:45
>>457
問題文 428 を読んでないな。「分類する」んじゃなくて、「近い」単語を表示するんだ。
463デフォルトの名無しさん:2005/06/29(水) 17:15:30
>>442
この際トリップ付けて1のフォーマットに沿った質問をした方が回答得やすいかもよ。

あとunsigned int(4byte),の範囲だと30のケースを判定して終わりだよね。
464デフォルトの名無しさん:2005/06/29(水) 17:19:53
>>428

距離空間を定義すればいいのかな。

文字列s1, s2の距離は

sqrt((s1[0] - s2[0])^2 + (s1[1] - s2[1]^2 + ..... (s1[N] - s2[N])^2)

とする。

ただしN = max(strlen(s1)-1, strlen(s2)-1)

strlen(s2) == Mのとき、
s2[M] ... s2[N]の値は0とする

みたいな感じで。
465デフォルトの名無しさん:2005/06/29(水) 17:27:24
>>463
2^2 から 2^31 までチェックしたところそのようなものは一つもなかったから、
プログラムは次のようになるのかな?
#include <iostream>
int main(void){
std::cout << "31 以下の整数でそのような条件を満たすものはありません"
<< std::endl;
}
466宿題お願いします:2005/06/29(水) 17:30:00
463さん指摘ありがとうです。何回も書いてごめんなさい。
[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク): 2のn乗ー2の答えがnで割り切れるかどうかチェックするプログラム
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Microsoft Visual c++というものです。
 [3.3] 言語:C++
[4] 期限:2005年6月30日09:00まで
[5] その他の制限:C++に関しての知識はほとんどありません。本を読んでもいまいち理解できないので
お願いしました。無理言ってすいません。
467>>466:2005/06/29(水) 17:46:16
#include <stdio.h>
int main(void)
{
unsigned int num = 4,i;
for(i=2;i<32;i++,num <<= 1){
const unsigned int check = num - 2;
if(check % i) continue;
printf("%dは割り切れたぞ\n",i);
}
return 0;
}
468デフォルトの名無しさん:2005/06/29(水) 17:51:10
>>466
n=2の場合、2^2-2=2 は 2 で割り切れる
n=3の場合、2^3-2=6 は 3 で割り切れる
n=5の場合、2^5-2=30 は 5 で割り切れる
n=7の場合、2^7-2=126 は 7 で割り切れる
n=11の場合、2^11-2=2046 は 11 で割り切れる
n=13の場合、2^13-2=8190 は 13 で割り切れる
n=17の場合、2^17-2=131070 は 17 で割り切れる

不思議と n は素数ばかり並ぶな。
これって数学的に何か秘密があるんじゃないの?
数学得意な人、解説キボンヌ。
469デフォルトの名無しさん:2005/06/29(水) 17:54:21
メルセンヌ素数でググれ
2^n-2 = 2(2^(n-1) - 1)
470宿題お願いします:2005/06/29(水) 17:56:08
みなさんありがとうございます。466さん467さんどうもです。
471デフォルトの名無しさん:2005/06/29(水) 17:57:51
472デフォルトの名無しさん:2005/06/29(水) 18:02:11
473デフォルトの名無しさん:2005/06/29(水) 18:11:12
474デフォルトの名無しさん:2005/06/29(水) 19:48:13
あーあ
475デフォルトの名無しさん:2005/06/29(水) 21:07:27
>>467 なんで勝手にn<=31って制限つけてんだよ。せめて 2^15 まで対応させろよ。
476デフォルトの名無しさん:2005/06/29(水) 21:09:56
メルセンヌツイスター てなんかカコイイ
477デフォルトの名無しさん:2005/06/29(水) 21:18:12
[1] 授業単元:プログラミング
[2] 問題文:三角形の3頂点(x1,y1),(x2,y2),(x3,y3)を読み込んで3つの角度θ1,θ2,θ3,をdeg単位(°)で計算して印字するプログラムを作成せよ。
      また、実数型変数θ1,θ2,θ3へのポインタ変数と、変数方変数x1,y1,x2,y2,x3,y3を引数とする関数を作成しmain関数では同関数として呼び出すようにする。
      各変数をポインタを介して関数で使用する。各角度は余弦定理 a^2=b^2+c^2-2bc*cos(A)をする。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):cc
 [3.3] 言語:C
[4] 期限:なるべく早めで

みなさん、お願いします。
478デフォルトの名無しさん:2005/06/29(水) 22:04:39
>>477
#include <math.h>

#define   sqr(x)   ((x)*(x))
#define   sqr_edge_len(x1,y1,x2,y2)   (sqr((x1)-(x2))+sqr((y1)-(y2)))
#ifndef   M_PI
#define   M_PI   3.1415926536
#endif

int calc_angles( double *p_theta1, double *p_theta2, double *p_theta3,
double x1, double y1, double x2, double y2, double x3, double y3 )
{
   double sqr_a = sqr_edge_len(x1, y1, x2, y2);
   double sqr_b = sqr_edge_len(x2, y2, x3, y3);
   double sqr_c = sqr_edge_len(x3, y3, x1, y1);
   if( sqr_a * sqr_b * sqr_c == 0 ) return -1;
   *p_theta1 = 180.0 * acos( (sqr_b + sqr_c - sqr_a) / (2 * sqrt( sqr_b * sqr_c )) ) / M_PI;
   *p_theta2 = 180.0 * acos( (sqr_c + sqr_a - sqr_b) / (2 * sqrt( sqr_c * sqr_a )) ) / M_PI;
   *p_theta3 = 180.0 * acos( (sqr_a + sqr_b - sqr_c) / (2 * sqrt( sqr_a * sqr_b )) ) / M_PI;
   return 0;
}
479デフォルトの名無しさん:2005/06/29(水) 22:31:56
>>475
#include <stdio.h>
#include <string.h>

int main() {
 for (int n = 2; n < 32768; n++) {
  unsigned b[1024];
  memset(b, 0, sizeof b);
  b[n / 32] |= 1 << n % 32;
  int i = 0, j = 0;
  bool f = b[0] < 2;
  b[0] -= 2;
  if (f) do {f = !b[++i]; b[i]--;} while (f);
  for (i = n / 32; i >= 0; j = unsigned(((_int64(j) << 32) + b[i--]) % n));
  if (!j) printf("%d\n", n);
 }
 return 0;
}
480デフォルトの名無しさん:2005/06/29(水) 22:33:43
481デフォルトの名無しさん:2005/06/29(水) 22:47:17
[1]授業単元:プログラミング演習
[2]問題文:表計算プログラム。各セルを構造体で表現し、表全体はリストによってセルを結合。セルの構造体は右および下のセルを示すポインタ変数2つと、セル値として保持する文字列へのポインタ変数1つを持つものとし、動的にメモリ領域を割り当てる、というもの。
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ(バージョン)
[3.3]言語:C
[4]期限:7月1日(金) できれば早めにお願いします
[5]その他の制限:・プログラムを起動すると、初期状態として、適当な行数x列数の表を生成する。この際、各セルの値は0とする。
・式入力では、多項間の四則演算および累乗、多重括弧に対応(逆ポーランド記法はなし)。
・コマンドによって、表の表示、行および列の追加、挿入、移動、削除、表の保存復元、ヘルプ、終了の各操作を行うものとする。
というものです。できた部分部分でもUPしていただけたら幸いです。
              
482477:2005/06/29(水) 22:47:45
>>478さん
>>480さん
参考になりました。ありがとうございます。
483デフォルトの名無しさん:2005/06/29(水) 23:01:11
[1] 授業単元:ポインタ
[2] 問題文(含コード&リンク):
 幾つかの数値が入ったファイルを呼び出して、
データの最大値・最小値・平均値・標準偏差値を取り出すプログラムを
関数へのポインタ変数の受け渡し(アドレス渡し?)を利用して作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月30日
[5] その他の制限:ポインタのあたりまで習ってます。
484483:2005/06/29(水) 23:04:09
↓ちなみに、ポインタを利用しないでなら一応作れました。

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

main()
{
int x[100],y=0,n=0,i=0;
int max=0,min=100;
double sum=0,ave,var,sd;
FILE *fp;

fp=fopen("seiseki.txt","r");
while (fscanf(fp,"%d",&x[i]) != EOF) {
y+=x[i];
max=(max>x[i])?max:x[i];
min=(min<x[i])?min:x[i];
n++;
i++;
}
fclose(fp);
485483:2005/06/29(水) 23:04:31
↑の続き

ave=y/n;

for(i=0;i<n;i++)
{
sum=sum+(x[i]-ave)*(x[i]-ave);
}
var=sum/n;
sd= sqrt(var);

printf("最大値 = %d\n",max);
printf("最小値 = %d\n",min);
printf("平均値 = %f\n",ave);
printf("標準偏差値 = %f\n",sd);

return 0;
}
486デフォルトの名無しさん:2005/06/29(水) 23:06:06
>>483
思いっきりアドレス渡ししてるじゃん
487デフォルトの名無しさん:2005/06/29(水) 23:06:53
[1] 授業単元:プログラミング
[2] 問題文
0度から360度まで1度刻みの角度に対する三角関数(sin, cos, tan)を計算
し、画面に表示するプログラムをかけ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7/1まで
[5] その他の制限: 角度からradへの変換を行う関数を作成、使用すること


お願いします
488デフォルトの名無しさん:2005/06/29(水) 23:17:39
>>487
数学的事情により、90度の倍数ではtanがおかしくなる。
#include <stdio.h>
#include <math.h>
#define PI 3.1415926535897932384626433832795
double degree(double x){return x / 180 * PI;}
int main(void) {
    int i;
    for (i = 0; i <= 360; i++)
        printf("sin%3ddegree=%1.5f\tcos%3ddegree=%1.5f\ttan%3ddegree=%1.5f\n", i, sin(degree(i)), i, cos(degree(i)), i, tan(degree(i)));
    return 0;
}
489デフォルトの名無しさん:2005/06/29(水) 23:22:05
>>488
どうも。
角度をラジアンに変換する式がわかんないんですが・・・
490デフォルトの名無しさん:2005/06/29(水) 23:22:05
>>483

>>265
>>383

同じスレのログくらい読め
491デフォルトの名無しさん:2005/06/29(水) 23:24:34
>>489
高校数学だね
radian = (degree / 180) * pi
492デフォルトの名無しさん:2005/06/29(水) 23:27:08
>>491
わかりました。ありがとうございます!
493デフォルトの名無しさん:2005/06/29(水) 23:33:13
>>488
おかしくなる=発散するってことね
494デフォルトの名無しさん:2005/06/29(水) 23:33:41
[1] 授業単元:プログラミング技術
[2] 問題文:n個の文字を読み込んだ後、文字をアルファベット順に並び替えるプログラムを作成しなさい。
1、n個の文字を読み込む
2、文字をアルファベット順に並び替える
3、表示する
以上3つの手続きを関数として作成しmain関数でこれらの関数を呼び出すようにする。
アルファベット順は大文字と小文字がある場合は小文字を先に出す。

BasC ⇒aBCs

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):cc
 [3.3] 言語:C言語
[4] 期限:早ければ早いほどいいです


495デフォルトの名無しさん:2005/06/29(水) 23:34:51
期限くらい書けよ
496デフォルトの名無しさん:2005/06/29(水) 23:35:16
>>494
nはどこで決める?ソース中?入力させる?
497デフォルトの名無しさん:2005/06/29(水) 23:51:06
>>494
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(void) {
    unsigned int n;
    int i, j, len;
    char* str, temp;
    printf("n?:"); scanf("%u", &n);
    getchar();
    str = (char*)malloc(n + 2);
    fgets(str, n + 2, stdin);
    str[len = strlen(str) - 1] = '\0';
    for (i = 0; i < len - 1; i++)
        for (j = 0; j < len - 1 - i; j++)
            if (tolower(str[j]) == str[j + 1] || tolower(str[j + 1]) < tolower(str[j]))
            {
                temp = str[j];
                str[j] =str[j + 1];
                str[j + 1] = temp;
            }
    printf(str);
    free(str);
}
498デフォルトの名無しさん:2005/06/29(水) 23:51:41
>>494 2のみ
#include <stdio.h>
#include <stdlib.h>
#define   tolower(c)   (('A'<=(c) && (c)<='Z') ? ((c)-'A'+'a') : (c))
int cmp_alph(const unsigned char *c1, const unsigned char *c2)
{
   if(tolower(*c1) != tolower(*c2)) return(tolower(*c1) - tolower(*c2));
   else return((*c2) - (*c1));
}
int main( void )
{
   unsigned char string[] = "awerAlcA";
   printf("%s\n", string);
   qsort( string, sizeof( string ) - 1, sizeof( unsigned char ), (int(*)(const void *, const void *))cmp_alph);
   printf("%s\n", string);
   return 0;
}
499デフォルトの名無しさん:2005/06/29(水) 23:52:27
>>494
#include <stdio.h>
#include <string.h>

int read_nchars(char *chars, int n) {
 return fgets(chars, n, stdin) ? strlen(chars): 0;
}
char *sort(char *chars, int n) {
 int count[256], i;
 const char *p;
 memset(count, 0, sizeof count);
 for (i = 0; i < n; i++) count[chars[i] & 255]++;
 for (p = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ", n = 0; *p; p++)
  for (i = 0; i < count[*p]; i++) chars[n++] = *p;
 chars[n] = 0;
 return chars;
}
void display(const char *chars) {
 printf("%s\n", chars);
}
int main() {
 char chars[256];
 display(sort(chars, read_nchars(chars, sizeof chars)));
 return 0;
}
500デフォルトの名無しさん:2005/06/29(水) 23:53:42
>>497-499
ケコーン
501>>496-497:2005/06/29(水) 23:54:32
>>494
もてもてだな
502デフォルトの名無しさん:2005/06/29(水) 23:59:33
プログラムの宿題をお金払いますから、やってくれる人いますでしょうか?
自分は物理学科なんですけど、正直プログラムやってるだけの余裕はありません。
二次元配列の簡単な問題を3つやってもらえたら、6000円を銀行振り込みします。

やってくれる人いますでしょうか。
503デフォルトの名無しさん:2005/06/30(木) 00:06:00
>>502
それはまずここに問題を書いてからだ。タダでやってくれる物好きが
いるかも知れん。
504デフォルトの名無しさん:2005/06/30(木) 00:12:02
>>502
たった6000?
一二時間でできないと割に合わないな
505デフォルトの名無しさん:2005/06/30(木) 00:33:24
[2] 問題文(含コード&リンク): http://para-site.net/up/data/3042.jpg
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:7月4日
[5] その他の制限:初歩的な配列まで

一万円にします。どうでしょうか。

ファイルから読み込ませるというのがやっかいな予感です。
担当教官に聞いたところ、できなければ無視してもよいと言われました。
ただその場合は、学生数、学生の番号と名前、それぞれの科目の点数を、
プログラムの中で指定しなければならない(5人ほど書く)ので、
できの悪いプログラムだと言われましが、一応問題はないみたいです。
できる方で御願いします。
506デフォルトの名無しさん:2005/06/30(木) 00:34:46
あと追加ですが、もしやって下さる人がいれば、明日の7時にプログラムをこのスレに書いて下さい。
動作の確認は学校でなければできないので、7時に私がプログラムを学校のPCに打ち込みます。
動作を確認しだい、メールアドレスを載せますので、お金のやり取りはそっちでしましょう。
507502 ◆Avm1fqtITk :2005/06/30(木) 00:35:43
一応トリップ付けます。
508デフォルトの名無しさん:2005/06/30(木) 00:39:03
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
級数 a(1)=1, a(n)=a(n-1)+n  (nは2以上)
の値を n=20 まで、1行に5個ずつ出力する
プログラムを作成しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年7月01日まで
[5] その他の制限: continue まで習っています。
この問題は去年の期末試験だそうです。
よろしくお願いします。
509デフォルトの名無しさん:2005/06/30(木) 00:51:21
〜まで習ってますといわれても、何を基準に〜までなんだ?
510デフォルトの名無しさん:2005/06/30(木) 00:51:52
>>502
その問題、過去にあったような気がするよ。

>>508
#include <stdio.h>
int recursiveFunc(int n)
{
if (n == 1)return 1;
return recursiveFunc(n - 1) + n;
}
int main(void)
{
int i;
for (i = 1; i < 20; i++) {
printf("%4d%c", recursiveFunc(i), " \n"[((i%5) == 0)]);
}
return 0;
}
511510:2005/06/30(木) 00:53:17
スマン、
誤:for (i = 1; i < 20; i++) {
正:for (i = 1; i <= 20; i++) {
512デフォルトの名無しさん:2005/06/30(木) 00:54:13
>>508
#include<stdio.h>

int main(void)
{
int i,n,a[20];

a[0]=1;

for(i=0;i<20;i++){
if(i==0){
printf("a[%2d]=%3d ",i+1,a[i]);
}else{
a[i]=a[i-1]+i+1;
printf("a[%2d]=%3d ",i+1,a[i]);
}
if(i!=0&&(i+1)%5==0){
printf("\n");
}
}

return 0;
}
513デフォルトの名無しさん:2005/06/30(木) 00:55:16
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
2つの整数値を書き込んだテキストファイルを作成するプログラム
書き出すファイル名をキーボードから指定でき、既に存在するファイル名であれば、追加書き込みするように。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月30日10:00まで
[5] その他の制限:FILEまで習ってます
514デフォルトの名無しさん:2005/06/30(木) 00:56:03
[1] 授業単元: アルゴリズムとデータ構造
[2] 問題文
フィボナッチ数列
Fn=F(n-1)+F(n-2) (n>=2)
F(0)=F(1)=1
このとき
(a)再帰的関数を用いた方法
(b)再帰的関数を用いない方法
この二通りでプログラミングを行いF(0)〜F(20)間での値を表示せよ
また、どちらが実行時間が短いか、理論的に考察せよ。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年07月04日17:00まで
[5] その他の制限:なし

お金もスキルもありませんが、だれか助けてください。
515デフォルトの名無しさん:2005/06/30(木) 00:56:07
>>505
「任意の数のクラス」の学生?それとも任意の数の「クラスの学生」?
516デフォルトの名無しさん:2005/06/30(木) 00:56:43
>>507
ドン引き。
空気嫁。
517デフォルトの名無しさん:2005/06/30(木) 00:58:37
>>514
おま・・・>510と>512嫁よ。
ほとんど同じ問題だぞ。
518デフォルトの名無しさん:2005/06/30(木) 01:00:08
>>505
この問題だったら、普通は構造体の配列になるはずだが、
それを2次元配列でやれってのは難しくね?
それに、標準偏差は科目別に求めるのに、偏差値は
合計点から求めるのか?
519デフォルトの名無しさん:2005/06/30(木) 01:01:57
510と512が何なのかすでに分かりません。
プログラムは去年やったのですが、語学が昔から苦手で
好きになれませんでした。
でも先生がこの宿題やれっていうし、訳ありの編入学なんで友達もいません。
どうか助けてください。
520デフォルトの名無しさん:2005/06/30(木) 01:04:10
救いようが無い。
521デフォルトの名無しさん:2005/06/30(木) 01:05:04
ちなみに問題文が何いってるのかも分かりませんが何か?
522デフォルトの名無しさん:2005/06/30(木) 01:26:15
523デフォルトの名無しさん:2005/06/30(木) 01:27:09
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク): 英語辞書にあるスペルチェッカーを作成せよ
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:6月30日まで
[5] お願いします
524デフォルトの名無しさん:2005/06/30(木) 01:27:12
>>514
#include <stdio.h>
int fib_recursion(int n) {
    return n > 1 ? fib_recursion(n - 1) + fib_recursion(n - 2) : 1;
}
int fib_no_recursion(int n) {
    int old1 = 0, old2, result = 1;
    while (n--) {
        old2 = old1;
        old1 = result;
        result = old1 + old2;
    }
    return result;
}
int main(void) {
    int i;
    printf("(a)再帰的関数を用いた方法\n");
    for (i = 0; i <= 20; i++) printf("F(%2d)=%5d\n", i, fib_recursion(i));
    printf("(b)再帰的関数を用いない方法\n");
    for (i = 0; i <= 20; i++) printf("F(%2d)=%5d\n", i, fib_no_recursion(i));
    return 0;
}

【考察】実行時間は(b)が早い。
【理由】
    1 (a)は関数の呼び出し回数が多い。関数の呼び出しにはそれなりの
        時間がかかる。
    2 (a)は何度も同じ計算をしている。
        (2の例)
        F(4)=F(3)+F(2)=(F(2)+F(1))+(F(1)+F(0))=((F(1)+F(0))+F(1))+(F(1)+F(0))
        となっていて無駄が多い。
525523:2005/06/30(木) 01:29:12
#include<stdio.h>
main()
{
char *moji[3] = {メbananaモ,モappleモ,モbikeモ};
char ji[10];
int I,a,b;

printf(メ入力:モ);
   scanf(メ%sモ,ji);

for(i=0;i<3;i++)
{
a=0;
b=0;

while(moji[i] !=`¥0`)
{
if(*moji[i]=ji[a])
{
b++;
}
a++;
moji[i]++;
}

526523続き:2005/06/30(木) 01:29:44
if(b==0)
{
printf(メ正解モ);
break;
}
}
}
if(I==3)
{
printf(メスペル間違い¥nモ);
}
}


これでエラーは出ないのですが、どう打ち込んでも正解になります。行き詰まりました。
527デフォルトの名無しさん:2005/06/30(木) 01:31:32
再帰
//Fn=F(n-1)+F(n-2) (n>=2)
//F(0)=F(1)=1
double F(int n){ return (n<2)?1:(F(n-1)+F(n-2)); }
528502 ◆Avm1fqtITk :2005/06/30(木) 01:32:06
問題文のところで、
 - (問題文)
というのが5行ありますが、プログラムとして出すのは、
2行目、3行目、そして5行目(4行目のを使用)、です。

>>515
任意の数の「クラスの学生」、です。
クラスは1つで、学生の数は任意です。

>>518
構造体でやるのが普通とのことですが、
教官の話では、とにかく答えが出せればよいということでした。
二次元配列に拘らずとも、やりやすい方でよいとのことです。
そうです、科目別の偏差値(2行目問題)、三科目の合計の偏差値(5行目問題)を、
それぞれ求めます。
529デフォルトの名無しさん:2005/06/30(木) 01:33:39
>>525,526
化けとるぞ

それと、題意が良くわからんが、「辞書ファイル」みたいなのがあって
(たとえば/usr/share/dict/wordsとか)、それ使ってスペルチェックしろって
ことじゃないのか?
530デフォルトの名無しさん:2005/06/30(木) 01:40:32
>>524
神様ありがとうございました。
考察までつけて頂いて、
このスレの人達は伊達の極みですな。
531修正してやる:2005/06/30(木) 01:58:45
>何度も同じ計算をしている

double F(int n, double *dst){
if(n<2) return dst[0]=dst[1]=1;
if(dst[n-2]==0) dst[n-2]=F(n-2,dst);
if(dst[n-1]==0) dst[n-1]=F(n-1,dst);
return dst[n]=dst[n-2]+dst[n-1];
}
int main(void)
{
double dst[20+1]={0};
int n;
for(n=0; n<=20; ++n)
printf("F(%2d)=%.0lf\n", n ,F(n,dst));
return 0;
}
532デフォルトの名無しさん:2005/06/30(木) 02:10:16
>>441
表計算か…。俺も何年か前に出されたがさっぱりわからんくて諦めたやつだ。
俺もちょっと興味あるな。誰か教えてくれ。
533デフォルトの名無しさん:2005/06/30(木) 02:37:23
>>529
一応辞書ファイルを作ってもやってみたのですが、結局上のような方法でやりました
実験的にとりあえず単語を3つだけにして
534デフォルトの名無しさん:2005/06/30(木) 02:58:54
#513
#include <stdio.h>

void FileMakes(char fname[])
{
FILE *fp;

fp = fopen(fname , "a+");

fprintf (fp, "%d %d\n", 1, 2);

fclose(fp);

}

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

if ( argc <= 1 )
{
printf ( "USAGE : %s <filename>\n",argv[0]);
}
else
{
FileMakes(argv[1]);
}

return 0;
}
535デフォルトの名無しさん:2005/06/30(木) 03:00:34
>>532
来年の7/1だったら誰かが作っているかも試練。
まぁネタでしょ。
536デフォルトの名無しさん:2005/06/30(木) 03:10:41
>>535
来年じゃなく来月だろ
537デフォルトの名無しさん:2005/06/30(木) 03:37:48
>>522
no newline at end of file
ってでて走りません
538デフォルトの名無しさん:2005/06/30(木) 03:42:52
>>537
ちゃんとメッセージ出てるんだから、読んで修正しようよ。
539デフォルトの名無しさん:2005/06/30(木) 04:35:39
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
対CPU型のオセロを作成
CPUに58手目からの残り3手を先読みさせ
最善手を導き出す関数を作る
[3] 環境
 [3.1] OS:WindowssXP
 [3.2] Borland C++:
 [3.3] 言語:C
[4] 期限:7月3日PM:2:00まで
[5] その他の制限:
とりあえず対CPU型のオセロは完成しました。
しかし"先読みの関数"の作成がよくわかりません。

Cの勉強初めて1ヶ月足らずです。よろしくお願いします
540デフォルトの名無しさん:2005/06/30(木) 06:41:19
>>539
関数の仕様がわからない。
ソース隠したいかも知れんが、引数くらい出してもいいと思うよ。
そうすればだれかやってくれるさ。多分。
541デフォルトの名無しさん:2005/06/30(木) 06:52:22
>>539
Cの勉強始めて1ヶ月足らずの状態でそんな宿題出す奴いるのかよ?
何となくフリーのBCCで遊んでる趣味プログラマな希ガス。
それとも別の言語でアルゴリズムやってて、1ヶ月前にCに突入したのかな?
542デフォルトの名無しさん:2005/06/30(木) 07:03:52
>>539
先読みって言ってもマス目が8x8だとすると58手目の時点では残りのマスは
3つしかないから、残り3手は6通りしかないし、全通り網羅すればいいんでないの。
543デフォルトの名無しさん:2005/06/30(木) 07:04:30
[1]授業単元:プログラミング演習
[2]問題文:表計算プログラム。各セルを構造体で表現し、表全体はリストによってセルを結合。セルの構造体は右および下のセルを示すポインタ変数2つと、セル値として保持する文字列へのポインタ変数1つを持つものとし、動的にメモリ領域を割り当てる、というもの。
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ(バージョン)
[3.3]言語:C
[4]期限:7月1日(金) できれば早めにお願いします
[5]その他の制限:・プログラムを起動すると、初期状態として、適当な行数x列数の表を生成する。この際、各セルの値は0とする。
・式入力では、多項間の四則演算および累乗、多重括弧に対応(逆ポーランド記法はなし)。
・コマンドによって、表の表示、行および列の追加、挿入、移動、削除、表の保存復元、ヘルプ、終了の各操作を行うものとする。
というものです。できた部分部分でもUPしていただけたら幸いです。
544デフォルトの名無しさん:2005/06/30(木) 07:37:46
545デフォルトの名無しさん:2005/06/30(木) 07:49:32
>>466
int test( n )
{
int nn , aa , x;
nn = n ;
aa = 2 ;
x = 1 ;
while( 0 < nn ){
if( ( nn & 1 ) == 0 ){
}else{
x = ( x * aa ) % n ;
};
aa = ( aa * aa ) % n ;
nn >>= 1 ;
};
return 2 == x ;
};
546デフォルトの名無しさん:2005/06/30(木) 08:08:37
>>441 >>481 >>543
何度も同じの書くなって。
必死な思いでいるのもわかるけど、一回書き込んで誰も解いてくれなかったら、それはそれで仕方ない。
宿題ってのは本来自分でやるものだからな。

// このスレで宿題解いてる奴ってのは、たいていボランティア精神ではなく、
// 「自分が楽しいから」「自分の勉強になるから」「自分自身の小手試し」「暇つぶし」
// などの理由なだけなので甘えないように。

諦め切れなくても、全文書きうつすんじゃなくてせめて
>>441ですけど、できた部分部分でもUPしていただけたら幸いです。」
の一言だけに留めておいてくれ。
これだけでも、動き出す奴は動き出す。
547デフォルトの名無しさん:2005/06/30(木) 09:04:45
>>510
早々な回答ありがとうございました
548デフォルトの名無しさん:2005/06/30(木) 09:12:28
>>543
プログラマは統計的にギリギリになるまでやらない傾向が強い。
549416:2005/06/30(木) 09:24:12
>>418
>>419
ありがとうございました。
おかげで作成することができました。
550デフォルトの名無しさん:2005/06/30(木) 09:53:52
[1] 授業単元:
[2] 問題文(含コード&リンク): ポーカーのプログラム
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):VC
 [3.3] 言語:C++
[4] 期限:7月15日
[5] その他の制限:どこまで習っているか、インクリメントデクリメント演算子まで
とりあえずカードを配って表示させるところまではできたのですが、
その先のカードを2回変えることができるようにする部分とカードの判定の部分がよくわかりません。
ヒントでも構いませんのでどうかよろしくお願いします。
551デフォルトの名無しさん:2005/06/30(木) 10:05:03
>>550
インクリメントデクリメント演算子だけでよく
"カードを配って表示させるところまではできた"な
君ほどの素質があればきっと克服できるだろう。
Good Luck !
552デフォルトの名無しさん:2005/06/30(木) 10:19:31
C++を使って、
ゲーム理論の2人ゼロSUMゲームのNash均衡を求めるプログラムを教えてください。
2*2の正方行列で均衡点を求めたいんですが、
(5,5)(0,8)
(8,0)(2,2)の行列です。
均衡点は(2,2)です。パレート最適は(5,5)です。
お願いします!!
アルゴリズムとしては
使用する変数の宣言

利得行列をデータで与える。

p1_max[i],pi[j]を計算する
p2_max[i],pj[i]を計算する

Nash均衡の判定

i=pi[j]   →No
↓Yes
j=pj[i]   →No
↓Yes
(i,j)はNash均衡としPrintする。

です。お願いしまっす。


553デフォルトの名無しさん:2005/06/30(木) 11:45:03
64bitポインタの32bitへの縮小ってできます?
554デフォルトの名無しさん:2005/06/30(木) 11:49:30
>>522
ありがとうございました。助かりました。

>>538
わかりました。
555デフォルトの名無しさん:2005/06/30(木) 12:22:01
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ユークリッドの互除法で最大公約数を求める場合の再帰的関数呼び出しによる
プログラムを書け。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7/1まで
[5] その他の制限:
これどなたかお願いします。
556デフォルトの名無しさん:2005/06/30(木) 12:31:32
>>555
#include <stdio.h>
int gcd(int a, int b)
{
if(b == 0) return a;
return gcd(b, a % b);
}
int main(void)
{
int a, b;
printf("a=?"); scanf("%d", &a);
printf("b=?"); scanf("%d", &b);
printf("最大公約数GCD(%d,%d)=%d\n", a, b, gcd(a, b));
return 0;
}
557デフォルトの名無しさん:2005/06/30(木) 13:17:09
誰か教えてください。(標準入力から改行で区切られた文字列 s1 と s2 を受け取り,
文字列 s2 の中の任意の文字に等しい文字を s1 から除去して,
その結果を標準出力に出力するようなプログラムを書け。)
よろしくお願いします。
558デフォルトの名無しさん:2005/06/30(木) 14:19:47
>>556
ありがとうございました
559デフォルトの名無しさん:2005/06/30(木) 14:22:21
こんにちは
質問ですが、

typedef struct
{
int a;
std::vector<INFOTABLE> info;

}INFO;

typedef struct
{
std::vector<INFO> info;
}INFOTABLE

とヘッダーに定義すると、
INFOTABLEが定義されていません。と出ますが、
この場合、INFOTABLEはINFOの下に定義してるので、
このような記述でも、コンパイルできる方法を教えていただきたいです。

よろしくお願いします。
(classの場合、頭のところに、class info;としておけば解決できますが・・・。)
560デフォルトの名無しさん:2005/06/30(木) 14:47:18
>>559

struct info;

単発質問はスレ違いなんで以後気をつけるように。
561デフォルトの名無しさん:2005/06/30(木) 15:00:42
>>560
それは間違い。
struct INFOというものが定義されたことになる。

なので、以下の
typedef struct
{
int a;
std::vector<INFOTABLE> info;

}INFO;

でエラーになる。
562デフォルトの名無しさん:2005/06/30(木) 15:13:13
struct stInfotable;

typedef struct
{
int a;
std::vector<stInfotable> info;

}INFO;

typedef struct stInfotable
{
std::vector<INFO> info;
}INFOTABLE;

>>559
このようにしては
563デフォルトの名無しさん:2005/06/30(木) 15:39:13
char a[5];
char b[1];
a[0]=4,a[1]=8,a[2]=4,a[3]=0,a[4]=9;
aの配列に入っているデータ5つを、並びを変えずにbの配列ひとつに入れるには
どうしたらいいのでしょうか?
b[1]=48409にしたい
564デフォルトの名無しさん:2005/06/30(木) 15:40:01
[1] 授業単元: Aプログラミング
[2] 問題文(含コード&リンク):
N 人の人がいて,それらは番号 0, 1, 2, ..., N-1 で表されているとする。
この N 人の人間関係(知り合いかどうか)を表した配列 a[N][N] がある。
ただし,i 番目の人と j 番目の人とが知り合いであるとき
a[i][j] == a[j][i] == 1 であり,知り合いでないとき a[i][j] == a[j][i] == 0 である。
このとき, x 番目の人から,知り合いの知り合いの知り合い..という
繋がりで, y 番目の人まで辿り着くには,最小で何回の知り合いという
関係が必要かを返す関数
int acquaintDistance(int a[N][N], int x, int y) を作れ。
なお,x 番目の人から y 番目の人に辿り着けない場合には,
acquaintDistance は -1 を返すこととする。

ヒント:待ち行列を利用する。最初に x を待ち行列に入れ,
後は,「待ち行列から一つ dequeue して,その人の知り合いを
待ち行列に enqueue する」ということを繰り返す。
ただし,一度 enqueue した人は二度と enqueue しないようにし
y を enqueue する時点あるいは enqueue する一がいなくなった時点で
終了する。x から各人までの知り合い距離を入れる配列も用意しておき
新しい人を enqueue する度に,その人までの距離をその配列に入れる。

[3] 環境
 [3.1] OS:Vine LiNUX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:6月30日 pm11:00までっす
[5] 本当すいませんがお願いいたします。




565デフォルトの名無しさん:2005/06/30(木) 15:44:17
[1] 授業単元:プログラミングC
[2] 問題文:
線形リスト全体を削除する関数を作れ.(ノードに割り当てられたメモリを解放することを忘れないように)

[3] 環境
 [3.1] OS:Vine LiNUX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:6月31日ちょうど、深夜0時です
[5]
お願いいたします。

566デフォルトの名無しさん:2005/06/30(木) 15:44:59
>>563
charだけいじっても無理
データのビット幅が確定しているのなら
構造体でビットフィールド使ってキツキツに詰めるしかない。
567>>565:2005/06/30(木) 15:54:54
typedef struct NODE{
struct HOGE hoge;
struct NODE* pNext;
}stNode;//みたいな線形リストなら

//先頭アドレスを放り込め。後は再帰的に開放してくれる。
void clearNode(stNode* lpSt){
if(lpSt->pNext){
clearNode(lpSt->pNext);
lpSt->pNext = NULL;
}
free(lpSt);
}
568デフォルトの名無しさん:2005/06/30(木) 16:08:31
>>565
> [4] 期限:6月31日ちょうど、深夜0時です

?????
569デフォルトの名無しさん:2005/06/30(木) 16:10:35
>>563
あなたのコンパイラでは char に入れられる値の範囲はいくつになりますか?
あと、a[5]='\0' が入っていると sscanf 一発で解決するかも知れません。
570デフォルトの名無しさん:2005/06/30(木) 16:22:11
>>563
スレ違い。初心者質問スレへどうぞ。

>>566
何故そこでビットフィールド? bの型を間違えているとは思わない?

>>569
文字が入っているとは書いてないのにsscanf()?
571デフォルトの名無しさん:2005/06/30(木) 16:53:50
>>564
その問題、このスレか前スレにあったぞ
さがしてみ。答えもあるはずだから。
572デフォルトの名無しさん:2005/06/30(木) 16:58:52
>>559
C++なのにstructをtypedefしたがる人が多いのはなぜだろう。

struct INFOTABLE;

struct INFO {
    int a;
    std::vector<INFOTABLE> info;
};

struct INFOTABLE {
    std::vector<INFO> info;
};
573デフォルトの名無しさん:2005/06/30(木) 17:00:29
宿題スレなのに単発質問にマジ回答したがる人が多いのはなぜだろう。
574569:2005/06/30(木) 17:02:03
>>570
配列の各要素に '0' を足せばオッケーでしょう。
まあそういう風に解いて欲しそうではないかも知れませんが……
575デフォルトの名無しさん:2005/06/30(木) 17:49:33
>>573
宿題を答えにこのスレに来たやつは基本的にひけらかしたいだけだから。
576502 ◆Avm1fqtITk :2005/06/30(木) 19:25:47
誰もこない…。もしかして、申し訳ないです、明日って今日のつもりだったんですが…。
日付が変わっているとは気付かなくて。
やってやるよゴルァという方どうでしょうか。動作確認してみます。
トリップ付けて下されば、メールで本人確認をして、明日にでも郵便(か銀行)振込します。
577デフォルトの名無しさん:2005/06/30(木) 19:42:38
誰か釣られる勇者はいないのか?
578デフォルトの名無しさん:2005/06/30(木) 20:14:47
制限がきつい
579502 ◆Avm1fqtITk :2005/06/30(木) 20:48:41
情報処理室が閉まるので、引き上げます。
俺は何をしているんだ…orz

明日は昼からレポート作成で情報処理室に篭りますので、よければ。
580デフォルトの名無しさん:2005/06/30(木) 21:14:17
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
0〜9までの数字をランダムに3つ選び、選んだ数字を表示するプログラムを作りなさい。
ただし同じ数字が出ても良い。

[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限:2005年07月02日午後まで
[5] その他の制限:なし
お願いします。

581デフォルトの名無しさん:2005/06/30(木) 21:30:45
>>580
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
  int i;
  srand(time(NULL));
  for( i = 0; i < 3; ++i)
    printf("%d ", rand() % 10);
  putchar('\n');
  return EXIT_SUCCESS;
}
582デフォルトの名無しさん:2005/06/30(木) 22:05:12
>>581
ありがとうございます
583デフォルトの名無しさん:2005/06/30(木) 22:33:13
>>579
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/637.txt
シェルソートはどっかからのコピペ
584デフォルトの名無しさん:2005/06/30(木) 22:37:43
[1] 授業単元:プログラミング技術
[2] 問題文(含コード&リンク):
1.ベクトル型のクラスMyVectorを三次元に拡張せよ
2.三次元ベクトルのクラスに「/」演算子(ベクトルの実数商)と、
「^」演算子(ベクトルの外積)を追加せよ。三次元ベクトルA=(Ax,Ay,Az)と
B=(Bx,By,Bz)の外積ベクトルは次のように定義される。
A*B=(Ay*Bz - AzBy, AzBx - AxBz, AxBy - AyBx)
3.A,Bの外積ベクトルをCにしたとき常に内積値A*C=B*C=0が成り立つことを、
様々な数値で確認せよ。
4.ベクトルクラスの同値比較演算「==」は、サンプルの実装では正しく働かない。
例えば、次のコード
MyVector a(10.0,20.0,30.0),b(1.0,2.0,3.0);
if(a == 10.0 * b){
cout << "Same!!\n";
}else{
cout << "Difference!!\n";
}
は環境によっては「Difference!!」を出力する。なぜなら、浮動小数点演算は桁落ちと
呼ばれる計算誤差が発生するからである。そこで、ある実数aとbが等しいかどうか判定
する場合、十分小さな値ε(例えば、0.0000001)を用いて、|a-b|<εが成り立つことで
等しいと判断するのが一般的である。このことを利用して、「==」演算子を再定義せよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C++
[4] 期限:05年7月1日7時頃まで
[5] その他の制限:
585デフォルトの名無しさん:2005/06/30(木) 22:38:19
[1] 授業単元:
[2] 問題文(含コード&リンク):
 英文の入ったファイル(eibun.txt)を読み込んで、指定した文字列が
何回出てくるかカウントするプログラムを作成しなさい。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月30日まで
[5] その他の制限:
 ファイルや検索する文字列は、ファイル実行時に指定します。
program eibun.txt for …みたいな感じです。
(プログラム内に*argv[]とかを使う)
586584:2005/06/30(木) 22:41:45
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/636.txt
↑が自分でやったものです
動作確認しましたが
勘違いしている箇所や間違っているところがあったらご指摘いただければ
と思います。
「==」演算子の再定義が自信ありません・・・
明日提出なのですみませんがどうかよろしくお願いします。
587502 ◆Avm1fqtITk :2005/06/30(木) 23:16:10
>>583
え、これがプログラムの答えですか?
一つに纏めれるんですね。明日確認してみます。
というかトリップ付けておられませんが、いいんでしょうか。

これって、テキストファイルをプログラムに読み込ませるやつですよね。
テキストの形式はどのように書けばよいのでしょうか?
やったことないん、ですが。一応↓
http://www.uploda.org/file/uporg137728.txt
絶対違うw
というか、最初から、クラスの人数、格科目の得点、名前、をプログラムの中で
指定しておく旨書いてくおいた方が無難だったですね…明らかに。
ファイル読み込ませるコマンドも分かりません氏。
588デフォルトの名無しさん:2005/06/30(木) 23:23:17
3
1 田中 50 75 79
2 伊藤 83 43 58
3 佐藤 34 83 53
589デフォルトの名無しさん:2005/06/30(木) 23:31:38
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):
ビーラントの次数低下法を用いて次の行列式の固有値と固有ベクトルを求めよ。
@
  4  3  1  -1  2
    3  6  1  -2  3
A=1  1  4  -3  1
   -1 -2  -3  6 1
    2  3  -1  1  4
[3] 環境 
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン): gcc(Cygwinの最新のやつ) 
 [3.3] 言語:C 
[4] 期限:明日朝9:00まで 
[5] その他の制限:
ハードコーティングでいいのでお願いしますorz
レポート@4つとか多すぎる(;´Д`)

非常にお願いしまんこ
590デフォルトの名無しさん:2005/06/30(木) 23:39:42
>>586
普通、double / vector は定義しない。
a=(1.0e-8, 0, 0), b=(0, 0, 0) のときは a == b だが、
a=(0, 0, 0), b=(1.0e-8, 0, 0) のときは a != b となる。
591デフォルトの名無しさん:2005/06/30(木) 23:41:28
592デフォルトの名無しさん:2005/06/30(木) 23:41:53
>>587
そもそも宿題を提示した時点でファイルの書式を明示すべき。
593デフォルトの名無しさん:2005/06/30(木) 23:50:43
>>585
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
FILE *fp;
char eng[100], *p;
int count = 0;
if (2 != argc) {
printf("引数が多すぎます\n");
return 0;
}
fp = fopen("eibun.txt", "r");
if (NULL == fp) {
printf("ファイルオープンに失敗しました\n");
return 0;
}
for (;;) {
if (NULL == fgets(eng, 100, fp)) {
break;
}
}
for (p = eng; p = strstr(p, argv[1]); p += strlen(argv[1])) {
count++;
}
printf("%sはeibun.txtの中に%d個あります\n",argv[1], count);
fclose(fp);
}
適当につくったwたぶんまちがってるとこありそう!
594デフォルトの名無しさん:2005/06/30(木) 23:52:50
>>593
>>585の最後から2行目をよく読め
595591:2005/06/30(木) 23:53:42
すまん、>>591>>585に対する回答だ。
596デフォルトの名無しさん:2005/06/30(木) 23:55:19
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
FILE *fp;
char eng[100], *p;
int count = 0;
if (3 != argc) {
printf("引数が多すぎます\n");
return 0;
}
fp = fopen(argv[1], "r");
if (NULL == fp) {
printf("ファイルオープンに失敗しました\n");
return 0;
}
for (;;) {
if (NULL == fgets(eng, 100, fp)) {
break;
}
}
for (p = eng; p = strstr(p, argv[2]); p += strlen(argv[2])) {
count++;
}
printf("%sは%sの中に%d個あります\n",argv[2],argv[1], count);
fclose(fp);
}
んじゃこうかな?
文字検索んとこが微妙かも
597デフォルトの名無しさん:2005/07/01(金) 00:00:10
100文字以上の行があったばあいに、行またがりの文字列を
検索できないな。
598デフォルトの名無しさん:2005/07/01(金) 00:05:23
>>591
それだと "ababc" から "abc" が探索できなくないか?
599デフォルトの名無しさん:2005/07/01(金) 00:07:54
文字列S1中の任意の文字に等しい文字をS1から除去するような形のsqueeze
(s1,s2)を書け。
600デフォルトの名無しさん:2005/07/01(金) 00:16:39
>>598
そのとおりですた

>>585
つうわけで、修正版
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/639.txt
601デフォルトの名無しさん:2005/07/01(金) 00:18:10
>>600
こうやりゃいいのかw
俺の奴まじうんこだなww
602584:2005/07/01(金) 00:31:22
>>590
お答えいただきありがとうございます。
>a=(1.0e-8, 0, 0), b=(0, 0, 0) のときは a == b だが、
>a=(0, 0, 0), b=(1.0e-8, 0, 0) のときは a != b となる。
両方とも成り立たせるためにはどのようにすればよろしいのでしょうか・・・
603デフォルトの名無しさん:2005/07/01(金) 00:34:19
>>602
問題文に答えが書いてあるじゃないか。
DBL_EPSILONでぐぐれ。
604584:2005/07/01(金) 01:19:39
>>603
できました!ありがとうございました!
605デフォルトの名無しさん:2005/07/01(金) 01:27:05
>>589
アルゴリズムが提示されれば何とかなるかもしれませんね。
606デフォルトの名無しさん:2005/07/01(金) 01:35:24
[1] 授業単元: ファイル処理
[2] 問題文(含コード&リンク):きーぼーどからファイルを読み込んで、そのファイルをオープンするプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Borland c
 [3.3] 言語:C
[4] 期限:本日10時まで
宿題でいきなりつまずいてしまったのでよろしくお願いします。
fopenを使うのでしょうか?
607デフォルトの名無しさん:2005/07/01(金) 01:41:51
>>606
データの中身はドン何?
608デフォルトの名無しさん:2005/07/01(金) 01:43:13
>>606

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

int main()
{
    FILE *_, __;
    char ___[8192];
    char *____;
    
    _ = fopen("CON", "r");
    if (!fgets(___, sizeof ___, _))
        return 1;

    if (____ = strchr(___, '\n'))
        *____ = 0;
    fclose(_);
    if (!(__ = fopen(___, "a+"))) {
        perror(___);
        return 2;
    }
    fclose(__);
    return 0;
}
609デフォルトの名無しさん:2005/07/01(金) 01:45:53
ファイルから1文字ずつ読んで指定したファイルに出力する練習をしています。
// iotest.cpp
// ファイル入出力練習
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
main()
{
 ifstream fileReader("source.txt", ios::in);
 ofstream fileWriter("copy.txt", ios::out);
 if (!fileReader) {
  cerr << "ファイルをオープンできません\n";
  exit(1); // stdlib.hの中にプロトタイプがある
 }
 if (!fileWriter) {
  cerr << "ファイルをオープンできません\n";
  exit(1); // stdlib.hの中にプロトタイプがある
 }
 char c = 0;
 while (fileReader && !fileReader.eof() ) {
  fileReader.read( static_cast< char >(c), sizeof(char) );
  cout << c << ' ';
  fileWriter << c << ' ';
 }
 return 0;
}
readとかgetとかいろいろ試したのですがどうしてもうまくいきません。
間違いの指摘をお願いしますm(_ _)m
610デフォルトの名無しさん:2005/07/01(金) 01:54:47
>>609
もっと新しい教科書で勉強することを進める。
iostream.hはふるい。

  char c;
  while (fileReader.get(c)) {
    fileWriter << c << ' ';
  }

とかでどうよ。
611デフォルトの名無しさん:2005/07/01(金) 02:00:16
>>610
教科書はかなり古いのを使っています。
いい教科書を探したのですがなかなか決まらなくて・・・
 
それだと無限ループにはまってしまいました。
しかも書き込みもうまく行われていないようです。
612589:2005/07/01(金) 02:01:16
>>605
アルゴリズムです。

@,k++
A行列Aの最大固有値λkと固有ベクトルxkをべき乗法により求める。
BA  <-  A - λk * xk * (xkの転置)
Cif  k<n  then  goto  step@  else 終了

らしいです。
べき乗法についてはすでにできてるのでろだにあげときました。うrlした
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/640.txt

お願いします。
613デフォルトの名無しさん:2005/07/01(金) 02:04:39
なるほど、ifstream::get()が何も返さないのね
コンパイラはどんなの使ってるの。
614584:2005/07/01(金) 02:04:47
できたと思ったら勘違いでした・・・
どなたか教えていただけませんか?
引き続き自分でもやってみます・・・

ほんと自分ダメポ・・・
615デフォルトの名無しさん:2005/07/01(金) 02:06:49
>>609
#include <iostream>
#include <fstream>
// C++の標準ヘッダはもはや〜.hではない
int main()
//戻り値の型の省略はC++ではもはや許されていない
{
    std::ifstream fileReader("source.txt");
    std::ofstream fileWriter("copy.txt");
    // ifstreamやofstreamはデフォルト引数としてinやoutを渡すので不要
    if (!fileReader || !fileWriter) {
        std::cerr << "ファイルをオープンできません\n";
        return 1;
    }
    std::ifstream::int_type c = 0;
    // ifstream::get()はint_typeを返す
    while ((c = fileReader.get()) != std::ifstream::traits_type::eof()) {
        std::cout << std::ofstream::char_type(c) << ' ';
        fileWriter << std::ofstream::char_type(c) << ' ';
    }
    return 0;
}
616デフォルトの名無しさん:2005/07/01(金) 02:06:54
>>613
無料のボーランドのやつです。
まずかったでしょうか??
617デフォルトの名無しさん:2005/07/01(金) 02:13:39
>>615
なるほど!!確かに出来てます。
これだとだいぶjavaのFileReaderに近いので理解しやすいです。
stdというのをつけるのは作法なんでしょうか?
名前がかぶるわけなんかないと高をくくっているのですが・・・
618デフォルトの名無しさん:2005/07/01(金) 02:15:09
>>617
std::はnamespace
C++標準ライブラリはstd名前空間に包まれることになってます
619デフォルトの名無しさん:2005/07/01(金) 02:17:59
>>617
小さいプログラムを書いているうちは被らない事が殆どだろうから、
#includeの後にusing namespace std;と書いている人が結構多い。
620584:2005/07/01(金) 02:33:50
今度こそできました
スレ汚しすみませんでした
失礼します。
621606:2005/07/01(金) 02:41:12
>>607
データの中身はなくてなんかの問題集だと思うのですが。
いきなり問題が書いてあるので・・・
>>608
「_」はなにか適当な文字を入れればいいのでしょうか?
622デフォルトの名無しさん:2005/07/01(金) 02:45:38
>>621
>>608をコンパイルして実行してみるよろし。
まあ、_ではじまるシンボルは本当は処理系用に予約されていて
使っちゃいかんのだがな。
623デフォルトの名無しさん:2005/07/01(金) 02:52:54
[1] 授業単元:数値計算 
[2] 問題文(含コード&リンク): 
ビーラントの次数低下法を用いて次の行列式の固有値と固有ベクトルを求めよ。 

  4  3  1  -1  2 
    3  6  1  -2  3 
A=1  1  4  -3  1 
   -1 -2  -3  6 1 
    2  3  -1  1  4 
[3] 環境  
 [3.1] OS:Windows XP 
 [3.2] コンパイラ(バージョン): gcc(Cygwinの最新のやつ)  
 [3.3] 言語:C  
[4] 期限:明日朝9:00まで  
[5] その他の制限: 
ハードコーティングでいいのでお願いしますorz 
参考URL
http://www.flow.human.nagoya-u.ac.jp/~mine/edu/Chap4Rev.pdf
アルゴリズムです。 
@,k++ 
A行列Aの最大固有値λkと固有ベクトルxkをべき乗法により求める。 
BA  <-  A - λk * xk * (xkの転置) 
Cif  k<n  then  goto  step@  else 終了 

らしいです。 
べき乗法についてはすでにできてるのでろだにあげときました。うrlした 
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/640.txt 

お願いしますorz
624デフォルトの名無しさん:2005/07/01(金) 02:55:13
C++のmain関数への引数の与え方ってどうやるんですか??
int main(int argc, char *argv){
  std::cout << argc << ',' << argv << std::endl;
}
とすると,謎の文字列が表示されました。
625デフォルトの名無しさん:2005/07/01(金) 02:58:41
int main(int argc, char **argv)
{
  std::cout << argc;
  for (int i = 0; i < argc; ++i)
    std::cout << ',' << argv[i] ;
  std::cout << endl;
  return 0;
}
626デフォルトの名無しさん:2005/07/01(金) 03:23:50
627デフォルトの名無しさん:2005/07/01(金) 03:51:06
>>617
あ、それから。C++っぽく1文字ずつコピーするには、以下。
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>

int main()
{
    std::ifstream fileReader("source.txt");
    std::ofstream fileWriter("copy.txt");
    if (!fileReader || !fileWriter) {
        std::cerr << "ファイルをオープンできません\n";
        return 1;
    }
    std::copy(std::istream_iterator<char>(fileReader), std::istream_iterator<char>(), std::ostream_iterator<char>(fileWriter, " "));
    return 0;
}
628デフォルトの名無しさん:2005/07/01(金) 03:54:19
>>441の課題できたら誰かやってください。また、できたところ(部分部分)まででもいいのでアップしてくれたら幸いです。
629デフォルトの名無しさん:2005/07/01(金) 04:24:30
>>627
ご親切にありがとさんです。
 
今はmain関数の引数の使い方が分からずに困っております( ; ° °)
つまり上のプログラムのsource.txtの部分を指定できないかってことです。
630デフォルトの名無しさん:2005/07/01(金) 05:13:52
ほい
int main(int argc,char *argv[])
{
if(argc!=3)
cout << "usage: " << argv[0] << "source.txt dest.txt" << endl;

cout << ":" << argv[1] << " -> " << argv[2] << endl;
std::ifstream fileReader(argv[1]);
std::ofstream fileWriter(argv[2]);
}
631デフォルトの名無しさん:2005/07/01(金) 05:17:48
if(argc!=3) {
cerr << "usage: " << argv[0] << "source.txt dest.txt" << endl;
exit(1);
}
632デフォルトの名無しさん:2005/07/01(金) 06:30:44
@string型をint型にキャストするにはどーすればいいんですか??
 StrToIntとかToIntという関数があるようですが,
 これでは駄目なようで困っています.
Aファイルから1行を切り出すにはどうすればいいんですか??
 40文字ずつ改行しながら別のファイルに出力させていくという
 プログラムを作りたいのですが,
   char *c;
   fileReader.get(c, number, '\n');
 のようにしてnumberが21くらいになるとメモリがreadにならないという
 エラーメッセージが出てきます.どうしてでしょうか??
633632:2005/07/01(金) 06:52:50
誰か答えてよ
もしかしてわからないの?
634デフォルトの名無しさん:2005/07/01(金) 07:03:10
>>632
ここは宿題スレです。言語スレへ逝ってください。
635デフォルトの名無しさん:2005/07/01(金) 07:16:35
プログラム超初心者のオレが答えてやるぜ、たぶん間違ってるけど
#include <iostream>
#include <string>
using namespace std;
int main(){ int num; char str[256]; string s ("123"); strcpy(d, s.c_str()); num = atoi(d); printf("%d\n", num); return 0; }
636デフォルトの名無しさん:2005/07/01(金) 09:09:48
[1] 授業単元:プログラミング演習I
[2] 問題文:
実数の値xおよびa,pを与えると、

f(x,a,p) = exp(-x*x/(2.0*a*a))*cos(3.14*x+p)

を返す関数を作成しなさい。
この関数を用いてxを-3.14から3.14まで0.01きざみで変化させたときのプログラムを作成しなさい。
ただしパラメータa,pは適当にあたえてもよいものとする。例a=0.6,p=0.0など

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:7/5まで
[5] その他の制限:関数の扱いまで習いました。

どなたかご教授お願いします。
637デフォルトの名無しさん:2005/07/01(金) 12:23:21
#include <stdio.h>
#include <math.h>

double func(const double &a, const double &p, const double &x) {
  return (exp(-x*x/(2.0*a*a))*cos(3.14*x+p));
}
int main() {
  double a, p, x = -3.14;
  scanf("%lf %lf", &a, &p);
  while(x <= 3.14) {
    printf("x = %.2f : %f\n", x, func(a, p, x));
    x += 0.01;
  }
  return 0;
}
638デフォルトの名無しさん:2005/07/01(金) 12:33:34
639デフォルトの名無しさん:2005/07/01(金) 13:48:04
#include <stdio.h>
#include <math.h>

double f(double x, double a, double p)
{
  return exp(-x*x/(2.0*a*a))*cos(3.14*x+p);
}

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

  if (argc != 3) {
    printf("usage: %s a p\n", argv[0]);
    return 0;
  }
  a = atof(argv[1]);
  p = atof(argv[1]);
  for (i = -314; i <= 314; i++) {
    printf("% 5.2f %f\n", i / 100.0, f(i / 100.0, a, p));
  }
  return 0;
}
640636:2005/07/01(金) 15:35:54
>>637 638 639
ありがとうございました。おかげで完成できました。
641デフォルトの名無しさん:2005/07/01(金) 15:40:27
[1] 授業単元:課題研究
[2] 問題文:
ゲーム理論の2人ゼロSUMゲームのNash均衡を求めるプログラム
2*2の正方行列で均衡点を求めたいんですが
  C   D
A(5,5)(0,8)
B(8,0)(2,2)の行列です。
均衡点は(2,2)です。パレート最適は(5,5)です。

アルゴリズムは
使用する変数の宣言

利得行列をデータで与える。

p1_max[i],pi[j]を計算する
p2_max[i],pj[i]を計算する

Nash均衡の判定

i=pi[j]   →No
↓Yes
j=pj[i]   →No
↓Yes
(i,j)はNash均衡としPrintする。

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C++
[4] 期限:7/5まで
642 ◆Ydql2T7Ny. :2005/07/01(金) 17:24:22
643デフォルトの名無しさん:2005/07/01(金) 18:52:09
[1]課題プロジェクト
[2]最初に入力したものから現在入力したものまでの平均値を求め(リアルタイム処理という、
すなわち最後のデータを待たずに新たに
入ってくるデータがあれば処理を行なう)、
表示するプログラムを作成しなさい。
平均値を求める関数 float avg(int データ番号 n, float 入力データ , float (n-1)
までの平均値) を作成し、利用すること。
数値の入力や結果の表示は実行例を参考に mainで行なうこととし、
入力された値が0の時、終了するものとします。
[3]環境
1OS windows xp
2 gcc
3 c言語で、初歩のほうなので、分かりやすくおねがいします。
[4]土曜日のごご六時ごろまでです。
644デフォルトの名無しさん:2005/07/01(金) 18:59:55
{1}プログラミング演習
{2}10進数の0〜255を8ビットの符号なし2進数で表示するプログラムを作成せよ。
なお。10進数を2進数へ変換し、表示する関数void d2b(int i) を作成し、
それをmainから呼んで実行しなさい。
{3}環境
{3,1}os ユニックス
{3,2}gcc
{3,3}C言語です。
{4}月曜日までです。よろしくお願いします。
645デフォルトの名無しさん:2005/07/01(金) 19:16:41
void d2b(int i)
{
  static int x = 8;
  if (x == 0) {
    x = 8;
    return;
  }

  x--;
  d2b(i>>1);
  putchar((i & 1) + '0');
}
646デフォルトの名無しさん:2005/07/01(金) 19:25:51
[1] プログラミング基礎
[2] 文字列str内の全ての数字文字を削除する関数を、添字演算子を用いずに作成せよ。
[3] 環境 
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] C 
[4] 期限:月曜日まで
[初心者なんですが
647デフォルトの名無しさん:2005/07/01(金) 19:31:34
>>644
#include <stdio.h>

void d2b(int i);

int main(void)
{
unsigned int i;

for(i = 0; i < 256; i++) {
printf("10進数 %3d 2進数 ");
d2b(i);

}
}

void d2b(int i)
{
int j;
for (j = 8; j >= 0; j--){
printf("%u", (i>>j) & 0x0001);
}
printf("\n");
}
648デフォルトの名無しさん:2005/07/01(金) 19:39:33
>>646
#include <stdio.h>
#include <ctype.h>

void func(char *src, char *dest) {
    while(*src != '\0') {
        if(isdigit(*src) == 0) {
            *dest = *src;
            dest++;
        }
        src++;
    }
    *dest = '\0';
}

int main() 
{
    char str[256], str2[256];
    scanf("%s", str);

    func(str, str2);
    
    puts(str2);

    return 0;
}
649デフォルトの名無しさん:2005/07/01(金) 19:48:40
>>646
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char *remove_digit(char *str)
{
  char *p, *q;
  for(p = q = str; *p; ++p)
    if( ! isdigit(*p) ) *q++ = *p;
  *q ='\0';
  return str;
}

int main()
{
  char buf[256];
  while(1)
  {
    char *p;
    if( p = strchr(fgets(buf, sizeof(buf), stdin), '\n') ) *p = '\0';
    puts(remove_digit(buf));
  }
  return 0;
}
650デフォルトの名無しさん:2005/07/01(金) 19:49:47
引数NULLのときのガードわすれた。
651デフォルトの名無しさん:2005/07/01(金) 19:54:06
じゃあ俺が代わりに。

void del_digit(char * str)
{
  char *p_dest = str;
  char *p_src = str;

  while (p_dest && *p_dest) {
    if (!isdigit(*p_src)) {
      *p_dest++ = *p_src;
    }
    p_src++;
  }
}
652デフォルトの名無しさん:2005/07/01(金) 19:57:04
まちがえた。
653649:2005/07/01(金) 19:57:59
>>651
ループ毎のチェックでNULLチェックは冗長じゃね?

#include <ctype.h>
char *remove_digit(char *str)
{
  if( str )
  {
    char *p, *q;
    for(p = q = str; *p; ++p)
      if( ! isdigit(*p) ) *q++ = *p;
    *q ='\0';
  }
  return str;
}
654デフォルトの名無しさん:2005/07/01(金) 20:01:38
> 引数NULLのときのガードわすれた。
このスレでの回答にそんまもの必要ないと思われ。
問題文に書いてない限りは。
655デフォルトの名無しさん:2005/07/01(金) 20:06:57
cのGUIプログラムでcgi-binディレクトリ以下に置いてます

これを拡張子を.cgiにせずに.cのままで
webにだしたいのですがコンパイル後、webでみても
エラーがでて上手く表示されません。
拡張子.cgiのままなら見れます。
問題があるとしたら以下のプログラムなのですが
どこか不都合な部分はあるでしょうか・・・・
ご指摘お願いします
***********hello.c****************
#include <stdio.h>

int main(void){
printf("Content-type: text/html\n\n");


printf("<HTML>\n");
printf("<HEAD>\n");
printf("<META http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">\n");
printf("<TITLE>Sample CGI output</TITLE>\n");
printf("</HEAD>\n");
printf("<BODY>\n");
printf("<H3>\n");
printf("Hello World\n");
printf("</H3>\n");
printf("</BODY>\n");
printf("</HTML>\n");;
return 0;
}
656デフォルトの名無しさん:2005/07/01(金) 20:09:48
GUIじゃなくてCGIだろ?
あと、CのCGIは、コンパイルしなきゃ動かないと思うんだけど。


もしかして、実行時にmakeしてくれるCGI環境tかあるの?
657デフォルトの名無しさん:2005/07/01(金) 20:12:47
>>655
エラー内容の類はカキコ必須な。
なんで.cのままやりたいのか、理由もききたい。
.htaccessで出来るかもしれんが。
658デフォルトの名無しさん:2005/07/01(金) 20:15:13
>>655
反射的にカキコんじまったが、それ宿題なのか?
それと>>1 の
 「質問は必ず【質問テンプレ】に従ってください。」
ってのをポストイットに書いて貼っとけ。
659デフォルトの名無しさん:2005/07/01(金) 20:24:38
[1] プログラミング言語
[2] 区間[a, b]において連続な任意の関数 F(x) の x−軸と F(x)
及び x=a,x=b で囲まれた部分の面積を求めよ。
また,F(x) をX−軸の周りに回転して得られる立体の体積を求める。
ただしa,b,εの値はキーボードから読み込みf(x)はサブ関数で定義する。
[3] 環境
 [3.1] OS:Windows
 [3.2] cpp
 [3.3] C
[4] 期限:月曜日まで
[5]初心者です。シンプソン法則を用いる
660デフォルトの名無しさん:2005/07/01(金) 20:31:58
>>659
g’(x)= F(x) となるg(x)を教えて
661デフォルトの名無しさん:2005/07/01(金) 20:44:05
659ですがはじめての依頼なんでどういうふうに説明したらいいかわからな
かったため長くなってしまいましたがすいません。
なぜかFortranの形式で参考を先生が紹介するのでFortranの方を
UPしておきます。
自分は全然わからないのですが
http://nur.ath.cx/no0/25/の25543ファイルです
662デフォルトの名無しさん:2005/07/01(金) 20:45:38
[1] 授業単元:ポインタ
[2] 問題文(含コード&リンク):
 コード番号に対応した文字列(例えば、1にミルク、2にコーヒー……)を10個作成し、
任意のコード番号を入力すると対応した文字列を出力するプログラムを作成せよ。
(例えば、1と入力するとミルク、2と入力するとコーヒー……と出力される)
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年7月4日まで
663ホームページ プロダクション:2005/07/01(金) 20:47:08
毎日がいそがしい。作り方が分からない。だけどホームページを作りたいというアナタ!当社が高品質でホームページをお作りいたします。
弊社は出来て間もないのではじめに5人という限定で無料ホームページをお作り致します。こちら→http://www16.plala.or.jp/mercigackt/
664デフォルトの名無しさん:2005/07/01(金) 20:49:31
[1] プログラミング
[2] >>655
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:?
[5] その他の制限:?

>>657
>>658
すまそ・・・・・・・

例題としてシェルのタイプのやつがあって(中身同じ)
それをc言語でも出来るようにしろって問題です
.cgiだとそれにそぐわないと思ったから
665デフォルトの名無しさん:2005/07/01(金) 20:50:28
660番さんありがとうございます。
4.0 / (1 + x * x)でお願いします。
666デフォルトの名無しさん:2005/07/01(金) 20:55:13
>>664
シェルやPerlのようなインタプリタのスクリプトなら、実行権限ビット
立てとけばそのまま実行できる
Cプログラムの場合はコンパイルしないと実行できない

基本中の基本です
667デフォルトの名無しさん:2005/07/01(金) 21:23:16
>>662
#include <stdio.h>
const char *list[] = {
  "混世魔王・樊瑞", "激動たるカワラザキ",
  "衝撃のアルベルト", "眩惑のセルバンテス",
  "暮れなずむ幽鬼",  "命の鐘の十\常寺",
  "マスク・ザ・レッド", "直系の怒鬼",
  "白昼の残月", "素晴らしきヒィッツカラルド",
};
int main()
{
  int code;
  printf("コード入力[1-10] > ");
  scanf("%d",&code);
  if( code > 0 && code <=10 )
    puts(list[code-1]);
  else
    puts("input error");
  return 0;
}
668デフォルトの名無しさん:2005/07/01(金) 21:24:38
>>666
勉強になりますた
669デフォルトの名無しさん:2005/07/01(金) 21:33:40
>>648>>649
ありがとうございました。
670デフォルトの名無しさん:2005/07/01(金) 21:36:40
>>666
Cインタプリタも探せばあるんじゃまいか?
671デフォルトの名無しさん:2005/07/01(金) 21:38:15
探さんでよろし
672デフォルトの名無しさん:2005/07/01(金) 21:38:58
CINTのことか
673デフォルトの名無しさん:2005/07/01(金) 21:40:31
ヽ(`Д´)ノウワァァン!!
674502 ◆Avm1fqtITk :2005/07/01(金) 21:52:40
>>642
遅くなってすいません。こちらによろしくです。
[email protected]
675デフォルトの名無しさん:2005/07/01(金) 22:26:29
http://pc8.2ch.net/test/read.cgi/tech/1119514274/659ですが
また,F(x) をX−軸の周りに回転して得られる立体の体積を求める前までは
やってみたのですがうまくできません。
最後のif(fabs(Snew - Sold) < Eps)で条件があわなければ
Sold=Snewに戻る分岐にしたいのですがよくわからなくて
一応途中まで作成したものを
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/644.txt
676デフォルトの名無しさん:2005/07/01(金) 22:29:34
>>675
何がどうなることを期待していて、
実際はどう違っているのか答えよ。

期限 1時間後
677 ◆Ydql2T7Ny. :2005/07/01(金) 22:30:43
>>674
偽者防止策でトリ付けた。どうやら対価分の価値があったようでなにより。
金銭の授受は面倒なんで辞退します。どうしてもというなら
ttp://www.gentoo.org/foundation/en/
Make a Donateへ寄付してくれ。
デバッグもコンパイラもGentoo上でやったしな。
678デフォルトの名無しさん:2005/07/01(金) 22:32:20
ラベルと変数名って被っても平気なんだ。
しらんかった。
679677:2005/07/01(金) 22:32:37
Make a Donate → Make a Donation
680デフォルトの名無しさん:2005/07/01(金) 22:56:41
>>667
勉強になりますた
681659:2005/07/01(金) 22:59:59
正直実際どう違ってるのかがわからなくて・・・
コンパイルしようとすると
Tmp関数に代入した値が使われていない。
宣言が正しく終了していないとでます。
どれを削除して何を追加すればいいのかもわからないのが現状です。
先ほどのファイルのアドが間違っていたのでもう一度
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/645.txt
682デフォルトの名無しさん:2005/07/01(金) 23:03:15
>>681
そういうときはこういいましょう。

「コンパイルが通りません」


そして、速やかに、エラーメッセージを貼り付ける。
683デフォルトの名無しさん:2005/07/01(金) 23:09:12
>>681
> Tmp関数に代入した値が使われていない
これはワーニングであってエラーじゃないな。無視可能。
> 宣言が正しく終了していない

こっちは問題だが、main()関数の外にreturn 0;があったりするのは
まずいんじゃないのかなあ。たぶん。

変数名と同じGOTOラベルがいいのかどうかはよくわがんねけど、
まあ普通はやらないな
684デフォルトの名無しさん:2005/07/01(金) 23:14:35
>>678
名前空間が違うのでおk
他には構造体や列挙体もかぶっておk
685デフォルトの名無しさん:2005/07/01(金) 23:31:52
線形論理の古典論理のLKの推論の∨(または)右

Γ→凵AC/Γ→凵AC∨D

および

Γ→凵AD/Γ→凵AC∨D

となるプログラムをCで表してほしいです。
686デフォルトの名無しさん:2005/07/01(金) 23:38:22
独り言はチラシの裏へ。
687デフォルトの名無しさん:2005/07/01(金) 23:41:27
>>685
こういうレスをみると(°Д°)ハァ?ってなる。
688502 ◆Avm1fqtITk :2005/07/01(金) 23:58:21
>>677
プログラムありがとうございました。
本当にいいんでしょうか?口座番号さえ分かれば数分でできますよ。
気が変わればメールして下さい。
そのURL先の振込みはややこしそうです。CCカードが必要みたいですし。
代替としてコンビニの募金箱に3千円寄付しときますで、それで。
w
689デフォルトの名無しさん:2005/07/02(土) 00:00:13
>>502
好い加減、ドン引きされてるのを理解しろよ
善意の人間に金の話を持ち出すのは失礼になることだってあるんだぜ
690デフォルトの名無しさん:2005/07/02(土) 00:22:57
>>689
こういうやつ結構知ってるからそんなに引かないww

はやく宿題投下キボンヌ
691デフォルトの名無しさん :2005/07/02(土) 00:41:46
[1] 授業単元:言語処理
[2] 問題文(含コード&リンク):
年月日を表示、変換するプログラムを作る。
XXXX年XX月XX日(例えば、2004年7月2日など)を標準の形式として表示し、
下記のいずれの形式が入力されてもこの形式に変換されるプログラムを作成せよ。
2004-7-2
7/2/2004
Jul./2/2004
2/Jul./2004
2/Jul/2004
2004nen 7gatsu 2nichi
2004 7 2
2004 fumizuki 2
また、存在しない日付(例えば2004年2月30日など)はエラーとする。

[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:7月15日15時まで

よろしくお願いします。
692デフォルトの名無しさん:2005/07/02(土) 01:02:35
オイオイ、まだ2週間もあんだろ。
試みてもいない感じだね。
何時までに回答レスが付かなかったら自分でやるの?
693デフォルトの名無しさん:2005/07/02(土) 01:09:11
[1]C言語演習
[2]Gccコンパイラ
[3]期限 7月6日水
[4]RedHat

問題
メニュー表示をし,ステップ「1」として,関数y = 2x2において,x = 0 – 10 ま
でを0.01 刻みで1001 個のx,yデータセットを作成して,ファイル名function.datで各自のホ
ームディレクトリ(または,カレントディレクトリ)にバイナリ形式で保存する.ステ
ップ「2」として,作成したfunction.datからn個目のx,yデータセットを抽出して,ファイ
ル名n_xy_ascii.dat(nは入力した数字)としてASCII形式で保存する.以上の様に動作す
るプログラムを作成しなさい

よろしくお願いします
694デフォルトの名無しさん:2005/07/02(土) 01:13:03
いったん、バッファに貯めてから、
sscanf(buf, "%d年%d月%日", &y, &m, &d);
ってなことかな・・・。
文字列が可変のところは%3sとか%20[abc...xyz]とかしたあと、ただしいつづりかチェックってかたちかな?
sscanf以外の解法はメンドイ気もする。
695デフォルトの名無しさん:2005/07/02(土) 01:14:18
間違えました。
7月5日15時まででした。
これをCで作った後にlexとyaccでも作らないといけないんで結構必死です。
696デフォルトの名無しさん:2005/07/02(土) 01:15:05
lex使うのかなぁ
とは俺も思ったけどやっぱそうだったのか。
697デフォルトの名無しさん:2005/07/02(土) 01:23:24
sscanf以外なら、状態遷移。
lexで作る時遷移図書くんなら、まずそれを作ってからだな。
つーか、この問題の意味するところは「状態遷移マンセーだぽ」って思えるんだが。
698デフォルトの名無しさん:2005/07/02(土) 01:26:06
C言語で作って→lex,yaccか・・・メンドイな・・・。
C言語、まず、トークナイザつくらんとダメぽ?
再帰下降型しかノーミソに入ってませんが。
699デフォルトの名無しさん:2005/07/02(土) 01:29:05
力技でも出来そうだけど、
日月 年

年月 日
の判別がめんどくさそう。
700デフォルトの名無しさん:2005/07/02(土) 01:29:18
セパレータ '-'(ハイフン) '/'(スラッシュ) ' '(スペース) の3種で3つにわけてあとはゴリ押し
701699:2005/07/02(土) 01:44:39
とおもったが、出題のサポート形式だと、/ セパレートのときが日/月/年 と決まってるんだな。
コレなら、まぁ楽か。
702デフォルトの名無しさん:2005/07/02(土) 01:48:19
int get_token(FILE *fp, char *s, int size)
{
  int c;
  do { c = getc(fp); } while (isspace(c));
  switch (c) {
  case EOF:
    return 0;
  case '-': case '/': case '.':
    return c;
  defualt:
    ungetc(c, fp);
    if (isdigit(c)) return get_token_number(fp, s, size);
    return get_token_stringfp, s, size);
  }
  return 0; /* ここにくることはないが、一応 */
}
すまん、力尽きた。
703デフォルトの名無しさん:2005/07/02(土) 02:11:33
#include <stdio.h>

void d2b(int i);

int main(void)
{
unsigned int i;

for(i = 0; i < 256; i++) {
printf("10進数 %3d 2進数 ");
d2b(i);

}
}

void d2b(int i)
{
int j;
for (j = 8; j >= 0; j--){
printf("%u", (i>>j) & 0x0001);
}
printf("\n");
}


これを配列を使ってできませんか?よろしく、おねがいします。
704デフォルトの名無しさん:2005/07/02(土) 02:14:54
char *array[256] = {
  "00000000", "00000001", /* ... */ "11111111"
};

/* #include 〜 mainの終わりまでそのまんま */

void d2b(int i)
{
return array[i % 256];
}
705691:2005/07/02(土) 02:25:52
sscanfも状態遷移も苦手だという罠・・・。
とりあえずトンクスです。
ヒントを頼りにやってみます。
706デフォルトの名無しさん:2005/07/02(土) 02:34:36
>>>704
char*arrayを使わないで、できませんか?
707デフォルトの名無しさん:2005/07/02(土) 02:35:59
釣られた漏れ...orz
708デフォルトの名無しさん:2005/07/02(土) 02:52:13
>>707
あなたはだぁれ?
709デフォルトの名無しさん:2005/07/02(土) 05:19:30
線形論理の古典論理のLKの推論の∨(または)右

Γ→凵AC/Γ→凵AC∨D

および

Γ→凵AD/Γ→凵AC∨D

となるプログラムをC言語で表してほしいです。
710デフォルトの名無しさん:2005/07/02(土) 05:31:05
>>709
数学のことがわからんので、その理論のことを書いてあるURLをおせーてね。
711デフォルトの名無しさん:2005/07/02(土) 06:32:18
712397:2005/07/02(土) 07:05:14
397です。
407氏が課題の後半部分を作ってくださったので
前半は自分でやってみたのですが、間に合いそうにないです。。
残り時間も僅かなのですが、
もしよろしければ、どなたか教えていただけないでしょうか。
713デフォルトの名無しさん:2005/07/02(土) 09:32:48
[1] 授業単元:プログラミング
[2] 問題文:
int型の配列にキーボードから整数を読み込んでいくときに、
常に配列の中が小さい順に保たれるようにしたい。
新しい要素を適切な位置に挿入しながら読み込むプログラムを
作成してください。
[3] 環境
 [3.1] OS:Windouws xp
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:7/7まで

よろしくお願いします。
714デフォルトの名無しさん:2005/07/02(土) 09:36:13
>>713
お前ならできる!
715デフォルトの名無しさん:2005/07/02(土) 10:22:45
716デフォルトの名無しさん:2005/07/02(土) 10:44:04
ソースファイルを解析して、ある単位単位ごとに語句を取り出すのは簡単ですか?
717デフォルトの名無しさん:2005/07/02(土) 11:08:25
>>712
>>407さんのを勝手に改造しました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/647.txt

>>716
スレチガイ以前に”ある単位単位ごとに”ってのが意味不明
718デフォルトの名無しさん:2005/07/02(土) 13:00:59
1] 授業単元: プログラム
[2] 問題文 二進数を入力して十進数に変換せよ。ただし配列は使わない。
[3] 環境
 [3.1] OS:Windows/Linux/どちらでも可
 [3.2] コンパイラ(バージョン):gcc
 [3.3] どちらでも可
[4] 期限:7月4日
[5] その他の制限:配列はNG。for,while,do-while,ifの中で。

どうかお願いします。
719397:2005/07/02(土) 13:26:35
>>717
ありがとうございます!
無事提出することができそうです。
>>407>>717さん お世話になりましたm(__)m
720デフォルトの名無しさん:2005/07/02(土) 13:38:43
[1] 授業単元:課題研究
[2] 問題文:
ゲーム理論の2人ゼロSUMゲームのNash均衡を求めるプログラム
2*2の正方行列で均衡点を求めたいんですが
  C   D
A(5,5)(0,8)
B(8,0)(2,2)の行列です。
均衡点は(2,2)です。パレート最適は(5,5)です。

アルゴリズムは
使用する変数の宣言

利得行列をデータで与える。

p1_max[i],pi[j]を計算する
p2_max[i],pj[i]を計算する

Nash均衡の判定

i=pi[j]   →No
↓Yes
j=pj[i]   →No
↓Yes
(i,j)はNash均衡としPrintする。

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C++
[4] 期限:7/5まで

721デフォルトの名無しさん:2005/07/02(土) 17:49:10
>>718
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  char *s = malloc(32);
  int v;

  fgets(s, 32, stdin);
  v = strtol(s, NULL, 2);
  printf("%d\n", v);

  free(s);

  return 0;
}
722デフォルトの名無しさん:2005/07/02(土) 17:57:25
>>721
無意味な動的メモリ確保も然り乍ら、31ビット入力という中途半端さは一体なんなんだろう。
723デフォルトの名無しさん:2005/07/02(土) 18:00:18
>>722
配列を使わないっていう制約だからじゃねーの?
724デフォルトの名無しさん:2005/07/02(土) 18:23:01
for, while, ifの中でとかいう制約もあるようだがな。

こんなもんでどうよ。

#include <stdio.h>
int main()
{
 int n = 0, c;
 while ((c = getchar()) != EOF && c == '0' || c == '1') {
  n <<= 1; n |= (c - '0');
 }
 printf("%d\n", n);
 return 0;
}
725デフォルトの名無しさん:2005/07/02(土) 18:31:03
>>724
あ、whileの条件式間違ってる

while ((c = getchar()) != EOF && (c == '0' || c == '1'))

にしてくれや
726デフォルトの名無しさん:2005/07/02(土) 18:34:48
>>718
#include <stdio.h>
#include <stdlib.h>
#define LF 0x0a
int main( void )
{
unsigned long int num, inp;
printf( "input binary digit " );
num =0;
while( LF != (inp = getchar() )) {
num <<= 1;
if( '1' == inp ){
num |= 1;
}
else if( '0' == inp ){
}
else{
fprintf( stderr, "input error!\n" );
return 1;
}
}
printf( "%d\n", num );
return 0;
}
727718:2005/07/02(土) 18:48:12
>>721
>>724
有り難うございました!!
728デフォルトの名無しさん:2005/07/02(土) 19:30:17
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):長さ100の配列にランダムな文字('a'-'z' or 'A'-'Z' or '0'-'9')を格納し、
何か1文字を入力し、入力された文字がいくつ格納されているか表示しなさい

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):VS .net2003
 [3.3] 言語:C
[4] 期限:7月3日まで
[5] その他の制限:特に無し・・・のはず

おねがいします。ランダム文字がわかりませんorz
729デフォルトの名無しさん:2005/07/02(土) 19:49:03
>>728 ごり押しだがこんな感じ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define S "abcdefghijklmnopqrstuvwxyz" \
          "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
          "0123456789"
int main(void) {
    const char * s = S;
    const size_t len = sizeof(S)-1;
    char a[100];
    int i, c, n = 0;
    srand((unsigned int)time(0));
    for (i = 0; i < 100; ++i) a[i] = s[rand()%len];
    if ((c = getchar()) == EOF) return 1;
    for (i = 0; i < 100; ++i) if (a[i] == c) ++n;
    printf("%c は %d個\n", (char)c, n);
    return 0;
}
730>>728:2005/07/02(土) 19:58:43
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
char ch,buff[64]={'\0'},dim[100];
int i = 0,counter = 0;
srand(time(NULL));
for(ch = 'a';ch <= 'z';ch++,i++) buff[i] = ch;
for(ch = 'A';ch <= 'Z';ch++,i++) buff[i] = ch;
for(ch = '0';ch <= '9';ch++,i++) buff[i] = ch;
const size_t length = strlen(buff) + 1;
for(i=0;i<100;i++) dim[i] = buff[rand() % length];
printf("検索する文字を入力してくれ(a-z A-Z 0-9):");
ch = getchar();
printf("dim[100] = ");
for(i=0;i<100;i++){
printf("%c",dim[i]);
if(dim[i] == ch) counter++;
}
printf("\ndim[100]から%cを%d個検索した\n",ch,counter);
return 0;
}
731730 訂正:2005/07/02(土) 20:02:46
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
char ch,buff[64]={'\0'},dim[100];
int i = 0,counter = 0;
srand(time(NULL));
for(ch = 'a';ch <= 'z';ch++) buff[i++] = ch;
for(ch = 'A';ch <= 'Z';ch++) buff[i++] = ch;
for(ch = '0';ch <= '9';ch++) buff[i++] = ch;
const size_t length = strlen(buff) + 1;
for(i=0;i<100;i++) dim[i] = buff[rand() % length];
printf("検索する文字を入力してくれ(a-z A-Z 0-9):");
ch = getchar();
printf("dim[100] = ");
for(i=0;i<100;i++){
printf("%c",dim[i]);
if(dim[i] == ch) counter++;
}
printf("\ndim[100]から%cを%d個検索した\n",ch,counter);
return 0;
}
732デフォルトの名無しさん:2005/07/02(土) 20:08:06
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):

ABCの3つの文字が
AAAAAAAAAAAAAABBBBBBBBBBBCCCCCCCCCCCCCCCC
のように順に並んでいます。

この列のなかから、最初のA(は分かりますが)と最後のA
同様に、最初のBと最後のB
最初のCと最後のCが配列の何番目にあるかを
二分検索を応用して与えなさいというのです。

二分検索は分かるのですが・・・。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):BorlandC無料のです。
 [3.3] 言語:C
[4] 期限:2005年07月04日まで
[5] その他の制限:
一通り、C言語は文法は習いました。
733730:2005/07/02(土) 20:09:09
まだ間違えてた
const size_t length = strlen(buff) + 1;

const size_t length = strlen(buff);
734デフォルトの名無しさん:2005/07/02(土) 20:09:39
>>729,730-731
ありがとうございました
735デフォルトの名無しさん:2005/07/02(土) 20:44:23
[1] 授業単元:情報処理1
[2] 問題文:glutとC言語により、樹木曲線を表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Borland C++ 5.5.1
 [3.3] 言語:C
[4] 期限:2005年7月4日10:00まで
[5] GLUTを使用

自分なりに考えてみたんですが、うまく表示されませんorz
tree関数のところで間違ってると思うんですが。
よろしくお願いします。
736735:2005/07/02(土) 20:45:09
#include <stdio.h>
#include <GL/glut.h>
#include <math.h>
#define PI 3.1415926535
#define RAD(c) ((PI * (c)) / 180.0)
#define rate 0.5 //主枝に対する分枝の長さ
#define turn 45.0 //分枝の角度

double x=0.0, y=0.0, angle=90.0, length=0.5;
int n;
void tree(int n, double length, double angle);

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3d(100.0, 0.0, 0.0);
glBegin(GL_LINE_STRIP);
tree(n, length, angle);
glEnd();
glFlush();
}
737735:2005/07/02(土) 20:46:35
#include <stdio.h>
#include <GL/glut.h>
#include <math.h>
#define PI 3.1415926535
#define RAD(c) ((PI * (c)) / 180.0)
#define rate 0.5 //主枝に対する分枝の長さ
#define turn 45.0 //分枝の角度

double x=0.0, y=0.0, angle=90.0, length=0.5;
int n;
void tree(int n, double length, double angle);

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3d(100.0, 0.0, 0.0);
glBegin(GL_LINE_STRIP);
tree(n, length, angle);
glEnd();
glFlush();
}
738735:2005/07/02(土) 20:48:15
つづき

void tree(int n, double length, double angle)
{
x=x+length*sin(RAD(angle)); // 枝の終点のx座標を計算
y=y+length*cos(RAD(angle)); // 枝の終点のy座標を計算
glVertex2d(x, y); //枝の表示
if (n>0){
tree(n-1, length*rate, angle-turn); //右部分枝の描画 (再帰呼び出し)
tree(n-1, length*rate, angle+turn); //左部分枝の描画 (再帰呼び出し)
}
}

int main(int argc, char *argv[])
{
printf("n="), scanf("%d",&n); //次数nの入力
glutInit(&argc, argv);
glutInitWindowSize(1200, 800);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
739デフォルトの名無しさん:2005/07/02(土) 20:59:00
740匿名:2005/07/02(土) 21:50:06
1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):30000までの素数をエラトステネスのふるいにより
求めよ。何番目の素数を求められるようにする。ex.3番目の素数は5。
素数を与えたときにそれが何番目の素数であるかを表示。
これを1つのプログラムにしなさい。という問題です。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++/
[4] 期限:2005年07月04日12:00まで または 無期限 のいずれか
[5] その他の制限:特にありません。
宜しくお願いします。
741デフォルトの名無しさん:2005/07/02(土) 22:14:18
[1] 授業単元: プログラミング
[2]素数かどうかを判定する関数isprimeを作成し、
2から1000までの素数を
10列の表として表示するプログラムを
作成しなさい
[3.1]OS WINDOWS
[3.2]gcc
[3.3]C言語
[4]月曜日までです。
よろしくお願いします。
[5]
742デフォルトの名無しさん:2005/07/02(土) 22:29:05
>>741
#include <stdio.h>

int isprime(int n) {
    int i;
    for (i = 2; i <= n / 2; i++) if (n % i == 0) return 0;
    return 1;
}

int main(void)
{
    int i, j;
    for (i = 2, j = 0; i <= 1000; i++)
        if (isprime(i)) {
            ++j;
            printf("%4d", i);
            if (!(j % 10)) printf("\n");
        }
}
743デフォルトの名無しさん:2005/07/02(土) 22:46:23
>>740
#include <algorithm>
#include <iostream>
#include <vector>
std::vector<bool> sieve_of_eratosthenes(int upper) {
    std::vector<bool> integers(upper + 1, true);
    integers[0] = integers[1] = false;
    for (int i = 2; i <= upper / 2; ++i) {
        int notprime = i;
        while ((notprime += i) <= upper) integers[notprime] = false;
    }
    return integers;
}
std::vector<int> make_primes(int upper) {
    std::vector<bool> sieve(sieve_of_eratosthenes(upper)); std::vector<int> result;
    for (int i = 2; i <= upper; ++i) if (sieve[i]) result.push_back(i);
    return result;
}
int main() {
    std::vector<int> primes = make_primes(30000); int n;
    std::cout << "非正数の入力で終了" << std::endl;
    std::cin >> n;
    while (n > 0) {
        if (n > 30000) std::cout << "範囲外" << std::endl;
        else {
            std::vector<int>::iterator pos = std::lower_bound(primes.begin(), primes.end(), n);
            if (*pos == n) std::cout << pos - primes.begin() + 1 << "番目" << std::endl;
            else std::cout << "素数でない" << std::endl;
        }
        std::cin >> n;
    }   
}
744デフォルトの名無しさん:2005/07/02(土) 23:15:13
[1] 授業単元: C言語プログラミング基礎
[2] 問題文:数あてゲームを作れ。1〜9までまでの乱数を使い、
入力した数字が違っていた場合は大小によってメッセージを変える。
そして正解の場合は「正解!」と表示し、再度遊ぶかどうか尋ねる。
「Y」の場合は続行し、「N」だったら終了する。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:Cのみ
[4] 期限:7月4日
[5] その他の制限:
よろしくお願いします。
745デフォルトの名無しさん:2005/07/02(土) 23:21:15
>>744
YでもNでもなかったらどうしたらいいんだ?
746デフォルトの名無しさん:2005/07/02(土) 23:25:49
>>744
ま、いいや。Nで終了、その他で続行。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main(void) {
    int n, u;
    char str[2];
    srand((unsigned)time(NULL));
    do {
        n = rand() % 9 + 1;
        do {
            printf("?:"); scanf("%d", &u);
            if (n > u) printf("more large");
            else if (n < u) printf("more small");
        } while (n != u);
        printf("正解!再度遊ぶ?");
        scanf("%2s", str);
    } while (strcmp(str, "N"));
    return 0;
}
747744:2005/07/02(土) 23:29:24
それではY以外は終了でお願いします。
748744:2005/07/02(土) 23:31:03
>>746すみません。リロードし忘れてました。ありがとうございます。
747は忘れてください。
749デフォルトの名無しさん:2005/07/02(土) 23:33:18
>>748
それならば
    } while (strcmp(str, "N"));

    } while (!strcmp(str, "Y"));
に変更してくれ
750デフォルトの名無しさん:2005/07/02(土) 23:37:04
>>748
すまんが
char str[2];

char str[4];
に変更。
751744:2005/07/02(土) 23:40:32
>>746,750
了解しました。ありがとうございました。
752744:2005/07/02(土) 23:43:12
アンカーミスりました。
>>746,750→×
>>749,>>750→○
753デフォルトの名無しさん:2005/07/02(土) 23:57:40
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
次の機能を持つメールアドレス管理プログラムを作成せよ
(1) データの新規登録、削除、検索。
(2) データのファイルへの保存と、ファイルからの読み込み。
(3) 保存されているデータを姓のアルファベット順で一覧表示
※データの内容は、姓、名前(ともにローマ字表記)、メールアドレスの3要素とする
データはリスト構造で管理すること
※プログラム開始時に保存されているファイルを読み込み、終了時にその時点のすべての
データをファイルに保存するようにすること
※上の(1)から(3)は次のようなメニュー画面から選択できるようにすること
1. 新規登録
2. 一覧表示
3. 削除
4. 終了
-「2. 一覧表示」が選択された時はその時点のすべてのデータを姓のアルファベット順で一覧表示すること
-「3. 削除」を選択した時は,検索する姓または名前を入力させ
それが存在する場合はデータの内容を表示後、「処理: a. 削除する b. なにもしない」の
メニューの中から選択させるようにすること
[3] 環境
 [3.1] OS:Windows/Linux/等々  Windows
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか  C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 7月3日
よろしくお願いします。
754デフォルトの名無しさん:2005/07/02(土) 23:58:35
>>740
遅かったけど一応作ったからAGE
内容的にはベターCって感じでC++を使っている。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/650.txt
755デフォルトの名無しさん:2005/07/02(土) 23:58:52
あげてしまった。すまぬ。
756デフォルトの名無しさん:2005/07/03(日) 00:17:06
>>753
アドレス帳つかえ。
次。
757匿名:2005/07/03(日) 00:31:05
740です。743,754どうもありがとうございます。
758デフォルトの名無しさん:2005/07/03(日) 00:41:10
>>753
> 姓のアルファベット順で一覧表示
同姓の場合は?
759デフォルトの名無しさん:2005/07/03(日) 00:47:36
>>758
その場合は名前を比較して、名前のアルファベット順にしてください。
無理そうなら同姓の場合は考えなくてもいいです。
お願いします。
760C++お願いします。:2005/07/03(日) 00:52:49
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):10進6ケタの自然数を16進表示するプログラム。
               7進8ケタの自然数を10進表示するプログラム
               7進8ケタの自然数を3進表示するプログラム 
               の3問です。いきなり3問もすいません。お願いします。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++です。
[4] 期限:2005年7月5日23:59までです。
[5] その他の制限:無いです。
761デフォルトの名無しさん:2005/07/03(日) 01:05:40
//10進6ケタの自然数を16進表示するプログラム。
#include <stdio.h>
#include <stdlib.h>

int main()
{
char buf[7];
int n;
fgets(buf, sizeof buf, stdin);
n=atoi(buf);
printf("%x", n);
return 0;
}
762デフォルトの名無しさん:2005/07/03(日) 01:32:01
>>761
ありがとうです!
763デフォルトの名無しさん:2005/07/03(日) 01:49:06
>>760
3問が1つのプログラムにまとまってる。
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
std::string to_radix_n(unsigned int x, unsigned int n) {
    int index = 0;
    std::string s, characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    do s.push_back(characters.at(x % n)); while (x /= n);
    std::reverse(s.begin(), s.end());
    return s;
}
unsigned int from_radix_n(std::string s, unsigned int n) {
    unsigned int x = 0;
    std::string characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for (std::string::size_type i = 0, len = s.length(); i < len; ++i)
        (x *= n) += static_cast<unsigned int>(characters.find(std::toupper(s[i])));
    return x;
}
int main() {
    std::string s;
    std::cin >> s;
    std::cout << to_radix_n(from_radix_n(s, 10), 16) << std::endl;
    std::cin >> s;
    std::cout << to_radix_n(from_radix_n(s, 7), 10) << std::endl;
    std::cin >> s;
    std::cout << to_radix_n(from_radix_n(s, 7), 3) << std::endl;
}
764C++お願いします。:2005/07/03(日) 02:40:27
ありがとうございます、763さん。
やってもらって悪いのですが、
エラー出てしまうんですけど…
私の方に問題あるのですかね?
本当にプログラム初心者なのでわかりません。
本当にすいません。
765デフォルトの名無しさん:2005/07/03(日) 02:43:55
コンパイルエラーなら、そのまま貼り付けろ
766デフォルトの名無しさん:2005/07/03(日) 02:53:56
MSVC6.0だったりして。
767C++お願いします。:2005/07/03(日) 02:54:40
メンバではありませんって出るんですよね…。
貼り付けて実行してるんですけど、
黒い画面が出ないんです…くだらない質問で
ごめんなさい。
768デフォルトの名無しさん:2005/07/03(日) 02:56:26
769C++お願いします。:2005/07/03(日) 02:56:54
MSVC6.0ってMicrosoft Visual 6.0の事ですよね?きっと。
自分それです。これだとちょっと違うんですか?
770デフォルトの名無しさん:2005/07/03(日) 02:58:09
ああなるほど
VC++6.0ではpush_back()がbasic_string<>のメンバじゃないんだね
771763:2005/07/03(日) 02:58:49
>>769
あ〜あ、コンパイラを書かないから。そのコンパイラはグズグズで
使い物にならないんだよ。で、何行目になんていうエラーが出るって?
772デフォルトの名無しさん:2005/07/03(日) 03:01:19
push_back がダメなら、 += にしたらええんちゃう?
効率は落ちるけど。
773763:2005/07/03(日) 03:01:31
それじゃあ
    do s.push_back(characters.at(x % n)); while (x /= n);

    do s += characters.at(x % n); while (x /= n);
では?
774763:2005/07/03(日) 03:01:48
かぶったorz
775デフォルトの名無しさん:2005/07/03(日) 03:04:12
奴が使ってるのは違法コピーのVC6.0 に300ペリカ
776C++お願いします。:2005/07/03(日) 03:05:04
8行目のdo s.push_back(characters.at(x % n)); while (x /= n);
の行にメンバではありません。って出ます。

16行目の(x *= n) += static_cast<unsigned int>(characters.find(std::toupper(s[i])));
にtoupper stdのメンバではありません。って出ます。
777デフォルトの名無しさん:2005/07/03(日) 03:09:21
ところで、なんでVC6.0なの?
そのコンパイラでC++はやめたほうがいいよ。
778763:2005/07/03(日) 03:09:23
>>776
ちゃんと>>772-774読んでる?
std::toupper→toupperに変更。改めて言うけど、君の使っているソフトが
イカレテいるために、わざわざプログラムを改悪(というよりも間違ったものに)
しているんだからね。
779C++お願いします。:2005/07/03(日) 03:10:03
今+=にしたら一個エラーがへりました!
16行目もなにか問題あるんでしょうか?
780デフォルトの名無しさん:2005/07/03(日) 03:11:13
toupperがマクロか何かで、std名前空間につつまれてないのかな。

#include <cctype> --> #include <ctype.h>

std::toupper() --> toupper()

でどうよ。
781C++お願いします。:2005/07/03(日) 03:14:56
すいません。
わざわざ。
出来ました。みなさんほんとありがとうございます。
782763:2005/07/03(日) 03:18:33
>>781
ちなみに。もしチェックする教官が君とは違うまともなコンパイラを
使っていたら、その答案はハネられるよ。
783デフォルトの名無しさん:2005/07/03(日) 03:19:00
都合の悪いことには答えないのなw
784デフォルトの名無しさん:2005/07/03(日) 03:22:37
ガッコで使ってるコンパイラがあるんだろうけど....
ま、コピったのかな、それを。

cctype.hをインクルードしておきながら
using宣言も使わずに
toupper()とするのはまあ間違いと言われかねないが。

ctype.hをインクルードするか
using宣言を書いておけば
まあ間違いとは言えないだろう。
785C++お願いします。:2005/07/03(日) 03:22:39
答えますよw。
そんな非情じゃないですw。
これはそんないかれたコンパイラなんですか?
786784:2005/07/03(日) 03:23:47
cctype.hじゃないcctypeだ

>>785
要するに、C++標準準拠度が低いというだけ。
もっとも、当時はそれでも使われていたし、今でもそれを使っている
現場は結構多いけどな
787デフォルトの名無しさん:2005/07/03(日) 03:24:01
>>785
はい。世界標準規格に沿ったプログラムを書いてもコンパイルできません。
788デフォルトの名無しさん:2005/07/03(日) 03:26:07
>>785
単に古い。せっかくMSがただでもっと新しいのを提供して
くれてるんだから、そっちを使ったほうがいい。
Microsoft Visual C++ Toolkit 2003 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1109618655/
789C++お願いします。:2005/07/03(日) 03:27:04
じゃあC++標準準拠度が高くなれば、
またプログラムが変わってくるって事ですか?
ちなみにこの授業の教授はプログラム一切分からないんですよw。
大学院生が全部見させられてるらしいです。
授業で黒板にJABAって書いてましたから。
790デフォルトの名無しさん:2005/07/03(日) 03:28:36
>>789
だから、手前味噌でなんだが>>763が正しい。
791デフォルトの名無しさん:2005/07/03(日) 03:28:42
>>789
「VC++6.0でもコンパイル可能で、標準に準拠したプログラム」
を書けばよい。
ただし、今の時代にわざわざそんな無駄な苦労をする意味は全く無い
と言ってよい。
学習の障害になるだけだ。
792C++お願いします。:2005/07/03(日) 03:29:44
>>788
全然知らなかったです。
未だにポケベル使ってる様な感じで解釈します。
793763:2005/07/03(日) 03:31:29
あ、次の行は消しといてくれ。恥ずかし…
int index = 0;
794デフォルトの名無しさん:2005/07/03(日) 03:34:21
まあそのガッコで平気でVC++6.0を使っており
授業が>>789みたいな感じなら、
たぶん>>763の回答は、担当教授の想定とは随分違うものなんじゃないかな(w

時には授業のレベルに合わせることも必要だろう、学生のテクニックとして。
795デフォルトの名無しさん:2005/07/03(日) 03:50:23
このスレのpart18と27のdatがどうしても見つかりません。
どなたか恵んでください。m(_ _)m
796デフォルトの名無しさん:2005/07/03(日) 04:44:03
そーいえば、まとめサイトはどーなったんだろう。
797デフォルトの名無しさん:2005/07/03(日) 11:21:33
■■■■■■■■■■■■■■■■
■                     ■  違う板にコピペすると、四角の枠の中に
■                     ■  メッセージとURLが現れる不思議な絵。
■                     ■
■                     ■  (その仕組みがリンク先に書いてある)
■                     ■
■                     ■  この原理を応用すると、まったく新しい
■                     ■  コピペが作れる予感。
■■■■■■■■■■■■■■■■
798デフォルトの名無しさん:2005/07/03(日) 11:34:01
ズレてる時点で信憑性(ry
799795:2005/07/03(日) 12:32:09
>>796
まだなさげなんだけど。
800デフォルトの名無しさん:2005/07/03(日) 14:40:37
801デフォルトの名無しさん:2005/07/03(日) 14:49:56
よろしくお願いします。

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
初期状態が次のようになっている8パズルがある。
これを状態空間で表して、初期状態を2回展開して得られる全ての状態に対して、
縦型探索により解を求めよ。

<初期状態(○は空)>
1 2 ○
4 5 3
7 8 6
<目標状態>
1 2 3
4 5 6
7 8 ○

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Borland C
 [3.3] 言語:C
[4] 期限:7月5日まで
[5] その他の制限:
プログラムのソースの他に解の探索経路も提出することになっているので、
探索経路も出力させなければならない。
802デフォルトの名無しさん:2005/07/03(日) 15:49:43
803デフォルトの名無しさん:2005/07/03(日) 15:52:59
>>800
>土曜日のごご六時ごろまでです。
804デフォルトの名無しさん:2005/07/03(日) 17:14:08
>>800
実効例もないし。
805デフォルトの名無しさん:2005/07/03(日) 17:14:31
実行
806デフォルトの名無しさん:2005/07/03(日) 17:46:05
>>643
返事を待つのが面倒くさくなった
#include <stdio.h>
float avg(int n, float data, float old_avg) {
    return (old_avg * (n - 1) + data) / n;
}
int main(void) {
    float old_avg = 0., data;
    int n = 0;
    while (1) {
        printf("入力:"); scanf("%f", &data); ++n;
        if (data == 0.) break;
        printf("平均:%f\n", old_avg = avg(n, data, old_avg));
    }
    return 0;
}
807デフォルトの名無しさん:2005/07/03(日) 18:07:21
プログラム板が荒れているため、IDを導入するか検討中です。
賛成の方も反対の方も、このスレで自分は賛成か反対かをお書きください。

プログラム技術板に強制ID制を導入すべきか否か
http://etc4.2ch.net/test/read.cgi/vote/1118144381/

理由などの記入は別に構いません。
<<賛成>>か<<反対>>かだけ御記入頂ければ結構です。
ちなみに、当たり前ですが運営の方にIPが見えているので、1日ごとにIDが変わるからといって多重投稿しないでください。
808デフォルトの名無しさん:2005/07/03(日) 18:24:58
>>800=>>643
こんな感じでどうやろ?

#include <stdio.h>
float avg(int n,float in,float Avg){
    double All=0;
    if(n<1) return in;/*多分、一個目の呼び出しなので平均値無し。*/
    All = Avg*n;/*合計値を復元。*/
    return (All+in)/(n+1);/*さらに平均値にして返却。このとき割れない数字だと計算誤差が出る。w*/
}
int main(){
    float Avg=0,In;
    int N=0;
    while(1){
        puts("Input Type float");
        scanf("%f",&In);
        if(In == 0.0f) break;
        Avg = avg(N++,In,Avg);
        printf("Result No.%d:Ave(%f)\n",N,Avg);
    }
    puts("End");
    return 0;
}
809808:2005/07/03(日) 18:28:07
>>806に先越されちゃったね。ま、いいか。
81012:2005/07/03(日) 20:40:00
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=653
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:7月5日まで
[5] その他の制限:なし
どなたかお願いします。
811デフォルトの名無しさん:2005/07/03(日) 20:56:55
すいません期限はもぅちょいですが埋もれてしまうのが怖いチキンな私ですのでもう一度投稿させて下さい、なにとぞよろしくお願いします

[1]C言語演習
[2]Gccコンパイラ
[3]期限 7月6日水
[4]環境RedHat Linux

問題
メニュー表示をし,ステップ「1」として,関数y = 2x2において,x = 0 – 10 ま
でを0.01 刻みで1001 個のx,yデータセットを作成して,ファイル名function.datで各自のホ
ームディレクトリ(または,カレントディレクトリ)にバイナリ形式で保存する.ステ
ップ「2」として,作成したfunction.datからn個目のx,yデータセットを抽出して,ファイ
ル名n_xy_ascii.dat(nは入力した数字)としてASCII形式で保存する.以上の様に動作す
るプログラムを作成しなさい

よろしくお願いします
812デフォルトの名無しさん:2005/07/03(日) 21:02:32
すまんがメニュー部を提示してくれんか?
授業でならっとるか、すでに提出した分のがあるはず>>811
813デフォルトの名無しさん:2005/07/03(日) 21:20:13
[1] 授業単元: C言語
[2] 問題文:データ構造
入力した文字列を、文字列の昇順になるようにリストに登録する
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン): VC++ 6.0
[3.3] 言語:C++[4] 期限:7月4日
実行は出来るのですが、データを入力してると(例:B、A、C)
問題が発生したため、c1005.exe を終了します。と出て
終わってしまいます、*の場所が多分何処か間違ってると思います
ご教授お願いします
814デフォルトの名無しさん:2005/07/03(日) 21:22:15
1-1

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

typedef struct list{
charname[100];
struct list *next;//自己参照構造体
}NODE;
void list_out(NODE *);

void main(void)
{
NODE *new,*head,*p,*back;
char name[100];

printf("***文字列の昇順に登録***\n");
printf("文字列入力 (CTRL+Zで終了)\n");
head=NULL;*
while(printf("->"),gets(name) !=NULL){
new = (NODE *)malloc(sizeof(NODE));
if(new == NULL){
printf("メモリを確保できません!!\n");
exit(1);
}
815813:2005/07/03(日) 21:22:51
1-2
strcpy(new->name,name);//文字列登録
if(head==NULL){*//リストの先頭なら
/*ポインタのつなぎ換え*/
new->next=head;*
head=new;*
}
else{
p=head;//挿入場所を探す
while(p != NULL && strcmp(p->name,new->name) < 0){*
back=p;
p=p->next;*
}
/*ポイントのつなぎ替え*/
back->next=new;*
new->next= p;*
}
}
printf("\n***リストの内容***\n");
list_out(head);*
}

voidlist_out(NODE*p)
{
while(p!='\0'){
printf("%s\n",p->name);
p=p->next;
}
}
816811:2005/07/03(日) 21:50:01
>>812
いえ、本当に何もないんです、、、いきなりこの課題だけをぽんと出された感じでして、、、(汗)
817デフォルトの名無しさん:2005/07/03(日) 23:29:56
818デフォルトの名無しさん:2005/07/04(月) 02:11:16
[1] 授業単元:プログラミング(C)
[2] 問題文(含コード&リンク):
文字列を入力し、それを左右入れ替えて出力するプログラムを書け。
例えば、"ABCD"と入力したら"DCBA"と出力する
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):VisualC++
 [3.3] 言語:C
[4] 期限:7/7
[5] その他の制限:関数は使わないでお願いします
            簡単ですんません…
819デフォルトの名無しさん:2005/07/04(月) 03:15:17
>>818
関数を使わないと無理。
820デフォルトの名無しさん:2005/07/04(月) 03:53:38
>>818
入力が 1000 番地から書き込まれていて、出力を 2000 番地から書き込むんだったら
int main(void){
char * in=(char *) 1000, * out=(char *) 2000;
char *p=in,*q=out;
while(*p++!='\0');
while(p>=in){
*q++=*p--;
}
q='\0';
return 0;
}
821デフォルトの名無しさん:2005/07/04(月) 04:13:20
int mainも関数ですよ!
822デフォルトの名無しさん:2005/07/04(月) 04:40:26
>>818
関数使いまくりですが初心者なので許してください(><)
#include <stdio.h>
int main(){
int i;
char str[250], *p;
p = str;
gets(str);
for (; *p; p++);
do {
p--;
putchar(*p);
} while (p != str);
putchar('\n');
return 0;
}
823デフォルトの名無しさん:2005/07/04(月) 04:42:40
int i; は必要なかった(^^;)
824デフォルトの名無しさん:2005/07/04(月) 04:51:18
>文字列を入力
関数無しでどうやれと?
Cで


>820
文字列として後ろからコピー、に失敗してるぞ(w
825デフォルトの名無しさん:2005/07/04(月) 09:38:37
[1] 授業単元: プログラミングC言語
[2] 問題文(含コード&リンク): 平面座標の点をセットする構造体を考えました。
3種類の構造体を初期化する関数を参考にしてshow関数と同じ機能をする
p_show関数の|==1==|の部分を記しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): Visual C++
 [3.3] 言語:C
[4] 期限:なるべく早くお願いします。
問題文は以下です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/655.txt
826デフォルトの名無しさん:2005/07/04(月) 09:58:53
>>825
printf("(%3.1f,%3.1f)\n",d->x,d->y);
827デフォルトの名無しさん:2005/07/04(月) 10:03:16
ネタか自作関数無しでmainのみか・・・818
828デフォルトの名無しさん:2005/07/04(月) 10:05:22
最近C言語を始めた初心者ですが、次の問題をお願いします。

キーボードから入力された文字が文字列str内にあるかどうか判断し、存在すれば次の文字を入力させ、存在しなければプログラムを終了する。

文字列の定義 char
str[]="ABCD";

入力ー>A
あります。
入力ー>D
あります。
入力ー>E
ありません。
829デフォルトの名無しさん:2005/07/04(月) 10:34:24
>>826
ありがとうございます!
830デフォルトの名無しさん:2005/07/04(月) 11:24:35

[1] 授業単元: プログラミングとその応用
[2] 問題文(含コード&リンク): 次のような「エラトステネスのふるい」のアルゴリズムを用いて、n以下の素数を求めるプログラムを作成せよ。

1.S={2...n}という整数の集合を考える。
2.Sが空集合で無い限り、次の(1)〜(3)を繰り返す。
(1)mをSの要素の最小値とする。このときmは素数である。
(2)Am = {k|k=am,k∈S,a∈Z}とする
(3)SからAmの要素を全て取り除いて、残りの集合をあらためてSとする

[3] 環境
 [3.1] OS:Windows/Linux/等々 :Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか:C
[4] 期限:できれば今日の6時まで…
[5] その他の制限:授業では構造体を習いたてです。
市販の本などと同じ順番で習ってて、構造体の前までの課題です。

よろしくお願いします。
831デフォルトの名無しさん:2005/07/04(月) 11:30:43
>>830
まだ6.5時間あるから必死こいて検索しろ。
832デフォルトの名無しさん:2005/07/04(月) 11:31:52
>>828
>1を読んでテンプレを書くように。
こういうプリミティブな入力は、CとC++とでは教えることが随分変わるからな。
833デフォルトの名無しさん:2005/07/04(月) 11:47:06
[1] 授業単元: C言語1
[2] 問題文(含コード&リンク): 1つ以上のファイル名を引数として、各ファイルの行数・単語数・バイト数、
および全ファイルの行数・単語数・バイト数のそれぞれの合計を表示するプログラムを作成せよ。

※単語とは、「isspace()が真になる文字の列」で区切られている文字列であるとする。
isspace()を使うには、ctype.hをインクルードしておく必要がある。

想定される実行例
%wcount a.c b.c c.c d.c
行数 単語数 バイト数 ファイル名
100 211 1590 a.c
33 90 637 b.c
70 154 1069 c.c
171 474 3237 d.c
374 929 6533 合計

プログラム名をwcountとする。

[3] 環境
 [3.1] OS:Windows/Linux/等々 :Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか:C
[4] 期限:できるだけ早くお願いします。
[5] その他の制限:初歩的な内容は、一応ひととおり習いました。

マジ困ってるのでお願いします!
834830:2005/07/04(月) 11:48:23
>831
ほんとわからないんでお願いします…(´・ω・`)
835デフォルトの名無しさん:2005/07/04(月) 11:56:52
>>834
ちょっとgcc使える環境にないんで検証はできないから思いついた流れだけ。
とりあえず元のSを格納した配列(Src[])と、Amを格納する配列(am[])
現在のSを示す配列(flags[])を用意して見つかったkは順次am[]に格納していって
src[]上でkに該当する要素のインデックスナンバーをflags[]に順次格納
んで条件分岐でflags[]にすでにあるのとかぶったらそれはなかったものとすれば
Amを取り除いたSを擬似的に作れないか?まぁ単なる思いつきだし、無駄がかなりあると思うが・・・

ガンガレ
836デフォルトの名無しさん:2005/07/04(月) 12:00:27
>>834
一般的なエラトステネスの篩のソースなど、このスレでもgoogleでもいくらでも見つかるだろ。
そのうち、問題文の処理と同じような戦術を採っているものを探し出して適当に書き換えればいいと思うのだが。
837デフォルトの名無しさん:2005/07/04(月) 12:01:09
>>830
>>198>>740で極めて似ている問題とその解答が出されているが。
838デフォルトの名無しさん:2005/07/04(月) 12:04:03
>>834
検索の仕方も分からない厨房か?
839デフォルトの名無しさん:2005/07/04(月) 12:07:12
>>828
#include <stdio.h>
#include <string.h>
int main(void) {
    for (;;) {
        int c; const char str[] = "ABCD";
        printf("入力->");
        while ((c = getchar()) != EOF && c == '\n') ;
        if (c == EOF) return 1;
        if (strchr(str, c)) puts("あります。");
        else {puts("ありません。"); break;}
    }
    return 0;
}
840デフォルトの名無しさん:2005/07/04(月) 13:48:37
age
841:2005/07/04(月) 14:29:07
[1] 授業単元: 線形代数学演習
[2] 問題文(含コード&リンク):
n次正方行列の逆行列を余因子行列を経由して求め、
a11= ,a12= ,…
a21= ,a22= ,…
の形で表示させる。もとの行列の成分はscanf で取得する。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):bcc
 [3.3] 言語:C
[4] 期限:早ければ早いほど
842デフォルトの名無しさん:2005/07/04(月) 14:49:40
>>514
貴様、TDUだな!
843デフォルトの名無しさん:2005/07/04(月) 14:59:32
東京ディズニー・・・アンダーグラウンド?
844デフォルトの名無しさん:2005/07/04(月) 15:02:10
>>843
納得
845デフォルトの名無しさん:2005/07/04(月) 15:14:43
東京電気アンダーグラウンド

>>841
で、あなたは何処?
略称。
846841:2005/07/04(月) 15:23:06
>>845
話の流れがつかめん。。(悲)
847デフォルトの名無しさん:2005/07/04(月) 15:32:43
[1] 授業単元:proa
[2] 問題文(含コード&リンク):
リストのノード順序を,逆の順序にする関数.
(データを入れ替えではなく、next の値の変更により,逆の順序にする)
[3] 環境
 [3.1] OS:vineLinux
 [3.2] コンパイラ(バージョgcc
[3.3] 言語:C
[4] 期限:2005年7月7日24:00まで
お願いしますm(_ _)m
848デフォルトの名無しさん:2005/07/04(月) 15:32:58
>>846
地方か文系の人?
849デフォルトの名無しさん:2005/07/04(月) 16:10:32
>>847
双方向?単方向?
850デフォルトの名無しさん:2005/07/04(月) 16:14:43
単方向だろうな。
双方向で逆順にするようなバカな問題はない。
851デフォルトの名無しさん:2005/07/04(月) 17:09:48
>>847
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/656.txt
あんま綺麗に実装できんかった。
freeとか不正引数対処とかは自分で判断して実装してな。
852デフォルトの名無しさん:2005/07/04(月) 17:18:44
853デフォルトの名無しさん:2005/07/04(月) 18:00:08
[1] 授業単元: 回路解析特論
[2] 問題文(含コード&リンク): チョーク入力型全波整流回路において電源電流とダイオード通過後の電流をプログラムにより解析する。
               電圧源は正弦波。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:2005年07月06日12:00まで
854デフォルトの名無しさん:2005/07/04(月) 18:01:24
[1] 授業単元: プログラミングT
[2] 問題文(含コード&リンク):
符号なし整数xを右にnビット回転した値を返す関数rrotateと、
左にnビット回転した値を返す関数lrotate
unsigned rrotate(unsigned x, int n) { /* ・・・ */ }
unsigned lrotate(unsigned x, int n) { /* ・・・ */ }
を作成せよ。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):bcc
 [3.3] 言語:C
[4] 期限:明後日

よろしくお願いします
855デフォルトの名無しさん:2005/07/04(月) 18:38:35
/* 32bitInt限定、0 <= n < 32でのみ意味がある */
unsigned rrotate(unsigned x, int n) {return x >> n | x << (32 - n);}
unsigned lrotate(unsigned x, int n) {return x << n | x >> (32 - n);}
856デフォルトの名無しさん:2005/07/04(月) 18:40:00
857デフォルトの名無しさん:2005/07/04(月) 18:42:04
>>854
#include <limits.h>
unsigned rrotate(unsigned x, int n) {
    static const unsigned width = sizeof(unsigned) * CHAR_BIT;
    return x << n % width | x >> (width - n % width);
}
unsigned lrotate(unsigned x, int n) {
    static const unsigned width = sizeof(unsigned) * CHAR_BIT;
    return x >> n % width | x << (width - n % width);
}
858デフォルトの名無しさん:2005/07/04(月) 18:53:08
>>854
ちょっと遅かったけど折角作ったのでUP

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/660.txt
859デフォルトの名無しさん:2005/07/04(月) 18:57:42
>Upper = Upper >> n;
せめてUpper >>= n;
とは書けなかったのだろうか。つーか、一時変数イラネ。
860デフォルトの名無しさん:2005/07/04(月) 19:05:05
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 方形波と三角波を選択可能にして、選んだ信号を発生させるプログラムを作成せよ。(
1kHz)
[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ(バージョン): VC++ 6.0
 [3.3] 言語:C++
[4] 期限:来週末まで
[5] その他の制限:

どうかよろしくお願いしますm(_ _)m
861デフォルトの名無しさん:2005/07/04(月) 19:08:27
>>860
発生ってなんだよ。
なんか湧かすのか?
862デフォルトの名無しさん:2005/07/04(月) 19:11:25
>>860
どこにどういう形式で出力するのかな?
863デフォルトの名無しさん:2005/07/04(月) 19:14:10
>>859
あんまりグチャグチャなコードは書きたくないんですよ。
読みやすいとは言いませんけど、自分で読みづらいコードはヤなんです。
まー、ほとんど癖なんですけどね〜。
864デフォルトの名無しさん:2005/07/04(月) 19:14:40
WAVは勘弁な(w
865デフォルトの名無しさん:2005/07/04(月) 19:35:34
>>863

a = a op b;
よりは、a op= b;
のほうが通常効率がよいし、普通の香具師にとっては読みやすい

両者の違いは特にC++で演算子オーバーロードされている場合に重要なので、
後者のように書ける場合には、後者のように書く癖をつけたほうがいいぞ。
866デフォルトの名無しさん:2005/07/04(月) 19:42:02
#include <stdio.h>
float avg(int ,float ,float );
main()
{
float x,y;
int n;
printf("データを入力してください!");
n=1;
while(n){
printf("入力値%d= ",n);
scanf("%f",&x);
if(x == 0.0) break;
n++;
}
float avg(int n,float x,float y)
{
float b;
b = (x+y)/2;
return b;
}
このプログラム回らないんですけど、
どうしたら、回りますか??
教えてください。お願いします。
867デフォルトの名無しさん:2005/07/04(月) 19:48:05
>>866
悪いことは言わない。一から勉強しなおせ
868デフォルトの名無しさん:2005/07/04(月) 19:49:14
>>867
一から、勉強してます。
869デフォルトの名無しさん:2005/07/04(月) 19:50:05
じゃ0から勉強しなおせ。
なんならマイナスでもいいんだぞ。
870デフォルトの名無しさん:2005/07/04(月) 19:54:34
>>869
マイナスから、勉強してますが、なにか?
871デフォルトの名無しさん:2005/07/04(月) 19:57:42
いやなにも・・・
872デフォルトの名無しさん:2005/07/04(月) 20:00:16
>>865
そんなもんかな。
まー、一応気をつけることにするよ。
873デフォルトの名無しさん:2005/07/04(月) 20:01:02
>>862
書き方が足りませんでした。
時刻と振幅の値をテキストに出力する形式でお願いします。
874デフォルトの名無しさん:2005/07/04(月) 20:03:35
>>866
取ってと歯車つけるといいと思うよ。
875デフォルトの名無しさん:2005/07/04(月) 20:05:12
>>873
waveで鳴らすの作っちゃったオレはどうすればいいんだ?
やる気失せた・・・・・・・。
876860:2005/07/04(月) 20:06:47
>>875
すみません・・
877デフォルトの名無しさん:2005/07/04(月) 20:30:58
1]授業単元:プログラミング演習
[2]問題文:多重リスト(二重)。各セルを構造体で表現し、表全体はリストによってセルを結合。セルの構造体は右および下のセルを示すポインタ変数2つと、セル値として保持する文字列へのポインタ変数1つを持つものとし、動的にメモリ領域を割り当てる。
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ cc
[3.3]言語:C
[4]期限:7月5日 10時
[5]その他の制限:・プログラムを起動すると、初期状態として、適当な行数x列数の表を生成する。この際、各セルの値は0とする。
・コマンドによって、表の表示、行および列の追加、挿入、移動、削除、表の保存復元、ヘルプ、終了の各操作を行うものとする。
というものです。初期化まで、また関数ごとでUPしてくれてもかまいません。よろしくお願いします。
              
878デフォルトの名無しさん:2005/07/04(月) 20:42:05
>>866
関数を引数をかいてないんじゃないのかい?
879デフォルトの名無しさん:2005/07/04(月) 21:19:15
>>860
ファイル出力くっつけた、こんなんでええんかな。
つーか1kHzって、1000Hzだったね。鬱だな。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/661.c
880860:2005/07/04(月) 21:23:09
>>879
ありがとうございます。まさかこんなに早くやっていただけるとは・・・。
助かりますm(_ _)m
881名無しさん:2005/07/04(月) 21:31:36
[1] 授業単元: プログラム実習
[2] 問題文(含コード&リンク): 適当な自然数を入力し、素数判別をする。
               素数でない場合、その数の約数は何でしょう?という
               問題です。宜しくお願いします。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): MaicroSoft Visual C++ 6.0
 [3.3] 言語:C++
[4] 期限:2005年7月7日23:59まで
[5] その他の制限:どこまで習っているか、等々
882デフォルトの名無しさん:2005/07/04(月) 21:33:41
>>877
行や列を挿入した場合、値はどうするんだ?
1行全て同じ値?
883デフォルトの名無しさん:2005/07/04(月) 21:41:53
>>881
MaicroSoftかぁ
884デフォルトの名無しさん:2005/07/04(月) 21:46:46
笑った
885デフォルトの名無しさん:2005/07/04(月) 21:47:38
>>877
延長してもらったのか?もっと早く言ってくれ。。。
構文解析・算術評価の部分は出来てるから、がんばってやってみるが。
886885:2005/07/04(月) 21:48:56
あれ、問題が変わってるw
俺が手をつけた部分は無意味だったようだ。
887名無しさん:2005/07/04(月) 21:51:10
MicroSoftでしたw
笑われちゃいますね…
888デフォルトの名無しさん:2005/07/04(月) 21:52:13
もう>>884に笑われてるけどな
889名無しさん:2005/07/04(月) 21:56:59
ですね…
890デフォルトの名無しさん:2005/07/04(月) 22:05:57
891デフォルトの名無しさん:2005/07/04(月) 22:26:41
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):列挙型の問題です。ソースが長いのでアップローダのほうに
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=663
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン): VC++ 6.0
 [3.3] 言語:C++
[4] 期限:7月6日
[5] その他の制限:配列、ポインタを使用する。

どうかよろしくお願いしますm(_ _)m
892名無しさん:2005/07/04(月) 22:27:33
>>890
有難うございます。
893デフォルトの名無しさん:2005/07/04(月) 22:45:06
>>891

#include <stdio.h>

int main() {
  printf("構造体に姓と血液型を追加");
  return 0;
}
894デフォルトの名無しさん:2005/07/04(月) 23:05:00
895デフォルトの名無しさん:2005/07/04(月) 23:09:24
>>877です。みなさんには迷惑をかけています。期限は延びました。最終的には>>441に書いてあるものなればいいのですが。
なんどもすいません。算術などはもちろんつけて欲しいです。
896デフォルトの名無しさん:2005/07/04(月) 23:13:31
>>882 いわゆる簡易エクセルのようなプログラムです。詳しくは>>441を。
897877:2005/07/04(月) 23:18:45
>>885期限は最大で7月6日まで延ばせるかもしれません。でもプログラムにレポートをつけないといけないので、限界で6日の12時くらいまでです。
898デフォルトの名無しさん:2005/07/04(月) 23:18:49
1] 授業単元:制御理論
[2] 問題文(含コード&リンク):y''(t)+3y'(t)+4y(t)=u(t),y(0)=0  y(t)を出力せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:なし
[5] その他の制限:差分方程式で近似する。逐次式を作る。・・・授業でC言語やってないんですけど宿題出ました。

お願いします。
899877:2005/07/04(月) 23:29:48
補足:コマンドについて1
p:表データ(全てのセル値、数式の場合には計算結果の値)を表示(表の形で)。
P(大文字):pと同様に表データを表示するが、数式の場合には計算結果の値ではなく、数式をそのまま表示する。
i:行または列を挿入する。行の場合には行番号(1,2...)を列の場合には列番号(A,B...)をそれぞれコマンド引数で指定する。たとえば"i B"とした場合には
 現在の表のA列とB列の間に新たな列Bが挿入され、元のB列、C列...は列番号が一つずつずれてC列D列...となる。 
900デフォルトの名無しさん:2005/07/04(月) 23:34:48
てか>>877の課題は他のと比べて手軽にできるって課題じゃね〜なw
ぶっちゃけ今できてる所だけでも作ったソース出さんと間に合わないと思う
今まったく手付かずなら>>885に期待するしかないかなw

なんでこんな課題がでてるのか不思議だw
901877:2005/07/04(月) 23:37:47
補足:コマンドについて2
a:行または列を追加する。"a B"とした場合にはB列の後ろに新たな列を追加する。
d:行または列を削除する。"d B"とした場合にはB列を削除する。
m:行または列を移動する。ふたつの引数を用いる。"m B D"とした場合にはB列をD列の前に前に移動する。
s:外部ファイル表にデータを保存する。保存書式は任意。
o:sコマンドで保存した外部ファイルの読み込み、表を再構築する。
h:いわゆるヘルプコマンド。
q:プログラムを終了する。
だらだら書いてすみません。
902デフォルトの名無しさん:2005/07/04(月) 23:38:08
>>897&etc
小規模のソフト一本分位の労力がかかるので結構手間がかかる。
一日でできるか怪しいので自分でも対策を打ってくれ。
僕はもう力つきそうだよ。
903902!=885:2005/07/04(月) 23:40:05
あー作ってる人いるのか。
そっちに任せよう。

>>899
情報の後だし禁止。
904デフォルトの名無しさん:2005/07/04(月) 23:40:52
或いは誰かがおおまかな仕様(リスト、セルの仕様とインターフェース)を決めて、
それぞれのメニュー項目ずつに分担するとかな。
905デフォルトの名無しさん:2005/07/04(月) 23:46:30
関数を引数をかいてないんじゃないのかい?
906デフォルトの名無しさん:2005/07/04(月) 23:50:43
[1] 授業単元: C
[2] 問題文:十進数を二進数に変換するプログラム制作
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005/07/08
[5] do while,配列を使う。
もうお手上げです。
とりあえず計算は、数値を2で割り余りを記憶し、商が0になるまで
計算し0になったら余りを逆にすればいいということはわかりました。
でもプログラムできない・・・・超初心者です。
907デフォルトの名無しさん:2005/07/04(月) 23:52:46
>>906
よく意味が分からんが、十進数で入力したのを
二進数で出力しろってこと?
数の進数なんか変換できないよ、表現上の問題だから。
できたとこまで揚げてみれば?
908885:2005/07/05(火) 00:02:11
なんか任されてるしw
俺のも完成するか分からんので言い訳を考えとくことを強く推奨。
909906:2005/07/05(火) 00:04:16
キーボードから与えられた数値を二進数表示させるプログラムをせいさくせよ。というものです。
Enter Number 25
25 = 11001
↑みたいな感じになるプログラムです。
出来たところもなにも全くわからないのです(;_;
910デフォルトの名無しさん:2005/07/05(火) 00:12:31
>>909
それはこういうプログラムかね?
#include <stdio.h>
char* to_2(unsigned x, char* s) {
    int index = 0, left = 0;
    char temp;
    do s[index++] = (x & 1) + '0'; while (x >>= 1);
    s[index--] = '\0';
    while (left < index) {
        temp = s[left];
        s[left] = s[index];
        s[index] = temp;
        ++left;
        --index;
    }
    return s;
}
int main(void) {
    unsigned x;
    char s[256];
    printf("Enter Number:"); scanf("%u", &x);
    printf("%u = %s", x, to_2(x, s));
}
911906:2005/07/05(火) 00:24:03
>>910
ぬぉぉ。コンパイラしたら、その通りでした!!!
あまり習ってない用語もびっしり・・・難しそう・・・
プログラム引数?っていうのですかね、それを使わなくても出来ますか?この処理は?
912デフォルトの名無しさん:2005/07/05(火) 00:26:46
>>906
結果の2進数を整数値で出すかcharで出すかで変わってくるんだが
charの場合だと
c(char型) v(INT型)ってすると
c= v+'0'ってすれば文字列になる ポインタか配列でまわせば普通に文字列なる
で最後に\0は絶対いれてね 文字列終わらないから

INTで出さないといけない場合は…
配列で結果を取り込んで一桁目の結果×1(10^0) 2桁目の結果×10(10^1)…
って足し算かな?Cだと^で累乗計算じゃないから関数使わんといけないけど

こんな感じでどう?
913910:2005/07/05(火) 00:30:54
>>911
まぁ落ち着け。コンパイラするって…「コンパイル」ね。言われた通り、
do〜whileと配列とを使っているだけ。あと、2進数って言うことだったから
2進数独特の処理になってる。もうちょっと教育的にすると(多分)次のように
なるハズ。
char* to_2(unsigned x, char* s) {
    int index = 0, left = 0;
    char temp;
    do {
        s[index++] = x % 2 + '0';
        x = x / 2;
    } while (x != 0);
    s[index--] = '\0';
    while (left < index) {
        temp = s[left];
        s[left] = s[index];
        s[index] = temp;
        ++left;
        --index;
    }
    return s;
}
914デフォルトの名無しさん:2005/07/05(火) 00:31:03
あら?整数で出すのかいてたら文字列で出すのもう出てたな

多分>>910が課題出した人の意図だと思うよ
915877:2005/07/05(火) 00:38:33
>>885期待しています。できるとこまででもいいのでお願いします。
916906:2005/07/05(火) 01:05:15
>>910
ご丁寧に有難うございます。
教育的というのはどのような意味なのでしょうか?
917デフォルトの名無しさん:2005/07/05(火) 07:24:25
十進数->二進数 >>644
二進数->十進数 >>718
918910:2005/07/05(火) 07:31:09
>>916
教育的ってのは、基礎的・基本的っていう意図で書いた。
考え方をそのままコードにしたらってこと。
919デフォルトの名無しさん:2005/07/05(火) 09:05:52
1] 授業単元:c++
[2] aを入力してS=1/1+(1-2)/2+(1-2+3)/3.....(1-2+3-4......a)/aを表示するプログラム
  aを入力してS=1/1+(1*2)/2+(1*2/3)/3.....(1*2/3*4......a)/aを表示するプログラム
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:今日の9時半まで
[5] その他の制限:FOR文つかうっぽい
すいません。時間があまりないのですが少し遅れてもいいのでお願いしますm(_ _)m
もう全然わかりません・・・


920デフォルトの名無しさん:2005/07/05(火) 09:12:48
age
921デフォルトの名無しさん:2005/07/05(火) 09:23:22
922919:2005/07/05(火) 09:53:42
期限過ぎてもいいのでお願いします。
ボーランドのC++です
923デフォルトの名無しさん:2005/07/05(火) 10:26:14
>>919
int main( void )
{
double S, n;
int a, i, j;
//
printf( "a = " ); scanf( "%d", &a );
for ( S = 0.0, i = 1; i <= a; i++ ) { for ( n = 0.0, j = 1; j <= i; j++ ) if ( j % 2 ) n += ( double )j; else n -= ( double )j; S += n / ( double )i; }
printf( "S = %f\n", S );
//
printf( "a = " ); scanf( "%d", &a );
for ( S = 0.0, i = 1; i <= a; i++ ) { for ( n = 1.0, j = 1; j <= i; j++ ) if ( j % 2 ) n /= ( double )j; else n *= ( double )j; S += n / ( double )i; }
printf( "S = %f\n", S );
return 0;
}
924デフォルトの名無しさん:2005/07/05(火) 10:27:48
>>919
先こされたか。
でもC++だって話なので一応うp。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/666.txt
925デフォルトの名無しさん:2005/07/05(火) 11:22:34
[1]授業単元:プログラミング中級
[2]問題文:1000以下の素数で、足しあわせると1000になるような二つの素数の組をすべて求めるプログラムを作れ
[3]環境
[3.1]OS:UNIX
[3.2]コンパイラ:gcc
[3.3]言語:C
[4]期限:7/8
[5]制限特に無し
よろしくお願いします
926デフォルトの名無しさん:2005/07/05(火) 11:27:20
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 代数方程式f(x)=x^3+2x^2+2x+2=0の区間[-2,0]における実数解を求めよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): VC++ 6.0
 [3.3] 言語:C++
[4] 期限:来週まで
[5] その他の制限:

なんとか、よろしくお願いします。
927919:2005/07/05(火) 11:38:15
すいません。せっかく作ってもらったところですがリザルトやnumなど
まだ習ってないのでそれを使用しないでお願いしますm(__)m
928デフォルトの名無しさん:2005/07/05(火) 11:42:38
>>927
resultやnumは変数名なので、どんな名前でもいいんですが。
929デフォルトの名無しさん:2005/07/05(火) 12:01:33
>>927
result,numの扱われ方を見れ
それでも変数だとわからないなら、一から勉強しれ
930デフォルトの名無しさん:2005/07/05(火) 12:02:21
笑った
931919:2005/07/05(火) 12:06:24
(´・ω・)あらら。ケータイからなんで詳しく見てなかった。
932デフォルトの名無しさん:2005/07/05(火) 12:30:44
このごろネタなのかゆとり教育の犠牲者か判らない奴が殖えたな。
933デフォルトの名無しさん:2005/07/05(火) 12:31:47
このごろゆとり教育という言葉を使いたがる奴も殖えたな。
934デフォルトの名無しさん:2005/07/05(火) 12:40:00
まぁバカって言ったら可愛そうだからな。文部省の犠牲者と言い換えてもかまわんよ
935デフォルトの名無しさん:2005/07/05(火) 13:49:56
プログラムに興味はないが単位は欲しいってヤツからすればそんなもんじゃないか?
936デフォルトの名無しさん:2005/07/05(火) 14:05:23
簡単に答えられる奴はきもい。
937デフォルトの名無しさん:2005/07/05(火) 14:55:05
>>936
ゆとり教育の弊害だよな
938デフォルトの名無しさん:2005/07/05(火) 15:02:58
簡単に答えられなくてきもいオレはどうすればいいんだ。
939デフォルトの名無しさん:2005/07/05(火) 15:10:05
>>938
簡単に答えられる様になるか
脱キモ
940デフォルトの名無しさん:2005/07/05(火) 18:36:26
>>937
大学にゆとり教育も何も関係ないがな
941877:2005/07/05(火) 18:36:31
>>885そろそろレポートのほうも書かないといけないので、できた部分まででもいので夜にでもUPしてくれませんか?
942デフォルトの名無しさん:2005/07/05(火) 18:37:34
>>940
いやまてレスの流れを見ろ
943デフォルトの名無しさん:2005/07/05(火) 18:39:43
[1]授業単元:プログラミング
[2]問題文:二つの整数の最大公約数を再帰を使って求めよ
[3]環境
[3.1]OS:INUX
[3.2]コンパイラ:gcc
[3.3]言語:C
[4]期限:7/10
よろしくお願いします
944デフォルトの名無しさん:2005/07/05(火) 18:41:46
>>943
LINUX
945デフォルトの名無しさん:2005/07/05(火) 18:42:49
ずいぶんトイレっぽいOSだなと思った
946デフォルトの名無しさん:2005/07/05(火) 18:54:28
>>940
ゆとり教育世代の程度が総じて低いなら、大学の講義も学生にあわせて程度が低くなる。
947デフォルトの名無しさん:2005/07/05(火) 19:19:36
>>946
大学は講義のレベルを下げるようなことはしない。
948デフォルトの名無しさん:2005/07/05(火) 19:27:27
日本の大学の程度が低いのなんて
明治時代からだろ
949デフォルトの名無しさん:2005/07/05(火) 19:32:03
大学なんてのは学生が勉強するとこじゃなくて教授の職場だろ?
950デフォルトの名無しさん:2005/07/05(火) 19:44:10
大学なんてのは学生が勉強するとこじゃなくて教授の遊び場だろ?
951デフォルトの名無しさん:2005/07/05(火) 19:45:32
>>947
いいえ。
952デフォルトの名無しさん:2005/07/05(火) 19:46:41
三流大学なら仕方ないな。
953デフォルトの名無しさん:2005/07/05(火) 19:51:07
名門でも三流でも同じだって。
名門大学では、大抵の場合、学生の大半がちゃんと理解しているから、講義の程度が変わらないというだけであって。
どんな大学の講義でも、大半の学生が理解してなさそうなことは、ちゃんと解説しているだろう?
954デフォルトの名無しさん:2005/07/05(火) 19:51:39
>>948
日本の大学の程度が低くなったのは戦後だよ。
955デフォルトの名無しさん:2005/07/05(火) 19:56:32
= = = = = = = 終 了 = = = = = = = =

続ける場合は学歴板
956デフォルトの名無しさん:2005/07/05(火) 20:07:22
>>943

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

int gdc(int m, int n) {
  if ((m % n) == 0) {
    return n;
  } else {
    return gdc(n, (m % n));
  }
}

    
int main(int argc, char **argv) {
  int num1 = 12;
  int num2 = 8;

  printf("gdc(%d,%d) = %d\n", num1, num2, gdc(num1, num2));

  return 0;
}
957891:2005/07/05(火) 20:17:29
>>894さん、ありがとうございましたm(_ _)m
958デフォルトの名無しさん:2005/07/05(火) 20:25:41
どなたか>>926をお願いできませんか・・・。
959デフォルトの名無しさん:2005/07/05(火) 20:47:27
<<926
#include<iostream>
int main(void){
std::cout << -1.543689013 <<std::endl;
return 0;
}
960デフォルトの名無しさん:2005/07/05(火) 21:01:19
>>926
#include <stdio.h>
int main()
{
  double x1, x0 = -1.0;
  double limit = 1.0e-20;
  double diff = 1.0;
  while(diff > limit)
  {
    x1 = x0 - ( x0 * (x0 + 2) + 2 + (2 / x0)) / (3 * x0 + 4 + (2/x0) );
    diff = x1 > x0 ? x1 - x0 : x0 - x1;
    x0 = x1;
  }
  printf("ans : x = %g\n", x1);
  return 0;
}
961960:2005/07/05(火) 21:04:08
10桁未満じゃ詰まらんな。

> printf("ans : x = %g\n", x1);



> printf("ans : x = %.20f\n", x1);

とでもして、表示桁数増やしてくれ。
962デフォルトの名無しさん:2005/07/05(火) 21:13:49
>>926
#include <iostream>
double f(double x) { return ((x+2)*x+2)*x+2; }
double s(double x, double gp)
{ return gp*gp > 1e-20 ? s(x + gp, f(x) * f(x+gp) < 0 ? -gp/2 : gp) : x; }
int main(void) { std::cout << s(0, -2) << endl; }
963デフォルトの名無しさん:2005/07/05(火) 21:15:12
×endl
○std::endl
964960:2005/07/05(火) 21:17:27
あ、C++だったか。
965926:2005/07/05(火) 22:20:35
>>959さん
>>960-961,964さん
>>962-963さん

ありがとうございます。お手数かけましたm(_ _)m
966デフォルトの名無しさん:2005/07/05(火) 22:59:06
[1] 授業単元: C/C++
[2] 問題文(含コード&リンク):
引数として2進数を文字列で渡すと、
16進数に変換し、文字列として返す関数を作る。
同様に引数を16進数、戻値を2進数で返す関数も作る。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): VC++6.0
 [3.3] 言語:C/C++/
[4] 期限:7月9日
[5] その他の制限:

文字列の扱いがどうにもわかりません・・・。
どうかよろしくお願いします。
967デフォルトの名無しさん:2005/07/05(火) 23:09:05
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
任意の整数nまでの和S(n)を求めるプログラムを再起的に関数を呼び出す形で書け
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7月7日まで
[5] その他の制限:
おねがいします
968デフォルトの名無しさん:2005/07/05(火) 23:21:25
>>967
整数じゃなくて自然数だが

#include <stdio.h>

int sum(int n)
{
    if (n == 0) return 0;
    else if (n == 1) return 1;
    return sum(n-1) + n;
}

main() { printf("%d\n", sum(10)); }
969デフォルトの名無しさん:2005/07/05(火) 23:25:31
復活の埋蔵金!!
でもあと30個はきついよ。
970デフォルトの名無しさん:2005/07/05(火) 23:39:33
>   else if (n == 1) return 1;
不要
971デフォルトの名無しさん:2005/07/06(水) 00:25:19
>>968
ありがとうございます
9722/1:2005/07/06(水) 01:20:40
>>966
#include <string>
#include <sstream>
using namespace std;
bool in_range(char x, char a, char b){ return x >= a && x <= b;}
// 2進→16進
string bin2hex(const string &src)
{
  stringstream ss;
  int tmp = 0;
  int limit2 = src.size() % 4;
  int limit1 = src.size() / 4 + (limit2 ? 1 : 0);
  if( limit2 == 0 ) limit2 = 4;
  for(int i = 0; i < limit1; ++i, limit2 = 4)
  {
    for(int j = 0; j < limit2; ++j)
    {
      if( ! in_range(src[j], '0', '1') ) throw string("bin2hex format error");
      tmp = ( tmp << 1 ) | (src[j] - '0');
      if( j % limit2 == (limit2-1) )
      {
        ss << hex << tmp;
        tmp = 0;
      }
    }
  }
  return ss.str();
}
9732/2:2005/07/06(水) 01:20:51
// 16進→2進
string hex2bin(const string &src)
{
  stringstream ss;
  for(int i = 0; i < src.size(); ++i)
  {
    char ch = -1;
    if( in_range(src[i], '0', '9') ) ch = src[i] - '0';
    else if( in_range(tolower(src[i]), 'a', 'f') ) ch = tolower(src[i]) - 'a' + 0xa;
    else throw string("hex2bin format error");
    for(unsigned char mask = 1 << 3; mask != 0; mask >>= 1) ss << !!(ch & mask);
  }
  return ss.str();
}
974デフォルトの名無しさん:2005/07/06(水) 01:32:53
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
2人が互いに座標を指定していくような○×クイズのプログラムをつくれ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7月7日
[5] その他の制限:

1年生なんですが、全くわかりません・・・orz
よろしくお願いします!
975デフォルトの名無しさん:2005/07/06(水) 01:43:06
あ、ちなみに3×3の○×クイズです!
座標というのは 1、3と入力したら左下、
2、2と入力したら真ん中にマークがつくということらしいです。
976デフォルトの名無しさん:2005/07/06(水) 01:55:58
>>441
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/670.zip
やっと終わった…
調子に乗って機能を詰め込んでたら3000行超えたw
多少メモリリークがあるけど勘弁してくれ。
質問があれば出来る限り答えようww
977デフォルトの名無しさん:2005/07/06(水) 01:59:48
>>974=975
貴様はまず○×クイズというものを知れ。プログラムより前に。
978デフォルトの名無しさん:2005/07/06(水) 02:07:59
[1] 授業単元:プログラミング(C言語)
[2] 問題文(含コード&リンク):
下記のような整数型配列において、以下の処理を行うプログラムの作成。
処理を行った後、配列の内容を出力する
#define YOUSO 10
int a[YOUSO] = {2,4,6,8,10,12,14,16,18,20} ;
int b[YOUSO] = {3,6,9,12,15,18,21,24,27,30} ;

(1)配列aの要素をすべて配列bに転送する
(2)b=a+bを配列内の要素毎に行う
(3)配列aの配列内順序を逆にして、配列bに転送する
(4)配列aと配列bの各要素を交換する

以上の処理を1つのプログラムで行うものを作れ、とのことです

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/
[4] 期限:7月8日まで
[5] その他の制限:どこまで習っているか、等々
配列処理までです
もうなにがなんだかわけわからなくなってだめぽ、状態です
ほとんど丸投げで申し訳ないですがどうぞ力を貸してください
979デフォルトの名無しさん:2005/07/06(水) 02:08:59
これはクイズじゃないからな、念のため
○│×│○
─┼─┼─
×│○│○
─┼─┼─
×│○│×
980デフォルトの名無しさん:2005/07/06(水) 07:09:21
981デフォルトの名無しさん:2005/07/06(水) 07:55:47
>>980
素早いレスdクスです!
でも、明らかにまだ習ってない関数が使われてるようです・・
関数、ポインタはまだ習ってませんorz
こちらの情報が少なすぎたみたいですいません!
982デフォルトの名無しさん:2005/07/06(水) 08:06:00
>>972

うわー、なるほど。
ありがとうございました
983デフォルトの名無しさん:2005/07/06(水) 10:08:39
[1] 授業単元:プログラミングC言語
[2] 問題文(含コード&リンク): int型整数の三乗値を返す関数はint cube(int x) {/*・・・*/}
を作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:今日午後一時まで

984デフォルトの名無しさん:2005/07/06(水) 10:28:17
マルチUzeeeeeeeeeeeeeeee
985デフォルトの名無しさん:2005/07/06(水) 10:30:25
(ノ・ェ・ヽ) キューン
 U  U
986デフォルトの名無しさん:2005/07/06(水) 10:37:43
>>983
http://pc8.2ch.net/test/read.cgi/tech/1119435171/974,979
これか!

int cube(int x) { return x * x * x(ry

といいつつ簡単すぎるので書いてしまった
987デフォルトの名無しさん:2005/07/06(水) 10:40:55
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
>>968のS(n)は
S(1) S(2) S(3) S(4)
。 。 。 。
。。 。。 。。
。。。 。。。
。。。。
と並べることでわかるように三角関数と呼ばれる。
このようなひと目でわかる出力する関数を付け加えよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7月7日
[5] その他の制限:
宜しくおねがいします
988デフォルトの名無しさん:2005/07/06(水) 11:00:17
[1] 授業単元:プログラミング演習I
[2] 問題文:
65 91 39 31 55 76 55 52 63 71
39 38 60 59 65 70 45 51 61 44
-1

上のデータ(一番最後の -1 はデータの終りを表すものとする。)を

main() 関数などで適当な実数配列 a に読み込んだとしよう。このとき配列 a[] とその要素数 n を関数の引数として渡すことによって平均、標準偏差、最高点、最低点が計算できる。
そこで、

a の平均点を求める関数: double mean( double a[], int n )
a の標準偏差を求める関数: double stddev( double a[], int n )
a の最高点を求める関数: double max_array( double a[], int n )
a の最低点を求める関数: double min_array( double a[], int n );
を作成し、これらの関数の返してきた値を表示しなさい。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:7/12まで
[5] その他の制限:「関数と配列について」まで習いました。構造体などはまだ習っていません。

データを読み込む前のプログラムだけでいいので、どなたかご教授お願いします。
989デフォルトの名無しさん:2005/07/06(水) 11:09:05
>>987
なにがなんだかさっぱりわからん
その図からひと目ではなにもわからん
三角関数ってsinとかcosだろ?
もしかして、こうか?

S(1)  S(2)  S(3)  S(4)
。   。   。   。
    。。  。。  。。
        。。。 。。。
            。。。。
990デフォルトの名無しさん:2005/07/06(水) 11:15:13
[1] C言語
[2] 100桁同士の正整数の積を 「筆算をまねる方法(1桁ずつ乗算)」
  を用いて計算するプログラムを作成せよ.
  プログラムは以下の仕様に従うこと:

  プログラムは,標準入力から 100 桁以下の正整数を2つ受け取り,
  その積を標準出力に出力する.

   例:
     % ./bignum1
      123456
      123
      15185088
[3] OS:Linux
[4] 期限:7/8(金)午後一時まで
[5]雛形はあるので、雛形の「// ここを頑張ってつくる」
  のところをお願いします
991デフォルトの名無しさん:2005/07/06(水) 11:17:32
#include <stdio.h>
#include <string.h>
#define MAX_FIGS 200 // 最大桁数 (100桁*100桁の計算は200桁まで)

// 長大数を表す構造体
typedef struct {
char fig[MAX_FIGS]; // 長大数を各桁ごとに格納
int numFigs; // 最大桁数
} BIGNUM;

void readBigNum(BIGNUM *n);
void printBigNum(BIGNUM *n);

int main(int argc, char *argv[])
{
BIGNUM x, y;
readBigNum(&x);
readBigNum(&y);

// ここを頑張ってつくる

return 0;
}
992デフォルトの名無しさん:2005/07/06(水) 11:18:45
/* 標準入力から長大数を1つ読み込む
* 引数: n - 長大数へのポインタ(格納先)*/
void readBigNum(BIGNUM *n)
{
int i, j;
char str[MAX_FIGS];

// 読み込み
scanf("%s\n", str);

// 長大数に変換する
 // 長大数 n の初期化
bzero(n, sizeof(BIGNUM));

// 下位の桁から順次取り出す
for (i=strlen(str)-1, j=0; i >= 0; i--, j++)
n->fig[j] = str[i] - '0';

// 最大桁数
n->numFigs = j;
}
993デフォルトの名無しさん:2005/07/06(水) 11:19:16
/*
* 長大数を標準出力へ書き出す
* 引数: n - 長大数へのポインタ
*/
void printBigNum(BIGNUM *n)
{
int i;

// 先頭の0は無視する
for (i=n->numFigs - 1; i >= 1; i--)
if (n->fig[i] != 0)
break;

// 長大数の表示
for ( ; i >= 0; i--)
printf("%c", n->fig[i] + '0');
printf("\n");
}
994デフォルトの名無しさん:2005/07/06(水) 11:35:34
>>988
ふー、危うく埋まるとこだった。
とりあえずやっといた。
ほい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/675.txt
995ななすぃ:2005/07/06(水) 11:39:02
[1] 授業単元:プログラミングC言語
[2] 問題文(含コード&リンク):配列のデータ構造を実現するプログラムを
  数パターン作成する
・データの挿入、削除、表示が可能であること。
・配列に代入するデータは整数型とする。
・プログラムの仕様(関数への入出力、表示方法など)は自由とする
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Borland C++ Compiler5.5
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:7月9日昼まで
[5] その他: できるだけ早くお願いします。それとよろしければ簡単な注釈
も書いていただければうれしいです。
996デフォルトの名無しさん:2005/07/06(水) 11:54:47
>>989
それです。
図が変になってしまってすいません。
997デフォルトの名無しさん:2005/07/06(水) 12:24:42
>>990

BIGNUM * multiplyBigNums( const BIGNUM * x, const BIGNUM * y, BIGNUM * z );

int main()
{
  :
  // ここを頑張ってつくる
  multiplyBigNums( &x, &y, &z );
  printBigNum( &z );
  return 0;
}

BIGNUM * multiplyBigNums( const BIGNUM * x, const BIGNUM * y, BIGNUM * z )
{
  int i, j, k;
  memset( z, 0, sizeof( BIGNUM ) );
  z->numFigs = x->numFigs + y->numFigs;
  
  for ( i = 0; i < x->numFigs; i ++ )
    for ( j = 0; j < y->numFigs; j ++ )
    {
      k = i + j;
      z->fig[ k ] += x->fig[ i ] * y->fig[ j ];
      z->fig[ k + 1 ] += z->fig[ k ] / 10;
      z->fig[ k ] %= 10;
    }
  
  return z;
}
998デフォルトの名無しさん:2005/07/06(水) 12:33:41
>>987
for (i = 1; i <= n; i ++)
{
  for (j = i; j > 0; j --)
    printf( "。" );
  
  printf( "\n" );
}

あれ、もしかしてこれも再帰使うとか?
っていうか、もういいかげん次スレでやろう。
注文あったら次スレで。
http://pc8.2ch.net/test/read.cgi/tech/1120522752/
999デフォルトの名無しさん:2005/07/06(水) 12:44:44
999
1000デフォルトの名無しさん:2005/07/06(水) 12:44:59
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。