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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

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

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 86代目
http://pc11.2ch.net/test/read.cgi/tech/1176996941/
2デフォルトの名無しさん:2007/05/13(日) 12:25:31
プルグラマは数学が苦手
3デフォルトの名無しさん:2007/05/13(日) 12:42:40
>>2
そうでもない
4デフォルトの名無しさん:2007/05/13(日) 13:48:57
マスまてぃくす
5デフォルトの名無しさん:2007/05/13(日) 19:52:57
test
6デフォルトの名無しさん:2007/05/13(日) 20:34:33
1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):

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

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

お願いします
7デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/13(日) 23:25:20
>>7
マルチバイト文字のチェックはなし
9デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/13(日) 23:56:23
%gでいいんじゃない
11デフォルトの名無しさん:2007/05/14(月) 00:02:58
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク)
バブルソートを用いて構造体に対して、データが格納された構造体配列を
学生証番号で降順にソートする関数sortIDと点数で降順にソートする関数sortEngを作成しなさい。

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

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

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

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3974.c
↑途中まで作ったソースです。
間違っている部分もあるかと思われますが;;


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

よろしくお願いします。
12:2007/05/14(月) 00:15:12
>>10
ありがとうございました!
13デフォルトの名無しさん:2007/05/14(月) 04:24:59
[1] 授業単元:C言語 ゲーム製作入門
[2] 問題文(含コード&リンク):
〜 第3回課題 〜
今回はオセロの盤面の表示を行う部分の作成を行う。
授業中に配布、および作成したプログラムのうち
init.cファイル、及びboard_show.cファイルのソース内の第3回課題と書かれた部分に
必要な処理を追加しなさい。
処理や変数に簡単なコメントを付け加えること。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3976.zip

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

よろしくお願いします。
14デフォルトの名無しさん:2007/05/14(月) 17:41:07
>>7
>6には「char型の配列に格納」と書いてあるよ。
15デフォルトの名無しさん:2007/05/14(月) 17:53:55
16デフォルトの名無しさん:2007/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デフォルトの名無しさん :2007/05/14(月) 18:12:54
>>13のやつは、グローバル空間が不必要に使われてたから
書き直して途中でやめた。
18デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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 :2007/05/14(月) 19:26:43
二分探索じゃなくて
二分木探索って言うんだけど・・・

21デフォルトの名無しさん:2007/05/14(月) 19:31:43
二分探索であってる。
アホコテはこれ以上恥かかないうちに消えたほうがいいよプゲラ
2218:2007/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:2007/05/14(月) 21:48:07
>>7
配列に格納しないと駄目なんですが・・・・
24デフォルトの名無しさん:2007/05/14(月) 22:23:42
1] 授業単元: プログラミングU
[2] 問題文(含コード&リンク):
問題↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3978.txt

プログラム例↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3979.txt

出力例↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3980.txt

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

よろしくお願いします。
25デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/14(月) 22:50:58
>>25
も一回勉強し直した方がよいと思われ
27デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/14(月) 23:24:42
>>27の補足ですが、
入力32バイトごとに改行する必要があります。

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

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

のかたちになります。すみません。
29デフォルトの名無しさん:2007/05/14(月) 23:25:34
>>27
32倍以上速いPCを用意しる!!!!
30デフォルトの名無しさん:2007/05/14(月) 23:25:49
>>27
>速ければ速いだけ良い、という問題です。 

おっ!
これは面白そうな課題ではないか・・・
31デフォルトの名無しさん:2007/05/14(月) 23:29:59
入力ファイルはバイナリ?
出力ファイルはテキスト?
32デフォルトの名無しさん:2007/05/14(月) 23:32:26
>>29
80秒を出した環境ってのはCele3.2GHz、メモリ0.99GBなんです…。

>>31
はい、そのとおりです。
(「どちらにも対応できればいいね〜。」みたいなことは言ってましたが、
とりあえずそこは無視です。)
33デフォルトの名無しさん:2007/05/14(月) 23:47:07
どちらにもってどういう事?
34デフォルトの名無しさん:2007/05/14(月) 23:49:05
>>33
入力ファイルはテキストファイルでもいい…

ってことだったと思うのですが、
課題に取り組んでいてちゃんと聞いていなかったのです。
もうしわけ。
35デフォルトの名無しさん:2007/05/14(月) 23:50:13
今のそのソースをうpする気はない?
36デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 00:02:47
無いならいいや。
環境が変わると速度が変わるから比較したかっただけ。
39デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 00:07:58
41デフォルトの名無しさん:2007/05/15(火) 00:09:47
>>36のコード動かしてみたら1秒もかからないんだが
4241:2007/05/15(火) 00:11:25
Athlon64X2 4200+ RAM1GB
43デフォルトの名無しさん:2007/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";
4443:2007/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デフォルトの名無しさん:2007/05/15(火) 00:20:13
やっべw
ハッカーすぎて、何してるのか頭が追いつかないw
46デフォルトの名無しさん:2007/05/15(火) 00:23:36
問題は実際に速いかどうかだな。

誰か測定よろ。
47デフォルトの名無しさん:2007/05/15(火) 00:23:54
だよなぁ、CPUの性能によって処理時間なんて差が出るし・・・
まぁ、いかに効率の良いアルゴリズムを用いることができるかなら
比較すりゃ良いけど、漠然と決められた時間ってのは、高性能なCPUを
用いるのが一番早いw
4841:2007/05/15(火) 00:26:40
>>39のは2秒弱
>>43-44のも1秒かからんかった
49デフォルトの名無しさん:2007/05/15(火) 00:27:57
体感的な表現だが、
>>43のは本当に処理してるのか不安になるくらい速い。

このW;連発のが、for(i = 0; i < 32; i++)よりも速くなるものなの?
50デフォルトの名無しさん:2007/05/15(火) 00:28:07
同じく>>36で1秒かからない

Core2Duo T5500
2048M
51デフォルトの名無しさん:2007/05/15(火) 00:31:17
>>43-44
ファイル出力してる?
52デフォルトの名無しさん:2007/05/15(火) 00:33:12
>>51
第一引数が出ファイルで第二引数が入力ファイルでないの?
53デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 00:35:21
してるがな。
5539:2007/05/15(火) 00:35:44
>>48
モバイルPentiumIII 1GHzで2MB弱のファイルが3秒かかった・・・
やっぱ適当に作ったらいかんな
5641:2007/05/15(火) 00:36:59
あ、ごめん間違えた。
指定した入力と出力ファイルが逆だったから処理されてなかった。
あらためてやったら>>43-44は2秒弱
57デフォルトの名無しさん:2007/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;
}
5836:2007/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デフォルトの名無しさん:2007/05/15(火) 00:48:03
>>57 これも速いな
60デフォルトの名無しさん:2007/05/15(火) 00:49:40
>>43のはMTなlibcとリンクしてしまうとgetc()/putc()で排他がかかって
遅くなると思う。
61デフォルトの名無しさん:2007/05/15(火) 00:58:00
みんなiostreamに見向きもしないのがワロタ
やっぱ遅いすか
62デフォルトの名無しさん:2007/05/15(火) 01:01:40
っていうか、このレベルになると、もうディスク次第じゃね?
プログラムがいくらがんばっても仕方ないかも・・・
63デフォルトの名無しさん:2007/05/15(火) 01:06:16
>>62
だね。短期的な処理はほとんど差が出ないけど、長期化すると出るものとなると
もはや高性能なハードウェアを使うのが望ましいってなるだろうね・・・
64デフォルトの名無しさん:2007/05/15(火) 01:09:55
>>27
ファイルを読んで何もしないで出力するだけなら
5秒を切れるプログラムは書けるよね?
65>53:2007/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暗号:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 06:30:13
あの…>>24お願いできないでしょうか…?
69デフォルトの名無しさん:2007/05/15(火) 06:45:04
>>65
ありがとうございました ぺこ <(_ _)>
70デフォルトの名無しさん:2007/05/15(火) 06:54:18
>68
半角と全角の区別もつかない奴が催促するなんて百年はえーよ
71デフォルトの名無しさん:2007/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');
}
7218:2007/05/15(火) 08:33:31
どなたか教えていただけないでしょうか?
73デフォルトの名無しさん:2007/05/15(火) 08:39:28
>>72
データは?
74デフォルトの名無しさん:2007/05/15(火) 08:45:14
>>73
フォーマットは分かってるんだから別に必要ない気がするぞ。
75デフォルトの名無しさん:2007/05/15(火) 08:49:08
フォーマットはわかってるんだから自分で作れと?
>>18の場合はそんなに面倒じゃなさそうだけど・・・
76デフォルトの名無しさん:2007/05/15(火) 08:53:44
>>40もお願いします
77デフォルトの名無しさん:2007/05/15(火) 08:54:48
>>76
>>1読んで書き直し
78デフォルトの名無しさん:2007/05/15(火) 08:55:48
txtの下の方に書いてあったのね、スマソ
79デフォルトの名無しさん:2007/05/15(火) 10:02:18
カプセル化はなぜ必要なんですか?って課題です
80デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 10:41:35
>>80
俺の所では0.5秒ほどだった。
C++でも結構速いな。
83ニュートン・ラフソン法:2007/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デフォルトの名無しさん:2007/05/15(火) 10:46:47
プルグラマは数学が苦手
85ニュートン・ラフソン法:2007/05/15(火) 11:18:24
そうですか...

どうもありがとうございます
86デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 11:34:33
変微分の記号は違うだろ
88デフォルトの名無しさん:2007/05/15(火) 12:01:07
>>83
↓これの式を変えればいいんでない。
ttp://www.geocities.jp/supermisosan/newton21.html
89デフォルトの名無しさん:2007/05/15(火) 12:31:21
>>88
すげえなこんなのどっから見つけてくるんだよ。

取り敢えずやってみたらX1=1.0、X2=0.0となった。
別解としてX1=0.0、X2=1.0というのもあるはずだが、ニュートン法なので
一つしか出ないのだろう。
90デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 14:25:04
92デフォルトの名無しさん :2007/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);}}
9392:2007/05/15(火) 16:28:08
修正
//now->next = NULL;
temp->next = now;
now = temp;
94デフォルトの名無しさん:2007/05/15(火) 17:31:04
>>80
istream::get()はstdioのfgets()のC++版だからこの用途には向かないよ。
改行文字で切れるし、何バイト読めたか分からない。
95 ◆90k6K4GDF6 :2007/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デフォルトの名無しさん:2007/05/15(火) 17:49:37
>>95
スレ違い。

○main

□プロンプト表示

□数値入力

□数値表示

○return
9766:2007/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 :2007/05/15(火) 17:52:44
>>96
やはりスレチでしたか、すみません;
でもありがとう
99デフォルトの名無しさん:2007/05/15(火) 17:55:35
与えられた金額に対して、コインの最小化問題の解(枚数)を求める。(複数の場合には1つでよい)
期限: 5/18(金)まで

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


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

再帰を使った疑似コードをかけって言われたんですけど誰か分かる人いませんか?
よろしくお願いします。
100デフォルトの名無しさん:2007/05/15(火) 17:56:05
>>97
なんだ、ぼるじょあスレとマルチかYO!
101気まぐれアナスイ:2007/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気まぐれアナスイ:2007/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デフォルトの名無しさん:2007/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気まぐれアナスイ:2007/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気まぐれアナスイ:2007/05/15(火) 18:39:54
!(Φ_Φ+){頑張ってください}
では、また。
106デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 20:57:41
>>80
バグってるじゃん
108デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 21:29:55
1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3983.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: Cのみ
[4] 期限:出来る限り早くお願いします。
[5] その他の制限:C言語初心者です。今習っているのは、制御文と配列です。
110デフォルトの名無しさん:2007/05/15(火) 21:35:16
>>108
> printf("9÷4=商%d、余%d\n", 9>>2, 9%4);
あまりは 9&3 だろ?
111デフォルトの名無しさん:2007/05/15(火) 21:37:10
中途半端に知ってたんだな
112デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 21:42:13
人にやさしく
114デフォルトの名無しさん:2007/05/15(火) 21:44:46
うほっ
>>108

return0;は美しくないな。

void main(void) でよくね?
115デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 21:46:11
>>114
void mainの話をするとスレが荒れるぞ
117デフォルトの名無しさん:2007/05/15(火) 21:51:55
>>114
mainの戻り値がvoidなんて処理系依存の方法を持ち出す奴が
どういう了見でreturn 0;が美しくないとか言ってんだ
118114:2007/05/15(火) 21:52:14
>>116
うほっw
まあいいか、return 0; でも。

>>108だっが、余りは9%4でよくねぇ?なぜに9&3 ?
119デフォルトの名無しさん:2007/05/15(火) 21:54:12
沈黙は金
120デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 21:56:17
くせえ!
コピペの臭いがプンプンするぜ!
122デフォルトの名無しさん:2007/05/15(火) 21:56:42
>>118は責任もって>>120を引き取るように。
123デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 22:23:55
>>118
%も四則演算子に含むという解釈なんじゃね?
実際どっちなんだろう。
125デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 23:00:35
>>110
なぜ余が、9&3になるの?教えてください。確かに実行結果は余り1になるわけだが。
128デフォルトの名無しさん:2007/05/15(火) 23:04:57
1001=9
0011=3
------&
0001=1
129デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/15(火) 23:06:43
>>128
thanks!
131129:2007/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デフォルトの名無しさん:2007/05/15(火) 23:08:27
>>115
fflush(stdin); ってどうゆうことですか?
133129:2007/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デフォルトの名無しさん:2007/05/15(火) 23:23:29
>>115
入力ストリームに対するfflushは未定義動作
scanfで読み飛ばしとけ
135115:2007/05/15(火) 23:28:10
>>134
適当に書いただけだから>>132に言ってやってくれ
136デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 00:08:37
10個の整数データを木構造に保存するときを考える.まず,ポインタにより木を実現し,データを保存せよ.(ファイルからデータを読み込み,木構造ができるようにすると良い)
次に,キーボードから前順,中順,後順を選択する.
すると,その順で木をなぞり,指定した順にデータを表示する(再帰プログラミングで作成せよ).

すみませんが教えて下さい。
138デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 00:20:18
>>27です。

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

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


他にもいろいろと勉強になるコードありがとうございました。
140デフォルトの名無しさん:2007/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








141140の続き:2007/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を超える)です
142140の続き:2007/05/16(水) 00:32:53
問題4:キーボードより入力した文字を変換(大文字→小文字、小文字→大文字)し表示しなさい
実行結果
文字入力==>A
変換後:a

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

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

以上の問題がどうしてもわからないのでよろしくお願いします
143デフォルトの名無しさん:2007/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 が検出されました。

とでてしまいました。どのようにすればいいか教えてください。よろしくお願いします。
144140 141 142の問題:2007/05/16(水) 00:33:54
この4問わかる方がいましたら教えてください
145デフォルトの名無しさん:2007/05/16(水) 00:37:06
if((fp_in=fopen(filename,"rb"))==NULL)
146デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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:2007/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:2007/05/16(水) 02:58:46
>    文字入力==>S
>    変換後:変換できない

kwsk
151デフォルトの名無しさん:2007/05/16(水) 03:16:44
同じ問題前にも見たな。
で、同じようにそこ突っ込まれてた。
152デフォルトの名無しさん:2007/05/16(水) 06:49:17
>>143
if((fp_in==fopen(filename,"rb"))==NULL){

if((fp_in=fopen(filename,"rb"))==NULL){
153デフォルトの名無しさん:2007/05/16(水) 07:07:57
>>138さん >>146さん >>148さん
ありがとうございます
154デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 09:14:33
>>94
本当だな。std::read()の方がいいな
159デフォルトの名無しさん:2007/05/16(水) 10:43:32
>>158
この場合はiosのフォーマット変換層自体いらないので、実はfstreamでなくて
filebufのほうが無駄が無くていい。
↓のような感じ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3985.txt
ただし、filebufの内部を直接読み書きしない限りは
ファイルバッファのバッファに読み込み→ユーザバッファにコピー
という無駄が発生するので、どうしたって低水準I/Oよりは遅くなると思われ。
160デフォルトの名無しさん:2007/05/16(水) 10:48:36
>>159
なるほど。こういうのは初めて見ました。
rdbuf()を使った物は見た事があるのですが。
Cに勝てないのは辛い所ですね。
161デフォルトの名無しさん:2007/05/16(水) 12:26:06
1:C言語
2:
問題1:数値を入力し、以下のように表示しなさい
実行画面
整数入力==>8
********
*******
******
*****
****
***
**
*
162161の続き:2007/05/16(水) 12:34:17
問題2:10進数を入力し8ビットの2進数に変換し表示しなさい
実行画面
10進数入力==>118
2進数:01110110
以下の2問よろしくお願いします

163デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 13:55:23
>>161
これ一ヶ月ほど前に見たような
169デフォルトの名無しさん:2007/05/16(水) 13:59:46
http://pc11.2ch.net/test/read.cgi/tech/1137933572/473
だったわ、宿題じゃなかったか
170デフォルトの名無しさん:2007/05/16(水) 14:07:31
俺も見たような気がしたけどこれだった
http://pc11.2ch.net/test/read.cgi/tech/1165718021/417
171デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 14:27:26
>print増やす
意味が分からん。
それよりもmain内で関数が呼ばれてない。
あと、配列をグローバルにする必要性は無い。
173デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 15:23:15
>>133
助かりました!ありがとうございます!
175デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 15:44:04
C言語ではないんですがアルゴリズムのフローチャートを書ける方居ますか?
問題1:平均点計算
点数を入力して、平均点を出力するフローを答えなさい[入力した点数が0より小さい時終了する]
問題2:合計
1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい
の2問のフローチャートがどうしてもわからないので何方か解る方がいましたら教えてください
いくら考えても解らないので何方かお願いします
177デフォルトの名無しさん:2007/05/16(水) 15:44:40
>>171 こういう事か?

今、××を見ながらCの勉強をしています。
そこに「ある配列を反転した内容を別の配列にコピーする」というプログラムあり、
それを改造して、「あるひとつの配列の内容を反転する」プログラムを自力で作ってみました。
しかしコンパイルは通るのですが、実行してみると思ったとおりの結果にならなくて困っています。
元のプログラムでは表示用の関数printが2つに分かれており、
それをひとつにまとめてしまったのが原因なのでしょうか?
配列がひとつしか無いので表示用の関数は1つだけにしたいのですが、
上手いやり方はありませんか?
178デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 16:13:28
CUIばっかじゃねーか
180デフォルトの名無しさん:2007/05/16(水) 16:37:06
10個の整数データを木構造に保存し、
順に木をなぞる再起プログラミングを作成せよ.

C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。
181デフォルトの名無しさん:2007/05/16(水) 16:39:22
182デフォルトの名無しさん:2007/05/16(水) 16:39:26 BE:34937892-2BP(222)
>>180
>順に木をなぞる再起プログラミングを作成せよ.

何の順だ。
183デフォルトの名無しさん:2007/05/16(水) 16:46:38
他人に質問できるレベルにさえ達してないのか
184デフォルトの名無しさん:2007/05/16(水) 17:01:22
>>183
課題をそのままコピーしただけなのですが・・・すいません。

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

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

C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。
185デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 17:18:00 BE:69876094-2BP(222)
>>184
情報が足りねえって言ってるのにさらに減らすのはどういう嫌がらせですか。
「どんな木をどうやってなぞるのか」と聞いてるのに。
187デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 17:55:23
>>189
スレ違い。

整数割る整数は整数になる。実数にしたいなら、キャストしとけ。
ついでに言えば、特にケチる理由がないならdoubleにしとけ。
floatでは、10進換算で7桁程度しか精度がないぞ。
Ex.
double kote_wari = (double) kote / ure_kane * 100.;
191デフォルトの名無しさん:2007/05/16(水) 17:56:03 BE:104814296-2BP(222)
>固定費・変動費の割合が0.000000000になる

理由をまず考えろ。
192デフォルトの名無しさん:2007/05/16(水) 17:56:54
小手割りって何かの技みたいだな。
193デフォルトの名無しさん:2007/05/16(水) 17:58:48
>>190
わかりました
100.0000を超えることはないのでfloatで十分だと思ったのですが…
doubleでやってみますね
キャストはまだ習ってませんがjavaで学んだのでやってみます
ありがとうございました
194デフォルトの名無しさん:2007/05/16(水) 17:59:59
>>191
分かりませんでしたのでここで質問させていただきました
あれ?もともとの公式が間違ってるのかな…?
195デフォルトの名無しさん:2007/05/16(水) 18:04:55
>>194
>190
196デフォルトの名無しさん:2007/05/16(水) 18:05:37
>>190
キャストがよく分からなかったので変数を全てfloatで宣言したら正常に動作しました
本当にありがとうございました
197デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 18:10:42
>>196
その大雑把な応用性は現場にはとても必要なものだ
しかし大雑把過ぎると精密さが要求されるプログラムでしくじるかもな
199デフォルトの名無しさん:2007/05/16(水) 18:44:55 BE:104814296-2BP(222)
最低限、作用機序を理解していることが前提だがな。
「理由は分からないけどこうしたら直った」という対処は迷惑でしかない。
200デフォルトの名無しさん:2007/05/16(水) 20:05:27
>>188
この前入学したばかりなんだろ?
なんかレベル高い授業やってんな
201デフォルトの名無しさん:2007/05/16(水) 20:11:29
>>188は高学歴
202デフォルトの名無しさん:2007/05/16(水) 20:14:51
>200
用語が難しそうに見えるだけで、やってることは数字入力に四則演算程度の入門レベルだろ。
203デフォルトの名無しさん:2007/05/16(水) 20:17:02
>>202
高校一年でだぞ?
204デフォルトの名無しさん:2007/05/16(水) 20:45:25
私が高校一年の時はCじゃなくてアセンブリだったな orz どう考えても低(ry
205デフォルトの名無しさん:2007/05/16(水) 20:47:36
高1でアセンブラか。
そりゃずいぶんと低レベルだな。
206デフォルトの名無しさん:2007/05/16(水) 20:52:58
>>205
俺なんか中学のときにトランジスタを・・・
207デフォルトの名無しさん:2007/05/16(水) 20:56:22
それは趣味だろ
義務教育でトランジスタとか触るの?
208デフォルトの名無しさん:2007/05/16(水) 20:58:39
もしかして、ゆとり世代には
「技術」という科目は無いのか?
209デフォルトの名無しさん:2007/05/16(水) 20:58:46
もう20年以上まえになるが...
高校の頃, 必死こいてセグメントレジスタ気にしながら 8086 アセンブラで
lisp 処理系を作ろうとしていた当時の俺って低レベルですか?
210デフォルトの名無しさん:2007/05/16(水) 21:08:09
>>207-208
10年前中学生だった俺は授業の中でトランジスタを触ることがあった。
>>209
低レベルだね
211デフォルトの名無しさん:2007/05/16(水) 21:14:28
>>208
ゆとり直前世代ですがありました

皆さんが低レベルと言ってるのは、低級と言い換えても構いませんね!
大学入って初めてCに触れてるくらいだから俺はかなり高レベル
212デフォルトの名無しさん:2007/05/16(水) 21:15:50
俺なんか小学校のときにそろばんを・・・
213デフォルトの名無しさん:2007/05/16(水) 21:17:28
低水準のことじゃないのか。
214デフォルトの名無しさん:2007/05/16(水) 21:17:32
>>211
俺にとっては C はアセンブラの延長
っか, マシンに依存しないアセンブラ
十分, 低レベル言語
215デフォルトの名無しさん:2007/05/16(水) 21:46:05
ゆとりだけど技術あったよ
中学1年と2年で木工、3年でPC
選択ではタイニーベーシックもやる

ちなみに>>188の高校は大体予想が付く
普通の工業では固定費割合とかの経営側のことはやらない
たぶん初級シスアド狙ってる学校
だから初級シスアド試験一部免除校リストのどれかだろ
216デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/16(水) 22:11:55
ループ内で変数確保とはびっくりした。これっていいの?
218デフォルトの名無しさん:2007/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] その他の制限: 特にないです。
219216:2007/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デフォルトの名無しさん:2007/05/16(水) 22:26:09
>>216 >>219
スレ違い
スコープについて勉強してこい
221デフォルトの名無しさん:2007/05/16(水) 22:40:00
>>186
根付き木で、深さ優先探索です。
222216:2007/05/16(水) 22:40:15
やはりあらかじめ作成しておいて、後に削除するしかないのでしょうか・・・。
それだと、敵をある時間に生成する上手い方法ありませんか?
223デフォルトの名無しさん:2007/05/16(水) 23:04:59
質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
文字列@と文字列Aを比較し、正しければ○、正しくなければ×を出力せよ。
文字列は半角英数、全角、空白、記号も含める。
(文字列@、Aともに空白の場合はエラーを出力する。)

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

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名:Visual Studio
 [3.3] 言語:C
[4] 期限:5/17
[5] その他の制限: 無し
224デフォルトの名無しさん:2007/05/16(水) 23:10:12
>>223
#include<stdio.h>
#include<string.h>
int main(){
char str1[1000],str2[1000];
printf("文字列@を入力してください。--->");
scanf("%s",str1);
printf("文字列Aを入力してください。--->");
scanf("%s",str2);
printf("結果:%s\n",strcmp(str1,str2)?"×":"○");
return 0;
}
225デフォルトの名無しさん:2007/05/16(水) 23:14:13
>>224
ありがとうです。
でも、1000文字を超えたらアウトですよね?
その場合、どうしたらいいですか?
それと、両方とも空白時のエラーメッセージはどうしましょう・・・
226デフォルトの名無しさん:2007/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("文字列Aを入力してください。--->");
fgets(str2,N,stdin);
if(strlen(str1)>1||strlen(str2)>1)
printf("結果:%s\n",strcmp(str1,str2)?"×":"○");
else
printf("エラー\n");
return 0;
}
さっきよりほんの少しだけまともに書いてみた。
メモリの許す限り文字列を比較したいなら、勉強して自分でがんがれ
227>222:2007/05/16(水) 23:50:06
宣言をループの外で
確保はループの中で
228デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/17(木) 01:45:33
>>225
応用でstring.hを使わずに考えられると力が付くぞ
230デフォルトの名無しさん:2007/05/17(木) 01:51:50
>>225
1000文字超えたときのこと考えるとCじゃ無理
231デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/17(木) 03:08:46
>書かさせてもらいます
さ入れ言葉
233デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/17(木) 05:56:55
うpロダ使えYO!
242216:2007/05/17(木) 06:06:30
>>227 ありがとうございます無事できました。

クラスをnewで作成したとします。(仮に*test)とします。
これをクラス内のメソッドで消す方法はありませんか?
つまり、自クラスで自分をdeleteするということです。
自分は自信の名前を知らないので、
delete test ; と記述することが出来ません。
あらかじめprivate変数として自信の名前を記録しておく他ないのでしょうか?
243デフォルトの名無しさん:2007/05/17(木) 06:50:35
delete This;
244デフォルトの名無しさん:2007/05/17(木) 06:51:24
↑間違い
delete this;
です。
245デフォルトの名無しさん:2007/05/17(木) 06:54:03
てかこれは基本中の基本であってもう一度C++勉強し直せ
246デフォルトの名無しさん:2007/05/17(木) 08:01:23
247デフォルトの名無しさん:2007/05/17(木) 09:10:59
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  【処理方式】
@ int型変数に値を入力する。(0〜9)
A chg関数に、入力した値を渡す。(ポインタ)
B その値が2で割って余りが0なら10倍し、余りが1なら5倍する。
C 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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/17(木) 09:46:33
>>247
>@ int型変数に値を入力する。(0〜9)
ってあるけど、
>Cnt =>XXXX
これと矛盾しない?
250デフォルトの名無しさん:2007/05/17(木) 11:08:22 BE:31055982-2BP(222)
>>221
漠然としすぎててわからんと何度も言ってるわけだが。

>根付き木で、

そういうことじゃなくて、子は何人までとか、親子関係、兄弟関係の決め方とかが
わからんとやりようがねえって言ってんだよ。
その意味すら分からないなら単位落として退学しろクズ。
251デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/05/17(木) 11:18:50
>>250
もちつけw

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

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

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

で、これでもまだ理解できないなら、単位は諦めな。
もう一回受けるのが君のためだ。
253デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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;
}
255sage:2007/05/17(木) 13:06:29
>>254
すばやい対応ありがとうございました。

すいませんよろしければ教えてほしいのですが、
このときn^4のところが(n^4+2)となったらどのように記述したらよろしいでしょうか?
>>255
n^4のときにpow(n, 4)と書いたのだから、(n^4+2)ならおなじようにすればいいんでない?
257247:2007/05/17(木) 13:39:51
>>247
#include<stdio.h>
void chg(int *cnt){
*cnt *= *cnt%2 ? 5 : 10;
}
この意味を教えてもらっていいですか?
258デフォルトの名無しさん:2007/05/17(木) 13:42:28
>B その値が2で割って余りが0なら10倍し、余りが1なら5倍する。
259デフォルトの名無しさん:2007/05/17(木) 13:55:01
*cnt *= *cnt%2 ? 5 : 10;
この表記だと
参照はずしの* と *= との順位とか 参照はずしの* と % との順位で不安を感じるな
260デフォルトの名無しさん:2007/05/17(木) 14:02:59
>>218お願いします><
261247:2007/05/17(木) 14:13:47
>>259
参照はずしとはなんですか?
262デフォルトの名無しさん:2007/05/17(木) 14:14:37
>>261
>参照はずしとはなんですか?
*
263デフォルトの名無しさん:2007/05/17(木) 14:48:06 BE:29115735-2BP(222)
ここは宿題解説スレじゃないので答えもらったらさっさと持って帰れ。
264デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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;}
266デフォルトの名無しさん:2007/05/17(木) 16:56:56
>>259
不安なら括弧つければいいじゃん
制限無しだったしそこまで丁寧にはやってないぞ
267デフォルトの名無しさん:2007/05/17(木) 17:23:31
初めまして。大学1年生です。
プログラミングの授業で課題が出されました。

【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
キーボードから文字列を入力し、それを逆順に表示するプログラムを作成せよ。
表示には必ずポインタを用いること。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003を使っております。
 [3.3] 言語:C言語
[4] 期限:[2006年05月23日17時まで]
[5] その他の制限:なし


よろしくお願いします。
268デフォルトの名無しさん:2007/05/17(木) 17:31:54
#include <stdio.h>
int main()
{
char buf[100], *p;
fgets(buf, sizeof(buf), stdin);
for (p = buf; *p != '\n'; p++);
for (;p >= buf; p--)
putchar(*p);
return 0;
}
こうですか?
269デフォルトの名無しさん:2007/05/17(木) 17:34:57
>>267
#include <stdio.h>
#include <string.h>
int main()
{
char buf[100];
if (fgets(buf, sizeof(buf), stdin) == NULL) return 1;
int ic = strlen(buf) - 1;
if (buf[ic] == '\n') --ic;
for (; ic >= 0; --ic) {
putchar(buf[ic]);
}
return 0;
}
270デフォルトの名無しさん:2007/05/17(木) 17:42:46 BE:23292162-2BP(222)
271デフォルトの名無しさん:2007/05/17(木) 17:45:50
>267
#include <stdio.h>
int main(void)
{
char str[1024];
char *p;
scanf("%s", str);
p = str;
while(*p) p++;
while(p!=str) putchar(*--p);
return 0;
}
272デフォルトの名無しさん:2007/05/17(木) 18:00:26
#include <stdio.h>
#define MAX_INPUT 1024
void
reverse(char *buf)
{
if (*(buf) == '\n')
return;
reverse(buf + 1);
putchar(*buf);
}
int
main()
{
char buf[MAX_INPUT];
if (fgets(buf, MAX_INPUT, stdin) == NULL)
return 1;
reverse(buf);
putchar('\n');
return 0;
}

273デフォルトの名無しさん:2007/05/17(木) 18:15:20
>>267
void rp(char *s){
if(*++s)rp(s);
putchar(*--s);
}
int main(){
char s[256];
fgets(s,256,stdin);
rp(s);
return 0;
}
携帯だから遅い上に未確認 orz
274デフォルトの名無しさん:2007/05/17(木) 18:50:27
プログラミングの授業で課題が出されたのですが、
コンパイルできても自分の思ってるとおりに動いてくれません。
何処が違うのか、また、どのように直せばいいのか指摘をお願いいたします。

【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
連結リストの挿入・削除・表示を行う。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] Borland C++ と BCC Developer
 [3.3] 言語:C言語
[4] 期限:[2006年05月25日17時まで]
[5] その他の制限:なし


よろしくお願いします。
275デフォルトの名無しさん:2007/05/17(木) 18:53:27
ソースうぷすれ
276デフォルトの名無しさん:2007/05/17(木) 18:53:47
>>274
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct CELL{
struct CELL *next;
int value;
}

main(void){
int or,banti,mval,y,z;
struct CELL *header,*p,*q,*new,b,c,d;

header->next = &b;
header->value = 130;
b.next = &c;
b.value = 90;
c.next = &d;
c.value = 55;
d.next = NULL;
d.value = 160;

for(;;){

/*qを現在、pを次のポインタに設定*/
p = header->next;
q = header;
277デフォルトの名無しさん:2007/05/17(木) 18:55:04
printf("[0]=挿入、[0以外]=削除\n");
scanf("%d",&or);
printf("何番目の要素[0〜]?\n");
scanf("%d",&banti);


if(or == 0){
printf("値を入力してください\n");
scanf("%d",&mval);
if(banti == 0){
/*リストの先頭に新しいセルを挿入する場合*/
if((q = malloc(sizeof(struct CELL))) == NULL){
printf("メモリーが足りない\n");
exit(0);
}
new->value = mval;
new->next = header;
header = new;
}else{
/*ポインタqで記されたセルの直後に新しいセルを挿入する*/
for(y = 1;y <= banti;y++){
q = p;
p = p->next;
}
if((p = malloc(sizeof(struct CELL))) == NULL){
printf("メモリーが足りない\n");
exit(0);
}
new->value = mval;
new->next = p;
q->next = new;
}
278デフォルトの名無しさん:2007/05/17(木) 18:55:12
>276
headerは何を指してるの?
279デフォルトの名無しさん:2007/05/17(木) 18:56:03
}else{
/*連結リストからの削除*/
if(banti == 0){
/*リストの先頭の削除*/
if(header == NULL){
printf("リストが空なので削除できない\n");
exit(0);
}
q = header;
header = q->next;
free(q);
}else{
/*ポインタqで記されたセルの直後のセルを削除する*/
z=1;
while(z < banti){
q = p;
p = p->next;
z++;
}
if(q->next == NULL){
printf("セルが無いから削除できない\n");
exit(0);
}
q->next=p->next;
free(p);
}
}
printf("表示\n");
for(p=header;p!=NULL;p=p->next){
printf("%3d\n",p->value);}}}
280デフォルトの名無しさん:2007/05/17(木) 18:59:05
>>278
14行目のことなら、仮の連結リストをつくって、そこから挿入や削除をしていこうかと。
普通に変数とか構造体のポインタの使い方を間違えてるかもしれないので…
281デフォルトの名無しさん:2007/05/17(木) 19:04:51
>header->next = &b;
>header->value = 130;
このときのheaderは何を指してるの?
282デフォルトの名無しさん:2007/05/17(木) 19:06:32 BE:52408139-2BP(222)
>>280
>仮の連結リストをつくって

つくってないじゃん。
283デフォルトの名無しさん:2007/05/17(木) 19:07:35
>>281
何かを指しているわけではなく単独でヘッダーという変数を作っただけです。

header > b > c > d という感じの連結リストになっているのですが…

あ、確かにこれは変な挙動起こしそう…直してきます。
284デフォルトの名無しさん:2007/05/17(木) 19:09:16
>>283
>何かを指しているわけではなく単独でヘッダーという変数を作っただけです。
初期化してないポインタに代入しちゃ鼻から悪魔だお
285デフォルトの名無しさん:2007/05/17(木) 19:09:49
どなたかおしえてください。
typedef double fp(double)
これどういうこと?
286デフォルトの名無しさん:2007/05/17(木) 19:13:25
>>284
headerがポインタであることを忘れてました。
何でこれでコンパイルできたんだろうなぁ…

main(void){
int or,banti,mval,y,z;
struct CELL *header,*p,*q,*new,a,b,c,d;

header = &a;

a.next = &b;
a.value = 130;
b.next = &c;
b.value = 90;
c.next = &d;
c.value = 55;
d.next = NULL;
d.value = 160;

これでここのところは大丈夫でしょうか?
287デフォルトの名無しさん:2007/05/17(木) 19:19:56
>>251
お願いしますm(_ _)m
288デフォルトの名無しさん:2007/05/17(木) 19:26:19
>277
for(y = 1;y <= banti;y++){ → for(y = 1;y < banti;y++){
if((p = malloc(sizeof(struct CELL))) == NULL){
→ if((new = malloc(sizeof(struct CELL))) == NULL){
>279
free(p) → free(q)
これで多分大丈夫
289デフォルトの名無しさん:2007/05/17(木) 19:33:06
>>285
識別子 fp を、double を引数とし double を返す関数の型として宣言
290デフォルトの名無しさん:2007/05/17(木) 19:53:29 BE:54348847-2BP(222)
>>283
>何かを指しているわけではなく

何かを指さないと連結できないだろが。
291デフォルトの名無しさん:2007/05/17(木) 19:54:06 BE:38820454-2BP(222)
>>287
今やってる。思いの外大変だ。
292267:2007/05/17(木) 19:56:19
>>268
>>269
>>270
>>271
>>272
>>273

ご回答ありがとうございました。

いろんな答えは、今後の勉強になります!!
ありがとうございました。
293デフォルトの名無しさん:2007/05/17(木) 20:17:11
>>291
ありがとうございます!!
待ってますm(_ _)m
294デフォルトの名無しさん:2007/05/17(木) 20:25:33
入力した文章中の単語を1行に一つずつ印字するプログラムを書け。
(ここでの単語とは、ブランク,タブ,改行文字で区切られた文字)
例えば、
This is a book.
と入力すると、
This
is
a
book.
と表示される。

while((c=getchar()) != EOF)
という文を使って文章を入力し、while文終了後に一気に表示させたいのですが、どうやって表示させればいいのかわかりません。
教えてください。
295274:2007/05/17(木) 20:32:55
>>281
>>283
>>288

etc…様


ご回答ありがとうございます!

でも、まだ実際に動かしてみると
部分部分で可笑しな挙動をしてたりしてますが、
初期の状態よりは随分とマシになったような気がいたします。

しばし、自分の力で頑張ってみようと思いますが、
しばらくこのスレを見ながらプログラムをうってますので
どこか変な場所が見つかればご指摘お願いいたします。

またわからなくなった時は聞きにきますので
その時は宜しくお願いします。ありがとうございました。
296デフォルトの名無しさん:2007/05/17(木) 20:34:40
>>294
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c;
printf("Input strings > ");
while((c=getchar()) != EOF) {
if( isspace(c) ) putchar('\n');
else putchar(c);
}
return 0;
}
297デフォルトの名無しさん:2007/05/17(木) 20:43:25
>>296でwhileを抜けるには最後に Ctrl+Z とかでEOFを入力しておいてね
298デフォルトの名無しさん:2007/05/17(木) 20:46:45 BE:46584364-2BP(222)
>>251>>287 できた。
#include<stdio.h>
#include<stdlib.h>
char* reading4(int d, char* add){
char* result = NULL;char* restmp;
char* places[]={"SEN","HYAKU","JU",""};
char* digits[]={NULL,"","NI","SAN","YON","GO","ROKU","NANA","HACHI","KYU",};
char* reed[4]={NULL,NULL,NULL,NULL};char tmp[256];int i,len;size_t total=0;
sprintf(tmp,"%i",d);len=(int)strlen(tmp);for(i=0;i<len&&i<4;i++){
if(tmp[len-i-1]-'0'){reed[3-i]=digits[tmp[len-i-1]-'0'];
total+=strlen(reed[3-i])+strlen(places[3-i])+1;}}
if(len>3&&tmp[len-4]=='1'){reed[0]="IS";total+=2;}if(len&&tmp[len-1]=='1'){
if(add&&add[0]){char ls[1024];sprintf(ls,"I%c%s",add[0],add);reed[3]=ls;
total+=strlen(ls);}else{reed[3]="ICHI";total+=4;}}
result=(char*)malloc(total+1);restmp=result;for(i=0;i<4;i++){if(reed[i]){
restmp+=sprintf(restmp,"%s%s ",reed[i],(tmp[i]-'0')?places[i]:"");}}
return result;}
int main(void){char tmp[256];char* places[]={"CHO ","OKU ","MAN ",""};
char* reed[4]={NULL,NULL,NULL,NULL};int data,i;fgets(tmp,256,stdin);
data=atoi(tmp);if(data){for(i=0; data>0 && i<4; i++){if(data%10000){
reed[3-i]=reading4(data%10000,(i==0)?places[3-i]:"");data/=10000;}}
for(i=0;i<4;i++){if(reed[i]){fputs(reed[i],stdout);fputs(places[i],stdout);
free(reed[i]);}}}else{fputs("ZERO",stdout);}putchar('\n');return 0;}
299294:2007/05/17(木) 20:47:38
>>296
これだと、Enterを押したときにひょうじされませんか
300デフォルトの名無しさん:2007/05/17(木) 20:56:00
>>299
標準入力にて EOF を検出したら while ループ終了でしょ?
ちゃんと最後のEOFを入力してちょうだいな。
301294:2007/05/17(木) 20:58:42
>>300
できれば、whileループ終了後にまとめて表示したいのですが
302デフォルトの名無しさん:2007/05/17(木) 21:00:06
>>301
だからその終了の条件が EOF が入力されたという条件でしょ?
EOFを入力してくれよ
303デフォルトの名無しさん:2007/05/17(木) 21:01:24
>>301
入力された文字を格納する文字配列でも必要ってこと?
304294:2007/05/17(木) 21:02:48
>>302
EOFを入力したらプログラムが終わってしまいます。
Enterを押したときに表示するのでなく、EOFを入力したときに表示したいのです
305デフォルトの名無しさん:2007/05/17(木) 21:03:08
>>298
ありがとうございます!!
でも100とか1000とか表示されません…
あと、1300とかはISSEN SANHYAKUではなくてISSEN SANBYAKUのように表示しないと
いけないんですorz
306デフォルトの名無しさん:2007/05/17(木) 21:10:06
>>304 んなこたぁ〜ねぇべ、ちゃんと入力した文字は空白ごとに改行されて表示すっぺ。
まぁ、こんな漢字で文字配列に格納してやってみるがや
#include <stdio.h>
#include <ctype.h>
int main(void) {
char c,buf[1024],i;
printf("Input strings > ");
while((c=getchar()) != EOF) {
if( isspace(c) ) buf[i++]='\n';
else buf[i++]=c;
}
buf[i]='\0';
puts(buf);
return 0;
}
307デフォルトの名無しさん:2007/05/17(木) 21:13:08
>>306の最初の i=0; を忘れてたがや。まぁ、while以外の条件もちゃんと書いてやぁ。
あと>>1のフォームさ忘れるでねぇ
308294:2007/05/17(木) 21:19:10
>>307
ありがとうございます。
質問用のテンプレ忘れてすみません
309デフォルトの名無しさん:2007/05/17(木) 21:24:39
>>306
ちょっとダサイけど、こんな風にしたら改行が続かずに済むよ。

int flag = 0;
while ((c=getchar()) != EOF) {
    if (isspace(c))
        flag = 1;
    else {
        if (flag == 1) {
            buf[i] = '\n';
            ++i;
        }
        flag = 0;
        buf[i] = c;
        ++i;
    }
}
310デフォルトの名無しさん:2007/05/17(木) 21:24:46
>>251
#include "stdio.h"
#include "stdlib.h"
char *num[] = {
0, "", "ni", "san", "yon", "go", "roku", "nana", "hachi", "kyuu"
};
char *po10[] = {"", "juu", "hyaku", "sen"};
char *po10_4[] = {"", "man", "oku", "chou"};
char *get_kurai(int n)
{
if (n % 4) return po10[n % 4];
else return po10_4[n / 4];
}
続く
311310:2007/05/17(木) 21:26:05
char *do_yome(int x, int n)
{
char *yomi, *tmp, *xnum, *kurai;
int l;
if (x < 10) {
kurai = get_kurai(n); xnum = num[x];
if (!*xnum && n >= 4) xnum = "ichi";
yomi = malloc(strlen(xnum) + strlen(kurai) + 1);
strcat(strcpy(yomi, xnum), kurai);
return yomi;
}
yomi = do_yome(x / 10, n + 1); xnum = num[x % 10];
if (xnum) {
if (n == 0 && !*xnum) xnum = "ichi";
kurai = get_kurai(n);
tmp = malloc(strlen(xnum) + strlen(kurai) + strlen(yomi) + 2);
strcat(strcat(strcat(strcpy(tmp, yomi), " "), xnum), kurai); free(yomi);
yomi = tmp;
}
return yomi;
}
312311:2007/05/17(木) 21:27:14
char *yome(x)
{
char *yomi, *minus;
if (x == 0) return strdup("zero");
if (x < 0) yomi = do_yome(-x, 0);
else yomi = do_yome(x, 0);
if (x < 0) {
minus = malloc(strlen("mainasu ") + strlen(yomi) + 1);
strcat(strcpy(minus, "mainasu "), yomi); free(yomi);
yomi = minus;
}
return yomi;
}
int main(int ac, char **av)
{
int x;
char *yomi;
x = atoi(av[1]);
yomi = yome(x);
printf("%s\n", yomi);
free(yomi);
}
313デフォルトの名無しさん:2007/05/17(木) 22:12:29
何遍も言うとろうが!
読みの例外処理せんといかんて!
お前らアホか!
314デフォルトの名無しさん:2007/05/17(木) 22:13:45
宿題で例外処理とか・・・
315デフォルトの名無しさん:2007/05/17(木) 22:15:28
こんなところで宿題を○投げすることそのものが例外であります!
316デフォルトの名無しさん:2007/05/17(木) 22:24:46
じゃあ、例外処理をしないとな
317デフォルトの名無しさん:2007/05/17(木) 22:25:32
>>294
#include <stdio.h>
#include <ctype.h>

int main()
{
    int c;
    FILE *fp = tmpfile();
    while ((c = getchar()) != EOF) {
        if (isspace(c)) {
            while (isspace(c = getchar()))
                ;
            ungetc(c, stdin);
            putc('\n', fp);
        } else
            putc(c, fp);
    }
    rewind(fp);
    while ((c = getc(fp)) != EOF)
        putchar(c);
    fclose(fp);
    return 0;
}
318デフォルトの名無しさん:2007/05/17(木) 22:27:51
>>317
さぁ、ティムポ、もとい、テムポファイルの詳細を書いて頂こうではないか
> tmpfile();
319デフォルトの名無しさん:2007/05/17(木) 22:28:48
>>318
処理系依存です。
320デフォルトの名無しさん:2007/05/17(木) 22:30:58
そぉ〜かそうかぁ、大きさや形は人それぞれ、個人依存ってやつか。ほぉ〜れ、俺のは○×いぞぉ〜
はっはっは(ダイバスターの博士風に
321デフォルトの名無しさん:2007/05/17(木) 22:31:02
>>318
tmpfile()がANSI/ISO C標準関数であることを知らないのではあるまいな
322デフォルトの名無しさん:2007/05/17(木) 22:32:38
>>321
ttp://www.bohyoh.com/CandCPP/C/Library/tmpfile.html
知っとるぞ。さぁ、次のお題だが・・・
323デフォルトの名無しさん:2007/05/17(木) 22:34:33
>>317
> int main()
括弧の中がANSI、ISO準拠でない点について。
324デフォルトの名無しさん:2007/05/17(木) 22:38:28
>>264-265
dクスです!><
325デフォルトの名無しさん:2007/05/17(木) 22:38:31
>>323
C89はK&Rスタイルを許してるんでなかったっけか?
326デフォルトの名無しさん:2007/05/17(木) 22:44:13
gcc -Wallで-ansiとか-std=c99とかつけても何も言われないみたいだな
>>317のソース
327デフォルトの名無しさん:2007/05/17(木) 22:47:20
>>321
> tmpfile()がANSI/ISO C標準関数
っとANSI / ISOの話を持ち出すならなおさらパラメーターがなければ
int main(void) 、あれば int main(int argc, char * argv[])というのは過去スレで既出が
もう議論はせんぞぉ〜。では、次の問題だが・・・ANSI、ISO準拠を無視したら動かないコンパイラは何か?
ダイバスター出動!
328デフォルトの名無しさん:2007/05/17(木) 22:48:35
>>327
いやだから、K&Rスタイルは別に規格無視ではないのでは?
C++なら明白に違法だけど。
329デフォルトの名無しさん:2007/05/17(木) 22:49:26
ていうか>>318は結局何が聞きたかったのやら。
意図が分からない。
330デフォルトの名無しさん:2007/05/17(木) 22:56:01
>>328
C++でプロトタイプ無しは違法だが、
int main()に関しては、Cのint main(void)と同じだから、
C++でも違法ではないわな。
331デフォルトの名無しさん:2007/05/17(木) 22:58:12
ただの宿題で泥沼になったわな
332デフォルトの名無しさん:2007/05/17(木) 23:01:00
またmainの規格議論か!
333デフォルトの名無しさん:2007/05/17(木) 23:01:38
ANSI Cでプロタイプを必須にしていれば、
voidなどという引数宣言を作らずに、C++同様にする
こともできたはず。
Denis Ritchieもそれを醜いと認めていたようだしね。
334デフォルトの名無しさん:2007/05/17(木) 23:05:02
>>328
ANSI、ISO標準の話を持ち出す場合はint mainについてもそれ準拠が望ましいという話だが?
これ以上は議論せんぞ。自分で言っていて墓穴を掘るくらいならしゃべらない方が良いぞ。
では次の問題だが・・・ANSI、ISO準拠で書かれていないソースをウェブサイトや書物で公開しちゃっている
のは、いったい何者か?ダイバスター出動!
335デフォルトの名無しさん:2007/05/17(木) 23:06:54
>>332
残念、mainの規格ではなくANSI、ISO準拠(それに応じて従って)で記述するソースなら
なおさらという話だ。tmpfile()がANSI/ISO C標準関数といっておきながら、プログラムの主体となる
main関数がANSI、ISO準拠でないのはこれいかに?
336デフォルトの名無しさん:2007/05/17(木) 23:07:02
>>334
> ANSI、ISO標準の話を持ち出す場合はint mainについても
> それ準拠が望ましいという話だが?

んな脳内ルールを押し付けられてもな。
そんな話にこだわってんの、あんた一人みたいだし。
で、あんたは>>318で結局何を言いたかったの?
337デフォルトの名無しさん:2007/05/17(木) 23:08:05
>>334
カーニハンとリッチー。
知ってる?とっても有名な人ですが。

ANSI C準拠のK&R第二版の先頭のサンプルは
main()
ではじまります。
338デフォルトの名無しさん:2007/05/17(木) 23:08:16
もはや、ここは宿題を片付けてくれるようなスレではない
339デフォルトの名無しさん:2007/05/17(木) 23:09:40
そう、詰まる話が、自分でANSI、ISO C標準関数の話を持ち出したのに
mainがANSI、ISO C標準関数の形式で書かれていないのが引っかかったわけだ。
だがこれ以上それについては議論せんぞ。ANSI、ISO準拠のmain関数の記述は
ISOのページにもしっかりと引数があるかないかで
int main(void) または int main(int argc, char * argv[]) と記されておったからな。
では次の問題だ。このスレはいったい何のスレか?ダイバスター出動!
340デフォルトの名無しさん:2007/05/17(木) 23:10:10
まぁ明日の昼頃には収まってるだろうから、
丸投げしたい人はそれまで自分で努力してみるんだ

無駄だと思うけど。
341デフォルトの名無しさん:2007/05/17(木) 23:11:10
>>339
で、>>318は何だったわけ?
なんか君、自分がものすごーく的外れなこと言ったからって
誤魔化しに走ってるだけじゃないの?
いつもの下らないmain()議論でお茶濁そうとして。
342デフォルトの名無しさん:2007/05/17(木) 23:13:39
ANSI、ISO標準の話を持ち出したのにint main()必死だなw
343デフォルトの名無しさん:2007/05/17(木) 23:16:40
>>342
> ANSI、ISO標準の話を持ち出したのにint main()必死だな
tmpfile()の説明をするんなら、標準関数だと説明するのが手っ取り早いでしょ。

で、K&Rスタイルでmain()を記述することは違法ではないし、
そんなのはかのカーニハンとリッチーが、ANSI C対応版と謳ってる
K&R第二版でやっとるわけです。
こんなところで下らない議論を続けるのなら、彼らに文句を言ったらどうかな?
344デフォルトの名無しさん:2007/05/17(木) 23:18:30
JIS X3010:2003では、関数定義で括弧の中が空なら、
引数がないものとして扱うというような規定があり、
このことから俺は、関数定義時なら()と(void)は同じでは、と思うのだがどうだろう?
345デフォルトの名無しさん:2007/05/17(木) 23:20:39
>>344
つまり
C89ではK&Rスタイルが許されているので合法である。
C99ならvoidと解釈されるのでC++と同じ意味で合法になる、ということですか?

さっきから暴れているいつもの人は、なんなんでしょう。
346デフォルトの名無しさん:2007/05/17(木) 23:21:10
321 名前:デフォルトの名無しさん 投稿日:2007/05/17(木) 22:31:02
>>318
tmpfile()がANSI/ISO C標準関数であることを知らないのではあるまいな

ANSI、ISO標準関数を持ち出すならなおさらプログラムの開始のmain関数が
int main(必要に応じた引数)というのを知らないではあるまいな
347デフォルトの名無しさん:2007/05/17(木) 23:22:23
>>339
宿題スレだ
だから帰れ
348デフォルトの名無しさん:2007/05/17(木) 23:25:05
ANSI、ISO準拠の話にC89ではK&Rスタイルの話を持ち込んでくる奴わろすwwwwwwww
お前のスタイルをはっきりしろよw
349デフォルトの名無しさん:2007/05/17(木) 23:25:43
こりゃ明日の朝まで放置、だな……
350デフォルトの名無しさん:2007/05/17(木) 23:26:36
328 名前:デフォルトの名無しさん 投稿日:2007/05/17(木) 22:48:35
>>327
いやだから、K&Rスタイルは別に規格無視ではないのでは?
C++なら明白に違法だけど。

C++なら明白に int main()の過去の中がなくてもOKなんすけど?
こいつわかってねーわ、話にならねーから仕様書に目を通してないなら黙ってろ。
351デフォルトの名無しさん:2007/05/17(木) 23:26:45
>>348
規格/言語仕様とスタイルの区別がついてない厨房って以前もいたなぁ
確かボコボコに突っ込まれてたけど
352デフォルトの名無しさん:2007/05/17(木) 23:27:40
>>350
その
> C++なら明白に違法だけど
は、
> K&Rスタイル
にかかっているのです。
353デフォルトの名無しさん:2007/05/17(木) 23:40:27
この流れ秋田
354デフォルトの名無しさん:2007/05/17(木) 23:51:21
いまだ!ANSI、ISO標準とか言っておきながら肝心のmain関数がANSI、ISO準拠になっていない奴
ぬるぽ!
355デフォルトの名無しさん:2007/05/17(木) 23:51:46
こまち
356デフォルトの名無しさん:2007/05/17(木) 23:56:43
職場でいじめられたストレスを解消しにきたんだろ。
きっとまた同じハゲの犯行。
357デフォルトの名無しさん:2007/05/18(金) 00:38:08
[1] 授業単元:構文解析
[2] 問題文(含コード&リンク):
次のプログラムを書き換えて、自然数の足し算を行うプログラムを作成せよ。
また、自然数の足し算、引き算そして掛け算を行えるよう拡張せよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3990.txt

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

231で書いたのですが、課題2を1つのmain関数内に入れてできないでしょうか?できるだけわかりやすくポインタを使わずに作って欲しいです。どうかよろしくお願いします。
359デフォルトの名無しさん:2007/05/18(金) 00:49:06
わかりやすくして欲しいのにmain関数だけで書けとは・・・
360358:2007/05/18(金) 01:03:32
すいません。
課題1をmain関数だけで書いてしまったもので・・・
矛盾してるかもしれないけどよろしくお願いします。
361>358:2007/05/18(金) 01:15:12
コマンドラインで
 も前の作ったプログラム.exe < 入力ファイル > 出力ファイル

ではいかんのか?
362デフォルトの名無しさん:2007/05/18(金) 01:23:29
プログラムを修正しろという制限があるから厳しいのでは?
363デフォルトの名無しさん:2007/05/18(金) 01:25:33
>>358
main()の先頭をこんな感じに汁。
その後は、課題1と全く同じでOKのはずだ。

int main(int argc, char **argv)
{
    if (argc < 3 || !freopen(argv[1], "r", stdin)
                 || !freopen(argv[2], "w", stdout))
        return 1;
364358:2007/05/18(金) 01:30:03
まず、入力ファイルの作り方がわかりません。
後、ファイルを読み込む時のプログラムと書き込む時のプログラムがどのように書けばいいのか分かりません。

C言語初心者なんですみません。
なにかわかりやすい例やサイトなどでもあったら紹介してください。よろしくお願いします。
365357:2007/05/18(金) 01:30:14
>>357
よろしくお願いします。
366>364:2007/05/18(金) 01:34:16
>363 試したか?
367デフォルトの名無しさん:2007/05/18(金) 01:43:58
>>364
cygwinということだが
cygwinのbash(シェル)だとかgcc(コンパイラ)だとかの使い方は分かるのか?

> まず、入力ファイルの作り方がわかりません
ということは、それ以前の問題のようだが
368デフォルトの名無しさん:2007/05/18(金) 01:51:07
>>360
> 課題1をmain関数だけで書いてしまったもので・・・
えーと、つまり、漏れがやった課題1はガン無視っつう事でゴザルですか?
369デフォルトの名無しさん:2007/05/18(金) 01:58:45
無視とは最低な奴だな
スルーでいこ
370364:2007/05/18(金) 02:07:46
すみません学校から帰ってたもので書き込み遅くなってしまいました
371364:2007/05/18(金) 02:09:49
368さん
void関数やforループを参考にさせていただきました。ありがとうございます。
ただ自分には高度なやり方だったのですべてを理解することができませんでした。すみません。

今から363さんのをやってみたいと思います。
372364:2007/05/18(金) 02:14:01
367さん
コンパイルなどの仕方は分かります。

ただ要素の入ったファイルはどのように書けばいいのか分からないのです。
373デフォルトの名無しさん:2007/05/18(金) 02:17:26
>>251
やっとできた。これだけ共通化すれば文句ないだろう・・・

int ct[] = {
    6166,1803,30,32,37,34,39,36,43,35,25,1155,1157,1162,1159,1164,
    1161,1168,1160,27,1245,49307,1252,1249,2008,1251,2009,1250,1848,
    1200,43322,1207,1204,1209,1206,1874,1205,1008,910,29901303,
};
int pt[][2] = {
    {0,0},{0,82},{0,69},{0,73},{0,67},{0,72},{0,78},{0,83},{0,65},
    {0,89},{0,79},{0,71},{0,75},{0,85},{0,74},{0,66},{0,80},
    {0,90},{0,77},{9,13},{12,13},{2,6},{8,6},{8,20},{9,23},
    {14,19},{7,21},{5,24},{1,10},{5,8},{6,3},{6,22},{7,22},
    {9,10},{11,10},{12,19},{31,8},{33,6},{4,5},{28,20},{38,3},
    {7,26},{16,16},{29,40},{42,24},
};

void Print(int n, unsigned char **b)
{
    int *p;

    for (  ; n; n /= 45)
        if (*(p = pt[n % 45])) Print(p[0], b), Print(p[1], b);
        else *(*b)++ = p[1];
}

void PrintTok(int n, unsigned char **b)
{
    Print(n, b); *(*b)++ = ' ';
}
374デフォルトの名無しさん:2007/05/18(金) 02:18:40
>>372
っつーか、要素の入ったファイルの形式は?どのようにファイルに書き出せば良いのか
こっちがわからん。4行4列って指定があるから、単純に上から4行4列ずつ
8行4列に空白なりで区切られた値のファイルを読み込めば良いノカー
375373:2007/05/18(金) 02:20:13
void Yomiage1000(int num, unsigned char **buf)
{
    int i, n, d;

    for (i = 27, n = 1000; n; i -= 9, num %= n, n /= 10)
        if((d = num / n) != 0) PrintTok(ct[i + d], buf);
}


unsigned char *Yomiage(int num, unsigned char *buf)
{
    int i, n, d;
    unsigned char *b = buf;

    if (num == 0) Print(ct[0], &b);
    else {
        if(num < 0) PrintTok(ct[39], &b), num = -num;
        for (i = 38, n = 100000000; n; i --, num %= n, n /= 10000)
            if ((d = num / n) != 0) {
                Yomiage1000(d, &b);
                if (1 < n) PrintTok(ct[i], &b);
            }
    }
    *b = '\0';
    return buf;
}
376373:2007/05/18(金) 02:20:59
int main(void)
{
    unsigned char buf[1000];

    printf("%s\n", Yomiage(123456789, buf));
    return 0;
}
377デフォルトの名無しさん :2007/05/18(金) 02:23:00
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
  課題1:4行4列の行列Aの各要素を入力して、その転置行列A’を計算して出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:わかりません
 [3.3] 言語: C++
[4] 期限: 2007年5月18日10:00まで

課題あること忘れててヤバイです。お願いします。m(__)m
378372:2007/05/18(金) 02:26:18
ファイルの中身は自分でテキトーに決めていいらしいので上から4行4列ずつ
8行4列に空白などで区切られた値のファイルを読み込めるようにしていただければ大丈夫だと思います。

363を試したのですがエラーがたくさん出てしまいよくわからない状態になってしましました。
379デフォルトの名無しさん:2007/05/18(金) 02:26:54
書き込みエラー。なぜ。。。
380デフォルトの名無しさん:2007/05/18(金) 02:27:59
行多すぎか。めんどい。
>> 357

最初の?

        {
            char hoge[]={
                '+',
                '-',
                '*'
            };

            char IsOperation=0;
            while(i < sizeof(hoge)/sizeof(hoge[0])) {
                if(hoge[i] == c) {
                    IsOperation=1;
                    break;
                }
                ++i;
            }
            if(!IsOperation) {
                continue;
            }
        }
381372:2007/05/18(金) 02:28:43
学校のはCなんですが家ではC++なんですが影響ありますかね?
382デフォルトの名無しさん:2007/05/18(金) 03:14:06
>>358
っつーか5月18日までって、今日までやん。。。きんもぉ〜★な俺のソースでも提出するか?
今やってるけどw
383372:2007/05/18(金) 03:16:19
とりあえず助けて欲しいです!よろしくおねがいします。
384デフォルトの名無しさん:2007/05/18(金) 04:02:33
>>358
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3991.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3992.txt
こっ、こぉ〜〜れでええんか?課題1のプログラムを実行して入力した行列を
save1.txtに書き出して、課題2で使うプログラムを実行するとsave1.txtに書かれた
2つの4x4の行列の結果をsave2.txtに出力。読込んだ行列を表示するようにしてあるんで
不要なら消しておくべし。にしても、自分でもきんもぉ〜〜★なソースになっちまったぜい!w
385デフォルトの名無しさん:2007/05/18(金) 04:14:22
あっ、入力の際に 1: ってゴミが残っているから消しておいて orz
386デフォルトの名無しさん:2007/05/18(金) 04:31:19
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3993.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々)Windows
 [3.2] コンパイラ名とバージョン: VC++6.0
 [3.3] 言語: C
[4] 期限: 5/23
[5] その他の制限: 配列までです、初心者ですどうかよろしくおねがいします。
387デフォルトの名無しさん:2007/05/18(金) 05:33:12
>>344 >>345なやつっていつもの屁理屈反論厨だよね?w
いっていることを見ると、やっぱこいつらANSI、ISO準拠すら理解してなさそうだし
話の論点がまったく理解できていないみたいだし。誰かさんがANSI、ISOの
標準の話を持ち出したにもかかわらず、そういう関数があるよと言っているのは分かるが
標準的なmain関数の記述がされていないのが ぶふふふぅ〜〜(吹いてまうぅ〜って)
って話なのよw
388デフォルトの名無しさん:2007/05/18(金) 05:39:50
321 名前:デフォルトの名無しさん 投稿日:2007/05/17(木) 22:31:02
>>318
tmpfile()がANSI/ISO C標準関数であることを知らないのではあるまいな
>>317
> int main()

(ダイバスターの隊員が驚く時の音を4回鳴らしながら)
ANSI/ISO C標準関数 int main() ANSI/ISO C標準関数 int main()
ANSI/ISO C標準関数 int main() ANSI/ISO C標準関数 int main()
mainも当然関数ですから〜〜!残念(ジャカジャンッ!
これだとANSI、ISOの標準スタイルではない 斬り!

拙者、こんなことを言っても、稼業でプログラマーなんてやっていない
趣味でやっているだけのただの一般人ですから、切腹!
389デフォルトの名無しさん:2007/05/18(金) 05:42:36
ぶふふふぅ〜〜(吹いてまうぅ〜)
390デフォルトの名無しさん:2007/05/18(金) 05:53:12
自分が理解していなかったことを指摘されると、無関係なことを持ち出して
お前これ分かってねーみたいな揺さぶりは通用しない。第一、まず先に
標準関数って言っておきながら、mainそのものの記述が標準スタイルではないという
なんとも頭かくして尻隠さずな発言がワロスなのさ
391デフォルトの名無しさん:2007/05/18(金) 05:59:21
どう見てもtmpfile()が標準なことを知らなかったのをごまかすために、
int main()に話をすり替えてるだけにしか見えん。
392デフォルトの名無しさん:2007/05/18(金) 06:11:18
>>386
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3994.c
fも0又は1で表現される画像なら、問題自体(というか式(1))がおかしい。
393デフォルトの名無しさん:2007/05/18(金) 06:37:43
>>377
ごめん。4行4列の行列の転置行列を表示するのに計算要るのか?
どういう計算するん?
394デフォルトの名無しさん:2007/05/18(金) 06:47:51
添字の付け替えじゃないの?
395デフォルトの名無しさん:2007/05/18(金) 06:51:17
それ計算言うて良いのか?>添え字の付け替え
396デフォルトの名無しさん:2007/05/18(金) 06:56:53
tmpfile()って便利だな
397デフォルトの名無しさん:2007/05/18(金) 07:25:11
>>391
どうみても標準って言葉と実装を理解しておらず、墓穴を掘ったことを
int mainの指摘をした相手がtmpfileを知らなかったことにしたいらしいw
っつーか、知っている知っていないはともかく、int mainの括弧の中は
敢えてANSI、ISOを持ち出した標準を謳うんであれば、なおさら準拠した
記述をすべきであって、していないからといって別に悔やむことはないぞw
398デフォルトの名無しさん:2007/05/18(金) 09:42:32
>>392
fはこんな感じだったと思います。原因が入力画像の端も対象にしてました。
迅速に答えていただきありがとうございました。
399デフォルトの名無しさん:2007/05/18(金) 10:18:05
まだやってるのか。
400357:2007/05/18(金) 11:34:36
>>357
よろしくお願いします。
401247:2007/05/18(金) 11:41:38
#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;
}
mainでscanfを使わずにgetcharでかく方法を教えてください。
402デフォルトの名無しさん:2007/05/18(金) 11:47:43
>>401
- scanf("%d",&cnt);
+ cnt = getchar() - '0';
とでも汁
403デフォルトの名無しさん:2007/05/18(金) 11:48:46
>>400
>>380でレスがついてないか
404デフォルトの名無しさん:2007/05/18(金) 11:49:45 BE:34938836-2BP(222)
>>400
入力が定義されてないのでこれで。
http://c-kadai.sakura.ne.jp/index.php?itemid=10
405357:2007/05/18(金) 13:30:51
>>380
ありがとうございます。
でも何か上手く動かないです…。
二つ目の???に何か入れないとダメなんですかね?

>>403
ありがとうございました。

>>404
どういうことでしょうか?
406デフォルトの名無しさん:2007/05/18(金) 15:59:48
【質問テンプレ】
[1] 前進オイラー法
[2] 熱伝導方程式の初期値協会値問題を陽的差分法で解くためのプログラムを作成せよ。
  初期値(δu/δt)=(δ^2 u/δx^2)
u(0,t)=u(1,t)=0 (t>0)
u(x,0)=f(x) (0≦x≦1)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名 cc
 [3.3] 言語: C++
[4] 期限: 2007年5月18日17時

お願いします。
407デフォルトの名無しさん:2007/05/18(金) 16:08:10
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] 不明
 [3.3] 言語: C言語
[4] 期限: ([2007年05月18日18:00
[5] プログラム全く分かりません。

以下になります。

(1)配列を使ってキューを実装したい。キューの先頭を管理する変数を
head、末尾を管理する変数をtail、データを格納すr配列をentry[]と
して、データ構造を考えなさい。ただし、格納するデータは文字(char)
のみとし、格納する最大個数はMAXSIZEとしてとしてdefineされているも
のとする。

(2)上記のデータ構造を用いてキューを実現しなさい。

(3)連結リストを使ってキューを実現しなさい。(教科書無いんで無視)

(4)(2)の配列による実装と(3)の連結リストによる実装を比較的考察し、
各々の特徴を整理しなさい。

以上です。よろしくお願いいたします。
408デフォルトの名無しさん:2007/05/18(金) 16:22:57
3はやるのか
409デフォルトの名無しさん:2007/05/18(金) 16:43:03 BE:48525555-2BP(222)
ていうか3をやらないと課題の意味が無い気が。
410デフォルトの名無しさん:2007/05/18(金) 17:11:49
[1] 授業単元:
[2] 問題文(含コード&リンク):
以下のように10個のますに3つの白いコインと3つの黒いコインが配置されている。
・・□・
・・●・
・・●・
□○●□
・○・・
・○・・
・□・・
※「□」は空白を表す。「・」は完全に無視して下さい。
各コインは隣のますが空白であれば一度に一つずつ動かすことができる。
例えば、一番下の●は、右のますが空白であるので、
・・□・
・・●・
・・●・
□○□●
・○・・
・○・・
・□・・
のように動かすことができる。この手順を繰返し、
以下の最終状態の配置にする最短の手順を求めよ。

・・○・
・・○・
□●○□
・●・・
・●・・
・□・・

411デフォルトの名無しさん:2007/05/18(金) 17:12:35
また、ますは
・・F・
・・G・
・・H・
ABIJ
・C・・
・D・・
・E・・
のようなラベルを用い、例の移動であったら、
「IJ」と表示すること。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ:gcc
 [3.3] 言語:C
[4] 期限: 5月20日まで
[5] 制限はとくにありません。
幅優先探索が適していると思うのですが、コードを書くとなると混乱
してしまいます。自分なりに頑張ったつもりですがお手上げです↓
どうかよろしくお願いします。
412 ◆kqWkheFZ3g :2007/05/18(金) 17:22:57
1授業単元:プログラミング実習
2問題文:配列を用いてn個までの値を入力し、その最大値、最小値、及び
全体の平均点を出すプログラムを作成せよ。
3環境:Linux3.2
gcc
C
4 2007年5月22日17時
5 ifやwhile、そして今日配列まで習いました。

よろしくお願いします!!
413デフォルトの名無しさん:2007/05/18(金) 17:52:16
414デフォルトの名無しさん:2007/05/18(金) 18:09:49
C言語の入門らしいですがさっぱりです…
何らかの10進数を入力するとそれに1を加えた数を表示するプログラムをお願いします

Cygwin?を使ってます
415デフォルトの名無しさん:2007/05/18(金) 19:07:55
めちゃくちゃ入門じゃん
とりあえずテンプレで書け
416デフォルトの名無しさん:2007/05/18(金) 19:26:12 BE:54348847-2BP(222)
>>414
#include<stdio.h>
#include<stdlib.h>
int main(void){char tmp[256];fgets(tmp,256,stdin);printf("%d\n",atoi(tmp)+1);return 0;}
417デフォルトの名無しさん:2007/05/18(金) 20:21:19
>>410
それ、取りうる状態の数が結構限られているだろ?
全ての状態をメモリ上に書き出せるんじゃないの?
418デフォルトの名無しさん:2007/05/18(金) 21:40:35
>>417
最短の手順を求めるのが目的だから、
状態全部書き出せるかどうかはあんま関係ない気もするけど

ループ検出のハッシュでコリジョンを防ぎ易い、とかその辺の話?
419デフォルトの名無しさん:2007/05/18(金) 21:42:40
最終状態からの距離を求めるのが
簡単ということでしょ
420デフォルトの名無しさん:2007/05/18(金) 21:56:41
>>410
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3999.c
パフォーマンスのことは全然考えてないけど、一応答えは出る。
421デフォルトの名無しさん:2007/05/18(金) 22:37:16
いきなりなんですけど

 if(0 < x > 60)

ってありですか?
422デフォルトの名無しさん:2007/05/18(金) 22:38:59
>>421
ありだが、つねに偽になる
423デフォルトの名無しさん:2007/05/18(金) 22:42:07
>>422
ありがとうございます!
424デフォルトの名無しさん:2007/05/18(金) 22:46:58
>>423
if(0 < x < 60)
なら常に真になる

理由
【1】.まず 0 < x が評価されて 0 または 1 になる
【2】.次に (【1】の評価結果) < 60 が評価されいずれの場合でも真になる

誤解の無いように!
425デフォルトの名無しさん:2007/05/18(金) 22:50:35
>>424
ありがとうございますッ><
これでこの部分は完璧!!!!!!!!!!!!!!!!1111
426デフォルトの名無しさん:2007/05/18(金) 23:18:20
>>424
スゲー
なんかCの罠って感じだな
427デフォルトの名無しさん:2007/05/18(金) 23:20:37
Cに限ったことじゃないんだけどね
428デフォルトの名無しさん:2007/05/18(金) 23:27:23
それをどの部分で使うのか?>>425
429デフォルトの名無しさん:2007/05/19(土) 00:14:34
バグを仕込む時
430デフォルトの名無しさん:2007/05/19(土) 00:20:05
>>429
納得
431デフォルトの名無しさん:2007/05/19(土) 01:34:54
432デフォルトの名無しさん:2007/05/19(土) 02:26:06
>>431
大きくスレ違い!
433デフォルトの名無しさん:2007/05/19(土) 08:21:08
[1] 授業単元:入力2
[2] 問題文(含コード&リンク):文字列を10回入力して、最も大きな文字列を表示する。
[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ名とバージョン: LSI C-86
 [3.3] 言語:C言語
[4] 期限: (2007年5月20日まで)
[5] その他の制限:入力はscanf関数ではなく、getchar関数を使用する。
文字列の比較はstrcmp関数を使用する。
434デフォルトの名無しさん:2007/05/19(土) 08:35:27
> 最も大きな文字列
何のこっちゃ?文字の大きさの基準は?
435デフォルトの名無しさん:2007/05/19(土) 08:39:21
>>433
VC++6でしか確認してねーけど。こういうこと?

#include <stdio.h>
#include <string.h>
void main(void) {
int i=0, c=0;
char max;
while ( i<10 ) {
c = getchar();
if ( (c>='a' && c<='z') || (c>='A' && c<='Z') ) {
if ( strcmp( &max, &((char)c) )>0 ) max=c;
++i;
}
}
printf( "MAX: %c\n", max );
}
436デフォルトの名無しさん:2007/05/19(土) 09:08:10
>>434
文字の大きさの基準は、課題にそれ以上のことが書かれていなかったので
正直なところよくわかりません。
想像だとstrcmp関数の戻り値で判断、文字コード順で比較して
最も大きな文字列を表示ではないかと……。

>>435
ありがとうございます。
1度LSI C-86で動かしてみます。
437デフォルトの名無しさん:2007/05/19(土) 09:12:10
>>433 strcmpつかったけど、文字列の長さで大小関係が決められるのではなく、
一致しなかった場合は一致しなかった場所の文字同士の文字コードの比較で、
コードの値の大小関係で正か負が決定されてしまい、文字列の長さは考慮せず。
例えば、aBcdef と abcd を比較した場合、Bとbが不一致でbの方がコードの値が
大きいんで、文字列は短いけどabcDの方が大きいという結果に。

ttp://www.psl.ne.jp/perl/pdojo00b.html

#include <stdio.h>
#include <string.h>
int main(void) {
char ch,strmax[256]={"\0"},buf[256];
size_t i,j;

for(i=0; i<3; i++) {
j=0;
do{
ch=getchar();
if(ch=='\n') break;
else buf[j++]=ch;
}while(1);
buf[j]='\0';
if( strcmp(strmax,buf) < 0 ) {
strcpy(strmax,buf);
}
}
puts(strmax);
return 0;
}
438デフォルトの名無しさん:2007/05/19(土) 09:18:21
>>437の訂正
for(i=0; i<3; i++) {  は i<10に。
439デフォルトの名無しさん:2007/05/19(土) 10:48:26
>>437
ありがとうございます。
助かりました。
文字列の長さについてはふれられてなかったので、大丈夫だと思います。
440デフォルトの名無しさん:2007/05/19(土) 11:58:31
[1] 授業単元:
[2] 問題文(含コード&リンク):
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4002.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC++2005
 [3.3] 言語: C++
[4] 期限: 2007/ 5/ 19/ 23:59 まで
[5] その他の制限: map と list を用いる

問題文が少々長いですが、どうかよろしくお願いします
441デフォルトの名無しさん:2007/05/19(土) 11:58:44
>>436
>435は文字の大きさを比較しているので要注意。
しかし、ほんとにLSI-C86使っているのか?
とんでもないな。
442デフォルトの名無しさん:2007/05/19(土) 12:06:13
>>440
くそぅAccess使っていいならすぐなんだがな
443デフォルトの名無しさん:2007/05/19(土) 12:56:40
>>440
リレーションPを構造体で作れ、と言ってるのにサンプルはクラスなんだが、
クラスで良いんだよな?
444デフォルトの名無しさん:2007/05/19(土) 13:12:36
>>440
はいクラス使ってです
445デフォルトの名無しさん:2007/05/19(土) 14:23:31
>>420
パフォーマンス云々以前に
malloc(0) を呼ぶと NULL が返ってくる可能性があることを
全く考慮していないだろ?
446デフォルトの名無しさん:2007/05/19(土) 15:06:30
>>440
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4003.lzh

lzhの中身はソース1つとP.txt、SPJ.txt

クオリティ低い・・・。
仕事でこんなコード書いてたら殴られそうだ。
447デフォルトの名無しさん:2007/05/19(土) 15:15:04
>>445
mallocがNULLを返した時点で即座に終了するようになっていることを失念していたw
指摘ありがとう。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4004.c
ついでに、キューが空のときpushが誤動作するのを修正。この問題では顕在化しないけど。
448デフォルトの名無しさん:2007/05/19(土) 15:32:37
>>446
ありがとうございました ホントに助かります
殴られたら耐えます
449#:2007/05/19(土) 17:42:46
[1] 授業単元:アルゴリズム
[2] 問題文:
レポート課題内容: 実行時引数として算術式を前置記法で与える。演算子は + と *,演算数は英字1字とする。
その算術式を表す二分木を作り,その先行順,中央順,後行順,レベル順での走査して,つぎのように出力するプログラムを作れ。
 例: ./a.out "*+a**bc+def"
    * + a * * b c + d e f
    a + b * c * d + e * f


[3] 環境
 [3.1] OS:Windows/XP
 [3.2] コンパイラ名とバージョン:cygwin
 [3.3] 言語:C
[4] 期限: 5月21日
[5] その他の制限: リンクによるリスト処理の形
どなたかお願いします
450デフォルトの名無しさん:2007/05/19(土) 21:15:34
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):20元ほどの連立方程式を部分ピボット選択法をとりいれて解けるプログラムをつくりなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual Studio.net 2003
 [3.3] 言語: C
[4] 期限: 5月21日22時まで
[5] その他の制限:特に無し。

お願いします。
451デフォルトの名無しさん:2007/05/19(土) 21:52:33
>>449
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4007.txt

リンクによるリスト処理の形というのが何のことかイマイチ分からない・・・

>>450
プログラム云々というより数学がorz
452デフォルトの名無しさん:2007/05/19(土) 22:44:45
>>450
部分ピボット選択法って何だ?ガウスの消去法の事か?
453デフォルトの名無しさん:2007/05/20(日) 00:47:44
>>452
そうです。説明不足すみません。
454デフォルトの名無しさん:2007/05/20(日) 01:03:19
455デフォルトの名無しさん:2007/05/20(日) 01:41:37
>>454
本当にありがとうございます!
456デフォルトの名無しさん:2007/05/20(日) 08:56:46
【質問テンプレ】
[1] Basic プログラミング
[2] 次の4つの関数を作りなさい:
  
1.Integerのみで構成されたArrayの中から、ユーザー任意のIntegerのみを
  消去する(複数個ある場合も考えること)
2.ArrayAとArrayBがあるとして、Aの中のIntegerが全てBの中に含まれているかを
  調べ、含まれていたらメッセージをOutputする。
3.Arrayを小さいIntegerから大きいIntegerの順に並び変える。
4.Arrayを大きいIntegerから小さいIntegerの順に並び変える。
  
[3] 環境
 [3.1] OS: Windows 
 [3.2] 不明です
 [3.3] 言語: C++
[4] 期限: 5/29/07までお願いします
[5] その他の制限:まだ初めて2ヶ月目なのであまり進んだことは使えません。
  Forループ、if、Switchを習い終えたレベルです。
  どうかよろしくお願いします。
457デフォルトの名無しさん:2007/05/20(日) 08:59:36
BasicプログラミングでC++とはこれ如何に?
458456:2007/05/20(日) 09:00:56
期限: 5/19/07まででした、訂正します。
459456:2007/05/20(日) 09:02:17
あーーまた間違えてしまった 期限: 5/23/07までです。何回も申し訳ありません。
460456:2007/05/20(日) 09:04:25
>>457

紛らわしくてすみません、アメリカの大学に在学してまして
クラスの名前がBasic Programingなのです。プログラミングの最初に取る基本のクラスです。
461デフォルトの名無しさん:2007/05/20(日) 09:14:15
まあ、宿題には変わりないからそこらへんは気にしない。
462デフォルトの名無しさん:2007/05/20(日) 09:14:38
っつーか、大学の名前出せ。こんなところを頼っているようじゃ
そんな生徒はとっとと日本に帰国させた方が良いと通報しとくからw
463デフォルトの名無しさん:2007/05/20(日) 09:43:06
>>456
ホームシックだからって、宿題を装ってまでして気を紛らわそうとするなよw
もっと構ってくれる板たくさんあるぞ!
464デフォルトの名無しさん:2007/05/20(日) 09:52:06
御託はいいからさっさと宿題処理しろよハゲ。
465デフォルトの名無しさん:2007/05/20(日) 10:52:52
>456
消去するって具体的にはどうすんの?
値を0にするだけ?それともそこに後ろの値を詰めるの?
466456:2007/05/20(日) 11:20:02
>>465
ただ消去しろ、とのことなので
0でも詰めるのでもないと思います。
空きのArrayにしろと言う事だと思いますが、そのようなことは可能なのでしょうか?
467デフォルトの名無しさん:2007/05/20(日) 11:21:31
該当するデータがあったら抹消、空いたところに数値を先頭に向かって詰めろと?
不要になった部分のメモリも開放しろと?
468デフォルトの名無しさん:2007/05/20(日) 11:22:07
空きのArrayなんか存在しません。
469デフォルトの名無しさん:2007/05/20(日) 11:25:29
>>467
不要になった部分のメモリも開放しろということだと思います

>>468
無知なもので、すみません。
たとえばサイズ5のArrayに4つまでしかDataをインプットしなかったら
最後の一個は空きにはならないのでしょうか?
470デフォルトの名無しさん:2007/05/20(日) 11:35:58
っつーか、最初に格納するデータの要素の個数は決まってない?
データを入力しながら動的にメモリを確保していくやり方で良いんかい?
471デフォルトの名無しさん:2007/05/20(日) 11:38:49
ttp://www.geocities.jp/ky_webid/cpp/language/012.html
こういった内容も授業でやったん?
472デフォルトの名無しさん:2007/05/20(日) 11:40:09
最初にユーザー任意でサイズは決めるものと思ってもらって大丈夫です。
473デフォルトの名無しさん:2007/05/20(日) 11:42:02
>>471
いえ、Delete Operatorは、まだ習っていません。
474デフォルトの名無しさん:2007/05/20(日) 11:43:52
もしDeleteやその他を使わなければいけない、もしくは使ったほうが遥かに楽
などでしたら、使っても差し支えないと思います。
475デフォルトの名無しさん:2007/05/20(日) 11:49:31
とりあえず、配列の取り扱いが分かれば
あとは並び替えなんてのはありきたりなソートのライブラリを使ってしまえば良いし。
C++はさっぱりだから俺はパス、すまそ orz
476デフォルトの名無しさん:2007/05/20(日) 11:57:11
ライブラリを使うのは多分ダメなので
ループを使ってチェックをするやり方だと思います。
皆さんにとっては簡単な問題なのに、尋ね方が悪く手間取らせてすいませんでした。
477デフォルトの名無しさん:2007/05/20(日) 12:06:13
いーやいやいやいやいや、自分で定義したライブラリを。
っつーか、使えるものを使うってのは当たり前じゃね?
変に条件を絞るってなら、その条件を言ってもらわんと。
ソートのアルゴリズムの指定もありか?
478デフォルトの名無しさん:2007/05/20(日) 12:12:52
迷惑かけて申し訳ありません。
今、調べたらソートのアルゴリズムの指定がありました。

大きい順に並べる時、
A B C D E F
まずAと(BCDEF)を比べて、Aより大きいものがあれば交換。
つぎにBと残りを比べて大きいものがあれば交換、CでDで
という感じです。
479デフォルトの名無しさん:2007/05/20(日) 12:20:21
480デフォルトの名無しさん:2007/05/20(日) 12:35:58
アドレスが切れてるみたいですが、基本選択法で間違いありません。
それと何回も申し訳ないのですが、Pointerはまだ習っていないので使えません。
よろしくお願いします。
481デフォルトの名無しさん:2007/05/20(日) 12:42:02
切れてるって、冒頭のh抜きってだけやん・・・あんたやばいよ。
情報処理の取り扱いに慣れてないな。今すぐ専攻している学問をやめて
ほかの路線を考えた方が良いぜ?こんな俺でも3流以下の大学中退だからw
482デフォルトの名無しさん:2007/05/20(日) 13:02:54
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
if文、 if~else~文、 if~else if~else文、 switch文、 三項演算子、をすべて用いてクイズを作成しなさい
反復文は使えないものとし、同じ問題はでないものとする
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 5/25まで
[5] その他の制限: 特になし

よろしくお願いします。
483デフォルトの名無しさん:2007/05/20(日) 13:13:02
>>481
すみません言葉が足りませんでした
教えていただいたページが存在しなかったので
アドレスのリンクが切れていると言ったつもりでしたが・・・
484デフォルトの名無しさん:2007/05/20(日) 14:05:53
期限: 5/23/07
とりあえず現地時刻のってことだろうから、ワシントンD.Cの時刻を参考にした場合
http://www.worldtimeserver.com/current_time_in_US-DC.aspx
日本時間から13時間差し引いた時刻となるから、まぁ、日本時間でその期日で間に合っていりゃ良いか。
誰か頼む。俺はちと寝る。時差ぼけじゃ〜〜なくてただの徹夜明け orz
485デフォルトの名無しさん:2007/05/20(日) 14:09:18
バブルソート
486デフォルトの名無しさん:2007/05/20(日) 14:11:00
>>485
違うって、そりゃ各々の隣接する要素同士の比較、交換やろ?w
487デフォルトの名無しさん:2007/05/20(日) 14:15:34
>>456>>466
deleteは習ってない、ソートする課題がある、ということは、
Arrayは固定長で、要素を消す時は前詰めして
要素数を別変数で管理する方法だと思うがどうか?
488デフォルトの名無しさん:2007/05/20(日) 14:32:06
>Forループ、if、Switchを習い終えたレベルです
なんかVBくさい
489デフォルトの名無しさん:2007/05/20(日) 14:44:33
>>484
日本時間で23日の午後4時までです。
お疲れのところすみませんでした。
490デフォルトの名無しさん:2007/05/20(日) 14:52:09
>>487

>Arrayは固定長で、要素を消す時は前詰
はい長さは固定で、消した後については特に指定がないので
前詰めで大丈夫だと思います。

>要素数を別変数で管理
理解が足りなくてすみません
array[i]のようにした後、iと固定サイズでループを作ったりすることでしょうか?
491デフォルトの名無しさん:2007/05/20(日) 15:02:10
>要素数を別変数で管理
num = 有効な要素の数
ってことじゃないの?
a[0] = 100
a[1] = 200
a[2] = 300
a[3] = 400
num = 4
↓a[1]を消して詰める
a[0] = 100
a[1] = 300
a[2] = 400
a[3] = 400
num = 3
492デフォルトの名無しさん:2007/05/20(日) 15:15:43
面倒なので全部algorithmでやってしまえ〜
493デフォルトの名無しさん:2007/05/20(日) 15:22:41
小生の環境では>>479はきちんと表示される
494デフォルトの名無しさん:2007/05/20(日) 15:46:15
国外からのアクセスを拒否ってるんじゃない?
495デフォルトの名無しさん:2007/05/20(日) 15:52:57
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
下記@Aの銀行に「一億円」を預けた場合、何年と何ヵ月後にAの銀行の預金額を@の銀行の預金額が超えるか
@利率0.08% (複利)の銀行
A利率0.09% (単利)の銀行
反復文を用いて@A双方の毎月の預金額を表示し、Aの銀行の預金
額を@の銀行の預金額を超えた時点で反復文を終了後、「@の銀行は
●年●ヵ月後にAの銀行の預金額を超える」と表示しなさい。

また、上記@の銀行に「1億円」、Aの銀行に「9999万円」を預けた場合、
どちらが先に「1億200万円」になるか、前問と同じ処理を行い、最後に
「●の銀行が●年●ヵ月後に先に1億200万円貯まる」と表示しなさい。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 5/26まで
[5] その他の制限: 特になし

よろしくお願いします。
496デフォルトの名無しさん:2007/05/20(日) 15:54:20
[1] 授業単元:C実習
[2]問題文
下記の実行結果になるプログラムを作成せよ。
1〜nまでの整数合計を求めるプログラム。
※while文を使用すること!
変数は下記を使用
int i ループカウンタ
int n 最終数を入力するエリア
int ans 合計算出エリア
<実行結果>
1からnまでの和を計算します
nを入力してください:(例5)

1から5までの和は(例15)です。

[環境3]
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++

よろしくおねがいします
497496:2007/05/20(日) 15:56:44
期限は今日の夕方まででお願いしたいです
498デフォルトの名無しさん:2007/05/20(日) 16:09:51
>>496

#include "stdio.h"
int main(){
int i,n,ans=0;
printf("1からnまでの和を計算します\nnを入力してください:");
scanf("%d",&n);
i=n;
while(i)ans+=i--;
printf("1から5までの和は%dです。\n",ans);
return 1;
}
499デフォルトの名無しさん:2007/05/20(日) 16:10:26
>>496
#include <iostream>
using namespace std;
int main(void)
{
int n;
cout << "1からnまでの和を計算します。" << endl;
cout << "nを入力してください。" << endl;
cin >> n;
int ans = 0;
int i = 1;
while (i <= n) {
ans += i++;
}
cout << "1から" << n << "までの";
cout << "和は" << ans << "です。" << endl;
return 0;
}
500デフォルトの名無しさん:2007/05/20(日) 16:51:09
>>498,499さん感謝です
501デフォルトの名無しさん:2007/05/20(日) 16:54:58
正直、入門書終わったらネットで勉強が常ですか?
502デフォルトの名無しさん:2007/05/20(日) 16:55:36
うん
503デフォルトの名無しさん:2007/05/20(日) 17:00:52
( ̄〜 ̄;)なるほど、、本よりネットがメリットあるんですね
504デフォルトの名無しさん:2007/05/20(日) 17:02:38
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

16進数の足し算表と掛け算表を作成せよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: なし
[5] その他の制限: なし

よろしくお願いします
505デフォルトの名無しさん:2007/05/20(日) 17:03:01
俺は入門からしてネットだったけどな。
506デフォルトの名無しさん:2007/05/20(日) 17:15:52
C言語は入門からこのスレで宿題解いて勉強したぜ
507デフォルトの名無しさん:2007/05/20(日) 17:25:10
しかしみさなんはいかほどまでに上達なさってるんすか?
508デフォルトの名無しさん:2007/05/20(日) 17:28:08
烏賊にはかないません
509デフォルトの名無しさん:2007/05/20(日) 17:29:06
今職業プログラマ 見習いだけど
510505:2007/05/20(日) 17:36:45
俺も職業プログラマ。今年で3年目。
C/C++/C#/J2ME/J2SEやってる。
511デフォルトの名無しさん:2007/05/20(日) 17:40:24
プログラマしんどいんですか??
人並に働ける会社なんですかね皆さんは
512デフォルトの名無しさん:2007/05/20(日) 17:58:22
>>511
人並みっていうのは終電までには帰れる
とかそういうこと?
513デフォルトの名無しさん:2007/05/20(日) 18:06:54
家でもプログラミングする変態だから参考にならないかもしれないけど
そんなにしんどくないよ
終電には間に合うし
514デフォルトの名無しさん:2007/05/20(日) 18:11:05
だ、誰か・・・そろそろあの言葉を>>511へ言ってやってくれ
515デフォルトの名無しさん:2007/05/20(日) 18:13:00
516デフォルトの名無しさん:2007/05/20(日) 18:51:00
[1] 授業単元:
[2] 問題文:
@. ハノイの塔のボトムアップ(反復形)のプログラムを作れ。
プログラムは,maink関数と,hanoi関数(ともに再帰を含まない)とで構成する。
./a.out N の形に円盤の枚数 N を十九時引数として指定すると,N枚の円盤の山を右回りに隣の柱に移す最短手順を出力するようにせよ。

A.アジア地区予選の問題Gをお願いします
http://www.acm-japan.org/icpc-j.html

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

[4] 期限: 5月21日23時
よろしくお願いします
517デフォルトの名無しさん:2007/05/20(日) 19:01:39
再帰無しのハノイは(;´Д`)ハァハァだな
518デフォルトの名無しさん:2007/05/20(日) 19:01:41
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
反復文を用いて、トランプゲーム(ババ抜き、7ならべなど)を実現するプログラムを作成しなさい
ゲームの種類はなんでもよい

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 5/26まで
[5] その他の制限: 特になし

よろしくお願いします。
519デフォルトの名無しさん:2007/05/20(日) 19:11:41
>枚数 N を十九時引数として指定

にほんごでおけ
520デフォルトの名無しさん:2007/05/20(日) 19:30:10
非再帰のハノイは昔このスレに書いた記憶があるが、見付からん
521デフォルトの名無しさん:2007/05/20(日) 19:38:25
>>519
>516 はローマ字打ちと予測する
>枚数 N を十九時引数として指定
実行時引数
jikkoujihikisuu
jikk ujihikisuu
じっくじひきすう
十九時引数
522デフォルトの名無しさん:2007/05/20(日) 20:12:35
非再帰ハノイは6から塔の番号を引いたり、何か変な工夫が
必要だった気がする。
523sage:2007/05/20(日) 20:27:09
[1] 授業単元: プログラミング
[2] 問題文: 
       以下に与えられたg(x)に対して、与えられた「x」の最初の値「x0」から出発して、
       x=g(x)の形の方程式の解を不動点反復法によって求めよ。
       (1) g(x)=1/3*(x^2+1), x0=1
       (2) g(x)=3-(1/x), x0=1
       (3) g(x)=1/(x^2+1), x0=1
[3] 環境 
 [3.1] OS: (WindowsXP) 
 [3.2] コンパイラ名とバージョン: UNIX 
 [3.3] 言語: C言語 
[4] 期限: 5月21日:午前10時まで 

よろしくお願いします。 
524デフォルトの名無しさん:2007/05/20(日) 20:42:09
>>523
#include <stdio.h>
#include <math.h>

#define EPS 1.0e-5
#define KMAX 1000

int main(void)
{
int ct = 0;
double x, xn;

x = 1; /* ここにx0を入れる */
while (1) {
ct++;
printf("%3d : %f\n", ct, x);
xn = 1. / 3 * (x * x + 1); /* ここにg(x)を入れる */
if (fabs(xn - x) < EPS) {
printf("Solution found.\n");
break;
}
if (ct > KMAX) {
printf("Error.\n");
break;
}
x = xn;
}

return 0;
}
525デフォルトの名無しさん:2007/05/20(日) 20:59:00
ハノイの塔の手順を書き出してじっくり眺めると、
動かす円盤の番号と手順の2進数のビットパターンに関連があることが判る。
つまり、奇数手目には必ず最上位の円盤を動かすわけで、これが最下位ビット(bit0)に相当する。
同様に二手目、六手目などに第二位の円盤を動かすのが第二ビット(bit1)、四手目に第三ビット(bit2)……
従って、この方法を使えば任意の手数番目にどの円盤を動かすかは簡単に得られる。
そこまで判れば、どこからどこへ動かすかも同様に定数時間で得られる。
526デフォルトの名無しさん:2007/05/20(日) 21:12:23
なんとか思い出せた。

>>516
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4011.c

>>525
まさにその方法だ。
527デフォルトの名無しさん:2007/05/20(日) 21:13:09
>>524
ありがとうございます!とても速いです!あこがれます!
528デフォルトの名無しさん:2007/05/20(日) 21:20:18
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
入力した二つの値の掛け算を筆算形式で計算せよ。
ただし入出力ともに16進数とし符号なしとする。

[3] 環境
 [3.1] OS: Vine Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 5/22 21:00
[5] その他の制限: 特になし

よろしくお願いします。
529デフォルトの名無しさん:2007/05/20(日) 21:22:05
>>524
早撃ちジャックと呼んであげようw
530デフォルトの名無しさん:2007/05/20(日) 21:57:13
>>516
2006年のでいいの?
531デフォルトの名無しさん:2007/05/20(日) 22:19:13
>>504
#include <stdio.h>
int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
void prtable(int (*op)(int, int))
{
    int i, j;
    putchar(' ');
    for (j = 1; j < 0x10; ++j)
        printf("%3X", j);
    putchar('\n');
    for (i = 1; i < 0x10; ++i) {
        printf("%X", i);
        for (j = 1; j < 0x10; ++j)
            printf("%3X", (*op)(i, j));
        putchar('\n');
    }
}
int main(void)
{
    prtable(add);
    putchar('\n');
    prtable(mul);
    return 0;
}
532デフォルトの名無しさん:2007/05/20(日) 22:26:52
>>531
dd
533デフォルトの名無しさん:2007/05/20(日) 22:32:16
1授業単元:プログラミング実習
2問題文:配列を用いて100個までの値を入力し、その最大値、最小値、及び
全体の平均点を出すプログラムを作成せよ。
3環境:Linux3.2
gcc
C
4 2007年5月22日17時
5 ifやwhile、そして今日配列まで習いました。 関数とかはまだです
534デフォルトの名無しさん:2007/05/20(日) 22:44:14
>>533
#include<stdio.h>
int main(){
int i, data[100], max, min, sum;
i = 0;
while(i<100){
scanf("%d",&data[i]);
i++;
}
max = data[0];
min = data[0];
sum = data[0];
i = 1;
while(i<100){
if(max < data[i]) max = data[i];
if(min > data[i]) min = data[i];
sum += data[i];
i++;
}
printf("最大値:%d\n",max);
printf("最小値:%d\n",min);
printf("平均点:%f\n",sum/100.0f);
return 0;
}
がんばって初心者っぽく書いてみた
535デフォルトの名無しさん:2007/05/20(日) 23:08:36
>533
ぼるじょあスレで答えてもらってなかったか?
536デフォルトの名無しさん:2007/05/20(日) 23:35:24
>>528は筆算ってことは、いちいち各桁ごとを、しかも16進数の形(文字配列のデータ同士)
のまま演算するようにしろと?10進数に戻して計算して、また16進数に戻す(というか書式で指定して表示)
した方が楽やん・・・。ってボヤいてみるテスト。誰かがんばれ〜。
537528:2007/05/20(日) 23:52:06
>>536
そうなんです
一度10進法に変換して計算してはいけないって制限付でした・・・
538デフォルトの名無しさん:2007/05/21(月) 00:00:42
>>536>>537
10進法に変換してから計算するってどういうこと?
539デフォルトの名無しさん:2007/05/21(月) 00:03:22
>>528 >>537
#include<stdio.h>
int main(){
int a,b,c;
scanf("%x %x",&a,&b);
printf(" %x\nx %x\n----------\n",a,b);
c = b;
while(b>0){
printf("%x\n",a*(b%0x10));
b/=0x10;
}
printf("----------\n%x\n",a*c);
return 0;
}
それっぽく書こうとして力尽きた
540デフォルトの名無しさん:2007/05/21(月) 00:13:03
>>538
例えばFF * FFの場合に255 * 255と変換してから計算して
積の65025を16進数に変換してFE01と表示することです

>>539
dです
これをいろいろ弄ってみたいと思います
541デフォルトの名無しさん:2007/05/21(月) 00:15:09
>>540
んあー・・・。
プログラムないだとどっちみち「int型」で、10進も16進もないんだけど
筆算の表記を10進にしちゃダメ、ってことかな・・・
542デフォルトの名無しさん:2007/05/21(月) 00:16:29
その条件だと文字列のまま計算しろってことじゃね?
543デフォルトの名無しさん:2007/05/21(月) 00:18:44
だろうね。俺もそう思う。
544デフォルトの名無しさん:2007/05/21(月) 00:20:41
漏れ的には
char nums[]={"0123456789ABCDEF"};
の配列を使って、入力された文字列がこの配列の要素の番号を値として計算するようにと考えたが
結局計算した結果を16進数に戻して結果を入れる文字配列に入れるとか・・・わけわからなくなって
それじゃ駄目?なのかと思ってあきらめた orz
545デフォルトの名無しさん:2007/05/21(月) 00:24:14
>>541
すいません、説明の仕方が非常にまずかったみたいですね・・・
あくまで印字される値の見かけが10進数ならNGって事です・・・
546デフォルトの名無しさん:2007/05/21(月) 00:25:25
うん。非常にまずい。
547デフォルトの名無しさん:2007/05/21(月) 00:36:39
んじゃ、やっぱ10進数に換算してからまたそれを16進数に戻すやり方で。誰か頼む。
俺は諦めた orz
548デフォルトの名無しさん:2007/05/21(月) 00:40:14
筆算形式だと必然的に文字列全体を数字に直接変換しないで計算することになると思うんだが。
文字を数字に変換するのは当然だけど、一桁ずつ計算していくってことだろ?
549デフォルトの名無しさん:2007/05/21(月) 00:56:47
>>548

あまり必然でもない
>>539
550デフォルトの名無しさん:2007/05/21(月) 01:03:23
>>528
やっつけ仕事。
ここまで作ったところで「桁数制限ががが」ということに気づいた。

最大4桁「ffff * ffff」まで。
エラー処理は入れてない。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4013.txt
551デフォルトの名無しさん:2007/05/21(月) 01:07:44
>539は表示してるだけで、計算方式は筆算じゃねーだろ
552デフォルトの名無しさん:2007/05/21(月) 01:11:16
>528 入力部分は割愛
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int char2int(char a) { return '0'<=a && a<='9' ? a - '0' : tolower(a) - 'a' + 10;}
int main(void)
{
char a[] = "FF", b[] = "FF", c[256] = {0};
int lena, lenb, lenc, i, j;
lena = strlen(a);
lenb = strlen(b);
for(i=0; i<lena; i++) {
int tempa = char2int(a[lena-1-i]);
for(j=0; j<lenb; j++) {
int tempb = char2int(b[lenb-1-i]);
c[i+j] += tempa * tempb % 16;
if(c[i+j]/16) {
c[i+j+1] += c[i+j]/16;
c[i+j] %= 16;
}
c[i+j+1] += tempa * tempb / 16;
if(c[i+j+1] / 16) {
c[i+j+2] += c[i+j+1]/16;
c[i+j+1] %= 16;
}
}
}
for(i=255; i>0; i--) if(c[i]) break;
lenc = i+1;
for(i=lenc-1; i>=0; i--) printf("%x", c[i]);
return 0;
}
553デフォルトの名無しさん:2007/05/21(月) 01:11:25
>>551
ちゃんと一桁ずつ計算してるよ。
最後でサボって足し算の部分は無いけど。
ループ内の計算の計算結果を保存して、最後に足し算したら
筆算と同じ工程だと思うんだが。

必ずしも文字列変数は必要でない、というつもりなんだけど、
もしかして俺、「筆算」の方式を間違えて理解してる?
554デフォルトの名無しさん:2007/05/21(月) 01:16:58
>553
bは一桁ずつでもaが一桁ずつじゃないじゃん。
555デフォルトの名無しさん:2007/05/21(月) 01:20:33
>>539
c = b;
printf("----------\n%x\n",a*c);
ごまかせないだろw
556デフォルトの名無しさん:2007/05/21(月) 01:21:04
>>554
筆算形式ってソコまでやって筆算なのか・・・。
俺は [a] × [bの各桁] をbの桁数だけやって
最後にそれらを足すのが筆算だと思ってた。

理解間違い、申し訳ない
557デフォルトの名無しさん:2007/05/21(月) 01:22:19
http://ja.wikipedia.org/wiki/%E7%AD%86%E7%AE%97
筆算を理解していなかったなんで、ゆとり世代?なんてひっさん(悲惨)な、なんつって orz
558デフォルトの名無しさん:2007/05/21(月) 01:32:17
>>552でa[]のほうをb[]より大きい桁にすると表示おかしくなるんだけど。
559デフォルトの名無しさん:2007/05/21(月) 01:35:49
int tempb = char2int(b[lenb-1-i]);
じゃなくて
int tempb = char2int(b[lenb-1-j]);
でした。
560デフォルトの名無しさん:2007/05/21(月) 01:39:03
なら、おっきした方と入れ替えするコードを入れてみては?
561デフォルトの名無しさん:2007/05/21(月) 05:58:13
[1] 授業単元:
アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):
次の手順に従ってプログラムorder.cを作成せよ.

10個の整数データを図1の木構造に保存するときを考える.
まず,ポインタにより木を実現し,データを保存せよ.
(ファイルからデータを読み込み,木構造ができるようにすると良い)
次に,キーボードから前順(行きがけ),中順(通りがけ),後順(帰りがけ)を選択する.
すると,その順で木をなぞり,指定した順にデータを表示する
(再帰プログラミングで作成せよ).

図1(例)
==============================
     0
   /  \
  1     2
/│\  / \
3 4 5 6   7
     / \
    8   9
==============================

[3] 環境
 [3.1] Windows XP Pro
 [3.2] Visual Studio
 [3.3] C++
[4] 期限:2007/5/22

10個の整数データをテキストファイルから読み込んで、図1の木構造に数字をいれるみたいです。
よろしくおねがいしますm(_ _)m
562デフォルトの名無しさん:2007/05/21(月) 06:55:55
それは何という木構造?
563デフォルトの名無しさん:2007/05/21(月) 07:01:13
>>561
その探索法を使うなら二分木だと思うが、図間違ってないか?
564デフォルトの名無しさん:2007/05/21(月) 07:13:31
>>561
数日前にも君みたいなのが居たが、、、
種類を特定しないで木構造とだけ言ったところで何の説明にもなってない。
また出鱈目にデータを繋げて木構造を構築したところでアルゴリズムとして何の意味も無い。
http://ja.wikipedia.org/wiki/%E6%9C%A8%E6%A7%8B%E9%80%A0_%28%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0%29
565デフォルトの名無しさん:2007/05/21(月) 07:46:48
[1] 授業単元: C言語入門
[2] 問題文:
1〜100までの整数を半角スペースで区切って表示する。ただし、
3の倍数のときは「せんだ」
5の倍数のときは「みつお」
3の倍数かつ5の倍数のときは「せんだみつお」
「せんだみつお」に置き換えられた次の数のときは「ナハナハ」
と、置き換えて表示しなければならない。(表示時に「」は不要)
コーディングに要した時間をソース内にコメントとして記述すること。
[3] 環境
 [3.1] OS: 指定無し
 [3.2] コンパイラ名とバージョン: gcc, VisualC++など
 [3.3] 言語: C言語
[4] 期限: 5月21日:正午まで
566デフォルトの名無しさん:2007/05/21(月) 07:57:28
>>565
所要時間5分くらい

#include <stdio.h>
#define MAX 100
void main(void) {
int i;
int naha=0;
for ( i=1; i<MAX+1; ++i ) {
if ( naha ) { naha=0; printf("ナハナハ "); continue; }
if ( (i%3==0) && (i%5==0) ) { printf("せんだみつお "); naha=1; continue; }
if ( i%3==0 ) { printf("せんだ "); continue; }
if ( i%5==0 ) { printf("みつお "); continue; }
printf( "%d ", i );
}
}
567デフォルトの名無しさん:2007/05/21(月) 08:02:34
しかしなんつー課題だw
568デフォルトの名無しさん:2007/05/21(月) 08:06:05
569デフォルトの名無しさん:2007/05/21(月) 08:14:53
#include <stdio.h>
int main(void)
   int i;
   for(i=1; i<=100; i++) {
      if(i%15==0) {
         printf("せんだみつお");
         printf("ナハナハ ");
         i++;
      }
      else if(i%3==0) printf("せんだ");
      else if(i%5==0) {
         printf("みつお");
         if((i-1)%3==0) {
            i++;
            if(i > 100) break;
            printf("ナハナハ ");
         }
      }
      else printf("%d ", i);
   }
   return 0;
}

3の約数と5の約数が連続したときもナハナハ入れてみた。
所要時間3分程度。
570デフォルトの名無しさん:2007/05/21(月) 08:15:01
ナハナハ付けることでフラグ操作まで考えさせてるのか
実は「ふるい」としては良問?w
571デフォルトの名無しさん:2007/05/21(月) 08:17:02
仕様から逸脱したコード書く香具師って痛いよね
572デフォルトの名無しさん:2007/05/21(月) 08:18:29
>>569
それ、1-100 の範囲ではなく、
1-150 の範囲で出力させても大丈夫?
573デフォルトの名無しさん:2007/05/21(月) 08:21:42
566のほうがスマートだ
574デフォルトの名無しさん:2007/05/21(月) 08:29:41
continueはスマートじゃねえw
575デフォルトの名無しさん:2007/05/21(月) 08:43:26
[1] 授業単元:画像工学
[2] 問題文(含コード&リンク):

1.64×64画像(raw データ形式)の横方向の一次元フーリエ変換を順次行う。
2.変換後の画像のパワースペクトル画像を計算する。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual C++ 2005
 [3.3] 言語: どちらでも可
[4] 期限: 2007年5月21日23:59まで

よろしくお願いします。
576デフォルトの名無しさん:2007/05/21(月) 08:57:25
>>575
【raw データ形式】についてkwsk
IEEE754?
?bit
整数?
577デフォルトの名無しさん:2007/05/21(月) 09:05:51
>>576
64×64は画像のサイズです。
説明不足ですみません。
578デフォルトの名無しさん:2007/05/21(月) 09:07:27
>>561
単元から言って、データ構造やらそれを表現するデータファイルの仕様策定も
やるべき作業に含まれてるんかな?
ということで適当に作ってみたが。
動いてるけど、一般的に見て正しいかどうかは知らんよ。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4016.zip
579575:2007/05/21(月) 09:15:43
>>576
整数(ピクセル?)です。
580デフォルトの名無しさん:2007/05/21(月) 09:49:13
>>565
#include <stdio.h>
#define SENDA num%3==0
#define MITSUO num%5==0
int SendaMitsuoNahanaha(int num){
if(num != 1) switch(SendaMitsuoNahanaha(num-1)){
case 1: printf("ナハナハ "); return 0; break;}
if(0);
else if(SENDA && MITSUO) {printf("せんだみつお "); return 1;}
else if(SENDA) {printf("せんだ ");}
else if(MITSUO) {printf("みつお ");}
else {printf("%d ", num);}
return 0;}
int main(void){
SendaMitsuoNahanaha(100);
return 0;}
/* 90分くらい。完全敗北した気分だ...*/
581デフォルトの名無しさん:2007/05/21(月) 10:19:31
90分はかかりすぎなうえにマクロ内に変数名直接書くな。
せめて引数つきマクロにせい。
582デフォルトの名無しさん:2007/05/21(月) 12:11:32
時間割の宿題って過去にでた?
過去スレから探そうと思うんだが。
583デフォルトの名無しさん:2007/05/21(月) 12:50:56
つーかマクロはカッコで囲めよな・・・・
584デフォルトの名無しさん:2007/05/21(月) 13:52:22
通常の式と同じように扱うことを意図したマクロでは括弧を使うのが当然だが、
>>580みたいな局所的なテキスト置換の用途では、正しく使うにはいずれにせよ展開後の
テキストを具体的に知っておく必要があるから、括弧はどっちでもいいような。
585デフォルトの名無しさん:2007/05/21(月) 14:25:15
どっちでもいいわけないだろうが。
利用側の識別子に依存するマクロってなんだそれ?
586デフォルトの名無しさん:2007/05/21(月) 14:31:42
どーでもいい。>>565はせめてC++ならまだ面白かっただろうな。
587デフォルトの名無しさん:2007/05/21(月) 15:19:11
[1] 授業単元: 情報2
[2] 問題文(含コード&リンク):
10 個の整数データを入力して,総和,平均値,最大値,最小値,分散および標準偏差を求める
プログラムを作成しなさい
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (Cygwin)
 [3.3] 言語: (C/)
[4] 期限: (2週間後)
[5] その他の制限: (なし)

お願いします。

588デフォルトの名無しさん:2007/05/21(月) 15:28:10
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
1.2つの正の整数u, vの最大公約数gcd(u, v)を求めるユークリッドのアルゴリズムについて,
繰り返し版のプログラムをつくりなさい。尚,ユークリッドの方法は,「uがvより大きいならば,
uとvの最大公約数がvとu-vの最大公約数に等しい」ことに基づく。
関数のプロトタイプ宣言は次のようにしなさい。
  int gcd(int, int);
▼出力例
最大公約数を求めます!
2つの正整数を入力してください:124 432↵
124と432の最大公約数は4です
2.キーボードから0〜9の数字dと,正の整数nを読み込み,n以下の整数xで,
xとxの2乗の10進数表示の両方にdを含むものをすべて出力するプログラムをつくりなさい。
ただし,次のプロトタイプ宣言で示すように,整数xとdを仮引数として,
xとxの2乗の10進数表示の両方にdを含む場合に1,
そうでない場合に0を返す関数hit_digitを作成しなさい。
 int hit_digit(int x, int d);
▼出力例
0〜9の数字dを入力して下さい:7↵
正の整数nを入力して下さい:100↵
該当するものは次の通り:
27 74 76 87
全部で4個ありました

[3] 環境
 [3.1] OS:windows (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:borland (gcc 3.4 VC 6.0等)
 [3.3] 言語:C (C/C++/どちらでも可 のいずれか)
[4] 期限: 今週日曜日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
2つありますがよろしくお願します。
589デフォルトの名無しさん:2007/05/21(月) 16:03:59 BE:46584364-2BP(222)
>>588上段
#include<stdio.h>
int gcd(int u,int v){int tmp,res,r;if(u<v){tmp=u;u=v;v=tmp;}
if((r=u%v)==0){res=v;}else{res=gcd(v,r);}return res;}
int main(void){char tmp[256];int u,v,d;printf("最大公約数を求めます!\n");
printf("2つの正整数を入力してください:");fgets(tmp, 256, stdin);
sscanf(tmp, "%u %u", &u, &v);d=gcd(u,v);if(d!=1){
printf("%uと%uの最大公約数は%uです。\n",u,v,d);}else{
printf("%uと%uは互いに素です。\n",u,v);}return 0;}
590デフォルトの名無しさん:2007/05/21(月) 16:21:59
1000までの素数を求めて出力するプログラムの作成を教えてください。
mod使う方法でお願いします」。

591デフォルトの名無しさん:2007/05/21(月) 16:23:37 BE:29115353-2BP(222)
>>588下段
#include<stdio.h>
#include<stdlib.h>
int hit_digit_h(int x,int d){char tmp[256];char* p=tmp;
sprintf(tmp,"%i",x);while(*p!='\0'){if(*p==(d+'0')){
return 1;}p++;}return 0;}
int hit_digit(int x, int d){
return hit_digit_h(x,d) && hit_digit_h(x*x,d);}
int main(void){char tmp[256];int d,x,i,c=0;do{
printf("0〜9の数字dを入力して下さい:");fgets(tmp, 256, stdin);
d = atoi(tmp);}while(d<0||d>9);printf("正の整数nを入力して下さい:");
fgets(tmp, 256, stdin);x=atoi(tmp);for (i=0; i<=x; i++){
if(hit_digit(i,d)){printf("%i ",i);c++;}}if(c){
printf("\n%i個ありました。\n",c);}else{printf("\nありません。\n");
}return 0;}
592デフォルトの名無しさん:2007/05/21(月) 16:26:45 BE:46585038-2BP(222)
>>590
#include<stdio.h>
int mod[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89,
97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223,
227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433,
439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593,
599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659,
661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743,
751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827,
829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997,};
int main(void){int i;for(i=0;i<sizeof(mod)/sizeof(int);i++){
printf("%i ",mod[i]);}return 0;}
593デフォルトの名無しさん:2007/05/21(月) 16:30:36
>>592
マジカヨw
594デフォルトの名無しさん:2007/05/21(月) 16:36:25 BE:58230465-2BP(222)
何か問題でも?
595デフォルトの名無しさん:2007/05/21(月) 16:53:30
>>592
そんならこれでよくね?
#include <stdio.h>
int main() { return puts(
"2 3 5 7 11 13 17 19 23 29 31 37 "
"41 43 47 53 59 61 67 71 73 79 83 89 "
"97 101 103 107 109 113 127 131 137 139 149 151 "
"157 163 167 173 179 181 191 193 197 199 211 223 "
"227 229 233 239 241 251 257 263 269 271 277 281 "
"283 293 307 311 313 317 331 337 347 349 353 359 "
"367 373 379 383 389 397 401 409 419 421 431 433 "
"439 443 449 457 461 463 467 479 487 491 499 503 "
"509 521 523 541 547 557 563 569 571 577 587 593 "
"599 601 607 613 617 619 631 641 643 647 653 659 "
"661 673 677 683 691 701 709 719 727 733 739 743 "
"751 757 761 769 773 787 797 809 811 821 823 827 "
"829 839 853 857 859 863 877 881 883 887 907 911 "
"919 929 937 941 947 953 967 971 977 983 991 997"
), 0; }
596デフォルトの名無しさん:2007/05/21(月) 16:56:32 BE:157221599-2BP(222)
>>595
>mod使う方法でお願いします」。

とあったのでやむを得ず変数名にした。
597≠595:2007/05/21(月) 17:10:31
#include <stdio.h>
int main()
{
const char * mod =
"2 3 5 7 11 13 17 19 23 29 31 37 "
"41 43 47 53 59 61 67 71 73 79 83 89 "
"97 101 103 107 109 113 127 131 137 139 149 151 "
"157 163 167 173 179 181 191 193 197 199 211 223 "
"227 229 233 239 241 251 257 263 269 271 277 281 "
"283 293 307 311 313 317 331 337 347 349 353 359 "
"367 373 379 383 389 397 401 409 419 421 431 433 "
"439 443 449 457 461 463 467 479 487 491 499 503 "
"509 521 523 541 547 557 563 569 571 577 587 593 "
"599 601 607 613 617 619 631 641 643 647 653 659 "
"661 673 677 683 691 701 709 719 727 733 739 743 "
"751 757 761 769 773 787 797 809 811 821 823 827 "
"829 839 853 857 859 863 877 881 883 887 907 911 "
"919 929 937 941 947 953 967 971 977 983 991 997";
printf("%s\n", mod);
return 0;
}
んじゃ、こんなもんでw
598デフォルトの名無しさん:2007/05/21(月) 17:22:28
お前ら意地悪だなw
599デフォルトの名無しさん:2007/05/21(月) 17:26:05
暗号なんかの実装だと既知素数はテーブル化されていることが多いよね。
600デフォルトの名無しさん:2007/05/21(月) 17:35:55
いちいち求めるの面倒だもんな
601デフォルトの名無しさん:2007/05/21(月) 17:49:01 BE:104814296-2BP(222)
面倒っつーか無駄だしね。
602デフォルトの名無しさん:2007/05/21(月) 17:58:14
>>565
#include <stdio.h>
/* 3分ほど */
int main()
{
    int n;
   
    for(n = 1; n <= 100; n++){
        printf("%3d ", n);
        if(n % 5 == 0)
            printf("せんだ");
        if(n % 3 == 0)
            printf("みつお");
        printf("\n");
    }
   
    return 0;
}
603602:2007/05/21(月) 17:59:42
仕様満たしてねえな俺w
604デフォルトの名無しさん:2007/05/21(月) 18:02:07 BE:104814296-2BP(222)
ナハナハが抜けてるのくらい視力の問題だろw
605デフォルトの名無しさん:2007/05/21(月) 18:06:07
>>565 やべえな。
#include    <stdio.h>
/* 人間失格 */
int        main()
{
    int    n, flag = 0;
    for(n = 1; n <= 100; n++){
        if(flag){
            printf("ナハナハ");
            flag = 0;
        }else{
            if(n % 15 == 0){
                printf("せんだみつお");
                flag = 1;
            }else if(n % 5 == 0)
                printf("せんだ");
            else if(n % 3 == 0)
                printf("みつお");
            else
                printf("%3d", n);
        }
        printf(" ");
    }
    return 0;
}
606デフォルトの名無しさん:2007/05/21(月) 18:23:41
>>587
#include    <stdio.h>
#include    <math.h>
#define    N    10
int        main()
{
    double sum = 0, ave, powsum = 0, var, dev;
    int i, num[N], max, min;
   
    for(i = 0; i < N; i++)    scanf("%d", &num[i]);
    for(i = 0; i < N; i++)    sum += num[i];
    ave = sum/N;
    for(i = 0; i < N; i++)    powsum = pow(num[i] - ave, 2);
    var = powsum/N; //分散のつもり
    dev = sqrt(var);//標準偏差のつもり
    printf("sum = %f\nave = %f\nvar = %f\ndev = %f\n", sum, ave, var, dev);
   
    return 0;
}
607デフォルトの名無しさん:2007/05/21(月) 18:29:33
>>587 眼科逝ってくる。
#include    <stdio.h>
#include    <limits.h>
#include    <math.h>
#define    N    10
int        main()
{
    double sum = 0, ave, powsum = 0, var, dev;
    int i, num[N], max = INT_MIN, min = INT_MAX;
   
    for(i = 0; i < N; i++)    scanf("%d", &num[i]);
    for(i = 0; i < N; i++){
        sum += num[i];
        if(num[i] > max)    max = num[i];
        if(num[i] < min)    min = num[i];
    }
    ave = sum/N;
    for(i = 0; i < N; i++)    powsum = pow(num[i] - ave, 2);
    var = powsum/N; //分散のつもり
    dev = sqrt(var);//標準偏差のつもり
    printf("sum = %f\nave = %f\nmax = %d\nmin = %d\nvar = %f\ndev = %f\n", sum, ave, max, min, var, dev);
   
    return 0;
}
608デフォルトの名無しさん:2007/05/21(月) 18:52:28
宿題スレにどうしてC++固有の機能を使った問題が少ないのかな?
教官がCしかわからない頭の固いジジイが多いせいかもしれないな。
609デフォルトの名無しさん:2007/05/21(月) 19:42:37
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4018.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年05月22日08:00まで
よろしくお願いします。
610デフォルトの名無しさん:2007/05/21(月) 19:43:18
>>608
Cレベルの宿題すら丸投げするんだから、C++レベル要求しても無駄かと
611デフォルトの名無しさん:2007/05/21(月) 20:07:22
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):次の処理を行うプログラムを作成しなさい。
              1、文字配列seiに姓を、文字配列namaeに名前を入力する。
              2、seiにnamaeを連結させる。
              3、seiの文字数をカウント表示する。
              4、seiを出力する。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:vc2005
 [3.3] 言語:C++
[4] 期限:21時まで
[5] その他の制限:特になし

表示結果
姓は=> 永井
名前は=> さゆり
姓名は 永井さゆり です
文字数は 10 です

お願いします。


612デフォルトの名無しさん:2007/05/21(月) 20:16:52
>>609
#include <stdio.h>
#define N 5
int main(int argc, char **argv)
{
    int i, n, sum = 0;
    double ave;
    if (argc < 3)
        return fprintf(stderr, "ファイル名を指定してください\n"), 1;
    if (!freopen(argv[1], "r", stdin) || !freopen(argv[2], "w", stdout))
        return fprintf(stderr, "ファイルが開けません\n"), 2;
    for (i = 0; i < N && scanf("%d", &n) == 1; i++)
        sum += n;
    printf("平均値は%.1fです。\n", (double)sum/N);
    return 0;
}
613デフォルトの名無しさん:2007/05/21(月) 20:20:52
>>611
仕様と出力例が矛盾しとるようだな
614デフォルトの名無しさん:2007/05/21(月) 20:26:49
>>565
#include<stdio.h>
int main(){
/*仕事中に携帯でこっそりやったら一時間以上かかった*/
int i, j;
for(i=1; i<=100; i++){
j = 0;
if(i%3 == 0){ printf("せんだ"); j += 1; }
if(i%5 == 0){ printf("みつお"); j += 1; }
if(!j){ printf("%d", i); }
putchar(' ');
if(j>1){printf("ナハナハ ");++i;}
}
return 0;
}
615デフォルトの名無しさん:2007/05/21(月) 20:37:03
[1] 授業単元: C
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4019.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限:出来る限り早くお願いします。 無理言ってすいません。
[5] その他の制限:現在習っているのが関数、配列、制御文です。初心者です。よろしくおねがいします。
616デフォルトの名無しさん:2007/05/21(月) 20:46:17 BE:29115735-2BP(222)
#include<stdio.h>
#include<ctype.h>
int alpha_jdg_cnt(int c){if(c=='.'){return 0;}if(isalpha(c)){return 1;}return 2;}
int main(void){int f,count=0;char s[256];do{printf("Input charactor:");fgets(s,256,stdin);
f=alpha_jdg_cnt(s[0]);if(f==1){count++;printf("ALPHABET : %i\n",count);}}
while(f!=0);return 0;}
617デフォルトの名無しさん:2007/05/21(月) 20:47:34 BE:54348847-2BP(222)
>>611
>姓名は 永井さゆり です
>文字数は 10 です

何の文字数なのかと小一時間ry
618デフォルトの名無しさん:2007/05/21(月) 20:50:38
姓 1
名 2
は 3
永 4
井 5
さ 6
ゆ 7
り 8
で 9
す 10
619デフォルトの名無しさん:2007/05/21(月) 20:55:50
>>616
alpha_jdg_cntの中でカウントして無くないか?
多分static変数使って、関数内で出力するんでそ
620デフォルトの名無しさん:2007/05/21(月) 20:56:47
>>615
#include <stdio.h>
int alpha_jdg_cnt(char);
int main(void) {
int cnt=0,flg;
char buf[32];
printf(">>\n\n");
do{
printf("Input character : ");
scanf("%s",buf);
flg=alpha_jdg_cnt(buf[0]);
if( flg == 1) {
cnt++;
printf("\nALPHABET : %d\n\n",cnt);
}
}while( flg!=0 );
printf("\n>>\n");
return 0;
}

int alpha_jdg_cnt(char ch) {
if( (ch>='A' && ch<='Z') || (ch>='a' && ch<='z') )
return 1;
else if( ch=='.' ) return 0;
return 2;
}
621デフォルトの名無しさん:2007/05/21(月) 20:59:25
答えてる人ってやっぱりそういう職業に就いてる方?
それとも学生だったりします?
622デフォルトの名無しさん:2007/05/21(月) 20:59:30
>>615 確かに、アルファベットのカウントも定義したライブラリの中か。それじゃこうか?

#include <stdio.h>
int alpha_jdg_cnt(char);
int main(void) {
int flg;
char buf[32];
printf(">>\n\n");
do{
printf("Input character : ");
scanf("%s",buf);
}while( alpha_jdg_cnt(buf[0])!=0 );
printf("\n>>\n");
return 0;
}
int alpha_jdg_cnt(char ch) {
static cnt=0;
if( (ch>='A' && ch<='Z') || (ch>='a' && ch<='z') ) {
cnt++;
printf("\nALPHABET : %d\n\n",cnt);
return 1;
}
else if( ch=='.' ) return 0;
return 2;
}
623デフォルトの名無しさん:2007/05/21(月) 21:00:09
あ、流れに関係なく興味本位で聞いてみただけです
624デフォルトの名無しさん:2007/05/21(月) 21:02:17
>>618
その通りです。
>>611をお願いします。
625デフォルトの名無しさん:2007/05/21(月) 21:03:20
>>621
内定もらえない俺、将来有望なお前
626デフォルトの名無しさん:2007/05/21(月) 21:04:59
>>624
>3、seiの文字数をカウント表示する。
嘘をつくな。
627デフォルトの名無しさん:2007/05/21(月) 21:06:47
>>621
俺高卒ニート。
専門学校とか大学行ってる奴らってこんな宿題もできないんだね。
628デフォルトの名無しさん:2007/05/21(月) 21:06:47
>>626
せいせいせいせいせいせーい、細かいことは気にするなフー!
629デフォルトの名無しさん:2007/05/21(月) 21:08:57
>>627
全員ができないと思い込むあたり、やっぱりおまえ自身のレベルが低いってことだなw
ここで授業を受けている人の大半が質問しているわけじゃないだろ。
ほんの一部。ずるがしこい奴もいるだろうけど。
第一、こんなの最後に単位をもらっちゃえばどうでも良いことなんだよ。
卒業後に習ったことを使い続ける人でないならなおさらな。そんなもんだよ、社会ってのは。
630デフォルトの名無しさん:2007/05/21(月) 21:11:13
はい釣れました
631デフォルトの名無しさん:2007/05/21(月) 21:11:19
>>611 手抜き
#include    <stdio.h>
#include    <string.h>

#define    STR_SIZE    256

int        main()
{
    char    sei[STR_SIZE] = {0}, namae[STR_SIZE] = {0};
   
    printf("姓は=> ");    scanf("%s", sei);
    printf("名前は=> ");    scanf("%s", namae);
   
    strcat(sei, namae);
   
    printf("姓名は%sです\n", sei);
    printf("文字数は%dです\n", strlen(sei));
   
    return 0;
}
632デフォルトの名無しさん:2007/05/21(月) 21:16:02
>>526の書いてある>>516のプログラムを解説していだたけないでしょうか?
まったく同じ課題が出ていて、「なぜそのプログラムのアルゴリズムで正しく動くのかについての解説を書く。」というのがあるのでお願いします。
627 名前:デフォルトの名無しさん 投稿日:2007/05/21(月) 21:06:47
>>621
俺高卒ニート。
専門学校とか大学行ってる奴らってこんな宿題もできないんだね。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
○〜に通っているやつらの中にはできない奴もいるんだね。
634デフォルトの名無しさん:2007/05/21(月) 21:34:36
>>621
このスレで勉強すれば就職も夢じゃない!(※年齢制限有)
635デフォルトの名無しさん:2007/05/21(月) 21:35:41
>>616=性帝トーマス◆13ThomasYo
トーマスですYO!
636デフォルトの名無しさん:2007/05/21(月) 21:39:12
>>621
自分は職業としてプログラマやってるけど復習の為に時々やってる。
仕事はJavaメインだからC/C++を忘れないようにと。
637デフォルトの名無しさん:2007/05/21(月) 21:50:53
>>621
元職業PG
鬱で退職して今はヒキ

仕事は辞めたが元々趣味でコード書いてたし、
やっぱ仕事じゃないプログラミングは楽しい。
638デフォルトの名無しさん:2007/05/21(月) 21:55:53
>>621
組み込みのEmbedded C++ばかりやっているので普通のC++は
あまり知らない。テンプレートも例外処理も使えないC++でつ。
639デフォルトの名無しさん:2007/05/21(月) 21:59:02
>>612
ありがとうございます!!
640デフォルトの名無しさん:2007/05/21(月) 22:06:26
>>611
#include <iostream>
#include <cstring>
void ask(const char *prompt, char *buff, size_t len)
{
    char c;
    std::cout << prompt << std::flush;
    if (!std::cin.get(buff, len))
        std::cin.clear();
    while (std::cin.get(c) && c != '\n')
        ;
}
int main(int argc, char **argv)
{
    const int namelen = 256;
    char sei[2 * namelen], namae[namelen];
    ask("姓は=>", sei, namelen);
    ask("名前は=>", namae, namelen);
    std::strcat(sei, namae);
    std::cout << "姓名は" << sei << "です\n"
              << "文字数は" << strlen(sei) << "です\n";
    return 0;
}
>>621
もと三流請負システム屋なので、ちょっと難しい問題になると解けないんだYO。
641デフォルトの名無しさん:2007/05/21(月) 22:09:29
俺ROM組だけど学生
暇つぶしに見てる
642デフォルトの名無しさん:2007/05/21(月) 22:18:54
>>621
俺も学生。
化学科だから学校ではやってないけど趣味でプログラミングやってる。
でもここでは見てるだけ。
実用的なプログラムを作る他のスレでは作ってるけど。
643デフォルトの名無しさん:2007/05/21(月) 22:23:59
[1] 授業単元: C
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4022.txt
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C
[4] 期限: 出来るだけ早めにお願いしたいです><
[5] その他の制限:特になし

自分でもやってみたのですが、全然上手くいきませんでした
力を貸していただけるとありがたいです
644デフォルトの名無しさん:2007/05/21(月) 22:32:12
お願いしたいのはわかったが、期限はいつなんだ?
私はGUIはタルイからやらないけど・・・
645643:2007/05/21(月) 22:32:27
すみません。
制限として、メニュー画面は上から「end」(終了)、「free」(フリー曲線)、
「moji」(文字の描画)、「line」(直線の描画)と、左上部に縦並びで表示して下さい。

よろしくお願いします。
646643:2007/05/21(月) 22:33:44
度々すみません。
期限は5月23日です。
647デフォルトの名無しさん:2007/05/21(月) 22:35:44
わざわざcygwinでXlibって、これまたマニアックな課題だな
648デフォルトの名無しさん:2007/05/21(月) 23:00:07
>>632
ググってからどの辺が分からないのか聞いた方が良い。
基本的なところはWikipediaとかに載ってる
649前スレ699,720:2007/05/21(月) 23:12:53
>>621
自分も学生ですね。
情報系なんだけどプログラミングの授業は始まったばかりなので、
趣味知識が大半かな・・・
答えたこと数回しかないんですけどね。
650デフォルトの名無しさん:2007/05/21(月) 23:42:32
Javaでも悪くないがやっぱすVC++マンせー!
651デフォルトの名無しさん:2007/05/21(月) 23:47:05
[1] 授業単元:アルゴリズム論
[2] 問題文(含コード&リンク):

抽象データ型「優先度つき待ち行列の半順序木による実現」を、配列を用いて実現せよ.

上の「優先度つき待ち行列の半順序木による実現」を用いて、与えれた整数配列を昇順に
並び換えて出力する関数を作成せよ.さらに以下の入力に対して実行せよ.
7 3 4 6 8 5 1 9

参考プログラム→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4023.txt

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007/05/23
[5] その他の制限: スタックとキューの辺り

よろしくお願いします。
652デフォルトの名無しさん:2007/05/22(火) 00:06:36
[1] 授業単元:C++
[2] 問題文(含コード&リンク):C++で▽×Eの▽はどう表すでしょうか?
[3] 環境
 [3.1] OS: Windows XP
 [3.2] gcc
 [3.3] 言語: C++
[4] 期限: 明日の朝

▽の表し方をどう作るのかわかりません・・・
よろしくお願いします。
653デフォルトの名無しさん:2007/05/22(火) 00:14:21
654デフォルトの名無しさん:2007/05/22(火) 01:07:14
[1] 授業単元:情報処理実習
[2] 問題文(含コード&リンク):fgetsを使ってキーボードからCTRL+D(EOFかNULLのことだと思います)
を入力されるまで文字を入力する。その後後ろから出力する。

入力: def
入力: ghi
入力: (Ctrl+D)
出力: ghi
出力: def
[3] 環境
[3.1] OS: Windows XP
[3.2] gcc
[3.3] 言語: C言語
[4] 期限: 明日の22時まで

よろしくお願いします。
655デフォルトの名無しさん:2007/05/22(火) 01:10:48
>>652
ナブラよりも微分方程式をC++で解く方法がわかればいいんでしょ?
656デフォルトの名無しさん:2007/05/22(火) 01:12:57
>>654
文字列の数の上限は無し?
657デフォルトの名無しさん:2007/05/22(火) 01:42:23
>>654
#include<stdio.h>
#include<stdlib.h>
#define N 256
struct list{
char data[N];
list *next;
};
int main(){
list *top = NULL, *now;
int i = 0;
while(1){
now = (list*)malloc(sizeof(list));
now->next = top;
printf("入力: ");
if(fgets(now->data,N,stdin) == NULL) break;
top = now;
}
now = now->next;
while(now){
printf("出力: %s",now->data);
top=now;
now = now->next;
free(top);
}
return 0;
}
眠い頭でうあったからあってるかどうかしらね
658デフォルトの名無しさん:2007/05/22(火) 01:55:16
listって、struct listって書いておかなきゃだめなんじゃね?モロにコンパイルエラー出てるガナ
659デフォルトの名無しさん:2007/05/22(火) 01:57:21
うちのコンパイラはエラー出さなかった
もう寝るからそこの付け足しとかはてきとーにやってくれ

つかiとか使ってないしな
660デフォルトの名無しさん:2007/05/22(火) 01:59:05
> int main(){
なるほど、もはやANSI、ISO準拠に非ずか、通りで
661デフォルトの名無しさん:2007/05/22(火) 02:06:43
>>660
別に〜準拠とかチェックしてないから

ざっと調べたらstructを省略できるのはC++だったのか、次から気をつける。
662デフォルトの名無しさん:2007/05/22(火) 02:10:53
なんだ、釣れないなぁ〜〜、ファビョる奴が釣れるか試していたのに、冷静に返されて orz
663デフォルトの名無しさん:2007/05/22(火) 02:24:37
[1] 授業単元:言語論
[2] 問題文:
正規表現(+|-|)digit*.digit digit*(e(+|-|)digit digit*|)を実現する、
実数(整数)を識別するプログラム
入力されたデータが実数であればOK,そうでなければNGと表示させる。
(推奨:その後で連続してデータを入力できるとよい)
[3] 環境
 [3.1] OS:XP,UNIX
 [3.2] コンパイラ名とバージョン: BCCでもLSICでも
 [3.3] 言語: C言語
[4] 期限:無期限
[5] その他の制限:-2.eだとOK,-.1eだとNG。
また、switch文推奨。scanfは使わず、getsかgetcharを用いること。
664デフォルトの名無しさん:2007/05/22(火) 02:45:11
getsはあかんやろぉ〜〜〜どこのどいつだぁ〜〜い?講師は?
665デフォルトの名無しさん:2007/05/22(火) 02:53:33
つまり、getsを使ってきた奴は減点対象って事だよ。
666663:2007/05/22(火) 03:02:03
口頭で「scanfはいけないのはわかるよねー。だったらgetsかgetcharだよねー」
見たいな事を言っていたのでその通りに書きました。そのときに笑っていたので>>665さんみたいな感じだと重いmasu。
667デフォルトの名無しさん:2007/05/22(火) 03:05:27
別にscanfでもなんら問題ない。書式の指定を%sにして文字配列に入れてから処理すりゃええし。
書式を%dとかにして文字列を受け付けようとするとダメだから推奨できんが。
668デフォルトの名無しさん:2007/05/22(火) 03:16:27
scanfやらgetsやらはバッファオーバーフローが怖いって話だろ?
口頭だったらfgetsの聞き間違いじゃないの?
669デフォルトの名無しさん:2007/05/22(火) 03:36:08
scanfがいけないといっておいてダメなgetsを言うのもどうかと・・・
670デフォルトの名無しさん:2007/05/22(火) 03:38:43
「げっとえす」と「えふげっとえす」は
さすがに間違えないと思うんだ。
671663:2007/05/22(火) 03:55:51
ぼくおなかがすいたんだな。
672デフォルトの名無しさん:2007/05/22(火) 04:02:15
(||)は選択、digitは数値、+-eは文字、.は小数点か?
*は何?正規表現ってことは、ワイルドカード?乗算記号?なんか良く分からん
673デフォルトの名無しさん:2007/05/22(火) 04:02:33
おっ、おおおおおお、おにぎりあげるから、後は自分でどうにかするんだな
674デフォルトの名無しさん:2007/05/22(火) 04:11:10

>>672
あんまり気にしないでやってた。言いたいことはなんとなくわかりそう。
乗算ではないと思う。

>>671 つ■ 海苔でもくってろ
675デフォルトの名無しさん:2007/05/22(火) 04:30:25
あー・・・ようやく何となく分かったかも
正規表現の+を使っちゃうと符合と被ってややこしいから
「digit digit*」って書いてあるのか。スペースは無視すんだな。
「digit digit*」は1桁以上の数値っつーことか。
676デフォルトの名無しさん:2007/05/22(火) 04:36:34
アレ?でもそうすると
[5] その他の制限:-2.eだとOK,-.1eだとNG。
が逆になっちまう・・・。
-2.eは入力出来ないけど、-.1eが入力出来るという奇妙な現象。
やっぱ分かんねー・・・
677デフォルトの名無しさん:2007/05/22(火) 07:30:01
>>482 お願いします。
678デフォルトの名無しさん:2007/05/22(火) 08:17:50
>>651 よろしくお願いします。
679デフォルトの名無しさん:2007/05/22(火) 10:10:12
>>657
よく読むとfreeし損ねてるのがあるな
そのまま提出すると怒られるかも

やっぱ眠いときは駄目だな
680デフォルトの名無しさん:2007/05/22(火) 10:51:55
>>663
よくわからんからすげー適当に書いたお
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4024.txt

.が必須のようだしeの後はdigitが必須のようだから
ただの整数も-2.eも-.1eも受理されないし
switchも使ってないお
681解いてください。お願いします。:2007/05/22(火) 11:41:18
問2 時間(0以上23以下)を入力し、以下に示す時間に従った挨拶を出力するプログラムを作りなさい。
   プログラムは、0未満24以上の時間が入力されるまで繰り返しなさい。

0時〜3時 :Good night
4時〜11時 :Good morning
12時〜16時 :Good afternoon
17時〜20時 :Good evening
21時〜23時 :Good Night

   但し、一つの整数を引数とし、引数で指定された数値によって、上記メッセージを出力する関数を
   作り、main関数では、その関数を呼び出すようにしなさい。
682680:2007/05/22(火) 11:49:24
うわ
いくら適当と言ってもコンパイルも通らないソースをageちゃったよ
つーわけであげなおしスマソ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4025.txt
683デフォルトの名無しさん:2007/05/22(火) 11:53:16
>>663
* は正規表現どおりの定義だと「前方の 0回以上の繰り返し」の意となるんだが…

> [5] その他の制限:-2.eだとOK,-.1eだとNG。
どちらもマッチすると思われ
684デフォルトの名無しさん:2007/05/22(火) 11:53:52
つまりここの人は脳内コーディングがデフォなのか
上手い人ほど大胆なミスをするってなんかの本で言ってたけどこんな所でもそれが見られるとは
685680:2007/05/22(火) 12:07:43
>>683 ただのdigit*ではなくdigit digit*なので、「1回以上の繰り返し」になると
おもうよ
>>684 俺は別に全然上手くなんかないよ
>>681
#include <stdio.h>
char *s[] = {
    "Good night", "Good night", "Good night", "Good night",
    "Good morning", "Good morning", "Good morning", "Good morning",
    "Good morning", "Good morning", "Good morning", "Good morning",
    "Good afternoon", "Good afternoon", "Good afternoon", "Good afternoon",
    "Good afternoon", "Good evening", "Good evening", "Good evening",
    "Good evening", "Good Night", "Good Night", "Good Night",
};
char *hello(int h) { return s[h]; }
int main(void) {
    int n;
    while (scanf("%d", &n) == 1 && n >= 0 && n < 24)
        puts(hello(n));
    return 0;
}
686デフォルトの名無しさん:2007/05/22(火) 12:09:04
>>685
俺が気にしてるのは整数部の 「digit* . 」 側。
ピリオドの前は digit* だけっしょ
687デフォルトの名無しさん:2007/05/22(火) 12:09:22
>>681
コンパイル試してないから通るかわかんない。
0未満24以上は0以上24未満の間違いでおk。
あと予想外(数字以外)の入力で無限ループに入るのは仕様。
可読性がアレなのも仕様。

#include <stdio.h>
void hello(int hour){
char *mes = "night\0morning\0afternoon\0evening\0Night";
printf("Good %s\n",&mes[hour<4?0:hour<12?6:hour<17?14:hour<21?24:32]);
}
int main(){
int h=0;
while(1){
scanf("%d",&h);
if(h<0||h>23)continue;
break;
}
hello(h);
return 0;
}
688680:2007/05/22(火) 12:10:22
>>686
整数部はそうだけど、eの後がdigit digit*なので、
eが来たらその後数字が必須になるんだお
だからどっちも受理されないお
689デフォルトの名無しさん:2007/05/22(火) 12:12:08
>>688
e(+|-|) digit digit* |
おれはこれを e <省略可符号> <省略可 digit群>
と読んだ(末尾の | ね)
690デフォルトの名無しさん:2007/05/22(火) 12:12:09
>>677>>482
文章がやばい事になってるけど、骨格自体は間違っていない筈だから
問題文などを変えれば問題ないだろう。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4026.c
691デフォルトの名無しさん:2007/05/22(火) 12:13:21
ちょっと、問題文とは違うけど大体通る奴作ってみるか
692680:2007/05/22(火) 12:14:26
>>689
にゃるほど
693689:2007/05/22(火) 12:18:44
>>692
と思ったけど.... (<e付きのなんたら群> | 無) の結合のほうが正しいのか<問題側
694デフォルトの名無しさん:2007/05/22(火) 12:49:49 BE:34938263-2BP(222)
>>681
#include<stdio.h>
void message(int n){char* seg;switch(n){case0:case1:case2:seg="night";break;
case4:case5:case6:case7:case8:case9:case10:case11:seg="morning";break;
case12:case13:case14:case15:case16:seg="afternoon";break;
case17:case18:case19:case20:seg="evening";break;
case21:case22:case23:seg="Night";break;}printf("Good %s\n",seg);}
int main(void){char tmp[256];fgets(tmp,256,stdin);message(atoi(tmp));return 0;}
695685:2007/05/22(火) 13:07:56
>>681
繰り返しの仕様を誤解してた。main()を↓のように変えて。

int main(void) {
    int n;
    do {
        while (scanf("%d", &n) != 1) {
            clearerr(stdin);
            scanf("%*[^\n]\n");
        }
    } while (n < 0 || n > 23);
    puts(hello(n));
    return 0;
}
696デフォルトの名無しさん:2007/05/22(火) 14:15:25
0未満24以上ってのは、範囲外の数字が入力されたら終了って意味じゃねーの?
697デフォルトの名無しさん:2007/05/22(火) 14:19:39
書きこむスレ間違えたのでこちらで。

whileを使って九九のプログラム作りたいのですがわかりません(´д`)
698デフォルトの名無しさん:2007/05/22(火) 14:21:43
>>697
>>1 の質問テンプレ読んで書きなおし
699デフォルトの名無しさん:2007/05/22(火) 14:28:18
適当な質問なので適当に応える
int i=0,j=0;
while(i++<9){j=0;while(j++<9)printf("%d x %d = %d\n",i,j,i*j);}
700デフォルトの名無しさん:2007/05/22(火) 14:33:16
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):適当な大きさの配列を作り、配列の末尾から
先頭(0番目の要素)に向かって入力された値を格納するプログラムを作りなさい
[3] 環境
 [3.1] OS: WindowsXP home
 [3.2] コンパイラ名とバージョン:TeraPad 0.90
 [3.3] 言語: どちらでも可(ただしcin coutを使用しろとの事です)
[4] 期限:今週の木曜まで
[5] その他の制限: 特になし

よろしくお願いします
701デフォルトの名無しさん:2007/05/22(火) 14:40:26
TeraPadはテキストエディタ。コンパイラじゃないよ。
702デフォルトの名無しさん:2007/05/22(火) 14:41:58
生茶ふいた
703デフォルトの名無しさん:2007/05/22(火) 14:44:16
>>701
すみません勘違いしてました
djgppです(これも違ってたら申し訳ないです)
704デフォルトの名無しさん:2007/05/22(火) 14:45:37
>>700
#include <iostream>
int main(void){
    int array[5];
    int i;
    for(i=0;i<5;i++){
        std::cout << "数値を入力して下さい : ";
        std::cin >> array[i];
    }
    for(i=5-1;i>=0;i--)
        std::cout << array[i] << std::endl;
    return 0;
}
705700:2007/05/22(火) 14:48:38
>>704
ありがとうございます
std::ってのがよくわからないんですが、
これは先頭に #using namespace std; を付ければ入力しなくてもいいんでしょうか?
706デフォルトの名無しさん:2007/05/22(火) 14:49:25
>704
問題文読めてる?
707デフォルトの名無しさん:2007/05/22(火) 15:00:45
[1] 授業単元: プログラミング演習1

[2] 問題文:
sample.txtに書かれている文字(数字、英数字、全角など何が含まれているかはわからないものとする)
をbase64エンコードするコードを記述せよ。
 
[3] 環境 OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC++ .net 2003
 [3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限:なし

よろしくお願いいたします。
708デフォルトの名無しさん:2007/05/22(火) 15:05:58
>>700
>>704 の訂正
#include <iostream>
int main(void){
    int array[5];
    int i;
    for(i=5-1;i>=0;i--){
        std::cout << "数値を入力して下さい : ";
        std::cin >> array[i];
    }
    for(i=0;i<5;i++)
        std::cout << array[i] << std::endl;
    return 0;
}

>>705 その通りです

>>706 読めてなかった
709700:2007/05/22(火) 15:08:06
>>708
お手数お掛けしてすみません
どうもありがとうございました
710デフォルトの名無しさん:2007/05/22(火) 15:10:44
711デフォルトの名無しさん:2007/05/22(火) 15:25:40
[1] 授業単元:IT入門B1 C言語
[2] 問題文
二次関数(y = a x^2+ bx +c)でxがx1 <= x <= x2のときの最大値と最小値(そのときのxの値も含めて)を求めるプログラムを作成せよ。
ここでa,b,cは整数、x1,x2は浮動小数とする。
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc versionは不明ですが最新版のはずです
 [3.3] 言語:C
[4] 期限: 2007年5月28日0:00まで
[5] その他の制限: 特にありません。

どなたか手を差し伸べてください・・・orz
712デフォルトの名無しさん:2007/05/22(火) 15:32:44
[1] データ構造論
[2] 課題 SE3.5
逆ポーランド電卓プログラムでは2項演算の演算子、加算( '+')、減算('-')、
乗算 ('*')、除算('/')の4種類しか用意していない。
負数を扱うための単項演算子 ('$'記号を用いる)、余りを求める2項演算子('%'記号を用いる)など
を導入するにはどうすればよいか?
 [3.1] OS:Linux
 [3.2] gcc 3.4 VC 6.0等
 [3.3] 言語:C
[4] 期限: ([2007年05月23日12:00まで]
[5] その他の制限:特になし

よろしくお願いします
713デフォルトの名無しさん:2007/05/22(火) 15:36:54
722の逆ポーランド電卓プログラムです
/* 逆ポーランド電卓プログラム

#include <stdio.h>
#include "s_q.h" /* s_q.h の取り込み */
main()
{
int type; /* 次の演算子または演算数のタイプ*/
int op2, atoi() ;
char s[MAXOP]; /* 入力領域 */
while ((type = getop(s)) != EOF) { /* 次の演算子または演算数がある間 */
switch (type) { /* そのタイプが */
case NUMBER: /* 演算数の場合 */
push(atoi(s)); break; case '+': /* 演算子 '+' の場合 */
push(pop() + pop()); break;
case '*': /* 演算子 '*' の場合 */push(pop() * pop());
break; case '-': /* 演算子 '-' の場合 */
op2 = pop(); push(pop() - op2); break; case '/': /* 演算子 '/' の場合 */
op2 = pop(); if(op2 != 0.0) push(pop() /op2);
else printf("零割りのエラー \n"); break;
case '\n': /* 改行文字 の場合 */
printf("\t%d\n",pop()); break; default: /* その他の場合 */
printf("未登録コマンド: %s\n", s); break;
}
}
return 0;
}
714デフォルトの名無しさん:2007/05/22(火) 15:43:07
>>713
pop() の戻りの型を int と仮定(っぽいコードだし)

case '$': /* 演算子 '$' の場合 */push(-pop()); break;
case '%': /* 演算子 '%' の場合 */
 /* 0割見ない場合 */ push(pop() % pop()); break;
 /* 0割チェックする場合 */
 { int num, den; num=pop(); den=pop();
  if (den != 0) { push(num/den); } else { /*0割だお スタックに戻しとくか? */ push(den); push(num); }
 } break;
715デフォルトの名無しさん:2007/05/22(火) 15:43:55
-if (den != 0) { push(num/den); }
+if (den != 0) { push(num%den); }
716デフォルトの名無しさん:2007/05/22(火) 16:21:37 BE:77640858-2BP(222)
717デフォルトの名無しさん:2007/05/22(火) 16:59:19
>>707
#include<stdio.h>
int encode(char *dest, int dest_size, const char *src, int src_size){
    char *base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    int dest_index, src_index, left_size, i;
    long temp;
    if(dest==NULL || src==NULL || src_size<=0 || dest_size<(src_size+2)/3*4) return -1;
    for(src_index=dest_index=0;src_index+2<src_size;src_index+=3){
        temp=(src[src_index]<<16)|(src[src_index+1]<<8)|src[src_index+2];
        for(i=0;i<8*3;i+=6) dest[dest_index++]=base64[(temp>>(18-i))&0x3F];
    }
    left_size=src_size-src_index;
    for(i=0,temp=0;i<left_size;i++) temp=(temp<<8)|src[src_index+i];
    for(;i<3;i++) temp=(temp<<8);
    for(i=0;i<left_size*8;i+=6) dest[dest_index++]=base64[(temp>>(18-i))&0x3F];
    for(;dest_index%4!=0;) dest[dest_index++]='=';
    return dest_index;
}
int main(void){
    FILE *fp;
    char src_buf[3*100], dest_buf[(sizeof(src_buf)+2)/3*4];
    int read_size, coded_size;
    if((fp=fopen("sample.txt", "rb"))==NULL) return 1;
    for(;;){
        read_size=fread(src_buf, 1, sizeof(src_buf), fp);
        coded_size=encode(dest_buf, sizeof(dest_buf), src_buf, read_size);
        if(read_size<=0 || coded_size<=0) break;
        fwrite(dest_buf, 1, coded_size, stdout);
    }
    fclose(fp);
    return 0;
}
718デフォルトの名無しさん:2007/05/22(火) 17:07:23
訂正
int encode(char *dest, int dest_size, const char *src, int src_size){

int encode(char *dest, int dest_size, const unsigned char *src, int src_size){
719デフォルトの名無しさん:2007/05/22(火) 17:31:11
>>690 ありがとうございます、ですけどC++だったんですが。
文法の方はなんとかできるんで、なんとかしてみます。
720デフォルトの名無しさん:2007/05/22(火) 17:34:44
>>518 よろしくお願いします。
721デフォルトの名無しさん:2007/05/22(火) 17:41:22
>>717
ありがとうございます。たすかりました
722デフォルトの名無しさん:2007/05/22(火) 18:28:51
[1] 授業単元: プログラミング演習
[2] 問題文:重複しない適当な値ですべての要素が初期化された配列を作り、適当な整数(Nとする)を入力して
N番目の要素の値を表示するプログラムを作りなさい。入力と表示は繰り返す。
Nにどのような値が入力されたとしても、適切に対処しなさい。
ただし、表示は次のようにしなさい。
  配列名がa,a[0]の値が20であるとき、Nとして0が入力された場合の表示:a[0]=20
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
[4] 期限:5月24日
[5] その他の制限:

お願いします
723デフォルトの名無しさん:2007/05/22(火) 18:33:07
<?php
$ary = array(0=>1);
?>
724デフォルトの名無しさん:2007/05/22(火) 18:49:30 BE:81522476-2BP(222)
>>722
#include<stdio.h>
int main(void){char tmp[256];int n;
int a[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89,
97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223,
227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433,
439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593,
599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659,
661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743,
751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827,
829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997,};
do{fgets(tmp,256,stdin);n=atoi(tmp);if(n>=0&&n<sizeof(mod)/sizeof(int)){
printf("a[%i]=%i\n",n,a[n]);}}while(n>=0);return 0;}
725722:2007/05/22(火) 19:04:28
>>724
圧巻ですね・・・
どうもありがとうございます
726デフォルトの名無しさん:2007/05/22(火) 20:41:14

[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
以下のnについて,1/nをn個加算した結果を求めよ.
n=1000, 4096, 10000
変数の型をfloatとdoubleとした場合のそれぞれについて(合計 2×3=6つの場合)調べよ
float型の値の出力の場合は%f, double型の値の出力には%16.14e(全桁数16, 小数点)以下14桁を示すを用いる

[3] 環境
 [3.1] OS: Win XP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 明日
[5] その他:無し
お願いしますヽ(T_T )ノ
727デフォルトの名無しさん:2007/05/22(火) 21:12:38
>>726
#include <stdio.h>
int main(void)
{
double nd[]={1000.0,4096.0,10000.0},sumd;
float nf[]={1000.0,4096.0,10000.0},sumf;
int i,j;

for(i=0,sumd=0.0; i<sizeof(nd)/sizeof(nd[0]); i++,sumd=0.0) {
for(j=0; j<nd[i]; j++) {
sumd+=1/nd[i];
}
printf("1/%.0lf : %16.14e\n",nd[i],sumd);
}
puts("");
for(i=0,sumf=0.0; i<sizeof(nf)/sizeof(nf[0]); i++,sumf=0.0) {
for(j=0; j<nf[i]; j++) {
sumf+=1/nf[i];
}
printf("1/%.0lf : %f\n",nf[i],sumf);
}
return 0;
}
728デフォルトの名無しさん:2007/05/22(火) 21:16:28
>>727 細かいことを言うと、int型にキャストするべきかも
for(j=0; j<(int)nd[i]; j++)
for(j=0; j<(int)nf[i]; j++)
729デフォルトの名無しさん:2007/05/22(火) 21:17:20
しかし、みなさん問題を解くスピードが速い!
プログラミング歴何年ぐらいなんでしょうか?
730651:2007/05/22(火) 21:18:07
>>651 お願いします。
731デフォルトの名無しさん:2007/05/22(火) 21:34:44
[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):
ある文字列を与えられた時に、全体の文字の約m%を別の文字にランダムに置き換える関数
とそれを用いるmain関数を書け。
(1)文字列は次のものを文字配列としてmainに確保する。
"It's not surprising that food dropped onto bacteria would collect some bacteria."
(2)置き換わる文字は英大文字の中のどれかとする。
(3)置き換える操作を行う機能を関数mutateとして実装する。関数プロトタイプを次のようにする:
void mutate(char s[], int len, int m);
引数s[]は文字列、引数lenは文字列長、引数mは置き換える割合(%)である。
(4)置き換える割合(%)mをmainで入力して指定できるようにする。mが1,3,5,10の場合に
ついて置き換えた結果の文字列を出力する。
ヒント:
(1)例えば、確立5%で置き換えるというのは、(例えば)1から10000までの擬似乱数を発生させて、
その値が1から500までの範囲だったら置き換える操作をして、その範囲
外だったら何もしないというようにすればよい。
(2)英小文字をランダムに作るには、例えば1から26までの整数をAからZまでのアルファベット
にこの順で対応させ、1から26までの範囲の整数をランダムに発生させて対応する英字に変換する。
732731:2007/05/22(火) 21:36:26
実行例:
basil$ ./a.out
Initial:
It's not surprising that food dropped onto bacteria would collect some bacteria.
It's notEsurprising that food droppedPonto bacteria would collect some bacteria.
置き換えの割合をで指定せよ: 5
It's noFEsurprisiGg that food droppedPonBo bacteriF would collect some bacteria.
置き換えの割合をで指定せよ: 10
It's noFEsuDprZsiEg that food droppeQPonBE bacteriFZwould collect some bacteOia.
置き換えの割合をで指定せよ: ^D
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限:2007/05/22/23:59
[5] その他の制限: 特になし

全然分からず困っています。よろしく御願いします。
733デフォルトの名無しさん:2007/05/22(火) 21:53:25
>>726です。
>>727
ありがとうございます。
734デフォルトの名無しさん:2007/05/22(火) 22:05:48
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
テストデータを読み込み、その文字の頻度をカウントするプログラムを作成せよ。
(データに含まれてる文字の種類はASCIIコードに限られ
ピリオドや改行コードもひとつの文字として取り扱う)
[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
735デフォルトの名無しさん:2007/05/22(火) 22:12:01
>>730
void MAKENULL(PRQueue *Q){ Q->last = 0; }

void INSERT (ElementType x, PRQueue *Q){
int i, j;
for (i = Q->last++; i > 0; i = j) {
j = (i - 1)/2;
if (Q->elements[j] > x)
Q->elements[i] = Q->elements[j];
else break;
}
Q->elements[i] = x;
}

ElementType DELETEMIN(PRQueue *Q){
int i, j, root, tmp;
root = Q->elements[0];
tmp = Q->elements[--Q->last];
for (i = 0; 2*i + 1 < Q->last; i = j) {
j = 2*i + 1;
if (j + 1 < Q->last && Q->elements[j] > Q->elements[j + 1])
j++;
if (Q->elements[j] < tmp)
Q->elements[i] = Q->elements[j];
else break;
}
Q->elements[i] = tmp;
return root;
}
736デフォルトの名無しさん:2007/05/22(火) 22:27:22
>>731-732
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void mutate(char s[], int len, int m){
while(len--)
if((int)((rand() / (double)RAND_MAX) * 100) < m)
s[len] = (char)((int)((rand() / (double)RAND_MAX) * 26) + 'A');
}
int main(){
char s[] = "It's not surprising that food dropped onto bacteria would collect some bacteria.";
int n;

srand((unsigned int)time(0));
printf("%s", s);
while(1){
printf("置き換えの割合をで指定せよ:");
if(scanf("%d", &n) < 1) break;
mutate(s, sizeof(s), n);
printf("%s", s);
}
return 0;
}
適当に作ったから気に入らなかったら自分で作り替えて
737デフォルトの名無しさん:2007/05/22(火) 22:28:03
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4027.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: Cのみ
[4] 期限: 早めでお願いします。無理いってすいません。
[5] その他の制限:習っているのは制御文、関数、配列、ポインタです。初心者なのでよろしくお願いします。
738デフォルトの名無しさん:2007/05/22(火) 22:30:23
>>737
だから早めってなんだよ
期限を書けよ期限を
739デフォルトの名無しさん:2007/05/22(火) 22:32:43
>>738
んなこと聞いているくらいならとっとと早めに答えてやれYO!
早めに済めば期限なんてどぉ〜でも良いで・す・YO!
740デフォルトの名無しさん:2007/05/22(火) 22:34:51
>>739
了解。今の仕事が終わったら大至急解くよ
8月くらいになると思うからよろしく。
741 ◆pIsMrTUaME :2007/05/22(火) 22:41:36
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):

整数値の入った2つの変数のアドレスを引数として渡すと2変数の値を交換する関数
をつくり、それを利用して昇順に選択ソートを行う関数を作成せよ。
さらにキーボードから入力した10個の整数をソートするプログラムを作成し動作確認せよ。

[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 5/25まで
[5] その他の制限: 特になしです
742741 ◆pIsMrTUaME :2007/05/22(火) 22:42:19
お願いします。
743デフォルトの名無しさん:2007/05/22(火) 22:43:58
>>734
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
FILE *fp;
int count[0x7f] = {0};
char ch;
if (argc < 2)
{
fprintf(stderr, "usage : %s <filename>\n", argv[0]);
return 1;
}
if ((fp = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, _strerror(NULL));
return 1;
}
while((ch = fgetc(fp)) != EOF)
{
count[ch]++;
}
return 0;
}
こうですか?
744デフォルトの名無しさん:2007/05/22(火) 22:44:09
740 名前:デフォルトの名無しさん 投稿日:2007/05/22(火) 22:34:51
>>739
了解。今の仕事が終わったら大至急解くよ
8月くらいになると思うからよろしく。

了解。今の仕事が終わったら大至急解くよ
8月くらいになると思うからよろしく。

了解。今の仕事が終わったら大至急解くよ
8月くらいになると思うからよろしく。

了解。今の仕事が終わったら大至急解くよ
8月くらいになると思うからよろしく。

了解。今の仕事が終わったら大至急解くよ
8月くらいになると思うからよろしく。
745731:2007/05/22(火) 22:48:29
>>736さん
有難う御座います。おかげで助かりました。
こんなに短く書けるとは思っても見なかったです。
746デフォルトの名無しさん:2007/05/22(火) 22:54:24
>>739
てめーがやれよ
747デフォルトの名無しさん:2007/05/22(火) 22:55:59
結局期限はいつなんだろう?
せっかく解いたのになんか貼りにくいから出題者はぜひ期限を区切ってくれ
748デフォルトの名無しさん:2007/05/22(火) 22:57:57
納期が近くなったら漏れがやる。
749デフォルトの名無しさん:2007/05/22(火) 23:00:58
746 名前:デフォルトの名無しさん 投稿日:2007/05/22(火) 22:54:24
>>739
てめーがやれよ
てめーがやれよ
てめーがやれよ
てめーがやれよ
てめーがやれよ
てめーがやれよ
てめーがやれよ
てめーがやれよ
てめーがやれよ

こいつ最高に必死だなwwwwww
750デフォルトの名無しさん:2007/05/22(火) 23:02:52
>>746
無理を言うな
751デフォルトの名無しさん:2007/05/22(火) 23:03:22
>>740
今の仕事があるならそっち優先してこんなところで茶化すだけのクソレスしてんなよw
お前の仕事を早めに終わらせろYO! っつーか仕事あんならこんなところで要らんレスしてんなよ
引きこもりニート(プ
752デフォルトの名無しさん:2007/05/22(火) 23:05:34
はいはい、スレ違いスレ違い
753デフォルトの名無しさん:2007/05/22(火) 23:05:45
>>737
#include <stdio.h>
int hexchange(char *str)
{
int c;
if(str[0]>='0' && str[0]<='9') {
c=(int)(str[0]-'0');
return c;
}
else if( str[0]>='a' && str[0]<='f' ) {
str[0]-='a'-'A';
}
if( str[0]>='A' && str[0]<='F' ) {
c=(int)(str[0]-'A'+10);
return c;
}
else if( str[0]=='?' ) return -2;
return -1;
}
// 続く
754デフォルトの名無しさん:2007/05/22(火) 23:06:08
必死だねぇ。
755デフォルトの名無しさん:2007/05/22(火) 23:06:16
>>751
昨日も2時くらいまで解いてたし、特に期限区切ってないなら早めに寝かせてくれYO!
756デフォルトの名無しさん:2007/05/22(火) 23:06:45
>>753のつづ〜き、すず〜き、イチロー!マチュ〜〜イ!マチュジャカー!ジャイロボール!ゴールデンボール!オゥノォー!

int main(void)
{
char buf[32];
int flg;
printf(">>\n");
do{
printf("\nInput character : ");
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
flg=hexchange(buf);
if(flg>=0) printf("Exchanged %c to %d.\n",buf[0],flg);
else if(flg==-1) printf("Sorry. Input'0'〜'9','a'〜'f' or 'A'〜'F'.\n");
}while(flg!=-2);
printf("\n>>\n");
return 0;
}
757デフォルトの名無しさん:2007/05/22(火) 23:08:29
>>754->>755
ちょwwwwwwwwwwwwwおまwwwwwwwwwwwwwいらwwwwwwwwwwwww邪魔すんなYO!
758デフォルトの名無しさん:2007/05/22(火) 23:09:12
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4027.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: Cのみ
[4] 期限: 5/23
[5] その他の制限:習っているのは制御文、関数、配列、ポインタです。初心者なのでよろしくお願いします。

759デフォルトの名無しさん:2007/05/22(火) 23:10:57
>>758
っつーかぁ、講師に講義、もとい、抗議してやってくれ。判別するライブラリなどが入っている
ctype.hくらい使わせろと
760デフォルトの名無しさん:2007/05/22(火) 23:15:21
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
大きさが20の配列にフィボナッチの数列を作りなさい。0番目と1番目の要素の値はともに1で初期化すること。
最後に配列のすべての要素の値を配列の末尾から先頭(0番目)に向かって入力された値を格納するようにして表示させなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: djgpp
 [3.3] 言語: C++
[4] 期限: 5/24
[5] その他の制限:

わかりにくい文章だと思いますが問題文のそのままです
よろしくお願いします
761デフォルトの名無しさん:2007/05/22(火) 23:17:12
>>760
#include <stdio.h>
#define MAX 20
int main(void) {
int a[MAX],i;
a[0]=1; a[1]=1;
for(i=2; i<MAX; i++)
a[i]=a[i-2]+a[i-1];
for(i=MAX-1; i>=0; i--)
printf("a[%d]=%d \n",i+1,a[i]);
return 0;
}
762デフォルトの名無しさん:2007/05/22(火) 23:20:11
>>760 オウゥイェイ、数日前に似たような問題があって、そっちのをそのまんま出しちゃったんで・す・YO!
だからぁ、C++っぽく書き換えました、あぁ〜いとぅいまてぇ〜ん

#include <iostream>
#define MAX 20
using namespace std;
int main() {
int a[MAX],i;
a[0]=1; a[1]=1;
for(i=2; i<MAX; i++)
a[i]=a[i-2]+a[i-1];
for(i=MAX-1; i>=0; i--)
cout << "a[ "<< i+1 << "]=" << a[i] <<endl;
return 0;
}
763デフォルトの名無しさん:2007/05/22(火) 23:21:12
>>758
つsscanf
764デフォルトの名無しさん:2007/05/22(火) 23:22:18
>756
>Input character : f
>Exchanged F to 15.
にならないぞ
765デフォルトの名無しさん:2007/05/22(火) 23:23:28
>>761-762
わお、こんなに早くありがとうございます
助かりました
766デフォルトの名無しさん:2007/05/22(火) 23:24:58
>>764は使用したコンパイラとOSの詳細の報告をきぼんぬ
767デフォルトの名無しさん:2007/05/22(火) 23:41:41
>>764は疑わしいので他の人からの報告もきぼんぬ。特に質問を出した人、できたんかぁ?
768デフォルトの名無しさん:2007/05/22(火) 23:47:21
普通に正しい件
769デフォルトの名無しさん:2007/05/22(火) 23:51:45
>>764
なったぞ
770デフォルトの名無しさん:2007/05/22(火) 23:52:48
>>740
さぁ、仕事で忙しいかもしれない君も、コンパイルくらいすぐにできるでしょ?やってみてくれたまえ。
そして何がおかしいか、8月以降でも良いから考えた結果をここで報告して下さい、おながいします!
報告しても報酬はないけど。
771デフォルトの名無しさん:2007/05/22(火) 23:54:01
[1] 授業単元:構文解析
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4028.txt
これのふたつの???に付け加えて自然数の足し算を行うプログラムを作成し、引き算、及び掛け算もできるプログラムに拡張せよ。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007/05/23の24時
[5] その他の制限: スタックまで習いました。

よろしくお願いします。
772デフォルトの名無しさん:2007/05/22(火) 23:57:26
>>770
スマソ もう寝る

ソース見る限り正しいと思うけどね
773デフォルトの名無しさん:2007/05/22(火) 23:59:58
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4029.txt

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年5月23日中
[5] その他の制限: キューまでを使う。

よろしくお願いします。
774デフォルトの名無しさん:2007/05/23(水) 00:06:46
授業単元 プログラミングU

「*」を並べて下図のような三角形を作るプログラムを作成せよ。
ただし、プログラム中にはprintf("*")とprintf("\n")を各1回のみ使い作成せよ。

*
**
***
****
*****
******
775デフォルトの名無しさん:2007/05/23(水) 00:07:48
>>774
>>1 の質問テンプレ読んで書きなおし
776デフォルトの名無しさん:2007/05/23(水) 00:08:03
>>772
実行していないのにそういことを言う奴は信じられない。むしろ、やってないのにやったとか言いそう。
そう、例えば、童貞なのに童貞じゃない奴からあれって気持ち良いよなぁって言われたら
相手次第で否定も肯定もしてしまうあやふやなタイプ。最後はそのいい加減が仇となって
仕事にも影響して、取引先とのトラブルで損失を作ってしまって解雇されるタイプ。
777デフォルトの名無しさん:2007/05/23(水) 00:11:42
>>776みたいなやつが、人類はまだ月へ行ってないとか言うのかな?
778デフォルトの名無しさん:2007/05/23(水) 00:11:58
>>776
1.OS
2.コンパイラ
3.うまくいかなかったソースコード
をうp!

文字コードがASCII配列じゃないとか?
779デフォルトの名無しさん:2007/05/23(水) 00:12:25
>>777みたいなやつが、人類は神が創造したんであって進化した生物じゃないとか言うのかな?
780デフォルトの名無しさん:2007/05/23(水) 00:13:38
日本語でおk
781デフォルトの名無しさん:2007/05/23(水) 00:15:05
>>780 お前がなw
782デフォルトの名無しさん:2007/05/23(水) 00:17:09
ハハ
783デフォルトの名無しさん:2007/05/23(水) 00:17:57
[1] 授業単元:電子工学実習U
[2] 問題文(含コード&リンク):
 「*」を並べて下図のような三角形を作るプログラムを作成せよ。
ただし、プログラム中にはprintf("*")とprintf("\n")を各1回のみ使い作成せよ。

*
**
***
****
*****
******
[3] 環境
 [3.1] OS: XP
 [3.3] 言語: C
[4] 期限:本日朝8時まで
784デフォルトの名無しさん:2007/05/23(水) 00:19:08
>>783
#include <stdio.h>
#define A printf("*")
#define B printf("\n")
int main(){A;B;A;A;B;A;A;A;B;A;A;A;A;B;A;A;A;A;A;B;return 0;}
785デフォルトの名無しさん:2007/05/23(水) 00:19:25
っつーかさぁ、最近「日本語でおk」って文法とか使い方を間違った言葉じゃなくても
自分が気に食わない意見を、相手のすべてを否定するように言う奴って多いよな。
まぁ、人類の歴史上、正しかったことも弾圧でもみつぶされていることは良くあることだが
最近じゃマスメディアが発達して、国民に真相の真偽ははっきりしなくても、それに関する情報や
いきさつが可能な範囲内で報じられるようになったから、人生経験が浅い人や、自分で考える意思のない
他人任せ、長いものには巻かれろといった考えでない人までは騙せないどころか、公正な条件による
検証もされるようになってきたしな。
んで、人類は神が創造したものではなく、進化したであろうという生物がこの地球上にいるから
そういった点では進化論の方が信憑性が高い。が、月に関しては人類が起こしたことだから
あとは宇宙計画で今後月に行く計画が実行されれば、アポロ11号が本当に月面に証拠を残したか判明するから
それについては俺は行った行ってないについては敢えて言わないよ。第一、そんとき俺まだ生まれてねーしw
786デフォルトの名無しさん:2007/05/23(水) 00:20:12
訂正
#include <stdio.h>
#define A printf("*")
#define B printf("\n")
int main(){A;B;A;A;B;A;A;A;B;A;A;A;A;B;A;A;A;A;A;B;A;A;A;A;A;A;B;return 0;}
787デフォルトの名無しさん:2007/05/23(水) 00:20:58
>>784
アハ
788デフォルトの名無しさん:2007/05/23(水) 00:22:40
>>518
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4030.c
CUIでスピードはちょっと無謀だったかも。
789デフォルトの名無しさん:2007/05/23(水) 00:23:11
>>785
日本語でおk まで読んだ
790気まぐれアナスイ:2007/05/23(水) 00:23:36
>>785
恐らく、ですが?
『日本語でおk』は「平仮名でスレして」という事でしょう?
791デフォルトの名無しさん:2007/05/23(水) 00:24:07
C言語のソースでおk?
792デフォルトの名無しさん:2007/05/23(水) 00:24:31
×スレして
○スルーして
793デフォルトの名無しさん:2007/05/23(水) 00:26:53
ANSI、ISO準拠ってのがあることだし、方言とかなしでANSI、ISO準拠のソースでおk。
794デフォルトの名無しさん:2007/05/23(水) 00:28:36
>>783


#include <stdio.h>

int main( void )
{
int i, n;
int x, y;
scanf("%d",&x);

for ( n = 0; n < x ; n++ ) {
for ( i = 0; i <= n; i++ ) {
printf( "*" );
}
printf( "\n" );
}
return 0;
}

久々に来てみると荒れてるなー
795気まぐれアナスイ:2007/05/23(水) 00:29:39
『〜でおk』自体その言語で相手が読めるか試してみては?
796デフォルトの名無しさん:2007/05/23(水) 00:30:01
>>771 お願いします。
797デフォルトの名無しさん:2007/05/23(水) 00:30:41
>>795
日本語でおk
798気まぐれアナスイ:2007/05/23(水) 00:32:13
>>797
間抜けてますよ?
799デフォルトの名無しさん:2007/05/23(水) 00:33:14
>>795
Japaneseでおk
800741 ◆pIsMrTUaME :2007/05/23(水) 00:33:30
催促するようで悪いのですが>>741も忘れないでください。
お願いします。
801デフォルトの名無しさん:2007/05/23(水) 00:40:16
この板で軍を抜いて勢いがあるスレでワロタ
無償でクソガキどもの宿題を肩代わりするボランティア精神旺盛なあつまりだなw
802デフォルトの名無しさん:2007/05/23(水) 00:42:02
実際のところ、勢いがあるのは詰まらない議論が泥沼化するところにあるのさw
803デフォルトの名無しさん:2007/05/23(水) 00:44:50
>>800
悪いと思うなら催促するな。
#include<stdio.h>
void swap(int *a, int *b){ int c = *a; *a = *b; *b = c; }
void sort(int *ptr, int n){
int i, j, min;
for(i = 0; i < n-1; ++i){
min = i;
for(j = i+1; j<n; ++j) if(*(ptr+min) > *(ptr+j)) min = j;
swap(ptr+i, ptr+min);
}
}

int main(){
int i, ptr[10], n = 10;
for(i = 0; i < n; ++i) scanf("%d", &ptr[i]);
sort(ptr, n);
for(i = 0; i < n; ++i) printf("%d ", ptr[i]);
return 0;
}
804デフォルトの名無しさん:2007/05/23(水) 00:47:54
>>803 そういうことを言うくらいならレスするな。
805デフォルトの名無しさん:2007/05/23(水) 00:51:56
雰囲気悪いね、ここ。
806デフォルトの名無しさん:2007/05/23(水) 00:54:36
>>800
氏ね。書けるんだったらさっさと教えろクズ
807デフォルトの名無しさん:2007/05/23(水) 01:00:11
>>805
今ものすごく良いよ、このスレのふいんき(なぜか変換されな)
808741 ◆pIsMrTUaME :2007/05/23(水) 01:10:07
>>803
ありがとうございます。
809気まぐれアナスイ:2007/05/23(水) 01:15:09
#include <stdin.h>
int main();
???? {
(
[0,1,2,3,4,5,6,7,8,9] >= [0,1,2,3,4,5,6,7,8,9] &&
[0,1,2,3,4,5,6,7,8,9] <= [0,1,2,3,4,5,6,7,8,9];
if [input= "OS/2"];
?? "10" == ?? "0,1,2,3,4,5,6,7,8,9" == ??? "." == ?? "4");
}
810デフォルトの名無しさん:2007/05/23(水) 01:17:39
>>807
雰囲気は「ふんいき」って読むんです
君は悪くない。ゆとり時代が悪いんだ
811デフォルトの名無しさん:2007/05/23(水) 01:20:12
ふいんきに釣られる奴久々に見たな
812デフォルトの名無しさん:2007/05/23(水) 01:21:05
>>807
×変換されな
○変換されない

ゆとり乙
813デフォルトの名無しさん:2007/05/23(水) 01:23:02
int変数で(2/3)を、またdouble変数で(2.0/3.0)を計算し、結果の相違について考察しなさい。

って課題が出たので教えて下さい。
4月からはじめたのでサッパリわかりません;;
814デフォルトの名無しさん:2007/05/23(水) 01:24:26
>>813
Cで実行して
結果の違いについて考えてみればいいじゃないか
815デフォルトの名無しさん:2007/05/23(水) 01:24:47
>>810>>812
ネタにry
ここまでry
816813:2007/05/23(水) 01:28:11
>>814
自分、ホントに全くC出来ないんですよ。
でも、今日提出しないといけなくってorz

結果だけでも教えてもらえないでしょうか?
お願いします。
817デフォルトの名無しさん:2007/05/23(水) 01:30:50
>>812=>>810=ふんいきに釣られた2ちゃん慣れしていない初心者w
ぷぷっ、その程度でゆとりとか言い出すくらいだからお前は気持ち悪いって言われるんだよw
818デフォルトの名無しさん:2007/05/23(水) 01:32:31
810 名前:デフォルトの名無しさん 投稿日:2007/05/23(水) 01:17:39
>>807
雰囲気は「ふんいき」って読むんです
君は悪くない。ゆとり時代が悪いんだ

↑お前は悪い、2ちゃん慣れしていないのが悪いんだ。

812 名前:デフォルトの名無しさん 投稿日:2007/05/23(水) 01:21:05
>>807
×変換されな
○変換されない

ゆとり乙

↑2ちゃんねるでのゆとりの無さが仇となった香具師乙
819デフォルトの名無しさん:2007/05/23(水) 01:33:14
>>816
出来ない所のレベルじゃないぞ
これからどうすんだ?
テストあるだろ??

釣り・・・?
820デフォルトの名無しさん:2007/05/23(水) 01:35:32
>>813 >>816
Cができないのはいいとしても、次からは>>1くらい読もうな

#include<stdio.h>
int main(){ printf("%d %f\n", 2/3, 2.0/3.0); return 0; }
821813:2007/05/23(水) 01:36:09
 二週間に一回の授業を講師の言われたとおりに授業やってきたんで、まだ何にも身についていないんですよorz

テストはないようで、課題等が点数になるそうです。

釣りじゃないです。マジで困ってます。
822デフォルトの名無しさん:2007/05/23(水) 01:36:22
優しいなあ
823813:2007/05/23(水) 01:37:28
>>820
すいません。
以後気をつけます。
824デフォルトの名無しさん:2007/05/23(水) 01:38:09
>>821
理由を聞かれたら、切り捨てられたって叫べばおk
825813:2007/05/23(水) 01:43:25
>>824
((φ(..。)切捨て、ですか。
ありがとうございます。
頑張って考察したような文章書きます。。
826デフォルトの名無しさん:2007/05/23(水) 01:43:34
>>813
#include<stdio.h>

int main(void){
    int salary, salary_default=300000;

    printf("通常の給料 : %d 円\n", salary_default);

    printf("\n減俸処分で給料を3分の1カットになると…\n");

    salary=2/3*salary_default;
    printf("減俸後の給料 : %d 円\n", salary);

    salary=2.0/3.0*salary_default;
    printf("減俸後の給料 : %d 円\n", salary);

    return 0;
}
827813:2007/05/23(水) 01:48:48
>>826
給料ですかぁ。わかりやすいです^^
活用させていただきます。
本当にありがとうございます。

828デフォルトの名無しさん:2007/05/23(水) 01:49:51
どういたしまして。
また何かあったらおいで。
課題がんばってね^^
829813:2007/05/23(水) 01:52:31
>>828
はい、頑張ります^^
また来ちゃった時はよろしくです。。
830デフォルトの名無しさん:2007/05/23(水) 01:56:01
>>826
恐ろしい給与計算だな
831デフォルトの名無しさん:2007/05/23(水) 01:56:12
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):3行、5列の整数の表を読み込み、その最大値が、何行何列にあるかを表示するプログラムを作れ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[5] その他の制限:
問題としては出されていないのですが、自分で数値を入力していき、
その中で最大値はなにか?というところまでお願いします。
面倒なら省いてもいいです。

よろしくお願いします。
832デフォルトの名無しさん:2007/05/23(水) 01:57:27
甘えるなクズ
833デフォルトの名無しさん:2007/05/23(水) 02:02:51
はい、すいません。
834デフォルトの名無しさん:2007/05/23(水) 02:14:16
>>831
最大値が2箇所にある場合はどうすんの?
835デフォルトの名無しさん:2007/05/23(水) 02:23:57
>>834
被ってしまう場合はどうするかということですよね?
その場合は、A行A列、B行B列というように2個表示されるようにお願いします。
836デフォルトの名無しさん:2007/05/23(水) 02:31:05
ところでちょっと遅レスだが、>>764はどんな標準外の処理系を使ったんだ?
837デフォルトの名無しさん:2007/05/23(水) 02:32:09
>>831
超テキトー。
表を読み込むところはパス。

#include <stdio.h>
#define COL 5
#define ROW 3
int main(){
int j,i,max;
/* 入力部分はメンドクサイのでパス */
int num[ROW][COL] =
{ {1, 2, 3, 4, 5}
,{1, 5, 3, 4, 2}
,{1, 2, 3, 4, 5} };
/* ホントはここで表を読み込む */
/* 行列内の最大要素を調べる */
for(i=0,max=0;i<ROW;i++)
for(j=0;j<COL;j++)
if(num[i][j] > max)
max = num[i][j];
/* 最大要素を出力 */
printf("max = %d\n", max);
/* 最大要素の位置を出力 */
for(i=0;i<ROW;i++)
for(j=0;j<COL;j++)
if(num[i][j] == max)
printf("%d行 %d列\n", i+1, j+1);
}
838デフォルトの名無しさん:2007/05/23(水) 02:45:08
>837
とても助かります。
読み込みの部分は自分で考えてみます。
ありがとうございました。
839デフォルトの名無しさん:2007/05/23(水) 03:43:35
>>831
遅いかもしれんが俺流のやり方で。行列をファイルに書き出すプログラムにて行、列を指定可能。
最大を探すプログラムで、ファイルに書き込まれている行、列を判別して処理。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4032.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4033.c
840デフォルトの名無しさん:2007/05/23(水) 04:24:15
>839
いえ、参考にさせていただきます。
ありがとうございます。
841デフォルトの名無しさん:2007/05/23(水) 04:32:08
842デフォルトの名無しさん:2007/05/23(水) 07:10:26
>>733もお願いします。
843デフォルトの名無しさん:2007/05/23(水) 10:20:56
>>717さんへ

昨日はありがとうございました。
回答者側の方々 おつかれさまでした。
844デフォルトの名無しさん:2007/05/23(水) 11:20:07
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):3個の整数を入力して,初項 a ,項差 d の等差数列を n 項表
示するプログラムをつくれ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[5] その他の制限:
とくに無いです。
よろしくおねがいします。
845デフォルトの名無しさん:2007/05/23(水) 11:39:28
#include <stdio.h>

int main(void)
{
int i, a, d, n;
printf("初項を入力してください:");
scanf("%d", &a);
printf("公差を入力してください:");
scanf("%d", &d);
printf("項数を入力してください:");
scanf("%d", &n);

for(i=0; i<n; i++) printf("%d ", a + d * i);

return 0;
}
846デフォルトの名無しさん:2007/05/23(水) 11:40:16
公差→項差
847デフォルトの名無しさん:2007/05/23(水) 12:36:18
[1] 授業単元:ネットワーク系プログラミング
[2] 問題文(含コード&リンク):
 [2.1] コマンドラインから指定したテキストを標準出力に表示するプログラム
 [2.2] コマンドラインで指定した任意のファイルの内容を16進数で標準出力にダンプするプログラム
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc (ver不明)
 [3.3] 言語: C
[4] 期限: [2007年05月24日13:00まで]
[5] その他の制限: 無しだと思います。

よろしくお願いします。
848デフォルトの名無しさん:2007/05/23(水) 12:38:21
>>847 ですが
[2.1] コマンドラインから指定した「テキストファイル」を標準出力に表示するプログラム
でした、ごめんなさい訂正します。
849デフォルトの名無しさん:2007/05/23(水) 12:55:19
>847
[2.1]
#include <stdio.h>
int main(int argc, char **argv)
{
   int ch;
   FILE *fp;
   if(argc!=2) return 0;
   if((fp = fopen(argv[1], "r"))==NULL) return 0;
   while((ch=fgetc(fp))!=EOF) fputc(ch, stdout);
   fclose(fp);
   return 0;
}
[2.2]
#include <stdio.h>
int main(int argc, char **argv)
{
   char ch;
   FILE *fp;
   if(argc!=2) return 0;
   if((fp = fopen(argv[1], "rb"))==NULL) return 0;
   while(fread(&ch, 1, 1, fp)) printf("%02X ", ch);
   fclose(fp);
   return 0;
}
850デフォルトの名無しさん:2007/05/23(水) 13:14:52
>>845さん

ありがとうございます。
851デフォルトの名無しさん:2007/05/23(水) 13:15:36 BE:29115735-2BP(222)
>>726
まれに見るクソ問題だな。

#include<stdio.h>
/*わざわざ誤差なんか出してやるかバーカw*/
int main(void){int ni[]={1000,4096,10000,};int i;
for(i=0;i<sizeof(na)/sizeof(int);i++){printf("n=%i,(int):%i\n",ni[i]*ni[i]/ni[i]);}
for(i=0;i<sizeof(na)/sizeof(int);i++){printf("n=%i,(float):%f\n",(float)ni[i]*ni[i]/(float)ni[i]);}
for(i=0;i<sizeof(na)/sizeof(int);i++){printf("n=%i,n(double):%16.14e\n",(double)ni[i]*ni[i]/(double)ni[i]);}
return 0;}
852デフォルトの名無しさん:2007/05/23(水) 13:20:28
>>851
まれに見るクソ回答乙
853デフォルトの名無しさん:2007/05/23(水) 14:02:55 BE:19410252-2BP(222)
クソ問題にはクソ回答。これ定説。
854デフォルトの名無しさん:2007/05/23(水) 14:03:02
>>851
ツンデレしなくても良いんだよバーカ
855デフォルトの名無しさん:2007/05/23(水) 15:25:20
[1] 授業単元: プログラミング及び演習
[2] 問題文:重複しない適当な値ですべての要素が初期化された配列を作り、適当な整数(Nとする)を入力して
N番目の要素の値を表示するプログラムを作りなさい。入力と表示は繰り返す。
ただし、表示は次のようにしなさい。 Nにどのような値が入力されたとしても、適切に対処しなさい。
  配列名がa,a[0]の値が20であるとき、Nとして0が入力された場合の表示:a[0]=20
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:djgpp
 [3.3] 言語:C++
[4] 期限:5月30日

よろしくおねがいします
856デフォルトの名無しさん:2007/05/23(水) 16:20:38
#include <iostream>
using namespace std;
int main()
{
int a[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}, n;
while(1){
if ((cin >> n) >= 0 && n < sizeof(a)/sizeof(a[0]))
cout << "a[" << n << "] = " << a[n] << endl;
else break;
}
return 0;
}
857デフォルトの名無しさん:2007/05/23(水) 18:01:03 BE:23292926-2BP(222)
858デフォルトの名無しさん:2007/05/23(水) 18:28:31
>>856
ありがとうございます
859デフォルトの名無しさん:2007/05/23(水) 19:04:40
問題被ってるやつはいい加減学習しろよ…一度や二度じゃないだろ
860デフォルトの名無しさん:2007/05/23(水) 19:15:35 BE:29115353-2BP(222)
学習するような奴はハナから丸投げなんかしません。
861デフォルトの名無しさん:2007/05/23(水) 19:23:42
まあそりゃそうだ
862デフォルトの名無しさん:2007/05/23(水) 20:39:13
>>743

ありがとうございます!
>>734
です。
文字の頻度は多分「a: □回, b: □回…」というように表示させる感じだと思った
んですけど、それだったらどうなりますか??
説明不足スミマセン。
あと、テストデータは一行に複数の単語が書いてあるような?普通の英文の書かれた*.txtです!
お願いします!!
863デフォルトの名無しさん:2007/05/23(水) 21:58:10
[1] 授業単元: プログラミング演習
[2] 問題文:
16ビットの値を2進数で2つ入力し乗算の結果を出力する。
[3] 環境
 [3.1] OS:VineLinux 4.1
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:5月24日12:00

知恵をお貸し下さい
864デフォルトの名無しさん:2007/05/23(水) 21:58:49
[1] 授業単元: プログラミング演習
[2] 問題文:長いのでうpしたファイルに入れました。ドス窓上にグラフを描く問題です。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4036.zip

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:C
[4] 期限:5月末日まで

よろしくおねがいします
865デフォルトの名無しさん:2007/05/23(水) 21:58:51
>>849さん
ありがとうございます。
866デフォルトの名無しさん:2007/05/23(水) 23:19:46
[1] 授業単元: プログラミングIII
[2] 問題文(含コード&リンク):
ICPC 2002年 金沢大会 国内予選 D
What is the Number in my Mind ?
ttp://www.acm-japan.org/past-icpc/domestic2002/D.htm
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年05月28日まで
[5] その他の制限:特にありません

この問題の答え、または詳しい解説を行っているサイト等への誘導をしていただけると助かります。
それではよろしくお願いします。
867デフォルトの名無しさん:2007/05/23(水) 23:23:11
に・・・日本語でおk・・・orz
868デフォルトの名無しさん:2007/05/23(水) 23:26:23
見なかったことにしよ・・・
869デフォルトの名無しさん:2007/05/23(水) 23:27:37
1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4037.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:Cのみ
[4] 期限: 5月24日までです。よろしくお願いします。
[5] その他の制限:関数 ポインタ 制御文 配列まで習っています。 よろしくお願いします。
870デフォルトの名無しさん:2007/05/23(水) 23:29:11
問題文が短くても本文に書かないのは流行?別に構わないけど
871デフォルトの名無しさん:2007/05/23(水) 23:29:16
872デフォルトの名無しさん:2007/05/23(水) 23:42:23
>>869
戦わなきゃいけないのか・・・?

#include<stdio.h>
void swap(char *a, char *b){ char c = *a; *a = *b; *b = c; }
void sort_ch(char *s){
int i, j, min;
for(i = 0; *(s+i+1); ++i){
min = i;
for(j = i+1; *(s+j); ++j) if(*(s+min) > *(s+j)) min = j;
swap(s+i, s+min);
}
}
int main(){
char buf[256], *s;
printf("Input string  : ");
fgets(buf, sizeof(buf)/sizeof(*buf), stdin);
for(s = buf; *s; ++s) if(*s=='\n') *s='\0';
sort_ch(buf);
printf("Sorted string : %s\n",buf);
return 0;
}
投げ槍ってことで。
873デフォルトの名無しさん:2007/05/23(水) 23:44:07
>>869
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int cmp(const char *c1, const char *c2);
void void_sortch(char *str);

int main(void){
char str[256];
printf("Input String :"); scanf("%255s", str);
void_sortch(str);
printf("Sorted string :%s\n", str);
return 0;
}

int cmp(const char *c1, const char *c2){return *c1-*c2;}
void void_sortch(char *str){
int len;
len = strlen(str);
qsort(str, len, sizeof(char), (int(*)(const void*, const void*))cmp);
str[len +1] = '\0';
}
874デフォルトの名無しさん:2007/05/23(水) 23:45:50
これって次スレ行ったら放置されてる質問はなかったことになるの?
875デフォルトの名無しさん:2007/05/23(水) 23:47:23
>>874
回答者の気分次第
876デフォルトの名無しさん:2007/05/23(水) 23:54:53
>>869
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void void_sortch(char*battle_address){
        qsort(battle_address,strlen(battle_address),1,(void*)strcmp);
}
int main(void){
        char buf[256];buf[0]='\0';
        printf("Input  string : ");
        scanf("%255[^\n]",buf);
        void_sortch(buf);
        printf("Output string : %s\n",buf);
        return 0;
}
877デフォルトの名無しさん:2007/05/23(水) 23:55:57
>>874
前スレの質問は気づかれにくいから流れやすいだろうね。
誰かがプログラムし始めてれば次スレで回答してもらえるだろうけど。
誰がどれをやってるかわからないから放置かどうかも判断しづらい。
やり始める時にその人が一言書き込めばいいんだろうけど。
878デフォルトの名無しさん:2007/05/23(水) 23:56:02
>>866の問題について補則
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4039.txt
最低限必要だと思われる部分をつたないながら訳してみましたのでご参照ください。
また何か問題がある場合は伝えていただけると幸いです。

>>871
わざわざ教えていただきありがとうございます。
問題自体はこれで問題ないと思うのですが、4桁までの制限があるのと、
アルゴリズムが難解なので提出期限までに理解できるか自信がないのが難点です。
879デフォルトの名無しさん:2007/05/24(木) 00:03:24
>>878
んーそしたら「ヒットアンドブロー C言語」とか「マスターマインド C言語」で
ぐぐるしかないなあ。

でも自分で解まで見つけるソースはなかなかないみたいだぞ。4桁制限も
大抵あるし。どうしたもんかな。
880デフォルトの名無しさん:2007/05/24(木) 00:03:44
>>878
ちょっとexciteかけて読んでみた。
えーと、入出力フォーマットの仕様は置いておいて、和訳してくれた分に補足。

恐らく、桁数は4桁〜10桁。
最初の入力
4 4
は、答えは4桁で、4つのヒントで解く
5 2
は、答えは5桁で、2つのヒントで解く

数値は人が考えて、かつヒントは人が入力する。

与えられた桁数とヒントから、答えの数値が出るならば数値を出力。
答えを出すのが不可能な場合は「No.」を出力する。

こういうことかな。
881デフォルトの名無しさん:2007/05/24(木) 00:16:07
>>880
捕捉ありがとうございます。
概ねその流れで間違いありません。

>>879
自分も探してはいるんですがやはりなかなか難しいものがあるようですね。
桁数制限は解を求めるアルゴリズムがわかれば何とかできると思うんですが。
882デフォルトの名無しさん:2007/05/24(木) 00:18:36
>>863
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4040.zip
仕様が確定されていないので符号ありと無しの両方を出力することにした
883デフォルトの名無しさん:2007/05/24(木) 00:23:19
[1] 授業単元:コンピュータプログラミング
[2] 問題文(含コード&リンク):
123456789
 12345678
  1234567
   123456
    12345
     1234
      123
       12
        1
2重ループを使って表示させよ。
[3] 環境
 [3.1] OS: windows
 [3.2] borland
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: 特になし

お願いします
884デフォルトの名無しさん:2007/05/24(木) 00:29:52
>>883
#include<stdio.h>
int main(){
int i,j;
for(i=0; i<9; ++i){
for(j=1; j<=9; ++j) if(j<=i) putchar(' '); else printf("%d", j-i);
putchar('\n');
}
return 0;
}
885デフォルトの名無しさん:2007/05/24(木) 00:45:27
>>884
ありがとうございました
886デフォルトの名無しさん:2007/05/24(木) 01:19:27
>>881
桁数入力時点で、考えられる数字の組み合わせ全て生成してリストに保存
数字が入力された時点で、数字とリストのデータ全て比較⇒HITとBLOWの結果にならないものを削除
で、入力終了時点に一つだけ残ってればそれが答え、ってことにならないかね?

ちなみに、ググって見たけどこの問題自体の解法が何処にも乗ってなかった罠
887 ◆w94oZ/iDNg :2007/05/24(木) 01:28:30
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4044.txt
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 5/28
[5] その他の制限: 特になしです

よろしくお願いします
888デフォルトの名無しさん:2007/05/24(木) 01:55:43
[1] 授業にあらず
[2] 問題文(含コード&リンク):

PPM画像の色のデータをR、G、Bの1次元配列に読み込みました。
この読み込んだデータをいじくって新たに任意の角度だけ回転処理を行った画像を作りたいと考えています。
しかし、1次元配列に読み込んでいる故、直交座標軸上(x、yの二軸)での回転の計算式をそのまま使用できず困っています。
なんとか読み込んだデータ、出力するデータは1次元のままで配列のインデックスをいじって回転させる方法はありませんでしょうか?

回転のアルゴリズムは下記のwebサイトを参考にしました。
ttp://homepage2.nifty.com/tsugu/sotuken/rotation/

よろしくお願いします。

[3] 環境
 [3.1] VineLinux4.1
 [3.2] gcc 3.3.6
 [3.3] C
[4] 2007年5月24日
[5] その他の制限:得になし
889デフォルトの名無しさん:2007/05/24(木) 02:17:47
/と%を使えばいいじゃない
890デフォルトの名無しさん:2007/05/24(木) 02:25:23
>>881
とりあえず総当たり.遅い
がんばれば素因数分解か連立方程式あたりに写せるのかな
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4045.c

>>888
一次元配列を
char seq[HEIGHT*WIDTH];
とすると,
char *map[HEIGHT];
for (i=0; i<HEIGHT; i++) {
 map[i] = &seq[i*WIDTH];
}
とすることで擬似的な二次元配列map[y][x]を被せて操作できる(たぶん)
ポインタと配列についてある程度理解してるならこの方法がやりやすいと思う

それとスレ違い
891253:2007/05/24(木) 02:27:21
>>888
制限なしなら、単純に2次元配列にmemcpyしたらいかんのか?
1次元配列→2次元配列にmemcpy
2次元配列を回転
2次元配列を1次元配列にmemcpy

まぁ>>889で2次元の座標を1次元配列のindexに変換するのも楽だし。

どっちの方が良いかはソース見てみんと分からん
892デフォルトの名無しさん:2007/05/24(木) 05:43:44
>>866
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4048.c

例に出てた
6 5
605743 0 4
593026 2 2
792456 1 2
143052 1 3
093614 3 3

で 493601 という答えが出てしまったんだが、
例の答えって合ってる?
893デフォルトの名無しさん:2007/05/24(木) 07:01:56
>>892 流石に間違ってたらどこかで何か書かれてると思う。
>In contrast, the following hint-set is not sufficient to guess the number.
>Answers for last two hint-sets should be NO.
意訳:解答が一意に定まらない場合(と解があり得ない場合)はNOと出力せよ

の条件に引っかかったのでは?つまり493601以外の解がある、と思われる。
894デフォルトの名無しさん:2007/05/24(木) 10:02:15
>>866
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4049.c
総当たり+枝刈り。十分早いと思う。
895888:2007/05/24(木) 10:41:08
>>890-891
おかげさまで何とかなりました
どうもです。
896気まぐれアナスイ:2007/05/24(木) 11:20:45
>>894『link.』
   {?#differ:line 3,2,1 line 143,144,145#?}
    ζ
     !(+Φ_Φ)つ"  ζ
    +⊂. + 〆∂   {質}
    "〆∂∂      {問}
   〆〆
  .:"
【何の為のに使用しているのか教えてください】
897デフォルトの名無しさん:2007/05/24(木) 11:36:55 BE:93168386-2BP(222)
>>869
>戦闘アドレス

まずギニュー特戦隊を呼んでスカウターを持って来させろ。
898気まぐれアナスイ:2007/05/24(木) 11:46:53
     ζ
     !(+Φ_£)つ"  ζ
    +⊂. + 〆∂
    "〆∂∂
   〆〆
  .:"

+++++++++++++
+    }  +
+   }   +
+ }    +
+++++++++++++
899気まぐれアナスイ:2007/05/24(木) 12:01:06
   {漸くか。}
    ζ
     !(+Φ_£)つ"  ζ
    +⊂. + 〆∂
    "〆∂∂
   〆〆
  .:"

//
+++++++++++++
+    }      +
+   }       +
+ }         +
+++++++++++++
900気まぐれアナスイ:2007/05/24(木) 12:17:08
   {失礼。}
    ζ
     !(+-_Φ)つ"  ζ
    +⊂. + 〆∂ 
    "〆∂∂
   〆〆
  .:"
【引用>>983
>In contrast, the following hint-set is not sufficient to guess the number.
>Answers for last two hint-sets should be NO.
意訳:解答が一意に定まらない場合(と解があり得ない場合)はNOと出力せよ

の条件に引っかかったのでは?つまり493601以外の解がある、と思われる。
901デフォルトの名無しさん:2007/05/24(木) 12:23:32
↑これ何なの?最近チラホラ見かけるんだが
902気まぐれアナスイ:2007/05/24(木) 13:04:22
   {新しいscript.です。}
    ζ
     !(+Φ_Φ)つ"  ζ
    +⊂. + 〆∂
    "〆∂∂
   〆〆
  .:"
903デフォルトの名無しさん:2007/05/24(木) 13:08:22
ふーん
904デフォルトの名無しさん:2007/05/24(木) 13:10:10
スクリプトの意味間違ごうとるで?
905気まぐれアナスイ:2007/05/24(木) 13:22:18
>>904
!(Φ_Φ+){失礼。}
釣りです。深く考えないで下さい。
906866:2007/05/24(木) 15:58:38
>>890
>>892
>>894
こんなにたくさんの回答をいただけ恐縮です。
本当にありがとうございました
907気まぐれアナスイ:2007/05/24(木) 17:01:03
>>800【訂正】
!(Φ_Φ+){失礼。}
>>『893』が『983』に。
908デフォルトの名無しさん:2007/05/24(木) 17:55:33
[1] 授業単元: 機械学習論
[2] 問題文
クラス1、クラス2の2種類の属性をもつサンプルを含むデータセット
において、クラス1のサンプルの個数がc1、クラス2のサンプルの個
数がc2であるものとする。このデータセットから1つのサンプルを取
り出してそのクラスを観察する際、得られる平均情報量を計算する関数
を作成してください。関数の形は次のようにしてください
double info(int c1,int c2)
なお、動作をチェックするためのmain文と実行結果も添えて提出してく
ださい。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年05月30日まで
[5] その他の制限:特にありません

すいません、よろしくお願いします。
909デフォルトの名無しさん:2007/05/24(木) 18:16:25 BE:34938263-2BP(222)
>>908

#include<stdio.h>
#include<math.h>
double info(int c1,int c2){double d1,d2;
d1=(double)c1/(double)(c1+c2);d2=(double)c2/(double)(c1+c2);
return (-d1*log2(d1)-d2*log2(d2));}
int main(void){int c1=1200,c2=680;
printf("c1=%i\nc2=%i\nentropy=%f\n",c1,c2,info(c1,c2));return 0;}
910デフォルトの名無しさん:2007/05/24(木) 20:16:01
>>518 お願いします
911デフォルトの名無しさん:2007/05/24(木) 20:18:51
>>910
わかった、とりあえず多少時間が掛かるんで明日まで待て。
912デフォルトの名無しさん:2007/05/24(木) 20:18:53
>>910
>>788では不満?
913デフォルトの名無しさん:2007/05/24(木) 20:39:52
OS が Windows だし VC だし C:++ だし、、
ShellExecute でソリティアを起動しちまえ
914デフォルトの名無しさん:2007/05/24(木) 20:53:23
>>913
その発想は無かったwwwwwwwww
915デフォルトの名無しさん:2007/05/24(木) 20:56:46
だとしたら反復文はどこで使おうか
916デフォルトの名無しさん:2007/05/24(木) 20:58:08
>>788はもっと評価されるべき
917デフォルトの名無しさん:2007/05/24(木) 21:00:28
たしかに。
918デフォルトの名無しさん:2007/05/24(木) 21:03:34
>>915
じゃこれで。
while(ShellExecute(hwnd,"open","sol.exe",NULL,NULL,SW_SHOWNORMAL));
919912=788:2007/05/24(木) 21:13:27
>>910
別に責めてるわけじゃないので念のため。
不満ならそう言ってくれ。直せることなら直すし、そうでなければ
誰かが別のを作ってくれるかも試練。

>>916
なんでだよw
920デフォルトの名無しさん:2007/05/24(木) 21:19:26
>>788
C++じゃない(Cでも問題ないが強いて突っ込むならここか?)
921デフォルトの名無しさん:2007/05/24(木) 21:27:08
っつーか、スピードって言うくらいだから、スピードが重要じゃね?
clock()でも使って、経過時間に応じてパンパン進めなきゃ
922デフォルトの名無しさん:2007/05/24(木) 21:37:25
>>920
見逃してた。

>>921
clockはCPU時間を計るから入力待ちの間時計が止まることになる。
それに、秒単位の解像度でも以外と遊べることが分かった。
923デフォルトの名無しさん:2007/05/24(木) 21:44:16
#include <stdio.h>
#include <time.h>
int main(void) {
int x;
clock_t s,e;
s=clock();
printf("Input > "); // 整数を入力
scanf("%d",&x);
e=clock();
printf("%f s \n",(e-s)/CLOCKS_PER_SEC);
return 0;
}

これで入力を終える時間を変えると、入力受付、終了の経過時間が違うようだが・・・
924デフォルトの名無しさん:2007/05/24(木) 21:49:40
>>923
>printf("%f s \n",(e-s)/CLOCKS_PER_SEC);
printf("%f s \n",(double)(e-s)/CLOCKS_PER_SEC);
こうだよな?

ここを直すと、俺の環境(Linux, glibc2.5)では常に0.000000sが表示される。
925デフォルトの名無しさん:2007/05/24(木) 22:03:10
桁がわからない数値は%fじゃなくて%gで出力しろって。

それはさておき、標準入力待ちでCPU時間を消費しないのはUnix系OSで、消費するのはWindowsでしょ。
926デフォルトの名無しさん:2007/05/24(木) 22:09:19
>>924
そうそう、CLOCKS_PER_SECで割るclock_t型の変数は整数型なんで、キャストすべき。書き忘れすまそ。
927デフォルトの名無しさん:2007/05/24(木) 22:14:34
>>925
>標準入力待ちでCPU時間を消費しないのはUnix系OSで、消費するのはWindowsでしょ。
知らなかった。Windowsならclockが使えるのか。
928デフォルトの名無しさん:2007/05/24(木) 22:20:38
マジか?それじゃtimeの方で対処できっか?って、まぁ俺がババ抜き作っているから
後はそちらでどぞ。
929デフォルトの名無しさん:2007/05/24(木) 23:58:09
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4052.cpp
>>788をC++風にした。
「7r」のような入力を受けると配列の範囲外をアクセスするバグを修正。
USE_CLOCKを1に定義するとtimeの代わりにclockを使うように。
930デフォルトの名無しさん:2007/05/25(金) 00:24:04
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
パスカルの3角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 61               
for2重ループ,2次元配列,if文等を使って表示させよ。
[3] 環境
 [3.1] OS: windows
 [3.2] VC++6.0
 [3.3] 言語: C
[4] 期限: 5/26
[5] その他の制限: なし
右端に1揃えの直角三角形です
お願いします
931デフォルトの名無しさん:2007/05/25(金) 00:25:34
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
例題と使用するhtmlファイルです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4051.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4050.zip

HTMLファイルのタグを除去する('<'と'>'で囲まれた部分を除いて出力する)
プログラムを次のように書け。
(1)getlineを用いて行ごとに処理する。
(2)連続する空白文字(ブランク、タブ、改行文字)は1つだけにする(他は削除する)

ヒント:空白文字を続けないようにするには、直前の文字を覚えておくのが一つ
の方法である。
[3] 環境:
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc3.4
 [3.3] 言語: C
[4] 期限: なし
できれば簡単なコードにしていただけると嬉しいです。
932930:2007/05/25(金) 00:28:37
図をずらすの忘れていました。右下が直角になるように右端を1ぞろえでの直角三角形になるようにです。
お願いいたします。
933デフォルトの名無しさん:2007/05/25(金) 00:35:46
>>931
マルチうざいよ
934デフォルトの名無しさん:2007/05/25(金) 00:47:46
リリーフ > トーマス!
935デフォルトの名無しさん:2007/05/25(金) 03:35:57
担当の講師に尋ねても、原因がわからないと見捨てられました。
そこで、優秀な知識人の皆様にご教授願いたいと思い、投稿させていただきます。

「stack.h」
#include <stdio.h>
#include <stdlib.h>
#define stack_size 100
#define stack_el_type int

stack_el_type stack[stack_size];
int sp;

void init_stack()
{
sp = -1;
}

void push(stack_el_type x)
{
if(sp < stack_size - 1)
stack[sp++] = x;
else{
printf("stack full error.\n");
exit(1);
}
}


>>375へ続く
936デフォルトの名無しさん:2007/05/25(金) 03:38:03
>>935から

「stack.hの続き」
stack_el_type pop()
{
if (sp >= 0)
return stack[sp--];
else {
printf("stack empty error.\n");
exit(1);
}
}

「main.c」
#include "stack.h"
#include <stdio.h>

#define NUMBER 1
#define PLUS 2
#define MINUS 3
#define MULT 4
#define DIV 5
#define OTHER 6

int c, token, num;

937デフォルトの名無しさん:2007/05/25(金) 03:39:17
>>936から
「main.cの続き」
int gettoken()
{
while (c == ' ' || c == '\n' || c == '\t') c = getchar();
switch(c) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
num = c - '0';
for(;;) {
c = getchar();
if ('0' <= c && c <= '9') num = 10*num + c - '0';
else break;
}
return NUMBER;
case '+': c = getchar(); return PLUS;
case '-': c = getchar(); return MINUS;
case '*': c = getchar(); return MULT;
case '/': c = getchar(); return DIV;
case EOF: return EOF;
default: c = getchar(); return OTHER;
}
}

938デフォルトの名無しさん:2007/05/25(金) 03:39:55
>>518 
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4054.txt
ババ抜きで。しかし、もはやきんもぉ〜☆なソースで、改良の余地がありすぎ。
ちゃんとカードのやり取りができているか内部の状況がわかるように
コンピュータの手持ちカードも表示されるようにしてあるから、その部分は消しておくこと。
カードの並び替えはしてないっす。
2人プレイだとつまらないっすね・・・改良して3P以上にはしたいところだが俺はこれにて終了。
939デフォルトの名無しさん:2007/05/25(金) 03:40:01
「main.cの続き」

void main()
{
int x;
c = getchar();
token = gettoken();
init_stack();
while (token != EOF) {
switch(token) {
case NUMBER: push(num); break;
case PLUS: push(pop() + pop()); break;
case MINUS: x = pop(); push(pop() - x); break;
case MULT: push(pop() * pop()); break;
case DIV: x = pop();
if (x != 0) {push(pop() / x); break;}
else
{printf("zero divide error.\n"); exit(1);}
case OTHER: printf("illegal character.\n"); exit(1);
}
token = gettoken();
}
if (sp == 0) printf("% 10d\n",pop());
else {printf("expressionsyntax error.\n"); exit(1);}
}

長々と申し訳ありません。もしよろしければ、ご教授ください。
940-939:2007/05/25(金) 03:45:36
すいません。何が出来ないのか書いていませんでした。
このプログラムは、後置式の四則演算のプログラムなのですが、
数値入力後、EOFを入力しても、演算を開始してくれないのです。
例:
6 3 /^Z
と入力しても何も発生しないのです。よろしくお願いいたします。
941-939:2007/05/25(金) 03:48:32
ちなみにコンパイラは、ビジュアルスタジオと、ボーランドのもの二つで試しました。
942デフォルトの名無しさん:2007/05/25(金) 03:50:48
ここに長々と貼らずにうpロダを使えYO!っつか>>1のテンプレも使ってほしいところだが
たぶんスレ違い。宿題なんだろうけど。
943デフォルトの名無しさん:2007/05/25(金) 03:58:28
っつーか、ひでぇソースだな・・・コンパイルできひん。
んで、いきなり>>375!?もうわけわかめ。
944デフォルトの名無しさん:2007/05/25(金) 05:20:40
>>893 thx
>>892 は問題の解釈を間違ってた
やっぱり英語ができないといけないな
945デフォルトの名無しさん:2007/05/25(金) 05:20:54
他人にスレ違いのデバッグさせようなんてずうずうしくね?
946デフォルトの名無しさん:2007/05/25(金) 05:37:17
>>935
とりあえずpush(..)2行目の
stack[sp++] = x;

stack[++sp] = x;
だろうな

あとは知らね
947デフォルトの名無しさん:2007/05/25(金) 05:57:03
>>847 ですが…、レポート突き返されました。トホホ

[1] 授業単元:ネットワーク系プログラミング
[2] 問題文(含コード&リンク):

 [2.1] コマンドラインから指定したテキストを標準出力に表示するプログラム
 [2.2] コマンドラインで指定した任意のファイルの内容を16進数で標準出力にダンプするプログラム

 条件:Usage 処理、エラー処理 
    [2.2]は、1行に16バイト相当のデータ表示をし、各行は、先頭アドレス(何バイト目のデータか)を
    8桁の16進数で表示し、続いて各バイトのデータをスペースで区切りながら2桁の16進数表記で、さら
    に英数字記号等1バイトで表示可能なものはそのキャラクタを、表示できないものは「.」ピリオドで表示する。

[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc (ver不明)
 [3.3] 言語: C
[4] 期限: [2007年05月26日18:00まで]
[5] その他の制限: 無しだと思います。

朝までやってもダメでした…。
よろしくお願いします。
948デフォルトの名無しさん:2007/05/25(金) 06:00:28
なんで突き返されたの?
949デフォルトの名無しさん:2007/05/25(金) 06:08:50
>947
条件後出しされてもなー
950デフォルトの名無しさん:2007/05/25(金) 06:22:46
>>947はありきたりな問題だな。過去にそれに似た問題を俺が解いた記憶があるが・・・
まぁ、あとはそれをコマンドライン入力からファイルを指定する形に持ち込めば出来るが・・・
やっぱここは、俺が出るべきか?さっき妙ちくりんなババ抜きを2,3時間ほど考えて
きんもぉ〜☆なソースで提示したばかりでつw
951デフォルトの名無しさん:2007/05/25(金) 06:43:55
>>947
2.2だけでいいんだよな
#include <stdio.h>
#include <ctype.h>
#define BUF_SIZE 16
char letters[] = "0123456789ABCDEF";

int main(int argc, char *argv[]) {
    int i, len, num=0;
    unsigned char buf[BUF_SIZE];
    if (argc < 2) { printf("no file is given\n"); return; }
    FILE *in = fopen(argv[1], "rb");
    if (!in) { printf("failed in opening file\n"); return; }
    while (len = fread(buf, 1, BUF_SIZE, in)) {
        printf("%8X   ", num);
        num+=len;
        for (i=0; i<BUF_SIZE; i++) {
            if (i>=len) printf("--");
            else printf("%c%c", letters[buf[i]/16], letters[buf[i]%16]);
            printf("%s", i==BUF_SIZE-1? "   ":" ");
        }
        for (i=0; i<len; i++) putchar(isprint(buf[i])? buf[i]:'.');
        putchar('\n');
    }
}
952951:2007/05/25(金) 06:48:54
あー
returnがなにも返してない
一応修正しといて
953デフォルトの名無しさん:2007/05/25(金) 06:58:01
>>930
# include <stdio.h>
#define N 7
void swap(int *a, int *b){
  int c;
  c=*a;*a=*b;*b=c;
}
int main(void){
  int value[N][N]={{0}}, width[N], i, j;
  char tmp[20];
  // パスカルの三角形を計算する(左詰)
  for(i=0;i<N;i++){
    value[i][0]=1;
    for(j=1;j<=i;j++) value[i][j]=value[i-1][j-1]+value[i-1][j];
  }
  // パスカルの三角形を右詰にする
  for(i=0;i<N;i++)
    for(j=0;j<N/2;j++) swap(&value[i][j], &value[i][N-1-j]);
  // それぞれの項の表示に必要な幅を計算する
  for(i=0;i<N;i++) width[i]=sprintf(tmp, "%d", value[N-1][i]);
  // 表示
  for(i=0;i<N;i++){
    for(j=0;j<N;j++){
      if(value[i][j]!=0) printf(" %*d", width[j], value[i][j]);
      else printf(" %*s", width[j], "");
    }
    printf("\n");
  }
  return 0;
}
954デフォルトの名無しさん:2007/05/25(金) 07:06:03
955デフォルトの名無しさん:2007/05/25(金) 07:19:01
>>910

>>929
>>938
ありがとうございました!
956次スレテンプレ:2007/05/25(金) 08:29:48
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

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

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 87代目
http://pc11.2ch.net/test/read.cgi/tech/1179025919/
957デフォルトの名無しさん:2007/05/25(金) 08:34:42
そろそろ誰か、ありきたりなパターンな課題をまとめてくれYO!
言いだしっぺの法則はなしな。
958デフォルトの名無しさん:2007/05/25(金) 08:37:14
以前誰かがwiki作ったんじゃなかったっけか?
959デフォルトの名無しさん:2007/05/25(金) 08:38:40
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
以下のような括弧付き中記記法の数式を入力とし,次のようなプログラムを作成し,実行例を
示せ.
(((3 ∗ 2) − (4 ∗ (5 − 1))) ∗ (6 ∗ 8))
1. 後置記法(逆ポーランド記法,例は以下) を出力するプログラム.ただし,入力となる数字は一桁としてよい.
32 ∗ 451−∗−68 ∗ ∗
2. 計算結果を出力するプログラム.ただし,入力となる数字は一桁としてよい.
3. 2 の計算結果を出力するプログラムを拡張せよ.例えば入力の数字の桁数を増やす,前置記法も出力する,冗長なかっこがなくても計算できるようにするetc...

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007/05/26
[5] その他の制限: ポーランドまで
960デフォルトの名無しさん:2007/05/25(金) 08:40:37
>>958 性帝トーマス氏がウィッキーさんだったか忘れたがサイトを持っていたかと。
961デフォルトの名無しさん:2007/05/25(金) 08:44:26
>>1 のテンプレに…
962デフォルトの名無しさん:2007/05/25(金) 08:44:29
963デフォルトの名無しさん:2007/05/25(金) 08:53:55
そこはやめとけ
964デフォルトの名無しさん:2007/05/25(金) 08:58:18
>>957
>>958
すまん、一応ごく稀に更新はしているが、
あまり真剣にまとめてない・・・もっと努力する
965デフォルトの名無しさん:2007/05/25(金) 08:59:01
ファイルのダンプ松本追加しといて
966デフォルトの名無しさん:2007/05/25(金) 09:01:28
wikiなんだからできれば自分で追加して欲しい
967デフォルトの名無しさん:2007/05/25(金) 09:03:31
ウィッキーさんの編集はちと俺みたいな日本語の不自由な奴には向いていない orz
かといって英語が得意なわけでもない。けど、ソースをそのまま載せるのは簡単でそ?
968デフォルトの名無しさん:2007/05/25(金) 09:21:15
簡単だから自分で追加しろって話じゃないの?
969デフォルトの名無しさん:2007/05/25(金) 09:33:24
>>931
getline()は例題と同じもので。
#include <stdio.h>
#include <ctype.h>
int main(void)
{
  char line[0x2000];
  int i, len, state;
  enum { NONE = 0, IN_TAG = 1, IN_BLANK = 2 };
  while ((len = getline(line, sizeof line)) > 0) {
    for (i = 0; i < len; ++i) {
      unsigned char c = (unsigned char)line[i];
      if (state == IN_TAG) {
        if (c == '>') state = NONE;
      } else if (c == '<') {
        state = IN_TAG;
      } else if (isspace(c)) {
        if (state != IN_BLANK) putchar(c);
        state = IN_BLANK;
      } else {
        state = NONE;
        putchar(c);
      }
    }
  }
  return 0;
}
970デフォルトの名無しさん:2007/05/25(金) 10:52:19
>>967
wikiはsandboxとか適当な凍結されてないページを「編集」して、
その結果とレイアウト後のページを見比べれば、
大体何やれば表示できるか解る
あと大抵は文法説明のページが存在する

日本語不自由でもこの板に居る以上なんか言語使えるんだろ?
だったら問題ねーよw
971デフォルトの名無しさん:2007/05/25(金) 10:56:28
ちゅんごくごで朝鮮してにdか?
972908:2007/05/25(金) 12:23:38
>>909
お速い解答ありがとうございますm(_ _)m
973デフォルトの名無しさん:2007/05/25(金) 12:44:29
>>953
大変ありがたいんですが、swapを使わないで右詰にする方法はありますでしょうか?
974デフォルトの名無しさん:2007/05/25(金) 13:17:47
あります。自分で左側に空けるべき空白の個数を計算すればよろし。
975デフォルトの名無しさん:2007/05/25(金) 14:13:34
次スレ立てるよ。
976デフォルトの名無しさん:2007/05/25(金) 14:18:05
次スレ
C/C++の宿題を片付けます 88代目
ttp://pc11.2ch.net/test/read.cgi/tech/1180070116/
977デフォルトの名無しさん:2007/05/25(金) 17:13:01
>>976
次スレ立て乙
978デフォルトの名無しさん:2007/05/25(金) 18:49:47
>>974
理解できました。ありがとうございました
979和田っちあっちゃん:2007/05/25(金) 20:03:54
[1] 授業単元:コンピュータ基礎
[2] 問題文(含コード&リンク):
<条件>
・ビリヤード台がおいてある
・台の左下端の座標は(0,0)、右上端の座標は(2,1)とする
・位置(x0、y0)に手玉
・手玉の初速度(v0x,v0y)
  ・手玉の位置、初速度はscanfをつかって入力する
<問題>
・手玉はどこに衝突するか?
  ・衝突位置の座標を表示する
  ・ポケットにおちることは考えなくてもよい
  ・手玉の大きさ、摩擦等は考えない
  ・20回のバンクを考慮して21カ所解答
[3] 環境
C言語で
[4] 期限: [2007年6月1日まで]
[5] その他の制限: if,while,for構文まで

おねがいします。。
980デフォルトの名無しさん:2007/05/25(金) 20:42:26
>>979
マルチは良くない。
981デフォルトの名無しさん:2007/05/25(金) 20:43:17
マルチ死ねカス
982デフォルトの名無しさん:2007/05/25(金) 20:48:53
はわわ、死ねなんていくないです
983デフォルトの名無しさん:2007/05/25(金) 21:33:17
由真が一番だから、黙ってろ、この古典!
984デフォルトの名無しさん:2007/05/25(金) 22:22:19
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4060.txt
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月27日
[5] その他の制限: なし

よろしくお願いします。
985デフォルトの名無しさん:2007/05/25(金) 22:29:09
>>984
>そこでdata1〜6までのファイルを一度に読み込んで一括で結果を表示するものにしたいのです。
微妙に方向が間違ってる

今のmainを単なる「一つのファイルを読み込んで結果を得る関数」にして、
それを呼びだす上位の関数を作成し、これをmainにすればよい
全てのファイルについて、呼出と結果取得を行い、
この結果を表示すれば、「全ファイルを一度に読む」なんてしなくても、
現状の流用で解決可能だ
986デフォルトの名無しさん:2007/05/25(金) 23:13:43
>>979
完全弾性衝突?
987デフォルトの名無しさん:2007/05/26(土) 01:11:40
>>985
無事に解決しました。ありがとうございました。
988デフォルトの名無しさん:2007/05/26(土) 10:56:56
>>947はまだ提出してないのか?またつき返されたのか?
989デフォルトの名無しさん:2007/05/26(土) 11:53:19
まだ解答貰ってない奴居るか?ただし期限過ぎたものは除く。
スレが終る前に、未解決問題さがしてやろうと思ったけど
探すのマンドクセ〜
990デフォルトの名無しさん:2007/05/26(土) 12:30:19
未解決のを拾ってみた。
>>16 >>711 >>844 >>887 >>959 >>979
991デフォルトの名無しさん:2007/05/26(土) 12:33:50
>>990
>>887は次スレで解決してるみたいだな
992デフォルトの名無しさん:2007/05/26(土) 12:42:03
844は直後に解決してるじゃねーか
993デフォルトの名無しさん:2007/05/26(土) 13:05:26
>>711
#include<stdio.h>
double f_internal(int a, int b, int c, double x, int is_init){
    static int sa, sb, sc; // a, b, c を外部変数にするべきかな?
    if(is_init){sa=a;sb=b;sc=c;}
    return sa*x*x+sb*x+sc;
}
void f_init(int a, int b, int c){f_internal(a, b, c, 0, 1);}
double f(double x){return f_internal(0, 0, 0, x, 0);}
int main(void){
    int a, b, c;
    double x1, x2, xx, xmin, xmax, ymin, ymax;
    printf("\nInput value of a, b, c : ");
    scanf("%d %d %d", &a, &b, &c);
    printf("\nInput value of x1, x2 : ");
    scanf("%lf %lf", &x1, &x2);
    if(x1>x2){xx=x1;x1=x2;x2=xx;}
    f_init(a, b, c);
    xx=(a!=0)?(double)-b/(2*a):x1; // y'=2*a*x+b -> x=-b/(2*a) の時,極値をとる
    if(xx<x1) xx=x1;
    if(xx>x2) xx=x2;
    xmax=xmin=x1;
    ymax=ymin=f(x1);
    if(ymax<f(xx)){ymax=f(xx);xmax=xx;}
    if(ymin>f(xx)){ymin=f(xx);xmin=xx;}
    if(ymax<f(x2)){ymax=f(x2);xmax=x2;}
    if(ymin>f(x2)){ymin=f(x2);xmin=x2;}
    printf("maximum : x=%g y=%g\n", xmax, ymax);
    printf("minimum : x=%g y=%g\n", xmin, ymin);
    return 0;
}
994デフォルトの名無しさん:2007/05/26(土) 16:27:34
>>16
もうダメポ、cygwinがご機嫌斜めだし、難しくて頭が爆発しそう。
乗算合同法のパラメタとか適当、未完成だが勿体無いので上げとく
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4068.c

>>990
Thx
995tomcat:2007/05/26(土) 17:00:47
下記の関数は、ある条件下において不明瞭な値を返す場合がある。
*それはどの様な条件なのか????????


int func_A(int x, int a[], unsigned int c, unsigned int d)
{
unsigned int m;

while (c < d) {
m = (c + d) >> 1;
if (a[m] >= x) d = m;
else c = m + 1;
}
if (a[c] == x) return c;
return 0;
}
996デフォルトの名無しさん:2007/05/26(土) 17:40:16
>>16
問題の意味を取り違えてるかも知れないが一応うp
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4070.c
997デフォルトの名無しさん:2007/05/26(土) 17:54:01
>>995
何を不明瞭な値というのかが分からないんだが…

「二分探索がうまくいかないよー」というのであれば
検索元のデータがソート済みで無いか
引数のcまたはdが配列の範囲を超えてるとか
そういうこと?
998デフォルトの名無しさん:2007/05/26(土) 17:59:57
>>995
c==0 で x が見つからなかった時
0 を返すから見つかったのかどうか分からないってこと?
999デフォルトの名無しさん:2007/05/26(土) 20:04:27
次スレ

C/C++の宿題を片付けます 88代目
http://pc11.2ch.net/test/read.cgi/tech/1180070116/
1000デフォルトの名無しさん:2007/05/26(土) 21:04:18
千!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。