C/C++の宿題を片付けます 87代目at TECH
C/C++の宿題を片付けます 87代目 - 暇つぶし2ch2:デフォルトの名無しさん
07/05/13 12:25:31
プルグラマは数学が苦手

3:デフォルトの名無しさん
07/05/13 12:42:40
>>2
そうでもない

4:デフォルトの名無しさん
07/05/13 13:48:57
マスまてぃくす

5:デフォルトの名無しさん
07/05/13 19:52:57
test

6:デフォルトの名無しさん
07/05/13 20:34:33
1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):

英文が書かれたテキスト文章をファイルオープンで開いてchar型の配列に格納する。
そして、英文をすべて大文字に変えてから、標準出力せよ。
テキストファイルの最後まできちんと読み込むこと。

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

お願いします

7:デフォルトの名無しさん
07/05/13 23:20:30
>>6
#include <stdio.h>
int main(int argc, char *argv[])
{
  FILE *fd;
  char ch;
  if (argc < 2) {
    fprintf(stderr,"[usage] %s infile\n",argv[0]);
    return -1;
  }
  if (!(fd = fopen(argv[1],"r"))) {
    fprintf(stderr,"cannot open %s\n",argv[1]);
    return -1;
  }
  while (fread(&ch,1,1,fd)==1) printf("%c",('a'<=ch)&&(ch<='z')?(ch-'a'+'A'):ch);
  fclose(fd);
  return 0;
}

8:デフォルトの名無しさん
07/05/13 23:25:20
>>7
マルチバイト文字のチェックはなし

9:デフォルトの名無しさん
07/05/13 23:54:15
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):

#include<stdio.h>

void main()
{
double X;
double Y;

printf("長さ(cm):");
scanf("%lf",&X);

Y=X / 2.54;

printf("%f(cm)は%(inch)です。",X,Y);
}
表示結果が小数点以下の余分な0を表示させないようにして下さい。
例)2.54000(cm)は1.00000(inch)です。×
  2.54(cm)は1(inch)です。〇
[3] 環境
 [3.1] OS: Win XP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 来週中
[5] その他の制限: 特になし
宜しくお願いします


10:デフォルトの名無しさん
07/05/13 23:56:23
%gでいいんじゃない

11:デフォルトの名無しさん
07/05/14 00:02:58
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク)
バブルソートを用いて構造体に対して、データが格納された構造体配列を
学生証番号で降順にソートする関数sortIDと点数で降順にソートする関数sortEngを作成しなさい。

データの入力は、関数input_seiseki_pを呼び出して行い、次に「どちらで整列しますか(1:学生証番号、2:点数):」と表示し
その入力により関数sortIDと関数sortEngを選択肢、その結果を関数seisekiを使って表示する関数meinを作りなさい

上記の問題において私なりに途中まで作ってみたのですが、
ここから先がわかりません。。

どなたかお知恵を拝借させて下さい

URLリンク(kansai2channeler.hp.infoseek.co.jp)
↑途中まで作ったソースです。
間違っている部分もあるかと思われますが;;


[3] 環境
 [3.1] OS: Win XP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 明日(14日)
[5] その他の制限: 特になし

よろしくお願いします。

12:9
07/05/14 00:15:12
>>10
ありがとうございました!

13:デフォルトの名無しさん
07/05/14 04:24:59
[1] 授業単元:C言語 ゲーム製作入門
[2] 問題文(含コード&リンク):
~ 第3回課題 ~
今回はオセロの盤面の表示を行う部分の作成を行う。
授業中に配布、および作成したプログラムのうち
init.cファイル、及びboard_show.cファイルのソース内の第3回課題と書かれた部分に
必要な処理を追加しなさい。
処理や変数に簡単なコメントを付け加えること。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 水曜2限
[5] その他の制限: 配列、ポインタ、構造体などといった基本的な事項は一通り学んでいます

よろしくお願いします。

14:デフォルトの名無しさん
07/05/14 17:41:07
>>7
>6には「char型の配列に格納」と書いてあるよ。

15:デフォルトの名無しさん
07/05/14 17:53:55
>>13
こんなかんじか?
URLリンク(kansai2channeler.hp.infoseek.co.jp)

16:デフォルトの名無しさん
07/05/14 18:07:37
[1] 授業単元:計算実習
[2] 問題文(含コード&リンク):
乗算合同法を用いて擬似乱数を作成し、Box-Muller法により平均0、分散1の正規乱数系列に
変換した場合に(1×10^6)個の系列から以下の方法で確率密度関数を推定し、ガウス分布
p(x) = {1 / (2π)^(1/2) } × exp(-x^2 / 2)
と比較せよ。
~確率密度関数の推定~
確率密度関数p(x)とした場合に確率密度関数のヒストグラムからの推定値は以下で与えられる。
p(x_i) = {N(x_i - Δ/2 ; x_i + Δ/2)} / MΔ
ここで、N(x_1 ; x_2)は区間(x_1 , x_2] に含まれる個数を表し、Mはサンプル数、Δはヒストグラムの
刻み幅である。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2007年5月28日
[5] その他の制限: 特にありません

よろしくお願いします。

17:デフォルトの名無しさん
07/05/14 18:12:54
>>13のやつは、グローバル空間が不必要に使われてたから
書き直して途中でやめた。

18:デフォルトの名無しさん
07/05/14 19:21:52
[1] 授業単元:アルゴリズム論Ⅰ
[2] 問題文(含コード&リンク):
下記に示すファイルを読み込み、配列に格納し探索対象のデータとする。
ファイル名:/home/sample/tanaka/integer.dat
integer.datには下記のように1から100000の整数が昇順に入っている。
1
3
46
125
365



100000
下記の2組の整数(探索値を設定する(main関数の変数に格納し、printf文で表示する。
(1)表中にある整数:5個
(2)表中にない整数:5個
これらの探索値を下記の2つの探索アルゴリズムを用いて探索し、このときの比較回数を
記録する。
(1)逐次探索法
(2)二分探索法
下記の要件を必ず満たすようにプログラムを作成せよ。
(1)最初に読み込むファイル名は絶対パスとしてmain関数内で記述せよ。
(2)比較回数等、測定結果をプログラムの最後に出力せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2007年5月17日
[5] その他の制限: 特にありません
main関数は大体は書けたのですが探索法がよく分からず関数の受け渡しがうまくいきません。
よろしくお願いします。

19:デフォルトの名無しさん
07/05/14 19:26:05
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):
標準入力された生徒データ(番号、名前(半角英字20文字以内)、年齢、血液型)を
文字型で宣言し、入力したデータをリストデータで管理するシステムを作成せよ。
生徒データ管理の機能として「データ入力」「データ削除」「データ表示」「終了」
の機能を用意すること。また以下の仕様を守ること。
「データ削除」機能は番号、名前、年齢、血液型をキーとして削除できるようにすること。
「データ表示」機能は番号順、年齢順、名前順、血液型順を昇順で表示が可能であること。
無駄な領域を使用しない。(malloc関数を使用すること)
確保した領域はポインタによるチェーン構造でデータを管理すること。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年5月16日
[5] その他の制限: 自己参照構造体、チェーン構造を用いること

よろしくお願いします。

20:せんしぇ~ ◆cNsKLREitk
07/05/14 19:26:43
二分探索じゃなくて
二分木探索って言うんだけど・・・



21:デフォルトの名無しさん
07/05/14 19:31:43
二分探索であってる。
アホコテはこれ以上恥かかないうちに消えたほうがいいよプゲラ

22:18
07/05/14 19:32:33
途中まで書いたmain関数です。
#include<stdio.h>
#include<stdlib.h>
#define SIZE 1000000
main(){
int i=0;
int integer[SIZE];
char filename[80];
FILE *fp;
int a[5],b[5];a[0]=1;
a[1]=20; a[2]=43; a[3]=54; a[4]=62;
b[0]=2; b[1]=21; b[2]=44; b[3]=55; b[4]=63;
printf("表中にある整数:%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4]);
printf("表中にない整数:%d %d %d %d %d\n",b[0],b[1],b[2],b[3],b[4]);
sprintf(filename,"/home/s063831/home/sample/gotoh/integer100KS.dat");
if(NULL==(fp=fopen(filename,"r"))){
printf("\n %s can not be open\n",filename);
exit(1);}
while(fscanf(fp,"%d",&integer[i])!=EOF)
i++;
fclose(fp);
}

23:6
07/05/14 21:48:07
>>7
配列に格納しないと駄目なんですが・・・・

24:デフォルトの名無しさん
07/05/14 22:23:42
1] 授業単元: プログラミングⅡ
[2] 問題文(含コード&リンク):
問題↓
URLリンク(kansai2channeler.hp.infoseek.co.jp)

プログラム例↓
URLリンク(kansai2channeler.hp.infoseek.co.jp)

出力例↓
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月15日午前3時くらいまでにお願いします。

よろしくお願いします。

25:デフォルトの名無しさん
07/05/14 22:47:50
[1] 授業単元:構造化プログラミング実習
[2] 問題文(含コード&リンク):n進数を入力するとを10進数に変換し表示するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
[4] 期限:2007年5月16日まで

よろしくお願いします。

26:デフォルトの名無しさん
07/05/14 22:50:58
>>25
も一回勉強し直した方がよいと思われ

27:デフォルトの名無しさん
07/05/14 23:20:48
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
読み込んだファイルの内容を16進ダンプし、新しいファイルに出力しなさい。
ただし、読み込むファイルの最大サイズは2MBまであり
最大サイズのファイルを与えられた場合も出力は5秒程度で終わること。

[3] 環境
 [3.1] OS:Windows 2000/XP
 [3.2] コンパイラ名とバージョン:VC++ 6.0
 [3.3] 言語:C++
[4] 期限:2007年5月16日まで


挑戦課題の一つです。
エラー処理はそこそこでいいので、速ければ速いだけ良い、という問題です。

ダンプするだけならたいしたことないのですが、
CString を使って1バイトごとに変換していくと、
1MB処理するのに80秒とかかかってしまいます。

高速なアルゴリズムをよろしくお願いします。


28:デフォルトの名無しさん
07/05/14 23:24:42
>>27の補足ですが、
入力32バイトごとに改行する必要があります。

なので、出力フォーマットは一行64バイト+改行コードとなり、

xxxx....xxxx
xxxx....xxxx
xxxx....xxxx

のかたちになります。すみません。


29:デフォルトの名無しさん
07/05/14 23:25:34
>>27
32倍以上速いPCを用意しる!!!!

30:デフォルトの名無しさん
07/05/14 23:25:49
>>27
>速ければ速いだけ良い、という問題です。 

おっ!
これは面白そうな課題ではないか・・・


31:デフォルトの名無しさん
07/05/14 23:29:59
入力ファイルはバイナリ?
出力ファイルはテキスト?

32:デフォルトの名無しさん
07/05/14 23:32:26
>>29
80秒を出した環境ってのはCele3.2GHz、メモリ0.99GBなんです…。

>>31
はい、そのとおりです。
(「どちらにも対応できればいいね~。」みたいなことは言ってましたが、
とりあえずそこは無視です。)


33:デフォルトの名無しさん
07/05/14 23:47:07
どちらにもってどういう事?

34:デフォルトの名無しさん
07/05/14 23:49:05
>>33
入力ファイルはテキストファイルでもいい…

ってことだったと思うのですが、
課題に取り組んでいてちゃんと聞いていなかったのです。
もうしわけ。

35:デフォルトの名無しさん
07/05/14 23:50:13
今のそのソースをうpする気はない?

36:デフォルトの名無しさん
07/05/14 23:55:28
>>27
とりあえずC言語でやってみた。後でC++に書き直してみる。
IO回数を減らせばもっと早くなる!(fwriteの回数を減らすだけ)

#include<stdio.h>
int main(void){
    char hexstr[256][3];
    char *fname_in="in.dat", *fname_out="out.dat";
    FILE *fp_in, *fp_out;
    unsigned char buf[32*1024];
    int i, read_size, lf_len;

    for(i=0;i<256;i++) sprintf(hexstr[i], "%02X", i);

    fp_in=fopen(fname_in, "rb");
    fp_out=fopen(fname_out, "w");
    if(fp_in==NULL || fp_out==NULL) return 1;
    for(;;){
        read_size=fread(buf, 1, sizeof(buf), fp_in);
        if(read_size<=0) break;
        for(i=0;i<read_size;i++){
            fwrite(hexstr[buf[i]], 2, 1, fp_out);
            if((i+1)%32==0)
                fwrite("\n", 1, 1, fp_out);
        }
    }
    fclose(fp_in);
    fclose(fp_out);

    return 0;
}

37:デフォルトの名無しさん
07/05/14 23:56:16
>>35
80秒かかるやつですか?
今、手元にないです。
ちゃんと思い出そうにも思い出せません。

CFile fp
fp.Open(バイナリなどなど);

fp.Read(配列);
CString out = ""+
for(i = 0; i < size; i++) {
CString tmp = 配列のi番目の要素;
tmp.Format("%02X");
out += tmp;

で、outをWriteして終わり
とか、こんな感じでした。
CStringを連発しているのが悪いんだろうなぁとは思うのですが…。


38:デフォルトの名無しさん
07/05/15 00:02:47
無いならいいや。
環境が変わると速度が変わるから比較したかっただけ。

39:デフォルトの名無しさん
07/05/15 00:05:25
#include<cstdio>
using namespace std;
int main()
{
FILE *rfp, *wfp;
unsigned char data[32];
size_t i, size;
rfp = fopen("in.bin","rb");
wfp = fopen("out.txt","w");
while(1)
{
size = fread(data, 1, 32, rfp);
for(i=0; i<size; ++i)
fprintf(wfp, "%02X", data[i]);
fprintf(wfp, "\n");
if(size != 32) break;
}
fclose(wfp);
fclose(rfp);
return 0;
}
かなり適当。もしかしたら遅いかも。それ以前に動かないかも。

40:デフォルトの名無しさん
07/05/15 00:07:58
URLリンク(kansai2channeler.hp.infoseek.co.jp)

よろしくお願いします。

41:デフォルトの名無しさん
07/05/15 00:09:47
>>36のコード動かしてみたら1秒もかからないんだが

42:41
07/05/15 00:11:25
Athlon64X2 4200+ RAM1GB

43:デフォルトの名無しさん
07/05/15 00:12:20
>>27
これでどう?
#include <stdio.h>
char hex_u[] =
 "0000000000000000" "1111111111111111" "2222222222222222" "3333333333333333"
 "4444444444444444" "5555555555555555" "6666666666666666" "7777777777777777"
 "8888888888888888" "9999999999999999" "AAAAAAAAAAAAAAAA" "BBBBBBBBBBBBBBBB"
 "CCCCCCCCCCCCCCCC" "DDDDDDDDDDDDDDDD" "EEEEEEEEEEEEEEEE" "FFFFFFFFFFFFFFFF";
char hex_l[] =
 "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF"
 "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF"
 "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF"
 "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF";


44:43
07/05/15 00:13:30
続き
int main(int ac, char *av[])
{
 FILE *s, *d;
 if (ac == 3 && (d = fopen(av[1], "wb")) != NULL && (s = fopen(av[2], "rb")) != NULL &&
  setvbuf(s, NULL, _IOFBF, 0x100000) == 0 && setvbuf(d, NULL, _IOFBF, 0x100000) == 0)
  while (1) {
   int c;
#define W if ((c = getc(s)) == EOF) break; putc(hex_u[c], d), putc(hex_l[c], d)
   W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;
   putc('\r', d); putc('\n', d);
  }
 return 0;
}


45:デフォルトの名無しさん
07/05/15 00:20:13
やっべw
ハッカーすぎて、何してるのか頭が追いつかないw

46:デフォルトの名無しさん
07/05/15 00:23:36
問題は実際に速いかどうかだな。

誰か測定よろ。

47:デフォルトの名無しさん
07/05/15 00:23:54
だよなぁ、CPUの性能によって処理時間なんて差が出るし・・・
まぁ、いかに効率の良いアルゴリズムを用いることができるかなら
比較すりゃ良いけど、漠然と決められた時間ってのは、高性能なCPUを
用いるのが一番早いw

48:41
07/05/15 00:26:40
>>39のは2秒弱
>>43-44のも1秒かからんかった

49:デフォルトの名無しさん
07/05/15 00:27:57
体感的な表現だが、
>>43のは本当に処理してるのか不安になるくらい速い。

このW;連発のが、for(i = 0; i < 32; i++)よりも速くなるものなの?

50:デフォルトの名無しさん
07/05/15 00:28:07
同じく>>36で1秒かからない

Core2Duo T5500
2048M

51:デフォルトの名無しさん
07/05/15 00:31:17
>>43-44
ファイル出力してる?

52:デフォルトの名無しさん
07/05/15 00:33:12
>>51
第一引数が出ファイルで第二引数が入力ファイルでないの?

53:デフォルトの名無しさん
07/05/15 00:34:39
[1] 授業単元:中級C言語
[2] 問題文(含コード&リンク)
英単語とその和訳の辞書ファイルta.docとしてエディタで作成する。
辞書ファイルの形式は以下の通りで、単語の品詞は考えない。
プログラムの機能としては英単語を入力すると対応する和訳を表示。
「q」を入力したら終了。

/*ta.doc
dog, 犬
cat, 猫
pig, 豚
*/
/*実行例
英和辞典
英単語:cat
日本語で「猫」
英単語:q
終了

[3] 環境
 [3.1] OS: Win XP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 5月16日AM:11:00まで
[5] その他の制限: 特になし

よろしくお願いします

54:デフォルトの名無しさん
07/05/15 00:35:21
してるがな。

55:39
07/05/15 00:35:44
>>48
モバイルPentiumIII 1GHzで2MB弱のファイルが3秒かかった・・・
やっぱ適当に作ったらいかんな

56:41
07/05/15 00:36:59
あ、ごめん間違えた。
指定した入力と出力ファイルが逆だったから処理されてなかった。
あらためてやったら>>43-44は2秒弱

57:デフォルトの名無しさん
07/05/15 00:43:32
#include <cstdio>
#include <string>
#include <windows.h>
using namespace std;
int main(int argc, char **argv)
{
  if (argc < 3) return 1;
  HANDLE fin = CreateFile(argv[1], GENERIC_READ, 0, 0, 3, 0, 0);
  if (fin == (HANDLE)-1) return 1;
  HANDLE fout = CreateFile(argv[2], GENERIC_WRITE, 0, 0, 2, 0, 0);
  if (fout == (HANDLE)-1) return 1;
  static char *hextab = "0123456789abcdef";
  unsigned char buff[0x2000], obuff[0x5000], *p;
  DWORD i, j, dwRead, dwWritten;
  while (ReadFile(fin, buff, sizeof buff, &dwRead, 0) && dwRead > 0) {
    for (i = j = 0, p = obuff; i < dwRead; ++i, j = (j + 1) % 0x20) {
      *p++ = hextab[buff[i] >> 4];
      *p++ = hextab[buff[i] & 0xf];
      if (j == 0x1f) *p++ = '\r', *p++ = '\n';
    }
    WriteFile(fout, obuff, p - obuff, &dwWritten, 0);
  }
  CloseHandle(fin), CloseHandle(fout);
  return 0;
}

58:36
07/05/15 00:46:27
>>27 もっと高速化!
#include<stdio.h>
int main(void){
    short tmp[2], hexvalue[256];
    char *fname_in="in.dat", *fname_out="out.dat";
    FILE *fp_in, *fp_out;
    unsigned char buf[32*1024];
    short buf_out[sizeof(buf)+sizeof(buf)/32];
    int i, j, read_size;

    for(i=0;i<256;i++){sprintf((char *)tmp, "%02X", i);hexvalue[i]=tmp[0];}
    sprintf((char *)tmp, "%c%c", 0x0d, 0x0a);

    fp_in=fopen(fname_in, "rb");
    fp_out=fopen(fname_out, "wb");
    if(fp_in==NULL || fp_out==NULL) return 1;
    for(;;){
        read_size=fread(buf, 1, sizeof(buf), fp_in);
        if(read_size<=0) break;
        for(i=0,j=0;i<read_size;i++)
        {
            buf_out[j++]=hexvalue[buf[i]];
            if((i+1)%32==0)
                buf_out[j++]=tmp[0];
        }
        fwrite(buf_out, 2, j, fp_out);
    }
    fclose(fp_in);
    fclose(fp_out);

    return 0;
}

59:デフォルトの名無しさん
07/05/15 00:48:03
>>57 これも速いな

60:デフォルトの名無しさん
07/05/15 00:49:40
>>43のはMTなlibcとリンクしてしまうとgetc()/putc()で排他がかかって
遅くなると思う。

61:デフォルトの名無しさん
07/05/15 00:58:00
みんなiostreamに見向きもしないのがワロタ
やっぱ遅いすか

62:デフォルトの名無しさん
07/05/15 01:01:40
っていうか、このレベルになると、もうディスク次第じゃね?
プログラムがいくらがんばっても仕方ないかも・・・


63:デフォルトの名無しさん
07/05/15 01:06:16
>>62
だね。短期的な処理はほとんど差が出ないけど、長期化すると出るものとなると
もはや高性能なハードウェアを使うのが望ましいってなるだろうね・・・

64:デフォルトの名無しさん
07/05/15 01:09:55
>>27
ファイルを読んで何もしないで出力するだけなら
5秒を切れるプログラムは書けるよね?

65:>53
07/05/15 02:44:24
やっつけ
#include <stdio.h>
#include <string.h>
int main(void)
{
    char w[1024]={0};
    puts("英和辞典");
    do{ printf("英単語:"); fscanf(stdin,"%s",w);
        if(strcmp(w,"q")==0) break;
        else{
            char buf[1024]={0};
            FILE *fin = fopen("ta.doc","rb");
            while(fgets(buf, sizeof(buf), fin)!=NULL){
                *(strchr(buf, ','))='\0';
                if(strcmp(buf,w)==0){
                    *(strrchr(&buf[strlen(w)+1], '\n'))='\0';
                    printf("日本語で「%s」\n", &buf[strlen(w)+1]);
                }
            }
            fclose(fin);
        }
    }while(1);
    return 0;
}


66:暗号
07/05/15 03:26:31
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
1.英文を入力するとその暗号文が出力されるプログラムの作成
入力:文字列(英文)
出力:文字列(数字)
2.暗号文を元の英文に戻すプログラムの作成
入力:文字列(数字)
出力:文字列(英文)
暗号は換字暗号でよい。[アルファベット(a~z)、スペースを数字(00~26)、スペースを対応させる]例a⇔23、b⇔09、c⇔17…
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 火曜日の夕方、もしくは水曜日の朝まで
[5] その他の制限: ループ(forやwhile)、配列を使って作成する

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

67:デフォルトの名無しさん
07/05/15 06:16:21
>25
前スレにあった奴
const int aaCharToInt[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,
25,26,27,28,29,29,30,31,32,33,34,35, 0, 0, 0, 0,
0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,
25,26,27,28,29,30,31,32,33,34,35,35, 0, 0, 0, 0, };

int n2dec(int n, char *p) {
int ret = 0, flag = 1;
if(*p=='-') flag = -1;
while(*p) {
ret = ret * n + aaCharToInt[*p];
p++;
}
return ret * flag;
}


68:デフォルトの名無しさん
07/05/15 06:30:13
あの…>>24お願いできないでしょうか…?

69:デフォルトの名無しさん
07/05/15 06:45:04
>>65
ありがとうございました ぺこ <(_ _)>

70:デフォルトの名無しさん
07/05/15 06:54:18
>68
半角と全角の区別もつかない奴が催促するなんて百年はえーよ

71:デフォルトの名無しさん
07/05/15 07:27:43
>68
int output_1[M][N], output_2[N][M], output_3[N][M], output_4[M][N*3];
printf("----- Original -----\n");
for(i=0; i<M; i++) for(j=0; j<N; j++) output_1[i][j] = input[i][j];
for(i=0; i<M; i++) {
   for(j=0; j<N; j++) {
      if(output_1[i][j]) printf("*");
      else printf(" ");
   }
   printf("\n");
}
printf("----- Rotation left 90゚ -----\n");
for(i=0; i<N; i++) for(j=0; j<M; j++) output_2[i][j] = input[j][N-1-i];
for(i=0; i<N; i++) {
   for(j=0; j<M; j++) putchar(output_2[i][j] ? '*' : ' ');
   putchar('\n');
}
printf("---- Transposition -----\n");
for(i=0; i<N; i++) for(j=0; j<M; j++) output_3[i][j] = input[j][i];
for(i=0; i<N; i++) {
   or(j=0; j<M; j++) putchar(output_3[i][j] ? '*' : ' ');
   putchar('\n');
}
printf("---- Expansion -----\n");
for(i=0; i<M; i++) for(j=0; j<N*3; j++) output_4[i][j] = input[i][j/3];
for(i=0; i<M; i++) {
   for(j=0; j<3*N; j++) putchar(output_4[i][j] ? '*' : ' ');
   putchar('\n');
}


72:18
07/05/15 08:33:31
どなたか教えていただけないでしょうか?

73:デフォルトの名無しさん
07/05/15 08:39:28
>>72
データは?

74:デフォルトの名無しさん
07/05/15 08:45:14
>>73
フォーマットは分かってるんだから別に必要ない気がするぞ。

75:デフォルトの名無しさん
07/05/15 08:49:08
フォーマットはわかってるんだから自分で作れと?
>>18の場合はそんなに面倒じゃなさそうだけど・・・

76:デフォルトの名無しさん
07/05/15 08:53:44
>>40もお願いします

77:デフォルトの名無しさん
07/05/15 08:54:48
>>76
>>1読んで書き直し

78:デフォルトの名無しさん
07/05/15 08:55:48
txtの下の方に書いてあったのね、スマソ

79:デフォルトの名無しさん
07/05/15 10:02:18
カプセル化はなぜ必要なんですか?って課題です

80:デフォルトの名無しさん
07/05/15 10:10:08
>>27
今更だけどC++化した。1.5秒ほどで終了する。

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <iomanip>
int main(void)
{
char hexstr[256][3];
char *fname_in = "in.dat", *fname_out = "out.dat";
unsigned char buf[32 * 1024];
int i;
std::ostringstream str;
str << std::hex << std::uppercase;
for (i = 0; i < 256; i++) {
str << std::setw(2) << std::setfill('0') << i << '\0';
}
str << std::dec << std::nouppercase;
std::memcpy(hexstr, str.str().c_str(), 256 * 3);
std::ifstream fp_in(fname_in, std::ios::in | std::ios::binary);
std::ofstream fp_out(fname_out, std::ios::out | std::ios::trunc);
if (!fp_in || !fp_out)
return 1;
for (;;) {
if (!fp_in.get(reinterpret_cast<char*>(buf), sizeof(buf)))
break;


81:デフォルトの名無しさん
07/05/15 10:10:47
str.str("");
for (i = 0; i < static_cast<int>(sizeof(buf)); i++) {
str << hexstr[buf[i]];
if ((i + 1) % 32 == 0)
str << "\n";
}
fp_out << str.str();
}
}

ただし出力にostringstreamを使っても使わなくても速度はほとんど
変わらないようだ。

82:デフォルトの名無しさん
07/05/15 10:41:35
>>80
俺の所では0.5秒ほどだった。
C++でも結構速いな。

83:ニュートン・ラフソン法
07/05/15 10:45:16
次の式をN-R法でとけ、ε=10^-2(←0.1以下に収束),
(x1[0],x2[0]) = (0.8,0.2)とする。

f1 = x1^2 + x2^2 -1
f2 = x1 + x2 -1

とありますが、先生から提示されたヒントとして
「まずx1を微分してx2を微分してその後に初期値を入れる」
といわれましたが、どうのように微分をしたらよいのかわかりません

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] bcc32
 [3.3] 言語: C言語
期限は今日中です><

教えてください!

84:デフォルトの名無しさん
07/05/15 10:46:47
プルグラマは数学が苦手

85:ニュートン・ラフソン法
07/05/15 11:18:24
そうですか...

どうもありがとうございます

86:デフォルトの名無しさん
07/05/15 11:27:16
x1で微分というのは偏微分の事だろ

df1/dx1 = d(x1^2 + x2^2 -1)/dx1 = 2*x1
df1/dx2 = d(x1^2 + x2^2 -1)/dx2 = 2*x2


df2/dx1 = 1
df2/dx2 = 1


87:デフォルトの名無しさん
07/05/15 11:34:33
変微分の記号は違うだろ

88:デフォルトの名無しさん
07/05/15 12:01:07
>>83
↓これの式を変えればいいんでない。
URLリンク(www.geocities.jp)

89:デフォルトの名無しさん
07/05/15 12:31:21
>>88
すげえなこんなのどっから見つけてくるんだよ。

取り敢えずやってみたらX1=1.0、X2=0.0となった。
別解としてX1=0.0、X2=1.0というのもあるはずだが、ニュートン法なので
一つしか出ないのだろう。

90:デフォルトの名無しさん
07/05/15 14:14:00
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):乗算合同法を用いて、(0,1)の範囲の値を取る
乱数を生成せよ。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:2007年5月21日
[5] その他の制限:なし

よろしくお願いします。

91:デフォルトの名無しさん
07/05/15 14:25:04
>>90
URLリンク(www5.airnet.ne.jp)


92:デフォルトの名無しさん
07/05/15 16:19:25
>>53
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct word word;
struct word{
char *en;
char *jp;
word *next;
};
word *makenode(FILE *fp);
void search(word *temp);
void mfree(word *temp);
int main()
{FILE *fp = fopen("ta.doc","r");word *temp = makenode(fp);show(temp);search(temp);
mfree(temp);return 0;}
word *makenode(FILE *fp){ word *temp = NULL;word *now = NULL;char *ctemp;
char buff[256] = {'\0'};char en[256] = {'\0'};char jp[256] = {'\0'};
while(fgets(buff,sizeof(buff), fp)){if(ctemp = strchr(buff, '\n'))*ctemp = '\0';
if(ctemp = strchr(buff, ','))*ctemp = '\0';
strcpy(en, buff);strcpy(jp, ctemp + 1);temp = malloc(sizeof(word));temp->en = malloc(strlen(en) + 1);
temp->jp = malloc(strlen(jp) + 1);strcpy(temp->en, en);strcpy(temp->jp, jp);
if(now == NULL){ temp->next = now;now = temp;}else{now->next = NULL;temp->next = now;
now = temp;}}return now;}void search(word *temp){ char buff[256] = {'\0'};word *wtemp;
char *ctemp;for(;;){puts("英和辞典");printf("英単語:");fgets(buff, sizeof(buff),stdin);
if(ctemp = strchr(buff, '\n'))*ctemp = '\0';if(strcmp(buff,"q") == 0)break;
for(wtemp = temp; wtemp != NULL; wtemp = wtemp->next)if(strcmp(buff, wtemp->en) == 0)
printf("日本語で「%s」\n",wtemp->jp);}}void mfree(word *temp){word *wtemp = temp;word *wftemp = NULL;
char *cjtemp = NULL;char *cetemp = NULL;while(wtemp != NULL){wftemp = wtemp;cjtemp = wtemp->jp;
cetemp = wtemp->en;wtemp = wtemp->next;free(cjtemp);free(cetemp);free(wftemp);}}

93:92
07/05/15 16:28:08
修正
//now->next = NULL;
temp->next = now;
now = temp;

94:デフォルトの名無しさん
07/05/15 17:31:04
>>80
istream::get()はstdioのfgets()のC++版だからこの用途には向かないよ。
改行文字で切れるし、何バイト読めたか分からない。

95: ◆90k6K4GDF6
07/05/15 17:45:42
スレ違いだったらスマソ
授業が始まったばかりで、レポートにまとめるフローチャートの書き方が分かりません。
初歩の初歩ですがググっても今一理解出来なかったのでお願いします

(a,b,cのデータをc,b,aの順に表示するプログラム)

#include <stdio.h>

int main(vold)
{
int a, b, c;

printf("a,b,cの順に整数型データを入力してください--> ">;
scanf("%d%d%d", &a, &b, &c);
printf("c,b,aの順に表示すると--> %d %d %d \n",c,b,a);

return 0;
}

96:デフォルトの名無しさん
07/05/15 17:49:37
>>95
スレ違い。

○main

□プロンプト表示

□数値入力

□数値表示

○return

97:66
07/05/15 17:51:17
#include <stdio.h>
int main(void){
  int  i;
  char a[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  int  b[]={'01','10','11','02','20','22','03','30','33','04','40','44','05','50','55','06','60','66','07','70','77','08','80','88','09','90'};

   printf();
   scanf();

while(){
}
   printf();

 return 0;
}

これを改良してプログラムを作成してもらえないでしょうか?
お願いします。

98: ◆90k6K4GDF6
07/05/15 17:52:44
>>96
やはりスレチでしたか、すみません;
でもありがとう

99:デフォルトの名無しさん
07/05/15 17:55:35
与えられた金額に対して、コインの最小化問題の解(枚数)を求める。(複数の場合には1つでよい)
期限: 5/18(金)まで

コインはA[n]の配列に入れて、日本円みたいに1,5,10,50…というコインではなく、
どんなコインの組み合わせに対しても、最小の枚数を求めさせる。


日本円だと大きいコインから順に取っていけばいいのですが、
1円、3円、4円のコインの組み合わせで、6円だったら3円×2枚が最小になる、
みたいな場合があるのでどうすればいいのか分からないです><

再帰を使った疑似コードをかけって言われたんですけど誰か分かる人いませんか?
よろしくお願いします。

100:デフォルトの名無しさん
07/05/15 17:56:05
>>97
なんだ、ぼるじょあスレとマルチかYO!

101:気まぐれアナスイ
07/05/15 18:04:02
#include <stdio.h>
int main(void>{ int i;
char a[]={"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"};
int b[]={01,10,11,02,20,22,03,30,33,04,40,44,05,50,55,06,60,66,07,70,77,08,80,88,09,90,99"};
printf();
scanf();
while(){ }
printf();
return0; }

102:気まぐれアナスイ
07/05/15 18:08:58
!(Φ_Φ+){こっちかな?}
#include <stdio.h>|(/n)
int main(void>{ int i;|(/n)
char a[]={"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"};|(/n)
int b[]={01,10,11,02,20,22,03,30,33,04,40,44,05,50,55,06,60,66,07,70,77,08,80,88,09,90,99"};|(/n)
printf();|(/n)
scanf();|(/n)
while(){ }|(/n)
printf();|(/n)
return0; }|(/n)

103:デフォルトの名無しさん
07/05/15 18:17:32
こんなもんでしょ。
#include <stdio.h>
#include <string.h>
void encryptPrint(const char * str)
{
static char const src[] = "abcdefghijklmnopqrstuvwxyz";
static char const dest[] = {
1, 10, 11, 2, 20, 22, 3, 30, 33, 4, 40, 44, 5,
50, 55, 6, 60, 66, 7, 70, 77, 8, 80, 88, 9, 90};
int len = strlen(str);
for (int ic = 0; ic < len; ++ic) {
char * ptr = strchr(src, str[ic]);
if (ptr != NULL) {
printf("%02d", dest[ptr - src]);
} else {
putchar(str[ic]);
}
}
}
int main()
{
char buf[200];
while (fgets(buf, sizeof(buf), stdin) != NULL) {
encryptPrint(buf);
}
return 0;
}

104:気まぐれアナスイ
07/05/15 18:37:09
!(Φ_Φ+)
#include "1179025919/[>>???]"
((1179025919/[>>???] "this line harmony");)|#pref=()/
((1179025919/[line 101] "no");)|#pref=()/
((1179025919/[line 102] "used no");)|#pref=()/
if|<end>
</end>

105:気まぐれアナスイ
07/05/15 18:39:54
!(Φ_Φ+){頑張ってください}
では、また。

106:デフォルトの名無しさん
07/05/15 20:51:45
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文:
8×4、9÷4をそれぞれ四則演算子を用いずに計算し、その計算結果を表示させない。
(ヒント:シフト演算子を使用)
<実行結果>
・8×4=32
・9÷4=商2、余1
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語: C言語
[4] 期限: [2007年05月16日まで]
[5] その他の制限:なし

107:デフォルトの名無しさん
07/05/15 20:57:41
>>80
バグってるじゃん


108:デフォルトの名無しさん
07/05/15 21:03:45
>>106
#include<stdio.h>
int main(){
printf("8×4=%d\n", 8<<2);
printf("9÷4=商%d、余%d\n", 9>>2, 9%4);
return 0;
}

109:デフォルトの名無しさん
07/05/15 21:29:55
1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: Cのみ
[4] 期限:出来る限り早くお願いします。
[5] その他の制限:C言語初心者です。今習っているのは、制御文と配列です。

110:デフォルトの名無しさん
07/05/15 21:35:16
>>108
> printf("9÷4=商%d、余%d\n", 9>>2, 9%4);
あまりは 9&3 だろ?


111:デフォルトの名無しさん
07/05/15 21:37:10
中途半端に知ってたんだな

112:デフォルトの名無しさん
07/05/15 21:42:02
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
気温のデータを5℃単位に丸めたい。
キーボードからdouble型変数kに気温を入力し、
丸めた数値はint型変数gに求め、gを画面に出力する。

ただし入力データに負の気温はないものとする。

また必要なら、計算途中の中間結果を格納するint型変数wなど、
適宜変数を用意すること。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: なるべく早くお願いします。
[5] その他の制限: 結構序盤なので、初心者といえば初心者です。

よろしくお願いします。

113:デフォルトの名無しさん
07/05/15 21:42:13
人にやさしく

114:デフォルトの名無しさん
07/05/15 21:44:46
うほっ
>>108

return0;は美しくないな。

void main(void) でよくね?


115:デフォルトの名無しさん
07/05/15 21:45:11
>>109
#include<stdio.h>
int main(){
char c1,c2,c3;
printf("Input character1 : ");
scanf("%c",&c1);
fflush(stdin);
printf("Input character2 : ");
scanf("%c",&c2);
fflush(stdin);
if(c1 == c2) c3 = '=';
else if(c1 > c2) c3 = '>';
else c3 = '<';
printf("'%c'(%d) %c '%c'(%d)\n",c1,c1,c3,c2,c2);
return 0;
}

116:デフォルトの名無しさん
07/05/15 21:46:11
>>114
void mainの話をするとスレが荒れるぞ

117:デフォルトの名無しさん
07/05/15 21:51:55
>>114
mainの戻り値がvoidなんて処理系依存の方法を持ち出す奴が
どういう了見でreturn 0;が美しくないとか言ってんだ

118:114
07/05/15 21:52:14
>>116
うほっw
まあいいか、return 0; でも。

>>108だっが、余りは9%4でよくねぇ?なぜに9&3 ?

119:デフォルトの名無しさん
07/05/15 21:54:12
沈黙は金

120:デフォルトの名無しさん
07/05/15 21:54:45
>>114 ん~~~、な・ん・で?敢えて言うんでしょうか?理由は?何か問題でも?
int main なら return 0;はANSI、ISO準拠でなんら問題なし。幅広い環境で通用する。
void main?それはもはや世界基準にあらず、自立環境でmain関数をプログラムの開始と
定めていないようなところでなら問題ないが、あくまでもANSI、ISO準拠重視なソースであれば
なおさらvoid mainはありえない。これらのことは、ちゃんとISOにも記されているので
必要とあらば確認すべし。なお、void mainは使っちゃだめということではないので、あしからず。
あくまでも世界基準、標準化、幅広い環境で通用させるんであればint mainが望ましいとの話。

121:デフォルトの名無しさん
07/05/15 21:56:17
くせえ!
コピペの臭いがプンプンするぜ!

122:デフォルトの名無しさん
07/05/15 21:56:42
>>118は責任もって>>120を引き取るように。

123:デフォルトの名無しさん
07/05/15 22:19:31
>>112
#include    <stdio.h>

int    main()
{
    double k;
    int g;
    scanf("%lf", &k);
    g = 5*(int)(k/5 + 0.5);
    printf("%d\n", g);
    return 0;
}

124:デフォルトの名無しさん
07/05/15 22:23:55
>>118
%も四則演算子に含むという解釈なんじゃね?
実際どっちなんだろう。

125:デフォルトの名無しさん
07/05/15 22:34:28
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): キーボードから5教科のテストの成績を入力し、
合計点sumと平均点aveを計算して画面に出力するプログラムを作成しなさい。

ただし、各教科の点数とsumはint型とし、aveはdouble型とする。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C言語
[4] 期限: 今日の夜11時半まで
[5]その他の制限:

お願いします!

126:デフォルトの名無しさん
07/05/15 22:43:15
>>125
#include<stdio.h>
int main(){
int n, sum = 0;
double ave;
printf("国語:"); scanf("%d",&n); sum+=n;
printf("英語:"); scanf("%d",&n); sum+=n;
printf("社会:"); scanf("%d",&n); sum+=n;
printf("算数:"); scanf("%d",&n); sum+=n;
printf("情報:"); scanf("%d",&n); sum+=0;
printf("合計点:%d\n", sum);
ave = sum / 5.0;
printf("平均点:%lf\n", ave);
return 0;
}

127:デフォルトの名無しさん
07/05/15 23:00:35
>>110
なぜ余が、9&3になるの?教えてください。確かに実行結果は余り1になるわけだが。

128:デフォルトの名無しさん
07/05/15 23:04:57
1001=9
0011=3
------&
0001=1

129:デフォルトの名無しさん
07/05/15 23:06:40
>>99
こんな感じかなぁ(あんまり再帰を使ってないけど)。

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

#define NMAX (INT_MAX / 2)

struct P {
  int sum;
  union {
    struct P *p[2];
    int n;
  } as;
};

int Count(struct P *p, int n)
{
  return (p->sum != 1) ? (Count(p->as.p[0], n) + Count(p->as.p[1], n)) : (p->as.n == n);
}


130:デフォルトの名無しさん
07/05/15 23:06:43
>>128
thanks!

131:129
07/05/15 23:08:10
続き
void Factorize(int total, int ctbl[], int ctblnum)
{
  struct P *ptbl, *p, *q, *r;
  int ptblnum = total;
  int i, j, n;
  
  for (i = 0; i < ctblnum; i++)
    if (ptblnum < ctbl[i])
      ptblnum = ctbl[i];
  ptblnum ++;
  if ((ptbl = calloc(ptblnum, sizeof(*ptbl))) == NULL)
    fprintf(stderr, "メモリ不足です\n");
  else {
    for (i = 0; i < ptblnum; i++)
      ptbl[i].sum = NMAX;
    for (i = 0; i < ctblnum; i++) {
      p = &ptbl[ctbl[i]];
      p->sum = 1;
      p->as.n = ctbl[i];
    }


132:デフォルトの名無しさん
07/05/15 23:08:27
>>115
fflush(stdin); ってどうゆうことですか?

133:129
07/05/15 23:09:10
続き
    for (i = 1; i <= total; i++) {
      p = &ptbl[i];
      for (j = 1; j < i; j++)
        if ((n = (q = &ptbl[j])->sum + (r = &ptbl[i - j])->sum) < p->sum) {
          p->sum = n;
          p->as.p[0] = q;
          p->as.p[1] = r;
        }
    }
    printf("%d円の内訳:\n", total);
    if (ptbl[total].sum == NMAX)
      printf("組み合わせが存在しません\n");
    else for (i = 0; i < ctblnum; i++)
      if((n = Count(&ptbl[total], ctbl[i])) != 0)
        printf("%d円 × %d枚\n", ctbl[i], n);
    free(ptbl);
  }
}

int main(void)
{
  int ctbl[] = { 1, 3, 7, 9, 13, 66, };
  
  Factorize(179, ctbl, 6);
  return 0;
}


134:デフォルトの名無しさん
07/05/15 23:23:29
>>115
入力ストリームに対するfflushは未定義動作
scanfで読み飛ばしとけ

135:115
07/05/15 23:28:10
>>134
適当に書いただけだから>>132に言ってやってくれ

136:デフォルトの名無しさん
07/05/15 23:54:52
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク)
7bitのASCIIコード表を出力するプログラムを作成せよ。

出力例

  0  1  2  3・・・・7
-------------------
0:** **     0   p
1:** **  !  1   q
2:** **  "  2   r
3:** **  #  3   s


F:** **  /  ?   **

印刷できない文字は、**を出力しなさい。

[3] 環境
 [3.1] OS: Win XP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 5月16日AM:10:30まで
[5] その他の制限: 2つのforとisprintという関数を使用する

よろしくお願いします。

137:デフォルトの名無しさん
07/05/16 00:08:37
10個の整数データを木構造に保存するときを考える.まず,ポインタにより木を実現し,データを保存せよ.(ファイルからデータを読み込み,木構造ができるようにすると良い)
次に,キーボードから前順,中順,後順を選択する.
すると,その順で木をなぞり,指定した順にデータを表示する(再帰プログラミングで作成せよ).

すみませんが教えて下さい。

138:デフォルトの名無しさん
07/05/16 00:20:03
>>136
#include<stdio.h>
#include<ctype.h>
int main(){
int i,j,k;
for(i=0;i<=0xF;i++){
for(j=0;j<=7;j++){
k = i*8+j;
if( isprint(k) )printf(" %c ", k);
else printf("** ");
}
printf("\n");
}
return 0;
}
なんか激しく間違えてるけど直すのたるいから誰かよろしく

139:デフォルトの名無しさん
07/05/16 00:20:18
>>27です。

>>39を参考に、1秒程度で出力するものができました。

>>43->>44も試したんですが、これも凄いですね。
でも、これだとオレが書いてないって明白なので、参考としていただきます。


他にもいろいろと勉強になるコードありがとうございました。


140:デフォルトの名無しさん
07/05/16 00:27:01
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:今日のPM13:00
[5] その他の制限:
問題1:キーボードより2つの値を入力し、比較結果を表示しなさい
実行画面
変数aの入力==>3
変数bの入力==>8
結果:8>3
変数aの入力==>8
変数bの入力==>3
結果:8>3
変数aの入力==>5
変数bの入力==>5
結果:5=5










141:140の続き
07/05/16 00:31:43
問題2:2人の得点を入力し勝者を表示しなさい
実行結果
aさんの得点==>200
bさんの得点==>150
aさんの勝ち
aさんの得点==>100
bさんの得点==>250
bさんの勝ち
aさんの得点==>120
bさんの得点==>120
引き分け
問題3:点数を入力し、合否を表示せよ
60点以下合格、範囲(O~100)以外はエラーとする
実行結果
点数入力==>60
合格です
点数入力==>59
不合格です
点数入力==>-1
点数を入力エラー(0未満)です
点数入力==>101
点数の入力エラー(100を超える)です


142:140の続き
07/05/16 00:32:53
問題4:キーボードより入力した文字を変換(大文字→小文字、小文字→大文字)し表示しなさい
実行結果
文字入力==>A
変換後:a

文字入力==>n
変換後:N

文字入力==>S
変換後:変換できない

以上の問題がどうしてもわからないのでよろしくお願いします

143:デフォルトの名無しさん
07/05/16 00:32:53
[1]c言語 
[2]raw画像を読むためfreadを使ったの関数を作る。

void FIO_read_raw(char *filename, unsigned short *ad, int width, int height){


FILE *fp_in;

if((fp_in==fopen(filename,"rb"))==NULL){

printf("Can't File Open!\n");

exit(1);

}

fread( ad, sizeof(unsigned short),width*height,fp_in);

fclose(fp_in);

}

と作ったのですが、

error C2143: 構文エラー : ')' が 'constant' の前に必要です。
error C2143: 構文エラー : ';' が 'constant' の前に必要です。
fatal error C1004: 予期せぬ EOF が検出されました。

とでてしまいました。どのようにすればいいか教えてください。よろしくお願いします。


144:140 141 142の問題
07/05/16 00:33:54
この4問わかる方がいましたら教えてください

145:デフォルトの名無しさん
07/05/16 00:37:06
if((fp_in=fopen(filename,"rb"))==NULL)

146:デフォルトの名無しさん
07/05/16 00:52:34
>>136
#include <stdio.h>
#include <ctype.h>

int main(void)
{
int ch[128],a[16][8];
size_t i,j,cnt,sz=sizeof(ch)/sizeof(ch[0]);
size_t wd=2;
for(i=0; i<sz; i++) ch[i]=i;

for(i=0,cnt=0; i<8; i++) {
for(j=0; j<16; j++) {
a[j][i]=ch[cnt++];
}
}

printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<16; i++) {
printf("%X:",i);
for(j=0; j<8; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
puts("");
}

return 0;
}

147:デフォルトの名無しさん
07/05/16 00:57:01
>>136 訂正。いらんことしてたわ。
#include <stdio.h>
#include <ctype.h>
#define ROW 16
#define COL 8
int main(void)
{
int a[ROW][COL];
size_t i,j,cnt,wd=2;
for(i=0,cnt=0; i<COL; i++)
for(j=0; j<ROW; j++)
a[j][i]=cnt++;
printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<ROW; i++) {
printf("%X:",i);
for(j=0; j<COL; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
printf("\n");
}
return 0;
}

148:デフォルトの名無しさん
07/05/16 00:58:59
>>136 ぐぼぉ、またはり間違えた。すまそ。たぶんこれで最後でおkかと。
#include <stdio.h>
#include <ctype.h>
#define ROW 16
#define COL 8
int main(void) {
int a[ROW][COL],i,j,cnt,wd=2;
for(i=0,cnt=0; i<COL; i++)
for(j=0; j<ROW; j++)
a[j][i]=cnt++;
printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<ROW; i++) {
printf("%X:",i);
for(j=0; j<COL; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
printf("\n");
}
return 0;
}

149:>140
07/05/16 02:34:04
...高難度ぢゃね?
#include <stdio.h>
int getVal(char *val)
{
    int v;
    char buf[256];
    printf("変数%sの入力==>", val);
    fgets(buf, sizeof(buf), stdin);
    sscanf(buf, "%d", &v);
    return v;
}
void printCmp(int a, int b)
{
    char sign[3], Num[][3]={"0","1","2","3","4","5","6","7","8","9"};
    if(a<b) sprintf(sign,"<");
    if(a>b) sprintf(sign,">");
    if(a==b) sprintf(sign,"=");
    printf("結果:%s%s%s\n", Num[a], sign, Num[b]);
}
int main(void)
{
    int a,b,loop;
    printf("1:キーボードより2つの値を入力し、比較結果を表示\n");
    for(loop=0; loop<3; ++loop){
        a=getVal("a");
        b=getVal("b");
        printCmp(a, b);
    }
    return 0;
}

150:>142
07/05/16 02:58:46
>    文字入力==>S
>    変換後:変換できない

kwsk


151:デフォルトの名無しさん
07/05/16 03:16:44
同じ問題前にも見たな。
で、同じようにそこ突っ込まれてた。

152:デフォルトの名無しさん
07/05/16 06:49:17
>>143
if((fp_in==fopen(filename,"rb"))==NULL){

if((fp_in=fopen(filename,"rb"))==NULL){


153:デフォルトの名無しさん
07/05/16 07:07:57
>>138さん >>146さん >>148さん
ありがとうございます

154:デフォルトの名無しさん
07/05/16 07:35:14
1:C言語
テーマ:繰り返し処理(for文)
問題1:1~10までの合計を求め表示しなさい
実行画面
合計:55

問題2:キーボードより入力した数分の、"*"を表示しなさい
実行画面
整数入力==>5
結果:*****

問題3:2つの数値を入力し、範囲の合計を表示しなさい
実行画面
整数1(小)入力==>5
整数2(大)入力==>7
5~7の合計:18
以上の3問ですよろしくお願いします

155:デフォルトの名無しさん
07/05/16 07:43:22
>>154
問題1
for(;;){
printf("合計:%d\n", 1+2+3+4+5+6+7+8+9+10);
goto EndRuupu;
}
EndRuupu:

問題2
int n;
printf("整数入力==>"); scanf("%d" &n);
printf("結果:");
for(;;){
printf("*");
if(--n==0) goto EndRuupu;
}
EndRuupu:
printf("\n");


156:デフォルトの名無しさん
07/05/16 07:49:18
問題3
int show, die, kei=0;
printf("整数1(小) 入力==>"); scanf("%d", &show);
printf("整数2(大) 入力==>"); scanf("%d", &die);
printf("%d~%dの合計:", show, die);
for(;;){
kei += show;
if(++show>die) goto EndRuupu;
}
EndRuupu:
printf("%d\n", kei);

157:デフォルトの名無しさん
07/05/16 08:08:20
>>154
こっちは悪い例。
問題2
int n;
printf("整数入力==>"); scanf("%d" &n);
printf("結果:");
for(; n!=0; n--) printf("*");
printf("\n");

問題3
int show, die, kei;
printf("整数1(小) 入力==>"); scanf("%d", &show);
printf("整数2(大) 入力==>"); scanf("%d", &die);
printf("%d~%dの合計:", show, die);
for(kei=0; show<die; show++) kei += show;
printf("%d\n", kei);

158:デフォルトの名無しさん
07/05/16 09:14:33
>>94
本当だな。std::read()の方がいいな

159:デフォルトの名無しさん
07/05/16 10:43:32
>>158
この場合はiosのフォーマット変換層自体いらないので、実はfstreamでなくて
filebufのほうが無駄が無くていい。
↓のような感じ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ただし、filebufの内部を直接読み書きしない限りは
ファイルバッファのバッファに読み込み→ユーザバッファにコピー
という無駄が発生するので、どうしたって低水準I/Oよりは遅くなると思われ。

160:デフォルトの名無しさん
07/05/16 10:48:36
>>159
なるほど。こういうのは初めて見ました。
rdbuf()を使った物は見た事があるのですが。
Cに勝てないのは辛い所ですね。

161:デフォルトの名無しさん
07/05/16 12:26:06
1:C言語
2:
問題1:数値を入力し、以下のように表示しなさい
実行画面
整数入力==>8
********
*******
******
*****
****
***
**
*


162:161の続き
07/05/16 12:34:17
問題2:10進数を入力し8ビットの2進数に変換し表示しなさい
実行画面
10進数入力==>118
2進数:01110110
以下の2問よろしくお願いします



163:デフォルトの名無しさん
07/05/16 12:40:41
(1):C言語
(2):制限時間あと3時間
(3):問題文
問題:2重のfor文を使って、以下のような九九表を完成させなさい
実行画面  
 1 2 3 4 5 6 7 8 9
_ _ _ _ _ _ _ _ _ _ _ _
1| 1 2 3 4 5 6 7 8 9
2| 2 4 6 8 10 12 14 16 18
3| 3 6 9 12 15 18 21 24 27
4| 4 8 12 16 20 24 28 32 36
5| 5 10 15 20 25 30 35 40 45
6| 6 12 18 24 30 36 42 48 54
7| 7 14 21 28 35 42 49 56 63
8| 8 16 24 32 40 48 56 64 72
9| 9 18 27 36 45 54 63 72 81
わかる方が居ましたらお願いします


164:デフォルトの名無しさん
07/05/16 12:53:34
>>163
#include <stdio.h>
int main()
{
for (int iy = 0; iy <= 9; ++iy) {
if (iy == 0) {
printf(" | 1 2 3 4 5 6 7 8 9\n"
"-+--------------------------\n");
continue;
}
for (int ix = 0; ix <= 9; ++ix) {
if (ix == 0) {
printf("%1d|", iy);
} else {
printf("%2d%c", ix * iy, ix < 9 ? ' ' : '\n');
}
}
}
return 0;
}


165:デフォルトの名無しさん
07/05/16 12:59:16
>>161
#include <stdio.h>

int main()
{
    int i, n;
    printf("整数入力==>");
    if (scanf("%d", &n) == 1) {
        while (i = n--) {
            while (i--)
                putchar('*');
            putchar('\n');
        }
    }
    return 0;
}

166:デフォルトの名無しさん
07/05/16 13:02:59
>>162
#include <stdio.h>
#include <string.h>
int main()
{
printf("Input decimal number.:");
int num = 0;
scanf("%d", & num);
if (num > 255 || num < 0) {
fprintf(stderr, "Illegal number.\n");
return 1;
}
char buf[4];
sprintf(buf, "%03o", num);
printf("binary number:");
for (int ic = 0; ic < 3; ++ic) {
static char const * const binaries[] = {
"000", "001", "010", "011", "100", "101", "110", "111"
};
printf("%s", binaries[buf[ic] - '0'] + (ic == 0 ? 1 : 0));
}
printf("\n");
return 0;
}


167:デフォルトの名無しさん
07/05/16 13:10:56
>>162
// 前半は>166を流用
#include <stdio.h>
int main()
{
printf("Input decimal number.:");
int num = 0;
scanf("%d", & num);
if (num > 255 || num < 0) {
fprintf(stderr, "Illegal number.\n");
return 1;
}
static char const * const binaries[] = {
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111",
};
printf("binary number:%s%s\n", binaries[num >> 4], binaries[num & 0xf]);
return 0;
}


168:デフォルトの名無しさん
07/05/16 13:55:23
>>161
これ一ヶ月ほど前に見たような

169:デフォルトの名無しさん
07/05/16 13:59:46
スレリンク(tech板:473番)
だったわ、宿題じゃなかったか


170:デフォルトの名無しさん
07/05/16 14:07:31
俺も見たような気がしたけどこれだった
スレリンク(tech板:417番)

171:デフォルトの名無しさん
07/05/16 14:12:41
これってprint増やす以外に作る方法ってありますか?

// 配列を反転するプログラム(の予定)
#include <stdio.h>
int tables[10];
void print(void)
{
for (int i = 0; i < 10; i++) {
printf("%d:", i);
printf("%d\n", tables[i]);
}
printf("\n");
}
void reverse(void)
{
for (int i = 0; i < 10/2; i++) {
tables[i] = tables[9-i];
tables[9-i] = tables[i];
}
}

int main(void)
{
for (int i = 0; i < 10; i++) {
tables[i] = i + 100;
}

172:デフォルトの名無しさん
07/05/16 14:27:26
>print増やす
意味が分からん。
それよりもmain内で関数が呼ばれてない。
あと、配列をグローバルにする必要性は無い。

173:デフォルトの名無しさん
07/05/16 14:59:42
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
10個の実数データをキーボードから入力し,配列data[10]に格納しなさい。そして,各要素の小さい方からの順位を決定して,別の配列rank[10]に格納しなさい。最後に,入力データdata[10]と順位rank[10]をともに出力しなさい。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:borland
 [3.3] 言語:C
[4] 期限:日曜日
[5] その他の制限:

よろしくお願いします。

174:デフォルトの名無しさん
07/05/16 15:23:15
>>133
助かりました!ありがとうございます!

175:デフォルトの名無しさん
07/05/16 15:43:15 BE:139752498-2BP(222)
>>173
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a,const double* b){return (int)(*a-*b);}
int main(void){double data[10],rank[10];int i;char tmp[256];
for(i=0;i<10;i++){printf("実数%i:",i);fgets(tmp,255,stdin);data[i]=atof(tmp);}
qsort(data,sizeof(data)/sizeof(double),sizeof(double),cmpdbl);
printf("data:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,data[i]);}
printf("rank:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,rank[i]);}return 0;}

176:デフォルトの名無しさん
07/05/16 15:44:04
C言語ではないんですがアルゴリズムのフローチャートを書ける方居ますか?
問題1:平均点計算
点数を入力して、平均点を出力するフローを答えなさい[入力した点数が0より小さい時終了する]
問題2:合計
1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい
の2問のフローチャートがどうしてもわからないので何方か解る方がいましたら教えてください
いくら考えても解らないので何方かお願いします

177:デフォルトの名無しさん
07/05/16 15:44:40
>>171 こういう事か?

今、××を見ながらCの勉強をしています。
そこに「ある配列を反転した内容を別の配列にコピーする」というプログラムあり、
それを改造して、「あるひとつの配列の内容を反転する」プログラムを自力で作ってみました。
しかしコンパイルは通るのですが、実行してみると思ったとおりの結果にならなくて困っています。
元のプログラムでは表示用の関数printが2つに分かれており、
それをひとつにまとめてしまったのが原因なのでしょうか?
配列がひとつしか無いので表示用の関数は1つだけにしたいのですが、
上手いやり方はありませんか?

178:デフォルトの名無しさん
07/05/16 16:08:13 BE:67935757-2BP(222)
>>175訂正
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a,const double* b){return (int)(*a-*b);}
int main(void){double data[10],rank[10];int i;char tmp[256];
for(i=0;i<10;i++){printf("実数%i:",i);fgets(tmp,255,stdin);data[i]=rank[i]=atof(tmp);}
qsort(rank,sizeof(rank)/sizeof(double),sizeof(double),cmpdbl);
printf("data:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,data[i]);}
printf("rank:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,rank[i]);}return 0;}

179:デフォルトの名無しさん
07/05/16 16:13:28
CUIばっかじゃねーか

180:デフォルトの名無しさん
07/05/16 16:37:06
10個の整数データを木構造に保存し、
順に木をなぞる再起プログラミングを作成せよ.

C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。

181:デフォルトの名無しさん
07/05/16 16:39:22
マルチ
スレリンク(tech板:851番)

182:デフォルトの名無しさん
07/05/16 16:39:26 BE:34937892-2BP(222)
>>180
>順に木をなぞる再起プログラミングを作成せよ.

何の順だ。

183:デフォルトの名無しさん
07/05/16 16:46:38
他人に質問できるレベルにさえ達してないのか

184:デフォルトの名無しさん
07/05/16 17:01:22
>>183
課題をそのままコピーしただけなのですが・・・すいません。

>>182
「順」っていう言葉がなければ大丈夫ですかね?
分かる範囲でいいので、ぜひご指導お願いします。

10個の整数データを木構造に保存し、
木をなぞる再起プログラミングを作成せよ.

C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。


185:デフォルトの名無しさん
07/05/16 17:04:21
>>173
#include <stdio.h>
int main(void){
int i,j,rank[10]={0};double data[10];char buf[256];
for(i=0;i<10;){
printf("%d番目の実数を入力して下さい:",i+1);
fgets(buf,255,stdin);
if(!sscanf(buf,"%lf",data+i)) continue;
++i;
}
for(i=0;i<10;++i){
for(j=0;j<10;++j){
if(data[i]<=data[j]) ++rank[j];
}
}
for(i=0;i<10;++i) printf("data[%d]=%f\n",i,data[i]);
for(i=0;i<10;++i) printf("rank[%d]=%d\n",i,rank[i]);
return 0;
}

186:デフォルトの名無しさん
07/05/16 17:18:00 BE:69876094-2BP(222)
>>184
情報が足りねえって言ってるのにさらに減らすのはどういう嫌がらせですか。
「どんな木をどうやってなぞるのか」と聞いてるのに。

187:デフォルトの名無しさん
07/05/16 17:30:17
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
      ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
  課題2:1で作成したプログラムを以下のように修正せよ。
      ・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
      ・計算結果は画面でなくファイルに出力すること。
[3] 環境
 [3.1] Windows
 [3.2] cygwin
 [3.3] C
[4] 期限:5月18日
[5] 特になし

よろしくお願いします。


188:デフォルトの名無しさん
07/05/16 17:47:49
高校1年です

[1] プログラミング
[2] キーボードから固定費・変動費・単価・商品の売れた数を受け取り、収益と収益における固定費・変動費それぞれの割合、純利益を表示するプログラムをC言語で記述せよ
[3] 環境
 [3.1] 窓達XP
 [3.2] Borland C++ Compiler 5.5
 [3.3] C
[4]明日の情基の時間までに提出
[5] 専用のプリントに記述し提出、プログラムの動作を確認できる環境があれば確認して提出。その際、失敗したプログラムは消さないようにすること

動作確認は出来る環境です

一応書いたのですが、固定費割合と変動費割合が算出されません


189:デフォルトの名無しさん
07/05/16 17:49:33
>>188の課題で私が書いたプログラムを晒しときますね
固定費・変動費の割合が0.000000000になる以外は正常に算出されます

{
int tanka,kote,hen,rie,ure_kazu,ure_kane;
float kote_wari,hen_wari;

printf("単価はいくら?\n");
scanf("%d",&tanka);

printf("いくつ売れた?\n");
scanf("%d",&ure_kazu);

printf("固定費用は?\n");
scanf("%d",&kote);

printf("変動費用を算出して入力してください\n");
scanf("%d",&hen);

ure_kane = ure_kazu * tanka;
       rie = ure_kane - (kote + hen);

kote_wari = (kote / ure_kane) * 100;
hen_wari = (hen / ure_kane) * 100;

printf("収益は%d、収益における固定費と変動費の割合はそれぞれ%f%、%f%です。よって貴社の利益は%dです。",ure_kane,kote_wari,hen_wari,rie);

return 0;
}

190:デフォルトの名無しさん
07/05/16 17:55:23
>>189
スレ違い。

整数割る整数は整数になる。実数にしたいなら、キャストしとけ。
ついでに言えば、特にケチる理由がないならdoubleにしとけ。
floatでは、10進換算で7桁程度しか精度がないぞ。
Ex.
double kote_wari = (double) kote / ure_kane * 100.;

191:デフォルトの名無しさん
07/05/16 17:56:03 BE:104814296-2BP(222)
>固定費・変動費の割合が0.000000000になる

理由をまず考えろ。

192:デフォルトの名無しさん
07/05/16 17:56:54
小手割りって何かの技みたいだな。

193:デフォルトの名無しさん
07/05/16 17:58:48
>>190
わかりました
100.0000を超えることはないのでfloatで十分だと思ったのですが…
doubleでやってみますね
キャストはまだ習ってませんがjavaで学んだのでやってみます
ありがとうございました

194:デフォルトの名無しさん
07/05/16 17:59:59
>>191
分かりませんでしたのでここで質問させていただきました
あれ?もともとの公式が間違ってるのかな…?

195:デフォルトの名無しさん
07/05/16 18:04:55
>>194
>190

196:デフォルトの名無しさん
07/05/16 18:05:37
>>190
キャストがよく分からなかったので変数を全てfloatで宣言したら正常に動作しました
本当にありがとうございました

197:デフォルトの名無しさん
07/05/16 18:06:33
hen_wari = (hen / ure_kane) * 100;
hen=200,ure_kane=400の場合、200÷400=0余り200
hen_wari = (200 / 400) * 100;
hen_wari = 0 * 100;
hen_wari = 0;

198:デフォルトの名無しさん
07/05/16 18:10:42
>>196
その大雑把な応用性は現場にはとても必要なものだ
しかし大雑把過ぎると精密さが要求されるプログラムでしくじるかもな

199:デフォルトの名無しさん
07/05/16 18:44:55 BE:104814296-2BP(222)
最低限、作用機序を理解していることが前提だがな。
「理由は分からないけどこうしたら直った」という対処は迷惑でしかない。

200:デフォルトの名無しさん
07/05/16 20:05:27
>>188
この前入学したばかりなんだろ?
なんかレベル高い授業やってんな

201:デフォルトの名無しさん
07/05/16 20:11:29
>>188は高学歴

202:デフォルトの名無しさん
07/05/16 20:14:51
>200
用語が難しそうに見えるだけで、やってることは数字入力に四則演算程度の入門レベルだろ。

203:デフォルトの名無しさん
07/05/16 20:17:02
>>202
高校一年でだぞ?

204:デフォルトの名無しさん
07/05/16 20:45:25
私が高校一年の時はCじゃなくてアセンブリだったな orz どう考えても低(ry

205:デフォルトの名無しさん
07/05/16 20:47:36
高1でアセンブラか。
そりゃずいぶんと低レベルだな。

206:デフォルトの名無しさん
07/05/16 20:52:58
>>205
俺なんか中学のときにトランジスタを・・・


207:デフォルトの名無しさん
07/05/16 20:56:22
それは趣味だろ
義務教育でトランジスタとか触るの?

208:デフォルトの名無しさん
07/05/16 20:58:39
もしかして、ゆとり世代には
「技術」という科目は無いのか?


209:デフォルトの名無しさん
07/05/16 20:58:46
もう20年以上まえになるが...
高校の頃, 必死こいてセグメントレジスタ気にしながら 8086 アセンブラで
lisp 処理系を作ろうとしていた当時の俺って低レベルですか?


210:デフォルトの名無しさん
07/05/16 21:08:09
>>207-208
10年前中学生だった俺は授業の中でトランジスタを触ることがあった。
>>209
低レベルだね


211:デフォルトの名無しさん
07/05/16 21:14:28
>>208
ゆとり直前世代ですがありました

皆さんが低レベルと言ってるのは、低級と言い換えても構いませんね!
大学入って初めてCに触れてるくらいだから俺はかなり高レベル

212:デフォルトの名無しさん
07/05/16 21:15:50
俺なんか小学校のときにそろばんを・・・

213:デフォルトの名無しさん
07/05/16 21:17:28
低水準のことじゃないのか。

214:デフォルトの名無しさん
07/05/16 21:17:32
>>211
俺にとっては C はアセンブラの延長
っか, マシンに依存しないアセンブラ
十分, 低レベル言語


215:デフォルトの名無しさん
07/05/16 21:46:05
ゆとりだけど技術あったよ
中学1年と2年で木工、3年でPC
選択ではタイニーベーシックもやる

ちなみに>>188の高校は大体予想が付く
普通の工業では固定費割合とかの経営側のことはやらない
たぶん初級シスアド狙ってる学校
だから初級シスアド試験一部免除校リストのどれかだろ

216:デフォルトの名無しさん
07/05/16 22:07:39
int flag = 0;

while(1){
if(flag == 100)
Test *t2 = new Test(0,0);
if(flag > 300)
t2->do(); }

C++でAPIを利用したゲームを作成しています。
ここで、Testというクラスがあらかじめ定義されているとしてください。
flagが100になった(つまりループが100回回ったとき)に敵を発生させたく、このようなプログラムを書きました。
しかし、コンパイル時に、t2が定義されていない識別子となり、はじかれてしまいます。(最終行)
どのように対処すればよろしいのでしょうか?
whileループ前にt2を確保しておけば動作するのですが、それでは今後困ることがでるので・・・。
宜しくお願いします。

環境:VC++6.0

217:デフォルトの名無しさん
07/05/16 22:11:55
ループ内で変数確保とはびっくりした。これっていいの?

218:デフォルトの名無しさん
07/05/16 22:12:50
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  与えられたnに対し、分母がn以下で値が0以上1以下の既約分数をすべて求めよ。(再帰を使うこと。)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: C言語
[4] 期限: 5/18
[5] その他の制限: 特にないです。

219:216
07/05/16 22:16:54
ループ内でflag++;という分を書き忘れてしまいました。
int flag = 0;

while(1){
if(flag == 100)
Test *t2 = new Test(0,0);
if(flag > 300)
t2->do();
flag++;}
です。

>>217
やっぱりまずいんでしょうかねぇ。
でもあるタイミングで敵を発生させるときとかどうしたらいいのかわかりません・・・。

220:デフォルトの名無しさん
07/05/16 22:26:09
>>216 >>219
スレ違い
スコープについて勉強してこい

221:デフォルトの名無しさん
07/05/16 22:40:00
>>186
根付き木で、深さ優先探索です。

222:216
07/05/16 22:40:15
やはりあらかじめ作成しておいて、後に削除するしかないのでしょうか・・・。
それだと、敵をある時間に生成する上手い方法ありませんか?

223:デフォルトの名無しさん
07/05/16 23:04:59
質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
文字列①と文字列②を比較し、正しければ○、正しくなければ×を出力せよ。
文字列は半角英数、全角、空白、記号も含める。
(文字列①、②ともに空白の場合はエラーを出力する。)

<実行結果>
文字列①を入力してください。---> (入力後、実行で下段を表示)
文字列②を入力してください。---> (入力後、実行で結果を表示)
結果:○

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名:Visual Studio
 [3.3] 言語:C
[4] 期限:5/17
[5] その他の制限: 無し

224:デフォルトの名無しさん
07/05/16 23:10:12
>>223
#include<stdio.h>
#include<string.h>
int main(){
char str1[1000],str2[1000];
printf("文字列①を入力してください。--->");
scanf("%s",str1);
printf("文字列②を入力してください。--->");
scanf("%s",str2);
printf("結果:%s\n",strcmp(str1,str2)?"×":"○");
return 0;
}

225:デフォルトの名無しさん
07/05/16 23:14:13
>>224
ありがとうです。
でも、1000文字を超えたらアウトですよね?
その場合、どうしたらいいですか?
それと、両方とも空白時のエラーメッセージはどうしましょう・・・

226:デフォルトの名無しさん
07/05/16 23:18:16
>>225
ごめん、普通にエラーとか忘れてた orz
#include<stdio.h>
#include<string.h>
#define N 1000
int main(){
char str1[N],str2[N];
printf("文字列①を入力してください。--->");
fgets(str1,N,stdin);
printf("文字列②を入力してください。--->");
fgets(str2,N,stdin);
if(strlen(str1)>1||strlen(str2)>1)
printf("結果:%s\n",strcmp(str1,str2)?"×":"○");
else
printf("エラー\n");
return 0;
}
さっきよりほんの少しだけまともに書いてみた。
メモリの許す限り文字列を比較したいなら、勉強して自分でがんがれ

227:>222
07/05/16 23:50:06
宣言をループの外で
確保はループの中で

228:デフォルトの名無しさん
07/05/17 01:43:48
>問題2:合計
>1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい

[開始]
 |
[計算結果s=0]
 |
[カウンタn=1]
  |
 [カウンタi=1]
   |
  [s=s+i]
   |
  [i=i+1]
   |
 [カウンタi<=nの間繰り返し]
  |
 [n=n+1]
  |
[カウンタn<=10の間繰り返し]
 |
[計算結果s表示]
 |
[終了]

229:デフォルトの名無しさん
07/05/17 01:45:33
>>225
応用でstring.hを使わずに考えられると力が付くぞ

230:デフォルトの名無しさん
07/05/17 01:51:50
>>225
1000文字超えたときのこと考えるとCじゃ無理

231:デフォルトの名無しさん
07/05/17 03:07:06
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
      ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
  課題2:1で作成したプログラムを以下のように修正せよ。
      ・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
      ・計算結果は画面でなくファイルに出力すること。
[3] 環境
 [3.1] Windows
 [3.2] cygwin
 [3.3] C
[4] 期限:5月18日
[5] 特になし

前に書いたのですが、スルーされてしまったのでもう一度書かさせてもらいます。
非常に困ってます。どうかよろしくお願いします。

232:デフォルトの名無しさん
07/05/17 03:08:46
>書かさせてもらいます
さ入れ言葉

233:デフォルトの名無しさん
07/05/17 05:26:00
>>231
/*

正方行列の和・差・積を表示するプログラム

*/

#include <stdio.h>

/* ユーザ定義型宣言 */
#define DIM 4
typedef struct
{
int element[DIM][DIM];
}matrixSquare;

/* 関数宣言部 */
matrixSquare AddSqu(matrixSquare* m1, matrixSquare* m2);
matrixSquare SubSqu(matrixSquare* m1, matrixSquare* m2);
matrixSquare MulSqu(matrixSquare* m1, matrixSquare* m2);
void inputMatrixSquare(matrixSquare* ms);
void putMatrixSquare(matrixSquare ms);



234:デフォルトの名無しさん
07/05/17 05:26:21
/* メイン関数 */
int main(void)
{
matrixSquare ma, mb;

/* 正方行列に数値を入力する */
{
printf("4x4の正方行列aを空白で区切って1行ずつ入力.\n"); inputMatrixSquare(&ma);
printf("4x4の正方行列bを空白で区切って1行ずつ入力.\n"); inputMatrixSquare(&mb);
/* 入力バッファに溜まるので、一気に全ての要素を入力しても良い */
}

/* 和・差・積を表示する */
{
printf("aとbの和\n"); putMatrixSquare(AddSqu(&ma, &mb));
printf("aとbの差\n"); putMatrixSquare(SubSqu(&ma, &mb));
printf("aとbの積\n"); putMatrixSquare(MulSqu(&ma, &mb));
}
return 0;
}



235:デフォルトの名無しさん
07/05/17 05:27:06
/* */
/* 関数の実装 */
/* */
matrixSquare AddSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の和を返す */
{
matrixSquare mRes;
int y, x;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
mRes.element[y][x] = m1->element[y][x] + m2->element[y][x];
}
}
return mRes;
}


236:デフォルトの名無しさん
07/05/17 05:27:37
matrixSquare SubSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の差を返す */
{
matrixSquare mRes;
int y, x;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
mRes.element[y][x] = m1->element[y][x] - m2->element[y][x];
}
}
return mRes;
}


237:デフォルトの名無しさん
07/05/17 05:27:54
matrixSquare MulSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の積を返す */
{
matrixSquare mRes;
int x, y, k;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
int tmp;
for(k=0, tmp=0; k!=DIM; k++)
{
tmp += m1->element[k][x] * m2->element[y][k];
}
mRes.element[y][x] = tmp;
}
}
return mRes;
}


238:デフォルトの名無しさん
07/05/17 05:29:31
void inputMatrixSquare(matrixSquare* ms)
/* 正方行列を一行単位で入力する */
{
int i;

for(i=0; i!=DIM; i++)
{
printf("%d行目>", i+1);
scanf("%d %d %d %d", &(ms->element[i][0]), &(ms->element[i][1]), &(ms->element[i][2]), &(ms->element[i][3]));
}
printf("\n");
}


239:デフォルトの名無しさん
07/05/17 05:30:12
void putMatrixSquare(matrixSquare ms)
/* 正方行列を標準出力へ書き出す */
{
int x, y;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
printf("%10d ", ms.element[y][x]);
}
printf("\n");
}
}

[EOF]

240:デフォルトの名無しさん
07/05/17 05:55:40
>238訂正

void inputMatrixSquare(matrixSquare* ms)
/* 正方行列を一行単位で入力する */
{
int i, j;

for(i=0; i!=DIM; i++)
{
printf("%d行目>", i+1);
for(j=0; j!=DIM; j++)
{
scanf("%d", &(ms->element[i][j]));
}
}
printf("\n");
}


241:デフォルトの名無しさん
07/05/17 05:56:55
うpロダ使えYO!

242:216
07/05/17 06:06:30
>>227 ありがとうございます無事できました。

クラスをnewで作成したとします。(仮に*test)とします。
これをクラス内のメソッドで消す方法はありませんか?
つまり、自クラスで自分をdeleteするということです。
自分は自信の名前を知らないので、
delete test ; と記述することが出来ません。
あらかじめprivate変数として自信の名前を記録しておく他ないのでしょうか?

243:デフォルトの名無しさん
07/05/17 06:50:35
delete This;

244:デフォルトの名無しさん
07/05/17 06:51:24
↑間違い
delete this;
です。

245:デフォルトの名無しさん
07/05/17 06:54:03
てかこれは基本中の基本であってもう一度C++勉強し直せ

246:デフォルトの名無しさん
07/05/17 08:01:23
>>231
問2。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

247:デフォルトの名無しさん
07/05/17 09:10:59
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  【処理方式】
① int型変数に値を入力する。(0~9)
② chg関数に、入力した値を渡す。(ポインタ)
③ その値が2で割って余りが0なら10倍し、余りが1なら5倍する。
④ Main関数にてchgにて計算された値を表示する。
【処理結果】
 Cnt =>XXXX
 cnt(chg後)  :XXXX
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: C言語
[4] 期限: 5/18
[5] その他の制限: 特にないです

248:デフォルトの名無しさん
07/05/17 09:41:50
>>247
#include<stdio.h>
void chg(int *cnt){
*cnt *= *cnt%2 ? 5 : 10;
}
int main(){
int cnt;
printf("Cnt =>");
scanf("%d",&cnt);
if(cnt<0 && 9<cnt) return 1;
chg(&cnt);
printf("cnt(chg後)  :%d\n",cnt);
return 0;
}

249:デフォルトの名無しさん
07/05/17 09:46:33
>>247
>① int型変数に値を入力する。(0~9)
ってあるけど、
>Cnt =>XXXX
これと矛盾しない?

250:デフォルトの名無しさん
07/05/17 11:08:22 BE:31055982-2BP(222)
>>221
漠然としすぎててわからんと何度も言ってるわけだが。

>根付き木で、

そういうことじゃなくて、子は何人までとか、親子関係、兄弟関係の決め方とかが
わからんとやりようがねえって言ってんだよ。
その意味すら分からないなら単位落として退学しろクズ。

251:デフォルトの名無しさん
07/05/17 11:09:22
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
正負それぞれ、万、億の位まで対応できる読み上げ文字列生成プログラムを作成せよ。
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)明日の昼
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
・「数値読み上げ」とは、数値を入力したときにその数字の読み方を表す文字列を生成して出力するプログラムで、
たとえば、「1」と入力したら「ICHI」、「1024」と入力したら「SEN NIJYU YON」と出力するプログラムです。
・拡張性やライブラリ化の容易さを考えて、生成した文字列を一旦文字配列変数に格納し、
読み上げ文字列が完成したあとでまとめて出力する形式でお願いしますorz
(引数として数値を与えて呼び出すと、return値として読み上げ文字列へのポインタを返すような関数を作成し、main関数からこれを呼び出す)
・各桁ごとの数字の文字列生成や4桁ごとに現れる千百十の単位の文字列生成のように、
繰り返し出現すつ処理は出来る限り1箇所にまとめてモジュール化する

制限多いですがよろしくおねがいしますm(__)m

252:デフォルトの名無しさん
07/05/17 11:18:50
>>250
もちつけw

>>221
>10個の整数データを木構造に保存し、
>順に木をなぞる再起プログラミングを作成せよ.

10個の整数データがあるのは解った。
深さ優先探索ってのも解った。

で、この10個の整数とやらをどうやって木にするんだ?
rootから順に、何らかの基準によって、
ある要素の子になったり、ある要素と同レベルの要素になったりするわけだろ?
それがわからなきゃコードなんか書きようがないだろ。
そもそも探索対象の木が作れないんだから。

で、これでもまだ理解できないなら、単位は諦めな。
もう一回受けるのが君のためだ。

253:デフォルトの名無しさん
07/05/17 12:00:30
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
次の無限等比級数の和を求めなさい。
  ∞   1
  Σ  ━
  n=1  n^4 
 
[3] 環境 
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: unix 
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) 
[4] 期限: (5/18) 
[5] その他の制限: あまり詳しくありませんが、FILE *to; を使って記述するみたいです。



254:デフォルトの名無しさん
07/05/17 12:20:57
>>253 あまり賢くない方法で
#include <stdio.h>
#include <math.h>

int main()
{
    FILE *to = fopen("output.txt", "wt");
    double sum = 0, min = pow(10, -8);
    long int n;
   
    for(n = 1; 1/pow(n, 4) > min; n++)
        sum += 1/pow(n, 4);
   
    fprintf(to, "%.20f\n", sum);
   
    return 0;
}

255:sage
07/05/17 13:06:29
>>254
すばやい対応ありがとうございました。

すいませんよろしければ教えてほしいのですが、
このときn^4のところが(n^4+2)となったらどのように記述したらよろしいでしょうか?


256:それくらいできないなら技術系の職には向いてないと言うことだ
07/05/17 13:37:48
>>255
n^4のときにpow(n, 4)と書いたのだから、(n^4+2)ならおなじようにすればいいんでない?

257:247
07/05/17 13:39:51
>>247
#include<stdio.h>
void chg(int *cnt){
*cnt *= *cnt%2 ? 5 : 10;
}
この意味を教えてもらっていいですか?

258:デフォルトの名無しさん
07/05/17 13:42:28
>③ その値が2で割って余りが0なら10倍し、余りが1なら5倍する。

259:デフォルトの名無しさん
07/05/17 13:55:01
*cnt *= *cnt%2 ? 5 : 10;
この表記だと
参照はずしの* と *= との順位とか 参照はずしの* と % との順位で不安を感じるな

260:デフォルトの名無しさん
07/05/17 14:02:59
>>218お願いします><

261:247
07/05/17 14:13:47
>>259
参照はずしとはなんですか?

262:デフォルトの名無しさん
07/05/17 14:14:37
>>261
>参照はずしとはなんですか?
*

263:デフォルトの名無しさん
07/05/17 14:48:06 BE:29115735-2BP(222)
ここは宿題解説スレじゃないので答えもらったらさっさと持って帰れ。

264:デフォルトの名無しさん
07/05/17 15:33:04
>>218 >>260
#include <stdio.h>
typedef enum {false, true} bool;
bool isLowestTerm(int n, int d){
int i;
if(n == d && d != 1) return false;
for(i=n; i!=1; i--)
if(n%i == 0 && d%i == 0) return false;
return true;}
void PLT2(int num, int denomi){
if(num!=1) PLT2(num-1, denomi);
if(isLowestTerm(num, denomi))
printf("%d/%d\n", num, denomi);}
void PutLowestTerm(int n){
if(n != 1) PutLowestTerm(n-1);
PLT2(n, n);}
int main(void){
int n;
printf("n := "); scanf("%d", &n);
PutLowestTerm(n);
return 0;}


265:デフォルトの名無しさん
07/05/17 15:44:16
うぅむ、0が正しく処理されてないので訂正。
#include <stdio.h>
typedef enum {false, true} bool;
bool isLowestTerm(int n, int d){
int i;
if(n == 0) return (d == 1) ? true : false;
if(n == d && d != 1) return false;
for(i=n; i!=1; i--)
if(n%i == 0 && d%i == 0) return false;
return true;}
void PLT2(int num, int denomi){
if(num!=0) PLT2(num-1, denomi);
if(isLowestTerm(num, denomi))
printf("%d/%d\n", num, denomi);}
void PutLowestTerm(int n){
if(n != 1) PutLowestTerm(n-1);
PLT2(n, n);}
int main(void){
int n;
printf("n := "); scanf("%d", &n);
PutLowestTerm(n);
return 0;}



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