08/09/22 17:57:52
1] 授業単元: C言語
[2] 問題文:auto関数とstatic関数の違いが分かるプログラムを作成しなさい、ただしfor文を使用する
[3] 環境
[3.1] OS:Win
[3.2] 任意
[3.3] 言語: C
[4] 期限: 2008年9月25日13:00まで
できればプログラムは短くコンパイルして結果が長くならないようなものでお願いします
787:デフォルトの名無しさん
08/09/22 18:05:58
変数じゃねーのか?
788:786
08/09/22 18:40:59
ごめん
関数じゃなくて変数でした^^;
789:デフォルトの名無しさん
08/09/22 18:48:57
>>786
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
for (i = 0; i < 10; i++) {
int j = 0;
static int k = 0;
printf("j = %d, k = %d\n", j, k);
j++; k++;
}
return 0;
}
こんなんでいいか?
790:デフォルトの名無しさん
08/09/22 18:50:12
>>786
#include <stdio.h>
void Count()
{
auto int a = 0;
static int s = 0;
printf("a = %d, s = %d\n", a++, s++);
}
int main()
{
int i;
for(i = 0; i < 10; i++)
Count();
return 0;
}
791:デフォルトの名無しさん
08/09/22 19:19:29
>>789>>790
あり
やっぱりC勉強するんだったら家に環境整えたほうがいいのかな
792:デフォルトの名無しさん
08/09/22 19:45:42
言わずとも揃えるべき
793:デフォルトの名無しさん
08/09/22 19:53:22
>>791
sshとかで学校につなげてプログラミングするとか手段はあるぞ。
794:デフォルトの名無しさん
08/09/23 00:01:13
[1] 授業単元: ディジタル信号処理
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows vista
[3.2] コンパイラ名: Microsoft Visual Studio 2005
[3.3] 言語:C
[4] 期限: 9月24日
よろしくお願いします
795:デフォルトの名無しさん
08/09/23 01:25:27
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):
ファイルを読み込んで読み込んだファイルの
コメントが関数内で閉じられているかチェックするツールを作る
例
#include <stdio.h>
int main(void)
{
int a = 0;
printf("aは%dです",a);
/*コメント
return 0;
}
/*プログラム終わり*/
↑こうなっていた場合に「/*コメント」と書かれている部分の行を指摘する
/**/が関数内で閉じられているかのチェック
実行はコマンドプロンプト
出力はprintf
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C
[4] 期限: 9/26
[5] その他の制限: 制限は特にありません。
[6]備考:fopenした後からの処理でいいので教えてもらえると幸いです。
796:デフォルトの名無しさん
08/09/23 01:48:26
[1] 授業単元: 情報
[2] 問題文:商品の値段と支払額を入力し、お釣りの貨幣の種類/枚数を表示。
例) 2800円の商品に3000円支払い
-> \10000:0枚 \5000:0枚 \1000:0枚 \500:0枚 \100:2枚 \50:0枚 \10:0枚 \5:0枚 \1:0枚
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: ?
[3.3] 言語: C
[4] 期限: 9/26(金)
[5] その他の制限:if、printf、scanf、四則演算+-*/のみ習いました。シンプルな回答がベストです。
宜しくお願い致します。
797:デフォルトの名無しさん
08/09/23 03:15:03
>>796
#include <stdio.h>
int kinds_of_money[] = { 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1, };
int num_of_money[sizeof kinds_of_money / sizeof kinds_of_money[0]] = { 0 };
int main()
{
int bill = 0;
int payment = 0;
int change = 0;
int i = 0;
puts( "請求額は?" );
scanf( " %d", &bill );
puts( "支払額は?" );
scanf( " %d", &payment );
if ( bill > payment ) {
puts( "足りんわwwww" );
return 1;
}
for ( i = 0, change = payment - bill; change > 0; i++ ) {
num_of_money[i] = change / kinds_of_money[i];
change = change % kinds_of_money[i];
}
for ( i = 0; i < sizeof kinds_of_money / sizeof kinds_of_money[0]; i++ ) {
printf( "\\%d:%d枚 ", kinds_of_money[i], num_of_money[i] );
}
return 0;
}
798:デフォルトの名無しさん
08/09/23 03:53:24
>>795
URLリンク(kansai2channeler.hp.infoseek.co.jp)
エラー処理省きまくった。
799:798
08/09/23 03:57:54
>>795
URLリンク(kansai2channeler.hp.infoseek.co.jp)
>>798は無視で。
800:798
08/09/23 04:02:30
>>795
もうぐだぐた。
>>799を訂正。
stack[count++] = line;
→
if ( ( count == 0 ) || ( stack[count - 1] != line ) ) {
stack[count++] = line;
}
801:デフォルトの名無しさん
08/09/23 08:04:34
[1]C文解釈中級
[2]次の文章を行単位に並べ替えて、コンパイルが通るようにして、この文章を実行した時の処理仕様
を100字以内にまとめなさい。コンソールで実際にコンパイルして実行してみた結果も添えてメールしなさい。
idx = strlen(label);
#include <string.h>
p = strchr(label, *src);
if(p) count[p - label]++;
for( ; *src != '¥0'; src++){
p = strchr(buf, '¥n');
*dst = '¥0';
void alphabetsort(char *dst, const char *src)
for(i = 0; i < 256; i++) while(count[i]-- > 0){ *dst = label[i]; dst++; }
if(p) *p = '¥0';
int count[256] = {0}, idx, i;
return 0;
char buf[100], dst[100], *p;
alphabetsort(dst, buf);
int main(void)
{
}
#include <stdio.h>
fgets(buf, sizeof(buf), stdin);
char *p, label[256] = " aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
else{ label[idx] = *src; count[idx] = 1; idx++; }
printf("%s¥n", dst);
{
}
}
[3]1.Linux 2.GCC 3.C言語
[4] 2008/09/30 15:00までにメール
まったくわかりません。よろしくです
802:デフォルトの名無しさん
08/09/23 09:40:04
>>801
#include <stdio.h>
#include <string.h>
void alphabetsort(char *dst, const char *src)
{
int count[256] = {0}, idx, i;
char *p, label[256] = " aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
idx = strlen(label);
for( ; *src != '\0'; src++){
p = strchr(label, *src);
if(p) count[p - label]++;
else{ label[idx] = *src; count[idx] = 1; idx++; }
}
for(i = 0; i < 256; i++) while(count[i]-- > 0){ *dst = label[i]; dst++; }
*dst = '\0';
}
int main(void)
{
char buf[100], dst[100], *p;
fgets(buf, sizeof(buf), stdin);
p = strchr(buf, '\n');
if(p) *p = '\0';
alphabetsort(dst, buf);
printf("%s\n", dst);
return 0;
}
803:デフォルトの名無しさん
08/09/23 15:20:03
[1] 授業単元: if文がテーマです
[2] 問題文:アラビア数字を入力→ローマ数字に変換して表示
〔ex.〕5→V 111→CXI 1000→M
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: ?
[3.3] 言語: C
[4] 期限: 9/25(木)
[5] その他の制限:if、printf、scanf、+-*/%のみで簡潔に作成
804:デフォルトの名無しさん
08/09/23 16:10:26
>>803
4はIV、IIIIどっち(減算則も考慮するのか)
805:デフォルトの名無しさん
08/09/23 16:20:17
>>803
#include <stdio.h>
void func(int n, char I, char V, char X)
{
if (n == 1) printf("%c", I);
if (n == 2) printf("%c%c", I, I);
if (n == 3) printf("%c%c%c", I, I, I);
if (n == 4) printf("%c%c", I, V);
if (n == 5) printf("%c", V);
if (n == 6) printf("%c%c", V, I);
if (n == 7) printf("%c%c%c", V, I, I);
if (n == 8) printf("%c%c%c%c", V, I, I, I);
if (n == 9) printf("%c%c", I, X);
}
int main()
{
int tho, han, dec, mon, x;
printf("%s", "数字を入力してください\n");
scanf("%d", &x);
tho = x / 1000;
han = x % 1000 / 100;
dec = x % 100 / 10;
mon = x % 10;
func(tho, 'M', '*', '+');
func(han, 'C', 'D', 'M');
func(dec, 'X', 'L', 'C');
func(mon, 'I', 'V', 'X');
return 0;
}
806:デフォルトの名無しさん
08/09/23 18:47:34
>>803 IVでもIIIIでもどちらでも構いません。
>>804 早速の対応有難うこざいます。
void funcなどは習っていないため、出来ればvoid main()で始まる形に
していただけると有り難いのですが…。よろしくお願いします。
807:デフォルトの名無しさん
08/09/23 18:58:27
>>806
>if、printf、scanf、+-*/%のみで簡潔に作成
forやwhileもだめなんだよね
808:デフォルトの名無しさん
08/09/23 19:33:32
>>806
とりあえず関数にまとめてた部分を展開しておいたよ
URLリンク(kansai2channeler.hp.infoseek.co.jp)
809:デフォルトの名無しさん
08/09/23 19:34:58
もはや %c の意味がほとんどないなw
810:デフォルトの名無しさん
08/09/23 22:53:42
[1]プログラミング実習
[2](1)単純洗濯法を用いて人口の多い県から順にソートせよ
(2)バブルソートを用いて人口密度の大きい県から順にソートせよ
北海道 83461 5692
青森 9606 1482
東京 2186 11772
愛知 5150 6868
大阪 1892 8797
[3] windows/dev-c++4.9.9.2/cのみ
[4] 9月中
[5] 配列・if・while・for・プロトタイプ関数まで既習
811:デフォルトの名無しさん
08/09/23 22:55:56
用語がwww
812:デフォルトの名無しさん
08/09/23 22:56:38
>>810
そのデータの取り込み方は自由なの?
ソースに埋め込んじゃっておk?
標準入力にすべき?
813:デフォルトの名無しさん
08/09/23 23:10:02
バブルで洗濯?
814:デフォルトの名無しさん
08/09/23 23:12:00
洗濯→選択ですね すみません
標準入力でお願いします
815:デフォルトの名無しさん
08/09/23 23:27:52
県じゃないのがある…という突っ込みはナシ?
816:795
08/09/24 01:52:00
>>800
考えてもらいありがとうございます。
しかし、そのプログラムだと
#include <stdio.h>
int main(void)
{
int a = 0;
printf("aは%dです",a);
/*コメント1
/*コメント2*/
/*コメント3
return 0;
}
/*プログラム終わり*/
となったときに「/*コメント1」の行も検出してしまう
と思ったのですが、平気でしょうか?
わざわざ考えてもらったのに
文句が多くてすみません。
817:デフォルトの名無しさん
08/09/24 02:05:03
[1] C
[2] CSVファイルを構造体へ全て格納後、別ファイルへ出力せよ。
(CSVファイルフォーマットは任意とし、行数は可変とする)
[3] WIN/gcc/C
[4] 2008/09/26
CSV読み込み、出力は出来たのですが……
CSVの中身を一度全て格納しなければならず、そこで困っております。
構造体の配列を定義して、足りなくなったらreallocして行けばいいのしょうか?
818:デフォルトの名無しさん
08/09/24 02:16:40
>>817
読み込みができてるならそのサイズでmallocすればいいじゃないか
819:デフォルトの名無しさん
08/09/24 02:28:36
>>818
なんと言いますか、C++などのArrayみたいなことをしたいのです。
構造体の配列にCSVファイルを全部保存したいのですが、
ファイル行数が可変のために、行数に応じて構造体の配列数を増やして行く方法しかないのかなと疑問に思っております。
ファイルが大きいとreallocするときに時間がかかりそうなので……
820:デフォルトの名無しさん
08/09/24 02:35:32
>>819
Cで可変長配列的なことしたいなら、malloc/reallocするしかないよ。
今回の件なら、最初に一度ファイル全体を空読みして、行数だけ数えてから行数分mallocして、
2度目のファイル読みで格納ってすれば、reallocの無駄は省ける。
けど、代わりにファイル2度読みのコストがかかるから、どちらのコストをとるかだね。
821:デフォルトの名無しさん
08/09/24 02:41:49
100Kずつ確保
822:デフォルトの名無しさん
08/09/24 02:42:45
配列が連結していないといけない訳でもあるか?
823:デフォルトの名無しさん
08/09/24 02:47:52
配列で無きゃだめなの?リストを使う問題かと思ったんだが
824:デフォルトの名無しさん
08/09/24 02:54:00
>>820
やはり可変だと、メモリ確保し続けるか、必要分を確認してとかではないと
辛いみたいですね、ありがとうございます。
>>821
無駄なメモリ領域を出来るだけ省きたいのです
>>822
特にはないですが、ポインタの配列にするほうがいいでしょうか?
>>823
Cにリストってありましたっけ?
825:デフォルトの名無しさん
08/09/24 02:55:32
無駄を省きたいのなら10Kずつ確保でいいだろう。
たらなくなったら10Kずつ増やしていく
826:デフォルトの名無しさん
08/09/24 03:00:49
>>825
10Kに満たないと勿体なくないですか?
気分の問題だと思うのですが、ピッタリにしたいんです。
>>823
リストを調べました、リスト構造のことで間違いないでしょうか?
難しそうですが、これならやりたいことが出来そうです。
ありがとうございました。
>レスしてくださった方々へ
malloc/reallocなら簡単そうですが、やはりコスト的な問題があるようなので、
難しそうですがリスト構造を勉強して、それで対応してみます。
深夜にもかかわらず、助けていただいてありがとうございました。
827:デフォルトの名無しさん
08/09/24 03:02:49
まあ、他言語の可変長配列だって結局malloc/reallocと同じことしてるわけだから
reallocをそんなに嫌わないであげてください><
828:デフォルトの名無しさん
08/09/24 03:04:37
>>826
そしたら、あらかじめファイルサイズを求めておいて、バイナリでそのまま読み込めよ
ぴったりだぞ
829:デフォルトの名無しさん
08/09/24 03:05:42
>>826
これは実装依存だが、malloc(13);とかやったとしても実際の確保領域は16バイトだったりするよ。
嫌なら要素一回ずつreallocするしかないけど、パフォーマンスが落ちるし、無駄が出るよ。
830:デフォルトの名無しさん
08/09/24 03:07:09
ファイルの行数を先に取得して一括でmallocすればいいことじゃないのか?
可変にこだわる意味がわからないのだが
ところでC++のArrayってなんだ?
std::vectorのことならかなり豪快にメモリ確保してるぞ
831:デフォルトの名無しさん
08/09/24 03:13:06
こういう時って、やっぱりみんなテラバイト超のファイルもプロセスできるように作ってる?
832:デフォルトの名無しさん
08/09/24 03:17:55
>>827
行数増えた場合大変なことになりそうなのです
>>828
ファイルそのままだと使いづらいじゃないですか……
って確かに、そう考えると10Kつづ確保して行ってもいい気がしてきました。
>>829
mallocは指定した分だけ確保だと思ってました。
実際は(多少?)誤差があるんですね、勉強になりました。
>>830
それのことです。
なるほど……便利だと思ってたのですが、裏では結構あくどいことしてるんですね。
833:デフォルトの名無しさん
08/09/24 10:42:40
>>832
あくどいっつーかきっちり確保するよりおおむね効率がいいからだな
誤解するなよ
834:デフォルトの名無しさん
08/09/24 14:07:01
[1] 授業単元:映像処理
[2] 問題文(含コード&リンク):太陽系プログラム
planet.cのプログラムを以下のように発展させよ。
①オブジェクトの色を変更する
②オブジェクトをソリッドにする
③他のオブジェクト形状を使用する。(例:惑星を立方体にする)
④隠面処理を行う。
⑤惑星に(その惑星の周囲をまわる)衛星をつける。
⑥2個のパーツを組み合わせたオブジェクトを作る。(例:土星)
⑦色、光沢などの表面属性を時間経過で変化するようにする。(例:時間とともに色が自動的に変化する)
⑧複数の軌道面がある。
///planet.c///
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語:C
[4] 期限:9月28日
丸投げです。よろしくお願いいたします。
835:デフォルトの名無しさん
08/09/24 16:19:49
>>834
4までやった
URLリンク(kansai2channeler.hp.infoseek.co.jp)
836:デフォルトの名無しさん
08/09/24 17:14:47
ついでにmallocも効率やら扱いやすさのためであって意図的。
誤差というべきではない。
837:834
08/09/24 17:28:33
>>835
提出の条件が⑧まで完成したプログラムですので、
できれば⑧まで作って頂けませんでしょうか。
せっかく作って貰ったのに、すいません・・・
838:デフォルトの名無しさん
08/09/24 17:38:09
学校でOpenGLなんてやるのか
へーおじさんびっくりだわ
839:デフォルトの名無しさん
08/09/24 17:59:17
どうせGLUTだろ
840:835
08/09/24 18:26:06
>>837
暇で面白そうだからやっただけ
気が向いたら残りもやるかもしれないがあてにしないほうがいい
841:798
08/09/24 22:42:13
>>816
そういうのを検出するプログラムじゃないの?
/*コメント1の行の検出はNGで
/*コメント3の行の検出のみやれってこと?
その場合、検出しなきゃいけない行の基準がわからないんだけど?
>>795で示している例でも/*コメントから始まって、プログラム終わり*/で
コメントはちゃんと閉じているよね?
842:デフォルトの名無しさん
08/09/24 23:19:18
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
「t[5]に5つの整数が格納されている。これを昇順にソートするプログラムを示せ。
ソートのアルゴリズムは何でもよい事とする。」
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:CPad for Borland C++ Compiler
[3.3] 言語:C++
[4] 期限:9/25まで
これをバブルソートで作る場合のプログラムをお願いしますm(_ _)m
843:デフォルトの名無しさん
08/09/24 23:30:07
>>842
#include<stdio.h>
int main()
{
int t[] = {2, 40, 2, 554, -4}, i, j, tmp;
int n = sizeof(t) / sizeof(int);
fputs("前 : ", stdout);
for (i = 0; i < n; ++i) {
printf("%d ", t[i]);
}
putchar('\n');
for (i = 0; i < n - 1; i++){
for (j = n - 1; j > i; j--) {
if (t[j] < t[j - 1]) {
tmp = t[j];
t[j] = t[j-1];
t[j-1] = tmp;
}
}
}
fputs("後 : ", stdout);
for (i = 0; i < n; ++i) {
printf("%d ", t[i]);
}
putchar('\n');
return 0;
}
こんなんでいかが?
844:デフォルトの名無しさん
08/09/24 23:54:04
>>843
ありがとうございます><
845:795
08/09/25 23:03:51
>>841
ごめんなさい。
説明不足だったかもしれません。
一応、
>>795の最初のほうに書いてあるように
「コメントが関数内で閉じられているかチェックする」
ようにしないといけないんです。
それがどうしても難しくてわからないんです。
本当に質問する立場でえらそうにしてごめんなさい。
どうやったら、関数内でコメントが閉じられているか判断できるでしょうか?
846:デフォルトの名無しさん
08/09/26 09:47:53
どっちにしろ>>798では
printf("/*\n");
とか出てきたら破綻する。
847:デフォルトの名無しさん
08/09/26 15:06:54
[1] 授業単元:課題自由研究
[2] 問題文(含コード&リンク):ポーカーのプログラム製作
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
[3.3] 言語:C++
[4] 期限:特になし
[5] その他の制限:C++であること
ない脳みそで考えたのですが、JOKERの効果と役の設定がわかりません。
今の所製作してあるプログラムの駄目出しもお願いします。
848:デフォルトの名無しさん
08/09/26 15:11:00
// 乱数の初期値のセット
srand((unsigned) time(NULL));
// 0~9 までの乱数を 1回生成
for (i=0; i<5; i++) {
n = rand() % 4; // 10は0~9の要素数 マーク判定用
m = rand() % 11; // カードの数値判定用
//マーク判断、数値の判定
if(n==0){sprintf(str, "H %d " , m);
TextOut(hdc,50,20*i,str,(int)strlen(str));
a=m;}
else if(n==1){ sprintf(str, "D %d " , m);
TextOut(hdc,50,20*i,str,(int)strlen(str));
b=m;}
else if(n==2){ sprintf(str, "C %d " , m);
TextOut(hdc,50,20*i,str,(int)strlen(str));
c=m;}
else if(n==3){ sprintf(str, "S %d " , m);
TextOut(hdc,50,20*i,str,(int)strlen(str));
d=m;}
if(m==0){//機能してないかも・・・・・・
sprintf(str, "JOKER");
TextOut(hdc,50,20*i,str,(int)strlen(str));
}}
z1=a;z2=b;z3=c;z4=d;
849:デフォルトの名無しさん
08/09/26 15:11:52
//役の判定 a b c d z
if(a==b || a==c || a==d || b==c || b==d || c==d || a==z1 || d==z2 || c==z3 || d==z4){
sprintf(str, "ワンペア!!");
TextOut(hdc,50,100,str,(int)strlen(str));}
else if(a==b==c || b==c==d || c==d==a || z1==a==b || z2==a==b || z2==b==c ||z3==b==c || z3==c==d || z4==d==a || z1==d==a){
sprintf(str, "スリーカード!!");
TextOut(hdc,50,100,str,(int)strlen(str));}
else {sprintf(str, "ノーペア!!");
TextOut(hdc,50,100,str,(int)strlen(str));}
850:デフォルトの名無しさん
08/09/26 15:27:42
GUI?
851:834
08/09/26 15:31:08
>>834
どなたかお願いできませんでしょうか。
852:デフォルトの名無しさん
08/09/26 15:50:51
>>849
これはひどい
853:デフォルトの名無しさん
08/09/26 16:53:37
[1] 授業単元:C
[2] 問題文(含コード&リンク):
数値が文字列として開業で区切られたデータファイル(例:音楽をA/D変換により取り込んだデータ)
の処理を考える。データファイルがデータのみである場合に、その
データファイルに含まれるデータ総数を数えるプログラムを作成しなさい。
[3] 環境
[3.1] OS:fedora
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:9月末
よろしくお願いします
854:デフォルトの名無しさん
08/09/26 17:01:31
>>853
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE * fp;
int x, n = 0;
fp = fopen("data.txt", "r");
while (fscanf(fp, "%d", &x) == 1) n++;
printf("%d個です\n", n);
fclose(fp);
return 0;
}
855:デフォルトの名無しさん
08/09/26 17:06:40
>>854
ありがとうございます!
856:853
08/09/26 17:29:40
すいません、続けてですがこちらもお願いします。
[1] 授業単元:文字列の操作
[2] 問題文(含コード&リンク):
各人の氏名を、性と名にわけてキーボードからの入力で2つの変数に格納し
2つの文字列を連結することで、性と名の区切りに1つの空白を入れて
表示するプログラムを作成しなさい。
[3] 環境
[3.1] OS:fedora
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:9月末
857:デフォルトの名無しさん
08/09/26 17:37:25
>>856
#include <stdio.h>
int main()
{
char first[2000], family[2000], full[4000];
puts("姓を入力してください");
scanf("%1999s", family);
puts("名を入力してください");
scanf("%1999s", first);
sprintf(full, "%s %s", family, first);
puts(full);
return 0;
}
858:853
08/09/26 17:42:29
>>857
ありがとうございます!助かりました!
859:795
08/09/27 02:32:05
すみません。
誰か
>>795
のソースを作ってくれないでしょうか。
ここ数日、考えても本当にわからなくて。
860:デフォルトの名無しさん
08/09/27 03:17:27
>>859
どういうものを作ればいいか分からない
もう少し分かりやすく説明してくれないかな
861:デフォルトの名無しさん
08/09/27 03:25:21
>>859
もうちょいパターンを洗い出して整理してはどうか。まずそこが出来てないように思う。
/* OK パターン */
/*
/* OK パターン */
hoge("/* OKパターン */");
int main(void)
{
/* NG パターン
return 0;
}
/*
こんなもん??
862:デフォルトの名無しさん
08/09/27 04:02:28
結構厄介だな。
普通コンパイラなんかだと最初にコメントを除去するからな。
コメントそのものとコードとの位置関係をチェックするのか…。
863:デフォルトの名無しさん
08/09/27 04:16:05
真面目にやろうと思えばコンパイラのパーサに近いものを作らなきゃならないし
宿題レベルの問題じゃないと思うけどね。
>>859
コメントの中に"}"があれば関数が閉じてない可能性は高くなるけれど
以下のプログラムを入力した場合どんな出力になってほしい?
void main(void)
/* {が関数の始まり */
{
/* }まで関数の処理を記述する (}を含むけれど正しいコメント) */
/* 関数の返り値 (コメント閉じ忘れで本来検出したい部分)
return 0;
}
/* プログラムの終了 */
864:デフォルトの名無しさん
08/09/27 04:31:28
「関数」にはこだわらないほうがいいんじゃないかな。
関数と構造体と配列の初期化と単なるブロックの { } を区別するのはそれこそパーサーになってしまう。
とりあえずは全部ひっくるめて { } とコメントだけに注目して作ったほうがいいと思う。
865:デフォルトの名無しさん
08/09/27 04:39:48
}と};で区別すればなんとかなりそうな
C言語で関数をブロックでくくる事ってできたっけ?
866:デフォルトの名無しさん
08/09/27 12:09:45
整数型配列 a[5]を宣言する。
配列aに適当な整数を代入する。
配列から最大値を求め画面表示する。
#include<stdio.h>
main()
{
int a[5];
int maxdata;
int i;
a[0]=12;
a[1]=3;
a[2]=40;
a[3]=10;
a[4]=30;
maxdata=a[0];
for(i=1;i<5;i++)
{
if(?)
{
maxdata=a[i];
}
}
printf("最大値:%d",maxdata);
}
?の部分がわかりません。
お願いします。
867:デフォルトの名無しさん
08/09/27 12:20:07
a[i] > maxdata
868:デフォルトの名無しさん
08/09/27 12:22:37
>>867
ありがとうございました。
869:デフォルトの名無しさん
08/09/27 12:37:03
お礼のおっぱいはまだかね?
870:デフォルトの名無しさん
08/09/27 14:10:17
>>865
グローバルな領域に何も無い空文(;だけ)があっても
エラーにならないよ。
int main()
{
・・・
}; /* 関数の終わりと空文と解釈 */
871:デフォルトの名無しさん
08/09/27 17:33:32
【質問テンプレ】
[1] 授業単元:プログラミング言語演習Ⅱ
[2] 問題文(含コード&リンク): 住所録管理を行うプログラム。
データは「氏名」「住所」「電話番号」「メールアドレス」「グループ」を持つようにする。
データの登録、変更、削除、検索ができるようにする。
登録の際、「氏名」は必須とし、他の項目は空白でも良しとする。
検索は、「氏名」「住所」「グループ」で行えるようにする。
データは、テキストファイルに書き込み、次回実行する際、それを読み込むようにする。
[3] 環境
[3.1] OS:Fedora Core 6
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:9月中
[5] その他の制限:特に無し
872:795
08/09/27 19:14:40
>>860
そうですね。
>>861さんのいうように
/* OK パターン */
int main(void)
{
/*
/* OK パターン */
hoge("/* OKパターン */");
}
int main(void)
{
/* NG パターン
return 0;
}
/*
int main(void)
{
/* NG パターン
return 0;
}
*/
の5パターンで考えています。
本当に難しすぎますよね。
課題出した先生も難易度高すぎだと思いました。
873:デフォルトの名無しさん
08/09/27 19:31:26
>>859
つ {で+1 }で-1
874:デフォルトの名無しさん
08/09/27 19:33:12
パターンじゃなくてステートで考えた方がいい。
875:デフォルトの名無しさん
08/09/27 19:49:41
これはOK?
int main(void)
{
/*}
int hoge(void)
{
/* } */
return 0;
}
876:デフォルトの名無しさん
08/09/27 20:42:46
#define BIGIN {
#define END }
みたいにされてたり、
その後で#undef BIGINされてたりして、
で、それらが#ifdefやら#ifndefやらに囲まれてて、
その間にパズルみたいにコメントがはりめぐらされたりしてるどうしようもないコードも
面倒みなきゃいけないならプリプロセッサ部分も作らなきゃいけないから大変だな。
877:デフォルトの名無しさん
08/09/27 21:31:44
パターンもステートも使って考えると
対象ファイルを読みながら/**/で囲まれた部分を
検出したら囲まれた部分は出力せず
その直後の行まで別ファイルに書き出し、
その時点でそのファイルを子プロセスで
Cコンパイラにコンパイルさせ、エラーコー
ドがunexpected endof fileでなければ
コメントエラーであると判断して、
その行を出力する
でオK?
878:デフォルトの名無しさん
08/09/27 21:34:25
>Cコンパイラにコンパイルさせ、エラーコードが
そこを作る課題だろうが。
879:デフォルトの名無しさん
08/09/27 21:43:18
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):
ファイルを読み込んで読み込んだファイルが
C言語の文法に合致しているかチェックするツールを
作る。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C
[4] 期限: 本日中
[5] その他の制限: 制限は特にありません。
[6]備考:fopenした後からの処理でいいので教えてもらえると幸いです。
880:デフォルトの名無しさん
08/09/27 21:46:58
字句解析と構文解析をするプログラムか
難易度高いな
881:デフォルトの名無しさん
08/09/27 21:54:10
既存のツールを利用するという >>877 のアイデアはおもしろいと思うぞぬ
882:デフォルトの名無しさん
08/09/27 22:01:40
>>879を本日中っていうかあと2時間でバグなく動かせる奴ってすごいよな。
883:デフォルトの名無しさん
08/09/27 22:11:52
>>879
難易度高いぞそれ
つshellexec
884:デフォルトの名無しさん
08/09/27 22:15:27
>>876
プリプロセッサを展開させるならboost::waveがあるぞ
885:デフォルトの名無しさん
08/09/27 22:16:42
>>882
宿題の期限が土曜って
886:デフォルトの名無しさん
08/09/27 22:37:00
>>879
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
int i, ret_code;
char cmd[1024], *filename_src, *filename_tmp="hoge.tmp";
FILE *fp_tmp;
for(i=1;i<argc;i++)
{
filename_src=argv[i];
fp_tmp=freopen(filename_tmp, "w", stderr);
if(fp_tmp==NULL)
{
fprintf(stdout, "\nERROR: temporary file cannot open.\n");
exit(1);
}
sprintf(cmd, "gcc -c %s", filename_src);
ret_code=system(cmd);
freopen("con", "w", fp_tmp);
remove(filename_tmp);
if(ret_code) printf("\nInvalid source code. %s\n", filename_src);
}
return 0;
}
887:デフォルトの名無しさん
08/09/27 23:15:07
>>879
その問題は例えば「{}」の数があってるかだけ数えるとか
そんな条件ついてたりしないか?
じゃなきゃ無理だろ
888:デフォルトの名無しさん
08/09/28 01:01:38
>>871
最近作ったがコードが見つからない。
作る時間もないのでその時のことを。
構造体とキューを使うとすぐできた。
889:デフォルトの名無しさん
08/09/28 01:11:22
>>871のものです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
自力でここまでやってみましたが、うまく実行できません。
それに、このプログラムでは、「氏名」を必須、他の項目は空白で良しという条件が満たされてません。
何卒アドバイスのほうをよろしくお願いします。
890:デフォルトの名無しさん
08/09/28 01:51:53
氏名だけは入力長0だったら再入力させれば?
891:デフォルトの名無しさん
08/09/28 09:36:29
>>889
宿題ぐらいのレベルなら、入力部を
int c = 0;
while (c == 0){
printf("氏名 >> ");
fgets(data[n].name, N, stdin);
c = strlen(data[n].name);
data[n].name[c] = '\0'; //最後の改行をNULL文字にする
}
で十分でしょう。
892:デフォルトの名無しさん
08/09/28 10:18:51
>>891
たいした問題じゃないけどそれだとN-1文字以上読み込んだときに一文字減るね
893:893
08/09/28 10:46:03
[1] 授業単元:機械工学学生実験(デジタル信号処理)
[2] 問題文(含コード&リンク):
※長いのでこの書き込みの下に分けて書き込みします。すみません。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:不明
[3.3] 言語:C
[4] 期限: 明後日
[5] その他の制限: ないです。
[6]備考:C言語を習ったことがないです。C++を大学1年次に半年だけ授業でやりました。
今回の実験内容はTMS320C6713 DSKボードを使用して、マイク入力した音声を正弦波に変換し、
スピーカで出力するまでのプログラムの流れをPCを操作しながら学ぶというものでした。
上記の問題をパワーポイント2枚にまとめなければならないので、このプログラムの解説をお願いいたします。
特に/* main */以下をできる範囲でお願いいたします。
894:893
08/09/28 10:52:40
[2] 問題文(含コード&リンク):
以下のプログラム中の割り込み処理についてマイクからスピーカまでのデータの流れに沿って説明せよ。
/* Include files */
#include <csl.h>
#include <csl_mcbsp.h>
/* Declarations */
#define DRR 0x01900000 // McBSP1 receive address
#define DXR 0x01900004 // McBSP1 transmit address
// #define BUFF_SIZE = 256
/* Prototypes */
extern void dsk6713_init(void);
interrupt void voice_change(void);
/* References */
extern MCBSP_Handle hMcbspData;
/* Global Variables */
#pragma DATA_SECTION(buff1,"myData");
short buff1[256] ;
short buff0[256] ;
short I= 0x0000 ;
short y[3] = {0, 0x15AE, 0};
short a1 = 0x786F; /* 2*cosWT */
// short a1 = 0x7FFF; /* 2*cosWT */
// short a1 = 0x8000 ; /* 2*cosWT */
volatile short *drr = (volatile short *)DRR;
volatile short *dxr = (volatile short *)DXR;
895:893
08/09/28 10:54:25
/* main */
void main(void)
{
dsk6713_init();
MCBSP_write(hMcbspData, 0);
while(1){}
}
short amari( short i )
{
// short i ;
short j ;
//j = i/256 ;
j = i - (i/256)*256 ;
// j = i ;
return(j);
}
interrupt void voice_change(void)
{
// short tmpI ;
y[0] = ((int)a1*(int)y[1]>>14) - y[2];
y[2] = y[1];
y[1] = y[0];
*dxr = ((int)y[0] *(int)(*drr)) >> 14;
I = amari( ++I );
buff1[ I ] = *dxr ;
buff0[ I ] = y[0] ;
// buff1[ I ] = y[0] ;
}
見づらくてすみません。894-895が今回与えられたソースの全てです。
896:デフォルトの名無しさん
08/09/28 10:54:58
6713のコンパイラのlong intが32bitじゃなくてはまったのもいい思い出。
897:834
08/09/28 14:34:10
何度もすみません。
明日の昼12時まででしたら、提出遅れの形で提出できますので、
>>834 どうかお願いいたします。
配点大きな課題ですので、本当に困ってます…
よろしくお願いします。
898:デフォルトの名無しさん
08/09/28 14:37:02
罵声を浴びるの覚悟でOpenGLのスレとかで聞いた方がいいんじゃないの?
899:デフォルトの名無しさん
08/09/28 15:07:04
止めてやれよ、こういうの送り込むの
900:デフォルトの名無しさん
08/09/28 15:19:59
ところでOpenGLの本ぐらい読んだの?
901:デフォルトの名無しさん
08/09/28 15:55:21
>>897
よくわからんが、軌道計算とかもするの?
902:834
08/09/28 16:15:15
>>900
最近始めたので、まだ教員の配布資料しか手元にありません。
その資料にもOpenGLの特徴とか投影法?の仕組みしか載っていませんので、
プログラムについては完全にお手上げ状態です…
今夜にでも書店行って、買い足そうと思います。
>>901
軌道計算とは何でしょうか?
一応、明日までに教員の前で作成したプログラムを実行し、
⑧までの条件が満たされた動画であればOKという課題です。
適当な返事ですみません…
903:デフォルトの名無しさん
08/09/28 16:20:07
1から順に課題をクリアしていけば到達できるようになってるね。
904:デフォルトの名無しさん
08/09/28 16:35:05
>>902
少なくとも問題に軌道面という単語はあるのだが。
905:デフォルトの名無しさん
08/09/28 19:07:59
[1] 授業単元: cプログラミング基礎(一般的な入出力)
[2] 問題文(含コード&リンク): c言語で読み出しファイルからファイル位置と読みだすバイト数を指定し読み出
し、違う名前のファイルに書き出すプログラムを作成せよ。ただし読み出しファイル、読みだすデータ位置、読みだすバイト数
書き出すファイル名はDOS窓で指定できるようにすること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: c
[4] 期限: 2008年9月28日23:59まで
[5] その他の制限: 大学一年レベルの簡単でなるべく分かりやすいように書くこと。
906:デフォルトの名無しさん
08/09/28 19:30:46
>>905
大学1年レベルって結構高レベルな気がするんだけど
初めてC言語習いましたってレベルのことなのか?
907:デフォルトの名無しさん
08/09/28 19:34:34
大学1年で初めて習い始めたというレベルだそうです。
ちなみに当方は前期の講義をまったく覚えておらず何もできない状態です。
908:デフォルトの名無しさん
08/09/28 19:39:54
>>905
#include <stdio.h>
int main()
{
FILE *fpr, *fpw;
char filename_r[1000], filename_w[1000];
char data[30000];
int a, n;
puts("読み込むファイル名");
scanf("%s", filename_r);
puts("書き込むファイル名");
scanf("%s", filename_w);
puts("読み出す位置");
scanf("%d", &a);
puts("読み出すバイト数");
scanf("%d", &n);
fpr = fopen(filename_r, "rb");
fpw = fopen(filename_w, "wb");
fseek(fpr, a, SEEK_SET);
fread(data, 1, n, fpr);
fwrite(data, 1, n, fpw);
fclose(fpw);
fclose(fpr);
return 0;
}
909:デフォルトの名無しさん
08/09/28 19:53:39
ありがとうございます。早速ためしに動かしてみますね。
910:デフォルトの名無しさん
08/09/28 22:06:51
>>905
URLリンク(kansai2channeler.hp.infoseek.co.jp)
無駄に長いかも
911:834
08/09/28 22:35:36
>>904
確認しましたが⑦⑧は難しいので、
省いても良いそうです。減点ですけど…
④までは作って頂けましたので、残り⑤⑥お願いできませんでしょうか。
912:デフォルトの名無しさん
08/09/28 22:44:19
>>847
ルール合ってるか分からん、表示その他結構色々適当、C++じゃない、
といった感じなんで参考にもならんかもですが。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
913:デフォルトの名無しさん
08/09/28 23:20:47
>>910
こんな方法があったんですね。只今用語を調べながら
どうなっているか理解に努めています。ありがとうございました。
914:デフォルトの名無しさん
08/09/28 23:32:12
[1] 授業単元: 初級c++
[2] 演技のよくない数字4と9をはずして、1,2,3,5,6,7,8,10・・・・と数える「49抜き」があります。
この49抜きの数は10個の数字のうち4と9が無いので8進数と同じように考えることができます。
ここで、10進数の符号なし整数を渡してそれに対応する49抜きの数値を標準出力する関数void printfwo49(unsigned int n)
を以下のように空欄を埋め完成させなさい。
void printwo49(unsigned int n)
{
char buf[]="01235678";
if(空欄){ //nが8ならば上位の桁がある
printwo49( 空欄 );//上位の桁の処理を行う。
}
putchar(buf[n % 8]);
}
[3.1] OS:xp
[3.2] コンパイラ名とバージョン:vc6.0
[3.3] 言語: c++
長文申し訳ありません。
よろしくおねがいいたします。
915:デフォルトの名無しさん
08/09/28 23:35:20
>>914
n>8
n/8
916:デフォルトの名無しさん
08/09/29 00:21:15
n>=8
じゃないかな
917:デフォルトの名無しさん
08/09/29 00:31:21
>>834 7番 これじゃ手抜きすぎ?
glColor3d((double)year / 360.0, (double)day / 360.0, 1.0);
918:デフォルトの名無しさん
08/09/29 00:39:21
>>914
URLリンク(ziddy.japan.zdnet.com)
919:914
08/09/29 00:51:40
ありがとうございます
920:デフォルトの名無しさん
08/09/29 00:51:51
こんなんみつけた
URLリンク(pw137.cs.ie.u-ryukyu.ac.jp)
921:デフォルトの名無しさん
08/09/29 00:57:17
Borland c++のunsigned int 型は4バイトの大きさがあります。4バイトというと、
ちょうどIPv4でのIPアドレスのバイナリ表現と同じ大きさになります。そこで、
unsigned int型の引数を渡し、それをxxx.xxx.xxx.xxxという形式で標準出力に
出力する関数void printIPAddress(unsigned int address)を以下のように書きました。
空欄を埋める正しい答えを選択せよ。
void printIPAddress(unsigned int address)
{
printf("%d.%d.%d.%d",
(address & 空欄)>>24,
(address & 空欄)>>16,
(address & 空欄)>> 8,
(address & 空欄));
}
① 0x000000ff ② 0x0000ff00 ③ 0x00ff0000
④ 0xff000000 ⑤ 0xff00000000
どうかよろしくおねがいします
922:デフォルトの名無しさん
08/09/29 01:26:34
c++の問題です。よろしくお願いいたします。
ネットワークのルートアドレスとネットマスク、そしてチェックしたいIPアドレスを
渡して、チェックしたいIPアドレスがそのネットワークに含まれているかどうかを
チェックする関数int checkIPAddress(unsigned int root,unsigned int mask,unsigned
int address)を以下のように書いた。空欄をうめよ。
ただし、あるIPアドレスがネットワークに含まれているかどうかチェックするには、
ネットワークのルートアドレス(root)と、チェックしたいIPアドレス(address)の
ネットワークIDを比較してその値が同じであったら、そのネットワークに含まれていると
判定します。IPアドレス中のネットワーク部は、ネットマスクのビットパターンが1である部分と
考えます。IPアドレスからネットワークIPを取り出すには、IPアドレスをネットマスクの
ビットごとのANDを取り出します。詳細はインターネットの検索エンジンで「ネットマスク」
をキーワードに調べてください。
int checkIPAddress(unsigned int root,unsigned int mask,unsigned int address)
{
return(root 空欄① 空欄②)==(root 空欄③ 空欄④)
}
長文で申し訳ありません。よろしくおねがいします
923:デフォルトの名無しさん
08/09/29 02:05:40
>>834
URLリンク(kansai2channeler.hp.infoseek.co.jp)
とりあえず全部満たしたんじゃないかな
二個のオブジェクトで作ったのは、みかんっぽいなにか
924:デフォルトの名無しさん
08/09/29 02:19:26
>>921
④
③
②
①
925:デフォルトの名無しさん
08/09/29 02:26:32
>>922
>return(root 空欄① 空欄②)==(root 空欄③ 空欄④)
ここ問題あってる?
return(root 空欄① 空欄②)==(address 空欄③ 空欄④)
じゃない?
だとしたら
& mask & mask
926:922
08/09/29 02:30:48
>>925さま
925さまのおっしゃる通りに間違えていました
ただしくは
ネットワークのルートアドレスとネットマスク、そしてチェックしたいIPアドレスを
渡して、チェックしたいIPアドレスがそのネットワークに含まれているかどうかを
チェックする関数int checkIPAddress(unsigned int root,unsigned int mask,unsigned
int address)を以下のように書いた。空欄をうめよ。
ただし、あるIPアドレスがネットワークに含まれているかどうかチェックするには、
ネットワークのルートアドレス(root)と、チェックしたいIPアドレス(address)の
ネットワークIDを比較してその値が同じであったら、そのネットワークに含まれていると
判定します。IPアドレス中のネットワーク部は、ネットマスクのビットパターンが1である部分と
考えます。IPアドレスからネットワークIPを取り出すには、IPアドレスをネットマスクの
ビットごとのANDを取り出します。詳細はインターネットの検索エンジンで「ネットマスク」
をキーワードに調べてください。
int checkIPAddress(unsigned int root,unsigned int mask,unsigned int address)
{
return(root 空欄① 空欄②)==(address 空欄③ 空欄④)
}
でした
927:デフォルトの名無しさん
08/09/29 09:33:57
テキストファイルを読み込んで次の出力を得る。
(・・・)内の文字は、そのまま出力する。
ただし\に続く数字3文字は8進数として、バイナリ出力する。
<・・・>内の文字は、2桁ごとに16進数としてバイナリ出力する。
0からFに現れない文字は無視する。
928:デフォルトの名無しさん
08/09/29 17:14:36
[1] 授業単元: if文
[2] 問題文(含コード&リンク): 正の整数を入力すると、それをローマ数字で表示するプログラムを作りなさい。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio .Net 2003
[3.3] 言語: C
[4] 期限: 9月30日16:00まで
[5] その他の制限: ほとんど習ってません(Cとは?・int・printf・scanf・if・else←今ここ)
よろしくお願いします。
929:デフォルトの名無しさん
08/09/29 17:17:10
>>928
>>805
>>808
関数ならってないなら>>808でどうぞ
930:デフォルトの名無しさん
08/09/29 17:20:27
>>929
どうもありがとうございました。
931:834
08/09/29 17:57:31
>>923
条件の多い課題をありがとうございました。
配点が大きな課題だったので何とか提出でき、助かりました。
本当にありがとうございます。
932:デフォルトの名無しさん
08/09/29 21:59:29
[1] 授業単元:Cープログラミング
[2] 問題文:(含コード&リンク): 配列を用いて0~9の16個の数値を入力
し、入力した数値の個数を*で表示させるプログラムを作りなさい。
ただし、If文の使用はないものとし、関数はvoid型を使用しなさい。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio 2005
[3.3] 言語: C ++
[4] 期限: 10月1日16:00まで
[5] その他の制限:ポインタはまだ習ってないです。
条件が多いですが、よろしくお願いします。
933:デフォルトの名無しさん
08/09/29 22:04:45
ポインタならってないと関数で配列渡せない気がするんだけどどうしたらいい?
関数つかわなくてもいい?
934:デフォルトの名無しさん
08/09/29 22:06:31
配列を渡してるように見せかければいいじゃない
935:912
08/09/29 22:21:58
>>847
wiki見たら随分ルール間違ってた……
一応作り直してみたもののやっぱりルールに不安あり。
全然参考にならんかもですがまあ一応ってことで。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
936:デフォルトの名無しさん
08/09/29 23:23:37
>>933
ポインタはまだ習ってませんが、使用してもかまいません。
937:デフォルトの名無しさん
08/09/29 23:31:13
>>932
#include <stdio.h>
int main()
{
char s[16] = {0};
int i, j;
scanf("%16s", s);
for (i = 0; i < 16; ++i) {
printf("%c : ", s[i]);
for (j = 0; j < s[i] - '0'; ++j) {
putchar('*');
}
putchar('\n');
}
return 0;
}
いまいちよくわからんがこういうことでいいのかなぁ・・
938:デフォルトの名無しさん
08/09/29 23:34:22
>>937
s[16+1] じゃね?
939:デフォルトの名無しさん
08/09/29 23:37:50
>>938
scanf("%16s", s);
なのにか?
940:デフォルトの名無しさん
08/09/29 23:39:41
>>939
終端に \0 がはいる
941:デフォルトの名無しさん
08/09/29 23:45:21
>>940
ほんとだ、試したり調べたらそうだった
ごめんなさい
942:デフォルトの名無しさん
08/09/30 10:40:14
初心者です
cydwinで、argvをつかって テキストファイル名を
引数としてわたして、ファイルの読込とファイルへ
の書込みをするプログラムを作成しました。
作成したいもの
このプログラムを呼び出シェルの作成シェル実行時の
引数を読込と書込みのファイル名を指定する
実行内容、エラーなどすべてのログをログファイルに
残す。
以上ですおねがいします
期限 10月1日
943:デフォルトの名無しさん
08/09/30 11:39:09
○以下のプログラムを作成して下さい。
課題2.getsを使用し文字列(10字程度)をキーボードから入力する。
入力した文字列を前後逆転した文字列を画面表示する。
○表示画面イメージ
入力文字列 : abcde → ”入力文字列 : ”はprintf abcdeはgetsで入力
逆転文字列 : edcba →printfで画面表示
期限 今日中
944:デフォルトの名無しさん
08/09/30 11:41:03
>>942
>>1 の質問テンプレ読んで書き直してくれ
それと意味が分からない
a.out はすでに作成してあり、使い方は次のとおり
./a.out in.txt out.txt
で、イメージとしてはこんなんを作るのか?
stdout stderr の両方を処理しないといけないのと標準出力にも出すのかもしれないけど…
int main(void){
char fname_in[FILENAME_MAX], fname_out[FILENAME_MAX];
scanf("%s", fname_in);
scanf("%s", fname_out);
sprintf(cmd, "./a.out %s %s |& tee -a log.txt", fname_in, fname_out);
system(cmd);
return 0;
}
945:デフォルトの名無しさん
08/09/30 12:01:39
>>944
たぶんシェルスクリプトを書いて欲しいだけのように見える。
--hoge.sh--
#!/bin/sh
./a.out $@ >logfile 2>&1
946:デフォルトの名無しさん
08/09/30 12:03:42
[1] 授業単元:配列・ポインタ・文字列
[2] ○以下のプログラムを作成して下さい。
課題2.getsを使用し文字列(10字程度)をキーボードから入力する。
入力した文字列を前後逆転した文字列を画面表示する。
○表示画面イメージ
入力文字列 : abcde → ”入力文字列 : ”はprintf abcdeはgetsで入力
逆転文字列 : edcba →printfで画面表示
[3] 環境
[3.1] OS Windows
[3.2] コンパイラ名とバージョン: わかりません
[3.3] 言語: C
[4] 期限:今日中
[5] その他の制限:表示画面イメージを参照してください。
テンプレを使ってなかったので、書き直しました。
よろしくお願いします
947:デフォルトの名無しさん
08/09/30 13:27:37
>>946
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char buf[16];
int i;
printf("入力文字列:"); gets(buf);
i= strlen(buf);
printf("逆転文字列:");
while (i-- > 0) {
printf("%c", buf[i]);
}
printf("\n");
return 0;
}
948:デフォルトの名無しさん
08/09/30 15:12:17
>>921
いまさらだが、こういう場合ってバイトオーダー関係しないの?
949:デフォルトの名無しさん
08/09/30 15:13:43
>>948
その設問に関係あるとは思えないけど、どのへんが?
950:デフォルトの名無しさん
08/09/30 15:20:20
>>949
算術シフト演算はバイトオーダー関係ないけど、
例えば、addressが 192.168.0.1 を数値化したものだとして、address & 0x000000ff は
バイトオーダによって 192 または 1 になるんじゃないかなって思ったんだけど。
951:デフォルトの名無しさん
08/09/30 15:29:42
あ、ごめん。なんでもなかった。
& 0x000000ff が下位2バイト取ると勘違いしてた。
ぼけててほんとごめん。
952:デフォルトの名無しさん
08/09/30 15:35:36
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
1、武君が持っているお金の3倍と景子さんが持っているお金の5倍を加えると7500円
武の2倍と景子の7倍を加えると8850円である。それぞれいくら持っているか
2、sinxとxを加えると1になった。xはいくらか
上の2つの問題について解く方法を考えプログラムをくめ
上の問題だけしか解けない方法でも構わない
できれば1はfor文の2重ループとx,yをランダムに発生させて合わせるという2パターン
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 2008年10月3日まで
[5] その他の制限:
ネット上にある連立方程式のプログラム(?)をつかわずにやれとのことですが気にしないでいいです
変な問題なのですがどなたかお願いします
953:デフォルトの名無しさん
08/09/30 16:25:43
>>952
sinのも似たようなもんだよ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(){
int takeru, keiko, found;
found = 0;
for(keiko = 1;keiko < 7500/5; keiko++){
for(takeru = 1;takeru < 7500/3; takeru++){
if(((takeru*3+keiko*5) == 7500) && ((takeru*2+keiko*7) == 8850))
found = 1;
if(found != 0)break;
}
if(found != 0)break;
}
if(found != 0)printf("武=%d 景子=%d", takeru, keiko);
}
void main(){
int takeru, keiko, found;
srand(time(NULL));
found = 0;
while(found == 0){
keiko = rand() / 7500/5 + 1;
takeru = rand() / 7500/3 + 1;
if(((takeru*3+keiko*5) == 7500) && ((takeru*2+keiko*7) == 8850))
found = 1;
}
if(found != 0)printf("武=%d 景子=%d", takeru, keiko);
}
954:デフォルトの名無しさん
08/09/30 16:30:12
>>950
IPとして扱うならネットワークバイトオーダー(ビッグエンディアン)だろう
address & 0x000000ff は192になる
955:デフォルトの名無しさん
08/09/30 16:35:24
またバカが掻き回しにきたかw
956:801
08/09/30 16:43:44
>>802
コンパイルしてみた結果動くようです。
で、このプログラムはどういった動作をするものでしょうか?
結局よく分からなくて適当書いて提出しました。
とはいえ、取り敢えずどうもありがとうございました。
957:デフォルトの名無しさん
08/09/30 16:54:16
>>956
関数名見ただけで何してるかわかるけど
958:946
08/09/30 19:18:33
#include<stdio.h>
main()
{
char str[10];
gets(str);
printf("入力文字列:");
puts("str");
printf("逆転文字列:");
}
こんな感じかな?
全然わかんない・・・・
文字を逆転するのもどうしたらいいのかわからないし・・・・
誰か助けてください
959:946
08/09/30 19:21:26
puts(str)だった
960:946
08/09/30 19:32:07
>>947
習ってるのは
#include<stdio.h>
main()
みたいな感じで、main()をいじる方法はならってないです。
int main(~)じゃない方法で出来ないでしょうか?
後最後のreturn 0;というのもまだ習っていません。
>>958みたいな感じではこのプログラムは作れないんでしょうか?
連レス失礼しました。
961:デフォルトの名無しさん
08/09/30 19:37:28
>>960
#include <stdio.h>
#include <string.h>
main()
{
char buf[1600];
int i;
printf("入力文字列:"); gets(buf);
i= strlen(buf);
printf("逆転文字列:");
while (i-- > 0) {
printf("%c", buf[i]);
}
printf("\n");
}
説明するのもめんどくさいからこれで
962:デフォルトの名無しさん
08/09/30 19:39:56
>>937
>>932ですが、わかりにくかったみたいですみません。
例えば、キーボードから0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9
と、入力したとき、実行結果が
histo[0]=**
histo[1]=**
histo[2]=**
histo[3]=**
histo[4]=**
histo[5]=**
histo[6]=*
histo[7]=*
histo[8]=*
histo[9]=*
のように表示するプログラムをつくるという意味です(ヒストグラム)
ポインタは使用してもかまいません。必ず配列の受け渡しを行っていることが前提です。
どなたかお願いします。
963:デフォルトの名無しさん
08/09/30 20:12:11
int histo[10] = {0};
while(適当に) histo[input_value]++;
と、詰めて、
for (i=0; i<10; i++) {
while(histo[i] != 0) {
printf("*");
histo[i]--;
}
printf("\n");
}
という感じに出力すればよいのではないかな。
964:デフォルトの名無しさん
08/09/30 20:20:03
>>953さん
ありがとうございます。すごく助かりました
965:デフォルトの名無しさん
08/09/30 21:05:31
>>953
すいません下のランダムの方がうまくいかないのですが
966:デフォルトの名無しさん
08/09/30 21:35:57
>>965
どううまくいかないんだろう。
永久ループに見せかけていつかそのうち見つかるってアレじゃないのかな。
967:デフォルトの名無しさん
08/09/30 21:36:36
>>965
rand() / ~ じゃなくて rand() % (~) の間違いだと思う
968:デフォルトの名無しさん
08/09/30 21:42:38
できました。ありがとうございます
969: 株主【tech:0/6602=0(%)】 誰か次スレ立てて
08/09/30 21:47:24
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
【C 関数検索 man on WWW】 URLリンク(www.linux.or.jp)
【過去ログ検索】 URLリンク(chomework.sakura.ne.jp)
【wiki】 URLリンク(www23.atwiki.jp)
前スレ
C/C++の宿題を片付けます 115代目
スレリンク(tech板)
970:デフォルトの名無しさん
08/09/30 22:24:22
>>963
ありがとうございます。配列の受け渡しはどのようにすればよいのでしょうか。
971:デフォルトの名無しさん
08/09/30 22:34:48
>>970
何に渡すの?別にmainだけでいいのでは。
というか内部関数作って配列渡そうとするとポインタ使うことになっちゃうよ
諸々を検討して、ああ、void main ってことなんだなって理解してたのに。
972:971
08/09/30 22:36:19
と思ったら配列渡す前提となっていた。
どこを関数化するんですか?
973:デフォルトの名無しさん
08/09/30 23:06:32
>>972
入力した0~9までの個数を*で表示する部分を関数化です。
974:デフォルトの名無しさん
08/09/30 23:21:26
>>973
mainで
show_histogram(histo);
として、
void show_histogram(int *data) {
/* 出力処理 */
}
という関数を作ればよいのではないかな。
975:デフォルトの名無しさん
08/10/01 00:05:23
ポインタを習っていない段階でも
void xxxxx(int data[10]) {
/* 中身 */
}
は習った気がする。
976:デフォルトの名無しさん
08/10/01 00:11:27
>>974
void histogram(int *data){
int histo[10]={0};
int i;
for(i=0;i<10;i++){
while(histo[i]!=0){
printf("*");
histo[i]--;
}
printf("\n");
}
}
int main(void){
int j, a[16];
for(j=0;j<16;j++){
scanf("%d",&a[j]);
}
histogram(a);
return 0;
}
という感じにすればよいのでしょうか。
977:952
08/10/01 00:43:26
>>952の1番目の問題を解いてもらって2番目のsinx + x = 1 のほうの問題をやっていたのですがうまくいきませんでした
for文でまわしても結果がでてこないのとsinxのxはラジアンで扱ったほうがいいのかどうか(どっちでやってもうまくいかなかったんですが)わかりません
どなたかできる方いたら教えていただけないでしょうか?よろしくお願いします
978:デフォルトの名無しさん
08/10/01 00:45:22
>>977
double f(double x){
return sin(x)+x-1;
}
として、あとはニュートン法でも二分法でも
979:952
08/10/01 01:19:08
アドバイスありがとうございます。頭悪くて申し訳ないんですが以下のプログラムは何がいけないんでしょうか?全部おかしいですか?
#include <stdio.h>
#include<math.h>
double f(double x){
return sin(x)+x-1;
}
void main(void)
{
double x,z;
for(x=0;x<5;x++){
if(f(x)==0)z=1;
if(z!=0)printf("%d",x);
}
}
980:952
08/10/01 01:22:12
すいませんこっちでした
#include <stdio.h>
#include<math.h>
double f(double x){
return sin(x)+x-1;
}
void main(void)
{
double x,z;
z=0;
for(x=0;x<5;x++){
if(f(x)==0)z=1;
if(z!=0)
{printf("x=%d\n",x);
z=0;
}
}
}
981:デフォルトの名無しさん
08/10/01 01:30:50
>>952
#include <stdio.h>
#include <math.h>
int
main(void)
{
double x = 0.0;
for ( x = 1.0; 1.0E-8 < x; x -= 0.01 ) {
if ( (sin(x)+x-1.0) < 1.0E-8 ) {
printf("x == %f\n", x);
break;
}
}
return 0;
}
982:デフォルトの名無しさん
08/10/01 01:39:01
>>976
>>963 には入力データを配列に詰める処理と、表示処理を書いているんだけど
なぜ >>937 のエッセンスを微妙に混ぜてしまったの?
分からないままとりあえず組み合わせて
> という感じにすればよいのでしょうか。
と締めくくるのは、クマーAAを生むのに必要な技術であって、プログラムを組むには必要ないよ。
983:デフォルトの名無しさん
08/10/01 01:56:40
懐かしいネタがw
void show_histogram(int *data){
int i;
for(i=0;i<10;i++){
while(data[i]!=0){
printf("*");
data[i]--;
}
printf("\n");
}
}
int main(void){
int i, input_value, a[10] = {0};
for(i=0;i<16;i++){
scanf("%d",&input_value);
a[input_value]++;
}
show_histogram(a);
return 0;
}
こうですか!?わかりません!教えてください!
if禁止なので入力チェックは本当にわかりません><
984:デフォルトの名無しさん
08/10/01 07:29:23
次スレ立てました
C/C++の宿題を片付けます 116代目
スレリンク(tech板)
985:946
08/10/01 10:48:55
>>961
ありがとうございました。
986:デフォルトの名無しさん
08/10/01 13:51:59
[1] 授業単元: c++
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
・「年(西暦)」「月」を入力したら,その月のカレンダーを表示するプログラムを作成しなさい。ただし,下記の条件を満たすものとする。
【条件】
(1)カレンダークラスを作成し,main関数でカレンダークラスの実体を生成し,カレンダークラス内のメンバ関数(show関数)を呼び出してカレンダーを表示する。
(2)カレンダークラスはカプセル化されていること。
(3)カレンダー表示には,年,月および曜日,日を表示すること。
(4)上記以外については自由に作成してよい。
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: VS2008
[3.3] 言語:C++
[4] 期限: ([2008年10月5日まで]
987:986
08/10/01 13:56:34
もしよければ閏年の表示もお願いします。
988:デフォルトの名無しさん
08/10/01 13:56:54
>>986
>>715-719とかにあった気がする
989:デフォルトの名無しさん
08/10/01 14:39:25
[1] 授業単元: 数理科学C
[2] 問題文: 二分法を用いて√2の近似値を求めるプログラム
[3] 環境
[3.1] OS: Windows/
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2008年10月2日まで]
[5] その他の制限:特になし
990:デフォルトの名無しさん
08/10/01 15:10:20
>>984
乙!
>>989
#include<stdio.h>
#include<math.h>
double f(double x){
return x*x-2;
}
int main(void){
double a=0.0, b=2.0, x;
while(f(a)*f(b)<0.0){
x=(a+b)/2;
if(f(a)*f(x)<0) b=x;
else a=x;
printf("x=%f f(x)=%f\n", x, f(x));
if(fabs(f(x))<1e-7) break;
}
return 0;
}
>>980
これの関数 f(x) の中身を書き換えればおk
991:デフォルトの名無しさん
08/10/02 16:03:28
質問なのですが、プログラム中に別のプログラムを呼び出す場合は
データをコマンドライン上で受け渡しはできないのでしょうか?
それともtxtデータなどで外部出力したものを読み取るしかないのでしょうか。
992:デフォルトの名無しさん
08/10/02 16:11:49
>>991
LinuxでもWindowsでも引数つきでプログラム起動は出来るだろう
993:デフォルトの名無しさん
08/10/02 16:15:07
引数か標準入力に書き込むか
994:991
08/10/02 16:30:53
調べてみたら標準出力のパイプ処理でうけわたしできるみたいですね。
ありがとうございました。
995:デフォルトの名無しさん
08/10/02 20:05:42
埋めるぜ
996:デフォルトの名無しさん
08/10/02 20:06:28
次スレは >>984
997:デフォルトの名無しさん
08/10/02 20:10:55
オレにとって手ごろな宿題が無くなってきてるな
ストライクゾーンが狭いからしょうがないけど
998:デフォルトの名無しさん
08/10/02 20:23:24
1000取っちゃうぜ?
999:デフォルトの名無しさん
08/10/02 20:24:43
どうぞどうぞ
1000:デフォルトの名無しさん
08/10/02 20:26:11
では遠慮なく
1000ならオレ様勝手にレベルアップ
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。