1 :
デフォルトの名無しさん :
2005/12/01(木) 12:11:12 BE:324051757-
2 :
デフォルトの名無しさん :2005/12/01(木) 12:20:42
[1] 授業単元: [2] 問題文(含コード&リンク): gif画像一画素あたりのRGBそれぞれの平均の値を数値で取得するプログラムを書け。 [3] 環境 [3.1] OS: FreeBSD [3.3] C [4] 12月2日まで [5] とくになし 急いでいます。よろしくお願いします。
gifかよw 俺はスルー。
>>2 1画素毎にRGB成分の平均値を求めるの …… 10分
画像全体のRGB成分の平均値を求めるの …… 10分
gif 画像の展開ルーチンを0から組むの …… 2-3時間? 素人にはお勧めできない。
>>2 の問題文の日本語を理解するの …… measureless
>>2 画像ファイルを読み込んで、1画素ずつ取得するところまでが
gifだとどのライブラリを使うか、或いは自力で書くか、など厄介。
そこまで行けば、後は簡単だから自力でがんばれ。
#あーそうか、gifだからパレットカラーなのか。その点も要注意だな。
>>2 普通に読むと「それぞれの平均」ってとこから
gifアニメの各フレームのRGB値を時間軸方向で平均するということか
1画素ごとに3つの値がでるわけね
俺が出題者なら、GIFなんて使わずpgmやらppmでお茶を濁すな。 まちがいなく要素の平均を求める手間<GIFを扱う手間。 課題をまともにやってくる人間があっという間に減る。
>>6 あーそれ、フレーム間時間や、部分フレームまで考慮しろって?
かなり面倒だと思うのだがw
正直言おう、クソだと。 fscanf("%c %s", &c, &word); struct q { char *word; 単語を記憶する struct q *next; } while(1) { fscanf(.....); switch(c) { case 'D': .... case 'Q': exit(1); default: printf(stderr,"コマンド入力エラー\n"); } } どんだけ突っ込めばいいんだ?
Segmentation Fault 理由:メモリ確保がなされていない。 別の問題もあるが、あとは任せた。
例えば... fscanf("%c %s", &c, &word); printf(stderr,"コマンド入力エラー\n"); これなんなのさ…… orz わかった、釣りだな!!きっと釣りなんだよ!! 釣りに決まってるさ、あーはっはっはっは(涙)
14 :
デフォルトの名無しさん :2005/12/01(木) 17:26:12
キーボードから整数 x、y (x < y) を入力する。 また、キーボードから整数 a、b を入力する。 x から y までの整数(x、yを含む)のうち、 a の倍数かつ b の倍数である数の合計を求める a の倍数かつ b の倍数とする えろいひと頼む
15 :
デフォルトの名無しさん :2005/12/01(木) 17:26:38
キーボードから整数 x、y (x < y) を入力する。 また、キーボードから整数 a、b を入力する。 x から y までの整数(x、yを含む)のうち、 a の倍数かつ b の倍数である数の合計を求める a の倍数かつ b の倍数とする えろいひと頼む
だから、
>>1 を百万回読み直して来いというているだろうが。
俺は確かにエロエロかもしれん。
第一案 #define fscanf scanf #define printf fprintf 第二案 #define fscanf(...) fscanf(stdin, __VA_ARGS__) #define printf(x,...) printf(__VA_ARGS__) 第三案 えーっと・・・
18 :
デフォルトの名無しさん :2005/12/01(木) 17:30:34
>>16 すまん。OSはLinuxです
えでぃたーはXemacsです
21 :
デフォルトの名無しさん :2005/12/01(木) 17:38:57
>>14 例えばこういう嫌がらせが来る可能性もある。
#include <iostream>
int main(int argc, char* argv[])
{
int x,y,a,b;std::cin >> x >> y >> a >> b;
for(argc=0;x<=y;x++){if(x%a==0&&x%b==0&&x!=0){++argc;/*std::cout<<x<<std::endl;*/}}
std::cout<<"count is "<<argc<<"."<<std::endl;
}
そのサイト、C基礎編も掻い摘んで見てみたけど 泣きたくなるくらい情けないほど酷いな。 用語はいい加減だし間違いはあるし……
つーか、ダメだこりゃ。 >文字列終端キャラクタEOF(UNIXのシェル環境の場合には、 [Ctrl]+D(コントロールキーを押しながらD))
コレやってて単位もらえるんだ...いいなぁ
#include <iostream> int main(int argc, char* argv[]) { int x,y,a,b;std::cin>>x>>y>>a>>b; for(argc=0;x<=y;x++)if(x&&!(x%a||x%b))++argc; std::cout<<"count is "<<argc<<"."<<std::endl; } こんなコード書いてくる学生居たらテラコワス
うはwww そうするとEOFって何の略なんだろうwww End Of FILEだと信じ込んでいた俺の人生は無意味だったのかもしれない 俺自身にガッカリです。
>>23 コンパイラとアセンブラを混同してるな
他のあら探ししようと思ったがやる気がなくなった
糞杉
>>28 EOF=End-of-Fileであってる
>>28 End Of File
Ctrl+Dはキーボードからの入力もファイル入力と同じように扱えるよう便宜を図っているだけ。
>>30 >>31 マジレスサンクスです。
#include <iostream>
main(){
int c,x,y,a,b;
for(std::cin>>x>>y>>a>>b,c=0;x<=y;++x)if(x&&!(x%a||x%b))++c;
std::cout<<c;
}
俺の限界...
>>21 酷いな…
一般サイトか書籍を見ながら、独学でやった方が遥かにマシだぞ…。
こんなのに授業料を払うのは気の毒すぎる。
金払って嘘教えられてちゃたまったもんじゃない罠w
>>21 が見れない
そんなに酷かったの?見たかったな
削り方ぐらいは少し覚えような
所詮信州大か。
>>33 もっと恐ろしいのは、コレが大学院過程で卒業後
どこぞのSEとして君臨しそうなところだ。
なあに、かえって免疫力がつく
KHKH
宿題スレなんだからみんな大学生、高専、専門学校生のどれかだ。
>>39 大学院ってマジかよ
俺の所(国立)じゃ情報学部じゃないただの工学部ですら1年でCやってるぞ
信州馬鹿ばっか
>>44 自己レス
どうみても読み違いです。
本当にありがとうございました
('A`)
秀逸な自己完結劇で御座いました。拍手!
↑ハズカシイヤツガイル...
48 :
デフォルトの名無しさん :2005/12/01(木) 20:02:45
以前お世話になりました。 また、よろしくお願いします。 [1] 授業単元:プログラミング [2] 問題文:main関数で実数型配列indata[2]とoutdata[4]を宣言し、indata[0],indata[1]にはキーボードから数値を取り込む。 2つの配列、indata,outdataを引数とする関数sisokuを準備し、関数sisokuは戻り値を持たないが、引数の和、差、積、商を計算し その結果をoutdataに反映させる。main関数内でoutdataをfor文を用いて画面に表示する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:12月2日 [5] その他の制限: for文とポインタ
こんなん? #include<stdio.h> void sisoku(double*,double*); int main(void){ double indata[2],outdata[4]; int i; puts("数値を2個入れてね"); scanf("%lf",&indata[0]); scanf("%lf",&indata[1]); sisoku(indata,outdata); for(i=0;i<4;i++) printf("%f\n",outdata[i]); return 0; } void sisoku(double *in,double *out){ out[0] = in[0]+in[1]; out[1] = in[0]-in[1]; out[2] = in[0]*in[1]; out[3] = in[0]/in[1]; }
[1]授業単元:プログラミング [2]問題文:3個の整数の最大公約数を求める(ユークリッドの互除法を用いる) [3]環境 [3.1]OS:Windows [3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト [3.3]言語:C [4]期限:今週中 [5]その他の制限: お願いします
>>50 #include <stdio.h>
int gcd(int x, int y)
{
while(y)
{
int t = y;
y = x % y;
x = t;
}
return x;
}
int main(void)
{
int a, b, c;
printf("input 3 numbers:\n");
scanf("%d%d%d", &a, &b, &c);
printf("gcd: %d\n", gcd(a, gcd(b, c)));
return 0;
}
52 :
デフォルトの名無しさん :2005/12/01(木) 21:11:25
>>51 エレガントなプログラムです。
ただし、
scanf("%d%d%d", &a, &b, &c);
で入力したa, b, cをa>=b>=cの関係で並び替る必要があると思うけど?
>>52 何で? gcd は可換だから取る順番に寄らないはずだけど?
55 :
デフォルトの名無しさん :2005/12/01(木) 21:27:38
ありがとうござぃます! gcdとかwhileとか使わないでできませんか??
57 :
52 :2005/12/01(木) 21:32:18
>>51 >>54 >ただし、
>scanf("%d%d%d", &a, &b, &c);
>で入力したa, b, cをa>=b>=cの関係で並び替る必要があると思うけど?
取り消します。OKです。
>>55 再帰か?
gcdは関数につけただけの名前だからいいんでないの?
前スレ1000がばいそんorz
60 :
50 :2005/12/01(木) 21:38:41
一応いっときます
>>55 は別の人です
>>51 さん改めてありがとうございました
61 :
デフォルトの名無しさん :2005/12/01(木) 21:52:10
49番のでできました! ありがとうございます!!
62 :
デフォルトの名無しさん :2005/12/01(木) 22:02:55
最初からトリップを付けていれば間違いない。
[1] 授業単元: プログラミング応用 [2] 問題文(含コード&リンク): 10×10の2次元配列に、平面のビットパターンが入っているとする。 (0と1の整数が入っているとする)左右反転、上下反転して出力しなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 明日の朝9時まで [5] その他の制限: 特にありません。 すいませんが、よろしくお願いしますm(_ _)m
>>63 超適当。多分どっか間違ってるがキニスンナ
#define swap(a,b) {int t=a;a=b;b=t;}
int main()
{
int array[10][10] = {0};//array[height][width];
int i,j;
//左右反転
for(i=0;i<10;++i)
{
for(j=0;j<5;++j)
{
swap(array[i][j],array[i][9-j]);
}
}
//上下反転
for(i=0;i<10;++i)
{
for(j=0;j<5;++j)
{
swap(array[j][i],array[9-j][i]);
}
}
return 0;
}
>>55 できますよ。VC7で動作確認しました。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv){
int n = atoi(argv[1]), m = atoi(argv[2]);
char a[64], b[64];
if( n != 0 && m != 0 ){
int tmp = n % m;
if( tmp == 0 ) n = m; else {n = m; m = tmp;}
if( n != m ){
sprintf(a, "%d", n); sprintf(b, "%d", m);
argv[1] = a; argv[2] = b;
main(argc, argv);
}
else if( argc > 3 ) {
sprintf(a, "%d", n);
argv[1] = argv[argc-1]; argv[2] = a;
main(argc-1, argv);
}
else goto END;
}
else goto END;
return 0;
END:
printf("ans = %d\n", n);
return 0;
}
>>64 すいません、超初心者なのでよく分からず…_| ̄|○
とりあえず、自分なりに分解してこんな感じにしてみたんですが…
#include<stdio.h>
int main(void) {
int array[4][4] = {{0,1,0,1},{1,0,1,0},{0,0,0,0},{1,1,1,1}};//array[height][width];
int i,j,t;
for(i = 0; i < 4; i++){
for(j = 0; j < 4; j++){printf("%d",array[i][j]);}
printf("\n");}
printf("左右反転 \n");
for(i=0;i<4;++i) { for(j=0;j<2;++j)
{t = array[i][j];
array[i][j] = array[i][3-j];
array[i][3-j] = t;
printf("%d%d",array[i][j],array[i][3-j]); } printf("\n");}
printf("\n");
printf("上下反転\n");
for(i=0;i<4;++i) { for(j=0;j<2;++j)
{t = array[j][i];
array[j][i] = array[3-j][i];
array[3-j][i] = t;
printf("%d%d",array[j][i],array[i][3-j]);}
printf("\n");}
return 0; }
なんかうまく表示されず…_| ̄|○ 誰か教えてください…。
すいません、10×10は多すぎて打つのえんどくさかったんで、 上のプログラムでは4×4でやっています。 分かりづらくて本当に申し訳ないです_| ̄|○
>>66 左右反転+上下反転は、180度の回転だよな?
#include <stdio.h>
void print_bitpat(int *a, int height, int width){
int i;
for(i = 0; i < height * width; ++i){
printf("%d ",a[i]);
if(i % width == width - 1) printf("\n");
}
printf("\n");
}
#define WIDTH 4
#define HEIGHT 4
int main()
{
int a[HEIGHT][WIDTH] = {{0,1,0,1},{1,0,1,0},{0,0,0,0},{1,1,1,1}};
int *p = &a[0][0], *q = &a[HEIGHT-1][WIDTH-1];
print_bitpat((int*)a, HEIGHT, WIDTH);
while( p < q )
{
if( *p != *q ) { *p = ! *p; *q = ! *q;}
p++; q--;
}
print_bitpat((int*)a, HEIGHT, WIDTH);
return 0;
}
69 :
68 :2005/12/02(金) 00:49:06
あ、合成しちゃいかんのか。
>>69 親切にありがとうございます。
でも、
>>69 さんの言うとおり合成はダメなのです・゚・(ノД`)・゚・
教えてもらったのにすいません…。
71 :
int :2005/12/02(金) 01:47:06
[1] 授業単元:プログラミング基礎 [2] 問題文:銀行にお金を預けると毎年利子がつきます。今年ついた利子も そのままにしておくと来年も利子がつきます。 元金をm、利率(利子の割合)をrとします。一年後の利子は mrなので合計はm(1+r)となります。 二年後の利子はmr(1+r)となります。合計はm×(1+r)の二乗。 しかし実際には毎年利子の1円以下の端数を処理しますのでこ の数式にはなりません。 そこで、元金、利率と年数を入力してもらい1年後〜N年後の利子、 合計の表を作成するプログラムをつくりなさい。ただし、元金 は整数型(int)、利率は浮動小数点型(double)とし、利息の計算 のとき出てくる端数は小数点第1位で四捨五入するものとする。 例:元金100000,利率0.009とすると 利子 合計 1年後 900 100900 2年後 908 101808 3年後 916 102724 [3] 環境 [3.1] OS:Windows [3.3] 言語: C [4] 期限: 2005年12月2日10:00まで
72 :
int :2005/12/02(金) 02:01:47
[1] 授業単元:プログラミング基礎 [2] 問題文:銀行にお金を預けると毎年利子がつきます。今年ついた利子 もそのままにしておくと、来年には利子にも利子がつきます 元金(預けているお金)、利率と年数を入力してもらい、1年 後〜N年後の利子、合計の表を作成するプログラムを作成しな さい。ただし、元金は整数型(int)、利率は浮動小数点型(dou ble)とし、利息の計算のときに出てくる端数は、小数点第一位 で四捨五入するものとする。 例:元金100000、利率0.009 利子 合計 1年後 900 100900 2年後 908 101808 3年後 916 102724 [3] 環境 [3.1] OS: Windows [3.3] 言語: C [4] 期限: 2005年12月2日10:00まで
>>71 いろんな所は自分で補完しなさい。
#include <stdio.h>
#define N 5
int main(void)
{
double r = 0.009;
int m = 100000, rishi;
int i;
for( i = 0 ; i < N ; i++ ) {
rishi = m * r + 0.5; // rishi = (int)round(m * r); するなら#include <math.h>
m += rishi;
printf("%d年後 %d %d\n", i + 1, rishi, m);
}
return 0;
}
74 :
int :2005/12/02(金) 02:05:46
先生が途中までプログラムを見せてくれましたが分かりませんでした。 一応載せておきます。皆様お願いいたしますm(_ _)m #include<stdio.h> int main(void) { int printipal, interest, total, year, i; double rate; printf("元金");scanf("%d,&principal); printf("利率");scanf("%if,&rate); printf("年数");scanf("%d,&year); printf(" 利子 合計\n"); total = principal
; for( i = 0 ; i < year ; i++ ) { interest = total * rate + 0.5; total += interest; printf("%d年後 %d %d\n", i + 1, interest, total); } return 0; }
76 :
デフォルトの名無しさん :2005/12/02(金) 02:58:24
>>24 実行してみたところ、ちゃんとコンパイルできました。
ありがとうございます。
非常に難解な問題で自力ではさっぱりわからなかったので、
助かりました。
ちゃんと自分でも理解してプログラムが書けるよう、もっと努力しようと思いました。
78 :
10 :2005/12/02(金) 10:36:53
すいません、77は僕です。名前入れ忘れてました。
>>33 そんなに酷いんですか…。
まぁわかりにくいとは思っていましたが。
軽く脳天ぶった切られるくらいショックですね。
79 :
デフォルトの名無しさん :2005/12/02(金) 10:50:20
次の4点 (0,0),(1,0),(1,1),(0,1) を順に通る3次のSPLINE曲線とそのグラフを描くプログラムを誰か作ってください。 始点と終点の接線の方向はそれぞれ(1,1)と(-1,0)です。お願いしまつ
>>76 ありがとうございます!
結局左右反転しか分からず提出して、
76さんの書き込みに今気付きますた_| ̄|○
このプログラム見ながら考えてみます!
親切にありがとうございました!
82 :
24 :2005/12/02(金) 11:00:54
>>10 少なくとも今回の課題のページには、大いに修正する必要がある、と伝えてくれ。
正直これじゃ本来学ぶべきところとは違うところを悩む可能性高い。
それも勉強といえば勉強だが。
>>10 折り見てきちんとした本か資料をあたって用語だけでも勉強しなおすことを勧める。
社会に出て現場で困ることになりそうだ。
>>80 そういうレス止めないか?
>気に入らない質問やその他や発言はスルーの方向で。
>【質問者へ】
>回答者の便宜のため、質問の際は以下を行うことを推奨します。
自治厨乙。
というのは冗談だが、
ここに来ているのは困っている人間だとは思うが、
>>1 もろくに読まずに質問 → スルー → ショボーン、って可哀想じゃないか?
で、
>>79 を回答してやろうと思ったのだが、
SPLINEの計算はできると思うが、グラフを表示する手段が不確定なんでスルーだなwww
俺は可哀想だとは思わんが、そういう立場もありだと思う。
>>85 止めはしないが、1も読めない奴は回答をもらえたかチェックするの
もままらない気がする。せっかく解答しても無視されるのがオチ。
89 :
デフォルトの名無しさん :2005/12/02(金) 12:13:11
>>2 の者ですが。pgm形式ならできるでしょうか?
お返事よろしくお願いします。
90 :
デフォルトの名無しさん :2005/12/02(金) 12:13:48
>>2 の者ですが。pgm形式ならできるでしょうか?
お返事よろしくお願いします。
(
>>1 の)諸注意も読まずしてくるのは、現実でもいい加減な依頼・申請を
しているんだろうと思われるのでどうしようもない。
こっちでできるのは
>>1 に沿った方法で再度依頼するようお願いするだけ。
興味がわけばテンプレに沿ってないのでも回答するかもしれないが
(こっそりと)これだけは言っておきたい。
・stdio.h stdlib.h ctype.h string.h math.h time.h(C言語)ほか
何をincludeするのか初めから全部挙げれ。
わけわからんに対して***.h(学部で独自作成)とかwindows.hとか
includeする必要があったりする
・ソースは全部挙げれ。
問題の切り分けができるのならともかく、切り分けができてないのに
対して大抵別ファイルで宣言したものと整合性がとれてないものが多い。
・入力・出力をどうしたいのかはっきりすれ
1つ入力ごとにEnter押すのか、複数を空白区切りで一括入力するのか
直接入力かコマンド入力かリダイレクトかファイル入力なのかその他なのか
出力も1行に1項目か複数項目か、タブ・空白・コンマ区切りなのか、ラベルいるのか
実際にどう入力してどう出力したいのか説明がほしい。
・Cなのに // なコメント付けないでください
>>90 pgm=portable graymap
>>91 C99では//コメント使えるんだし、それくらいは目くじら立てんでも。
>>90 >93も書いているが、グレイ画像でどうやってRGBそれぞれの平均を取れと?
#ぶっちゃけ、全部一緒とも言えるがw
>>91 天さんの頭ぐらい禿しく同意。
>>94 厳密には、RGB→GRAYの変換式は単純な平均ではないがな。
96 :
92 :2005/12/02(金) 13:14:05
あー、なんだこりゃ?pnm形式として間違ってるのか? 手空いてる人、ヘルプ。 -----------------------------(test.ppm) P3 4 4 15 0 0 0 0 0 0 0 0 0 15 0 15 0 0 0 0 15 7 0 0 0 0 0 0 0 0 0 0 0 0 0 15 7 0 0 0 15 0 15 0 0 0 0 0 0 0 0 0 15 0 15 0 0 0 0 0 0 0 0 0 ------------------------------------------ なんか問題あるか?susie+pluginでで「内部エラー」って出る。
97 :
92 :2005/12/02(金) 13:20:33
すまん... GVで試したら見れた。今うpする。
>>96 4x5あるような気がするが、それ以外は(pnmとしては)問題なさそうに見える。
問題は、SusiePlugInが深度15をサポートしているかどうかだ。
99 :
92 :2005/12/02(金) 13:24:48
100 :
92 :2005/12/02(金) 13:29:18
>>98 どうみても4×5です、
本当にありがとうございました、ってええええ(涙)
しかも直してもやっぱり見れないし...
んー、あとはBSD上のビューアで見れるかどうかが瀬戸際です。
>>99 えーと、そもそも>2が回答しないのがいけないわけだが、
画素ごとにRGBの平均を取っている気がするのだが。
漏れが読む限り、RGB各プレーンごとに画像全体の濃度値の平均を出すと言う設問なんジャマイカ。
102 :
92 :2005/12/02(金) 13:37:14
>>101 俺も悩んだんですよ、その問題。
>>2 画像一画素あたりのRGB(それぞれ)の平均の値を数値で取得するプログラムを書け。
1画素あたりの平均の値を取得するプログラム、としてみた。
そうでないと、「一画素あたりの」という単語の必要性がなくなるので。
やっぱり
>>2 の日本語力の問題に帰着するわけだが(笑)
>>98 IrfanViewなら4x4で見えたよ。
#これだからSusieは……
ハァ?
105 :
92 :2005/12/02(金) 13:40:26
>>91 狂おしいほどに同意だが
残念なことに依頼者の中には
言語についても環境についても知識が皆無、というものもいる
そういう人達はどっからどこまでを提示すればいいのかすら判断できないんだよな
そういう場合はなるべく優しく誘導してあげましょう
このスレは、70%の時間つぶしと30%の良心でできてるのだから
それをちゃんと判断できる人はこんなところで質問しない
このスレに良心なんて30%もない
borland c++ 使ってます。 問題が解けなくて困ってます助けてください。 問題: 毎回違う長さの文字列を取得しながら、それを","で区切って それぞれ新しい変数を作りながら代入しなさい。 1) abcdef, gh, i, j, klm (5個) 2) 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日, 日曜日 (定数7個) 3) 10, 100, 1000, 10000 (4個) 自分では、分解式は下記だと思ったんですがうまくいきませんorz 「'char *' 型は 'char' 型に変換できない」とでますし、何か根本で間違ってる気も・・・ char *p, *str, InStrPtr[50]="" ; int i =0; while (( p = strtok(str, ",")) != NULL) { InStrPtr[i] = p ; str = NULL; it++; }
110 :
913 :2005/12/02(金) 17:24:27
キーボードから入力された5つの整数を配列の中に保存し、それを表示するプログラムを作れ. 以前この質問で、 #include <stdio.h> main() { int ss[5]; int i; printf("5つの整数を入力しなさい\n"); for (i=0 ; i<5 ; i++) { scanf("%d", &ss[i]); } for (i=0 ; i<5 ; i++) { printf("%d\n", ss[i]); } } のような回答を頂いたのですが、どなたか詳しい解説をしていただけないでしょうか ?
最初のforループでint型整数5こ読み込んで 次のforループで出力してるだけ
>>110 #include <stdio.h>
main()
{
int ss[5]; ←5つの配列を宣言
int i; ←整数型の変数を定義
printf("5つの整数を入力しなさい\n");
for (i=0 ; i<5 ; i++) ←添え字を0〜4まで一個ずつ増やしながらループ
{
scanf("%d", &ss[i]); ←添え字に対応したものをスキャン
}
for (i=0 ; i<5 ; i++) ←これも同じく添え字を増やしながらループ
{
printf("%d\n", ss[i]); ←0〜4までの5つの配列にはいている整数を表示
}
}
>>109 char *p;
char str[] = "abcdef, gh, i, j, klm";
char *InStrPtr[50];
int i = 0;
p = strtok(str, ", ");
while (p != NULL) {
InStrPtr[i] = p;
i++;
p = strtok(0, ",")
}
int n = i;
for (int i = 0; i < n; i++)
{
puts(InStrPtr[i]);
}
114 :
デフォルトの名無しさん :2005/12/02(金) 17:47:18
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク):構造体 struct point2d を2つ引数にとり、 2点間の距離を求める関数 len() および、 構造体 struct rectangle を1つ引数にとり、 2点を頂点とする四角形の面積を求める関数 square() を作成しなさい。 また、これらの関数を用いて、長方形の面積と対角線の長さを求めるプログラムを作成しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: C [4] 期限: 2005年12月5日まで [5] その他の制限: 特になし 初心者です。よろしくお願いします。
>>114 構造体の定義は自分でやっても大丈夫?
先生から指示あったんじゃないの?
へ?構造体の中身は?
117 :
デフォルトの名無しさん :2005/12/02(金) 17:56:18
すいません貼りつけるの忘れてました。 double len( struct point2d, struct point2d ); double square( struct rectangle );
118 :
114 :2005/12/02(金) 17:57:54
すみません、構造体書き忘れました。point2dは極座標であらわします。 struct point2d{ double r; double c; }; struct rectangle{ struct point2d a; struct point2d b; }; よろしくお願いします。
lenの引数の構造体の中身はx、y座標が入ってるのかなって思うが squeareの引数の構造体の中身なに?
あっ既に書いてあった
>>114 > [3.1] OS:Linux
> [3.2] コンパイラ名とバージョン:VC 6.0
ここは誰も突っ込まないのか?
>>121 その欄ちゃんと見て解答してる奴いるのか?w
極座標わからんから投げる┐(´ー`)┌
124 :
ieko :2005/12/02(金) 18:13:51
[1] バイオプログラミング2 [2] 動的計画法による配列のアラインメントの作成 雛形があるので、alignment関数とtraceback関数をうめれば、完成するのですが、文字配列に加えるところ等不明な点が多く、完成に至ってません。 特にtraceback関数が難しいのでお願いしたいのですが、、 擬似コードは以下のようになってます。 void traceback(char x[] , char y[], int i, int j) { if(i==0 && j==0){ res_xとres_yを空文字行列にする} else if(trace[i][j]=="M"){ traceback(i-1,j-1); res_xにx[i]を加える。 res_yにy[j]を加える。 } else if(trace[i][j]=="IX"){ traceback(i-1,j); res_xにx[i]を加える。 res_yに"-"を加える。 } else if(trace[i][j]=="IY"){ res_xに"-"を加える。 res_yにy[j]を加える。}} ちなみに、res_x,res_yのデータ型は char res_x[MAX_SEQ*2];/* alignment result of x */ char res_y[MAX_SEQ*2];/* alignment result of y */ となっています。 この部分だけだとものすごい断片的なので、説明を加えてほしいところがあれば、いってください。 お願いします! [3] [3.1] OS:Windows [3.3] 言語: C [4] 期限: ([2005年12月5日13:00まで])
初期化はres_x[0]='\0'; もしくはmemset(res_x,0,MAX_SEQ*2); res_xにx[i]を加えるときは、strcat();で後ろに連結。 文字列を比較するとき(trace[i][j]=="IX")をするときは、strcmp() と、こんだけヒントあっても無理そう?
>>114 #include <math.h>
double len(struct point2d a, struct point2d b)
{
double dr;
dr = (a.r > b.r) ? a.r - b.r : b.r - a.r;
return sqrt(a*a + b*b - 2*a*b*cos(dr));
}
片方だけだが。確かa^2 + b^2 - 2abCos(Δr)のルートで距離が出たような
記憶に頼って作ったから間違ってたらしらなす
それと右辺値として3項演算子って使っても良かったっけ?
>>126 に訂正
returnのa,bをそれぞれ a.c, b.cに変えてくれ
つーか、rが角度(radian)、cが長さであってるよな?
それと脳内gcc -Wall -ansiなので違っててもシラネ
とりあえず、解る範囲でやってみた。 void traceback(char x[] , char y[], int i, int j) { if(i==0 && j==0){ memset(res_x,0,sizeof(res_x)); memset(res_y,0,sizeof(res_y)); }else if(strcmp(trace[i][j],"M")==0){ traceback(i-1,j-1); strcat(res_x,x[i]); strcat(res_y,y[j]); }else if(strcmp(trace[i][j],"IX")==0){ traceback(i-1,j); strcat(res_x,x[i]); strcat(res_y,"-"); }else if(strcmp(trace[i][j],"IY")==0){ strcat(res_x,"-"); strcat(res_y,y[j]); } }
129 :
ieko :2005/12/02(金) 18:26:35
>>125 ありがとうございます。
この場合のx[i]は特殊で、x[i]が一文字なのでstrcmpを使わずに、代入する形でもいけるともいわれてるのですが、その場合はどうすればいいでしょうか。
>>129 うはwww間違えてたwww 文字の連結じゃねーかwww
ふむ... でも文字列の末端を認識する必要があるのがなぁ...
res_x[strlen(res_x)+1]=x[i];
に変えてくれwww
あ、res_xはglobal変数……よね。 void traceback(char x[] , char y[], int i, int j) { if(i==0 && j==0){ memset(res_x,0,sizeof(res_x)); memset(res_y,0,sizeof(res_y)); }else if(strcmp(trace[i][j],"M")==0){ traceback(i-1,j-1); res_x[strlen(res_x)+1]=x[i]; res_y[strlen(res_y)+1]=y[j]; }else if(strcmp(trace[i][j],"IX")==0){ traceback(i-1,j); res_x[strlen(res_x)+1]=x[i]; res_y[strlen(res_y)+1]='-'; }else if(strcmp(trace[i][j],"IY")==0){ res_x[strlen(res_x)+1]='-'; res_y[strlen(res_y)+1]=y[j]; } }
132 :
ieko :2005/12/02(金) 18:36:48
133 :
131 :2005/12/02(金) 18:37:42
あ、実行する前に traceback(x,y,0,0); でres_xとres_yを初期化してくれ。xとyの代わりにNULLでもいけるかもしれないが。 これはres_xとres_yがNULL文字(0x00)で初期化されている前提で作っているので。
134 :
131 :2005/12/02(金) 18:41:19
動作するかどうかわからないが、スマートにするとこんな感じ? void traceback(char x[] , char y[], int i, int j) { static char *x_end,*y_end; if(i==0 && j==0){ memset(res_x,0,sizeof(res_x)); memset(res_y,0,sizeof(res_y)); x_end=res_x; y_end=res_y; }else if(strcmp(trace[i][j],"M")==0){ traceback(i-1,j-1); res_x[x_end++]=x[i]; res_y[y_end++]=y[j]; }else if(strcmp(trace[i][j],"IX")==0){ traceback(i-1,j); res_x[x_end++]=x[i]; res_y[y_end++]='-'; }else if(strcmp(trace[i][j],"IY")==0){ res_x[x_end++]='-'; res_y[y_end++]=y[j]; } } あと、IYの時はtraceback(i,j-1)いらないの?
135 :
131 :2005/12/02(金) 18:46:58
orz もう俺だめ、引退したほうがいいな... res_x[x_end++] → *(x_end++) res_y[y_end++] → *(y_end++)
136 :
ieko :2005/12/02(金) 18:48:02
>>131 ありがとうございます。
試してみます。
IXが↑,IYが←をあらわしているんですが、このtracebackだと、いらないみたいです。
>>114 double len(struct point2d po1,struct point2d po2){
double x1[2],x2[2];
x1[0]=po1.r; x2[0]=po2.r;
x1[1]=po1.c; x2[1]=po2.c;
zahyou(x1);
zahyou(x2);
return pow((pow(x1[0]-x2[0],2)+pow(x1[1]-x2[1],2)),0.5);
}
double square(struct rectangle rec){
double x1[2],x2[2];
x1[0]=rec.a.r; x2[0]=rec.b.r;
x1[1]=rec.a.c; x2[1]=rec.b.c;
zahyou(x1);
zahyou(x2);
x1[0]=fabs(x1[0]-x2[0]);
x1[1]=fabs(x1[1]-x2[1]);
return(x1[0]*x1[1]);
}
void zahyou(double *x){
double s,c;
s=x[0]*sin(x[1]);
c=x[0]*cos(x[1]);
x[0]=s; x[1]=c;
}
間違っててもシラネ
>>114 自分も投入
間違っててもシラネ
#include <math.h>
double len(struct point2d p0,struct point2d p1){
double a,b;
a = p0.r * p0.r + p1.r * p1.r;
b = 2 * p0.r * p1.r * (sin(p0.c)*sin(p1.c)+cos(p0.c)*cos(p1.c));
return sqrt(a - b);
}
間違っててもシラネ
139 :
118 :2005/12/02(金) 19:44:19
俺の良心がチクチク痛むのは、仕様ですか……正直、すまんかった。
うはwwwwwww目欄に偽者って書いてあったwwwwwwwwwww
ちょwwwwww待てwwwwwwwwwww ってことは極座標ってのもwwwwwwwwwwwうえwwうえwww
142 :
109 :2005/12/02(金) 19:56:52
>>113 さんありがとうございます。
char str[] には、 文字列の1)2)3)...x) のどれを入れるか
決まってない(ランダム)な場合の処理はどうしたらよいのでしょうか。
例えば、
3)を代入した File2Str という変数があった場合に、
strcpy(str, File2Str);
や
str[] = File2Str;
としても、「'char *' 型は 'char[]' 型に変換できない」や
「左辺値が必要」とエラーが出てしまいます。
>>113 さんの場合でも、[ InStrPtr[i] = p; ] の箇所で、
「'char *' 型は 'char[]' 型に変換できない」というエラーがでます。うーん・・・
そりゃ InStrPtr[i] = p; は無理だろ
InStrPtr[i] = *p; にしないと
結局どうゆうことなん?
月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日, 日曜日 ←こうゆう文字列を入力すると
月曜〜日曜まで別々の配列に入れて欲しくてかつ入れる文字列に制限はなくして欲しいてこと?
それともMAXは最初から決めちゃっていいの?
その授業での制限は?
問題はできれば
>>1 に従って書いて欲しい
int i; char *p; char str[] = "abcdef, gh, i, j, klm"; char **InStrPtr; InStrPtr=(char**)malloc(sizeof(char*)*N); i=0; p = strtok(str, ", "); while (p != NULL) { InStrPtr[i] = (char*)malloc(sizeof(char)*strlen(p)+1); strcpy(InStrPtr[i],p); i++; p = strtok(0, ",") } int n = i; for (int i = 0; i < n; i++) { puts(InStrPtr[i]); } 脳内コンパール
よろしくお願いします。 [1] 授業単元:プログラミングII [2] 問題文(含コード&リンク): 日本人の5歳男児について身長の区間を入力すると全体に占めるその区間の割合を%表示するプログラムを作成せよ。 ただし、身長の確率密度分布は↓ 関数 f(x) = (1e/√2π*σ)^-(((x-u)^2)/2σ)^2 (パラメータ u:平均値(110.9cm) σ:標準偏差(4.7) e:自然対数の底(≒2.718)) で与えられているものとする [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C++ [4] 期限: 2005年12月6日10:00まで [5] その他の制限: ・sqrtを用いること。 ・πは3.141592を使うこと。 ・自然対数のべき乗 e^a は、 exp を用いること。
146 :
109 :2005/12/02(金) 20:50:11
[1] 授業単元:プログラム実習(後期) [2] 問題文(含コード&リンク): 毎回違う長さの文字列を取得しながら、それを","で区切って それぞれ新しい変数を作りながら代入しなさい。 1) abcdef, gh, i, j, klm (5個) 2) 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日, 日曜日 (定数7個) 3) 10, 100, 1000, 10000 (4個) 4) 〜10) 傘=1000,カッパ=1500,ウインドブレイカ=2500,なし=0 別々の配列に入れて入れる文字列に制限はありません。 どれを入れても良いようにしなければなりません。毎回違います。 [3] 環境 [3.1] OS: Windows [3.2] bcc551 [3.3] 言語: C++ [4] 期限: 2005年12月17日07:20まで] [5] その他の制限: if,switch,while,関数 と たぶんポインタのさわりくらいと思います。 図書館から借りてきた本中に書かれてある二次元配列とか、まだやってません。
147 :
名無し :2005/12/02(金) 20:52:21
[1] 授業単元:二分探索法 [2] 問題文: <入力>三次方程式f(x)=Ax**3+Bx**2+Cx+D=0の係数4字組み[A,B,C,D]と指定した三次式においてf(a)f(b)が負となる区間[a,b] <操作>二分探索法で解が存在することが保証された区間を半分にし、区間の幅が10のマイナス6乗より小さくなったら解とする。 <出力>与えられた三次方程式の区間[a,b]に於ける解の近似値。 <説明>連続関数f(x)の方程式f(x)=0を解く。f(a)f(b),(a<b)が負であることが前もってわかっていると仮定すると区間[a,b]に解が少なくとも一つ存在する。 区間[a,b]を二つの区間[a,(a+b)/2]と区間[(a+b)/2,b]に分ける。仮定からf(a)とf(b)の符号(+か-)は異なる(掛けると負より)。 f((a+b)/2)の符号とf(a)かf(b)の符号のどちらかは異なる。符合の異なる方の区間の中に少なくとも一つ解が存在する。このようにして二分探索法を使って区間を小さくしてゆく。 中間点が偶然0になればその値が解、また区間の幅が10のマイナス6乗より小さくなれば、その区間の中の点の値に対してその最下位の桁を四捨五入して解とする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2005年12月7日9:00まで] [5] その他の制限:特になかったです。 よろしくお願いします。
>>145 f が確率密度になってない.括弧の対応に注意して式を書きなおし.
>>147 #include <stdio.h>
#include <math.h>
#define EPS 1e-6
double A, B, C, D;
double f(double x) { return A*x*x*x+B*x*x+C*x+D; }
int main() {
double a, b, c;
scanf("%lf %lf %lf %lf", &A, &B, &C, &D);
scanf("%lf %lf", &a, &b); // assume a < b and f(a) f(b) < 0.
for (; c = (a+b)/2, f(c) != 0 && fabs(a-b) > EPS;
f(a)*f(c) < 0 ? b = c : a = c);
printf("%.6lf\n", c);
}
150 :
145 :2005/12/02(金) 22:09:50
【質問テンプレ】 [1] 授業単元: コンピュータ基礎 [2] 問題文:問題1 2桁の数を入力する関数 2桁の数を入力する関数(もし、2桁以外の整数を入力したら 再入力となる)を作成し、main関数では得られた2桁の値の 1の位と10の位の値を掛け算した値を表示するプログラム 問題2 配列を逆順に格納する関数 要素数がnoであるint型の配列v2の並びを逆順にしたものを 配列v1に格納する関数 void intary_rcpy(int v1[],const int v2[],int no) を作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12月4日20時 [5] その他の制限: 関数を使い、動作を確認するための適切なmain関数も作成する
152 :
79 :2005/12/02(金) 22:21:21
[1] 授業単元:生産工学 [2] 問題文(含コード&リンク): 次の4点 (0,0),(1,0),(1,1),(0,1) を順に通る3次のSPLINE曲線とそのグラフを描くプログラムを作成せよ。 始点と終点の接線の方向はそれぞれ(1,1)と(-1,0)とする。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラは何でもいいっていわれました [3.3] 言語: C [4] 期限: 2005年12月10日まで [5] その他の制限: プログラムリストとそれによってできたグラフを印刷して提出といわれますた。 グラフのソフト等も特に制限はないそうです。 先ほどは大変失礼しました。よろしくお願いします。
>>152 tsvかcsvに出力して、それをExcelで読み込んでグラフに出すんでもいいのかな。
>>153 指定無いんだから良いんじゃね?俺なら適当に吐いてgnuplotだけど
>>150 f を数値積分.結果はちゃんとチェックしてないので適当に検証しといて.
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.141592;
double f(double x) {
const double u = 110.9, sigma = 4.7;
return 1.0/sqrt(2*PI)/sigma * exp(-(x-u)*(x-u)/2/sigma/sigma);
}
double F(double a, double b) { // F = integrate[f, {x, a, b}]
const double h = 1e-4;
double S = 0;
for (double x = a; x <= b; x += h)
S += (f(x)+f(x+h))*h/2; // trapezoid integration method:
return S;
}
int main() {
double a, b; cin >> a >> b;
cout << F(a,b) << endl;
}
156 :
155 :2005/12/02(金) 22:45:30
>>155 数値積分の for の中の x <= b を x < b に訂正.細かいとこだけど気になるので.
157 :
デフォルトの名無しさん :2005/12/02(金) 23:10:31
質問です。(低能です) 改行は\n tabは\t ではスペースは?
' '
159 :
デフォルトの名無しさん :2005/12/02(金) 23:32:16
161 :
145 :2005/12/02(金) 23:56:31
>>155 素早い回答どうもありがとうございます。m(_ _)m
162 :
デフォルトの名無しさん :2005/12/03(土) 00:01:39
システムコールの授業で「標準入力からテキストを入力し、空行を取り除いて標準出力に出力するプログラムを書け。ただし、入出力を行うシステムコールを直接使用すること。」っていう課題が出ました。 下のプログラムを改良すればいいらしいのですが… #include <stdlib.h> #include <unistd.h> main(){ charbuf[1024], buf1[1024], *p; ssize_tlen, len1, len2; charc, s = '\n',n; size_ti,j; while ((len = read(STDIN_FILENO, buf, sizeof(buf))) > 0) { len1 = 0; for (i = 0; i < len; i ++) { c = buf[i]; if (!(s == '\n' && c == '\n')) { buf1[len1] = c; len1 ++;} s = c; printf("%c",s);} p = buf1; while ((len2 = write(STDOUT_FILENO, p, len1)) >= 0 && len1 > len2) { len1 -= len2; p += len2;} if (len2 == -1) { exit(1);}} if (len == -1) { exit(1);} return 0;} よろしくお願いします。
テンプレがあるのに無視する奴って、どういう頭の構造をしてるのか見てみたいよな。
struct atama { int baka; int aho; int kitigai; }
165 :
79 :2005/12/03(土) 02:27:01
【質問テンプレ】 [1] 授業単元: 計算機科学 [2] 問題文(含コード&リンク): NxNの正方形状に並んだ点からなる地図があり、各点は陸か水のどちらかを表している。 地図の周囲を海と見なし、海から縦方向または横方向に水を表す点で結合している点を 海を表す点に置き換えるプログラムを作成せよ。 具体的には陸を0、水を1、海を2で表すと左から右に書き換えるようなプログラムです。 1100 2200 0100 ⇒ 0200 0010 0010 0001 0002 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2005年12月16日 [5] その他の制限: 基本的な命令語、文字列、配列(2次元含む)、関数、ポインタ、構造体まで 自力では2次元配列で地図データを入力したところで躓いてしまいました。 どなたかご教示お願いします。
二次元配列でデータ持ってるんだったら 出来たようなものでは?
2次元配列からビットマップ作って 描画系APIで塗り潰して再び 2次元配列に戻すとあら不思議
>>164 構造体なのに;がないあたりの完成度高めですね。
>>170 ちょっとNを大きくして市松模様(4アイテム毎の)みたいなパターンにするとスタックオーバーフロー
>>171 宿題だから気にしないw
で、Nがどれくらいでスタックオーバーフローがでた?
171 じゃないけど全部 1 で埋め尽くされたものに対して N = 256 くらいでスタックオーバーフロー.
172だけど全部1で埋め尽くされたものに対してN=100でスタックオーバーフロー(VC)。
>>172 そのアルゴリズム的には市松模様じゃなくて
全部 1 で埋まってる時が一番スタックが深くなりそうなので、
for(y = 0; y < N; y++){
for(x = 0; x < N; x++){
map[y][x] = 1;
}
}
のパターンを作って実験。
N = 192 まで OK
N = 193 だと関数から main に戻ってこないw
Windows XP
VC++ 6.0
リンクオプションは特に書かずデフォルトのままです。
176 :
172 :2005/12/03(土) 08:29:45
多分、宿題で出すにはクオリティ高すぎになるかもしれないが、 スキャンラインシードフィルアルゴリズムを使ってみるかwww
スキャンの進行方向へ行くときはスタックに積まずに戻る 垂直方向へ行く時だけスタックする 関数再帰呼び出しはせずにデータ専用のスタックを用意する 等の対処が必要ですね
178 :
172 :2005/12/03(土) 09:28:44
>>151 #include<stdio.h>
#define vip 3/*要素数*/
void num_input(int *i){
while(1){
scanf("%d%*[^\n]%*c",i);
if(((*i-99)<0)&&((*i-9)>0)) break;
}
}
void intary_rcpy(int v1[],const int v2[],int no){
int i;
for(i=0;i<no;i++) v1[i]=v2[no-i-1];
}
int main(void){
int num,i,v1[vip];
const int v2[vip];
num_input(&num);
printf("問題1:%d,%d\n",num,(num/10)*(num-(num/10)*10));
puts("\n問題2:");
for(i=0;i<vip;i++){
printf("v2[%d]=",i);
scanf("%d%*[^\n]%*c",&v2[i]);
}
intary_rcpy(v1,v2,vip);
for(i=0;i<vip;i++){
printf("v1[%d]=%d\n",i,v1[i]);
}
return 0;
}
180 :
172 :2005/12/03(土) 09:42:36
>>172 ローカル変数で
struct point2d{
int x,y;
}stack[N*N];
ってやっぱりスタックが・・・
struct point2d{ int x,y; }stack[N*N]; グローバルに持っていったらN=800でもOKのようです。 ここの部分もmallocで確保してもよさそうです。
183 :
172 :2005/12/03(土) 10:13:07
めんどうで手抜きした、正直すまんかった。 あとこのサイズってN*Nが最適値じゃないし、、、まあ動くからいっかw だれか数学的に求められる人居たらヘルプ。
>>172 とりあえずその実装だと N^2 はかなりギリギリで、実際全て 1 の入力に対して N^2 使ってる.
……って,これ実装おかしいだろ.次のスタック積んだ後の for(;cx<=rx && map[my-1][cx]!=src;cx++); は,
どうせスキャンラインで消えるところの読み飛ばしを意図してんじゃないの?
まあそれを訂正した後だとしても,少なくとも N^2/2 は必要( map[y][x] = (y % 2 ? 1 : x % 2); ) .
平均の意味でメモリ使用量をケチるなら,多分連結リストがベター.
185 :
184 :2005/12/03(土) 11:06:23
訂正の意味は !=src を ==src にすることね.今の実装だとこの for は全く回らない.
大きさを気にするくらいならスタックじゃなくてヒープに配置すりゃいいのに
[1] 授業単元: プログラム入門 [2] 問題文(含コード&リンク):次のプログラムを作成せよ。ただし各関数は 指定された書式に従って呼び出されるものとし、それにあわせて関数の戻り値および 引数を設定すること ・半径rの円の円周の長さlおよび面積sを算出する関数circle()を定義し、半径10cmの 円についてそれぞれの値を求める。(πは3.1415926536) 書式:void circle(double r , double *l , double *s) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:12月4日昼12時 ようやくポインタを習い始めました・・・。よろしくです。
>>187 #define PI 3.1415926535
void circle(double r, double *l, double *s) { *l=(2.0*PI*r);*s=(PI*r*r); }
main() { double l, s; circle(10,&l,&s); printf("%lf %lf\n", l, s); }
void circle(double r , double *l , double *s) { *l=2*r*3.1415926536; *s=r*r*3.1415926536; } int main(){ double r,l,s; r=10; circle(r,&l,&s); printf("%fの円の長さは%f, 面積は%f",r,l,s); return 0; }
半径rはどうやって得るんだ? 出力はどうなればいいんだ?
191 :
172 :2005/12/03(土) 13:19:08
>>185 thx.
for(;cx<=rx && map[my-1][cx]!=src;cx++){printf("#");};
ってやったら、確かに全く意味がなかったですねw
for(;cx<=rx && map[my-1][cx]==src;cx++);
サンクスです。
192 :
187 :2005/12/03(土) 13:22:04
rは標準入力から入力し、 標準出力にlとsを出力させていただきたいです
193 :
デフォルトの名無しさん :2005/12/03(土) 13:22:44
[1] 授業単元:プログラミング処理 [2] 問題文(含コード&リンク):ファイルから連立方程式を読み込み、行列の計算を利用して解を求めるプログラムを作成する。 [3] 環境 [3.1] OS:標準環境はソラリス8 [3.2] コンパイラ名とバージョン:gcc バージョンは申し訳ないですが判りません。 [3.3] 言語:C言語です。 [4] 期限:2006年1月11日まで [5] その他の制限:解はLU分解法とガウスザイデル法でそれぞれ求める。読み込むファイルはax1+bx2+…=y1のa,b…をすべて一行に記入し、スペースで区切る。 二次元配列を動的確保するサブ関数とファイルからstrtok関数などを用いた一行の要素を二次元配列の行要素にそれぞれ格納するサブ関数がわかりません。 よろしくお願いします。
>>189 ,195
助かりました。あろがとうございます。
198 :
197 :2005/12/03(土) 15:42:05
一応短いですが書いたところまでです。 #include<iostream > #include<fstream> using namespace std; int search_dic(string a[][3],int last,string word){ int first=0,ans=-1; while(first<=last){ int middle=(first+last)/2; if(a[middle][0]==word){ ans=middle; break;} if(a[middle][0]<word) first=middle+1; else last=middle-1;} return ans;}
異次元配列テラワ
>>197 なんちゅうか縛りが多すぎんだよな
その結果出すだけなら簡単なんだが
201 :
151 :2005/12/03(土) 16:39:09
【質問テンプレ】 [1] 授業単元: コンピュータ基礎 [2] 問題文:問題1 2桁の数を入力する関数 2桁の数を入力する関数(もし、2桁以外の整数を入力したら 再入力となる)を作成し、main関数では得られた2桁の値の 1の位と10の位の値を掛け算した値を表示するプログラム [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12月4日20時 [5] その他の制限: 関数を使い、動作を確認するための適切なmain関数も作成する
202 :
151 :2005/12/03(土) 16:40:51
【質問テンプレ】 [1] 授業単元: コンピュータ基礎 [2] 問題文: 問題2 配列を逆順に格納する関数 要素数がnoであるint型の配列v2の並びを逆順にしたものを 配列v1に格納する関数 void intary_rcpy(int v1[],const int v2[],int no) を作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12月4日20時 [5] その他の制限: 関数を使い、動作を確認するための適切なmain関数も作成する 書き方が悪かった模様。 それぞれ別のプログラムとして作ってください。
Windowsでgcc。。。ずいぶんハイカラな環境でやってますね。
>>201 int f(int a){
int a10,a1;
if(a<10||99<a)return -1;
a10=a/10;a1=a%10;return a10*1;
}
>>202 void intary_rcpy(int v1[],const int v2[],int no){
int i;
for(i=0;i<no;i++)v1[i]=v2[no-i-1];
}
自分でmainを作ってくれ。
それから「書き方が悪かった模様」なんて他人事みたいにいうのはイク(・д・)ナイ
>>203 おいおい、201にバグがあるよ...まあいい。それは
>>201 への宿題ということで。
両方とも脳内コンパイルにつき動作保障しません。
>>201 それくらい自分でやれ
#include<stdio.h>
void num_input(int *i){
while(1){ scanf("%d%*[^\n]%*c",i);
if(((*i-99)<0)&&((*i-9)>0)) break; }
}
int main(void){
int num;
num_input(&num);
printf("2桁数字入力:%d,%d\n",num,(num/10)*(num-(num/10)*10));
return 0;
}
#include<stdio.h>
#define vip 3//要素数
void intary_rcpy(int v1[],const int v2[],int no){
int i;
for(i=0;i<no;i++) v1[i]=v2[no-i-1];
}
int main(void){
int num,i,v1[vip]; const int v2[vip];
for(i=0;i<vip;i++){
printf("v2[%d]=",i);
scanf("%d%*[^\n]%*c",&v2[i]);
}
intary_rcpy(v1,v2,vip);
for(i=0;i<vip;i++){
printf("v1[%d]=%d\n",i,v1[i]);
}
return 0;
}
>>201 こうかな…。
#include<stdio.h>
int get2(void) { int v;
do{ scanf("%d", &v); } while(1 != (int)(log(v) / log(10)));
return v;
}
int main(void) {
int r = get2();
printf("結果: %d", r%10 + r/10);
return 0;
}
あっかけ算かぁ…。でも既に回答済だからいいか…。
>>197 こういう問題見ると、「イギリスでは、こうです」てCM思い出すな。
日本の教育ってのは、大学に至ってまで小学生と同じなのかね。
教育者が間違った親切心を持っているのか、単に答えあわせを
簡単にしたいだけなのか。
210 :
166 :2005/12/03(土) 18:40:03
>>168 2次元配列からビットマップを作成する方法は習っていないのでちょっと分かりませんでした。
リア厨のときに習ってたBASIC使えばその方法で解けそうなんですけど、C言語は
つい最近大学で習い始めたばっかりなので…。
>>172 ,185
ありがとうございます。助かりました。
[1] 授業単元: cプログラミング
[2] 問題文:7文字程度の文字列の集合を対象としたクイックソートのプログラムを作成せよ
入力は data.txt ファイルを使用し、ソート結果は出力せず 要素の交換回数と実行時間を出力するようにせよ
また、同様の操作を実装したシェルソートのプログラムを作成せよ
入力ファイル(data.txt):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1190.txt ↑このファイルはデータ数が100個程度ですが、1万〜50万程の数を扱えるようにして下さい。
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語:c
[4] 期限: 月曜まで
お願いしますm(__)m 何か質問がありましたら仰ってください。
213 :
杏 :2005/12/03(土) 23:00:28
[1] 授業単元:情報処理U [2] 問題文:補間のプログラムを作りなさい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: [3.3] 言語:C++ [4] 期限:2006年12月05日12:00まで [5] その他の制限:ラグランジェ補間、スプライン補間を使わず、 初心者でも理解できるようなのをお願いします
214 :
杏 :2005/12/03(土) 23:10:49
すみません、間違えました。 『2005年の12月05日』までにお願いします。
216 :
デフォルトの名無しさん :2005/12/03(土) 23:15:28
>>213 >ラグランジェ補間、スプライン補間を使わず、
>初心者でも理解できるようなのをお願いします
直線補完はで決まり!
[1] プログラミング基礎 [2] 英単語が入力されたデータをアルファベット順に並べ替えよ。 [3] 環境 [3.1] Windows [3.2] VC++6.0 [3.3] C++ [4] 月曜提出ですが出来れば明日の朝までにお願いします。 [5] バブルソートしか習ってないのでそれを使うのだと思います。 データは apple table diff directory みたいに並んでいて制限は100単語です。 よろしくお願いします。
218 :
デフォルトの名無しさん :2005/12/04(日) 01:13:43
プログラミングの課題ですOTL 1,000,000円を年利 r %で預金し、そのまま預けぱなしにしておいたら何年で2倍になるか知るためのプログラムを書け。年利が何%か はキーボードから読み込むものとする。 もぅ何がなんだか。。。
>>217 1単語あたりの制限とかない?
酔っ払ってて動的メモリ確保やりたくない
>>218 計算方法は?
単純にr%分かけてきゃいいの?
220 :
217 :2005/12/04(日) 01:21:14
>>220 で、入力方法は?
って思ったけど俺C++使えないやwww
ダメじゃん
>>218 #include<stdio.h>
int main(void){
double kane=1000000.0,n,hon;
long nen=0;
hon = kane*2;
printf("で?金利何%?:");
scanf("%lf",&n);
while(hon>kane){
kane = kane*(1+n/100.0);
nen++;}
printf("%d年で2倍ですが何か?",nen);
return 0;}
うんこ
223 :
217 :2005/12/04(日) 01:47:12
入力方法は予めtxt形式で書かれたものを指定して読み込というものです。 あと本当はこれはあるプログラムの一部で、本来は英単語の後ろにスペース空けて 訳もついていますが、並べ替える部分がわからなかったので省略してしまいました。 もし関係あったらすみません。
strcmpで比較してバブルソートかな
二次元配列100個用意して
for文でまわすか
疲れててネムス
>>218 #include <stdio.h>
#define MONEY 1000000
int main(void){
int year;
double buff,interest;
scanf("%lf",&interest);
buff=MONEY;
for(year=0;;year++){
buff= buff*(1+interest/100);
if(buff>MONEY*2){
break;
}
}
printf("%d",year);
return(0);
}
バブルソートとか言っている時点でC++じゃねーよ。 質問者のレスみても分かるように、どう考えてもCのレベル。
229 :
217 :2005/12/04(日) 02:53:39
>>227 氏
自分の環境では動きませんでした…
コンパイルは出来ますが実行不可になります。
オブジェクト指向とか難しいことはちょっとわからなくて…こちらこそすみません。
よく配列で言われるアドレスやらポインタやらも未習でして。
普段大学ではcygwinを使用しているのですが、それと関係あるのでしょうか。
230 :
218 :2005/12/04(日) 03:36:39
みなさんありがとうございます、最近プログラミングを授業で始めたばかりなので あまり難しいことはやらないと思うのですが簡単なのがありませんか?
232 :
227 :2005/12/04(日) 04:21:47
#include<stdio.h> int main( void ){ double yokin = 1000000;// 預金。 double r;// 年利r。あとでキーボードから入力してもらう。 int year = 0;// 何年経過したかを数えるためのカウンタ。 printf("年利を入力してください。\n");// 入力を促す。 scanf("%lf", &r);// 年利をキーボードから入力してもらう。 while( yokin < 2000000 ){// yokin が 2000000 より少ない間(while)、 { } 内部を繰り返す。 yokin = yokin * ( 1 + r/100 );// yokin に「yokin * 年利」(1+〜云々は、年利をそのままかけたら減るってことわかるだろ?)を代入する。 year++;// 年数のカウンタを一年増やす。 } printf( "預金が2倍になるまでに %d 年かかります。\n", year);// 結果を表示する。 return 0; } これなら猿でもわかるだろ
猿にはわからんだろうがヒトならわかるはずだね。
235 :
218 :2005/12/04(日) 05:21:49
詳しい解説ありがとうございます、これなら さっきよりわかった気が・・・します。 最初からこんなに難しそうなの課題に出すなんてOTL
int とか doubleの意味がわからんのなら、 本を読むとか、解説サイトを見るとかして自分で調べとけ。
やってることは算数だろ。全然難しくねぇよ。
おまいらループ回すことしか思いつかんのか r = 100 のとき 1 年で 2 倍 r != 100 のとき n 年で (1 - (r/100)^(n+1)) / (1 - (r/100)) 倍 つまり r が与えられたとき 2 <= (1 - (r/100)^(n+1)) / (1 - (r/100)) となる n を求めればいい ここで 2 == (1 - (r/100)^(n+1)) / (1 - (r/100)) の場合の n について解くと n' == (log((2r/100) - 1) / log(r/100)) - 1 (解は整数とは限らないのでとりあえず実数で計算して n' とする) が得られる 与えられた r から n' を求めて n' を超える最小の整数 n を求める場合 n == (int)(n' + 1); つまり n == (int)(log((2r/100) - 1) / log(r/100)); で一回の計算で求まるじゃないか
>>233 >>238 常識的に考えたら毎年の利子は小数切捨てだと思うんだけど、
それだと小数の出てくる預金が出ることになりませんか?
241 :
デフォルトの名無しさん :2005/12/04(日) 07:53:06
C++についての質問です。 ビルドまではうまくいくのですが、実行時に "問題が発生したためa.exeを終了します。ご不便をおかけして申し訳ありません" という、エラー報告送信を聞くエラーがでます。 これはコード自体(単にプログラムの記述のミス)の問題なのでしょうか? それともメモリ不足などの問題なのでしょうか? 初歩的な質問で申し訳ありません。 ちなみにWindowsのMicrosoft C++です。 よろしくお願いします。
Microsoft C++とはまた古風な…
ぬるぽ
Microsoft Basicの親戚ですか?
ついでに、ソースを晒さないと具体的にはわからん。
多分
>>241 が全面的に悪い。
十中八九、プログラムのミス。
迷惑かけてるのはお前の方なのに OSに謝らせるなんて可哀想とは思わないか?
247 :
241 :2005/12/04(日) 08:02:36
回答ありがとうございます。 ビルドできるけど、実行できないようなプログラムのミスというのはどのようなものがありますか? 一概には言えないと思いますが、例でいいのでなにかあれば教えてください。
超たくさんありすぎる。ソース晒せないなら帰れ。 あと
>>1
char *buf;FILE*fp;fgets(buf,sizeof(buf),fp);
>>250 なにそのツッコミどころ満載のコード片は?
>>181-183 >グローバルに持っていったらN=800でもOKのようです。
おまいらそんな安直なことすんなよ
void fillitem(int **map, int mx, int my, int src, int dst)
{
static struct point2d{
int x,y;
}stack[N*N];
・・・以下略
の方がいいだろ?
まあ俺もmalloc/連結リストに賛成だが。
スタック気にするくらいならmallocの戻り値チェックもしろよな。
はじめてだ……
こんなに「ぬるぽ」「ぬるぽ」いっても一度も「ガッ」されないなんて。
>>247 OSさんに謝れ!!そしてガッ
>>235 プログラミング初心者対象の授業だと、大体2,3回授業を受けた後に出される程度の課題かな
プログラミング未経験で、1回目の授業でこんな課題を出されりゃちょっと辛いかもな
3,4回受けてこれが難しいと感じるなら、勉強しなおしておいた方がいいぞ
>>247 1 scanfの指定子が間違っている
2 アドレスが入ってないのにポインタ使っている
俺はこれくらいしかシラネ
配列の要素数を越えた位置を扱おうとしているとか C++でそんなことがあるのかどうか知らんがね
ある
なぁ、問題丸投げしないで考えて分からなかったらここで聞けよな。 じゃないと、プログラミング技術あがらないぞ? コードは書けば書くほど良い。
>>238 log 使うんなら単に n' = log(2)/log(1+r) でいいと思われ。
262 :
261 :2005/12/04(日) 11:33:31
補足:ここで使った r はパーセントじゃなくて比の数(5% なら r=0.05)ね。
263 :
218 :2005/12/04(日) 11:33:45
色々とアドバイスありがとうございます、教科書と皆さんの解説を調べつつ 少し勉強したいと思います。 教科書が少しわかりくいのですが皆さんはどのような参考書? を読んでいるのでしょうか? またお勧めの参考書などがあれば教えていただけるとうれしいです。
>>261 n' = log(2)/log(1+r/100)
いきなりで申し訳ありません。 [1] プログラミング論U [2] 問題文: 演習3: 汎用クラス 汎用クラスを使って, (配列版スタック以外の) 何らかのデータ構造を定義し, 動作を確認してみよう。 データ構造は,線形リストを使ったスタック, キュー (queue; スタックとは逆 に, 最初に入れたデータが最初に取り出されるデータ構造。 待ち行列とも呼ば れる), 二分探索木など, 各自で自由に選びます。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 2.9 [3.3] 言語:C++ [4] 期限: 2005年12月5日11:30まで [5] その他の制限:C++を習い始めて二ヶ月の初心者です。C言語は一年ほど習いました。
269 :
デフォルトの名無しさん :2005/12/04(日) 12:31:42
[3] 環境 [3.1] OS: Windows[3.2] コンパイラ名とバージョン: VC 5.0 [3.3] 言語: C++ [4] 期限:明日下のプログラムでエラーがでる意味がわかりません。 よろしくお願いします。 #include <fstream> #include <iostream> #include <math.h> using namespace std; int main() {double Cu[19600][101]; for(int t=0; t<=100; t++){ int i = 0; for(int sh=0; sh<=47; sh++){ for(int mi=sh+1; mi<=48; mi++){ for(int lo=mi+1; lo<=49; lo++){ Cu[i][t] = i; i = i + 1; } } } } return 0; }
>>269 C++はさっぱりわからんが、全角スペースを消せばとりあえずエラーはでないぞ?
>>269 どんなエラーが出たかしらんが、とりあえずプログラムが間違ってるんだろうな。
272 :
269 :2005/12/04(日) 12:45:33
ビルドはできますが、実行時にエラーがでます。 というか、強制終了されます。
これだと実行時にもエラーはでないはずだ 一部だけを抜き出して書いてるんじゃないのか?
>>268 まずデータ構造を自由に選んでくれ。さもなくば絶対お前が書いたと思われないくらいの変態的なものを書くが?
>>269 配列が大きすぎる。
・VCのプロジェクトの設定でスタックサイズを増やす。
・VC限定の手法でコード内にスタックサイズを明示してやる。
・どうせmain()が二重に呼ばれることは無いから静的にする。
・真面目に動的確保にする。
・vectorなどのコンテナを使う。
お好きな対策をどうぞ。
>>272 配列のサイズが大きすぎてまともに確保できてないんじゃね?
>>269 配列Cu[][]は、newで確保して、最後にdeleteするか、
std::auto_ptr<std::auto_ptr<double> >に入れるとか。
>>277 new []で確保したものをdeleteで消すのはご法度。
279 :
269 :2005/12/04(日) 12:58:52
やっぱりそうですか・・・ VCはちょっと触れたくないので、動的確保でがんばります。 ほんとに助かりました。ありがとうございました☆
>>278 >>279 悪い。std::auto_ptrは配列には使えないんだった。
boost::shared_arrayでも使ってくれたまい。
>>280 boost::scoped_arrayもあるぞと言ってみる。
>>283 templateを使っていればいいんじゃないかな。
285 :
デフォルトの名無しさん :2005/12/04(日) 13:29:10
213と微妙にかぶるんですが… [1] 授業単元:プログラミング演習U [2] 問題文:最小二乗近似を使って補間せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:12月06日12:00まで [5] その他の制限:C++を習い始めて半年の初心者です。
>>281 STLのコンテナに入れないのなら、scoped_atrでもいいね。小さいし速いし。
ところで、一つ分からない事があるんだが、scoped_ptrなりshared_ptrで
二次元配列を確保するには、どうすればいいんだろ?
287 :
もう投げたい :2005/12/04(日) 13:53:04
>>286 const int M = 19600, N = 101;
boost::shared_array<boost::shared_array<double> > Cu(new boost::shared_array<double>[M]);
for (int i = 0; i < M; i++)
Cu[i].reset(new double[N]);
スレ違いだな。
>>269 VCの標準スタックサイズは1MB
対してdouble cuは4*19600*101 ≒ 8MB
>>289 サンクス。これなら、delete[]の必要がありませんね。
コンテナに入れないのであれば、boost::scoprd_arrayでいいわけですね。
これで行ってみます。
単にRAIIがやりたいんだったらBoost.MovePtrを使えば 何も指定しなくても勝手にdelete[]してくれる
295 :
もう投げたい :2005/12/04(日) 15:22:50
>>294 ありがとうございます!あとはやってみます。感謝感激です◎
>>269 #include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
static double Cu[19600][101];
for(int t=0; t<=100; t++){
int i = 0;
for(int sh=0; sh<=47; sh++){
for(int mi=sh+1; mi<=48; mi++){
for(int lo=mi+1; lo<=49; lo++){
Cu[i][t] = i;
i = i + 1;
}
}
}
}
return 0;
}
なんかでかいサイズの配列をスタティックエリアに配置するのがはやってるな
>>295 バグ発見した。
if (i > siml_time / 2 && queue_length && rand() < RAND_MAX * m * 2) /* 前半はサービス停止、後半は倍速 */
を
if (i >= siml_time / 2 && queue_length && rand() < RAND_MAX * m * 2) /* 前半はサービス停止、後半は倍速 */
にして欲しい。
siml_timeが大きい時はそんなに気にならないが、小さい時で偶数の時は明らかに
おかしいとわかる。
300 :
デフォルトの名無しさん :2005/12/04(日) 16:50:11
[1] 授業単元: プログラミング演習 [2] 問題文: 例の様に、ポインタの配列を用いて3 次元の配列cube[3][3][3]をつくる。 要素に順に{0〜26}のデータを代入し、cube[1][1][1]の値を出力せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: lcc win [3.3] 言語: C [4] 期限:火曜日 [5] その他の制限: 例とは、 #include <stdio.h> int main(){ int a[4][4]; int *c[4]; int c0[4]={0,1,2,3}; int c1[4]={4,5,6,7}; int c2[4]={8,9,10,11}; int c3[4]={12,13,14,15}; c[0]=c0;c[1]=c1;c[2]=c2;c[3]=c3; printf("%d %d\n", c[3][3], sizeof c); return 0;} このようなプログラムです。 初心者でもできるような簡単なプログラムでお願いします。
>>300 #include <stdio.h>
int main(){
int cube[3][3][3], i, *p = (int*)cube;
for(i = 0; i <3*3*3; i++) p[i] = i;
printf("%d\n", cube[1][1][1]);
return 0;
}
>>301 ポインタの配列じゃないとダメだぞ。
それに、コンパイルエラー出ないか?それ。
あ、キャストで強引にエラー消してるのか。でもダメだな。
305 :
217 :2005/12/04(日) 17:27:42
>>232 氏
遅くなりましたがありがとうございました。
メモリ云々はわかりませんでしたが、ソート部分等を参考にしたら出来ました。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 7×7の2次元配列の中に1〜49の数値を入力し、実行結果を出力しなさい。 配列の初期値は全て0とする。 ただし、縦、横、斜めの各列の数値の合計が同じになるように入力しなさい。 数値の入力順及び数値の入力を開始する列は自由とする。 [3] 環境 [3.1] OS:WindowsXp [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C++ [4] 期限:2005年12月6日10:00まで [5] その他の制限:C言語は8ヶ月習いましたが、配列がいまいちよく解りません。 お手数ですが、よろしくお願いします。_(_ _)_
int i,j,k; static int a[N][N]; k=0; for(i=-N/2;i<=N/2;i++) for(j=0;j<N;j++) a[(j-i+N)%N][(j+i+N)%N]=++k from C言語による最新アルゴリズム(奥村晴彦著)
[1] 授業単元:C言語U [2] 問題文(含コード&リンク):char型が表現できる全ての整数を、2進・8進・16進で表示するプログラムを再帰を使い作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC++6.0 [3.3] 言語:C [4] 期限:2005年12月6日まで [5] その他の制限:特に無し よろしくお願いします
>>309 char型は負数も扱えるわけだが、その表示はどうすればいい?
>>309 #include <stdio.h>
int pow10(int i){
if(i==0)return 1;
return 10*pow10(i-1);
}
int dec2bin(unsigned char d){
long b=0,i=0;
while(d>0){
b+=(d%2)*pow10(i);
d=(int)(d+0.5)/2;
i++;
}
return b;
}
void c_show(unsigned char d){
printf("10(%03d) = 2(%08d) 8(%03o) 16(%02x)\n",d,dec2bin(d),d,d);
if(d<255)c_show(d+1);
}
int main(){
c_show(0);
return 0;
}
>>309 負数の表現が相当インチキだが,気に食わなかったら言ってくれ.
int t[]={2,8,16};
char *s = "0123456789ABCDEF";
void g(int n, char c) { if (c > 0) g(n, c/t[n]), putchar(s[c%t[n]]); }
void h(int n, char c) { if (n+1) { printf(" %s", c<0?"-":""), g(n, c>0?c:-c), h(n-1, c);} }
void f(char c) { if (c > -0x7f) f(c-1), c ? h(2,c) : printf(" 0 0 0"), putchar('\n'); }
int main() { f(0x7f); }
>>309 311 に倣って unsigned char バージョン.
int t[]={2,8,16};
char *s = "0123456789ABCDEF";
void g(int n, unsigned char c) { if (c) g(n, c/t[n]), putchar(s[c%t[n]]); }
void h(int n, unsigned char c) { if (n+1) { putchar(' '), g(n, c>0?c:-c), h(n-1, c);} }
void f(unsigned char c) { if (c) f(c-1), c ? h(2,c) : printf(" 0 0 0"), putchar('\n'); }
int main() { f(0xff); }
>>313 unsigned char なら c で正負場合わけいらなかった. h を以下に訂正.
void h(int n, unsigned char c) { if (n+1) { putchar(' '), g(n, c), h(n-1, c);} }
315 :
211 :2005/12/04(日) 19:43:14
>>211 です
>>266 のが全く分からんとです
もっと一般的な初心者に分かるコードをお願いしますm(;__)m
316 :
309 :2005/12/04(日) 20:11:45
解答ありがとうございました
[1] 授業単元:プログラミング論 [2] 問題文(含コード&リンク): 10個の1から100までの整数値を入力し、その整数値を (あ) 0以上25以下 (い) 26以上50以下 (う) 51以上75以下 (え) 76以上100以下 の四つに分類し、そのれぞれの範囲にある整数値の個数を表示するプログラムを作成せよ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] 言語:C言語 [4] 期限:12月5日午後5時まで すいません、さっぱりわからなくて、よろしくおねがい致します。
#include <stdio.h> int main(){ int a1,a2,a3,a4; int i,d; a1=a2=a3=a4=0; for(i=0;i<10;i++){ scanf("%d",&d); if(0<=d&&d<=25) a1++; if(26<=d&&d<=25) a2+; if(51<=d&&d<=75) a3+; if(76<=d&&d<=100) a4+; } printf(" 0- 25:%d\n",a1); printf("26- 50:%d\n",a2); printf("51- 75:%d\n",a3); printf("76-100:%d\n",a4); return 0; }
>>318 a2+; -> a2++; に書き直してくれ。他も同じように
#include <stdio.h> int main(){ int a1,a2,a3,a4; int i,d; a1=a2=a3=a4=0; for(i=0;i<10;i++){ scanf("%d",&d); if(0<=d&&d<=25) a1++; if(26<=d&&d<=50) a2++;/* こぴぺの弊害が... */ if(51<=d&&d<=75) a3++; if(76<=d&&d<=100) a4++; } printf(" 0- 25:%d\n",a1); printf("26- 50:%d\n",a2); printf("51- 75:%d\n",a3); printf("76-100:%d\n",a4); return 0; }
>>317 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int main(){
int ans[4] = {0}, cnt = 0;
char buf[1024], *p;
while(1){
printf("input nums> ");
if( fgets(buf, sizeof(buf), stdin) && NULL != (p = strtok(buf, " \t\n,"))){
while( p ){
int n = atoi(p);
assert(n > 0 && n <= 100);
if(n <= 25) ans[0]++; else if(n <= 50) ans[1]++;
else if(n <= 75) ans[2]++; else if(n <= 100) ans[3]++;
p = strtok(NULL, " \t\n,");
if( ++cnt >= 10 ) goto BREAK;
}
}
}
BREAK:
{
int i;
for(i = 0; i < 4; i++) printf("%3d以上%3d以下 : %d\n", i*25+1, (i+1)*25, ans[i]);
}
return 0;
}
322 :
デフォルトの名無しさん :2005/12/04(日) 20:48:23
[1] 授業単元:情報技術基礎(実教出版) [2] 問題文(含コード&リンク):キーボードから「c」を入力した時に「OK!」、それ以外の時には「NG!」と出力するプログラムをつくりなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:BCC [3.3] 言語:C [4] 期限:今日中
>>322 #include<stdio.h>
int main(void)
{
char a,b;
a='c';
scanf("%c",&b);
if(a==b){
printf("OK!\n");
}
else{
printf("NG!\n");
}
return 0;
}
>>322 #include <stdio.h>
int main(){
puts((int)'c' == getchar() ? "OK!" : "NG!");
return 0;
}
325 :
322 :2005/12/04(日) 21:03:28
お前俺の書き込み読んでないだろ 配列やってないなら2文字以上の場合は考えなくてもいいって言ったじゃないか
>>325 #include <stdio.h>
int main(){
puts((int)'c' == getchar() && (int)'\n' == getchar() ? "OK!" : "NG!");
return 0;
}
EOFってgetchar()で戻り値帰ってこないの?
330 :
329 :2005/12/04(日) 21:14:18
あ、そうか。EOFならOKじゃないのか?ってことね。 考えてなかった。
ああでもキーボードから入力した場合か それならEOFは考えなくてもいいのか
unixならそれも可能だけど、BCCって言ってるし。まぁいっしょ。
>>327 (int)'c' == getchar() とかじゃなくてscanfを使ってもらえませんか?
もう寝るので、勝手にやって。
>>322 条件後出しテラウザスとだけ言っておこう。
条件後出しする奴に答えると、これからもそういうのに解答しないといけなくなるからな。
338 :
322 :2005/12/04(日) 21:30:23
マルチかよ
>>315 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define __BUFFER_LENGTH 30
#define __DATA_SIZE 100000
int swap_count = 0;
void str_swap(char **data,int l,int r){
char* temp;
temp = data[r];data[r] = data[l];data[l] = temp;
swap_count++;}
void quick_sort(char** data, int l, int r){
int pivot = (l+r)/2,i=l,j=r;
while(i<j){
while (strcmp(data[i],data[pivot])<0)i++;
while (strcmp(data[pivot],data[j])<0)j--;
if (i >= j)break;str_swap(data, i++, j--);}
if(l < i-1)quick_sort(data,l,i-1);if(j+1 < r)quick_sort(data,j+1,r);}
int main(){
char buf[__BUFFER_LENGTH];
char **data = (char**)malloc(sizeof(char*)*__DATA_SIZE);
int i,wc = 0;
while((fgets(buf,30,stdin))!=NULL){
data[wc] = (char*)malloc(sizeof(char)*(strlen((buf)+1)));
sscanf(buf,"%s\n",data[wc++]);}
quick_sort(data,0,wc-1);
printf("swap count = %d\n",swap_count);
for(i=0;i<wc;i++)free(data[i]);free(data);
return 0;}
うっは、前スレの最後に書いてたのかよwww しょうがねーな。解決してやるか。
343 :
342 :2005/12/04(日) 21:37:52
int main(int argc, char* argv[]){ char c,d; scanf("%c%c",&c,&d); if(c=='c' && d=='\n'){ printf("OK\n"); }else{ printf("NG\n"); } return 0; }
344 :
322 :2005/12/04(日) 21:37:53
因みに高1レベルです。
というか、回答者の回答に満足できないなら 自分でやれ、といいたい
Cに高校レベルとか大学レベルとかあるのかね、昨今は。
>>322 の脳みそが小1レベル、ということはよくわかった
348 :
322 :2005/12/04(日) 21:40:46
釣りでした
>>347 謝れ!! 小学一年生に切腹して謝れ!!
350 :
342 :2005/12/04(日) 21:42:13
orz 前スレかと思ったら違うじゃんか... やって損した。
ID無いと荒れるな
353 :
342 :2005/12/04(日) 21:46:07
354 :
322 :2005/12/04(日) 21:47:13
引数無しでお願いします。
本人、偽者を問わず これ以降はスルーの方針で
356 :
322 :2005/12/04(日) 21:50:50
できないんですか?
どれが偽物でどれが本人? 俺が本人。
俺がお前で
お前が俺
角川かよ
ワラタ
362 :
322 ◆AAAAAiFA6M :2005/12/04(日) 21:54:30
また一週間後ぐらいに来ます。 もちろん、違う問題ですけどね
来るな。
多分ものすごいすぐできそうだけど もう酔っ払って眠いから明日帰ってくるまでに誰もやってなかったらやるよ
368 :
218 :2005/12/05(月) 00:13:50
ちょっと教科書でわからないことがあるのですがmain(void)このvoidは 引数のない関数の定義となっているのですがよくわかりません、 重要な指定なのでしょうか?
main() とやってみてから聞け
370 :
218 :2005/12/05(月) 00:21:29
main()でやってみてもできました、あまり重要では ないということなのでしょうか?
いいや、重要だ。なぜ重要かこのスレ的に答えてあげよう。 main(void) と書くべき所を main() と書いて提出すると 減 点 の 対 象 と な る こ と が あ る !
int main(void) main(void) int main() main() どれだろうが別に教授は気にしないと思うがな
コンパイラによっては警告をだすがな
375 :
デフォルトの名無しさん :2005/12/05(月) 00:42:07
voidは引数がないことを明示的に宣言すること。 コンパイラがチェックしなくても、引数がないときはvoidとしておく習慣をつけたほうがいいな。
376 :
218 :2005/12/05(月) 00:43:31
アドバイスありがとうございます、引数がない〜としか 書いてないのですが具体的に引数とはどんなものなのでしょうか?
377 :
デフォルトの名無しさん :2005/12/05(月) 00:54:51
>>376 たとえばmain関数でコマンド引数を受け取りたいときは
void main(int argc, char *argv[])
と定義します。
>hoge 1 2
と入力すると、argc=2でargv[0]="1"、argv[1]="2"が格納されてmain関数
に飛びます。
379 :
デフォルトの名無しさん :2005/12/05(月) 01:02:11
[1] 授業単元: c言語 [2] 問題文:ファイル入力で文字列を読み込み 、 マージソートor挿入ソートし、要素の交換回数を標準出力するプログラムを作成せよ [3.1] Linux [3.2] gcc [4] 期限: 無期限 [5] その他:マージソートでも挿入ソートでも両方実装してるものでもいいです。 初心者でも見て分かるようなコードであればありがたいです。
381 :
377=379 :2005/12/05(月) 01:05:24
一個ずれてた!
>hoge 1 2
と入力すると、argc=3でargv[0]="hoge"、argv[1]="1"、argv[2]="2"が格納されてmain関数
に飛びます。
そうですよね!
>>378
>>379 環境依存だけど、一般的にはargv[0]には実行ファイル自身のパスが入ります。
main関数の返値はintです。
383 :
377=379 :2005/12/05(月) 01:09:26
384 :
378 :2005/12/05(月) 01:15:32
>>381 あまりにもありがちな間違いばかりなんで悪意あるレスかと誤解してた。
きつい言い方してごめんね。おかしいというとこは
>>382 のいう通り。
ただし環境依存というよりは標準Cならそうに決まってるということです。
>>380 (1)ファイル名は?
(2)ソートする対象は文字?それとも行?
(3)(特にこのスレで質問するような)初心者ならマージソートや挿入ソートの
コードを見ても分からないと思うんだが君は分かっているか?
386 :
382 :2005/12/05(月) 01:17:33
>>384 あれ、標準で決まってましたっけ(;´Д`)
てっきり処理系依存かと・・・
薄知スマソ。
387 :
380 :2005/12/05(月) 01:19:42
(1)なんでもいいですが・・・じゃあDATA.txtで (2)アルファベットがこんなふうに入ってます↓ jhuch rwuovghcuw oikhxtyfr fcuhgy hiufhw ・・・ (3)それは大丈夫です。コメントで関数の操作をちょいと教えてくれたらうれしいです。
388 :
377=379 :2005/12/05(月) 01:20:12
>>384 いえいえ!
私はしばらくCのコーディングをしていないものですから、
つい、いいかげんなことを書いてしまいました。
ご指摘ありがとうございます。
389 :
385 :2005/12/05(月) 01:26:32
>>387 もう1つ質問。CかC++か。それによって処理量がかなり違う。
390 :
384 :2005/12/05(月) 01:33:59
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 1つの文字列を文字型ポインタで初期化し、別に入力した文字列と比較します。 入力した文字が、初期化した文字列より大きい場合は”LARGER”と出力し、 小さい場合は”SMALLER”と出力するプログラムを作りなさい。 ここでは、2つの文字型ポインタs,t引数として、2つの文字列を比較し、以下の値を返す関数(mycmp) を作り、main関数ではその関数を呼び出すようにしなさい。 sの指す文字列>tの指す文字列 ならば正の値を返す sの指す文字列<tの指す文字列 ならば不の値を返す sの指す文字列=tの指す文字列 ならば0を返す [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2005年12月5日提出です・・。 [5] その他の制限: 配列、ポインタの基礎、標準入出力くらいしかやってません・・。 よろしくおねがいします。もうボロボロです・・・。
>>391 mycmpは標準のstrcmpと同等みなしていいか?
393 :
218 :2005/12/05(月) 01:47:08
レスを参考に教科書と照らし合わせて作ってみました、 #include <stdio.h> int main() { double yokin=1000000.0,hon; double i; int year=0; hon = yokin*2; printf("年利は何%ですか?:"); scanf("%lf",&i); while(hon>yokin) { yokin = yokin*(1+i/100.0); year++; } printf("%d年で2倍です。",year); return 0; } なにかここがダメだ〜ってところはあるでしょうかOTL
さっきから気になってるんだが、貴様(ら)は金を小数で扱うつもりか?年は整数で扱っておいて。 あと"2倍です。"が正しいということはほとんどあり得ないだろうから"初めて2倍以上になります。"が適切かと思う。
395 :
デフォルトの名無しさん :2005/12/05(月) 01:56:32
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 整数データがn個は行っている配列data[]に、整数a以上、 整数b以下のデータがいくつあるかを返す関数、int countbetween(int data[], int n, int a, int b)を記述せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 今日の夕方5時まで [5] その他の制限: 特にありません。 よろしくお願いしますm(_ _)m
int countbetween(int data[],int n,int a, int b){ int i,c=0; for(i=0;i<n;i++){ if(a[i]>=a && a[i]<=b)c++; } return c; }
a[i]じゃなくてdata[i]だな これだから脳内コンパイラは・・・
398 :
392 :2005/12/05(月) 02:05:11
>>391 ま、いいや。酔ってるからけど、多分こんな感じ。
#include <stdio.h>
int mycmp(const char *s, const char *t)
{
unsigned char uc1, uc2;
while (*s != '\0' && *s == *t) s++, t++;
uc1 = (*(unsigned char *) s);
uc2 = (*(unsigned char *) t);
return uc1 < uc2 ? -1 : uc1 > uc2;
}
int main(void)
{
const char *compared = "hoge";
char input[1024];
int result;
printf("input?:"); scanf("%s", input);
result = mycmp(input, compared);
if (result > 0)
printf("LARGER");
else if (result < 0)
printf("SMALLER");
}
399 :
デフォルトの名無しさん :2005/12/05(月) 02:05:42
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): (1)2が1番小さい素数、3が2番目に小さい素数、、、 i番目に小さい素数を返す関数nthprime(i)をつくり、 500番目に小さい素数を求めよ。 ただし関数nthprimeは再帰呼び出しを用いて作成すること (2)入力された整数n以下の素数の個数を求める関数prcount(n)をつくり、 1000以下の素数の個数を求めよ。 ただし関数prcountは再帰呼び出しを用いて作成すること [3] 環境 [3.1] OS: WIN XP [3.2] コンパイラ名とバージョン: borland [3.3] 言語: C [4] 期限: 12月9日まで [5] その他の制限: 効率は特に望みません。 初心者でも分かる簡単なプログラムでお願いします。
もう素数系はあきたよ めんどいから(2)だけ #include <math.h> int prcount(int n){ int i; if(n==3) return 2; if(n%2 == 0 ) return prcount(n-1); for(i=3;i<=sqrt(2)+1;i++){ if(n%i==0)return prcount(n-2);} return 1+pcount(n-2);}
>>398 すいません、ありがとうございます。
しいごとが早くて助かりました!
402 :
392 :2005/12/05(月) 02:17:18
>>401 それは「酔ってるからけど」へのあてつけか?ま、いいけど。
403 :
400 :2005/12/05(月) 02:19:34
int prcount(int n){ int i; if(n<2) return 0; if(n==2) return 1; if(n==3) return 2; if(n%2 == 0 ) return prcount(n-1); for(i=3;i<=sqrt(n)+1;i+=2){ if(n%i==0)return prcount(n-2);} return 1+prcount(n-2);} 適当すぎた
404 :
218 :2005/12/05(月) 02:19:40
return 0;とは関数から値を返すとなっているのですが 抜いてやってみても出来ることができました、具体的には どのような意味があるのでしょうか?
405 :
デフォルトの名無しさん :2005/12/05(月) 02:22:03
>>397 さん、ありがとうございます。
>>397 さんのプログラムをちょっといじって作ってみたんですが…
int countbetween(int data[], int n, int a, int b)
{
int i, count = 0;
printf("整数の個数:"); scanf("%d", &n);
for(i = 0; i < n; i++){
printf("NO.%d", i + 1); scanf("%d", data[i]);
printf("aの値:"); scanf("%d", &a);
printf("bの値:"); scanf("%d", &b);
if(data[i] > a){
if(data[i] < b){
count = count + 1;
}
else{
count = count;
}}
else{
count = count;
}}
return count;
}
これでも平気でしょうか?
main内でさっきからエラーが出てるのですが…。
406 :
デフォルトの名無しさん :2005/12/05(月) 02:23:01
すいません、mainの方も載せておくの忘れてました…_| ̄|○ int main(void) { extern int data[]; int i; printf("%d個\n",countbetween(data[i])); return 0; } エラーがどうしても解決できないので、おねがいしますm(_ _)m
>>404 C++では、main関数に限りreturn 0;を省略することが出来る。
VC++でコンパイルしているなら、デフォルトのコンパイルはC++として行われる(拡張子がcppなら)ので
抜いても警告が出ないのだと思われ。
0を返すのは正常終了の意
408 :
387 :2005/12/05(月) 02:27:46
>>404 俺は
>>407 ではないが補足。
ISO/IEC 9899:1999というC言語の最新の(ただしその全ての機能を実装
しているコンパイラは少ないが)国際規格によれば、C言語でも
>>407 と同じ
意味を持つ。すなわち、returnに行き着くことなくmain関数の}にたどり着いた
場合にはreturn 0;と同じ意味を持つ、と決められている。
410 :
385 :2005/12/05(月) 02:29:44
>>408 んじゃメンドクサイからやめとく。誰かよろしく。
>>405 なにそれ・・・
ちょっといじったどころか別物じゃん
改悪されすぎ・・・
>>409 上のほうにクイックソート版の同じようなのがあるぞ
>>405 俺は
>>379 じゃないけど
突っ込みどころ多すぎ
まず
printf("整数の個数:"); scanf("%d", &n);
for(i = 0; i < n; i++){
printf("NO.%d", i + 1); scanf("%d", data[i]);
printf("aの値:"); scanf("%d", &a);
printf("bの値:"); scanf("%d", &b);
はmain関数内にあるべきだし、そもそもmain関数内の変数配列dataの要素数が宣言されていない
countbetween関数の呼び出しにしても定義では
int countbetween(int data[], int n, int a, int b)
となっているにも関わらず、最初のdataしか引数に与えてない上、いきなり定義されてないi番目の要素を渡している
関数に配列を渡す場合は配列の最初の要素のポインタ(&data[0]って書くかdataと書く、普通はdata)
を渡さないといけない
414 :
デフォルトの名無しさん :2005/12/05(月) 02:34:45
>>411 すいません、やっぱりいじりすぎでしたよね_| ̄|○
あとで見てすぐに分かるように書いたんですけど、
やっぱこんなんじゃダメですよね。
スレ汚しすいませんでした_| ̄|○
>>414 int main(void)
{
int* data;
int n,a,b,i;
printf("整数の個数:");scanf("%d", &n);
data = (int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++){printf("NO.%d:",i+1);scanf("%d", &data[i]);}
printf("aの値:");scanf("%d", &a);
printf("bの値:");scanf("%d", &b);
printf("%d個\n",countbetween(data,n,a,b));
return 0;
}
いじるならサブルーチンじゃなくてメインをいじれ
416 :
409 :2005/12/05(月) 02:48:30
>>380 マージソートは普通の実装なら「要素の交換」は行わないんだが。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 適当な長さの文字列を初期設定として設定し、 sent[100] = {"This is the test program ...... キーボードから何か文字列を入力して、入力した 文字列が初期設定として設定した文字列(上の例ではsent) に含まれるかどうか判定するプログラムを strchrを 使って作りなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2005年12月10日12:00まで [5] その他の制限: 特にありません。よろしくお願いします。
420 :
380 :2005/12/05(月) 08:50:39
>>418 何故か実行するとエラーメッセージが出るとです・・・
コンパイラは通ります
>>420 "data.txt"という、100行で、一行255文字以内のデータを入れたファイルが
ないとエラーが出るよ。
>>421 高々100行 高々255文字ね.自分が用いるファイルにあわせて適当に変えてください.
そっちも可変にしろ,といわれたら,ちょっと頑張んないと駄目ぽ.
[1] 授業単元: プログラム入門 [2] 問題文(含コード&リンク):次のプログラムの配列版とポインタ版を作成せよ。ただし各関数は 指定された書式に従って呼び出されるものとし、それにあわせて関数の戻り値および 引数を設定すること ・点の座標値(x,y)が要素数2の配列で管理されるとき、2つの点a,bを結ぶ直線上 にあるそれらの中点cの座標を求める関数midp()を定義せよ。x,yは標準入力から 入力するとする。 (配列版)書式:void midp(double a[] , double b[] , double c[]) (ポインタ版)書式:void midp(double *a , double *b , double *c) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:12月5日夜8時 長文で申し訳ないですが、よろしくおねがいします。
>>419 #include <stdio.h>
#include <string.h>
int main(void)
{
char sent[100] = {"This is the test program"};
char buf[256], str [256];
char* p = sent;
char* q = str;
printf("検索ワード入力 :");
fflush(stdout);
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%s", str);
while ((p = strchr(p, *q)) != NULL)
{
while (*++q != '\0')
{
if (*++p != *q)
{
break;
}
}
if (*q == '\0')
{
printf("%s は見つかりました。", str);
break;
}
q = str;
}
return 0;
}
425 :
420 :2005/12/05(月) 10:11:53
>"data.txt"という、100行で、一行255文字以内のデータを入れたファイルが >ないとエラーが出るよ。 data.txtの中はこんな感じです ujyhtgfred fefdir jrehifj fjoi3ujf ・・・ ・・ (100行くらい) #define SIZE 100→#define SIZE 10000 と変えてみたらエラーは出なかったのですが実行しても なーんにも出力されません orz 何故に・・・。 キッチリ100行とかにしないといけないとか?そんな感じですかね
426 :
デフォルトの名無しさん :2005/12/05(月) 10:32:13
1] 授業単元: C言語 [2] 問題文(含コード&リンク): 以下のクラス Visible と Point を派生して, クラス VisiblePoint を実装して下さい. クラス Visible の get_str() はオブジェクトの内容を文字列として返すメンバ関数であり, VisiblePoint はこれをオーバーライドして実現します. これを実行するためのmain文も書いてください。 #include <iostream> #include <string> using namespace std; class Visible { public: Visible() {} virtual ~Visible() {} virtual string get_str() const = 0; virtual void show () { cout << get_str() << endl; } }; class Point { protected: int x; int y; public: Point(int a=0, int b=0) { x = a; y = b; } virtual ~Point() {} virtual int get_x() const { return x; } virtual int get_y() const { return x; } }; [3] 環境 [3.1] OS: XP[3.2] コンパイラ名とバージョン: Microsoft Visual Studio[3.3] 言語: C++ [4] 期限: 12月12日 [5] その他の制限: これは多重継承の課題です。
>>426 オブジェクトの内容を文字列として返す、って所がわからん。
もしかして
cout << "x = " << vp.get_x() << ", y = " << vp.get_y() << endl;
のような出力を string に入れて返すという事か?
あと、public継承してるから、VisiblePoint内の //void show() { cout << get_str() << endl; } //int get_x() const { return x; } //int get_y() const { return y; } この三行はオーバーライドしなくてもよい。コメントアウトするか、 ばっさり削除してもよい。
432 :
425 :2005/12/05(月) 12:46:36
>>427 実行してもなにも出力されません orz
marge < data1_5 みたいにファイルを選べるようにできませんかね?
あと言い忘れましたが、一行は8文字程度です
でも行数は1万から50万行あります
ファイルから可変長可変個の文字列を読み込むとき 配列を使うのは愚の骨頂 スワップする際もstrcpyでコピーするのではなく アドレスを交換したほうがいい そうすりゃ文字列の長さぶんだけバッファ確保してもエラーはおきない ファイル一行増えるごとにreallocするのがいやなら 1000行とかごとにやればいい こうすりゃファイルの長さも単語の長さも気にしなくていい
>>432 このプログラムは、再帰呼び出しの数が多分log(SIZE)に比例している
と思うので、SIZEが大きくなると、急激ではなくなだらかとは言え、増加します。
私の環境(VC7.1)では、SIZE=500000、LEN=9をエラーなく実行するためには、
プロパティ→リンカ→システム→スタックサイズの設定とスタックのコミットサイズを
それぞれ 120000000(約115MB程度) にして、ようやく動きました。ヒープの方は、
デフォルトの 1MB で十分でした。Debugモードでの話です。Releaseだとまた
違ってくるかも知れません。
425さんがLinux上のgccを使っておられるとの事なので、スタックサイズの
オプションを調べて、大きくしてみてください。
データを標準入力から入れるなら、fopen()とfclose()を取り除いて、fpを
stdin にすればそのまま行けます。
>>435 最適化すると、ローカル変数が消費するスタックを大幅に減らせることは覚えておくといい。
>>436 しかしそれに依存したプログラムを書くことはやめておくといい。
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
四桁の乱数を発生させ(プレーヤーには見えない)12回以内で四桁の数字を
当てる、HIT&BLOWゲームを作りなさい。
乱数は、重複してはならないものとする。
数字をすべて当てたとき、"正解です"と表示、正解も表示し、
ゲームを終了する。
12回を超えたときは"残念でした"と表示、正解も表示し、ゲームを終了する。
乱数による四桁の数字の発生、入力された数字のHIT数とBLOW数の判定は
それぞれ関数として作成しなさい。
出力例 :
**** ←プレーヤー入力
???? ←見えない
HIT = 1 BLOW =1
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: bcc
[3.3] 言語: C
[4] 期限: 2005年12月12日10:00まで
[5] その他の制限: 条件:特にありません。
ttp://www.harukitchen.com/programming/src/hit.c ↑近いのは、ここにありました。よろしくお願いします。
439 :
デフォルトの名無しさん :2005/12/05(月) 17:34:23
[1]C言語 [2] #include <stdio.h> int main(void) { int i; int vc[5] = {10, 20, 30, 40, 50}; int *ptr; ptr = vc; for (i = 0; i < 5; i++) { printf("*(ptr+%d) = %d\n", i, *(ptr+i)); } return 0; } 課題1:int ptr[5]; に変更したプログラムを書く 課題2:int (*ptr)[5]; に変更したプログラムを書く [3]環境 [3.1]Windows [3.2] [3.3]C [4]できるだけ早くやってもらえれば光栄です。PCについて無知な者なのでお願いしますm(__)m [5]文字列
CreateMainWindow(600,550,"クライアントとサーバーを通信する",hInstance,nCmdShow,(WNDPROC)WindowProc, WS_OVERLAPPEDWINDOW,WS_EX_CONTROLPARENT | WS_EX_WINDOWEDGE,NULL,LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION))); これの最大化、最小化、閉じるボタンはどこを弄るんでしょうか。 弄り方も教えてくださいな。
442 :
よしお :2005/12/05(月) 17:40:15
[1] 授業単元:C言語入門 [2] 問題文:2元配列ichi[5][5]を作成し2重ループにて配列にデータを入力する プログラムを作成しなさい。入力の順番は[0][0],[0][1],[0][2]・・・[0][5],[1][0][1][1]・・・ となるようにループを作成しなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual Windows for BC++ [3.3] 言語: C言語 [4] 期限: [無期限]
>>439 できるだけ早くやったので品質は知らないよん
課題1
#include <stdio.h>
int main(void)
{
int i;
int vc[5] = { 10, 20, 30, 40, 50 };
int ptr[5];
for (i = 0; i < 5; i++) {
ptr[i] = vc[i];
}
for (i = 0; i < 5; i++) {
printf("ptr[%d] = %d\n", i, ptr[i]);
}
return 0;
}
課題2
#include <stdio.h>
int main(void)
{
int i;
int vc[5] = { 10, 20, 30, 40, 50 };
int (*ptr)[5];
ptr = &vc;
for (i = 0; i < 5; i++) {
printf("(*ptr)[%d] = %d\n", i, (*ptr)[i]);
}
return 0;
}
>>442 配列に何のデータいれていいかわからないからとりあえず1を入れといた。
#include<stdio.h>
int main(void)
{
int ichi[5][5];
int i, j;
for(i = 0; i < 5; i++){
for(j = 0; j < 5; j++){
ichi[i][j] = 1;
}
}
return 0;
}
>>424 ありがとうございます。さっそく試してみます。
>>440 ありがとうございます。
学籍番号を3桁以外で入力したときに、氏名入力に行かないようにしたいのですが、どの辺をいじればいいですか?
447 :
よしお :2005/12/05(月) 18:18:26
>>444 ありがとうございます。
説明不足だったようですいません。
データは1か0を自分で1個づつ入力していきます。
それを[0][0]から[5][5]までの25個のデータを入力します。
448 :
よしお :2005/12/05(月) 18:26:54
自分なりにやって出来たのですが表示が変なんでどこが悪いか 見てもらえませんか? #include<stdio.h> main(void){ int ichi[5][5]; int i=0; int j=0; for (i=0; i<5; i++){ printf("ichi[%d][%d]の値は?\n",&i,&j); scanf("%d",&ichi[i][j]); for(j=0;j<5;j++){ printf("ichi[%d][%d]の値は?\n",&i,&j); scanf("%d",&ichi[i][j]); } } return 0; } これで結果は ichi[1245064][1245060]の値は? って出てしまいます。なんでiの初期値がこんな数字になってしまうのでしょうか?
449 :
デフォルトの名無しさん :2005/12/05(月) 18:36:07
>>446 do {printf("学籍番号: > ");
if((fgets(buf,40,stdin))==NULL)continue;}
while((sscanf(buf,"%d\n",&stu[i].id))!=1);
を
do {printf("学籍番号: > ");
if((fgets(buf,40,stdin))==NULL)continue;
if((sscanf(buf,"%d\n",&stu[i].id))!=1)continue;}
while(stu[i].id <= 100 || stu[i].id >= 1000);
453 :
デフォルトの名無しさん :2005/12/05(月) 18:49:50
>>444 ,450
ありがとうございました。
&を消したらちゃんとできました。
454 :
デフォルトの名無しさん :2005/12/05(月) 18:52:16
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 四桁の乱数を発生させ(プレーヤーには見えない)12回以内で 四桁の数字を当てる、HIT&BLOWゲームにおいて、 最大でも7回の質問で正解を導き出せることを証明せよ。 乱数は、重複してはならないものとする。 [3] 環境 [3.1] OS: 特に指定なし [3.2] コンパイラ名とバージョン: 特に指定なし [3.3] 言語: C/C++ [4] 期限: 2005年12月16日10:00まで [5] その他の制限: 条件:特に指定なし
456 :
デフォルトの名無しさん :2005/12/05(月) 19:11:35
[1] 授業単元: [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] 言語C [4] 期限: (12月7日hh:17時まで 課題内容 encode.c decode.cの2種類のプログラム、暗号化、複合化を 作成せよ。 お願いします。
>>457 違う問題なんですけど
あなた早押しクイズでお手つきするタイプですね
>>456 /* encode.c */
int main(void){
char c;
while((c=fgetc(stdin))!=EOF){
fputc(((c << 4) & 0xF0) | ((c >> 4) & 0x0F), stdout);
}
return 0;
}
/* decode.c */
int main(void){
char c;
while((c=fgetc(stdin))!=EOF){
fputc(((c << 4) & 0xF0) | ((c >> 4) & 0x0F), stdout);
}
return 0;
}
>>456 曖昧すぎるだろ
シーザー暗号でも実装しとけ
なんでもいいから暗号化すればいいんじゃないの? 数ビットずつずらすのが一番らくだ
何でもいいんだったらビット差とるだけでいいんでないの?
それならXORだろ
466 :
300 :2005/12/05(月) 20:12:29
すっかり忘れ去られている
>>300 をどなたかお願いしますm(__)m
467 :
もみお :2005/12/05(月) 20:17:37
この条件分岐をもっとスマートにしろと言われたのですがこれ以上スマートに出来るものでしょうか?現在地と目的地を入力して目的地がx-y座標でどの位置に あるかを表示するプログラムです。 if(x1==x0 && y1==y0){ printf("移動ナシ");} if(x1==x0 && y1!=y0){ if(y1-y0<0){ printf("目的地は[0][-]方面");} else{ printf("目的地は[0][+]方面");}} if(y1==y0 && x1!=x0){ if(x1-x0<0){ printf("目的地は[-][0]方面");} else{ printf("目的地は[+][0]方面");}} if(x1-x0>0 && x1-x0!=0 && y1-y0!=0){ if(y1-y0>0){ printf("目的地は[+][-]方面");} else{ printf("目的地は[+][+]方面");}} if(x1-x0<0 && x1-x0!=0 && y1-y0!=0){ if(y1-y0>0){ printf("目的地は[-][-]方面");} else{ printf("目的地は[-][+]方面");}}
int cube[3][3][3]; int i,j,k,d=0; for(i=0;i<3;i++) for(j=0;j<3;j++) for(k=0;k<3;k++)cube[i][j][k]=d++; printf("%d\n",cube[1][1][1]);
>>467 (x0, y0) に対して (x1, y1) がどっちにあるかを表示すればいいんだろ?
char *s = "-0+";
int xdir = (x0 < x1) + (x0 <= x1);
int ydir = (y0 < y1) + (y0 <= y1);
if (xdir == 1 && ydir == 1) {
printf("移動ナシ");
} else {
printf("目的地は[%c][%c]方面", s[xdir], s[ydir]);
}
>>366 /*下のプログラムに
char cc[3];
int x,y,z;
を追加してアドレスを表示して変数と領域の関係を示しなさい*/
#include <stdio.h>
int nx;
int main(void){
static double dx;static int vc[3];
int x,y,z;char cc[3];
printf("nx のアドレス:%p\n",&nx);
printf("dx のアドレス:%p\n",&dx);
printf("vc[0]のアドレス:%p\n",&vc[0]);
printf("vc[1]のアドレス:%p\n",&vc[1]);
printf("vc[2]のアドレス:%p\n",&vc[2]);
printf("x のアドレス:%p\n",&x);
printf("y のアドレス:%p\n",&y);
printf("z のアドレス:%p\n",&z);
printf("cc[0]のアドレス:%p\n",&cc[0]);
printf("cc[1]のアドレス:%p\n",&cc[1]);
printf("cc[2]のアドレス:%p\n",&cc[2]);
return (0);}
/*教師はグローバル変数とかstatic変数とかのプログラムの終了まで開放されない変数と
ローカル変数は別々のまとまりとしてメモリに領域を確保される
とでも言いたいのか?*/
>>366 /*下のプログラムの各変数のアドレスとポインター型変数の値を表示させなさい*/
#include <stdio.h>
void sum_diff_mu1(int n1,int n2,int *sum,int*diff,int *mu1){
*sum=n1+n2;
*diff=(n1>n2)?n1-n2:n2-n1;
*mu1=n1*n2;
printf("n1 のアドレスは:%p\n",&n1);
printf("n2 のアドレスは:%p\n",&n2);
printf("*sum の値は:%d\n アドレスは:%p\n",*sum,sum);
printf("*diff の値は:%d\n アドレスは:%p\n",*diff,diff);
printf("*mu1 の値は:%d\n アドレスは:%p\n",*mu1,mu1);}
int main(void){
int na,nb;
int wa,sa,seki;
puts("二つの整数を入力してください。");
printf("整数A:"); scanf("%d",&na);
printf("整数B:"); scanf("%d",&nb);
sum_diff_mu1(na,nb,&wa,&sa,&seki);
printf("和は%dです。\n差は%dです。\n積は%dです。\n",wa,sa,seki);
printf("整数A のアドレスは:%p\n",&na);
printf("整数B のアドレスは:%p\n",&nb);
printf("wa のアドレスは:%p\n",&wa);
printf("sa のアドレスは:%p\n",&sa);
printf("seki のアドレスは:%p\n",&seki);
return (0);}
472 :
もみお :2005/12/05(月) 21:16:49
>>469 そうなんです。記述していただいたプログラム実行しましたが
ちょっとおかしい感じです。目的地が[5][1]で現在地が[4][3]の時の表示が
目的地は[+][0]方面と出てしまいます。
正しくは[+][+]方面なんですが・・・。
その場合は[+][-]じゃねーの? どちらにしろ正しく評価されてないようだがq
475 :
デフォルトの名無しさん :2005/12/05(月) 21:23:32
[1] 授業単元: WEBプログラミング [2] 問題文(含コード&リンク): 新規にユーザアカウントを追加するプログラミングを作りなさい。入力フォームは、HTMLで作成し、処理は、C言語で作りなさい。 また、追加されたユーザアカウントは、ファイルに書き込み(CVSまたはtxt)、 もしユーザが、他のユーザの同じユーザアカウントを登録するとエラーで返すように(例、このユーザは、常に存在しています。) し、再度入力させる形式にしなさい。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (6.0等) [3.3] 言語: (C) [4] 期限: ([2005年12月07日00:00まで] または [無期限] のいずれか) HTMLで入力フォームは完成したのですが、それをC言語で処理するのが分かりません。 よろしくお願いします。
>>472 全く同じプログラムを走らせた結果「目的地は[+][-]方面」と表示されたんだが。
>>473 fgets(buf,len,stdin);
sscanf(buf,"%s\n",data);
>>475 課題が意味不明すぎる
CGIプログラム作れって事か?それ以外でHTMLからCで書いたのを呼び出して
処理させる方法なんて思いつかないが
HTMLからCの実行ファイルに引数つけて呼び出して、 csvファイルを操作すればいいんだろ?
481 :
456 :2005/12/05(月) 22:10:52
なんでもいいと言われたので困ってます。 数ビットずつずらすとどんなプログラムになるんでしょうか? encodeとdecodeの二つに分けて実行するとtxtファイルが作成されてそこから 読み込むとのことなんですがよくわかりません。
>>481 暗号化の解き1文字づつ文字コード+1して
複合化は1文字づつー1してくだけでよくね?
なんでもいいって言ったんだとことん楽してやろう
>>456 その問題に物凄く見覚えがあるんだが。
もしかして銀杏臭い大学に通ってる?
484 :
456 :2005/12/05(月) 22:17:50
おねがいします。
>>481 じゃあ、厳密には暗号じゃないけど base64 とかいかが?
486 :
デフォルトの名無しさん :2005/12/05(月) 22:19:59
雨がよく降る某大学です。
[1] 授業単元: C言語 [2] 問題文(含コード&リンク):平方和分割問題 数が5であれば 5 = 1^2 + 2^2 とできるように、与えられた数をいくつかの数の平方和の形で表わすことができる場合がある。 このように、与えられた正整数 n に対して、n を平方和の形で表わすすべての方法を求めよ。(total number は 表すことが出来るパターンの合計数) なお、使われる数はすべて異なるものとし ( 2 = 1^2 + 1^2 であるが、同じ 1 を使っているので要求を満たす平方和とみなさない)、順序が異なるだけのものは同じとみなす。 次の実行例が示すように、 n の値を入力してそのすべての平方和の形とその個数を出力し、 入力値が 0 で終了するプログラムが書け。 長いので分けます、すいません。
488 :
487 :2005/12/05(月) 22:24:01
実行例 n ? 5 1^2 + 2^2 total number = 1 n ? 2 total number = 0 n ? 9 3^2 total number = 1 n ? 65 1^2 + 8^2 2^2 + 3^2 + 4^2 + 6^2 2^2 + 5^2 + 6^2 4^2 + 7^2 total number = 4 n ? 0 また、このプログラムを利用して (必要ならば僅かな変更をして)、 1〜100 の中で最も平方和の形が多い数と、その数に対するすべての平方和の形を見つけよ。 (ヒント): * 最も平方和の形が多い数を求めるには、main 部分を変更するのがよい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 出来るだけ早いとありがたいです orz [5] その他の制限: 条件:1〜100 の中で最も平方和の形が多い数と、その数に対するすべての平方和の形を見つけよ>バックトラックプログラミングを利用するとよい
489 :
デフォルトの名無しさん :2005/12/05(月) 22:25:51
>>485 encodeとdecodeの二つといわれてtxtに書き出し
読み込みって意味がわかんないのでお願いします。
XORでいいじゃん
>>456 じゃあ
>>482 方式で。
encode(a,b):aに文字コード+1したやつをbに格納
decode(c,d):-1したのをうんぬん
mainは適当にやって。
void encode(char a[],char b[])
{
int c,i=0;
while((c=a[i])!=0){
b[i]=c+1;
i++;
}
b[i]=0;
}
void decode(char c[],char d[])
{
int n,i=0;
while((n=c[i])!=0){
d[i]=n-1;
i++;
}
d[i]=0;
}
[1] 授業単元: プログラミングIII [2] 問題文(含コード&リンク): 英文テキストファイルを入力して、指定されたファイル中にあるすべての文字について、指定された方法で文字の種類 (大文字、小文字) を変更しあるいは変更せずにそのまま、 標準出力に出力するプログラム chngcase を作ることを考える。 なお、アルファベット以外の文字はそのまま出力される。ファイル中には日本語文字を含まないと仮定してよい。 このプログラムは次のように起動することができ、その時の動作は説明文として記述されている。 * chngcase -h 次のメッセージを出力して終了する chngcase [-hlu] [infile] 入力ファイルにある文字種を変更して標準出力に出力する infile :入力ファイル (省略時は標準入力) option -h :このメッセージを出力 -l :大文字をすべて小文字に変換する -u :小文字をすべて大文 * chngcase 標準入力からの入力テキストをそのまま標準出力に出力する。 * chngcase -l in.txt in.txtファイルから入力し、すべての大文字を小文字に変換したものを標準出力に出力する。 * chngcase -u < in.txt > out.txt in.txtファイルから入力し、すべての小文字を大文字に変換したものをout.txtに出力する。 ( in.txt からの入力、および out.txt への出力は shell が行なってくれる。 プログラムから見ることのできるコマンドラインにはリダイレクト部分はなく、 従って chngcase -u に対する動作と同一で、標準入力から入力し標準出力に出力する形となる。) * chngcase -lu 標準入力から入力し、すべての小文字を大文字に、すべての大文字を小文字に変換したものを標準出力に出力する。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 2.9[3.3] 言語: C [4] 期限: 2005年12月7日11:00まで [5] その他の制限:大文字・小文字の判別、大文字・小文字への変換については、 ctype.h に含まれるライブラリ関数 islower, isupper, tolower, toupper を使うのがよい
495 :
487 :2005/12/05(月) 23:25:39
mainとはプログラムのmainですか?話のメインですか?
問題内容については直ぐ下の
>>484 にあります。
問題文は全てコピペしてますので形式指定等は特にありません。
>>487 (ヒント): * 最も平方和の形が多い数を求めるには、main 部分を変更するのがよい。
誰かパケットの暗号解除組めよ。
498 :
487 :2005/12/05(月) 23:38:55
>>496 意味がわかりました、すいません。
また、最初に作ったプログラムを利用して (必要ならば僅かな変更をして)、
1〜100 の中で最も平方和の形が多い数と、その数に対するすべての平方和の形を見つけろ。
、という設問に対するヒントで最初に作ったプログラムのmain関数を指しているようです。
他には特にプログラムに対する制約はないのであまり気にしなくても大丈夫な部分になります。
484 ではなく
>>487 でした o...rz
500 :
485 :2005/12/05(月) 23:44:59
>>494 すみませんが使い方がよくわかりません。
おk
>>498 の日本語を三回読み直しても意味が解らないのは俺だけか?
「最初に作ったプログラム」って何のことだ?
>>492 適当......
#include<stdio.h>
#include<ctype.h>
int main(int argc,char**argv){
FILE*fp = NULL;
int ch, toLower = 0, toUpper=0;
while(*++argv)
if(**argv=='-'){
char*p=*argv;
while(*++p)switch(tolower(*p)){
break;case 'l':toLower=1;
break;case 'u':toUpper=1;
break;case 'h':
puts(
"chngcase [-hlu] [infile]\n"
"入力ファイルにある文字種を変更して標準出力に出力する\n"
"infile :入力ファイル (省略時は標準入力)\n"
"option\n"
"-h :このメッセージを出力\n"
"-l :大文字をすべて小文字に変換する\n"
"-u :小文字をすべて大文\n"
);
return 0;
}
}else if(!fp)fp = fopen(*argv,"r");
if(!fp)fp=stdin;
while((ch=getc(fp))!=EOF)
putchar(toLower && isupper(ch) ? tolower(ch) :toUpper && islower(ch) ? toupper(ch) : ch);
return 0;
}
504 :
487 :2005/12/05(月) 23:54:26
わかりにくくてすいません…
設問は2問に分かれていて
(i)
最初に作ったプログラムとは
、数が5であれば 5 = 1^2 + 2^2 とできるように、与えられた数をいくつかの数の平方和の形で表わすことができる場合がある。
このように、与えられた正整数 n に対して、n を平方和の形で表わすすべての方法を求めよ。(total number は 表すことが出来るパターンの合計数)
なお、使われる数はすべて異なるものとし ( 2 = 1^2 + 1^2 であるが、同じ 1 を使っているので要求を満たす平方和とみなさない)、順序が異なるだけのものは同じとみなす。
次の実行例が示すように、 n の値を入力してそのすべての平方和の形とその個数を出力し、
入力値が 0 で終了するプログラム を指します
になります。(実行例は
>>488 )
(ii) (i)で作成したプログラムを書き換え、そしてn = 1〜100 の中で最も平方和の形が多い数と、その数に対するすべての平方和の形を見つけよ。
これでも文章おかしいでしょうか(汗)
自分も意味を理解するのに時間が掛かりました orz
分かりにくいなぁ
506 :
485 :2005/12/05(月) 23:59:10
>>491 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define IN_FILE "in.txt"
#define OUT_FILE "out.txt"
void encode(char a[105],char b[107])
{
int c,i=0;
while((c=a[i])!=0){
b[i]=c+1;
i++;
}
b[i]=0;
}
void decode(char c[105],char d[107])
{
int n,i=0;
while((n=c[i])!=0){
d[i]=n-1;
i++;
}
d[i]=0;
}
これでもしてみたんですが実行できません・・・
507 :
487 :2005/12/06(火) 00:01:38
すいませ…orz 元の問題文は更に意味がわからない感じです もう少しわかり易い文章を書いてくれ、教授!
>>500 encode.c をコンパイルしてできた実行ファイルを encode という名前だとすると、
実行ファイル名に続いて符号化したいファイル名、符号化された結果を書き
込みたいファイル名を空白で区切って並べるという意味です。
Linux 的にはこんな感じ
$ gcc -o encode encode.c
$ ./encode himitu.txt angou.txt
$ cat angou.txt
ZW5jb2RlLmMggvCDUoOTg3CDQ4OLgrWCxILFgquCvY7AjXODdINAg0ODi4LwIGVuY29kZSCC
xoKigqSWvJFPgr6CxoK3gumCxoFBCo7AjXODdINAg0ODi5a8gsmRsYKigsSVhI2GibuCtYK9
gqKDdINAg0ODi5a8gUGVhI2GibuCs4Lqgr2Mi4nKgvCPkYKrjZ6C3QqCvYKig3SDQINDg4uW
vILwi/OUkoLFi+aQ2ILBgsSVwILXgumCxoKigqSI05ahgsWCt4FCCgo
$
511 :
485 :2005/12/06(火) 00:12:39
>>500 そうなのですか。今LinuxないんでWindowsで実行したらよくわかんなかったので・・・
Linuxでないと起動しないということですよね?すみませんでした。
>>511 Windows でも動作しますよ、コンパイルができれば。
513 :
510 :2005/12/06(火) 00:14:55
FILE* fin = NULL; がぬけてた
514 :
485 :2005/12/06(火) 00:17:08
>>512 実行したんですがどうやってプログラム終了するんですか?
コマンドプロンプトでの入力が延々と続くので・・・
>>514 コマンドプロンプトが「出ずに」入力待ちが延々と続くということでしょうか。
もしそうなら、ファイルを二つ指定しなかったためにキーボードからデータを
読み込んでいるんだと思われます。
Ctrl キーを押しながら Z を押し、「^Z」が表示されたらエンターで終了しませんか?
516 :
485 :2005/12/06(火) 00:32:41
>>515 ありがとうございます。実行できました。
517 :
485 :2005/12/06(火) 00:49:50
うひゃ
>二つの課題にそれぞれ対応したmainが二つ 二つの課題それぞれに対応したmainがある、ね。
標準入力から誕生日を入力し、対応する星座を出力するプログラムを作成せよ。このとき、日付の入力は[mm/dd]のような形式で行い、 正しく入力できたか確認するためにJan. 23のように出力する。ただし日付として間違っている場合はエラーメッセージを出力する。 また、星座名および月の名前を管理するために文字配列へのポインタの配列を用いることとする。
[1] 授業単元:Software [2] 問題文: 標準入力から誕生日を入力し、対応する星座を出力するプログラムを作成せよ。このとき、日付の入力は[mm/dd]のような形式で行い、 正しく入力できたか確認するためにJan. 23のように出力する。ただし日付として間違っている場合はエラーメッセージを出力する。 また、星座名および月の名前を管理するために文字配列へのポインタの配列を用いることとする。 [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] 言語C [4] 期限: (12月6日:06時まで 課題内容 問題文に同じ
>>423 でスルーされてしまったのでもういちど・・・
[1] 授業単元: プログラム入門
[2] 問題文(含コード&リンク):次のプログラムの配列版とポインタ版を作成せよ。ただし各関数は
指定された書式に従って呼び出されるものとし、それにあわせて関数の戻り値および
引数を設定すること
・点の座標値(x,y)が要素数2の配列で管理されるとき、2つの点a,bを結ぶ直線上
にあるそれらの中点cの座標を求める関数midp()を定義せよ。x,yは標準入力から
入力するとする。
(配列版)書式:void midp(double a[] , double b[] , double c[])
(ポインタ版)書式:void midp(double *a , double *b , double *c)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:12月5日夜8時
長文で申し訳ないですが、よろしくおねがいします
標準入力から誕生日を入力し、対応する星座を出力するプログラムを作成せよ。 このとき、日付の入力は[mm/dd]のような形式で行い、 正しく入力できたか確認するためにJan. 23のように出力する。 ただし日付として間違っている場合はエラーメッセージを出力する。 また、星座名および月の名前を管理するために文字配列へのポインタの配列を用いることとする。
>>524 配列は
void midp(double a[], double b[], double c[])
{
int i;
for( i = 0 ; i < 2 ; i++ ) c[i] = (a[i] + b[i]) * 0.5;
}
で、ポインタは
void midp(double *a, double *b, double *c)
{
int i;
for( i = 0 ; i < 2 ; i++ ) c[i] = (a[i] + b[i]) * 0.5;
}
でもいいけど
void midp(double *a, double *b, double *c)
{
int i;
for( i = 0 ; i < 2 ; i++, a++, b++, c++ ) *c = (*a + *b) * 0.5;
}
が想定解だろう。
>>520 =522=525
ウザい。連投するくらいなら12星座だか13星座(蛇遣い座入り)の日付の範囲でも探して提示しとけ。
うざいんでもう誰もやりませんw
標準入力から誕生日を入力し、対応する星座を出力するプログラムを作成せよ。 このとき、日付の入力は[mm/dd]のような形式で行い、 正しく入力できたか確認するためにJan. 23のように出力する。 ただし日付として間違っている場合はエラーメッセージを出力する。 また、星座名および月の名前を管理するために文字配列へのポインタの配列を用いることとする。
ttp://hp.vector.co.jp/authors/VA014370/jscript/astro/about13.htm 【星座と誕生日の対応表】
星座名 12 星座 13 星座
牡羊座 3/21 - 4/19 4/19 - 5/13
牡牛座 4/20 - 5/20 5/14 - 6/20
双子座 5/21 - 6/21 6/21 - 7/19
蟹座 6/22 - 7/22 7/20 - 8/10
獅子座 7/23 - 8/22 8/11 - 9/15
乙女座 8/23 - 9/22 9/16 - 10/29
天秤座 9/23 - 10/23 10/30 - 11/22
蠍座 10/24 - 11/22 11/23 - 11/29
蛇使い座 x 11/30 - 12/17
射手座 11/23 - 12/22 12/18 - 1/18
山羊座 12/23- 1/19 1/19 - 2/15
水瓶座 1/20 - 2/18 2/16 - 3/10
魚座 2/19 - 3/20 3/11 - 4/18
#include <stdio.h> #define MAX_BUF 1024 struct _month { char name[4]; int days; }; struct _period { char start[5]; char end[5]; }; struct _hscope { char name[7]; struct _period p12; struct _period p13; };
int main(void) { struct _month m[] = { {"Jan", 31}, {"Feb", 29}, {"Mar", 31}, {"Apr", 30}, {"May", 31}, {"Jun", 30}, {"Jul", 31}, {"Aug", 31}, {"Sep", 30}, {"Oct", 31}, {"Nov", 30}, {"Dec", 31} }; struct _hscope h[] = { {"牡羊", {"0321", "0419"}, {"0419", "0513"}}, {"牡牛", {"0420", "0520"}, {"0514", "0620"}}, {"双子", {"0521", "0621"}, {"0621", "0719"}}, {"蟹", {"0622", "0722"}, {"0720", "0810"}}, {"獅子", {"0723", "0822"}, {"0811", "0915"}}, {"乙女", {"0823", "0922"}, {"0916", "1029"}}, {"天秤", {"0923", "1023"}, {"1030", "1122"}}, {"蠍", {"1024", "1122"}, {"1123", "1129"}}, {"蛇使い", {"0000", "0000"}, {"1130", "1217"}}, {"射手", {"1123", "1222"}, {"1218", "0118"}}, {"山羊", {"1223", "0119"}, {"0119", "0215"}}, {"水瓶", {"0120", "0218"}, {"0216", "0310"}}, {"魚", {"0219", "0320"}, {"0311", "0418"}} }; char buff[MAX_BUF]; int month, day; int result;
do{ fprintf(stdout, "誕生日を月/日の形式で入力してください。 mm/dd = "); fgets(buff, MAX_BUF, stdin); result = sscanf(buff, "%d/%d", &month, &day); if(result != 2){ fprintf(stdout, "入力の形式が不正です。\n"); result = 0; continue; } if(month < 1 || month > 12){ fprintf(stdout, "月は 1〜12 までの数字を入力してください。\n"); result = 0; continue; } if(day < 1 || day > m[month - 1].days){ fprintf(stdout, "日は 1〜%d までの数字を入力してください。\n", m[month - 1].days); result = 0; continue; } result = 1; }while(!result); sprintf(buff, "%02d%02d", month, day); fprintf(stdout, "%s.%3d [%s]\n", m[month - 1].name, day, buff);
for(result = 0; result < sizeof(h) / sizeof(struct _hscope); result++){ if((strcmp(h[result].p12.start, h[result].p12.end) < 0 && strcmp(h[result].p12.start, buff) <= 0 && strcmp(h[result].p12.end, buff) >= 0) || (strcmp(h[result].p12.start, h[result].p12.end) > 0 && (strcmp(h[result].p12.start, buff) <= 0 || strcmp(h[result].p12.end, buff) >= 0))){ fprintf(stdout, "12星座は %s座\n", h[result].name); } if((strcmp(h[result].p13.start, h[result].p13.end) < 0 && strcmp(h[result].p13.start, buff) <= 0 && strcmp(h[result].p13.end, buff) >= 0) || (strcmp(h[result].p13.start, h[result].p13.end) > 0 && (strcmp(h[result].p13.start, buff) <= 0 || strcmp(h[result].p13.end, buff) >= 0))){ fprintf(stdout, "13星座は %s座\n", h[result].name); } } }
>>522 >[4] 期限: (12月6日:06時まで
釣りっぽいんだが作ったよ
4レスも使うくらい長くなるなら素直にうpろだ使おうぜ
>>524 (配列版)書式:void midp(double a[] , double b[] , double c[]){
c[0]=(a[0]+b[0])/2.0; c[1]=(a[1]+b[1])/2.0;
}
(ポインタ版)書式:void midp(double *a , double *b , double *c){
*c=(*a+*b)/2.0; *(c+1)=(*(a+1)+*(b+1))/2.0;
}
538 :
デフォルトの名無しさん :2005/12/06(火) 07:09:32
1] 授業単元: プログラム演習II [2] 問題文(含コード&リンク): カレントフォルダからの相対パスを文字列でユーザーに入力させ 指定したフォルダ内のファイル一覧を出力するコードを作れ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC++.net2003 [3.3] 言語: C++ [4] 期限: 12/06 11:15まで [5] その他の制限: VC++.net2003に標準で入ってないライブラリ(たとえばBoostとか)は不可 朝まで粘っては見ましたがうまくいかず・・・どうかお願いします。
540 :
デフォルトの名無しさん :2005/12/06(火) 07:22:07
1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク):
data.txtから20個の整数を読み込んで、それらを配列に格納
せよ。その配列の全要素を逆順にoutput.txtへ出力せよ。こ
の時、各要素は空白で区切られるものとする。
ttp://up.viploader.net/mini/src/viploader1073.txt [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC++.
[3.3] 言語: C
[4] 期限: 12/06 0830
[5] その他の制限:
int i,a[20]; for(i=0;i<20;i++)fscanf(infp,"%d",&a[i]); for(i=19;i>=0;i--)fprintf(outfp,"%d",a[i]);
>>540 for(count=0;count<READ;count++){
fscanf(fp1,"%d",&buff[count]);
printf("%d",buff[count]);
}
for(count=READ-1;count>=0;count--){
fprintf(fp2,"%d ",buff[count]);
printf("%d",buff[count]);
}
何も足さない、何も引かない、それがVIPクオリティ。
545 :
デフォルトの名無しさん :2005/12/06(火) 07:56:44
>>544 fprintfのときにミスってるようです
[1] 授業単元:情報基礎実習 [2] 問題文(含コード&リンク):キーボードから文字列と一つの検索文字を入力する。 このとき、入力した文字列の中にある、検索文字の個数を表示するプログラムを作成せよ。ただし、プログラムの関数の定義部分以外は、以下にあげるものを変更せずそのまま利用すること。 また、プログラム中に出てくる関数「search_letter」は、第一引数で与えた文字列へのポインタで示される文字列の中から、 第二引数で与えら得れた文字の個数を計算する関数である。なお、このプログラムでは大文字、小文字を区別して処理する。 #include <stdio.h> int search_letter( char *str, char letter ); int main( void ) { int cnt; char in[100]; char ch; printf("Input a string: "); gets( in ); printf("Input a letter: "); scanf("%c", &ch); cnt = search_letter( in, ch ); printf("# of letter '%c' is %d\n", ch, cnt); return 0; } [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] 言語:C言語 [4] 期限: 12月7日9:00まで 課題で出されたのですがさっぱりわからなくて、何卒よろしくおねがいします。
547 :
デフォルトの名無しさん :2005/12/06(火) 09:50:29
cube[3][3][3]という3次元配列に0〜26までの数字を順に入れてcube[1][1][1]を の値を出力するのに、自分で #include<stdio.h> int main(){ **cube[3][3], cube0[3][3]={"0,1,2,3,4,5,6,7,8"}, cube1[3][3]={"9,10,11,12,13,14,15,16,17"}, cube2[3][3]={"18,19,20,21,22,23,24,25,26"}; cube[0]=cube0; cube[1]=cube1; cube[2]=2; printf("%d" ,cube[1][1][1],cube); } と作ってみたんですけど、成功はするんですけど、画面に数字が出力されません。どこがおかしいでしょうか??
548 :
ああああ :2005/12/06(火) 09:50:39
#include<stdio.h> main(){ int x[]={-5,8,6,-3,0,-2,2,9,0,7}; int i,c,d,s; double ave; c=0,d=0,s=0; for(i=0;i<10;i++){ {if(x[i]>0){c++;} };}; for(i=0;i<10;i++){ {if(x[i]<0){d++;} };}; printf("正の数 %d\n",c); printf("負の数 %d\n",d); for(i=0;i<10;i++){ s=s+x[i];} ave=s/8.0; printf("ave %f\n",ave); return 0; }
549 :
デフォルトの名無しさん :2005/12/06(火) 10:05:15
int search_letter(const char* str, char c) { int count = 0; while(*str) if(*str == c) count++; return count; }
552 :
524 :2005/12/06(火) 12:30:04
>>526 >>537 すみませんが、main文の部分をどう構築すれば良いか教えていただけないでしょうか・・・?
>>549 まず計算が間違ってる
k[4]=dxdt(v+l[3]*0.5*h);
l[4]=dvdt(x+k[3]*0.5*h,v+l[3]*0.5*h);
↓
k[4]=dxdt(v+l[3]*1.0*h);
l[4]=dvdt(x+k[3]*1.0*h,v+l[3]*1.0*h);
return -(omega*omega*x)+(6.0*pai*r*nensei*v/m);
ホントに減衰するの?
あと刻み幅h=1.0とかちょっとひどすぎる。0.1とかに
あとはmax,minを新たに設けて
xがmaxより大きかったらmax更新
xがminより小さかったらmin更新で
max-minが特定の値になったらループ抜けるとか
554 :
553 :2005/12/06(火) 12:48:52
>>553 の
>あとはmax,minを新たに設けて
あたりは勘違いです。もうちょっと工夫が必要
>>549 double dxdt(double v){
return v;
}
これって無駄じゃない?
将来の拡張考えて置いてあるんだよ
たまたま計算対象の偏導関数 ∂x/∂t が v と等しいんでないの?
558 :
デフォルトの名無しさん :2005/12/06(火) 15:20:16
[1] 授業単元: C言語 [2] 問題文: 文字列"ABCDEFG"がある 開始位置、終了位置を入力させ、'*'一文字に置きかえ表示させよ 置きかえた文字列は、一旦、変数に入れる事 (例)開始位置=1 終了位置=4 "A*EFG" (例)開始位置=0 終了位置=0 "*ABCDEFG" [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: C言語 [4] 期限: [05/12/8] 先生、お願いします!!
560 :
558 :2005/12/06(火) 15:42:00
[1] プログラミング論U [2] 問題 コンテナを利用して,次のようなプログラムを作ってみよう。 入力: 英語で書かれた文書 (テキストファイル)。 出力:入力に含まれる単語をアルファベット順に並べ替えて出力 注意: 大文字と小文字は区別しない(すべて小文字として処理する)。 同じ単語を2度以上出力しない。 ピリオドなど アルファベット以外の文字は表示されないように削除する。 入力ファイル|sample.txt| 『The specification defines a detailed configuration structure in ROM that the boot up processor can read to find the full configuration of the processors and busses. It also defines a procedure for starting up the other processors.』 ヒント string 型を要素とするコンテナを使います。 文字 (char 型の値) がアルファベットかどうか判定するには C の文字関 数 isalpha が使えます。 アルファベットを小文字に変換するには, 関数tolower が使えます。 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 2.9 [3.3] 言語:C++ [4] 期限: 2005年12月9日12:30まで [5] その他の制限:初心者です。 宜しくお願いします。
>>561 大文字で入った文字も小文字で出力するの?
563 :
561 :2005/12/06(火) 16:15:38
>>562 そうです。
大文字を関数tolower を使って小文字にしなさいと言われました。
#include <iostream> #include <fstream> #include <string> #include <set> #include <cctype> #include <iterator> #include <algorithm> #include <functional> using namespace std; // gcc のバグ避け struct isalpha_ : unary_function<char, bool> { bool operator()(char c) const { return isalpha(c); } }; struct tolower_ : unary_function<char, char> { char operator()(char c) const { return tolower(c); } }; int main() { ifstream ifs("sample.txt"); set<string> S; for (string s; ifs >> s; ) { // VC7 以上ならこっちで通る // transform(s.begin(), s.end(), s.begin(), tolower); // s.erase(remove_if(s.begin(), s.end(), not1(ptr_fun(isalpha))), s.end()); transform(s.begin(), s.end(), s.begin(), tolower_()); s.erase(remove_if(s.begin(), s.end(), not1(isalpha_())), s.end()); if (s.length() > 0) S.insert(s); } copy(S.begin(), S.end(), ostream_iterator<string>(cout, "\n")); }
【質問テンプレ】 [1] 授業単元:プログラム演習3 [2] 問題文(含コード&リンク): (1)これまでのプログラムを参考にリストの最後にデータを追加するaddToTail関数を作成しなさい。 Entry *addToTail(Entry *top,char *name,char *tel); さらに同じ名前の人のデータが登録されていたら要素を追加するのではなく、データ(電話番号)を更新するようにしたaddData関数を作成してみよう。 Entry *addData(Entry *top,char *name,char *tel); 又addToHead(main関数に書いてあります)の代わりにaddData関数を使うようにmain関数を書き換えてテストせよ。 (2)このプログラムは動かすたびに新しくデータを入れ直さなければならないので、 プログラム終了前にファイルを記録し、次回起動時にはファイルからデータを読み込めると便利である。 次のような方針でファイルを読み書きする関数を作ってみよう。 void writeData(char *filename,Entry *top); 1.filenameで指定された名前のファイルを書き込みでオープン 2.リストが終了でなければオープンしたファイルに氏名と電話番号を読み込む。 3.リストの次の要素をたどり、2から繰り返す。 Entry *readData(char *filename); 1.filenameで指定された名前のファイルを読み込みでオープン 2.ファイルの終でなければ、オープンしたファイルから氏名と電話番号を読み込む。 3.addToHead関数を使ってデータをリストに追加する。 4.2から繰り返す 5.作成されたリストの先頭のポインタを関数値として返す。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc 2.9 [3.3] 言語: C [4] 期限: 2005年12月9日17:30まで [5] その他の制限:とくになし
568 :
564 :2005/12/06(火) 16:33:34
569 :
名無し :2005/12/06(火) 16:34:15
>>149 のプログラムなのですが
11行目:error: invalid lvalue in assignmentというエラーが出ます。
どのようにしたらよいですか?
570 :
561 :2005/12/06(火) 16:37:07
>>564 こんなに早く教えて頂き、本当にありがとうございます。
571 :
564 :2005/12/06(火) 16:37:15
確認するの忘れてたけど、例えば 「ho3ge」 とかいう入力が入ってたら、それはどう出力したらいいの? 今はこれから 3 を erase して「hoge」にして出力してるんだけど。
>>569 10行目11行目を以下のように変更:
for (; c = (a+b)/2, f(c) != 0 && fabs(a-b) > EPS; )
if (f(a)*f(c) < 0) b = c; else a = c;
後学のために gcc のバージョンを教えてください。手元の 3.4.4 では通ってしまうので。
574 :
561 :2005/12/06(火) 16:47:29
>>571 c01% _a.out < sample.txt_
a
also
and
boot
busses
can
configuration
defines
detailed
find
for
full
in
it
of
other
procedure
processor
processors
read
rom
specification
starting
structure
that
the
to
up
575 :
名無し :2005/12/06(火) 16:48:01
>>572 学校のなのでバージョンとか今はわかりません。
わかり次第、報告します。
576 :
561 :2005/12/06(火) 16:48:34
578 :
デフォルトの名無しさん :2005/12/06(火) 16:53:24
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):
課題2
ファイルを読み込み、英字のみか、先頭が英字で二文字目以降が英字または数字である文字列を抽出し、辞書順に並べ、その文字列が何行目に現れるか列挙するプログラムを作成したい。以下の設問にしたがって回答しなさい。
http://edu.net.c.dendai.ac.jp/ad/1/2005/kadai.html なお辞書順とは、文字列の比較法の一つで、文字列の先頭から順に比較していき、最初に異なった文字の大小関係とします。但し、途中で文字が無くなった場合は無い方が小さいとします。
例
0<9<A<Z<a<z
aaa<aaaa
aaa0<aaa1
[3] 環境
[3.3] 言語: C/C++/Javaのいずれか、WindowsのAPI使用不可
[4] 期限: [2005年12月20日まで]
よろしくお願いします
579 :
デフォルトの名無しさん :2005/12/06(火) 16:53:30
ま た 電 気 大 か いや、悪いわけではないけれど
ワロッシュ。坂本先生ご指名のようだな
>>561 #include <string>
#include <vector>
#include <cctype>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
vector<string> sv;
FILE* fp = fopen("sample.txt", "r");
char buf[1024];
while (fscanf(fp, "%[^a-zA-Z]", buf), fscanf(fp, "%[a-zA-Z]", buf) == 1) {
string s;
transform(buf + 0, buf + strlen(buf), back_inserter(s), (tolower));
sv.push_back(s);
}
fclose(fp);
sort(sv.begin(), sv.end());
copy(sv.begin(), unique(sv.begin(), sv.end()),
ostream_iterator<string>(cout, "\n"));
}
>>558 暇な高校生が脳内コーディング
汚いソースで晒すのは恥ずかしいが一応動くとは思うので、適当に自分でいじってから提出してくれ
#include<stdio.h>
#define kArraySize (256)
int main (void)
{
int i;
int start, end;
char str[kArraySize]="ABCDEFG";
char tmp[kArraySize];
char *p=str,*q=tmp;
printf("開始位置を入力");
start=(int)(getchar()-'0');
getchar();
printf("終了位置を入力");
end=(int)(getchar()-'0');
getchar();
for( i=0; *p!='\0' && i < kArraySize; i++ ){
if( i == start ) *q++='*';
if( i < start ) *q++=*p++;
else if( i < end ) p++;
else *q++=*p++;
}
*q=\0;
printf("%s\n",tmp);
return 0;
}
584 :
デフォルトの名無しさん :2005/12/06(火) 17:13:20
お前ら下手に出てれば調子に乗ってシカトしやがって。 こんなんだからいつまで経ってもうだつの上らないんだよ。こんな時間にお人好しになってるのもお前らニートだからか(pgr
>>584 どれをシカトした?流れが速いときは見逃されることが多々あるので指定どぞ
>うだつの上がらないんだよ 文法おかしいぞ
590 :
582 :2005/12/06(火) 17:24:10
>>574 を見てなかった。修正
12行目
FILE* fp = fopen("sample.txt", "r");
と19行目
fclose(fp);
を削除。
14行目
while (fscanf(fp, "%[^a-zA-Z]", buf), fscanf(fp, "%[a-zA-Z]", buf) == 1) {
を
while (scanf("%[^a-zA-Z]", buf), scanf("%[a-zA-Z]", buf) == 1) {
に変更
ついでにtolowerの()は不要
gccのto-関数やis-関数のバグは
実装が関数形式マクロなのが原因。
>>564 (のコメントアウト部分)や
>>582 のような使い方ならバグは出ない。
591 :
デフォルトの名無しさん :2005/12/06(火) 17:31:11
[1] プログラミング演習U [2] 問題文: 隣接リストを使った深さ優先探索プログラムを作成しなさい。 実行例 c01% _a.out < G1 _ 0 -> 1 1 -> 3 3 -> 5 5 -> 6 6 -> 4 4 -> 2 c01% _a.out< G2 _ 0 -> 1 1 -> 3 3 -> 2 4 -> 6 6 -> 5 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 2.9 [3.3] 言語:C++ [4] 期限: 12月7日17時 [5] その他の制限:初心者
>>589 うだつの上がらないなんなのか気になるところだ
594 :
558 :2005/12/06(火) 17:35:24
[1] 授業単元:コンピュータ演習 [2] 問題文(含コード&リンク): 1.複数のデータを入力し、入力したデータの平均値を計算できるプログラムを作成せよ。 入力する値:データの数、データ(データの数分) 例 5つのデータがあるとき 入力 データ数=5 データ1=2.6 データ2=6.3 データ3=9.1 データ4=-6.1 データ5=3.7 出力 平均値=3.12 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: [2005年12月08日23:00まで] [5] その他の制限:for文のみ使用。配列・ポインタはまだ習っていません。
for文のみでどうやってデータを入力しろというのだ……
いや、べつにできるだろ scanfとかも使っちゃいけないと思ってるならお前があほなだけだ
>>595 脳内コンパイルだが、多分動く。
#include <stdio.h>
int main(void)
{
int n, i;
double in, total;
char buf[256];
printf("the number of data ?> ");
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &n);
total = 0;
for(i = 0; i < n; i++){
printf("data %d> ", i);
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%lf", &in);
total += in;
}
printf("average = %lf\n", total / n);
return 0;
}
>>595 #include<stdio.h>
int main(void){
int i,n;
double data,heikin=0.0;
printf("データの個数を入力して:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("%d個目のデータ入力:",i+1);
scanf("%lf",&data);
heikin = (heikin*i+data)/(i+1);
}
printf("平均は%fです\n",heikin);
return 0;
}
#include <stdio.h> int main(void) { int i,kosuu=0; float nyuryoku,gokei=0; printf("個数を入力:"); scanf("%d",&kosuu); for(i=0;i<kosuu;i++) { printf("データ%d:",i+1); scanf("%f",&nyuryoku); gokei += nyuryoku; } printf("平均値:%f",gokei/kosuu); return 0; } 一応VS2003でコンパイル・実行うまくいった。
601 :
595 :2005/12/06(火) 19:03:46
>>596 すみません。説明不足でした。処理の繰り返しにはwhile文やdo-while文
は使わないということです。まだ習っていないので・・・
>>598 >>599 >>600 こんなに早く教えてくださり、本当にありがとうございます!!
みなさんのプログラムを参考にして、自分なりに作ってみます。
>>602 がんばれ。こんな感じであとはオリジナリティ加えて拡張してくれ。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
FILE *infp;
char buf[1000],buf2[1000];
int n = atoi(argv[1]);
infp = fopen(argv[2],"r");
fgets(buf,sizeof(buf),infp);
n=2;
do{
int i,j;
j=0; /* 何個目? */
for(i=0;i<strlen(buf);i++){
if(buf[i]==' '){ /*ここをstrncmpしたりすると仕切り文字拡張が可能 */
j++;
}
if(j==n) break; /* 目標個数見つかったです */
}
if(j==n){ /* n回ちゃんと見つかった */
sscanf(&(buf[i]),"%s",buf2);/* 最初のカラムだけあればいい */
printf("%s\n",buf2);
}
fgets(buf,sizeof(buf),infp);
}while(!feof(infp));
return 0;
}
>>606 n=2はdebug用に書いたので削除してくれ。
608 :
デフォルトの名無しさん :2005/12/06(火) 20:54:20
unsigned char image_in[999][999]という配列分のメモリを確保するにはどうしたらいいのでしょうか?
>>608 static を付けるのがはやってるらしいぞ、この板では。
ヒープに配置するのが普通だ
612 :
デフォルトの名無しさん :2005/12/06(火) 21:19:45
[1] 授業単元: セキュリティ [2] 問題文(含コード&リンク): 換字式暗号(Caesar暗号)・XOR暗号以外の方法で、独自の暗号化・複合化プログラムを作ること。 また、どのような暗号化の方法を使ったかを簡単に説明すること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:12月7日19時まで お願いします
独自だからまず暗号化の方法をお前が考えろ 話はそれからだ
>>612 強力なのが作りたいなら今月号のCマガ読むことをお勧めする
確か特集でDESとAESのアルゴリズムが解説してあったはず
612じゃないが、簡単なのがいいだろ。 データをbit列で表して、bit shiftで暗号化する。 [0][1][2][3][4][5][6][7] 鍵 +4 [4][5][6][7][0][1][2][3] こんなんでどう?
616 :
デフォルトの名無しさん :2005/12/06(火) 21:36:08
1] 授業単元: プログラミング [2] 問題文(含コード&リンク): アルファベットaをpの割合、アルファベットbを1-pの割合で10000文字出力し、 それをファイルに格納するプログラムを作成せよ。ただし、0≦p≦1とする。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12/7 お願いします。
独自の暗号化って、シビアだなあ。本当に独自のが作れたら卒論くらいにはなるんじゃね?
>>612 あれだ!
カエサル暗号が1つずらす(だったよな?)ならお前は2つずらすんだ!
これだ!これしかない!
>>619 どう見ても換字式暗号です。
本当にありがとうございました。
>>616 #include <stdlib.h>
int p = rand();
int i;
for(i=0;i<10000;i++)
putchar((rand()>p)? 'a' : 'b');
>>618 独自って(独自)実装の意味かと思った
今は反省している
簡単な変換テーブル作って、転字法にすりゃいいんじゃね?
文字を逆から並べて終わり、とかw
>>622 もっと言うと、環 R の直積 R×...×R の元として平文をとらえて、適当な a ∈ R を固定して f: R → R を f(x) = x+a と定めて
これを自然に拡張して得られる R×...×R 上の変換も、 Caesar 暗号とみなすことが多い。
>>623 それは「単換字式暗号」ってやつなので独自ではない。
さらに言えば、環の同型が作れるので、それも暗号理論的には Caesar 暗号と同じとみなすことが多い。
誰か実装してやれよ
そもそも独自とか言ってる教師がおかしいんだから適当にやれよ そんな暗号試論しりませんでしたって感じで
>>612 /* encode.c */
#include <stdio.h>
int main(void){
char c;
while((c=fgetc(stdin))!=EOF){
fputc(((c << 4) & 0xF0) | ((c >> 4) & 0x0F), stdout);
}
return 0;
}
/* decode.c */
#include <stdio.h>
int main(void){
char c;
while((c=fgetc(stdin))!=EOF){
fputc(((c << 4) & 0xF0) | ((c >> 4) & 0x0F), stdout);
}
return 0;
}
#include <stdio.h> #include <string.h> char crypt(char a,int n){ unsigned char c = a;return (c<<n)+(c>>(8-n)); } char decrypt(char a,int n){ return crypt(c,8-n); } int main(int argc, char* argv[]){ char buf[100]="ABC"; int i; int n=strlen(buf)+1; int key=3; for(i=0;i<n;i++){ printf("[%d]",buf[i]); } printf("\n"); for(i=0;i<n;i++){ printf("[%d]",crypt(buf[i],key) );}printf("\n"); for(i=0;i<n;i++){ printf("[%d]",decrypt(crypt(buf[i],key),key) );}printf("\n"); return 0; }
char decrypt(char a,int n){ return crypt(a,8-n); }
632 :
デフォルトの名無しさん :2005/12/06(火) 22:56:02
学部で研究しています。 交通工学分野で、料金所混雑について調べています。 料金所利用車を、ETC利用車と人による料金支払いをする車に分けて、後者の車による渋滞にETC利用車が 巻き込まれる事象をシミュレートしたいと思っています。 到着率やETC普及率を変化させ、車の平均滞在時間がどのように変化してゆくのかを調べるために、プログラム を書こうとしているのですが、Visual C++で表現できるのでしょうか? 滞在時間を2次元のグラフィックで表したいのですが。
できるよ
634 :
デフォルトの名無しさん :2005/12/06(火) 23:00:13
どんな感じなんでしょうか? プログラムは初心者同然なもので。。
初心者にVCは無理だ あきらめろ
パケの暗号複号作れるの?
おとなしくコンソールで作って 値を吐かせてGnuplotやエクセルにでもよませろ あとすれ違いだよ
マルチなら、どちらからも回答得られないよ 二兎を追う者は一兎をも得ず
[1] 授業単元: C言語入門 [2] 問題文(含コード&リンク): int型の値を文字列に変換する関数itoa()を 作成せよ。ただし、itoa()は、変換後の文字列を格納する配列へのポインタ および変換されるint型の値の2つの引数としてとることとする。 また、itoa()を用いて、標準入力から入力した整数を文字列として出力する プログラムを作成せよ [3] 環境 [3.1] OS:Unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12/7 午後8時 よろしくお願いします。
void itoa(int n,char* dest){ itoa(n/10,dest+1); *dest = '0'+n%10 }
おっと末尾'0'が入ってないなハハハ
それだと逆順に入っちゃうね
void itoa(int n,char* dest){ sprintf(dest,"%d",n); }
終了条件なくね?
>>632 ネットワークシミュレータ ns-2 が役に立つ可能性があるが、言語は
Object tcl だ。
あと、非集中システムという本で交通渋滞のシミュレーションをする話が
載っているが、言語は StarLogo だ。
どう見てもすれ違いです。
本当にありがとうございました。
バッファオーバーフローを推奨するようなプログラムを課題にするなよ
648 :
デフォルトの名無しさん :2005/12/06(火) 23:52:52
632です 確かにスレ違いでした。 すみませんでした
649 :
デフォルトの名無しさん :2005/12/06(火) 23:56:42
ファイルを読み込み、英字のみか、先頭が英字で二文字目以降が英字または 数字である文字列を抽出し、辞書順に並べ、その文字列が何行目に現れるか 列挙するプログラムを作成したい。なお辞書順とは、文字列の比較法の一つで、 文字列の先頭から順に比較していき、最初に異なった文字の大小関係とします。 但し、途中で文字が無くなった場合は無い方が小さいとします。
650 :
デフォルトの名無しさん :2005/12/06(火) 23:57:24
あ
652 :
デフォルトの名無しさん :2005/12/07(水) 00:52:26
612ではありませんが データをbit列で表して、bit shiftで暗号化する。 [0][1][2][3][4][5][6][7] 鍵 +4 [4][5][6][7][0][1][2][3] で実行するプログラムをおねがいします。
654 :
デフォルトの名無しさん :2005/12/07(水) 01:27:08
>>653 すみませんがencodeとdecodeにプログラムをわけたいのですがどうすればよろしいのでしょうか?
>>655 つboost::algorithm::all(something, boost::algorithm::is_alnum)
>>656 boost っすか。標準じゃ、無理なんすね。
>vector<int> v;
>v.push_back(count);
>m.insert(Pair(word, v));
は冗長でした。
m.insert(Pair(word, vector<int>(1,count)));
と。
>>655 f(x,y) = x & isalnum(y) として accumulate
[1] 授業単元: cプログラミング [2] ファイル入力で文字列の集合を読み込みアルファベット順にシェルソートして 要素の交換回数を出力するプログラムを作成せよ [3] 環境 [3.1] Linux [3.2] gcc [3.3] c [4] 無期限 [5] 入力ファイルはこんなのです↓ dinbnorih hiodishe oenouinnko ufrenyjmd fhagummn ・・・
660 :
デフォルトの名無しさん :2005/12/07(水) 06:26:28
時間だ! 答えを聞こう!
663 :
yuu ◆qMuXz8UNv6 :2005/12/07(水) 11:23:22
[1] プログラミング入門 [2] • キーボードから実数を5個入力し,その入力デー タのうち3つのデータから実数の平均値をもとめ る. • 求める平均は最初のデータから3個分,次のデー タから3個分および3番目のデータから3個分の 計3種類とする. • 平均をするプログラムは関数化すること.このとき, どのようにプログラムを分割するかを熟考するこ と.引数で値を渡すようにすること。 • 入力データ – 1.1 1.2 1.3 1.4 1.5 – さらに自分で考えた値 [3] 環境 [3.1] Windows [3.2] コマンドプロンプト 秀丸 [3.3]C [4] 本日中 [5] 初心者っぽくお願いします。 上のデータを入力すると1.2 1.3 1.4が出力されるという意味です。 よろしくおねがいします
#include<stdio.h> double heikin(double*,int); int main(void){ double num[5]; int i; for(i-0;i<5;i++) scanf("%lf",&num[i]); for(i=0;i<3;i++) printf("%f\n",heikin(num,i)); return 0;} double heikin(double *num,int i){ double sam=0.0; int j; for(j=0;j<3;j++,i++) sam+=num[i]; return sam/3;}
かぶった
667 :
yuu ◆qMuXz8UNv6 :2005/12/07(水) 11:57:58
ありがとうございます。今回は664を使わせてもらいました また次回もお願いします。
[1] プログラミング入門 [2] n個の数字をキーボードから入力し、その中で最大の数字を出力するプログラムを作成せよ。 [3] 環境 [3.1] Windows [3.2] Microsoft Visual C++ [3.3]C [4] 本日中 [5] scanfは使わずに。あとMAXも使わずにだそうです。 自分ではgetch()を使ってやってる途中です。 一応出力結果として input data 0: 123←この数字を入力する input data 1: 21 … input data n: ←enterのみで終了させる 最大値は○○です。 という形で。 またCを始めて間もないのでわかりやすくお願いします。
669 :
デフォルトの名無しさん :2005/12/07(水) 16:30:23
『3×3型の二つの行列A=[aij],B=[bij]を読み込み、 積ABとBAを 求めるプログラムを作成せよ。また一般的にはABとBAが 等しくならない ことを確認せよ。』ですがどなたか教えてくれませんか? CでもPascalでもいいのでお願いします。
670 :
デフォルトの名無しさん :2005/12/07(水) 16:42:55
マルチ市ね
>>668 こういうのじゃだめかな
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int max=0, data, i =0;
char temp[80];
for(;;){
printf("input data%d:", i++);
gets(temp);
if(temp[0] == '\0')break;
data = atoi(temp);
if(data > max)
max = data;
}
printf("\n最大値は%dです\n", max);
return 0;
}
>>671 Enterで終了するなら if(temp[0] == '\0')break; じゃなくて if(temp[0] == '\n')break; じゃね?
673 :
668 :2005/12/07(水) 18:19:23
>>671 これでできました。ありがとうございました。
>>672 "\0"を"\n"にしてやってみたんですが改行されてそのままi++がループされるままになりました。
このままでよかったようです。
getsの仕様を知らずに恥をかいた、fgetsと違って\nは捨てるのねorz
getsのほうが便利だよな
676 :
デフォルトの名無しさん :2005/12/07(水) 18:30:26
[1] プログラミング基礎 [2] 下記 [3.1] windowsXP [3.2] Visual Studio 6.0 [3.3] C++ [4] 明日まで [5] 初心者レベルです。 instreamとoutstreamを習っていてそれの練習問題なんですが、ご指導お願いします。 まずgradebook.txtという名のinput fileに以下の文があるとします。 A B 40 50 60 70 60 80 75 83 90 56 C D 67 36 94 26 78 46 83 38 46 88 E F 67 98 67 89 66 75 38 47 90 68 G H 60 52 93 36 84 53 82 94 22 34 最初のローマ字2つは生徒の姓・名、あとの数字はテストのスコアです。 このテストのスコアをinstream>>を使ってまず配列にあてはめて、 それから各生徒の平均スコアを計算し、average.txtという名のoutput fileに 上の情報+平均値を各ラインの最後に付け足して保存させる、といった具合です。 A B 40 50 60 70 60 80 75 83 90 56 66.4←平均値追加 といった感じです。 よろしくお願いします。
getsなんて使うなよ
680 :
デフォルトの名無しさん :2005/12/07(水) 20:02:01
C言語を習い始めている者なんですが 「10個の配列a[10]に「0,1,2,3,4,5,6,7,8,9」とループで代入し、 その後に別ループで配列a[0]〜a[9]のすべてを表示するプログラム」 という問題が分かりません どなたかお願いします
>>680 #include<stdio.h>
int main(void)
{
int a[10], i;
for(i = 0; i < 10; i++){
a[i] = i;
}
for(i = 0; i < 10; i++){
printf("a[%d]:%d\n", i, a[i]);
}
return 0;
}
ありがとうございます!! return 0; って必要なんですか?
683 :
680 :2005/12/07(水) 20:08:59
>>682 次からは
>>1 のテンプレに従うように
return 0;がなんのことかわからないなら
#include<stdio.h>
main()
{
int i;
int a[10], i;
for(i=0;i<10;i++){
a[i]=i;
}
for(i=0;i<10;i++){
printf("a[%d]:%d\n",i,a[i]);
}
}
とでもすればいい
685 :
680 :2005/12/07(水) 20:28:11
再びお願いしますm( __ __ )m 「配列data[5]={3,6,2,9,1}の内容をdata2に代入(コピー)して出力するプログラム」
>>685 テンプレと書き込みを無視して、しかも思考放棄をしている人間に答える人はいません
>>686 もう少し優しく行こうぜ。
int data[5]={1,2,3,4,5};
int *data2; // *data2と書くと配列の数を省略できる
int i;
data2=&(data[0]); // &は全部のデータをコピーするおまじない。
for(i=0;i<5;i++){printf("%d",data2[i]);}
return 0;
>>687 #include<stdio.h>
#include<stdlib.h>
#define True 0
#define False !0
#define kArraySize 5
int main(int argc, char *argv[]){
int *data2,*p,i,data[5]={3,6,2,9,1},*q;
data2=(int*)malloc(sizeof(int)*kArraySize);
if(data2==NULL){
fprintf(stderr,"error: cannot allocate memory");
return False;
}
p=data;
q=data2;
for(i=0;i<kArraySize;i++) *q++=*p++;
for(i=0;i<kArraySize;i++) printf("data2[%d]=%d\n",i,*data2++);
return True;
}
>>690 mallocとか習ってないの使っても
>>686 は解らないだろうが。
んなもん出したら「私は2ちゃんで聞いてきました」丸出しだっつーのwwww
多分授業でも&は基礎中の基礎だから習ってるだろうし、
悪いことは言わないから
>>687 で出しとけ。
692 :
691 :2005/12/07(水) 20:49:24
693 :
名無し :2005/12/07(水) 20:50:28
>>149 のプログラムを
>>572 のようにし実行したのですが、
A,B,C,Dやa,bの値をどのように入力したらよいのでしょうか?
プログラムを実行し、1,-24,185,-450と入力しEnterキーを押すとと、a,bの値を入力する前に
0.000000という実行結果が表示されます。
カンマ区切りってscanfできたっけ? スペースで区切ってみて。
scanf("%lf,%lf,%lf,%lf",&A,&B,&C,&D);ならできたかな?
いっそscanfやめてargvを使うというのはどうだろう
697 :
名無し :2005/12/07(水) 21:00:21
>>694 ありがとうございます。
試してみます。
698 :
285 :2005/12/07(水) 21:23:09
ポインタを理解してない香具師が知ったかで回答しているスレはここですか?
double s1,s2,xb,yb,x[50],y[50],a,b,x,y; ↓ double s1,s2,xb,yb,x[50],y[50],a,b,x2,y2;
701 :
591 :2005/12/07(水) 21:29:46
>>591 です。もう一度書き直します。
[1] プログラミング演習U
[2] 問題文:
隣接リストを使った深さ優先探索プログラムを作成しなさい。
実行例
c01% _a.out < G1 _ 0 -> 1 1 -> 3 3 -> 5 5 -> 6 6 -> 4 4 -> 2
c01% _a.out< G2 _ 0 -> 1 1 -> 3 3 -> 2 4 -> 6 6 -> 5
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc 2.9
[3.3] 言語:C++
[4] 期限: 12月7日17時
[5] その他の制限:初心者
下にG1とG2書きます。
702 :
591 :2005/12/07(水) 21:30:23
>>591 のG1とG2です。
G1
7
0 1
1 2
1 3
2 4
3 5
4 5
4 6
5 6
G2
7
0 1
1 2
1 3
2 3
4 5
4 6
5 6
>>698 アップローダーが阿呆なコード吐くからちょっと
>>1 のであげなおして。
704 :
285 :2005/12/07(水) 21:34:45
>>704 ちょwww どこを見ろというんだwww
ワロタw
>>704 { scanf("%lf,%lf",&x[i],&y[i]); }の全角スペースを消す
変数の重複をなんとかする(x→xx,y→yyとか適当なのに)
最後にreturn 0;を追加
で完成
708 :
285 :2005/12/07(水) 21:44:16
return 0;
>>710 さんくす。
int main()なんで、
最後の}の前にreturn 0;を入れるほうがいいな。
×ほうがいいな。 ○のが必須。
714 :
713 :2005/12/07(水) 22:20:28
すまん、誰か700解いてやってくれ。 やる気なくなった...
>>712 ISO/IEC 9899:1999 5.1.2.2.3 Program termination 1
reaching the } that terminates the main function returns a value of 0.
716 :
640 :2005/12/07(水) 22:27:28
期限は過ぎてしまいましたが、どなたか
>>644 の続き、もしくは新しいプログラムを教えてもらえないでしょうか・・・
>>715 ええい。手持ちのCコンパイラでそういうのを持ってる奴はどれくらいいるかっつーの。
C99は死んだ規格だ。Intel C++についてるくらいしかないだろ今。
>>718 715と同様の規定はC++にもある。
C++なら山ほど居るだろう。
>>719 説明になってない。C99に準拠している処理系を列挙してみろよ。
Intel C++、gcc(但し準拠率は80%程度)ぐらいしかないぞ。
>>719 そこまで言うなら、Cと書かれたプログラムには、これから_Complexとか
使ってもいいんだな。restrictとか、コンパウンドリテラルとか使っていいんだな。
出題者から文句が来るだけだぞ。
C++だって、ほとんどの処理系で実現されていないexportなどは皆避けて
いるし、不具合は大抵workaroundするのが普通だろ。規格規格言っても
コンパイルできないソース、現実のコンパイラに即してない規格は宿題スレ
には不要だ。
722 :
719 :2005/12/07(水) 22:49:23
>>720 別にC99準拠の処理系の話をするつもりではなかったんだけど。
単にC++ではこうだと書いただけで。
C++の規格は9899:1999ではなく、14882:2003ですから。 そちらを出しましょう。
>>720 準拠している処理系がどうあれ、C99が最新のC言語規格であること
に変わりはなく、それはISOが定めている。
もしその点を問題としないのであれば、C++を一切解釈できない純粋な
Cコンパイラを現在どれだけの人間が使っているかを気にしてみては
どうか。
現実問題、ほとんどのコンパイラはreturn 0;なしのmain関数を解釈できる。
>>715 の正しい書き方はこうすべきだ。
>ISO/IEC 9899:1999 5.1.2.2.3 Program termination 1
>reaching the } that terminates the main function returns a value of 0.
>ただしこれはC99の規格。C89ではreturn 0;が必要。
>>727 コンパイル時に警告出るぞ。大抵のCコンパイラは。
C++モードだと当然出ないが。
>>727 俺も論点をずらさせてもらうが、お前は、exportを平気で使うC++プログラムを
書いて、「だって規格通りでしょう」と平然と言って、周囲の人間を辟易させる
人間だ。去れ。
http://www.research.att.com/~bs/bs_faq2.html#void-main In C++, main() need not contain an explicit return statement. In that case, the value returned is 0, meaning successful execution. For example:
#include<iostream>
int main()
{
std::cout << "This program returns the integer value 0\n";
}
Note also that neither ISO C++ nor C99 allows you to leave the type out of a declaration. That is, in contrast to C89 and ARM C++ ,"int" is not assumed where a type is missing in a declaration. Consequently:
#include<iostream>
main() { /* ... */ }
is an error because the return type of main() is missing.
真偽の程はしらん。
[1] 授業単元:コンピューター演習 [2] 問題文(含コード&リンク): 下記の出力結果を得るプログラムをfor文を用いて簡潔に書きなさい。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * (* の数は縦横9×9です) [3] 環境: OS:windows コンパイラ:BorlandC++Compiler 言語:C [4] 期限:12/8朝 [5] その他の制限:C言語習い始め for文で 宜しくお願いします
う・・図形が違いました * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
多分本当は中央に空白があると推定。 #include <stdio.h> int main(int argc, char* argv[]) { int x,y; for(y=0;y<9;y++){ for(x=0;x<9;x++){ if((2<=x&&x<=6)&&(2<=y&&y<=6)) printf(" "); else printf("* "); } printf("\n"); } return 0; /* 満足したか? */ }
>>736 if((3<=x&&x<=5)&&(3<=y&&y<=5)) printf(" ");
>>735 C++はC89のすべてを包括しているわけではないが、C99もそうだって事だね。
これからC99の規格書を持ち出して議論する馬鹿はことごとく非難してやる。
[1] 授業単元:コンピュータ演習 [2] 問題文(含コード&リンク): 複数のデータを入力し、入力したデータの最大値を計算できるプログラムを作成せよ。 入力する値:データの数、データ(データの数分) [例] 3つのデータがあるとき 入力 データ数=3 データ1=10.5 データ2=4.3 データ3=-8.5 出力 最大値=10.5 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: [2005年12月8日23:30まで] [5] その他の制限:繰り返し文はfor文のみ使用。if 文・if-else文は習っています。 while文・ポインタ・配列はまだ習っていません。 >>制限が多くて大変申し訳ないのですが、どなたかご教授ください。お願いします。
>>742 データの入力はどうやるの?
>>671 を参考にすればほとんど出来たようなものだと思うけど
#include <stdio.h> int main(){ int max; printf("データ数=");scanf("%d",&n); printf("データ%d=",0);scanf("%d",&max); for(i=1;i<n;i++){ printf("データ%d=",i);scanf("%d",&input); if(max<input)max=input; } printf("最大値=%d\n",max); return 0; }
>>742 int max; → int i,max,input;
あー、データ%dは1からスタートか。
printf("データ%d=",1);scanf("%d",&max);
printf("データ%d=",i+1);scanf("%d",&input);
って、入力値実数か。忘れてた。 #include <stdio.h> int main(){ int i,n; double max,input; printf("データ数=");scanf("%d",&n); printf("データ%d=",1);scanf("%lf",&max); for(i=1;i<n;i++){ printf("データ%d=",i+1);scanf("%lf",&input); if(max<input)max=input; } printf("最大値=%lf\n",max); return 0; }
どう見ても
>>741 はキモいです。
本当にありがとうございました。
もう宿題スレに来ないで下さい。
751 :
742 :2005/12/07(水) 23:55:28
752 :
デフォルトの名無しさん :2005/12/08(木) 00:11:45
[1] 授業単元:情報演習 [2] 問題文:1、引数として渡された文字を、もしその文字が小文字であれば大文字に、 大文字であれば小文字に置き換える関数を定義し、実行せよ。 2、引数として渡された文字列(英文)の英単語の数を返す関数を定義せよ。 ただし、英単語は、isspace関数が真となる文字の並びで区切られているものとする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:12月10日 [5] その他の制限:ポインタはまだやってません よろしくお願いします。
[1] 授業単元:生産工学 [2] 問題文(含コード&リンク): 次の4点 (0,0),(1,0),(1,1),(0,1) を順に通る3次のSPLINE曲線とそのグラフを描くプログラムを作成せよ。 始点と終点の接線の方向はそれぞれ(1,1)と(-1,0)とする。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラは何でもいいっていわれました [3.3] 言語: C [4] 期限: 2005年12月10日まで [5] その他の制限: プログラムリストとそれによってできたグラフを印刷して提出といわれますた。 グラフのソフト等も特に制限はないそうです。 よろしくお願いします。
>>752 ctype.hは利用していいの?
あと2番の引数にchar *strとか使っちゃだめなの?
>>752 (1)
#include<stdio.h>
#include<ctype.h>
int xchg_ascii(int c){
if(islower(c))return toupper(c);
return tolower(c);
}
int main(){
int ch;
while((ch=getchar())!=EOF)putchar(xchg_ascii(ch));
return 0;
}
>>752 (2)
#include<stdio.h>
#include<ctype.h>
int count_word(char string[]){
int i,count=0;
if(string[0]=='\0')return 0;
for(i=1;string[i]!='\0';++i)
if(isspace(string[i]) && !isspace(string[i-1]))
++count;
if(!isspace(string[i-1]))++count;
return count;
}
int main(){
char buf[80];
gets(buf);
printf("%d\n",count_word(buf));
return 0;
}
>>752 #include <stdio.h>
#include <ctype.h>
int swap_uplow(int ch){ /* 問1 */
if( isupper(ch) ) return tolower(ch);
if( islower(ch) ) return toupper(ch);
return ch;
}
int count_words(char **data, int size){ /* 問2 */
int i, count = 0;
for(i = 0; i < size; ++i){
char *p;
int is_space_flag = 1;
for(p = data[i]; *p; ++p){
if( is_space_flag && !isspace(*p) ){is_space_flag = 0; count++;}
else if( !is_space_flag && isspace(*p) ) {is_space_flag = 1;}
}
}
return count;
}
int main(int argc, char **argv){
int i;
for(i = 1; i < argc; ++i){
char *p;
for(p = argv[i]; *p; ++p) putchar(swap_uplow(*p)); /* 問1動作確認 */
putchar(' ');
}
puts("");
printf("count = %d\n", count_words(argv+1, argc-1)); /* 問2動作確認 */
return 0;
}
758 :
752 :2005/12/08(木) 00:36:42
>>755 申し訳ございません。(1)はctype.hを使わないという条件を忘れていました。
(2)は大丈夫です。ありがとうございます。
759 :
755 :2005/12/08(木) 00:49:33
>>758 ascii決め打ちで良いなら(1)(2)のどちらか。
万が一それ以外も考えなくてはならない場合は(3)を使ってください
(1)
int xchg_ascii(int c){
return c ^ ((c|0x20)-'a'<=25u)<<5;
}
(2)
int xchg_ascii(int c){
if('a'<= c && c <= 'z')return c-'a'+'A';
else if('A' <= c && c<='Z')return c-'A'+'a';
else return c;
}
(3)
char lower[]="abcdefghijklmnopqrstuvwxyz";
char upper[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int xchg_ascii(int c){
int i;
for(i=0;lower[i];++i)
if(lower[i]==c)return upper[i];
else if(upper[i]==c)return lower[i];
return c;
}
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 大きさ500×500ドットの画像(PBM形式)を作成し、 パイプにてdisplayコマンドで表示する。 画像は左上を原点とし、右にx軸、下にy軸とする。 コマンドライン引数からx、y座標と半径rを入力し 中心がx、yで、半径r以下の点を黒く塗り潰す。 二次元平面の点については構造体を定義し、構造体を使用する。 なお、上記黒丸が例2のように画像からはみ出す場合も ちゃんと表示出来るようにすること。 コマンドラインから得られた文字列を数字(int型)にするには、 <stdlib.h>の中の関数atoi を使用する。文字列strに文字列"123"が入っているとき、 atoi(str)の戻り値はint型の123と言う値になる #include <stdio.h> #include <stdlib.h> #include <math.h> #define N 500 #define BLACK '1' #define WHITE '0' typedef struct{ int x,y;} XYdata; main(int argc, char *argv[]) {XYdata base; int r; init(); /* 円の範囲を黒くする */circle(base, r); /* 表示 */ disp();} /* 画像データ初期化 総ての点を白に初期化 */void init(void){} /* 引数で指示された座標を黒くする */void draw(XYdata a){} /* 引数で指示された座標を中心に,半径r以内の点を黒くする */void circle(XYdata c, int r){} /* Plain PBM形式で画像データを出力する */void disp(void){} [3.1] OS: Linux [3.2] gcc [3.3] c言語 Cのみで [4] 期限: 2005 12 8 20:00 [5] その他の制限: 構造体のところです。よろしくお願いします。m(==)m
761 :
752 :2005/12/08(木) 00:56:10
>>755 ご丁寧にありがとうございます。
解決しました。
762 :
デフォルトの名無しさん :2005/12/08(木) 01:27:28
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 自然数2コの最大公約数を計算する関数を作成し、それを利用して以下のプログラムを作成する 標準入力から自然数M, N, dm, dnを入力し 自然数M〜M+dmとN〜N+dnとの最大公約数を求める 結果は標準入力で表形式で示し、出力終了後これらの中で互いに素である自然数の組を 標準出力にしめす
>>762 期限とCかC++かくらい書いてはどうかね
今日はもう寝るから答えんが
Cとか言うと、また荒れるかもしれんからなぁ。 どっかのバカが。
766 :
752 :2005/12/08(木) 01:33:13
>>756 ですが、実行すると何を入力しても結果が1にしかなりません。
どこを変更すればよいでしょうか?何度もすみません。
768 :
デフォルトの名無しさん :2005/12/08(木) 01:40:17
実行したときの選択肢の選択で、scanf文を用いて1か2を入力させて、その結果によって、 計算結果に用いるパラメータを変えるようにしたいのですが、1,2以外の数字を入力したときに 「その選択肢は間違っている」と表示した後に、また同じ入力のメッセージを表示するにはどうしたらよいでしょうか? 1,2を入力した場合にはちゃんと計算されます。
んなわきゃねぇ
771 :
755 :2005/12/08(木) 01:52:52
>>766 自分の環境だと上手く動くからちょっと分かんない。
とりあえず結果が変になる入力文字列を1個でいいから教えてくれ。
それを聞いたら原因も分かるかもしれないから。
>>770 じゃあ問題が間違ってるんですかね・・・
問題文にはこう書いてあるんですけど・・
773 :
752 :2005/12/08(木) 02:02:34
>>771 あ、すみません、多分今実行してる環境が宿題を提出する環境と違うからうまくいかないのかもしれません。
明日提出する環境で実行してみます。
EBCDIC とか
775 :
676 :2005/12/08(木) 02:45:36
>>679 >>689 面倒な問題に素早くお答えいただきありがとうございました!!
679は「お〜なるほど!」って感じで理解できたのですが689は難しすぎて
初心者の自分にはさっぱりでした・・・。
今から早速試してみます。
776 :
デフォルトの名無しさん :2005/12/08(木) 05:05:19
>>776 そのサイトちょっと見てみたが酷くないか?
こんなのを大学の講義で使ってんの?
つっこみたくなる気持ちはわかる。 酷い
782 :
デフォルトの名無しさん :2005/12/08(木) 11:07:15
>>780 stdafx.hの
中身は何でしょうか?
783 :
しぃ :2005/12/08(木) 11:42:47
〈問題文〉 a[1][1] a[1][2] a[1][3] a[1][4] a[2][1] a[2][2] a[2][3] a[2][4] a[3][1] a[3][2] a[3][3] a[3][4] a[4][1] a[4][2] a[4][3] a[4][4] この様な配列に1か0のデータが入っているものとする。現在地がa[x0][y0]から目的地a[x1][y1]まで移動するとき の1番早い辿り方を求めるプログラムを作成する。ただしデータに1が入っている所には移動できない。0と入っている所のみ移動可能とする。 また移動は[3][1]→[3][2]のように1つの数字の加減しか出来ない。([3][3]→[2][2]のように斜めはダメ) 〈環境〉 Visual Windows for BC++ / C
「早い」を定義してください。
最短手数って意味だろ.幅優先探索.
786 :
デフォルトの名無しさん :2005/12/08(木) 12:45:39
問題文 曜日ごとに設定された時間になったらダイアログを表示し、知らせる 設定した時間をカウントダウンして、ダイアログを表示し、知らせる 上記の2機能を併せ持つタイマーを作れ 環境 OS:XP コンパイル:Visual C++ 6.0 言語:C++のみ 期限:2006年12月25日 その他の制限は特みありません
787 :
助けてください・・・ :2005/12/08(木) 12:51:13
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 「あなたはビデオ店のオーナーである。」という問題。 オブジェクト メンバーカードを定義する。 メッセージ メンバー登録:会員番号を出力 借りた時:借りる時に借りた本数を出力 返した時:返す時に返した本数を出力 借りているかの確認:「レンタル中は1」、「非レンタル中は0」を出力 レンタル総数の確認:何本レンタルしているか出力 実行時にメンバー会員ナンバーをキーボードから読み込んで その条件に合致する会員情報(上記の内容)を出力する。
788 :
助けてください・・・ :2005/12/08(木) 12:52:08
メンバー登録 ↓ メンバーNo.入力 ↓ メンバー情報出力 ↓ 1.借りる 2.返す 3.状態確認 4.作業終了をwhile文で回す。 ↓ 作業終了 というのが問題の流れです・・・。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限: 来週の12/15まで。 [5] その他の制限: #include<iostream.h>から書き初めてwhile文などを使用して書くのをお願いします。
789 :
デフォルトの名無しさん :2005/12/08(木) 13:32:23
[1] 授業単元: C言語/配列について [2] 問題文(含コード&リンク): 9×9の2次元配列の中身を九九で埋め、出力する プログラムを作成せよ。ただし、九九は初期化で与えるのではなく、計算によって配列に格納すること。 各データの出力は整数3桁とすること 実行結果 XXXX [00:00] >> a.out 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 [3] 環境 [3.1] OS:Linux [3.2] gcc(?) [3.3] 言語:C [4] 期限:2005年12月8日 [5] その他の制限:
>>789 #include <stdio.h>
int main(void)
{
int kuku[9][9], i, j;
for( i = 0 ; i < 9 ; i++ ) for( j = 0 ; j < 9 ; j++ ) kuku[i][j] = (i + 1) * (j + 1);
for( i = 0 ; i < 9 ; i++ ) {
for( j = 0 ; j < 9 ; j++ ) printf("%3d", kuku[i][j]);
puts(""); /*改行なのでprintf("\n");でもOK*/
}
return 0;
}
791 :
デフォルトの名無しさん :2005/12/08(木) 13:46:07
>>790 ありがとうございます。これからは自分で勉強します
792 :
しぃ :2005/12/08(木) 14:48:01
793 :
752 :2005/12/08(木) 14:50:40
2、引数として渡された文字列(英文)の英単語の数を返す関数を定義せよ。 ただし、英単語は、isspace関数が真となる文字の並びで区切られているものとする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C #include<stdio.h> #include<ctype.h> int count_word(char string[]){ int i,count=0; if(string[0]=='\0')return 0; for(i=1;string[i]!='\0';++i) if(isspace(string[i]) && !isspace(string[i-1])) ++count; if(!isspace(string[i-1]))++count; return count; } int main(){ char buf[80]; gets(buf); printf("%d\n",count_word(buf)); return 0; } 何度もすみません。提出する環境で実行してみましたが、値が1にしかなりませんでした。 どんな文字列を入力しても結果は一緒でした。助けてください。
>>792 期限は今日中だろ?急かしても回答するやつが減るだけだぞ.
どんな入力してんだ?
796 :
しぃ :2005/12/08(木) 15:49:31
>>794 期限は今日まででは無いのですが出来るだけ早く作成したかったので・・・
一応期限は今月の20日までとなっています。
〈問題文〉
a[1][1] a[1][2] a[1][3] a[1][4]
a[2][1] a[2][2] a[2][3] a[2][4]
a[3][1] a[3][2] a[3][3] a[3][4]
a[4][1] a[4][2] a[4][3] a[4][4]
この様な配列に1か0のデータが入っているものとする。現在地がa[x0][y0]から目的地a[x1][y1]まで移動するとき
の1番早い辿り方を求めるプログラムを作成する。ただしデータに1が入っている所には移動できない。0と入っている所のみ移動可能とする。
また移動は[3][1]→[3][2]のように1つの数字の加減しか出来ない。([3][3]→[2][2]のように斜めはダメ)
配列に入る数値は任意に変えられるものとする。
〈環境〉
Visual Windows for BC++ / C
とっても難しいらしく自分では全く考えも浮かびませんでした。
よろしくお願いします。
>>796 悪い期限は俺の見間違いだった.
が,こんな時間に急かしても意味ねーぞ.落ち着いて待て.
>>797 でも、ここって1回ヌルーされたらそのまま回答出ないのほとんどじゃね?
辺のweightが1か0だけなら、単に幅優先探索をするだけ。 斜めへの移動を禁止するには、そういう辺を作らなければよい。 データ構造はそのまま隣接行列になっている。
>>798 俺もそんな希ガス
もっとも、それはあまりにくだらない課題であったり、誰もがまだ
未回答なのに気づかず忘れられていたり、質問者がなんどもポストするからだと思われ
>>796 0100
1100
0000
0000
こんな場合で始点1,1、終点4,4の場合はエラー?
>>800 軽めの問題ならいいんだけどね
半分暇つぶしできてるんだろうし
>>803 C++でコンパイルせずにCでコンパイルすると、「右辺値には代入できない」
エラーが出るね(・∀・)
806 :
しぃ :2005/12/08(木) 18:47:44
>>801 どの方向にもいけない場合は考えなくてもよいみたいです。
>>803 はい・・・。
Cでコンパイルすると「エラー E2277 ・・・ 39: 左辺値が必要(関数 solve )」
とエラーが出てしまいます。。
807 :
803 :2005/12/08(木) 18:56:49
これ C++ からの書き方だったんだ.知らずに使ってたよ……. というわけで (h += 1) %= M みたいなのを全部 ++h; h %= M; にでも書き換えてください.
808 :
デフォルトの名無しさん :2005/12/08(木) 19:08:16
場違いだったらごめんなさい。 「Visual Studio .NET 2003」Windowsアプリを始めて作ります。 言語は、C#で作ってます。 サーバー上のMySQLからデータを取得して表示させたりしたいのですが、 そもそもDBへの接続の仕方が解りません。 一応、MySQLのODBCはインストールしてあります。 どなたかアドバイス頂けないでしょうか。 ちなみに私は、Windowsアプリの開発は始めてであり、 今まで、PHP+MySQLでの開発をメインに行ってました。 PHP+MySQL開発歴は、3年ぐらいになります。 Windowsアプリ開発歴は、1ヶ月も満たないです。 Googleに聞いてもSQL Serverの事例ばっかで なかなか参考になるページがありませんでした。 MySQL接続に関して、参考になるページがご存知でしたら そちらも合わせて宜しくお願い致します。
>>808 長文乙 でも使ってる言語すらスレ違いなので他を当たってください
810 :
デフォルトの名無しさん :2005/12/08(木) 19:09:52
すみません。。。。 808に書いた者です。 よくよく見たらC#相談室なるスレッドが…。 そちらで再度質問してみます。 すみませんでした。
811 :
デフォルトの名無しさん :2005/12/08(木) 19:11:25
>>809 ですよね。
810でも書いた様に他のスレッドに移ります。
汚してしまって申し訳ないです。
812 :
しぃ :2005/12/08(木) 19:40:51
>>803 ,807
すごいプログラムどうもありがとうございました。
自分じゃなかなか理解できそうにもないですが
また何かありましたらよろしくお願いします。
>>730 exportはオプション扱いだろ?
exportを実装してない処理系でもC++の規格通りである可能性がある。
と、揚げ足をとってみるテスト
>>813 また変な生ゴミが沸くからそういうのはやめてくれ。頼む。
>>813 論点ずれてるよ、と突っ込みを入れてみるテスト。
すごいなー
[1]授業単元:プログラミング [2]問題文:名前、年齢、住所をメンバーとする構造体をつくり、学籍番号下二桁を引数として値を返す関数をもつプログラムを作成せよ(三名の情報) [3]環境 [3.1]OS:Windows [3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト [3.3]言語:C [4]期限:今週中 [5]その他の制限:適当に値など入れて下さい お願いします
821 :
820 :2005/12/08(木) 22:04:50
改行し忘れました すいませんがお願いします
構造体はまあこんなもんだろう。 struct student{ char name[100]; int age; char address[100]; }; で、どうやって学籍番号の二桁を引数?値を返す?三名の情報? 意味が全く解らないぞ、この問題。
実行結果として3名のデータを提示しておけって事だと・・・
>>824 それでも学籍番号下二桁だけでデータを特定できるのか疑問
826 :
820 :2005/12/08(木) 22:18:25
学籍番号下3桁目は英字の学校もあるだろうからそういう変な考えにいたらせないための配慮じゃなかと?
>>824 入力データとして三名分のデータを用意するって事じゃめーか?
課題内容を
>>820 がもっと解りやすく説明してくれることを要求する。
以下は勝手な妄想。
@データをファイルから読み込む or プログラムにべた書き。
A学生情報を入れる構造体の配列に入れる
BAをソートする
C学籍番号を引数に渡すと、構造体のポインタor構造体そのものを返す関数を作成する。
DCを表示する。
こんなかんじか?
Aにおいて、名前でソートを行う。 これに基づいて学籍番号を付ける。 を追加。
830 :
デフォルトの名無しさん :2005/12/08(木) 22:23:26
>>819 タイプミスorz
今年の25日まででした
値を返す関数ってのは、データがないときにデータが無いからエラーを返しておくとかそういうもので良いかと・・・ 生徒は50人しかいないのに80番指定したとか・・・
俺たちはエスパーではないからとっとと説明しる!
>>820
833 :
820 :2005/12/08(木) 22:29:27
>>828 >>829 100%把握できてる訳じゃないですがそんな感じだと思います
プログラムにべた書きです
834 :
820 :2005/12/08(木) 22:36:41
ヒントをもらったので以下↓ struct student request(int sn) { struct student xx[..]; xx.zz[0] = ......; } int main() { scanf..... xx = request(yy); printf("%s",xx.zz); };
836 :
820 :2005/12/08(木) 22:43:42
なんかぐだくだになってしまいましたが
>>822 のやつとあらかじめ三名のデータをプログラムに書いておくことははっきりしてます
整理します
自分もパニックですorz
820 が整理するまで待機
838 :
デフォルトの名無しさん :2005/12/08(木) 22:48:26
タイプミス発見orz 修正します 問題文 曜日ごとに設定された時間になったらダイアログを表示し、知らせる 設定した時間をカウントダウンして、ダイアログを表示し、知らせる 上記の2機能を併せ持つタイマーを作れ 環境 OS:XP コンパイル:Visual C++ 6.0 言語:C++のみ 期限:2005年12月25日 その他の制限は特にありません
>>836 とりあえず問題文をそのままうpしてみてはどうか?
840 :
820 :2005/12/08(木) 22:53:50
>>839 その問題文が
>>820 なんですorz
最初見たとき皆ハァ?って感じでしたよ
今、言われたことを整理してます
struct student{ char name[100]; int age; char address[100]; }; int hoge(int d1, int d0) { return 1; }
あれだろ、曖昧な客からの理不尽な要求から 仕様記述してプログラム化する訓練じゃないか?
843 :
820 :2005/12/08(木) 23:03:30
実行結果が 名前=田中太郎 年齢=21 住所=埼玉県越谷市 学籍番号32田中太郎の情報↑ とりあえず一つ一つ
一つ一つにすんな読みづらい。 全部まとめて、長くなったらアップローダ使え。
学校で、 「キーボードから西暦の年、月、日の値をy/m/dの形式で入力すると、その次の 日の年、月、日を画面に _年_月_日の次の日は_年_月_日です。 と表示するプログラム」 と言う課題が出たんですが、みなさんならどういうやり方でしますか? 先生は、配列を使えって言ってたんですが、switch文&if文を使う方法しかわからなくて・・・ 配列を使うプログラムって・・・??
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; scanf("%d",&y); scanf("%d",&m); scanf("%d",&d); if(month[m-1]==d) {m++;d=1;} printf("%d年%d月%d日",y,m,d); とかそんなところ。
days[12]={31,28,31,30,31,30,30,31,30,31,30,31}; if(day+1 > days[month-1]){ day-=days[month-1];month++; } こんなイメージ。2月と12月だけ特殊。これは自分で考えてくれ。
848 :
820 :2005/12/08(木) 23:16:23
実行結果が 名前=田中太郎 年齢=21 住所=埼玉県越谷市 学籍番号32田中太郎の情報↑ これは32を引数として値を返した 数字入力してプログラムにあれば出力 なければエラーですと表示するなど これでわかりますかね?
>>846 すばやいレスありがと。
うるう年が入っていませんねぇ・・・
自分で考えるか・・・
>>820 に説明能力がないってことはよく分かった
851 :
820 :2005/12/08(木) 23:25:34
入力データとして三名分の名前、年齢、住所を
数字を入力してプログラム内にあれば
実行結果が
名前=田中太郎
年齢=21
住所=埼玉県越谷市
学籍番号32田中太郎の場合↑
22を入力したらプログラムになかったらエラーですと表示
これを構造体と関数を用いて書く
>>850 よく言われますorz
うぜえなこいつ
>>820 もし本当に問題といてほしいなら、問題文を完璧にまとめてから書き込みな。
こんな情報を小出しにされたら誰も解けんし、解く気も起きん。
今日は問題の説明すらできない奴が多いな
「入力データとして三名分の名前、年齢、住所を 数字を入力してプログラム内にあれば 実行結果が 」 10回読み返してみて、それでもこの日本語が正しいというのなら、お前はチョン。
857 :
820 :2005/12/08(木) 23:47:46
@学生三名の名前年齢住所のデータをプログラムに書く A学生情報を、構造体の配列にいれる BAをソートする C学籍番号を引数に渡すと、構造体そのものを返す関数を作成する DCを実行結果として表示する わからないところがあれば指摘してもらえると助かります それを改めて自分が講師にききます
>>854 とりあえずnum_stepの値が正しいか確認してみれ
それとhistの初期化はmemset(hist, 0, num_step)の方がスマートだな
>>858 ありがとうございます。
num_stepはどうやら正しい値が出ているようなのですが、
その正しい値でint hist[N]とすると入力データが全て0とされてしまい上手くいきません。
while(fscanf(f_in,"%f",&data)!=EOF){
hist[(int)((data - minvalue) / step)]++;
}
部分が問題なのでしょうか?
>>859 (data-minvalue)/stepの値は正しいのか?
とりあえず少しでもアヤシイと思った値は全て出力させてみれ
%f → %lf だな
それがあったか。そういやそうだよな
scanf系がprintf系より変換指定子に五月蝿いこと忘れてたぜ'`,、 ( ´∀`)ノ '`,、
しかし
>>859 みたいにやる気のある奴の質問は答えがいがあるな
863 :
854 :2005/12/09(金) 00:29:38
みなさま丁寧な回答どうもありがとうございました。 どうにか解決できそうです。
864 :
820 :2005/12/09(金) 00:45:15
知恵が足りなくて説明する能力もありませんが、
本気でこの問題を解きたい、理解したいと
思っていることだけはわかってほしいです
まず、与えられた問題情報は
>>820 の情報だけだったんです
皆さんにもわからないなら問題を出した講師側に
もしかしたら足りないところがあったのかもしれない
そう思ったので指摘をお願いしました
スレ汚して申し訳ないです
おーい,他になんか解き残した問題ないか?
ネトゲでも作ってろ
>>864 とりあえずあれだ、その講師止めさせろ
構造体メンバとして学籍番号が無いのに、学籍番号が与えられて結果を返すルーチン作れって言われても
何をどうすりゃいいのかなんて分かるわけがない
>>864 教師をぶっ飛ばせ!
メールアドレスあるならフリーの垢から教師辞職しろボケとでも送って下さい
869 :
820 :2005/12/09(金) 01:04:08
実はその講師がつくった問題がもう一つ [2]問題文:ファイルからx座標、y座標のペアを二つ読み込み、二点間の距離を求めて出力するプログラムを作成せよ 1つ目のx座標 1つ目のy座標 2つ目のx座標 2つ目のy座標 ファイルの内容は 2 7 6 13.9 でした これは問題として成立していますか? C言語の実力があれば見抜けると思うんですが今回を期に より一層気合いが入りました
870 :
学生 :2005/12/09(金) 01:04:19
初めまして。早速ですが、質問させていただきます><。 学校の課題でpgm形式の画像ファイルを入力する関数と出力する関数を作成せよという課題がでました。 ヘッダ部分を読み込むのはできたのですが、それ以降が自分には難しすぎて手におえません。 どなたかアドバイスなどをいただけたらと思うのですが。。。 よろしくお願いします>< ただいま入力関数を作成中で出力は手をつけていません。 お粗末ですが、作成中のプログラムを載せさせていただきます。 ちなみに扱うのはP5形式のファイルで、255階調です。 ヘッダファイル #include <stdio.h> typedef struct picture{ int w; /*横幅*/ int h; /*縦幅*/ int **gs; /*グレイスケール*/ }
871 :
学生 :2005/12/09(金) 01:05:07
ソースファイル1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "pic.h" void read_pic(Pic *p){ FILE *fp; char buf[2000]; int i,j; if((fp = fopen("pic1.pgm","r")) == NULL){ puts("file open error."); exit(0); } fgets(buf,1024,fp); if(strncmp(buf,"P5",2) != 0){ puts("This picture cannot treat."); exit(0); } fgets(buf,2000,fp); sscanf(buf,"%d %d",&p->w,&p->h); fgets(buf,2000,fp); p->gs = (int **)malloc(sizeof(int *)*p->h); for(i=0;i<p->h;i++){ fread(buf,sizeof(int),p->w,fp); *(p->gs + i) = (int *)malloc(sizeof(int)*(p->w+1)); buf[p->w]='\0'; strcpy(*(p->gs+i), buf);/*エラー部分*/ } fclose(fp); }
872 :
学生 :2005/12/09(金) 01:05:49
ソース2 void free_pic(Pic *p){ int i; for(i=0;i<p->h;i++) free(*(p->gs)+i); free(p->gs); } int main(void){ Pic p; read_pic(&p); free_pic(&p); return 0; }
875 :
学生 :2005/12/09(金) 01:08:54
テンプレ使用するのを忘れてました。申し訳ないです。 [1] 授業単元: プログラミング(c言語) [2] 問題文(含コード&リンク): 上に記載 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 来週の月曜日まで。 [5] その他の制限: 構造体を使用すること
876 :
820 :2005/12/09(金) 01:09:15
>>873 すいませんこれもお願いします
今回で相当実力がやばいことがはっきりしました
+ あの講師はポンコツだったんですね
877 :
学生 :2005/12/09(金) 01:12:57
>>874 すみません。提出が迫っていて焦っていたもので;;
半日パソコンにしがみついて、ネットでも検索してしたのですがわからなくて。。。
画像処理は初めてなので・・・。
>>877 おそらく誤爆のことだと思うが、デジャヴってのはそうじゃなくてここの過去スレでも
見たことがあるなと
pgm人気なのか?
>>876 P1(x,y)とP2(x2,y2)の距離を求めるには?
あとはファイルから
FILE *fp=fopen("data.txt","r");
fscanf(fp,"%lf",&x1);
fscanf(fp,"%lf",&y1);
fscanf(fp,"%lf",&x2);
fscanf(fp,"%lf",&y2);
r=distance(x1,y1,x2,y2); /* 自分で作る */
ってなかんじで。
>>870 fgets+sscanfで解いてもいいけど、単純にscanfで解いたほうが楽じゃね?
つーか、sscanfつかっても、エラーチェックしないんじゃ意味無いじゃん。
あと補足。 pgmファイルの横幅は70文字以下という制限がある. これだとその制限無視?まあ別に気にしなくていいが。
883 :
820 :2005/12/09(金) 01:25:13
>>879 本当にありがとうございます
早速とりかかります
884 :
学生 :2005/12/09(金) 01:29:50
>>877 pgmが人気なのかどうかはわからないですが、今日突然学校で出題されました。
>>880 scanfですか?fscanfじゃなくてですか?
>>881 まだC言語の…というかプログラミング自体の経験が浅いのです。
どのようなエラーが出てどのようなエラーチェックが必要かがまだ覚えてないことが多くて…。
887 :
学生 :2005/12/09(金) 01:33:33
>>882 pgmファイルの横幅に制限があるのは初めて知りました。
けど今日使用していたpgmファイルは横幅370とか書いてあったような。。。
jpgをUNIXのconvertコマンドでpgmに変えたのですが。
>>884 おお、そういやそうだな。
単純な方法。
fscanf("%d %d",&height,&width); // 順番どうだっけ?
g=(int**)malloc(sizeof(int*) * height);
for(y=0;y<height;y++){
g[y] = (int*)malloc(sizeof(int) * width);
for(x=0;x<width;x++){
fscanf(fp,"%d",&(g[y][x]) );
}
}
これだけでもいけるはず。
pgmが面白そうだから調べてみたんだが、規格書というかフォーマットの説明どこかにない? 日本語ドキュメントは元々期待してないから英語でいいんだけど
891 :
学生 :2005/12/09(金) 01:40:52
>>886 ありがとうございます><
がんばって解読してみます!
あと、ソースファイル1の下の方のエラー部分なんですが、ここはどう直してもエラーメッセージが外れないのです。
型が第一引数に問題ありのようなのですが・・・・・・。
どなたかわかりますか?
int **gs; /*グレイスケール*/ で宣言しているんだったら、gs+iもint**型。
893 :
学生 :2005/12/09(金) 01:54:54
>>886 このpgm読み書き関数はP2のものですか?これはP5にも使えるのでしょうか?
>>888 ありがとうございます!fscanfで1文字とるのなら、fgetcとかも使えるのかな・・。
>>892 うーん・・・自分がまだ理解不足なようで、中々しっくりこないですOTL
strcpyは使えないのでしょうか?
というか一気に読み取ろうとするのがだめなのかな・・・。
あと、友達が「バイナリファイルだバイナリファイル。」とかいってたから
fopenの第二引数を"rb"にしてるのですが問題ないのでしょうか?
バイナリファイルだから、使ったこともないfreadも使っちゃってるし・・・。
テキストpgmの横幅は大抵70桁制限を無視している希ガス。 実用上も1ライン分横に並んでる方が便利だしね。
896 :
820 :2005/12/09(金) 02:40:05
度々すいません
どなたか
>>869 を解いてもらえませんか?
>>879 で助けてもらったのですが
cannot convert from 'FILE *'となりうまくできませんでした
勉強不足でした
今パソコンから書き込めず携帯からなので文を打つのが非常に大変なので
失敗したプログラムを書くのは辛いので出来れば解いてもらいたいです
>>896 エラーがでた場合はどの行でエラーが出たのか(本当はエラーの出力全部)書いてほしい。というか書かなきゃ分からん。
898 :
デフォルトの名無しさん :2005/12/09(金) 03:35:23
ある計算の式に2から100までを代入して結果を表記する(2〜100まで)プログラムを作りたいんですがあとすこしのところが出来ません。 よろしければ教えて下さい #include<stdio.h> int main(void){ unsigned num, times, x; for(x = 1; x< 100; x++) ←この2行が間違って printf("%3dのときは%3d回\n",times); ←いると思います。 x = num; times = 0; for (; x != 1; ){ if (x % 2 == 0){ x = x / 2 ; } else { x = 3 * x + 1 ; } times++; } printf("%3dのときは%3d回\n",num, times); return(0); } 結果 2のときは1 3のときは7 4のときは2 ・ ・ 100のときは〜 。という結果になればOKらしいです
#include<stdio.h> int main(void){ unsigned num; for(num = 2; num <= 100; ++num) { unsigned x = num; unsigned times = 0; for (; x != 1; ){ if (x % 2 == 0){ x = x / 2 ; } else { x = 3 * x + 1 ; } times++; } printf("%3dのときは%3d回\n",num, times); } return 0; }
[1] 授業単元: 基礎プログラミング演習 [2] 問題文 オセロゲームの盤面を表示するプログラムを作成せよ。 人間が二人で対戦し,その盤面の結果を表示するプログラムを作成せよ。 (コンピュータが相手をするものも追加してもよい) [3] 環境 [3.1] OS: LINUX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 12月13日まで [5] その他の制限: プログラムは適当な関数を定義して、盤面は2次元配列を用いること。 かなり長くなるかもしれませんが、途中まででもいいのでどうかお願いします。
>>884 あ、すまん。P5ならバイナリか。それならfreadだな。
帰ってきたら解くか...
902 :
デフォルトの名無しさん :2005/12/09(金) 09:48:21
[1] 授業単元:プログラム言語 [2] 問題文(というか疑問点): #include "stdafx.h" int _tmain() { int dio[100]; printf("%d\n", dio[99]); } これでコンパイルして実行するとThe variable 'dio' is being used without being defined.とエラーがでます。ちなみに99を 1に変えてもエラーがでました。でも次のように #include "stdafx.h" int _tmain() { int dio[100]; dio[99] = 9; printf("%d\n", dio[99]); } と初期値を与えてやると動きます。Linux g++でためした所 エラーはなく両方正常に動きました。VC++だと値を一度与えないと データにアクセスできないような規則でもあるんでしょうか?ファイル から読み込んだ値を配列に保存するプログラムを作っていて、fscanf で配列に代入しようとしたところエラーがでて気づきました。 [3] 環境 [3.1] OS: Windows [3.2] VC .NET framework ver 1.1.4322 [3.3] C++ [4] 期限: 無期限 [5] その他の制限: 無し。
>>902 エラー(error)でなくて警告(warning)だろ。
904 :
902 :2005/12/09(金) 10:04:38
すいません。今コンパイルしなおしたら動きました。さっきは ファイルから読み込んで配列に代入ができなかったんですが、徹夜で つかれてた?みたいです。もうしわけありません。
dio変数は何も設定せずに使われているがいいんかいな? っていう警告だろ。 中学英語だぞ。
ゴゴゴ
907 :
デフォルトの名無しさん :2005/12/09(金) 10:12:24
[1] 授業単元: 基礎プログラミング言語 [2] 問題文(含コード&リンク): キーボードからfloat型の数値(小数)を入力して、その数値の小数第一桁の数値を四捨五入するプログラムを作成せよ [3] 環境 [3.1] OS:WindowsXP pro (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: VC++ 6.0またはgcc(gcc 2.9 VC 6.0等) [3.3] 言語: C言語(C/C++/どちらでも可 のいずれか) [4] 期限:2005/12/10 9:00まで ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: 特になし(どこまで習っているか、標準ライブラリは使ってはいけない等々) よろしくお願い致します。
第一桁の四捨五入:0.5を足してintにキャスト。 負の数なら0.5を引いてintにキャスト。終わり
[1] 授業単元:プログラミング演習U [2] 問題文: 双方向リストにおける追加、挿入、削除のアルゴリズムを考察し、そのプログラムを作れ。 追加、挿入、削除はそれぞれ関数の形をとるものとする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:12/15まで [5] その他の制限:初心者にもわかりやすいようお願いします。 どなたかご教授お願いします。
>>909 双方向リストの実装にもいくつかパターンがあるわけだが,どう実装すれば?
911 :
学生 :2005/12/09(金) 12:09:23
今携帯から書いてます!
>>884 よろしくお願いします。 fread(buf,sizeof(int),1,fp);
で繰り返し文でまわしたらできるかな…
[1] 授業単元:プログラミング演習
[2] 問題文:
data.txt には0 以上100 未満の整数が10000 個格納されている。これを全て読み込んで
x,x + 1,x + 2 という具合にデータが並んでいる部分を探し,あればx が何番目のデー
タかを返し(一番はじめのデータは1 番目),なければ"no"を出力せよ。複数のデータが条
件を満たす場合には,1 番目のデータに一番近い位置にあるものを出力せよ。
例: 10 11 12 のような並びを探す。この時,10 が740 番目のデータであれば740 を出力
する。
自作ソース
http://up.viploader.net/mini/src/viploader1203.txt [3] 環境
[3.1] OS:windows
[3.2] コンパイラ(バージョン):vc++
[3.3] 言語:C
[4] 期限:12/13まで
[5] その他の制限:
913 :
912 :2005/12/09(金) 12:35:47
括弧が間違ってるとこが一つあるんですが、そこは直しました
>>912 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
const static char *filename = "data.txt";
const static char *delimit = " \t\n";
int main(){
char buf[1024];
int cnt = -1, x[3] = {200,200,200};
FILE *fp = fopen(filename, "r");
if( !fp ) return 1;
while(fgets(buf, sizeof(buf), fp)){
char *p;
for(p = strtok(buf, delimit); p; p = strtok(NULL, delimit)){
x[0] = x[1]; x[1] = x[2]; x[2] = atoi(p);
if(x[2] == x[1] + 1 && x[1] == x[0] + 1){
printf("ans : %d\n", cnt);
goto END;
}
cnt++;
}
}
END:
fclose(fp);
return 0;
}
915 :
914 :2005/12/09(金) 13:12:48
見付からないときの表示を忘れてた。まいいか。
>>912 とりあえず作ってあるプログラムベースにやってみた。
data.txtはくわせてないから合ってるかは分からん。
#include <stdio.h>
#define MAX 10000
int cont_value_search(int data[],int maxi){
int i;
for(i=0;i<maxi;i++){
if(data[i]==data[i+1]-1&&data[i]==data[i+2]-2)
return i;
}
return 0;
}
int main(void){
FILE *fp;
int i,j,data[MAX];
if((fp =fopen("data.txt","r"))== NULL){
printf("data.txtが存在しません\n");
return(-1);
}
for(i=0;i<MAX;i++){
fscanf(fp,"%d",&data[i]);
}
j=cont_value_search(data,MAX);
if(j<=0){
printf("NO\n");
}
else{
printf("%d\n",j);
}
return(0);
}
>>907 四捨五入の定義は1つじゃないってことを出題者は知らないのか?
#include <stdio.h>
int half_adjust(double value)
{
int sign = value > 0 ? 1 : -1;
int res;
value /= sign;
res = value;
return sign * (res + (value - res == 0.5 ? res % 2 : value - res > 0.5));
}
int main(void)
{
float x;
while (scanf("%f", &x) == 1) {
printf("%d\n", half_adjust(x));
}
return 0;
}
>>916 main()の戻り値に負の値は使わない方がいい。
どうせOSによってはunsigned char相当になってしまうし、
わざわざダイアログをポップアップしてくれるコマンドインタプリタもあるから。
それと、ファイルを読み終わったらできるだけ早い段階でfclose()を忘れずに。
更に、cont_value_search()のループ回数を二回分減らしておかないとバッファオーバフローする。
>>917 それは所謂JIS(ISO)丸めだね?
それを四捨五入と言うかどうかは微妙だと思うのだが。
920 :
912 :2005/12/09(金) 14:01:34
>>916 data.txtがあるけど読めないんですけど何か問題ありですかね?
>>920 「読めない」の意味がわからない.どういう状況でおまいは「読めない」と判断したのか?
fp=fopen("data.txt","r"))がNULLを返しているんでプログラムがファイルを読んでないと推測しました。 ファイル自体は存在するんですが…
>>922 data.txtと実行ファイルは同じフォルダに置いてある?
924 :
912 :2005/12/09(金) 14:10:41
置いてあります。ファイル名もdata.txtですし
俺の環境では普通に動いた。たぶん作業パスか何かが間違ってる。
926 :
912 :2005/12/09(金) 14:27:35
>>924 もしVisualStudioなどを使っているのなら、実行ファイルと同じ場所ではなく
実行時のカレントディレクトリにファイルを置け。
>>912 MAX-1まで回すと、最後と最後の一つ前は、もしかしたら配列の範囲外を
差すこともあるね。
MAX-3まで回すといいと思う。
>>926 いや悪い。「もしかしたら」じゃなくて、「必ず」指すわ。
i<maxi;をi<maxi-2; にしたらどうかな?
見つからないときに 0 を返してるのもよくないね.ファイルの先頭に条件を満たすものがあったときに NO になる.
931 :
909 :2005/12/09(金) 14:54:10
>>910 双方向リストを使ったプログラムであれば
どんなものでも構いません。
932 :
912 :2005/12/09(金) 14:56:30
漏れも勉強のためにやってみた。 #include <stdio.h> #define MAX 10000 int cont_value_search(int data[], int maxi) { int i; for (i = 0; i+2 < maxi; ++i) { if (data[i+2] == data[i+1]+1) { if (data[i+1] == data[i]+1) { return i; } } else { ++i; } } return maxi; }
int main() { int i, n, a[MAX]; FILE *fp; fp = fopen("data.txt", "r"); if (fp == NULL) { fprintf(stderr, "ファイルが見つかりません"); return 1; } for (i = 0; i < MAX; ++i) { fscanf(fp, "%d", &a[i]); } fclose(fp); n = cont_value_search(a, MAX); if (n < MAX) { printf("%d\n", n); } else { printf("NO\n"); } return 0; }
&&は短絡評価なので、if文を二重に重ねなくてもよいね。 効率を追求したら、B&M法とかになっていくが・・・・
>>935 >>934 がBM法じゃねーの? if 重ねてるのは場合によって添え字の増加の具合を変えるためみたいだし。
B&M法は、何文字かすっ飛ばす方法だったと記憶してるが・・・
>>937 完璧に実装した BM 法はスキップテーブルと逆順比較の組合せ。
だけどこの問題の場合、比較する文字列が無数に存在するからナイーブなテーブルは作れない。
で、差に着目したテーブルを作れるかだけど、少し考えれば三文字しかないので、テーブル立てても
効果がない。というわけで逆順比較だけ導入すると
>>935 みたいになる。
まあ完璧に実装してない逆順比較だけの方法でも BM 法って書いてある本は少なくはないしね。
940 :
デフォルトの名無しさん :2005/12/09(金) 15:23:44
>>838 タイマー関連だろ?
もうちょい情報ねえのか?
>>838 GUI なプログラムなら、せめてMFC可かとか、wxWindows可とか、そういうこと書いてくれないと困る。
943 :
デフォルトの名無しさん :2005/12/09(金) 15:54:09
>>838 とりあえず、時計表示プログラム作ってみろ
時間取得はわかるよな?
要は宿題じゃなくて自分の欲しいプログラムなんだろ。
>>946 よし!分った!
飯食って風呂入って散発してくるから2時間待てw
>>947 はい。もう自分限界なんで夜中まででも待ちます
>>948 #include<stdio.h>
#include<math.h>
float leng(float,float,float,float);
int main(void)
{
FILE *fp;
float x1,x2,y1,y2;
fp=fopen("data.txt","r");
if(fscanf(fp,"%f%f%f%f",&x1,&y1,&x2,&y2));
printf("(%2.1f,%2.1f)と(%2.1f,%2.1f)の距離は %2.2fです\n",x1,y1,x2,y2,leng(x1,y1,x2,y2));
return 0;
}
float leng(float x1,float y1,float x2,float y2)
{
return sqrt(pow(x1-x2,2)+pow(y1-y2,2));
}
コンパイルエラーはないがまともにテストはしてない風呂入る
>>950 実行しようとしたら
問題が発生したため、〇〇.exeを終了します。ご不便をおかけして申し訳ありません
と出ました
自分のPCに原因?
>>951 いやそれ多分data.txtが見つからないじゃない?
データをdata.txtから読み込むにしてるから
>>952 問題の意味すらわからなくてなっていたw
感謝します
>>820 はワカラネーヨヴォケ(´・ω・`)
ってことで放棄します
>>953 放棄するのもったいないから、
#include <stdio.h>
int main()
{
printf("設問が不十分です。私はエスパーではありませんからそのようなプログラムはできません。");
return -1;
}
とでも書いといたら?
return -1; ワロスww 明らかに問題はエラーで終了です 本当にありがとうございました
>>954 これで
#include<stdio.h>
#include<string.h>
int main()
{
int str[]={144,221,150,226,130,170,149,115,143,92,149,170,130,197,130,183,
129,66,142,132,130,205,131,71,131,88,131,112,129,91,130,197,130,205,
130,160,130,232,130,220,130,185,130,241,130,169,130,231,130,187,130,
204,130,230,130,164,130,200,204,223,219,184,222,215,209,130,205,130,
197,130,171,130,220,130,185,130,241,129,66},i;
for(i=0;i<79;i++)
printf("%c",str[i]);
return 0;
}
957 :
954 :2005/12/09(金) 19:00:30
>>956 return -1; は譲れません
for (i=0; i<sizeof(str)/sizeof(str[0]); i++)
のほうがかっこよくね?
>>957 あ、sizeofなんて忘れてたw
ところでreturn EXIT_FAILURE で手を打たない?
>>958 その話乗った。 EXIT_FAILURE は stdlib.h あたりかな?
abort() でいいんじゃね?
>>959 よっしゃ・・・・・で、stdlib.hで定義されてたんだね
includeしないでやったらエラーした(´・ω・`)
┌─────────┐ │ 基地外問題!!! | │ 基地外問題!! | └―――──――――┘ ヽ(´ー`)ノ ( へ) く |\ ┌──────────┘- \ │ 強制的にOSに \ │ / └──────────┐- / ヽ(´ー`).ノ |/ ( へ) く - = ≡三 |\ - = ≡三 ┌──────────┘- \ _ = ≡三 │ \  ̄ = ≡三 │ 戻ります / - = ≡三 └──────────┐- / (´ー`) - = ≡三 |/ ( ヽ ヽ) / >
>>957 わざわざsizeof演算子使ったら速度落ちるんじゃね?と思って
混合モードでアセンブリ確認してみたが一緒だな
考えてみれば配列サイズなんてコンパイル時に決定されるから当然といえば当然なんだが・・・
まぁ勉強にはなった
#include <stdio.h> #include <string.h> struct human{ char name[20]; int age; char address[50]; } int main(void){ struct human giko,sii,hattousin; strcpy(giko.name,"ギコ"); giko.age = 3; strcpy(giko.address"2ちゃんねる"); strcpy(sii.name,"シィ"); sih.age = 4; strcpy(sii.address"2ちゃんねる"); strcpy(hattousin.name,"八頭身"); hattousin.age = 34; strcpy(hattousin.address"2ちゃんねる"); return -1 }
C99の可変長配列でも定数なのかな。
966 :
964 :2005/12/09(金) 19:58:09
携帯から電車のひつまぶしw 配列使うのわっけてた まぁいいか
>>965 可変長配列の sizeof() ってポインタサイズ返しそうな予感
>>965 ISO/IEC 9899:1999 6.5.3.4 The sizeof operator 2
If the type of the operand is a variable length array type,
the operand is evaluated;
ちゃんと数えてくれるそうだ。そんな実装見たことないけど。
[1] 授業単元: C/C++の宿題を片付けます [2] 問題文(含コード&リンク): 誰かそろそろ次スレ(Nr.55)を立ててください :-) [3] 環境 [3.1] OS: 2chに書けるOS [3.2] コンパイラ: 問わず [3.3] 言語: 日本語 [4] 期限: ([2005年12月09日23:59まで] [5] その他の制限: 重複を避けるため、可能なら次スレを立てる前に作業開始宣言をお願いします。
立ててみる
972 :
969 :2005/12/09(金) 20:45:47
>>971 ありがとうございます。
自分でやった時は立てられなかったので大変助かりました。
973 :
デフォルトの名無しさん :2005/12/09(金) 23:48:21
もまいら、こちらのスレを先に使いきってください
974 :
デフォルトの名無しさん :2005/12/10(土) 00:14:42
>>870 convertで変換した画像うpしてもらえませんか?
979 :
909 :2005/12/10(土) 11:40:40
[1] 授業単元: 脳内コンパール [2] 問題文(含コード&リンク):米国産牛肉輸入防止プログラムを作成せよ [3] 環境 [3.1] OS: Windows3.1 [3.2] コンパイラ: gcc [3.3] 言語: 多分日本語 [4] 期限: ([2005年12月11日23:59まで] [5] その他の制限:はよ埋めろ
981 :
デフォルトの名無しさん :2005/12/10(土) 15:21:57
gcc って NE-i386 って吐けたっけ?
そんな埋めたければ一人で1000取り合戦でもしてくれ
>>982 はい、脅迫罪成立ガクブリながらまってろよ
( ´,_ゝ`)プッ
・
。
jmp 01H
埋め
982 :デフォルトの名無しさん :2005/12/10(土) 15:22:19
>>980 くだらねぇんだよ、氏ね!
の問題について
( ´,_ゝ`)プッ 必死すぎw
埋め
梅
竹
松
>>900 これ適当にいじればいいだろ。
http://pc8.2ch.net/test/read.cgi/tech/1130431335/193 >193 :デフォルトの名無しさん :2005/11/03(木) 00:44:59
>[1] 応用C言語
>[2] 8×8のオセロゲームを作る。1手ごとに盤面の表示を更新する。
> <条件>
> ・コマの置かれていない状態を0、黒を1、白を2で表現する。
> ・起動時に中央に交差する形で黒2個、白2個を置く
> ・黒(1)を先手とし、行と列番号(0〜7)を指定する。
> ・すでにコマが置かれてる場合・挟めない位置を指定するとエラーを表示。
> ・コマを置いたら相手のコマを裏返し(数字を変更し)結果を表示。
> ・全てのコマが埋まったら結果を表示して終了。
> ・その際黒と白の個数をカウントして表示すること。
>[3] 環境
> [3.1] WindowsXPがメイン、稀にLinux。
> [3.2] 自宅だとbcpad、学校はgcc。バージョンは失念。
> [3.3] C言語。
>[4] 2005年11月いっぱい。
>[5] 特に制限なし。自由に作ってよいとのことなので
> ここで受けたアドバイスを元にアレンジできれば効かせたい。
>197 :デフォルトの名無しさん :2005/11/03(木) 02:53:31
>
>>193 >
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1039.c
埋めようぜ
埋め
梅
10000000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。