C/C++の宿題を片付け ..
[2ch|▼Menu]
2:デフォルトの名無しさん
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] 授業単元:アルゴリズム論T
[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] 授業単元: プログラミングU
[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で読み飛ばしとけ


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

4170日前に更新/299 KB
担当:undef