1 :
デフォルトの名無しさん :
2009/08/14(金) 07:57:52 BE:170408063-DIA(303000)
3 :
デフォルトの名無しさん :2009/08/14(金) 10:55:13
すげー130代目まで続いてるよー!
それだけのアホどもの単位を取らせて来てやったんだな俺らは 奴ら社会に出て苦労してるだろうなw
別の道に進んでるだろうから無問題 学生時代に理解できなかった分野へわざわざ進もうと思うだろうか でもその矛盾に気がつかないままカリキュラムに流されるアホもいるんだろうな で、速効でクビになって最近の若いやつらはとか情報系の大卒は使えんとか言われるわけだ
★コードは回答者によって十分なテストが行われており、そのまま提出 しても大丈夫な場合が多いですし回答者どうしで相互チェックもそれな りに行われているとも思いますが、それでも求められているもの と異なる場合があり得ます ★回答者は質問点プレで記載されている処理系上で動作するように 回答すれば良いのですが、他の処理系でコンパイル可能だが 著しく動作が異なるとか動作しない場合は処理系依存と明記した ほうがいいと思います。 (ライブラリが無く他の処理系ではコンパイル不能な場合はこの 限りではありません)
7 :
デフォルトの名無しさん :2009/08/14(金) 15:56:04
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 適当な事例問題(ex.最初のN個の素数を印字せよ)を作成し、5ステップ以上で段階的詳細化せよ。 [3] 環境 [3.1] OS: Windows XP [3.2] Micro Soft Visual C++ 2008 [3.3] 言語: C言語 [4] 期限: 2009年8月14日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 制限は特にありません。 各ステップの理論などを、プログラムのコメント文、処理構造を構造化言語で表現してもらえるとありがたいです。 事例問題はなんでも構いません、むしろ簡単な事例だとありがたいです。 少々長い問題ですが申し訳ありません、お願いします。
「最初のN個の素数を印字せよ」っていう問題ならともかく そういうの丸投げしたらばればれでしょ
前スレの一部、T大学のK先生に通報しました
前スレにも書きましたが次スレができたみたいなのでこちらにも。
条件がつきたされました。
[1] 授業単元:インタラクティブコミュニケーション
[2] 問題文(含コード&リンク):関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを
作成せよ。プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素
として含まれていれば加点。
[3] 環境
[3.1] OS: WindowsXP
[3.2] Visual Studio 2005
[3.3] 言語:C言語
[4] 期限: 8月17日(月)17:00(早いほうが望ましい)
[5] その他の制限: 習ったのは
ttp://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.htmlに載ってる事です 。
この範囲内で作って頂けると嬉しいです。
#include <windows.h>は使わないようにお願いします。
出来れば色んな方の作品があることが望ましいです。
(new)ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。
よろしくお願いします。
11 :
デフォルトの名無しさん :2009/08/14(金) 21:18:45
未だにscanfとか教えてるのな、、、
>>8 すいません、では金額を入力すると札と銭を判定するプログラムという仮定でどうでしょう?
ex)
金額: 26324
10000: 2枚
5000: 1枚
1000: 1枚
500: 0枚
100: 3枚
10: 2枚
5: 0枚
1: 4枚
これを段階的にお願いしたいです。
14 :
デフォルトの名無しさん :2009/08/14(金) 23:00:53
Si国大学?
>>14 大学を晒したところで有益になることがあると思いますか?
16 :
デフォルトの名無しさん :2009/08/14(金) 23:29:10
>>10 多分
>>9 脅してるだけだろ前スレで似たようなことやってるやついたし
本当ならドンマイw夏だし変なやつ沸いてんだろ
17 :
デフォルトの名無しさん :2009/08/14(金) 23:35:49
>>15 いや、晒すって程のもんでもないだろ
>>10 の出してるページのインデックスページにちゃんと四国大学って書いてるんだし
19 :
10 :2009/08/14(金) 23:45:21
>>16 だといいですw
>>17 15は僕じゃないですが四国大学でもないです。
20 :
10 :2009/08/14(金) 23:47:07
>>18 その情報だけならHP見たらわかりますからねえ
ちなみにメールは学内アドからしか送れないはずですがどうしました?
>>20 学内アドから外部に送れないのは知ってるけど
外部から学内に送れないとは聞いたことない
実際1回目の課題についてヤフメで質問したらちゃんと返ってきたよ
22 :
10 :2009/08/15(土) 00:04:06
>>21 知らなかった・・・
学内→学外は可能ですけどね
>>22 メールのやりとりもできるし、メッセでお話もできますよん
>>13 ラウンジの9904.txt
適当に書いて適当にしかチェックしてないからバグ見つけたら自分で直せ
わかんないことへの質問は受け付けない
随分とまた偉そうな方ですね…
それはともかく gcc -mno-cygwin オプションで #include <conio.h> getch(); が使えました。
>>25 ありがとうございます。
質問させてください、既婚ですか?よかったら・・・
まぁ自分男ですがww
宿題を回答させたあげく嫁まで提出させるとはなんたる鬼畜
30 :
10 :2009/08/17(月) 04:51:40
ラストの書き込みです。
[1] 授業単元:インタラクティブコミュニケーション
[2] 問題文(含コード&リンク):関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを
作成せよ。プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素
として含まれていれば加点。
[3] 環境
[3.1] OS: WindowsXP
[3.2] Visual Studio 2005
[3.3] 言語:C言語
[4] 期限: 今日の17:00
[5] その他の制限: 習ったのは
ttp://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.htmlに載ってる事です 。
この範囲内で作って頂けると嬉しいです。
#include <windows.h>は使わないようにお願いします。
出来れば色んな方の作品があることが望ましいです。
(new)ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。
よろしくお願いします。
cout << "
[1] 授業単元:夏休みの課題(テーマが見つかりません)
[2] 問題文(含コード&リンク):今まで学んだ「関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを作成せよ。
プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素として含まれていれば加点。
[3] 環境
[3.1] OS: WindowsXP
[3.2] Visual Studio 2005
[3.3] 言語:C言語 <windows.h> は使わないようにお願いします。
[4] 期限: 今日
[5] その他の制限: 習ったのは
http://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.html に載ってる事です。
ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。";
endlもつけてやりなよ。
>>30 >>25 のプログラムをちょこちょこっと書き換えれば文字列以外はできるなw
>>31 改行コード処理されなくね?w
このままでは前スレのmain()再帰を提出するしかなさそうだな
>>31 はC++だし
>>34 #include <stdio.h>
int sub(const unsigned char *data){
int bytes, length, lines;
printf("%s", data);
for(bytes=0, length=0, lines=0; data[bytes]; bytes++) { // bytes = strlen(data);
length++;
if(data[bytes] == '\n') lines++;
if(data[bytes] > 0x7f) { // S-JISの漢字は1文字が2バイト(ここの条件文だけは段階的に詳細可)
if(! data[++bytes]) break; // 漢字の1バイトで終了となった場合
}
}
printf("%d bytes, %d 文字, %d 行\n", bytes, length, lines);
return 0;
}
int main(){
static const unsigned char data[] =
"[1] 授業単元:夏休みの課題(テーマが見つかりません) " "\n"
"[2] 問題文(含コード&リンク):今まで学んだ「関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを作成せよ。 " "\n"
" プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素として含まれていれば加点。 " "\n"
"[3] 環境 " "\n"
" [3.1] OS: WindowsXP " "\n"
" [3.2] Visual Studio 2005 " "\n"
" [3.3] 言語:C言語 <windows.h> は使わないようにお願いします。 " "\n"
"[4] 期限: 今日 " "\n"
"[5] その他の制限: 習ったのは
http://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.html に載ってる事です。 " "\n"
" ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。" "\n";
return sub(data);
}
36 :
10 :2009/08/17(月) 16:26:07
>>35 ありがとうございます。
これはどういったプログラムなのでしょうか?
また
int main(){
static const unsigned char data[] =
"[1] 授業単元:夏休みの課題(テーマが見つかりません) " "\n"
"[2] 問題文(含コード&リンク):今まで学んだ「関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを作成せよ。 " "\n"
" プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素として含まれていれば加点。 " "\n"
"[3] 環境 " "\n"
" [3.1] OS: WindowsXP " "\n"
" [3.2] Visual Studio 2005 " "\n"
" [3.3] 言語:C言語 <windows.h> は使わないようにお願いします。 " "\n"
"[4] 期限: 今日 " "\n"
"[5] その他の制限: 習ったのは
http://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.html に載ってる事です。 " "\n"
" ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。" "\n";
return sub(data);
}
の部分は何を意味してるのでしょう?
37 :
10 :2009/08/17(月) 16:55:33
ありがとうございました。
>>10 文字列のquicksortやれ。オリジナリティ以外の条件は満たすだろう。
39 :
38 :2009/08/18(火) 18:34:49
うっかりマジレスしてしまった。すまん。
マジレスでいいじゃないですか。 再帰といえば‥‥‥、エイトクイーンとかはどうですか?
Windowsの関数つかっちゃいけないのかw
VCなのにC99
>>43 double rad=(point[0]/i)*2*3.141592;//ラジアン算出
double x=sin(rad)*10;
double y=-cos(rad)*10;
Pie(hdc,
0, 0, rc.right, rc.bottom,
(int)x+rc.right/2, (int)y+rc.bottom/2, rc.right/2, 0);
>>48-49 返信遅れてすいません
非常に助かります、ありがとうございました
これからどこを間違っていたかチェックしてみます
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2) を作ってもらいたいです…
>>52 お安い御用だ!
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2){
return NULL;
}
>>53 おいおい、何か引数はもらってるんだから使わなきゃダメだろ
strstrがmemのやつです… 速いほうが良いです…
[1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク):10×10マスの碁盤の内から、scanf命令で入力した2値をx,y座標として、 その座標部分を塗りつぶし四角"■"で表示しなさい。それ以外は"□"でマス表示するものとします。 両者とも0から9までが入力されるものとします(エラー判定不要)。 入力時の問い合わせメッセージは自由に表示させて下さい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2008 [3.3] 言語:C言語 [4] 期限: 2009年8月24日まで [5] その他の制限:C言語のみ 多次元配列使用不可
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2){ (void)p, (void)len1, (void)q, (void)len2; return NULL; } /* 冗談 */
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2){ p[len1] = '\0'; q[len2] = '\0'; return strstr(p, q); }
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2){ return strstr(p,q); } これでそれなりに動くんじゃね?
連投すいません。 [1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク):10×10マスの碁盤の内から、scanf命令で入力した2値をx、y座標として、 その座標部分を塗りつぶし四角"■"で表示しなさい。それ以外は"□"でマス表示するものとします。 両者とも0から9までが入力されるものとします(エラー判定不要)。 入力時の問い合わせメッセージは自由に表示させて下さい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2008 [3.3] 言語:C言語 [4] 期限: 2009年8月24日まで [5] その他の制限:C言語のみ(++、#不可) 多次元配列使用不可 よろしくお願いします。
>>61 #include<stdio.h>
int main(void){
int x, y;
int data[10*10]={0};
while(1){
fprintf(stderr, "\nInput x y : ");
scanf("%d %d", &x, &y);
data[y*10+x]=1-data[y*10+x];
printf("\n");
for(y=0;y<10;y++){
for(x=0;x<10;x++) printf("%s", data[y*10+x]?"■":"□");
printf("\n");
}
}
return 0;
}
>>56 動作は遅いが作り上げるまでが早い
char* memmem(char *p, unsigned int len1, char *q, unsigned int len2){
unsigned int i;
if(len1<len2) return NULL;
for(i=0;i<len1-len2;i++,p++){
if(memcmp(p, q, len2)==0) return p;
}
return NULL;
}
回答を待ちきれなければBM法でググればソースが落ちてるよ
>>52 BM法、BMH法を上回る超速アルゴリズムで実装した。比べてみな。
char* memmem(unsigned char *p, unsigned int N, unsigned char *q, unsigned int M){
unsigned int n,k,t[256];
for(n=0 ;n<256; n++) t[n] = M+1;
for(n=0; n<M; n++) t[ q[n] ] = M-n;
n=0;
while(n+M<=N){
if( memcmp(&p[n], q, M)==0 ) return (char*)(p+n);
n += t[ p[n+M] ]; } return NULL; }
65 :
64 :2009/08/21(金) 01:00:43
66 :
61 :2009/08/21(金) 02:28:50
ありがとうございます。 非常に言いにくいんですが、問題文に抜けがありました。 [1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク):「for/while命令で表示した」10×10マスの碁盤の内から、 scanf命令で入力した2値をx、y座標として、 その座標部分を塗りつぶし四角"■"で表示しなさい。それ以外は"□"でマス表示するものとします。 両者とも0から9までが入力されるものとします(エラー判定不要)。 入力時の問い合わせメッセージは自由に表示させて下さい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2008 [3.3] 言語:C言語 [4] 期限: 2009年8月24日まで [5] その他の制限:C言語のみ(++、#不可) 多次元配列使用不可 本当に申し訳ありません。よろしくお願いします。
68 :
61 :2009/08/21(金) 02:55:20
勘違いすいません。 int data[10*10]={0}; の所でいきなり10×10マスの盤を表示させて いるのかと思いましたが、for(y=0;y<10;y++){ for(x=0;x<10;x++)〜〜 の所で表示させるマス数を指定していたようでした。 for/whileでマス表示させていないと勘違いしていました。 本当にプログラム自体がド素人なので。
69 :
61 :2009/08/21(金) 02:59:12
int data[10*10]={0}; stderr data[y*10+x]=1-data[y*10+x]; printf("%s", data[y*10+x]?"■":"□"); 上記は何を表していますか?
配列用意 標準エラー出力 反転 表示
71 :
61 :2009/08/21(金) 03:12:29
プログラム分かんないのに人の作ったのにケチ付けるなんて 相当度胸のある奴だなw
>>61 #include <stdio.h>
int main(void)
{
int i, x, y;
scanf("%d", &x);
scanf("%d", &y);
for(i=0; i<y; i++) puts("□□□□□□□□□□");
for(i=0; i<x; i++) printf("□");
printf("■");
for(i=x+1; i<10; i++) printf("□");
putchar('\n');
for(i=y+1; i<10; i++) puts("□□□□□□□□□□");
return 0;
}
puts("□□□□□□□□□□"); putchar('\n'); 上記は何を表していますか? って言われそうw
>>25 が質問を受け付けないって書いた気持ちがわかるw
>>061 コメント付けろ、だろ。 参考
>>062 #include<stdio.h>
int main(void) {
int x, y;
int data[10*10]={0}; // data[0]を0で初期化、他のdataは0が設定される。
while(1) {
// 10x10の表を出力します。
for(y=0; y<10; y++) {
for(x=0; x<10; x++)
if(data[y*10+x] != 0) // 1なら"■"、0なら"□"を出力。
printf("■");
else
printf("□");
printf("\n");
}
printf("\nInput x y : ");
if(scanf("%d %d", &x, &y) != 2) {
scanf("%*s"); continue; // 値の入力に失敗した場合。
}
if(x<0 || y<0 || x>9 || y>9) continue; // 入力した値のチェック
data[y*10+x] = 1; // 指定の位置は1に変更。
}
}
77 :
61 :2009/08/21(金) 12:49:24
>>76 説明ありがとうございます。
>>73 他にもこんな方法があったんですね。ありがとうございます。
>>42 並び替えの基準が不明瞭です。問題の並び替えの例が間違っていませんか?
79 :
78 :2009/08/23(日) 19:20:01
失礼、逆からみてなんですね
逆に並べた場合でも、aaaとzaの位置おかしくないか?
桁数優先とは書いてないけどそういうことなんかな
82 :
デフォルトの名無しさん :2009/08/26(水) 19:08:20
1] 授業単元:プログラミング [2] 問題文 クワインマクラスキー法をC言語で実現 [3] 環境 [3.1] OS: Vista [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition [3.3] 言語:C言語 [4] 期限: 2009年9月4日
[1] 授業単元:プログラミング [2] 問題文: 2が一番小さい素数,3が2番目に小さい・・・i番目に小さい素数を返す関数nthprime(i)を作り、 再帰呼び出しを利用した形で書け。この関数を用いて、1〜100番目の素数までを表示させよ [3] 環境 [3.1] OS: Vista [3.2] コンパイラ名とバージョン:任意 [3.3] 言語:C言語 [4] 期限: 2009年8月28日
nthprime(1) = 2 nthprime(2) = 3 nthprime(3) = 5 ってなる再帰関数をつくるのか? なんか激しく効率悪い気がするが。
>>83 #include <stdio.h>
int nthprime(int n)
{
int i, m;
if (n <= 0) return 0;
if (n == 1) return 2;
for (m = nthprime(n-1) + 1; /* 無限ループ */; ++m) {
for (i = 2; i*i <= m; ++i) {
if (m % i == 0) break;
}
if (i*i > m) return m;
}
}
int main(void)
{
int i;
for (i = 1; i <= 100; ++i) {
printf("%d\n", nthprime(i));
}
return 0;
}
題意通りの解答ではあるんだろうけど、やっぱり無駄が多いよな。 再帰呼び出しの中で表示していいなら呼び出しは一回で済むんだが。
再帰らしくなくなるのでやや反則なネタ。 配列のサイズを事前に見積もれるのが前提条件になるものの 関数内にstaticな配列を用意してやって既知の素数をキャッシュするという手もある。
素数とその前後の素数の間に、簡潔な式で表せるような関係なんてないのに、 再帰を使う意味がわかんねーよw
[1] 授業単元:プログラミング演習 [2] 問題文:構造体triangeleはメンバとして、各頂点の座標を表す構造体pointのp1,p2,p3を持つ。 また関数show_triangleはtriangleの内容を表示する。 乱数を利用してtriangleのインスタンスを1つ作成し、関数show_trianglwを利用して、その内容を表示せよ。 [3] 環境 [3.1] OS: Vista [3.2] コンパイラ名とバージョン:任意 [3.3] 言語:C言語 [4] 期限: 2009年8月30日
90 :
デフォルトの名無しさん :2009/08/27(木) 12:27:31
1] 授業単元:プログラミング [2] 問題文 クワインマクラスキー法をC言語で実現 [3] 環境 [3.1] OS: Vista [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition [3.3] 言語:C言語 [4] 期限: 2009年9月4日
>>90 俺以外のこのスレの住人は誰も答えられない。
93 :
デフォルトの名無しさん :2009/08/27(木) 20:18:22
問題文 サーバー/クライアント型のTCPソケットプログラミングを行うとする。 サーバーをA、クライアントをBとしたときAはlisten()状態となることで Bからの通信を受け付ける状態となる。ここで悪意のある第三者が Cというクライアント型のアプリケーションを作成した。このCがAに 接続してしまうとAが悪意のある動きをしてしまう。そこでBというアプリ以外からの 通信を受け付けないためにはどうすればよいか。
>>93 AとBが通信を行う際には決められた符号が必要なようにする
Cの課題か
96 :
デフォルトの名無しさん :2009/08/27(木) 22:26:55
どなたかよろしくお願いします!以下に問題を載せます。 入力した単語(英語・日本語)について, 会話を想定し何らかの応答を表示するプログラム(人工知能プログラム)を作成せよ. 想定会話シーンとして,その名称をプログラム実行時の冒頭に表示せよ. 応答する単語数の制限は特には設けない. ヒント @ 文字列のキーボードからの入力 #include <stdio.h> #include <stdlib.h> #include <string.h> char data[256]; fscanf(stdin, “%s”, data); A 文字列の一致の確認 if (strncmp(data, “hello”, strlen(“hello”)) == 0 ) { printf(“%s”, “Nice too meet you.\n”; } B 無限ループ while(1) { ヒント@やヒントAの内容 } #終了はControl-C 以上です。よろしくお願いします!
>>96 テンプレに従わない馬鹿の課題はやりません
>>96 ちゃんとやるには大変なんだけど、そういう学科なのか?
テンプレどおりすればけっこー面白そうなのにな
101 :
デフォルトの名無しさん :2009/08/28(金) 13:08:34
Windowsでテキストファイルをバッファに読み込して表示すると文字化けするんですが、 これはマルチバイトとANSIの話になってくるのでしょうか?テキストコードがなんであれ、 文字化けせずに自動的に綺麗に読み込んでくれるようにするにはどうすればいいのですか?
WindowsAPIスレに池
>>101 > テキストコードがなんであれ、文字化けせずに自動的に綺麗に読み込んでくれる
世の中のエディタがこうなってくれればいいのにねぇ
104 :
かm :2009/08/28(金) 14:10:10
[1] 授業単元:C言語実習 [2] 問題文: Excelからデータを抽出し表示させるプログラムを作れ。 ・Excelは「会社名」「部署名」「管理No.」の項目とする。 ・提出はexeファイルとソースを提出すること。 ・プログラムは会社名を選択するとそれに付随した「部署名」「管理No.」が表示される。 ※尚、会社名は同じ名前のものが複数ある場合全て表示させること。 [3] 環境 [3.1] OS:WinXP Pro [3.2] VC [3.3] 言語:C [4] 期限:2009年09月08日 [5] その他の制限:制限なし よろしくお願いします。
>>104 CSVファイルじゃなくってxlsから抜き出せっていうのか?
C言語実習でSDKの仕様はどこまで認められてるの?
つーか、ファイルフォーマットの指定がどうなってるの?
106 :
デフォルトの名無しさん :2009/08/28(金) 15:29:37
まぁ確かにWindowsだったら多少ミスったりはするけど文字コード判別するためのAPIあるしな 内部取扱的に基本的にはうにこーど使うのが一番いいんだけどネ ASCIIだのなんだのを使ってるとAPI周りの関数を使う時にうにこーどに変換して処理するから面倒っぽ
109 :
96 :2009/08/28(金) 21:46:54
すみません、テンプレがあることに気づきませんでした・・・ 訂正しましたのでどなたかお願いします! [1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): 入力した単語(英語・日本語)について, 会話を想定し何らかの応答を表示するプログラム(人工知能プログラム)を作成せよ. 想定会話シーンとして,その名称をプログラム実行時の冒頭に表示せよ. 応答する単語数の制限は特には設けない. ヒント @ 文字列のキーボードからの入力 #include <stdio.h> #include <stdlib.h> #include <string.h> char data[256]; fscanf(stdin, “%s”, data); A 文字列の一致の確認 if (strncmp(data, “hello”, strlen(“hello”)) == 0 ) { printf(“%s”, “Nice too meet you.\n”; } B 無限ループ while(1) { ヒント@やヒントAの内容 } #終了はControl-C [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Microsoft Visual C++ [3.3] 言語: C・C++どちらでも可 [4] 期限: 2009年9月2日0:00まで [5] その他の制限: 特にありません
110 :
98 :2009/08/28(金) 22:29:59
重要なことなのに無視? ならいいわ
98がちっとも重要に思えないw
ぶっちゃけ、オウム返しにするプログラムでも要件を満たしていると言えなくない。
>>110 toupper して strstr の方がよくね
とかいうの?
全て小文字、行頭決めうちでそれ以外は pardon me? でおk
114 :
デフォルトの名無しさん :2009/08/28(金) 23:16:17
[1] 授業単元:C言語プログラミング演習 [2] 問題文:unsigned long の値を10進数の文字列に変換する関数を作成しなさい。 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 2009年8月30日
115 :
96 :2009/08/28(金) 23:58:10
98さん 機械工学科です!
116 :
デフォルトの名無しさん :2009/08/29(土) 00:06:33
[1] 授業単元: テトリス [2] 問題文(含コード&リンク): NEXTブロックを生成、一時中断、コンティニュー [3] 環境 [3.1] OS: Vista [3.3] 言語: C++ [4] 期限: 明日
>>114 10進数の文字列にしなさいの意味がわからない
10000000って値があったら10000000って文字列を作れってこと?
>>116 明日ってなめてんのかって
>>114 も明日かよっ
std::istringstreamに食わせる方法をすぐに思いついてしまう俺は 完全なC++脳か?
sprintf使えばいいだけじゃね?
>>118 ビット演算で各桁切りだしてひっつければいいのかとおもった・・・
2進数文字列と見間違えたのか
マジカルドロップなら+10加点されます
126 :
デフォルトの名無しさん :2009/08/29(土) 19:21:44
>>114 #include <stdio.h>
char* ul2dec(char* buf, unsigned long val)
{
unsigned long keta = 1000000000;
unsigned long temp;
int i;
int j = 0;
int flag = 0;
for (i = 0; i < 10; ++i) {
temp = val / keta;
val -= (temp * keta);
keta /= 10;
if (temp) { flag = 1; }
if (flag) {
buf[j] = temp + '0';
++j;
}
}
buf[i] = '\0';
return buf;
}
int main(void)
{
char buf[32];
printf("[%s]\n\n", ul2dec(buf, (unsigned long )-1));
printf("[%s]\n\n", ul2dec(buf, 1234567890));
printf("[%s]\n\n", ul2dec(buf, 9));
printf("[%s]\n\n", ul2dec(buf, 0));
return 0;
}
>>127 #include <stdio.h>
#include <math.h>
int main(void)
{
double pi, r1, r2, h, V;
pi = atan2(1.0, 0.0) * 2.0;
printf("外径(m) = ");
scanf("%lf", &r1);
printf("内径(m) = ");
scanf("%lf", &r2);
printf("高さ(m) = ");
scanf("%lf", &h);
V = pi * h * (r1 * r1 - r2 * r2);
printf("中空円筒の体積:%lf(m^3)\n", V);
return 0;
}
>>128 さん
は、ッ早い!?
本当にありがとうございます。
atan2()を使うのが嫌いな人は、pi = 3.14159265358979; とかにしといて 先生によっては「これ何?」って聞く人がいそうだから
はい、わかりました。 細かい所まですみません、ありがとうございます
M_PIでいいじゃんって思ったけど、VCだとダメなんだっけ。
だめじゃないよ #ifndef M_PI #define M_PI 3.14159265358979 #endif こんなのもわからないの?
>>133 いやたまにね #define 使うと
「それ何ですかあ?」という出題者が多いのよ
#define _USE_MATH_DEFINES VC++でM_PI使うなら普通こうだろw
>>132 はVCだとmath.hをincludeしただけじゃM_PIが使えないって意味だろ
[1] プログラミング [2] 特に指定はされず 適当に作って来いとのこと [3] 環境 [3.1] WindowsXP [3.3] 言語: C++ [4] 期限 9月5日 [5]制限 よろしくお願いします
>>137 int main() { while(1);}
一番難しいというか選んだら負けな課題だな
適当ですいません でも本当にわからないんです; 例えばif文を使って とかのほうがいいですかね?
メジャーな所でFizzBuzz問題でもやっとけ それなら言い訳立つだろ
わかりました 調べてみましたが なんとかなりそうなので がんばります ありがとうございました
ぐぐってみたけどFizzBuzz問題ってオートマトンなんだね 状態遷移表が書ければ楽だが逆に言えば遷移表を思いつけない人には 簡単に見えて実は難しい問題になってしまう
いや正規表現の簡単なのにちょっと似ているなと思って
>147 上の図1.3(x-t)の方なのか、それとも、図1.4(x-n)の方なのか x-tの方は、Xを叩くかSDLとかOpenGLでシコシコするか x-nの方は、gnuplotでも使ったら楽と思う、図(グラフ)を描くだけならね グラフを描くソフトウェア作りたいのならgnuplotのソースコードを眺めたらいいと思う
つEXCEL
150 :
147 :2009/08/30(日) 23:33:34
>150 17 for(i=0;i<=N-1;i++){ 18 for(j=1;j<=100-1;j++) 19 u[i+1][j] = u[i][j] - (1.0/2) * nu *(u[i][j+1] - u[i][j-1]); 20 21 } たぶんこうか、論理式をさらっと見て、文法チェックしてみた 17行目と19行目を変更した
>>151 ありがとうございます
端がちょっとおかしいけど中心部は例のようにできました
153 :
デフォルトの名無しさん :2009/08/31(月) 19:37:03
>>114 #include <stdio.h>
#define BUFFER_SIZE 32
char *ultos_recur(char *buf, unsigned int num, char *bufend){
if (num >= 10) {
buf = ultos_recur(buf, num / 10, bufend);
}
if (buf != bufend) {
*buf++ = num % 10 + '0';
}
return buf;
}
void ultos(char *buf, unsigned int num, int buffer_size){
*ultos_recur(buf, num, buf + buffer_size - 1) = '\0';
}
int main()
{
char buf[BUFFER_SIZE];
unsigned int val;
val = (unsigned int)-1;
ultos(buf, val, BUFFER_SIZE);
printf("[%u] -> [%s]\n\n", val, buf);
ultos(buf, val, 4);
printf("[%u] -> [%s]\n\n", val, buf);
val = 1234567890;
ultos(buf, val, BUFFER_SIZE);
printf("[%u] -> [%s]\n\n", val, buf);
val = 9;
ultos(buf, val, BUFFER_SIZE);
printf("[%u] -> [%s]\n\n", val, buf);
return 0;
}
154 :
デフォルトの名無しさん :2009/08/31(月) 21:36:51
C言語であるパラメータの構造体のアドレスをゲットする関数について教えてください。 例えば typdef struct AAAAA{ int a; int b }AAAAA_t; のような構造体がある場合、 get(int param) { ????? } を下記のようなmain関数から呼び出すと、paramに上記構造体のアドレスが返却されるという ものを実装してますが どうしてもうまくいきません。 宜しくお願いします。 int main(void) { get( ??? ); }
意味が分からん 引数は何だ?
あっレス番ついてねえ。ごめんよ
明日までの宿題で困っています。誰かよろしくお願いします。 [1]C言語基礎 [2]再帰呼び出しを用いずに配列のクイックソートをする関数 void qsort_without_recursion( void *target , size_t each_size, size_t num_of_elements, int (compare*)( const void*,const void*) ); を実装し、テストプログラムを付けて提出 [3] Ubuntu linux/Gcc 4.0/C言語 [4] 9/1 正午まで
160 :
デフォルトの名無しさん :2009/09/01(火) 04:34:27
>>154 void get(int *p)
{
*p = &AAAAA_t;
}
int main(void)
{
int addr;
get(&addr);
}
携帯からだと疲れるorz
161 :
デフォルトの名無しさん :2009/09/01(火) 04:42:09
>>137 int main(void)
{
int (*mn)();
mn=&main;
mn();
}
>161 Ha, ha, ha...
163 :
159 :2009/09/01(火) 20:56:22
期限過ぎてしまったのでもう結構です。 期待して損しました。
期限過ぎたのか。作ったのにw
クイックソート 非再帰 でぐぐるか 教科書見ればそのまま出てるからなあ
クイックソートのpartitionのロジックはいまだにバグ無しで作り上がったことがない・・・ 何かしらバグってる、そんなロジック
みんな期限過ぎるの待ってたw クイックソート 再帰 使わない でズバリでてくるよね。 助詞取ってぐぐるだけなのになぁ。
わざわざ期限過ぎるのを待つほどヒマな人もなかなか
スルーしてたら期限すぎて159が湧いたからレスしただけで、 わざわざ待ってたわけでもないだろ
>>172 エラー出まくりなんですけど
エラー E2453 quine1.c 139: 'void' 型のサイズは未知あるいはゼロ (関数 add_vec )
エラー E2453 quine1.c 135: 'void' 型のサイズは未知あるいはゼロ (関数 add_vec )
エラー E2453 quine1.c 142: 'void' 型のサイズは未知あるいはゼロ (関数 add_vec )
エラー E2453 quine1.c 145: 'void' 型のサイズは未知あるいはゼロ (関数 add_vec )
エラー E2453 quine1.c 148: 'void' 型のサイズは未知あるいはゼロ (関数 add_vec )
エラー E2453 quine1.c 159: 'void' 型のサイズは未知あるいはゼロ (関数 resize_vec )
エラー E2453 quine1.c 173: 'void' 型のサイズは未知あるいはゼロ (関数 clear_vec )
エラー E2453 quine1.c 181: 'void' 型のサイズは未知あるいはゼロ (関数 free_vec )
エラー E2453 quine1.c 241: 'void' 型のサイズは未知あるいはゼロ (関数 add_terms_uniq )
エラー E2453 quine1.c 242: 'void' 型のサイズは未知あるいはゼロ (関数 add_terms_uniq )
エラー E2453 quine1.c 280: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 281: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 287: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 288: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 300: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 302: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 325: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 328: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
エラー E2453 quine1.c 332: 'void' 型のサイズは未知あるいはゼロ (関数 get_main_term )
以下省略
「あんまり当てにしないで」 こういいのこして いとじゅんさんは逝った
[1]講座名:やさしいC言語 [2] (1) 「ようこそC言語へ」という文字列を表示し改行するコード printf関数を使う。 (2)「 ようこそC言語へ」と表示し改行してから「C言語をはじめましょう」 と表示し改行するコード。ただしprintfは一回しか使ってはならない。 [3] Windows Vista/Visual C++ 2008/C言語 [4] 9/10まで
>>176 1番
#include <stdio.h>
int main(void){
printf("ようこそC言語へ\n");
return 0;
}
2番
#include <stdio.h>
int main(void){
printf("ようこそC言語へ\nC言語をはじめましょう\n");
return 0;
}
178 :
176 :2009/09/02(水) 17:55:55
すみません。もう一題ありました。(分業で宿題してますです) [1]講座名 やさしいC言語 [2] (1)引数pTという名前のint型のポインタ変数を持つdouble値を返す avgという関数を定義し,pTに長さ5の整数配列が渡されるものとして その平均値を返すようにコードして下さい。局所変数はdouble型の もの1個でsumという名前にすること。整数変数はiという名前の もお1個を使用することが出来ます。pTが指す変数は[]で参照しない で下さい。関数内で使用出来る数字は0と5のみとします。 +=演算子を必ず使用してください。 (2) 必要なヘッダファイルをインクルードした後、avg関数を先行定義し main関数を定義して下さい。長さ5の整数配列testと整数i,double変数 ansを定義出来ます。これ以外の変数は定義しないで下さい。 先ず1回のprintf文を使って 「5人のテストの点数を入力して下さい」と表示し改行してください。 scanf文,for文を使ってtest配列変数に読み込んでください。 ans変数にavg関数の結果を入れて、1回のprintf文で 「5人の平均点はxx.xxxxxxx...です。」という形式で表示し改行して下さい。 ★if,while,do while文では{}を省略しないで下さい。 ★関数の宣言、定義の箇所は/*XXX関数の宣言*/という具合にコメントを入れて下さい。 [3] Windows Vista/Visual C++ 2008/C言語 [4]9/10迄(インフル騒動の行方によってはのびる可能性もありw)
>>180 (1)
double avg(int *pT)
{
double sum;
int i;
sum = 0;
for(i = 0; i < 5; i++){
sum += *(pT + i);
}
return sum / 5;
}
>>180 (2)
#include <stdio.h>
/* avg 関数の定義 */
double avg(int *pT)
{
double sum;
int i;
sum = 0;
for(i = 0; i < 5; i++){
sum += *(pT + i);
}
return sum / 5;
}
/* main関数の定義 */
int main()
{
int test[5], i;
double ans;
printf("5人のテストの点数を入力してください\n");
for(i = 0; i < 5; i++){
scanf("%d", &test[i]);
}
ans = avg(test);
printf("5人の平均点は%lfです。\n", ans);
return 0;
}
183 :
180 :2009/09/03(木) 02:17:22
>>181 ,182
ありがとうございます。
それにしても激速な回答驚いてます。
問題が難しくて困ってたとこでした。
問題文自体意味がちんぷんかんぷんでした。
こういうの早くやるのには、良い参考書とか
サイトとかあるんでしょうか?
>>183 作って遊ぶっていうのが一番近道だと思う。
ジャンケン作って戦略ジャンケンに進化させるとか。
とにかく書く。んで、わからんことはネットを漁る。
なるべく環境依存を払いつつ、デバッガで値を確認しながら、細かくデバッグって言うのも身につくと思う。
俺はそれで覚えた。
>>183 教科書を読んで勉強する方が得意なら、その辺の参考書なりWebサイトなりを見て勉強すればいい。
問題を解いて勉強する方が得意なら、参考書なりWebサイトなりを参考にしつつ、
その辺にある問題を解くとか、
>>184 の言うように何か作ってみるといい。
お題を与えておく。
・数当てゲーム(とりあえず、ランダムな数字をヒントなしに当てさせる→次はヒント(答えが正解より大きいか小さいか)を与えられるようにしてみる)
・high and low(ググれば出てくると思う)
とか、ね。
>>180 参考書じゃ高橋麻奈さんの「やさしいC」がぴったりだと思う
187 :
180 :2009/09/03(木) 03:48:01
>>186 夜分遅くにレスありがとうございます。
その本、講師が絶賛してました。
188 :
デフォルトの名無しさん :2009/09/03(木) 07:21:06
[1] 授業単元:C言語入門 [2] 問題文(含コード&リンク): 入力した任意の小数5つを降順にソートし出力する [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C [4] 期限: 本日中 [5] その他の制限:初心者用講座 配列を用いる 助けてください
>>187 「C言語による アルゴリズム事典」 奥村春彦著 技術評論社
も座右の書としておくといいですよ。
190 :
189 :2009/09/03(木) 07:34:39
奥村晴彦著の間違えでした。すみません。
俺のオススメ図書は「独習C」だぜ!
>>188 #include <stdio.h>
int main(void)
{
int i,j;
double a[5],temp;
for(i=0; i<5; i++){
printf("%d:",i+1);
scanf("%lf",&a[i]);
}
printf("\n\n");
for(i=0; i<4; i++)
for(j=i+1; j<5; j++)
if(a[i] < a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
for(i=0; i<5; i++)
printf("%f\n",a[i]);
return 0;
}
お勧め書籍? MSDNライブラリ、C、C++の仕様書
193 :
188 :2009/09/03(木) 09:15:13
入れ替え回数が無駄に多いソートだなw
[1] 授業単元:独習C++第3版
[2] 問題文(含コード&リンク):
第7章 総合理解度チェック3
継承と継承の際のassignment operator (=)について質問があります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9922.cpp 上記のファイルをコンパイルすると以下のように出力します
output>>
Coord::operator= // why?
Show quadrant: 1
(o3=o1) X: 10, Y: 10
why?の部分で、なぜQuadオブジェクトを作成しているのに
そのベースであるCoordの方の=オペレータが呼ばれるのでしょうか。
また、Quad の=オペレータがQuad operator=(Coord ob)
というふうに、Coordをパラメータとして受け取ってますが
なぜQuadとして受け取らず、Coordとして受け取るのでしょうか。
詳しい解説お願いします・・
[3] 環境
[3.1] OS: Mac
[3.2] コンパイラ名とバージョン: C++
[3.3] 言語: C++
[4] 期限: 本日中
[5] その他の制限:特にないです
宿題じゃないものを無理矢理形式あわせて質問すんじゃねーよ
>>195 以下のように出力しねーよ
operator+とかどこに消えた?
途中からコピペしてあっただけか デフォルト代入演算子でぐぐれ
199 :
デフォルトの名無しさん :2009/09/03(木) 12:51:33
[1] 授業単元:C言語入門 [2] 問題文(含コード&リンク): 正負混合で入力した任意の2進数5つを絶対値の昇順にソートし出力する さらに元の数の加算を求めよ (ただ加算するだけでなくソートしたことを踏まえて計算すること) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C [4] 期限: 本日中 [5] その他の制限:初心者用講座 この問題の狙いは情報落ちを防ぐための方法を考えろとのことです すみませんまた詰まりました助けてください
>>199 こんな感じで。動作は保障しない。
#include <stdio.h>
#include <math.h>
int main(){
char buf[1024]={0};
char Num[5];
char T=0;
int i=0,j=0;;
printf("Input Binary Digit! signed flag is 8th bit!!\n");
for(j=0;j<5;j++){
scanf("%s",buf);
T=0;
for(i=7;i>=0;i--) T|=((buf[i]=='0' ? 0:1)<<(7-i));
printf("%d\n",T);
Num[j]=T;
}
printf("\n");
for(i=0;i<5;i++){//バブルソート
for(j=i;j<5;j++){
if(abs(Num[i])>abs(Num[j])){
T= Num[i];
Num[i]=Num[j];
Num[j]=T;
} } }
j=0;
for(i=0;i<5;i++){
printf("%d\n",Num[i]);
j+= Num[i];
}
printf("Total => %d",j);
return 0;
}
ありゃ、インデントがつぶれてしまったなぁ。 整形してみてくれ。
202 :
デフォルトの名無しさん :2009/09/03(木) 14:06:36
えっ
データの並びによってはきちんとソートできないし バブルソートならNum[j] と Num[j+1] を比較するよ
これは何ソートになるの?
0から順に、一番小さい値を探して並べてるから 選択ソートじゃない?
ソートできないってことはないだろw セレクションソートに似てるって言えるかもしれんが、 交換回数が無駄に多いw
たしかに、SWAPする意味ないww鼻水ふいたww
211 :
205 :2009/09/03(木) 15:07:22
ごめん ソートは確実におkでした
ミス ごめ
@y = (3 * x + 2) * x - 6;
>>214 A
#include<stdio.h>
main(void)
{
double x,y;
for(x=-3.0; x<3.1; x+=0.1){
y= (3 * x + 2) * x - 6;
printf("x=%4.1lf : y=%lf\n",x,y);
}
return 0;
}
>>214 B
#include<stdio.h>
main(void)
{
double x,y;
double minx,miny=100;
double maxx,maxy=-100;
double sum=0;
int count=0;
for(x=-3.0; x<3.1; x+=0.1){
y= (3 * x + 2) * x - 6;
if(miny > y){miny=y;minx=x;}
if(maxy < y){maxy=y;maxx=x;}
sum+=y;count++;
}
printf("yの最小値は x=%4.1lf のとき y=%lf をとる。\n",minx,miny);
printf("yの最大値は x=%4.1lf のとき y=%lf をとる。\n",maxx,maxy);
printf("xが-3.0〜3.0の値をとるとき、yの平均値は %lf である。",sum/count);
return 0;
}
>>199 任意の2進数というと、16bit、32bitにかぎらないように
思うのですが、55bitなどというのもありですか?
まあ任意の二進数って時点で答える気力が失せるわな
最大桁数決まってないと負数かどうかわからなくね?
221 :
214 :2009/09/05(土) 09:25:37
助かりました、ありがとうございます!
>>220 たとえば10進数の-15なら -1111 なんじゃね?
「負数は補数で〜」なんて指定はないから。
-をつけたら2進数にする意味があんまりない気もするがw
2進数表現はビットの羅列とは限らないのでは?無意味ではないかと(補数扱うことが課題の目的でもない限り) ところで、-を付けたり、ケタ数指定しなくても、正なら頭に0付けるとかでdou?
と思ったけど、やっぱり意味無いかも 正負混同って明記してあるってことは、二進数の負値の扱いを重視してそうだし
>>218 回答した者だが、特に制限が無い以上、PCの制限に依存するのは仕方ないと思う。
入力に32個も2進入力するのは面倒なので8ビットにしたんだが。
55bitとかそういう物を扱うなら、器はPC側の制限で64bitになるし、longlongはまだ枯れてないしなぁ。
>>226 文字列で受け取って・・・問題見てないけど
228 :
デフォルトの名無しさん :2009/09/06(日) 20:04:39
(``7‐、 _ __/´ ' ノ ン- 、/_ /゙ ``ヽミ\ /=、 ィ==、 ,}:::ヽ f゙-o-l‐l-o- ト、 }`:::::::i 弋__ノ _ヽ_ノ `!::::::リ { `__^ー'、 ..:: レ゙^lヽ l '´⌒`ヽ` : : ::{_ノ <やるき!げんき!いわ キッ!キッ!キッ! '、゙、 __ ソ .: : : イ`
229 :
228 :2009/09/06(日) 20:05:22
誤爆
アップローダー==ラウンジに書いた9925です。 どなたか宜しくお願いいたします。
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
任意の数xの例で説明すると(x-1)!+1 がもしxで割り切れるならばxは素数であると言え、
割り切れないならばxは、素数ではないと言える。このような素数を判別することができる
定理をウィルソンの定理と呼ぶ。
入力した値の階乗を求めるプログラム(4桁まで対応)を改良して、ウィルソン
の定理による素数判定を実装せよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9928.txt 素数ならば素数です。素数でないならば素数ではありません。と表示しなさい。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語:C言語
[4] 期限:9月11日
[5] その他の制限:基本的に制限はないが、極力ライブラリに頼らずに実装すること。
プログラムは分かりやすく書くようにつとめること。
よろしくお願いします。
>237 添字を1から始めていることは触れないが ポインタの意味わかってないだろ 220行付近 //double **a = p_top; matrix a = *this; にでもするか p_topのコピーを作って使うようにすればいいよ
>>238 ありがとうございます
まだポインタについて未熟なんでもっと勉強しときます
添え字は1から始めれるように上のほうでちょこっと変えました
無理せずに vector<vector<double> > 使っとけよ
241 :
236 :2009/09/08(火) 01:47:21
236の補足ですが、素数の判別対象は1から9999です。 サンプルのプログラムは1から9999までの範囲の任意の数字の階乗 を返します。14以上の階乗でもオーバーフローしないために多倍長 演算になっています。 よろしくお願いします。
>>236 へぇ、こんな定理があったんだねぇ
けど、4桁の階乗ってだいぶ大きそうだね
>>242 Excelでfact関数使って4桁の数字の階乗出してみたけど大きすぎるぞw
まあ、だからこそ10000要素の配列に4桁ずつ格納する仕組みにしてるんだろうけどね
多倍長計算はCPUによるエミュレートになるので すっげー計算遅いよな
9999! は 35656桁 な気がする
それはすでに出せてるし。。。 多倍長の割り算がめんどくね?
階乗は関数にした方が見やすいな。 てか、多倍長の割り算とかやったことね・・・。
2 3 5 7 11 101 164 685 919 こんだけ表示して終わりにするとかw
割り算と考えずに逆数のかけ算として考えればいいんじゃね?
多倍長整数の加算,2倍,1/2倍,比較ができれば除算は可能 #include<stdio.h> void mydiv(int x, int y, int *div, int *mod){ int i, result=0; for(i=1;x>y;i*=2,y*=2); for(;i>0;i/=2,y/=2){ if(x>=y){ result+=i; x-=y; } } if(div) *div=result; if(mod) *mod=x; } int main(void){ int x=101, y=13, div, mod; mydiv(x, y, &div, &mod); printf("%d\n", div); printf("%d\n", mod); return 0; }
余りが0になる場合のみを抽出か・・・
割り算ややこいからひたすら引き算したら15くらいから使い物にならなくなったwww
おもしろい問題だけど何気に数学板の話題かもな なぜ素数に限りそういうことが言えるのかわかってないと 良いアルゴリズムは見いだしにくい鴨 (それでも篩法と較べてもそんなに効率は良い方法じゃない)
実際は!は掛け算を全部してから最後に余りとるんじゃなくて 掛け算一回毎に余りをとるほうが圧倒的に高速かつ多倍長つかわなくて済むんだよねw
そのコードもあげればよいのでは?w
なるほど。こうかな? もとの努力がだいぶなくなってしまって切ないな。 #include <stdio.h> main(){ int n,i; int mod; /* 値を入力 */ printf("素数判定を行いたい数値を入力して下さい\n"); scanf("%d",&n); if(n<0){ return -1; } /* (n-1)! % n を算出 */ mod = 1; for(i=2; i<=n-1; i++){ mod = (mod * i) % n; } /* (n-1)! + 1 が nで割り切れる == (n-1)! % n + 1 が n */ if (mod+1==n){ printf("素数です。\n"); }else{ printf("素数ではありません。\n"); } return 0; }
>>259 俺が課題出されたときなら間違いなくその方向で出してたな
あげくに、
//これ普通に余りが0か判定するコードのほうが速くね?
//結局乗算してる分遅いやん?
とかコメントに書いておくw
>>260 ごめんなさい、ちょっと意図を汲み取れませんでしたorz
寝ますね><
>>262 課題を出す側じゃなくて受ける側として書いてた。
つまり単に問題文を出した教授に嫌味を加えたコメント書いてるだけw
>>261 正直
>>259 とほとんど同じなんだよね。しかもC++で書いてるしw
まぁ一応出しとくか
#include<iostream>
using namespace std;
int isPrime(unsigned long x){
unsigned long a = 1;
for(unsigned long i=1;i<x;++i)
a = (unsigned long long)a*i%x;
return a==x-1;
}
int main(){
unsigned long v;
cin>>v;
if (isPrime(v)) cout << "素数です。\n";
else cout << "素数ではありません。\n";
}
>>255 これ具体的に何を入れたら素数ですと表示されるのかな
実行してみれば?
知らなかった定理で面白いとは思うけど、効率って点ではかなり悪いな
267 :
236 :2009/09/08(火) 07:20:21
いや俺が言っているのは
>>255 の実行結果がおかしいと言っているんだが
>>259 なら正しく表示される
具体的には? 適当に素数を入力してみたら、素数ですって表示されるんだけど。
4桁前提処理ってのを見てないんじゃないの?
まさかとは思うが、階乗と桁数だけ見て最後の行を見逃してるとかじゃねーよな?
例えば1009は素数ですよね 1009を入れると素数ではありませんと表示される
俺のとこだと素数ですって表示されるんだが
■必要桁数2595桁 素数ではありません と表示される コンパイラによって違うのか? gcc4.4.1使ってるんだが
>275 23 /* [変更] 1からn-1まで順にかけ算 */ 24 for(i=1; i<=n-1; i++){ ここだろ、元のソースと変わっているところ ちなみに2595桁が1010の時の桁数だったので直観した
あーわかった悪い悪い for (i = 1; i <= n - 1; i++) { が for (i = 1; i <= n; i++) { になってたわ
人のソースなんてコピペで実行するもんじゃないの?
あまりにも汚いので整形している最中うっかり-1を消したらしい
ruby教信者というわけじゃないが、rubyだったら特にライブラリとか 意識しなくとも長桁計算が出来るんで整数絡みの問題をちょっと やってみるのはCよりかあってるかも
281 :
デフォルトの名無しさん :2009/09/08(火) 11:18:42
ファイル名の拡張子だけ取得したいのですが、何か良い方法はないでしょうか? strtokは文字列を書き換えてしまうので× forループでピリオドが出るまで空回しするのがベストでしょうか?
283 :
デフォルトの名無しさん :2009/09/08(火) 11:49:29
forループを回したのでもういいです。
だったら言うな
これだからテンプレを書かないやつは!って言われるんだ
>>279 え、整形中に-1が消えた?
一緒に仕事したくないでござる!
多倍長有理数の四則演算を書いたことがあるけど、除算だけ別次元の地獄だったな それよりboost::bigintはまだなのか
コンピュータ・アルゴリズム事典のPascal版の多倍長整数演算ルーチンを Cに移植中 なぜかC版の本には多倍長演算は載っていない GNUで出て来たからだろうな
>>287 俺は、ビット配列作ってそこからBigInt作ろうとしたが、
BigIntの足し算が作れなかった。足し算って意外と論理的に作るの難しくない?
>>289 すまん、かなりバリバリにアセンブラで書いたから加算は楽勝だったw
>>289 論理的にってFullAdder並べるだけじゃダメなの?
性能はお察しになるかも
>>290 すごいなぁ。
>>291 いやー、Wikipedia見ながら書いてたんだが、なんかうまくロジックが組めなかった。
俺、あほス。orz
>>281 strrchr( str, '.' );
294 :
デフォルトの名無しさん :2009/09/08(火) 17:07:18
げ、まじか。Cにこんな便利な関数があったのか。 そっちで書き直します。
295 :
デフォルトの名無しさん :2009/09/08(火) 17:50:35
[1] 授業単元:画像処理 [2] 問題文(含コード&リンク):画像を読み込んで1次・2次微分を行い、エッジ抽出処理を 行うプログラムを作りなさい。 [3] 環境 [3.1] OS: WindowsXP [3.2] (gcc 3.4 [3.3] 言語: (C/C++/どちらでも可) [4] 期限:特にありません。 [5] その他の制限: 私自身ハード(回路)を学んでいまして、いざソフトを学ぶとなると、 プログラミングはお手上げでした。大変ご足労をおかけすると思いますが、 はじめからのプログラムを教えていただけますか?#includeから。 よろしくお願いします。
>>295 入出力画像のファイル形式は?
使えるライブラリの指定はあるの?
>>295 画像処理でググればいくらでもでてきそうな気がするけどな・・・。
とりあえずは、bmpファイルから始めて見るといいよ。
コンピュータ・アルゴリズム事典の多倍長演算ルーチンのC++への 移植作業は順調に進んでいます しかし、元の多倍長数に結果を重ね書きできるものと出来ないものが 混在しているため、演算子の多重定義が出来にくい状況にあります ここは速度を多少犠牲にしても統一化を図った方がいいかもしれません 取り敢えず9999!の演算速度はかなり速いです 後は割り算ルーチンを移植してデモプログラムとしてネイピア数(e)とπを 10000桁ほど求めるプログラムを入れたらどこかにうpしたいと思います
重ね書きできるのって += -= *= /= で、できないのは + - * / ってこと?
>>300 e や π程度なら、(多倍長)÷(単倍長) を実装するだけで十分かと。
(多倍長)÷(多倍長)は確かに難しいですね。
なんか同じ問題の議論でレスが伸びまくってるなw
>>301 そういう事になります
ですから全部重ね書きできるように改造します
>>302 まあそうですね
何か面白いデモプログラムがあればいいなと
多倍長演算の宿題はよく出るから一つリファレンス
となるようなたたき台を作っておけば後々楽かと
ね。
>>255 の解法は割とぐっときた。
元ソースのスタイルを崩してないところもぐっときた。
>>304 それならCで組んだ方が利用頻度高そうな気が。。。
>>306 そうですね
演算子の多重定義とメンバ関数と関数の多重定義を取り除けば
そのままCで使えるように書いています
>>304 boost::operatorsを使うと += から + を自動的に作ってくれて楽だよ。- * /も同様に作ってくれるよ。
>>308 ふーんありがとう
使ってみるわ
やっぱりa.LongMul(b)じゃ読みにくいですからね
a *= b; の方が遙かに読みやすい
311 :
デフォルトの名無しさん :2009/09/09(水) 17:02:12
暇だから問題でも出すか。 3の超階乗を出力するプログラムを作れ。 宿題じゃないから別に解かなくていいw
312 :
デフォルトの名無しさん :2009/09/09(水) 17:05:47
超累乗ならともかく超階乗とか作るの面倒過ぎるだろ 3$ならまだしも
下n桁で勘弁して欲しいところだ
むしろ$100くらいもとめようぜw
>>316 プログラム作ってみろカス
あほ程時間をかけたら作れるだろうけどな
プログラム自体はそれほど複雑にはならんだろ。 桁や実行時間が無理なだけで。
// やっつけ #include <iostream> #include <boost/bigint.hpp> using boost::bigint; static const int initial_value = 3; bigint factorial ( bigint x ) { assert( x > 0 ); return ( x == 1 ) ? 1 : x*factorial(x-1); } bigint superfactorial_cp ( bigint x ) { // Clifford Pickover's definition bigint result; bigint fx = factorial(x); bigint j = 1; bigint c = fx; for ( bigint i = 1; i <= fx; ++i ) { for ( ; j <= c; ++j ) { result *= fx; } c = result; } } int main () { std::cout << superfactorial_cp(initial_value) << std::endl; }
いかん、 return result; を書き忘れた
暇だからどっかの大学院の入試問題でも適当に引っ張って 解いてようw
323 :
デフォルトの名無しさん :2009/09/10(木) 02:35:56
1] 授業単元:プログラミング [2] 問題文(含コード&リンク):CLIP構造体を操作して任意の秒数分切り出す関数の制作 #include <stdio.h> #include <stdlib.h> #include <math.h> #include "aa-io.h int main(void) { CLIP clip1; CLIP *clip2; int i; MONO_PCM mono; MONO_PCM *monop; monop = &mono; mono_wave_read(monop,"c:/sound/Startup.wav"); clip2 = &clip1; mtoc(monop,clip2); for(i=0; i<clip1.length; i++){ printf("%f\n",clip1.data[i]); } //monop= &mono; //mono_wave_read(monop,"c:/sound/Startup.wav"); //mono_wave_write(monop,"c:/sound/sample.asc"); return 0; } [3] 環境 [3.1] OS: Window [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0) [3.3] 言語: C [4] 期限: ([2009年9月10日12:00まで] [5] その他の制限: 特になし 詰まりました。よろしくお願いします
マジで行き詰ってるので教えてくれ VisualStudio2008,C++.NETでアプリケーションの作成をやってるんだが リストボックスにString型を入れたいんだがどうやればいい? string a[10][10] = { …(初期化)… }; this->listBox1->Items->Add(a[0][0]); とやると「1 番目の引数を 'std::string' から 'System::Object ^' に変換できません。」となる 配列aの初期化はできてるし、Add("あああ")にした場合は普通に動くんだけど…
型が違うって事だろ。 それはやったことがないけど、 たとえば、 f( char *) にstring 型は渡せないのと同じ事。
もしchar *だったら、渡せるのだったら、 a[0][0].c_str()はchar * 型だ。
std::string s0 ; System::String^ s1 = gcnew System::String( s0.c_str() ); this->listBox1->Items->Add(s1); で無理か? コンパイルしていない。
>>325 C++/CLIで作らないとダメな理由はあるのかなぁ
>>329 コンパイルしてないけど、流れから行けば
this->listBox1->Items->Add(a[0][0].c_str());
がいいのではないかと
>>327 >>331 それだとエラー文のStringがCharになるだけで無理だった
>>329 >>330 Std::String→System::Stringでいけた!
ありがとう
Std::StringとSystem::Stringの使い分けがいまいちわからないわ…
>>332 std::stringはC++の仕様にあるSTLの移植で、
System::Stringは.Netのネーティブ文字コンテナ。だと思う。
.Netを構築する際にはSystem::Stringに依存した構造になってるだろうから、
STLのアルゴリズムを使わないなら、後付であるSTLコンテナは使わないほうが良いかもしれない。
>>329 std::stringも長さの情報を持っているのだから、System::String^ s1 = gcnew System::String( s0.c_str(), 0, s0.length() );としたい。
そして、2008ならそれはmsclr::interop::marshal_as<System::String^>(s0)で一発。
> [3.2] コンパイラ名とバージョン:ビジュアルベーシック > [3.3] 言語: C++ ,. -‐'''''""¨¨¨ヽ (.___,,,... -ァァフ| |i i| }! }} //| |l、{ j} /,,ィ//| i|:!ヾ、_ノ/ u {:}//ヘ |リ u' } ,ノ _,!V,ハ | /´fト、_{ル{,ィ'eラ , タ人 /' ヾ|宀| {´,)⌒`/ |<ヽトiゝ ,゙ / )ヽ iLレ u' | | ヾlトハ〉 |/_/ ハ !ニ⊇ '/:} V:::::ヽ // 二二二7'T'' /u' __ /:::::::/`ヽ /'´r -―一ァ‐゙T´ '"´ /::::/-‐ \ / // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ ノ ' / ノ:::::`ー-、___/:::::// ヽ } _/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ
#include <stdio.h> int main(void) { char str[100]; int i, j, c; printf("文字列を100文字以内で入力してください\n"); scanf("%s", str); printf("どの文字を削除いたしますか?"); scanf(" %c", &c); for(i=j=0; str[i]; i++) if(str[i]!=c) str[j++] = str[i]; str[j] = '\0'; printf("%s\n", str); printf("削除した文字は%d文字です\n", i - j); return 0; }
>>336 Micro Soft Visual C++ 2008でしたwすいません。。
>>337 ありがとうございます!
今動作を確認しましたが、削除した文字が0文字のままで削除もされていないのですが、どこか間違っているのでしょうか・・?
339 :
デフォルトの名無しさん :2009/09/11(金) 19:21:09
>>338 削除した文字が0文字なら削除されるわけないだろ
気違いか?
とりあえず337のプログラムを実行した結果 ・英数字は課題通り ・日本語(2バイト文字)は削除されなかった 339は、日本語を入力して実行確認したのではないだろうか
>>339 すいません。説明が足りなかったです。
文字を「sea」と入力して、削除する文字を
aと入力しても「sea」のままで削除されないということです。
Bcc32だと340の通りだけど、VisualStudio2008だと339の通りだな。
while(getchar()!='\n'); を一回目の scanf の後に追加すればいけたりする?
>>344 ダメだな。
Bccだといけるし見た感じ337のソースは間違ってないと思う。
(記述の仕方が気に入らないがw)
? char c;
>>344 今入れて試してみましたが、削除が行われていませんでした・・
>>343 scanfは非推奨なのですか・・・。今まではこんなことはなかったのですが・・
'scanf' の宣言を確認してくださいの警告が気になるところ
349 :
デフォルトの名無しさん :2009/09/11(金) 20:00:51
ほす
cがint型(4バイトとして)
scanf("%c", &c)で1バイト書き込み
残り3バイトは…?
>>346 にするか初期化しろって話だね
352 :
デフォルトの名無しさん :2009/09/11(金) 20:04:45
#include <stdio.h> int main(void) { char str[100],c; int i, j; printf("文字列を100文字以内で入力してください\n"); scanf("%s", str); printf("どの文字を削除いたしますか?"); scanf(" %c", &c); for(i=j=0; str[i]; i++) if(str[i]!=c) str[j++] = str[i]; str[j] = '\0'; printf("%s\n", str); printf("削除した文字は%d文字です\n", i - j); return 0; }
せっかくサンプルに合わせたのに!
削除一回しかできないとか汎用性にかけるな
>>353 bccでコンパイルしたexeだと問題なく動くんだぜw
↓これは難しい記述に当たる気がしないでもないw
for(i=j=0; str[i]; i++) if(str[i]!=c) str[j++] = str[i];
>>346 >>350 >>352 今char c を入れて実行入れて実行したところ
上手くいきました。ありがとうございます!
>>353 >>354 >>355 bccを学校で使ってないので仕方ないです・・・
for(i=j=0; str[i]; i++) if(str[i]!=c) str[j++] = str[i];
は学校でも使っていたので問題ないです。
ほかにも助けていただいた方々ありがとうございました!
>>350 >>352 指摘ありがとうございます。入れてみたら
削除に成功しました。
>>353 >>354 学校でbccを使っていないので仕方がないです・・
>>355 それくらいならば学校でも扱っていたので大丈夫です。
ほかにも助けていただいた方々ありがとうございました!
いやサンプルのコードがおかしいってことなんだがw
あれ・・・?反映されてないから、もう一回書き直したけど 反映されてた。2度書きすいません。。
てか↓みたいな書き方を教える学校ってどうなのよ? for(i=j=0; str[i]; i++) if(str[i]!=c) str[j++] = str[i]; 見づらいし、バグの原因になりかねないし。 短かったら良いってもんじゃねぇよ、と。
その程度で?
>>361 小さいことをきっちりとやってかないと大きいプログラムを書いた時に
ひどいことになる
>>362 無駄な処理をしないよう努力を重ねないと
いざ完成したプログラムが遅くて使い物にならないんですね。
わかります。
仕事用以外なら書き方なんか好きにすればいいよ。 俺は仕事でもスパゲッティーコード量産してるけどなw
短縮至上主義 VS 字下げ至上主義の宗教対立は見飽きた いいぞもっとやれ
>>360 for (i=j=0; str[i] != '\0'; i++)
{
if (str[i] != c)
{
str[j] = str[i];
j++;
}
}
見やすくなったし、バグの原因になりえなくなったかな?
>>367 個人的には
str[j++]=str[i];
の方がバグになりにくい
370 :
367 :2009/09/11(金) 21:28:44
>>366 がいうところの字下げ至上主義のコードって多分こうだろうと思って
書いただけです><
求)
>>360 のレス
字下げすればいいってもんでもないよな もっと分かりやすいコードかけよw
>>371 の分かりやすいコードを待つスレになりました
>>370 俺としては、
↓にするだけでいいと思ってるw
for(i=j=0; str[i]; i++){
if(str[i]!=c){
str[j++] = str[i];
}
}
誰か宿題もってきてこの流れを断ち切れよ
じゃあカルマン渦を3次元で表わすコード教えて
久しぶりに来た。未解決案件は?
>>377 100の超階乗を表示するプログラムをつくれ。
超階乗というとアッカーマン関数に出てくるあれか
378みたいなあまり現実的じゃないものよりも、試し割り(素数判定) を限りなく効率化してみようぜ 試し割りの時点で効率的じゃないんだけどな。
[1] 授業単元: 情報工学:数理I [2] 問題文(含コード&リンク): ガウス行列を既約ガウス行列に変形する関数を定義せよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 4.1 [3.3] 言語: C [4] 期限: 9月18日 [5] その他の制限: 特になし
3$じゃね?
定数変えれば普通に動きそうに見えるが
boost::bigintがちゃんと動くという前提で、やっつけじゃなくまともに書き直してみるとか
最近は宿題がへってさびしーな
JXTAを用いて(ry
大学は夏休みなげーからな
定義って定義作って正規表現なりで抜き出せってことか?
>>392 1以上って1含んじゃうけどいいのかよ・・・
#include<stdio.h> main() { int i,n,wa; printf("正の整数を入力してください:"); scanf("%d",&n); wa=0; for(i=1;i<n;++i) { wa=wa+i; } printf("1から%dまでの和:%d\n",n,wa); }
>>392 scanf("%d", n);
wa=0;
for(i = 0; i<n;i++)
{
wa = wa + i;
}
あれn+1じゃねーの main() { int i,n,wa; printf("正の整数を入力してください:"); scanf("%d",&n); wa=0; for(i=1;i<n+1;++i) { wa=wa+i; } printf("1から%dまでの和:%d\n",n,wa); }
単語の数ってそういうことだったのかw 単語それぞれについて数えてたよ・・・ひーん
>>397 おい
警告 W8004 dai3.c 7: 'p' に代入した値は使われていない (関数 WordCount )
警告 W8081 dai3.c 26: void 関数は値を返してはならない (関数 WordCuttert )
警告 W8067 dai3.c 36: 値を伴わない return と伴う return の両方が使われている (関数 WordCuttert )
警告 W8004 dai3.c 24: 's' に代入した値は使われていない (関数 WordCuttert )
警告 W8004 dai3.c 24: 'p' に代入した値は使われていない (関数 WordCuttert )
/*単語とはそれ文字の集合に意味があり、空白や訓読点などで区切られた文字の羅列である。*/
>399 >警告 W8081 dai3.c 26: void 関数は値を返してはならない (関数 WordCuttert ) これだけ致命的に間違っているが、他は特に問題ないね
>>399 えーっと、VC9で互換性の警告しか出なかったから、見落としてた。
ポインタ*pはこういう使い方しないとstrtokが動作しないんですよ。
初期化で警告が出てるなら、NULLを消しても問題ないと思います。
WordCutterはコピペして作ったからおかしいところがあったんだなぁ。。。
いや、すまん。
int WordCutter(char *Fname){
FILE *fp;
char str[10240];
char *p=NULL,*s=NULL;
fp=fopen(Fname,"rt");
if(fp== NULL) return -1;
while(fgets(str,10240,fp) != NULL){
p=str;
while((s=strtok(p," \'\n-,.;"))!=NULL){
p=NULL;
printf("%s\n",s);/*表示*/
}
}
fclose(fp);
return 0;
}
>>400 それ防衛的でてきとーな文章だから信頼性は低いよ。(汗
>>398 単語の文字数がほしかったら、WordCutterのstrtokからもらってるポインタsをstrlenすればいいとおもう。
>>405 そういうこっちゃなくて、Hitした単語それぞれが、文章中にいくつあるかを数えるように作ってしまったって事w
問題文読み直してみると
>>397 が正しいな、って
>>407 あぁ、そういうことか。そういう風にも取れるなぁ。
俺の解釈が間違ってないといいんだけどねぇ。。。
>>390 です。返信遅れてしまいすみません。
急な依頼を請け負って頂いて非常に助かりました。
ここまでしていただいた>>397-
>>408 のみなさん、どうもありがとうございます。
411 :
392 :2009/09/14(月) 12:06:13
答えてくれた方々ありがとうございました! 非常に助かりました、本当にありがとうございます。
>>416 奇数だけ
#include <stdio.h>
int main(void){
int hairetu[11][11];
int i, n, x, y, next_x, next_y;
printf("数字を入力してください。ただし、10以下の数字を入力にしてください。\n奇数or偶数によって魔方陣を表示します");
scanf("%d",&n);
memset(hairetu, 0, sizeof(hairetu));
if(n%2 && n<12){
x=n/2;y=0;
for(i=1;i<=n*n;i++){
next_x=(x+1)%n;
next_y=(y+n-1)%n;
if(hairetu[next_y][next_x]){
next_x=x;
next_y=(y+1)%n;
}
hairetu[y][x]=i;
x=next_x;
y=next_y;
}
}
for(y=0;y<n;y++){
for(x=0;x<n;x++) printf(" %2d", hairetu[y][x]);
printf("\n");
}
return 0;
}
>>417 >>418 ありがとうございます!!!!
C言語って書いてたけどC++でした。でも問題ないのでこのまま生かせていただきます。感謝。
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): 車のナンバーや電車の切符の裏などにある4桁の数字。その数字を四則演算し10にするというクイズを解くプログラムをお願いします。 1 2 3 4 と言う4つの数字であれば、すべて足せば10になりますし 2 3 5 7 は{(3+7)/2+5}で10になります。 数字の順番は変えてもOK(上のように2357を3725と並び替えている) 二つの数字をくっつけて1つにしてもOK(0 0 1 2を20-10) 数字を4つ入力し、全パターンを出力するプログラムをお願いします。 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン:GCC) [3.3] 言語: C [4] 期限: 9月21日(月) [5] その他の制限: 制限無し よろしくお願いします。
>>420 >二つの数字をくっつけて1つにしてもOK(0 0 1 2を20-10)
1,0,0,0→10,00→0010 みたいのもアリ?* + / -に加えた演算の一つとして考えていいのかな
>>421 1,0,0,0→10,00→0010 はアリだと思います。
10,00と10,0,0は別扱い?
10,0,0はナシじゃないでしょうか?
くっつけを二項演算の一種として取り扱ってやったらパターン増えすぎてワロタ 表示結果は (3+7)/2+5 みたいな形式じゃないとまずい?これが結構面倒なんだな
そんな大変か・・・?
俺のスキルではな!
(1+(2+(3+4))) = 10 (1+((2+3)+4)) = 10 ((1+2)+(3+4)) = 10 ((1+(2+3))+4) = 10 (((1+2)+3)+4) = 10 (1+(2+(4+3))) = 10 (1+((2+4)+3)) = 10 .... こんなのが5*4!=120通りも重複して表示される俺のプログラムゴミ過ぎる
不必要な括弧を取り除くのも面倒そうだな… ')' 直後が * / 以外の場合省略可 ってところになるのかな
逆ポーランドでやった方がいいんじゃね
>>432 #include <stdio.h>
int main(void) {
FILE *fp;
fp = fopen("data.txt", "a");
if (fp == NULL) {
printf("ファイルが開けませんでした\n");
} else {
char name[100];
int y, m, d;
while (scanf("%s %d %d %d", name, &y, &m, &d) != EOF) {
fprintf(fp, "%s %d %02d %02d\n", name, y, m, d);
}
}
return 0;
}
んん・・・いいソースが思いつかない else{ fprintf(fp,gets(""));
436 :
デフォルトの名無しさん :2009/09/20(日) 00:22:08
>>436 これ本当に問題文を出題されたまま全文を書いてるのか?
1
#include <stdio.h>
int main(void)
{
double x[3], y[3], p = 0;
int i;
for (i = 0; i < 3; i++) { printf("input x[%d] >> ", i); scanf("%lf", &x[i]); }
for (i = 0; i < 3; i++) { printf("input y[%d] >> ", i); scanf("%lf", &y[i]); }
for (i = 0; i < 3; i++) p += x[i] * y[i];
printf("%f\n", p);
return 0;
}
>>436 2
#include <stdio.h>
int main(void)
{
int s = 1, n = 1, i;
for (i = 1; i < 20; i++) { s += n * 2; n *= 2; }
printf("%d\n", s);
return 0;
}
>>436 3
#include <stdio.h>
int main(void)
{
int n, i;
printf("正数を入力してください");
scanf("%d", &n);
for (i = 2; i <= n / 2; i++)
if (n % i == 0) { printf("素数ではない\n"); return 0; }
printf("素数\n");
return 0;
}
#include <stdio.h> int main(void) { int i; double x[3], y[3], p; for (i = 0; i < 3; i++) scanf("%lf", &x[i]); for (i = 0; i < 3; i++) scanf("%lf", &y[i]); printf("\nx="); for (i = 0; i < 3; i++) printf("%lf ", x[i]); printf("\ny="); for (i = 0; i < 3; i++) printf("%lf ", y[i]); for (p = 0, i = 0; i < 3; i++) p += x[i] * y[i]; printf("\nx*y=%f", p); return 0; }
443 :
デフォルトの名無しさん :2009/09/20(日) 09:53:07
[1] 授業単元:統計プログラミング [2] 問題文(含コード&リンク): 1.適当な方程式 y = a x + b を定め、n 個の x に対してランダムな誤差を持つ y のサンプルデータを生成するプログラムを作成せよ。 出力形式は、例えば改行で区切られた1行ごとにスペース区切りで x, y の値を標準出力に書き出す。 ランダムな誤差に関しては、適当な範囲内の乱数を単純に各々の値に適用すればよい。 (本来は正規分布に従った乱数を用いる方が望ましい) 2.前問で作成したプログラムの出力から、最小二乗法により、逆に a, b を求めるプログラムを作成し、 求めた値に関して、前問のプログラムで設定した a, b に対する考察をせよ。 3.以上を二次方程式(y = a x^2 + b x + c)に対して繰り返し、a, b, c に関して考察せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: g++ [3.3] 言語: (C/C++/どちらでも可) [4] 期限: 2009年09月24日 [5] その他の制限:g++で通常使えるライブラリーは使用しても問題ありません。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):比較:文字列2つ入力後、先頭から5文字を比較した結果を表示しなさい [3] 環境 [3.1] OS:vista [3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2008 [3.3] 言語:C [4] 期限: [5] その他の制限:strncmpを使った場合とそうでない場合二つお願いします。
else if ( result = 0 ) line34=> else if ( result == 0 )
#include <stdio.h> #include <string.h> int main(void) { char s1[100]; char s3[100]; int result; printf(">"); scanf("%s", s1); printf(">"); scanf("%s", s3); result = strncmp( s1, s3, (size_t)5 ); if ( result < 0 ) printf( "%s < %s\n", s1, s3 ); else if ( result == 0 ) printf( "%s = %s\n", s1, s3 ); else printf( "%s > %s\n", s1, s3 ); return 0; }
入力が5文字未満の時も考慮して、 char s1[100] = {0}; char s3[100] = {0}; したほがいんじゃね?
あ、memcmpじゃないから大丈夫か
>>434 遅くなりましたがありがとうございました!
452 :
デフォルトの名無しさん :2009/09/21(月) 12:36:25
改良の方向性の指示はないの?
454 :
デフォルトの名無しさん :2009/09/21(月) 13:00:30
>>453 基本的に問題文中にある各種演算子操作(+, +=, [], >>, <<, etc..)が出来れば良いのですが、 テンプレートを使ってデータタイプに関係なくランできることが望ましいです。
ああ、見てなかった OSX向けの環境ねーからやっても仕方ないか・・・
456 :
デフォルトの名無しさん :2009/09/21(月) 13:09:11
>>455 後述になって申し訳ありませんが、 OSはLinux(Ubuntu)とWinでも可能です。 宜しければお願いします。
蝠城。・txt 文字化けしてるから無理だ...文字化けする前のファイル名は?(//^^)
458 :
デフォルトの名無しさん :2009/09/21(月) 13:36:16
>>452 dsexceptions.hってなんぞ?
460 :
デフォルトの名無しさん :2009/09/21(月) 14:59:40
最初からプロジェクトグループに入っていたんですが、 【dsexceptions.h】 #ifndef DS_EXCEPTIONS_H #define DS_EXCEPTIONS_H class UnderflowException { }; class IllegalArgumentException { }; class ArrayIndexOutOfBoundsException { }; class IteratorOutOfBoundsException { }; class IteratorMismatchException { }; class IteratorUninitializedException { }; #endif が別ヘッダーで入ってました。
461 :
デフォルトの名無しさん :2009/09/21(月) 15:03:27
>>演算子のオーバーロードが一癖ある。
バブルソートと選択ソートの違いがよくわからない・・・
クルクルって変わるのがバブルソートでグルンって変わるのが選択ソート
466 :
443 :2009/09/21(月) 20:43:37
>>450 遅くなりましたが、ありがとうございます。ちょっと難しそうですが、頑張って読んで参考にします!
467 :
462 :2009/09/21(月) 21:04:30
>>465 普段からVCしか使ってないからどれが拡張かはっきりしないです。orz
>>463 隣接要素を比較・交換することで気泡(最小要素)が徐々に上へ浮かんでいく感じのがバブルソート。
全要素を一通り比較して最小要素を1つ選択しておいてからそれを交換するのが選択ソート。
469 :
452 :2009/09/21(月) 23:29:29
>>462>>465 遅くなりましたが、お二人とも大感謝です。 なるほどって部分が多く、参考になり助かりました! ありがとうございます。
470 :
デフォルトの名無しさん :2009/09/21(月) 23:41:37
普段Javaを使っているものですが、C言語も使えといわれました。 そこで線形リストをつくり、そこにEが打たれるまでデータを追加していき、表示する課題がでました。 リストのデータは文字列と数字です。数字のほうは正常に表示されるのですが、文字列がうまくいきません。どなたか原因を教えてくださいませ
471 :
470 :2009/09/21(月) 23:42:27
#include<stdio.h> #include<string.h> #include<stdlib.h> struct list{ char *name; int packet; struct list* next; }; struct list head; addlist(char name[],int packet){ struct list *p, *q, *newcell; q = &head; p = head.next; while(p!=NULL){ q = p; p = p->next; } newcell=malloc(sizeof(struct list)); newcell->name=name; newcell->packet=packet; newcell->next=p; q->next=newcell; } main(){int packet;char name[512];struct list *p; scanf("%s %d",&name,&packet); while(strcmp(name,"E")){ addlist(name,packet); scanf("%s %d",&name,&packet); } for( p=head.next;p!=NULL;p=p->next ){printf("%s %d\n", p->name ,p->packet);} }
>>471 nameの領域を別途確保し、strcpyする必要があるよ
>>470 テンプレ書いてくれ。
Javaだとメモリのコピーはあんまり意識しないだろうけど、
ポインタはメモリを指してる数字を保持してるだけで、
それをコピーしたからってディープコピーされるわけがない。
>newcell->next=p; NULLが入ってるとはいえ、この書き方は気持ち悪い
headにはいつまでもデータが入らなかったり?
先頭が空なのは別に珍しくはない
それならただのポインタにすればいいのに
478 :
470 :2009/09/22(火) 10:16:42
申し訳ございません、テンプレ書くの忘れてました。
[1] 授業単元:??
[2] 問題文(含コード&リンク):
>>471 [3] 環境
[3.1] OS:WindowsVista
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:連休中
[5] その他の制限: 特になし
それとあつかましいかとは思いますが出来れば回答ソースも乗せていただけるとありがたいです。
>newcell->name=name; を newcell->name=malloc(strlen(name) + 1); strcpy(newcell->name, name); にすりゃいいんじゃね?
っても、 listのchar *nameをchar name[512] newcell->name = name を strcpy(newcell->name, name) にするだけぢゃないの? もしくは newcell->name = strdup(name) とか?
うわぁ、スレ更新してなかったよ。同じ内容のレスがor2
482 :
470 :2009/09/22(火) 10:47:20
>>479-480 様
ありがとうございます、言われたとおりにやればできました。
これで何とか先輩に怒られなくてすみそうです。
本当にありがとございました。
483 :
デフォルトの名無しさん :2009/09/22(火) 11:09:35
486 :
485 :2009/09/22(火) 21:43:29
ごめん、atoi使ってるのにstdlib.hをincludeしてなかった もし使うなら追加してね
484みたいなのRuby使えば楽々なのになぁとか思っちゃう今日この頃
488 :
484 :2009/09/22(火) 22:02:00
>>487 もうちょっと便利機能使えれば、もちょっと短くなるけど、出題者にとっての黒魔術にはしたくなかった。
なってるかも知れんけど。
テンプレートとイテレータが解れば解けると思ったんだけど。
あと、ここはC/C++のスレだしなぁ。
半角Ruby板でやれ
そーりー。
楽々な代わりに色々失ってるんだけど、それを分からない奴ほど意固地になって 「そんなものは今時必要無い」って言い張るんだよな 巣から出てこなければいいのに
Ruby信者に喧嘩を売るな、めんどくさいから
ちなみに俺は創価信者だ
うちは確か真言宗
ちょ、487俺だけどそんなにRubyって嫌われてんのか
天然ですか。可愛いですね (゚ 3゚)チューしちゃうぞ
MoE信者と500系信者とRuby信者は似ている
マカーにも似てる
>>484 さんこんばんは.
>>484 さんはXXXYYYZZZのなかからYYZZを見つけられますか?
これまで仕事で趣味で書いたプログラム全部書き直しですね.
中学生の頃は俺もその間違い犯してたわ
>>495 数日でスーパーマンになる人発見。明日はX-Menだな。
>>500 普通のchar文字列なら、strstrつかわないか?
まぁ、普通にバグってたからそこだけ直したよ。ユニットテストしてるけど、条件がなかなか思い浮かばん。
あと、即興で書いたんで被害なんか無いぞ。
bool FindStr(std::list<char>::iterator& it,std::list<char>::iterator& end,char* str){
std::list<char>::iterator T;
int i=0;
while(it != end){
if(FindChar(it,end,str[0])==true){
T=it;
while(*T==str[i]){
i++;
T++;
if(str[i]=='\0') return true;
if(T == end) return false;
}
}else{
break;
}
i=0;
it++;
}
return false;
}
とりあえずコンパイラオプションで警告レベルを4にしてみろって
VCだとこれでコンパイル通るんかよ。勝手にテンポラリ変数つくってくれんのか
>>503 なるほど、一時オブジェクトの参照って標準じゃないのね。知らんかったわ。
返り値にしたら駄目なのは解ってたが、そうだったのか。
便利なんだけどなぁ。。。
勉強になった。ありがとう。
あぁ、そうそう。修正点は以下。 bool FindString(std::list<char>& Line,char* string){ std::list<char>::iterator beg= Line.begin(); std::list<char>::iterator end= Line.end(); return FindStr(beg,end,string); } 雑食のほうが色々わかっていいんだろうけど、VCのインテリセンスから抜けるにはもう遅い。。。
ほとんどVCだけしか使ってないけど普通に分かるから雑食とか関係ない
夜遅くにすいません、お願い致します 下はできるところまではやってみましたが、結果がうまくいきません [1] 授業単元: プログラミング [2] 問題文:4行4列のA行列と4行2列のB行列の積を求めよ [3]環境[3.1]OS:vista[3.2]bcc 32[3.3]C言語 [4]期限:23日中 [5] #include <stdio.h> int main() { int i,j; int A[4][4]; float B[2][4],C[2][4]; //計算を行う行列の値を格納する。 for(i=0;i<4;i++) { for(j=0;j<4;j++){ printf("A %d,%d\n",i+1,j+1); scanf("%d",&A[i][j]); } } for(s=0;s<4;s++) { for(t=0;t<2;t++){ printf("B %.1f,%.1f\n",s+1,t+1); scanf("%f",&B[s][t]); } } //受け取った2つの行列の掛け算を行う。 for(i=0;i<4;i++){ for(j=0;j<2;j++){ C[i][j]=A[i][j]*B[i][j]; } } return 0; }
うーん。気が変わるまでしばらく投稿は控えるよ。 みんながんばれ。 それじゃ、お休み。
行列の掛け算のやり方が違うだろw
>C[i][j]=A[i][j]*B[i][j]; とりあえず行列の掛け算を紙に書いてみ?
言われて気づきました わけのわからない計算してますね やり直してみます
>>509 おやすみ。まァ、色んな誤解が解けたんだし
こいうトコでソース公開する利点を享受できたと思って、めげずに今後も頑張れよ
>>508 ですが、式を直したところ、どうも前半4つだけが
値がおかしくなるようです。
もし教えていただけるならヒントだけでもお願いできないでしょうか
配列の要素数とi,jが一致してないからとか?
>>515 その通りだったみたいです
何度もありがとうございました
>>517 デストラクタがよきにはからってくれるんじゃないの?
閑散として面白くないな 暇なときは、誰か興味深い課題を投げておくれよ
>>519 問題出してみる期限は無期限。
1次不定方程式aX+bY=cの具体解を、ユークリッドの互除法で求める
プログラムを作成せよ。
ただし、定数項 c が、d=gcd(a,b) で割り切れないと、解は存在しない。
レポート本文には、ソースコードの主要な部分を掲載し、解説を付ける。
実行結果も掲載する。
さらに追加 (1) 16桁までの正整数の加算ができるプログラムを実装せよ。 8桁以下と9桁以上で、下位桁と上位桁に分け、それぞれ加算する。繰上りに注意する。 被加数と加数は、1行ずつ入力する。各行の入力は、 1234 12345678 のように、8桁区切りで空白を入れる。 書式付入力 scanf(“%d”) では、16桁の正整数は入力できないためである。 ここで、1234 1234 は、1234 00001234 を意味する。8桁以下の場合、0 2345 のように入力する。 加算結果の出力は、1234 00005678 のように、8桁区切りとし、必要な0を補う。17桁目に繰上った場合も正しく出力する。 1234 00001234 や 5678 のように、より自然な入力が可能なように改良してもよい。 ただし、先頭に0がある数字列は、8進数と解釈されるので、少し工夫が必要である。 行入力 gets() と sscanf() を使う、文字入力 getchar() で先頭の0を読み捨てる(改行も自分で検出)、 文字配列を走査して0を飛ばす、数値変換 atoi() を使うなど。 (2) 8桁までの正整数の乗算ができるプログラムを実装せよ。入力は、12345678のように、区切りなしのままとする。 内部では、4桁以下と5桁以上で、下位桁と上位桁に分けて格納する。 乗法公式 A×B=(a1×1万+a0)×(b1×1万+b0)=(a1×b1)×1億+(a1b0+a0b1)×1万+(a0×b0) で展開して計算する。 繰上りに注意する。乗算結果は、16桁になる可能性がある。
最後 基数rと桁数n、有理分数の分子pと分母qを入力し、p/q をr進法で、小数点以下n桁までを表すプログラムを実装せよ。 ただし、0<p<q とする。0. の部分は省略する。また、n+1桁目は、切り捨てる。 レポート本文には、ソースコードの主要な部分を掲載し、解説を付ける。実行結果も掲載する。 2 1 2 2 ⇒ 10 ; 1/2 = 0.5[10] = 0.1[2] 5 124 1000 5 ⇒ 03022 ; 124/1000 = 0.124[10] = 0.03022‥[5]
523 :
436 :2009/09/23(水) 16:43:16
>>437 ありがとうございます。
問題文はこれですべてなんです。
2の問題ですが、答えがあわないです。
525 :
431 :2009/09/23(水) 17:43:13
じゃあ俺も出題。高卒だから数学はわかんねーし、520みたいな立派な問題はだせないけど・・・
>>431 で俺が質問した問題なんだけどね、レス無かったしもう一度
a, b, c, d という4個の要素があるとするよ
ここで、こいつを (a, b), (c, d) => ((a, b), (c, d)), ((a, b), c), d => (((a, b), c), d)
といった感じで、2組のタプルで囲っていくと、最終的に一つのタプルに纏まるよね
で、問題。
このようにして、2組のタプルでn個の要素(n > 1)を一つに纏めるパターンの数を求める関数unko(n)を作ってみそ
注意して欲しいのが、(A, B) = (A, B) であること。
つまり、(a, b) = (b, a) はあたりまえとして、((a, b), (c, d)) = ((c, d), (a, b)) も成り立つ
431を作るに当たって、総当りでパターンを生成するスクリプトを書いたんだけど、これによると、
n = 4, 5, 6 => unko(n) = 15, 945, 10395
ちなみに俺は解けてない。数学分かる人だったら簡単なんだろうな・・・考え方とかあったら教えて欲しいな
ごめん嘘、最後ミスった n = 4, 5, 6, 7 => unko(n) = 15, 105, 945, 10395 不思議なことに、n >= 4だと、一桁目が全部5なんだよね
試しにWolframAlpha先生に1,3,15,105,945,10395を尋ねるとa_n = (2n-1)!!だそうだ
528 :
デフォルトの名無しさん :2009/09/23(水) 18:43:16
【質問テンプレ】 [1] 授業単元:C++ [2] ない [3.1] XP 自宅のPC [3.2] cygwin [3.3] C++ [4] 次の月曜日 cygwinの使い方に関する質問です。 1.cygwinの画面に表示されている文章をドラッグしてコピーすることが出来ません。 2.g++が動きません、エラー文は bash: g++: command not found 大学のPCに元から入っているcygwinでは1,2のような事は起きません。 たしかCなら動きます。 家のPCにcygwinをDLするときに入れていないものがあると思うんですが ググっても出てこないので何をどこに追加すればいいのか分からないです。 どなたかお願いします。
Wolframすげえw 教えてくれてサンクス
>>528 g++は選択して入れないとデフォルトでインストールされない。
上に関しては設定の問題
2 1 1 <- 3 1,2 3*1 3 3 <- 4 1,3 4*3 12 2,2 6*1/2 3 15 <- 5 1,4 5*15 75 2,3 10*3 30 105 <- 6 1,5 6*105 630 2,4 15*15 225 3,3 20*3*3/2 90 945 <- 7 1,6 7*945 6615 2,5 21*105 2205 3,4 35*3*15 1575 10395 <- 8 1,7 8*10395 83160 8=1C8 2,6 28*945 26460 28=2C8 3,5 56*105 5880 56=3C8 4,4 70*15/2 525 70=4C8 可換なので 1/2 116025 <-
532 :
デフォルトの名無しさん :2009/09/23(水) 18:54:53
>>530 そこまでは理解できたのですが後で追加することできます?
>>532 落としてきて入れるか、一度アンインストールして
再インストールするときに選択しときゃいい
>>528 cygwin のインストーラをもう一回立ち上げて追加するパッケージを選ぶだけじゃないか?
535 :
531 :2009/09/23(水) 19:01:01
ぼけてた 8 1,7 8*10395 83160 2,6 28*945 26460 3,5 56*3*105 17640 4,4 70*15*15/2 7875 135135 <-
536 :
531 :2009/09/23(水) 19:58:05
>>531 のコード
#include <stdio.h>
long gcd(long a, long b){
long c;
while((c=a%b)) a=b,b=c;
return b;
}
long comb(int n, int r){
long d=1, u=1, t, i;
for(i=0;i<n;i++){
d*=(n-i);
t=gcd(u, d);
u/=t; d/=t; // 約分
u*=(r-i);
}
return u/d;
}
long unko(int n){
static long data[20]={0, 1, 1}, i, result;
if(n<1 || n>=20) return -1;
if(data[n]==0){
for(i=1,result=0;i<=(n-1)/2;i++) result+=comb(i, n)*unko(i)*unko(n-i);
if(i*2==n) result+=comb(i, n)*unko(i)*unko(n-i)/2;
data[n]=result;
}
return data[n];
}
int main(void){
int i;
for(i=2;i<=20;i++) printf("%10ld\n", unko(i));
return 0;
}
537 :
431 :2009/09/23(水) 20:45:20
>>536 乙
クソしながら考え直してたら、すげぇ簡単な問題だったわ・・・orz
よーは、こいうこった。
最後にくくったタプルの右側と左側には、それぞれ i個とj個(n = i + j)の要素がくる
その取り方は nCi (もちろん、i = jの場合は nCi / 2)で、右側と左側についても同じことを再帰的に繰り返して、
最終的に出てきた値を掛け合わせれば終わり。Fラン大の受験問題レベルでした。サーセン(涙)
538 :
531 :2009/09/23(水) 22:19:55
nCr の記述が左右逆だった orz
539 :
532 :2009/09/23(水) 22:48:29
再インストールで解決させました。ありがとうございました。
>>536 はちょっと危険なコードだったw
変数 result は自動変数でないとダメだ
行数減らしのために考えなしに削るからこういう事に…
なんか頭のおかしなヤツが復活した予感
543 :
431 :2009/09/23(水) 23:37:41
ごめん。KYだったな。以後気を付ける
545 :
デフォルトの名無しさん :2009/09/25(金) 13:40:54
【質問テンプレ】 [1] 授業単元: 組み込みプログラミング [2] 問題文(含コード&リンク): uint8 flag = 0; uint8 countDownFlag = 0; と、状態を制御する2つのフラグがあるが、1つの state という状態を 格納する変数だけで状態を制御するよう書き直してください。 [3] 環境 [3.1] OS: winxp [3.2] コンパイラ名とバージョン: VC2008EE [3.3] 言語: C [4] 期限: 本日16時まで
546 :
デフォルトの名無しさん :2009/09/25(金) 13:44:12
REdata=PORTE; if (flag == 0 && (REdata & 0x01) == 0x00) { pattern++; // パターンをチェンジ pattern = pattern % 6; // パターンを0から5で表現 jikan = setTime[pattern]; // セットタイムを時間に代入 flag = 1; // 処理済み } else if (flag == 1 && ((REdata & 0x01) == 0x01)) { // 処理済みで、スイッチ0を離した flag = 0; // 処理待ち } if (countDownFlag == 1) { if (jikan > 0) { count++; if (count > 50) { // かなりアバウトに1秒? jikan--; // 表示時間を−1 count = 0; } } } if ((REdata & 0x02) == 0x00) { countDownFlag = 1; // カウントダウンスタート } if ((REdata & 0x04) == 0x00) { countDownFlag = 0; // カウントダウン停止 } if ((REdata & 0x08) == 0x00) { countDownFlag = jikan = pattern = 0; // すべてクリア } PORTC = LED_SEG[jikan % 10]; delay(10); PORTC = LED_SEG[jikan / 10] | 0x80; delay(10);
[1] 授業単元:C言語応用 [2] 問題文(含コード&リンク): 数独の解を求めるプログラムを作成せよ。 問題はテキストファイルに入力し、引数で指定して読み込む。 答えをプロンプトに出力し、Answer_ファイル名.txtとして出力する。(1.txt→Answer_1.txt) 問題の入力は、数字のあいているところを半角スペースとする。 例) 1 7 6 9 82 94 49 68 4 5 3 7 97 65 7 74 12 [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C言語 [4] 期限: 10月4日中 [5] その他の制限: 制限無し
>>548 の例題、半角スペースが詰められていますね・・・
アンダーバーに置き換えます。
_1_____7_
_6_____9_
__82_94__
49_____68
___4_5___
__3___7__
__97_65__
________7
74_____12
>>550 行の最後に空白が有っても良いように、入り口(入力ファイル仕様)を広げてみた。
void number_place_read(const char *file_name, BOX question[9][9])
{
char buf[80]; //追加
:
}
// fgetc(fp); // 改行読み飛ばし
fgets(buf, 80, fp); // 改行読み飛ばし
}
>>522 #include<stdio.h>
char symbol(int x){
static const char symbols[]="0123456789abcdefghijklmnopqrstuvwxyz";
if(x<sizeof(symbols)-1) return symbols[x];
return '?';
}
void hoge(int r, long p, long q, int n){
int i;
for(i=0;i<n;i++){
p*=r;
printf("%c", symbol(p/q));
p%=q;
}
printf("\n");
}
int main(void){
hoge(2, 1, 2, 2);
hoge(5, 124, 1000, 5);
return 0;
}
このスレの人って親切だな パソコン教室とか開いたほうがいいんじゃない?天職だよ
親切のつもりで問題解いてる人なんているのかなぁ? どこのジーザスだよ
人は皆自分のために生きています。その結果が人のためになっている人と 人のためになっていない人がいるだけです。
情けは人のためならず ことわざって便利ね。
暇つぶしのパズルのつもりでやるものだと思う
>>558 先々週だったか、タケシの番組で見たのは。
ランダムに配置された3つの円に内接または外接する円。
8個を求める為の、方程式を求めるまたはグラフを描く。
>>559 それって3つの円の中心が直線上に並んだときも8個になるの?
561 :
560 :2009/09/28(月) 09:46:43
各円が互いに交点、または接点を持たず、各円の中心が直線上に並ばない場合に限る、かなぁ
562 :
560 :2009/09/28(月) 09:57:41
ああ、あといずれかの円がいずれかの円に内包されてもダメか その上で8個ならどうにかなるんじゃね?
>>563 単純なGL固有の処理問題ならソース見て指摘もできるが
おもいきり、GL関係ないデータ処理の部分じゃねーかw
ディスプレイリストを作るとかVBOを使うとかじゃねーだろ
とにかく何をしていて何をしたいのか説明をしろ
565 :
563 :2009/09/29(火) 11:29:53
>>564 はい、説明します。
まずこのプログラムは最小の交差数を求めるプログラムなんです。
だけど交差を一つ一つ調べると処理時間がかなりかかってしまうんです。
そこで調べる交差を乱順列を使って効率的に調べられるようにしようとしてます。
566 :
563 :2009/09/29(火) 18:43:13
>>56 4
すいません、解決しました。
ありがとうございました。
すみません。 c言語がまだ初心者すぎてわからないのでどうかお願いします! ■プログラム1: りんごが30個中、腐っていたりんごが10個あったとき、 腐っていないりんごを3人で分けると、 一人当たりのりんごの個数は何個になるか、計算し、 "一人あたりのりんごの個数"と"残ったりんごの個数"を 出力するプログラム。 ■プログラム2: 上記プログラム1 のリンゴの個数などの数を scanfを使ってキーボードから 入力することで、任意の個数に対して計算できるように改良したプログラム。 ただし両プログラムの変数名は、最初のりんごの個数をapple、 腐っていたりんごの個数を bad_apple、人数をpersons、 一人当たりのりんごの個数を apple_for_one、余りをrest とすること。 お願いします!
>>567 クルッ
. ハ,,ハ ミ _ ドスッ
/1べ:;:;:r─‐-! ( ゚ω゚ )彡―─┴┴─―
. /iィ.:.:.:.:ヾ|断だ!\ / つ お断りし / ハ,,ハ
/ヘ レj_.:.:.lるが! \ 〜′ /´ └―─┬/ ( ゚ω゚ ) お断りします
. /.:`ソ =三_`y‐i:! \ ∪ ∪ / / \
/.:::i゛:.. `ヾニノ j! .\ / ((⊂ ) ノ\つ))
./;;i::rミ、 ;:' '! . \∧∧∧∧/ (_⌒ヽ
丶iゝ``' ,:' ,t'! < お > ヽ ヘ }
` 丶 、 /rj! < の し 断 > ε≡Ξ ノノ `J
────────────< 予 ま >────────────
ハ,,ハ お断り<. 感 す り > ______
( ゚ω゚ ) します<. !! > / ./お だ ,!
__〃`ヽ 〈_ /∨∨∨∨\ / ! 断 が,!
γ´⌒´-−ヾvーヽ⌒ヽ /お断りします \ / ,ハ,,ハ ! り ,!
/⌒ ィ `i´ ); /. ハ,,ハ \ /( ゚ω゚ )`ー‐,!
/ ノ^ 、___¥__ / ( ゚ω゚ ) \ `ヽ、 \_,!
! ,,,ノ爻\_ _人 / .(| y |) \ `ヽ、ノ\,!
>>567 ■プログラム1:
#include <stdio.h>
int main(void)
{
int apple = 30, bad_apple = 10, persons = 3, apple_for_one, rest;
apple_for_one = (apple - bad_apple) / persons;
rest = apple - apple_for_one * persons;
printf("一人あたりのりんごの個数:%d\n", apple_for_one);
printf("残ったりんごの個数:%d\n", rest);
return 0;
}
■プログラム2:
#include <stdio.h>
int main(void)
{
int apple, bad_apple, persons, apple_for_one, rest;
printf("りんごの個数:");
scanf("%d", &apple);
printf("腐ったりんごの個数:");
scanf("%d", &bad_apple);
printf("人数:");
scanf("%d", &persons);
apple_for_one = (apple - bad_apple) / persons;
rest = apple - apple_for_one * persons;
printf("一人あたりのりんごの個数:%d\n", apple_for_one);
printf("残ったりんごの個数:%d\n", rest);
return 0;
}
568さん いきなりですみませんでした。 569さん どうもありがとうございました!!!! 本当に助かりました!
571 :
デフォルトの名無しさん :2009/09/30(水) 21:37:01
[1] 授業単元: [2] 問題文(含コード&リンク): 米国への船便小包の郵便料金は以下の様に定められる。小包の重さを読み込み、その郵便料金を計算するプログラムを作成せよ。 但し、重量制限は20kg(20000g)までである。 1000g以下 1800円 10000g以下 1000gごとに550円の割り増し 20000g以下 1000gごとに550円の割り増し (例・3000g 2900円 3001g 3450円 20000g 10250円) [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C) [4] 期限: ([2009年9月30日24:00まで] ) どうか、よろしくお願いします。
572 :
デフォルトの名無しさん :2009/09/30(水) 21:49:41
申し訳ありませんが、修正です。 20000g以下の時は350円増です。
>>571 #include<stdio.h>
long get_price(long weight){
long price=1800;
if(weight>20000) return -1;
if(weight>10000) price+=(weight-10000+1000-1)/1000*350,weight=10000;
if(weight>1000) price+=(weight-1000+1000-1)/1000*550,weight=1000;
return price;
}
#define HOGE(w) printf("%ldg %ld円\n", w, get_price(w))
int main(void){
HOGE(3000L);
HOGE(3001L);
HOGE(20000L);
return 0;
}
宿題じゃないんですがc++で 半径rの3次元の球状にランダムにn個の点を置くにはどうしたらいいですか?
575 :
571 :2009/09/30(水) 22:16:42
迅速な回答、ありがとうございました。 もしご迷惑でなければ、もう一問解いていただけないでしょうか? 品物の値段と客の支払った額を読み込み、お釣りがある場合には、その額を貨幣(可能なら紙幣も)の種類と枚数で表示するプログラムを作成せよ。 例・ 値段は?→9800 (入力➀) お預かりは?→10000 (入力➁) お釣りは以下です。 (以下、表示される) \100:2枚 例2・ 値段は?→1111 お預かりは?→10000 お釣りは以下です。 \5000:1枚 \1000:3枚 \500:1枚 \100:3枚 \50:1枚 \10:3枚 \5:1枚 \1:4枚
>>575 #include<stdio.h>
void turi(long value, long unit, long foo){
if(unit<=0) return;
if(value/unit) printf("\\%ld:%ld枚 ", unit, value/unit);
turi(value%unit, unit/foo, (foo==2)?5:2);
}
int main(void){
long price, payment;
printf("値段は?");
scanf("%ld", &price);
printf("お預かりは?");
scanf("%ld", &payment);
if(payment>price){
printf("\nお釣りは以下です。\n");
turi(payment-price, 10000, 2);
}
if(payment==price) printf("\nお釣りはありません\n");
if(payment<price) printf("\n足りない\n");
return 0;
}
577 :
571 :2009/09/30(水) 22:37:00
すいません。課題がもう一問ありました。 これで最後ですので、どうかよろしくお願いします。 正の整数を入力すると、それをローマ字数字で表示するプログラムを作りなさい。 例: 1 I 4 IIII 5 V 9 VIIII 12 XII 46 XXXXVI 73 LXXIII 111 CXI 378 CCCLXXVIII 521 DXXI 1001 MI
578 :
デフォルトの名無しさん :2009/09/30(水) 22:39:09
初コメです、大学からプログラムを始めたんけど全くわかりません なので誰か解いてもらえないですか? TY高速鉄道の運賃は、乗車する距離に応じて 値段が異なります。 1− 3キロ 200円 4− 5キロ 280円 6− 7キロ 350円 8− 9キロ 420円 10−11キロ 490円 12−14キロ 550円 15−17キロ 610円 (1キロ未満のは数は、1キロに切り上げます) です 「引数」は「無し」 「戻り値」は「運賃」の関数 keisan3() により、関数keisan3()内で乗車距離を キーボード入力させ、main()関数内で、 運賃をprintf表示するプログラムを作成せよ。 なお、17キロより大きい値や、0キロ以下の数値の キーボード入力をした場合、もう一度、乗車距離の キーボード入力をやり直しさせるようにプログラム すること。 [注意事項] ・乗車距離は double でキーボード入力できるものとする。 ・運賃は main() 関数 内でprintf表示してください。 ・運賃は整数とします。 ・乗車距離に対する運賃の計算は if, else if 文により実現すること。 ・キーボード入力のやり直しの箇所は、自分の創意工夫により 考えてみること。(ヒント:do while を使う) お願いします
大学生にもなってこの程度の課題ができないとかFランクですなぁ
581 :
デフォルトの名無しさん :2009/09/30(水) 22:47:12
落ちこぼれ野郎なのでお願いします
582 :
デフォルトの名無しさん :2009/09/30(水) 22:47:13
大学生云々に関わらず、難しい物に難しいと言って、何が悪いんですか? 難しいと素直に言って、助けてもらう事の何が悪いんですか? 簡単に人の事を貶めるのは、あまり褒められた事ではないと思いますよ。
>>577 #include<stdio.h>
void turi(long value, long unit, long foo, const char *bar){
int i;
if(unit<=0) return;
if(value/unit){
for(i=value/unit;i;i--) printf("%c", *bar);
}
turi(value%unit, unit/foo, (foo==2)?5:2, bar+1);
}
int main(void){
long value;
scanf("%ld", &value);
turi(value, 1000, 2, "MDCLXVI");
return 0;
}
584 :
571 :2009/09/30(水) 22:53:53
三問もお願いしてしまって申し訳ありませんでした。 今日教えていただいた事は、しっかりと勉強して今後の役に立てたいと思います。 本当にありがとうございました。
>>582 時間は有限です
屑にとっても優秀な人にとってもそれは変わりありません
あなたのような屑がいかに時間を使おうとなんの問題もありません
しかしあなたに質問された人の時間はそうではありません
他人の足を引っ張る前にまず自分で解決するために努力してください
>>578 こんな問題の何がわからないのかがわからない
#include <stdio.h>
int keisan3(void) {
double d;
do {
printf("input distance >> "); scanf("%lf", &d);
} while (d <= 0 || d > 17);
if (d < 4) return 200; if (d < 6) return 280; if (d < 8) return 350;
if (d < 10) return 420; if (d < 12) return 490; if (d < 15) return 550;
return 610;
}
int main(void) { printf("UnChin: %d yen.\n", keisan3()); return 0; }
まぁ、何が言いたいかってーと、テンプレに従えっちゅーこっちゃ
>>578 #include<stdio.h>
#include<math.h>
long keisan3(){
long price_list[]={200, 280, 350, 420, 490, 550, 610};
long distance_list[]={3, 5, 7, 9, 11, 14, 17};
long i_distance;
static double distance=0.0;
int i;
printf("\n乗車距離を入力してください ");
scanf("%lf", &distance);
if(distance<=0.0 || distance>17.0){
printf("\n範囲外です\n");
keisan3();
}
i_distance=ceil(distance);
for(i=0;i<sizeof(price_list)/sizeof(price_list[0]);i++)
{
if(i_distance<=distance_list[i]) return price_list[i];
}
return -1;
}
int main(void){
printf("%ld円", keisan3());
return 0;
}
>>578 #include <stdio.h>
#define _
int keisan3(void)
{
for(;_;)
{
char buf[256] = { 0 };
double d = 0;
printf("乗車距離を入力してください: ");
fgets(buf, sizeof(buf), stdin);
if(sscanf(buf, "%lf", &d) == 1)
{
if(d > 0.0 && d <= 3.0) return 200;
else if(d > 3.0 && d <= 5.0) return 280;
else if(d > 5.0 && d <= 7.0) return 350;
else if(d > 7.0 && d <= 9.0) return 420;
else if(d > 9.0 && d <= 11.0) return 490;
else if(d > 11.0 && d <= 14.0) return 550;
else if(d > 14.0 && d <= 17.0) return 610;
}
puts("0より大きく17以下の数値を入力してください。");
}
}
int main(void)
{
printf("運賃=%d\n", keisan3());
return 0;
}
>>583 turiの中身を見ないまま、適当にprintf("¥n"); を追加して
見栄えを良くしようとしたら、
リカーシブしてるために変なところで改行しまくって吹いた。
[1] 授業単元: [2] 問題文(含コード&リンク):半径rの3次元の球状にランダムにn個の点を置くにはどうしたらいいですか? [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: c++ [4] 期限:なるべく早めにお願いします [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
>>591 #include<cstdlib>
double uniformed_rand(void)
{
return (rand()+1.0)/RAND_MAX;
}
int main(void){
long n=100;
double r=1.0;
for(n=0;n<100;)
{
double x=(uniformed_rand()*2-1)*r;
double y=(uniformed_rand()*2-1)*r;
double z=(uniformed_rand()*2-1)*r;
if(x*x+y*y+z*z<r*r) n++;
}
return 0;
}
>>588 キレイで気に入りました。
distance_listで17を定義しているのに、
if(distance<=0.0 || distance>17.0)でハードコードしているのは残念です。
594 :
588 :2009/09/30(水) 23:30:52
>>593 アレを気に入るとは、なかなかひねくれた感性ですねw
[1]C言語中級 [2] N-Queen問題の解答の列挙をするプログラム 回転/鏡映で一致する複数の解は一個のみ出力すること Nはコマンドラインで与える。(N>=3) N-Queen問題:N個のチェスのQueenをNxNのマス目の上に並べる 横、縦、斜め(一般には二方向)のマスにはほかのQueenがあっては ならない。 [3] Linux /GCC 4.0 /C [4] 9/30まで
>>596 期限切れ12分前に書き込むとはなかなかやるな
599 :
デフォルトの名無しさん :2009/10/01(木) 02:13:48
宿題スレで入力部分の例外処理について突っ込むのは低脳
>>592 ファイルに出力したいんですが最後の値しか反映されません
またx,y,zを配列にしたら値がものすごく小さくなります(x、y、zの後ろに[ ]をつけただけ)
for(n=0;n<100;)
{
x=(uniformed_rand()*2-1)*r;
y=(uniformed_rand()*2-1)*r;
z=(uniformed_rand()*2-1)*r;
if(x*x+y*y+z*z<r*r) n++;
std::cout << x << " " << y << " " << z<< std::endl;
std::ofstream randout("rand.dat");
randout << x <<" "<<y<<" "<<z<<std::endl;
}
>>600 数字以外が入力されたときの対応は次の宿題かもしれない
>>595 課題に書かれていないことをすると「習ってないから(ry」ってなる
課題要件に書かれてるのならやらなきゃならんし、 書いてないならやってもいい程度でいいだろ。 お役所仕事?元々丸投げすること自体悪いんだろ。文句言うな。
>>602 if が成立したときだけファイルに書き込まないとダメだよ
鬼神カーリーを蔑ろにするからそんなことになる
[1] 授業単元: [2] 問題文(含コード&リンク):イテレーターを使ってルンゲクッタ法を解く [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語:C++ [4] 期限: 可能ならば今日中 [5] その他の制限: イテレーターの理解がいまいちです。
[1] 授業単元:c言語 [2] 問題文 課題文1 1990年比 温室効果ガス排出量を25%削減する事を目標とするとする。 以下は1990年の排出量を入力すると目標値を計算するプログラムであるが 正しく動かない。正しく動くよう修正せよ。 #include <stdio.h> int main() {double co2_amount_in_1990; double co2_amount_target; puts("1990年時の温室効果ガス排出量は何トン?"); scanf("%lf",&co2_amount_in_1990); co2_amount_target=((100-25)/100)*co2_amount_in_1990; printf("目標値は %f トンです",co2_amount_target); } 課題文2 消費税を5%とする。 2個の物を買うときに一緒に買う場合と, 別々に会計をする場合と 消費税の1円未満の切り捨てにより、値段が 変わることがある。 例: 税抜き価格 30円の物と50円の物を一緒に買うと、84円だが、 別々に会計すると、31円+52円=83円となる。) 2個の物の税抜き価格をそれぞれ入力して、 一緒に買う場合と、別々に会計をする場合の税込み合計価格を 表示するプログラムを作成せよ。 [3] 環境 Windows, 言語:C++ [4] 期限: 10/8 よろしくお願いします!
なんかみたことあるな。
>>610 (100-25)/100
を
0.75
にすればいい
>>610 課題文2
#include <stdio.h>
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("一緒に買った場合:%d円\n", (int)((a+b)*1.05));
printf("別々に買った場合:%d円\n", (int)(a*1.05)+(int)(b*1.05));
return 0;
}
a * 1.05 じゃなくて (a * 105) / 100 にしたほうが良いと思う。
615 :
デフォルトの名無しさん :2009/10/03(土) 06:57:45
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): ソートされた2つの配列A[N], B[N]が与えられる。 AとBのそれぞれの要素を足して得られる、長さN*Nの配列、すなわち for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) C[i * N + j] = A[i] + B[j]; のC[]をソートした配列を、 およそN*Nに比例する時間で得るプログラムを作成せよ。 ただし、Nは4000以下、A[], B[]の要素は絶対値が2の28乗以下の整数であるとしてよい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 無期限 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) ややこしくてなかなかできません・・・・・・ あと、N*Nに比例する時間っていうのもイマイチわかりません・・・・・・
>>615 O(N^2)ってこととでしょ。
むしろ、その辺は授業で聞いてないと…って、授業に出てないからか。
バブルソートでもかけとけ
618 :
615 :2009/10/03(土) 07:24:42
>>617 なんか友達に聞いたら、
バブルソートなんてしてたらNの4乗の時間かかるぞww
っていわれました・・・・・・
クイックソートでいいだろ。N*N以下だから。
>>617 いや、バブルソートだとO(N*N*N*N)じゃね?
バケットソートで扱うには、要素の定義域が広すぎるような気がする。
ほかにO(n)のソートってあったっけ?
およそN*Nに比例する時間で得るプログラムを作成せよ。
>>622 言いたいことが分からないが、Cの長さN*N=nで、
O(n)のソートを適用しろと言う課題じゃないの?
unsigned char kosu[1<<29]; for(n=0; n<4000; n++) kosu[C[n]]++; for(n=0; n<(1<<29); n++) if(kosu[n]) print(n, kosu[n]);
>>624 N>=4000って言ってるから、charでは収まらないのでは?最大数はN*Nだhし。
C[0] から C[N-1]をソートしたものを、N個重ねて出力すれば良いんだろ。
>>626 逆か、N<=4000
それにしても、最大16000000個のデータが同じ値に。
unsigned short int kosu[1<<29]; for(n=0; n<N; n++) kosu[C[n]]++; for(n=0; n<(1<<29); n++) printout( n, N * kosu[n] );
今時のマシンなら、メモリ積んでるのかね。
基数ソートならいけるんじゃない?眠いから解かないけど
>>628 最大4000個だろ。はじめのN個ソートすれば十分。
map<unsigned int> mx; mx[C[n]]++; にしたらOK
int num[N], cnt[N], tourokusu=0; count_num(int n) { for(i=0; i<tourokusu; i++) if(num[i]==n)break; if( i >= tourokusu) { num[i]=n; cnt[i]=0; tourokusu++; } cnt[i]++; } for( n=0; n<N; n++) count_num(C[n]); for(n=0; n<tourokusu; n++) printout( n, N * kosu[n] ); でおけ
>>632 たとえば、
a[]={1,2,3};
b[]={1,2,3};
としたら、
c[]={2,3,4,3,4,5,4,5,6,}
で、N=3だけど、最初のNだけソートしてもダメじゃね?
そうか
637 :
デフォルトの名無しさん :2009/10/03(土) 08:23:10
A,Bがソートされてるんだから、Cの部分配列をマージしてけばいけそう。 必要なメモリ量がすごいことになりそうだが。
隣接交換は。 コストはよくわからないが。
C[N^2]をO[N^2]でソートせよとも書かれて無いんだよな。 ソート済みの2配列を足しこんで、なおかつソートしたものをどうやって得るか。 A[i]+B[j]を選択的に出力するいい方法って無いもんかね?
>>620 バブルソートは O(N*N)
だから要素数が 2N になっても O(2N*2N)→O(N*N) だよ
>>640 >>635 N=3なら、cのサイズは9
cのサイズN*N=nに対して、バブルソートのコストはO(n*n)=O(N*N*N*N)
>>639 AとBからCを作るコストも考えるとすると、そのコストがソートに対して無視してよいほど小さいと言えなくてはいけないのだろうか。
>>643 A+B→CもO(N*N)だから、気にしなくて良いのか。
645 :
71 :2009/10/03(土) 13:46:08
[1] 授業単元:c言語 [2] 問題文: 問題1 整数nを引数とし、n以下の正の奇数の総和を返す関数sum_odd(int n)と、n以下の正の偶数を返す関数sum_even(int n)を定義し、 これらを利用してキーボードから入力した正の整数nに対し、n以下の正の奇数、および偶数の総和をそれぞれ計算して表示するプログラムを作成せよ。 {出力例} 正の整数を入力してください:10 10以下の奇数の和は25です 10以下の偶数の和は30です 問題2 抵抗値がR1、R2、……、Rn(Ω)のn個の抵抗を並列接続した場合の合成抵抗値は、 それぞれの抵抗値の逆数の総和の逆数、すなわち R = 1 / (1 /R1 + 1 /R2 + … + 1 /Rn) となる。 実数型配列r[]とその要素数noを引数とし、r[]に格納した抵抗値から並列接続時の合成抵抗を上記の式を用いて計算して結果 を返す関数R_parallel(double r[], int no)を定義し、これを利用して任意の個数(個数は適当に決めてよい)の抵抗の並列接続時の合成抵抗を求めるプログラムを作成せよ。 {出力例}3個の抵抗の場合 抵抗1の抵抗値は:3 抵抗2の抵抗値は:4 抵抗3の抵抗値は:5 並列接続時の合成抵抗値は1.276596オームです [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限:10月5日9時まで お願いします。
647 :
デフォルトの名無しさん :2009/10/03(土) 14:32:34
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): キーボードから文字列を読み込んで、読み込んだ文字列が逆から読んでも同じ(回文のようなもの)文字列かどうかを判定するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows Xp (Windows/Linux/等々) [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C++ [4] 期限:なるべく早いほうがいいです。 [5] その他の制限:
>615 "要素は絶対値が2の28乗以下の整数"ってことはs=A[x]+B[y]は32ビット整数に収まるってことだよね? そしたら カウンタ[4294967296] を用意して、++カウンタ[s] で何個あるか調べれば ソートした配列をおよそN*Nに比例する時間で得られると思われ
650 :
デフォルトの名無しさん :2009/10/03(土) 15:37:53
ありがとうございます。 自分でこんなのを作っていたんですが、どうして動かなかったのか気になってしまって・・・ もしよかったら教えていただけませんか?? #include<stdio.h> int main(void) { char str[50]; scanf("%s",str); printf("%s",str); int a,b,c,d; for(a=0;str[a]!=0;++a);/*aの定義*/ for(b=0;(a-b)!=0;++b)/*bの定義*/ { printf("%c",str[a-b-1]); } { c=str[a]; d=str[a-b-1]; } if(c==d) /*逆から読んでも同じ単語になる*/ { printf("\n->yes\n"); } else /*そうでない場合*/ { printf("\n->no\n"); } }
>>650 一回しか判定してない上、文字列の範囲外を比べてるからだろw
index[N] = {0, N, 2N, 3N, …, N*(N-1)} として N*N回ループ C[index[i]]でいちばん小さい物を取得 index[i]をカウントアップ という流れでできるんじゃないかな
ってN*N*Nに比例しちゃうか スマソ
条件からして基数ソートをさせようとしている気がする
658 :
デフォルトの名無しさん :2009/10/04(日) 22:37:33
[1] C言語とアルゴリズム [2] 関数(非回帰) キーボードから自然数を入力し1からその自然数までの 二乗和を求めるプログラムを作成しなさい。 ただし二乗和を求める部分は関数(関数名をsqrsumとする)にすること。 [実行例] 自然数を入力して下さい. ←自然数の入力をうながすメッセージを表示 10 ←自然数を入力してEnter 1から10までの自然数の二乗和は371です. ←計算結果を表示する [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] C言語 [4] 期限:できれば明日の10時まで よろしくお願いします!!
>>658 2乗和の定義を教えてください。
入力が 3 ならば
1 * 1 + 2 * 2 + 3 * 3 = 14
と考えていいのでしょうか。
この考え方から行くと 1 から 10 までの二乗和は 385 になるのですが。
こちらの環境は WindowsXP、処理系は cygwin(gcc 3.4.4)です。
http://codepad.org/FBZUlLYR
>> 658 1から10までの2乗和は385だよな? #include <stdio.h> int sqrsum(int n) { int i, sum = 0; for (i = 1; i <= n; i++) sum += i * i; return sum; } int main() { int n; printf("自然数を入力して下さい. \n"); scanf("%d", &n); printf("1から%dまでの自然数の二乗和は%dです. \n", n, sqrsum(n)); return 0; }
>629 は C[] を作ってないから木がつかんかった... >653 そーゆー時は、カウンタ配列を5000個くらい用意して数えるのを場合分けすればいいんじゃね?
662 :
661 :2009/10/04(日) 23:17:59
あれよく見ると >629 の > for(n=0; n<(1<<29); n++) printout( n, N * kosu[n] ); の意味が和姦ねw 整数n と カウンタをN倍 すると何がどーなるって?
二乗和の公式を使うとsqrsum関数は int sqrsum(int n) { return n*(n+1)*(2*n+1)/6; } こうなるな
664 :
デフォルトの名無しさん :2009/10/04(日) 23:32:19
>>659 説明不足ですみませんでした。。
(1の二乗+2の二乗+3の二乗…)でお願いします!
あと関数(非回帰)と書いてしまいましたが
関数(非再帰)の間違いです。
すみません。
665 :
デフォルトの名無しさん :2009/10/04(日) 23:37:20
>>664 たまに回帰と言うこともあるが、まあ、再帰か。どのみち訳語だけど。
667 :
デフォルトの名無しさん :2009/10/04(日) 23:59:42
658の続きなんですが…。 [1] C言語とアルゴリズム [2] 関数(関数の再利用) キーボードから2つの自然数を入力し、小さい自然数から大きい自然数までの二乗和を 求めるプログラムを作成。ただし小さい自然数から大きい自然数までの二乗和を求める関数 (関数名をsqrsum2とする)を新たに作成し、前に作成したsqrsum関数をsqrsum2関数から呼び出して 再利用すること。なおmain関数からはsqrsum2関数だけで呼び出すプログラムにしなさい。 また実行例のように2つの自然数の入力順序に依存しないようにすること。 [実行例@] 2つの自然数を入力して下さい. ←自然数の入力をうながすメッセージを表示 4 10 ←自然数2つを入力してEnter 4から10までの自然数の二乗和は371です. ←計算結果を表示する [実行例A] 2つの自然数を入力して下さい. ←自然数の入力をうながすメッセージを表示 10 4 ←自然数2つを入力してEnter 4から10までの自然数の二乗和は371です. ←計算結果を表示する [実行例B] 2つの自然数を入力して下さい. ←自然数の入力をうながすメッセージを表示 1 10 ←自然数2つを入力してEnter 1から10までの自然数の二乗和は385です. ←計算結果を表示する [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] C言語 [4] 期限:明日の10時まで 何度もすみません。 よろしくお願いします!!
sqrsum2( num1, num2 ) { if(num1>num2) return sqrsum(num1)-sqrsum(num2); return sqrsum(num2)-sqrsum(num1); }
どなたか、Visual BasicをC言語に書き換えることができる方いませんか? 元のプログラムが少し長いので、可能な方はメールにてお知らせいただければ、 問題文を添付させていただきたいと思っています。 よろしくお願い致します。
>>669 >>1 なお、一般にVBのコードをgeneric-Cに置き換えるのは難しいし
推奨出来ない。
処理系依存な話になる(Windows特化とか)
>>669 希望通り動作してるなら書き換えなくてもいいんじゃない?
どうしても処理速度が気に入らないならPCをハイスペックにするとかw
>>667 #include <stdio.h>
int sqrsum(int n)
{
int i, sum = 0;
for(i=1; i<=n; i++) sum += i * i;
return sum;
}
int sqrsum2(int a, int b)
{
return sqrsum(b) - sqrsum(a-1);
}
int main(void)
{
int a, b;
printf("2つの自然数を入力して下さい.\n");
scanf("%d%d", &a, &b);
if(a > b) {
int temp = a;
a = b;
b = temp;
}
printf("%dから%dまでの自然数の二乗和は%dです.\n", a, b, sqrsum2(a,b));
return 0;
}
674 :
デフォルトの名無しさん :2009/10/05(月) 10:17:50
>>669 そんな宿題があるかよ。仕事または作業を注文する所ではない。金はらって他所でやれ。
安易に
>>669 受注したら莫迦をみた。
全然Visual Basicじゃない、Quick BasicのコードにSub〜End Sub付けただけ。
しかも識別子も処理フローもスパゲッティー。
リファクタリングは諦めて、コードーのトランスレートに努めた。
以下、グローバルにせざるを得なかった変数たち。
int n = 5;
int m = 5;
double fpr = 0.0;
int ot[100][20], rt[100][20], ro[100], fo[100];
int js[20][100], fj[20], tt[20], lj[20];
int wjs[20][100];
int wq[20][100], wj[20];
int tot[100], njs[100];
int otn[100][20], nrt[100][20], nro[100], nlj[20];
int joft[100];
int mjs[20][100];
int sgm[100], phi[100], bn[100];
int tet_, mtet_;
int i_, j_, je_, j1_, j_, k_, kk_, kq_;
int ineh_, ii_, jn_, mn_;
int mast_, sgmast_, nbn_, wjn_, wrk_, wtt_, rnd2_;
double Sum_, rnd1_, rndf_;
疲れたよ。
そっか。 おつかれさま
言っちゃ悪いけど、つーか後出しみたいだけど、
>>669 を見た時点でひどさは
分かるよなぁ…
正直、受ける人が出るとは思わなかった
684 :
683 :2009/10/05(月) 21:02:37
残念、すでに解いた方がおられたんですね。お友達にでも分けてあげてくださいな。
max の初期値は 1 がいいと思う
>>685 皆0点だったとしたら、‥‥‥、なるほどそうですね。
687 :
デフォルトの名無しさん :2009/10/05(月) 22:53:41
問)ある10進数の数字を入力して、2進数、4進数、8進数に変えるプログラムを作成せよ。 明日から新しい範囲に入るけど先週復習みたいな感じでこれをやったんですが、これ分かる人教えてくれませんか。 whileとかあまり(%)とかを使うらしいんですが。 #include <iostream> using namespace std; int main() { int num; cout << "数字を入力してください"\n cin >> num;
2で割ったあまりが2進数表記の一桁目です
2^n進法ならビット演算でおk
>>687 #include <iostream>
using namespace std;
void print(int n, int b) {
if (n/b) print(n/b, b);
cout << (char)('0'+n%b);
}
int main() {
int num;
cout << "数字を入力してください\n";
cin >> num;
print(num, 2); cout << "\n";
print(num, 4); cout << "\n";
print(num, 8); cout << "\n";
return 0;
}
>>677 構造体に全部入れてそのポインタを持ち回るか
C++ならクラスにすればいい
グローバル変数は嫌だあ(>_<)
692 :
デフォルトの名無しさん :2009/10/05(月) 23:39:40
>>690 #include <iostream>
using namespace std;
int main() {
return 0;
}
これの中にwhileとかあまりを使っていくみたいなんですが、それが分かりません
>>692 2で割った物を2で割ったあまりが二桁目です
[1] 授業単元:プログラミング技法 [2] 問題文(含コード&リンク): 二次関数方程式 ax^2+bx+c=0 の係数a,b,cを入力し、答えを表示する関数 Quadratic を作りなさい。その関数を呼び出すmain 関数も作り、動作を確認しなさい。 関数型はintとする。パラメータの型は、int および double とする。 機能 2次方程式の解を求める(表示しない) グローバル変数X1、X2に求めた答えを代入する 入力 a,b,c ax^2+bx+c=0 の係数 関数値 解の数、0なら係数 a が0、−1なら虚数解 aが0のとき、虚数解、重根のときはmain関数でメッセージを表示する。 sqrt()で平方根を求める(math.hをインクルードすること) [3] 環境 [3.1] OS: Windows XP [3.2] Micro Soft Visual C++ 2005 [3.3] 言語: C++言語 [4] 期限: 2009年10月9日 [5] 制限は特にありません。 すみませんが、よろしくお願いします。
#include <stdio.h> #include <math.h> double X1, X2; int Quadratic(double a, double b, double c) { double d = b * b - 4 * a * c; if(a == 0) return 0; if(d < 0) return -1; if(d == 0) { X1 = -b / (2 * a); return 1; } X1 = (-b + sqrt(d)) / (2 * a); X2 = (-b - sqrt(d)) / (2 * a); return 2; } int main(void) { int n; double a, b, c; scanf("%lf%lf%lf", &a, &b, &c); n = Quadratic(a, b, c); if(n==-1) printf("虚数解です\n"); else if(n==0) printf("a=0です\n"); else if(n==1) printf("重解%.2fです\n", X1); else printf("解は%.2f,%.2fです\n", X1, X2); return 0; }
696 :
デフォルトの名無しさん :2009/10/06(火) 19:26:17
baka
700 :
デフォルトの名無しさん :2009/10/07(水) 10:28:03
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): stdio.hだけをincludeした状態で平方根を求める方法をかけ [3] 環境 [3.1] OS: Windows vista [3.2] Microsoft Visual Studio [3.3] 言語: C [4] 期限: 2009年10月7日 [5] math.hを使わずにやれということみたいです。 お願いします。
>>700 桁数の制限はないの
小数1桁ぐらいならすぐできそう
>>700 提出しても問題はないと思う。
#include <stdio.h>
#define D 1.0e-8
int main(void)
{
double c = 2.0, x = 0.0;
while ((x * x > c && x * x - c > D) || (x * x < c && c - x * x > D)) x += D;
printf("sqrt(%f) = %f\n", c, x);
return 0;
}
>700 つ ニュートン法
707 :
デフォルトの名無しさん :2009/10/08(木) 02:11:19
まぁ〜だこんなところで意地悪しているのか、おまいらは?w どうせ性格も顔も悪いんだろ?ほれ、メガネデヴピッツァってやつぅ? AAでもあるよね?ぷぅ〜んぷぅ〜んと臭そうな臭いを発して PCの前でムキになって書き込みをしているあれ。お前らそっくりなんだろ?w
懐かしい
ループ変数をdoubleに変えちゃう人じゃないですか!
fgetc() の返り値を char で受ける人ですよ、あいもかわらず。
誤爆だろう。
715 :
デフォルトの名無しさん :2009/10/08(木) 17:23:27
716 :
710 :2009/10/08(木) 18:39:25
>>711 char で受けると、EOF とデータとしての 0xff を区別できなくなるのでは?
ということを懇々と複数(だと思います。)の人間が丁寧に説明にまわっても、
>>707 のように暴れだす、という人が過去に存在していました。
今も健在だと、悲しいのですが。
>>712 >>707 を知っている古株?自分がそうですって自己紹介しちゃっているようなもんだよ?w
>>716 > streamが指す入力ストリームから次の文字(もし存在すれば)を
> unsigned char型の値として読み取り、int型に変換する。
これが理解できないなら二度とプログラミングなんてしない方が良いよw
代入式で暴れたり、rand()で暴れたりした後はあんまりみかけてないな
>>710 >>716 では、そいつが書いたそのコードを提示してくれ。
俺はfgetcの戻り値をcharにそのまま代入したコードを書いた覚えはない。
キモメンメガネデヴピッツァ(2ちゃんの他でも見かける言葉、お前ら自身に自覚している心当たりあり?)を
↓を参考にここの連中のことを勝手なイメージで呼んだだけだが?w
ttp://dokoaa.com/ota.html
リストから先に進んだ?w
あっ、やっぱり自分のことを、直接名指し、アンカーで言われたわけでもないのに 自分が該当するからって悪く言われたと勘違いして、釣られてしまい 相手が自分が勘違いした奴だと思ってまた必死に弁明を始めているんですね?w みっともない、プログラマーらしからぬ態度だことw 俺はfgetcすら滅多に使わないのだがw
この長文はいったい何と戦ってるんだ?
724 :
デフォルトの名無しさん :2009/10/08(木) 19:36:21
fgetcを不適切に使う奴と勘違いしたようだなw やーいやーい、妄想やろうw そうやって見えない敵をいつまでも煽ってろよw こっちは痛くも痒くもありましぇ〜ん、けど そんな屁たれコードも書きませんよw
新参としては、触ってる奴らも荒らし、っていう言葉がものすごく実感できる流れ
716 名前:710 投稿日:2009/10/08(木) 18:39:25
>>711 char で受けると、EOF とデータとしての 0xff を区別できなくなるのでは?
char で受けると、EOF とデータとしての 0xff を区別できなくなるのでは?
char で受けると、EOF とデータとしての 0xff を区別できなくなるのでは?
char で受けると、EOF とデータとしての 0xff を区別できなくなるのでは?
ということを懇々と複数(だと思います。)の人間が丁寧に説明にまわっても、
>>707 のように暴れだす、という人が過去に存在していました。
ということを懇々と複数(だと思います。)の人間が丁寧に説明にまわっても、
>>707 のように暴れだす、という人が過去に存在していました。
ということを懇々と複数(だと思います。)の人間が丁寧に説明にまわっても、
>>707 のように暴れだす、という人が過去に存在していました。
ということを懇々と複数(だと思います。)の人間が丁寧に説明にまわっても、
>>707 のように暴れだす、という人が過去に存在していました。
727 :
デフォルトの名無しさん :2009/10/08(木) 19:49:08
誰がいつfgetcに対して説明したか知らんが、そいつが理解できなくても当然だな。 fgetcでEOFを検出した場合、環境にもよるがEOFが-1の場合0xFFとして受ける。 しかし、変数の型のこともあるが、問題は符号だろ。unsigned charで受けているが int型に。かといってもともとfgetc自身が1バイトの数値を受けるため内面的に int型であろうが数値はchar型の範囲内。 さて、signed char a=EOF; unsigned char b=EOFで どちらがEOFをそれに応じて認識するか、調べてみな、 まともに説明も出来ずに自分の思い込みで揚げ足取りをして 相手を言い負かせたら自分が勝ち、みたいなネトウヨレベルの キモイ工作をしているヘボプログラマーさんw
だめだこりゃw
でしょ、こんなふうに暴れるんですよ。いい加減、fgets() は int で受けるべきであることを認識させてくれないでしょうかね。
730 :
デフォルトの名無しさん :2009/10/08(木) 20:13:53
俺は別にfgetcの値をchar型にキャストもせずに代入した覚えはないしぃ〜 それよりも関数の詳細が分かっているなら、それぞれに応じて適切に コードを書けるしぃ〜。あと、fgetc自身が何も半角英数字のみしか 受けない関数じゃないしねぇ〜。それでも1度に処理する値は 分かっているしぃ〜♪何も人間が見える、読める文字、コードしか存在しないわけでもないしねぇ〜
初心者のころゲームのセーブデータ解析しようとして char ch; while((ch=fgetc(fp))!=EOF) 〜ってやったら途中で止まったの思い出したw
ぎゃははははは、ぶははははははは!自分が知った気になって別の無知に 説明したのに、char型ではEOFで引っかかるとか言っておきながら、 逆に自分の不適切さを指摘し返されるボケプログラマー必死だなw
>>730 1行目: キャストするしないの問題じゃねーよ
それ以降: 何言ってるんだかさっぱりわかんねーよ
734 :
デフォルトの名無しさん :2009/10/09(金) 15:28:16
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): アルファベットと数値を持つ複数のデータ(10個程度)をファイルから読み込んで 2分探索木を構築し,アルファベットを入力して数値を出力するプログラムを作成せよ. (データの例、AB 10 AC 2 BT 13 BC 5・・・) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2009/10/12 [5] 特になし
736 :
デフォルトの名無しさん :2009/10/09(金) 21:28:59
>>721 いきなりどうした、こいつ?今で昔話してんの?w
キャストから進んだぁ〜?w
737 :
デフォルトの名無しさん :2009/10/09(金) 21:32:45
/ ̄ ̄ ̄ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( 人____)< fgetcをcharに代入しちゃうなんて。リストから進んだぁ〜? |./ ー◎-◎-) \______________ (6 (_ _) ) カタカタカタ | .∴ ノ 3 ノ ______ ゝ ノ .| | ̄ ̄\ \
738 :
デフォルトの名無しさん :2009/10/09(金) 21:51:50
739 :
デフォルトの名無しさん :2009/10/09(金) 22:16:41
destに値をコピーするにはどうやれば良いのでしょうか。 const char *src = "test"; char *dest;
できた。ありがとー!
fgetc()の返り血をcharに代入しても何の問題もないよ。 ファイルの読み込みのとき、いちいちEOFをチェックしながら 読まないで、一度に読んじゃってあとでfeof()で一度チェックする でいいんだよ。fgetc()はEOFになったとき一度だけEOFを返してあとは 返さないとか未定義動作するとかでなく、何度よんでもEOF以降は ずっとEOFを返して正常だから。
>>743 テキストファイルならそれでも大丈夫だね。多分
745 :
デフォルトの名無しさん :2009/10/10(土) 04:15:43
>>719 激しく意味不明w しかもまた俺に関係ないrand()とかw
お前ら何か妄想する癖があるんじゃね?
気に入らない意見を見ると妙にクビを突っ込んで噛み付くタイプだろ?
それ世間一般じゃかなり嫌われてる行為だよ。そう、相手からしてみれば
お前は関係ないだろ、ってことだ。自意識過剰過ぎ。少し外に出ろ。
お前を知らない人間ばかりだぞ?もっとも、このスレ、板を介して
レスしあっても、お前がどこの誰か素性は分からんわw
/ ̄ ̄ ̄ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( 人____)<代入式で暴れたり、rand()で暴れたりした後はあんまりみかけてないな
|./ ー◎-◎-) \______________
(6 (_ _) ) カタカタカタ
| .∴ ノ 3 ノ ______
ゝ ノ .| | ̄ ̄\ \
/ \__| | | ̄ ̄|
746 :
デフォルトの名無しさん :2009/10/10(土) 04:17:03
あと、誰か知らんが俺はfgetcで説教を受けた覚えはありませんw まぁ、かなり前にこのスレで宿題に付き合ってやってたが そのプログラマーを金の出汁に使う方針に切り替えたんで。 お前らとは縁はないだろうけど、世のプログラマーの中には 俺に従事している奴がいるってことだ、それも俺の懐を豊かにするためにw
そういうスレでやれ
長文で必死にレスすると、図星なんだろうなと思われるだけなのにな。
749 :
デフォルトの名無しさん :2009/10/10(土) 04:49:21
意味わからねぇわぁ。fgetcについて説明を受けた覚えもねーし rand()で議論した覚えもねーわ。誰と勘違いしてんの?w 自分が説教した相手はどれも同一人物だと思ってるの?w お前ら相当妄想好きなようだなw それじゃ、ここで質問する奴も全員同一人物か? 答える自分は自分だと分かるだろうけど、他にも答えている人も 固定メンバーか?w
宿題スレの内容で懐が潤う、だと? 宿題代行業でもやってんのかね。
751 :
デフォルトの名無しさん :2009/10/10(土) 05:42:20
彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン ‖|‖ ◎---◎|〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 3 ヽ〜 < リストのクソースでも書けよ?w 川川 ∴)д(∴)〜 \_______________ 川川 〜 /〜 カタカタカタ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄|
752 :
デフォルトの名無しさん :2009/10/10(土) 06:25:41
糞麻呂が来たと勘違いしたんだろうねw
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): ランダム順列の生成プログラム 各k=0,1・・・m-1に対してa[k]=kとおく。 各l=m-1,m-2,・・・1に対して0からlまでの数からランダムに1つを選び(これをl2とする)、a[l]とa[l2]を交換する。 [3] 環境 [3.1] OS: windows linux(どちらも) [3.2] コンパイラ名とバージョン: windows visual stdio、gcc [3.3] 言語: C [4] 期限: 無期限 [5] その他の制限:特になし ランダム関数、配列、swapを利用して解決するであろうことは分かるのですが、 この問題でソレを使ってどのようにプログラムを書けばいいかが分かりません・・・。 よろしかったら教えてください。
#include <stdio.h> #include <stdlib.h> #define m 10 int main(void) { int k, l, l2, temp, a[m]; srand(time(NULL)); for(k=0; k<m; k++) a[k] = k; for(l=m-1; l>0; l--) { l2 = rand() / (RAND_MAX + 1.0) * (l + 1); temp = a[l2]; a[l2] = a[l]; a[l] = temp; } for(k=0; k<m; k++) printf("%d ", a[k]); return 0; }
仕事早すぎて濡れました。 forをどういう風に書いたらが分からなかったのでとても助かりました。ありがとうございます。
これ有名なシャッフル法だからすぐに書ける人がほとんどだよ。 for(l=m-1; l > 0;) { l2 = rand() / (RAND_MAX + 1.0) * l--; って書く方が 多いかな。
違った for(l=m; l > 0; ) { l2 = rand() / (RAND_MAX + 1.0) * l--; だな
>>758 #include<iostream>
#include<iomanip>
using namespace std;
int main (void){
const int aChangeCtoI [] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, 0, 0,
0 , 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, 0, 0,};
const char aChangeItoC[]=" ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int heni;
char str[]=" ";
char chGet[]=" ";
int ch;
cout << "長さ変えたければstr大きさ変えればいいよ" << endl;
cin >> str ;
do{for ( heni = 0 ; heni <= 36 ; heni++){for ( int i = 0; str[i]!='\0' ; i++){
ch = aChangeCtoI[str[i]]+heni;
if ( ch > 36){ch -=36;}
chGet[i] = aChangeItoC[ch];
}
cout << "オリジナル" <<str << endl;
cout << "変位 "<<setw(2)<< heni<<" " <<chGet << endl;
}
}while(heni < 36 );
}
うpするのが面倒だから貼り付けるのに開業色々適当だから!
後、ソースコードが見にくいのでアルゴリズムも違うよ!
>>758 char c;
c = getchar();
while (c != '\n' && c != EOF) {
ここに文字cをシフトする処理を書く
putchar(c);
c = getchar();
}
( * )ここ
765 :
デフォルトの名無しさん :2009/10/10(土) 17:59:16
麻呂じゃ麻呂じゃ、麻呂の再来でおじゃる!
|;;;;;;;;;;ノ∪ \,) ,,/ ヽ〜 |::( 6∪ ー─◎─◎ )〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |ノ (∵∴ ( o o)∴)〜 < 俺が書いたソースが世界一なんだYO! | ∪< ∵∵ 3 ∵> ムッキー! \________________ \ ⌒ ノ_____ \_____/ | | ̄ ̄\ \
>>758 #include <stdio.h>
int main(void)
{
char str[256], *p;
int n;
scanf("%s", str);
for(n=0; n<26; n++) {
for(p=str; *p; p++) {
if(*p!=90) (*p)++;
else *p = 65;
}
puts(str);
}
return 0;
}
>>740 使用後 dest を free() することをお忘れなく。
>>758 カエサル暗号のキー(ずらす量)はどうしましょうか?
[1] 授業単元:プログラミング演習2 [2] 問題文(含コード&リンク): テキストファイルを読み込み、 文字コード表を利用して種類ごとに文字を分類し、それぞれをカウントするプログラムを作れ 分類は以下の通りとする。 1.半角英数 2.半角カナ 3.半角記号 4.全角かな 5.全角記号 6.漢字 以上のように分類した上で「半角英数:XX字、半角カナ:XX字・・・」というように結果をファイルに出力せよ。 [3] 環境 [3.1] OS:Windows XP [3.2] Visual Studio 2008 [3.3] どちらでも可 [4] 期限: 2009年10月13日 正午迄 [5] その他の制限: 使用する文字コード表は自由だが一般に使われているものを選択せよとのことでした。 コード内にコメントで使用した文字コードを注釈として記載するようにとの連絡がありました。 それ以外は特にありません。 よろしくお願いします。
771 :
デフォルトの名無しさん :2009/10/11(日) 01:07:12
C++でif文を使って二次方程式の解を求めるプログラム教えてくれませんか? #include<iostream> using namespace std; int main() { で始まってます。 ax^2+bx+c=0でa,b,cを代入して求めるんですが
774 :
デフォルトの名無しさん :2009/10/11(日) 04:29:18
コピーを行おうとするとbus errorが起きてしまい原因が掴めません。 buff2の書き方に問題がある気がするんですが、どこが間違ってるんでしょうか。 char *buff1 = "abcdefghijk"; char *buff2 = ""; memcpy(buff2, buff1, 20); printf("%s¥n", buff2);
char *buff1 = "abcdefghijk"; char buff2[256]; memcpy(buff2, buff1, 20); printf("%s\n", buff2);
この手の勘違いをするヤツはC言語がある限りいなくならないんだろうな。
777 :
775 :2009/10/11(日) 04:50:39
>>776 buff2をあらかじめ配列宣言しなくてすむ方法はないでしょうか。
実際やりたいことは、
const void *src = xxx (バイナリデータ)
を
void *dst
にコピーしたいのです。
malloc()使えw
コピー元の(バイナリデータ)の長さがわからんとmallocでの確保も出来ないのでは
780 :
775 :2009/10/11(日) 04:56:10
なるほど!すみませんありがとうございました
>773 横から悪いと思うがlibRawPgm.cを読ませてもらった 67行目で真ならreleaseImage()されるが、img->pが不定、他の所も 81行目だけ何故かリソースの開放が無い 同じようなリソース開放の処理が多いのでgotoか関数化した方がよい 課題依存の部分は突っ込まない
783 :
デフォルトの名無しさん :2009/10/11(日) 11:31:43
[1] 授業単元: プログラミング1 [2] 問題文(含コード&リンク): 2進数で00000001から11111111まで表示する。 [3] 環境 [3.1] OS:windows [3.2] わからん [3.3] C言語 [4] 期限: 10月15日まで [5] とくになし。この前for文を習ったばっかり。
#include <stdio.h> print_bin(int n){ int i; if(n==0){ printf("¥n");return;} for(i=0;i<2;i++){ printf("%d",i); print_bin(n-1); } } int main(void){ print_bin(8);reutnr 0}
ア○○のようなコード遊びなんでそのつもりで
>>767-759 丁寧に教えていただきありがとうございます
>>769 キーを求めるためのプログラムでもあるのでそれは分かりません
単語帳を読ませてそこから検索するようなものを作ろうとして
挫折した結果が
>>758 なので
>>783 #include <stdio.h>
#define N 8
int main(void)
{
int i, digit = 1;
char a[N] = {0};
while(1) {
for(i=0; !(a[i] ^= 1); ) if(++i == digit && ++ digit > N) goto out;
for(i=N-1; i>=0; i--) printf("%d", a[i]);
putchar('\n');
}
out:
return 0;
}
普通にitoa使えば一発なんじゃ・・・
itoaって00000001みたいにできたっけ?
>>790 出来ないけどまぁ、strlenとか使って文字列長取得して0入れてやればおkじゃね
それは一発とは言わないw
>>792 itoa(num,buf,2);
printf("%08s",buf);
で一発じゃねーか
君面白いこと言うねw
795 :
773 :2009/10/11(日) 12:48:13
- 結果としてBASICが根幹にあるんですね。 どうしてでしょうか。 簡単で手軽、誰にでも学習の機会があることでしょうね。 CやHSPだとこうはいきません。 CやHSPだとAPIのノウハウが必要になりますし、それは大きな障壁となります。
797 :
788 :2009/10/11(日) 13:12:25
よく考えたらdigitいらなかったw #include <stdio.h> #define N 8 int main(void) { int i; char a[N] = {0}; while(1) { for(i=0; !(a[i++]^=1);) if(i==N) goto end; for(i=N-1; i>=0; i--) printf("%d", a[i]); putchar('\n'); } end: return 0; }
>796 どこかで見た気がすると思えば、「最も美しいプログラミング言語は? Part3」だった
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ char buf[9]; int count = 0; do{ itoa(count++,buf,2); printf("%08s\n",buf); }while(strstr(buf,"11111111")==NULL); } これだけで済むね、itoaとprintf使うと。
ああ、でもwhileは習ってないらしいからだめか
処理としては比較にならないほど重くなってるけどなw
というか00000001になってねーじゃねーかw
これでは3Dプログラミングなんて10年たってもムリかもw
初期値の問題だけなのにずいぶん必死だな・・・
806 :
デフォルトの名無しさん :2009/10/11(日) 16:19:10
1つの変数に複数の型の配列を入れたいんですが、 void **list = malloc(sizeof(void) * 2); list[0] = malloc(sizeof(char) * 10); list[1] = malloc(sizeof(int) * 10); とした場合、list[0]はcharポインタを指し、list[1]はintポインタを指してるという認識であってますでしょうか。 list[0]に10文字以上のcharを代入してもエラーが起きないのがよくわかりません。
質問すれじゃねーぞ
>sizeof(void) ちょっとワロタ
すみませんスレまちがえました
>>797 は条件分が多すぎておもたくなってるんだとおも
#include <stdio.h> #include <stdlib.h> int main(void) { char buf[9]; for( int i = 1; i < 256; i++ ) { itoa(i,buf,2); printf("%08s\n",buf); } return 0; } でいいじゃん。めんどくさ
#include <stdio.h> int main() { char a=0;int bit; while((a++)+1){ for(bit=128;bit;bit>>=1){ a&bit ? printf("1") : printf("0"); } printf("\n"); } return 0; }
麻呂が久々に登場でおじゃるぅ〜、クソースを書いても良いでおじゃるか?
>>815 今年の春先だったかGWの頃だったか、麻呂結構凄いコード
盛んに投稿してたじゃん
>>814 なんでwhile((a++)+1)
while(++a)でいいじゃん
>>816 へ?今年はまだここにコードを書いた覚えはないでおじゃるが?
そもそも去年だか一昨年の年末くらいから、ほとんどスレを見ていない。
たまに専用ブラで受信してログを残している程度だったが・・・
毎年似たような課題ばかりで退屈したでおじゃる。
麻呂はひとりじゃないってことだ
821 :
551 :2009/10/11(日) 22:17:32
#include <stdio.h> int main() { int i,j,k; char a[9]={1,2,3,4,5,6,7,8,0}; for(i=1;i<=8;i++) { for(k=0;k<8;k++) { a[7-k] = (i-k > 0)+'0'; } puts(a); } puts("というのは、冗談で…"); for(i=1; i<=0xff; i++) { j = i; for(k=0; k<8; k++) { a[7-k] = (j % 2)+'0'; // (j & 1) でもよい j = j / 2; // (j >> 1) でもよい } puts(a); } return 0; }
[1] 授業単元:c言語 [2] 問題文 課題文1 とある架空の携帯電話会社では、基本料金の1,000円に、一ヶ月の 通話の合計時間によって通話料が加算される(1分あたり10円)。 また、1ヶ月の料金は基本料金込みで10,000円以上は通話料が無料になるものとする。 このとき、1ヶ月の合計通話時間を入力すると請求される料金を表示するプログラムを作成せよ。 課題文2 明治元年以降の西暦年を4桁の数で入力すると、和暦で年を表示するプログラムを作成せよ。 ただし、2つの元号を持つ年は両方の年を表示すること。 (例: 1989年 → 昭和64年、平成元年) (2つの元号を持つ年の扱いについては余裕がある人は、月、日も入れて、その日の正しい 元号を表示することによって元号を一つ表示するプログラムとしてもよい。) [3] 環境 Windows, 言語:C++ [4] 期限: 11/3 よろしくお願いします!
>[1] 授業単元:c言語 >言語:C++ どっちなんだよw
825 :
551 :2009/10/12(月) 01:13:22
>>823 問題1
#include <iostream>
using namespace std;
int main(void) {
int minits;
cout << "通話時間(分)を入力:";
cin >> minits;
if(minits<0) minits = 0;
if(minits>900) minits = 900;
cout << minits*10 + 1000 << "円";
}
Cの授業でC++で提出しても許されるってことかな だとしたら良いなあ
> if(minits>900) minits = 900; はしょらないでちゃんと記述汁! if(minits*10+1000>10000) minits=(10000-1000)/10;
829 :
770 :2009/10/12(月) 02:33:28
>>822 様
迅速に解答していただき大変ありがとうございました!
大学が開いたら動作確認してご連絡したいと思います。
指摘されていた全角英数の件ですが、
おそらく担当教官のミスで抜け落ちていたのだと思います。
>指摘のあった全角英数は、「全角その他」に入ります。
全角その他=全角英数ということでよろしいのでしょうか?
ご面倒をかけて恐縮ですが、全角英数を分けたものもお手間でなければお願いしても大丈夫でしょうか。
申し訳ございません。
久々に本物の、クソースを書いた麻呂が登場したのに 騙ったのか単に麻呂と勘違いされていたのか知らない 誰かと同一視されてるでおじゃる・・・まぁ、引退したし どうでも良いでおじゃるがw
>>823 課題文2
#include <stdio.h>
int main(void)
{
int year;
printf("西暦を入力してください:");
scanf("%d", &year);
if(year < 1868 || 2009 < year) return 0;
if(year == 1868) printf("明治元年\n");
else if(year < 1912) printf("明治%d年\n", year - 1867);
else if(year == 1912) printf("明治45年 大正元年\n");
else if(year < 1926) printf("大正%d年\n", year - 1911);
else if(year == 1926) printf("大正15年 昭和元年\n");
else if(year < 1989) printf("昭和%d年\n", year - 1925);
else if(year == 1989) printf("昭和64年 平成元年\n");
else printf("平成%d年\n", year - 1988);
return 0;
}
832 :
551 :2009/10/12(月) 05:35:02
>>827 >> if(minits*10+1000>10000) minits=(10000-1000)/10;
if(minits>(10000-1000)/10) minits=(10000-1000)/10;
なんでそこまでminitsに拘るんだ もう一つ変数用意して料金用にすればいいのに
誰もminitsに突っ込まないのは何故
#include <iostream> int main() { unsigned int min; std::cin >> min; unsigned int toll = 1000 + min*10; if (toll > 10000 ) toll = 10000; std::cout << toll << "円" << std::endl; } 素直に書くとこんなだよな 10000円から逆算すると900分だから、とかやるのはバグの元だし、どうしてもそれを やりたいなら static const int hoge = (10000-1000)/10; とか書くべき
836 :
551 :2009/10/12(月) 06:36:02
なぜ?はしょる。 if (toll < 1000 ) toll = 1000;
839 :
551 :2009/10/12(月) 07:16:04
>>836 は二の次。
unsigned int min=0;
お前もう来なくていいよ
minだと最小値に見えるし、using namespace stdな人達も困るだろうから、 minutesとかminsとかにした方がいいかもな 俺ならmにするけど
845 :
551 :2009/10/12(月) 15:14:52
>>842 解説求む
VC6 / VS2005 だと、-2入力の時980円。
g++ / bcc32 だと、-2入力の時=0必要。
>>840 むっ氏
で、お前のコードだと-2を入れると1000円が返る訳だが、それが正しいと思うのか? 半端にエラーを隠すコードを突っ込むくらいならちゃんとエラーを吐くコードに改良しろ。
OK りょうかい
849 :
デフォルトの名無しさん :2009/10/12(月) 15:56:43
誰か本当にお願いしますC++で二次方程式の解を求めるプログラム教えてください a=0の時と実数解と虚数解で場合分けするだけじゃダメなんですか?もう1週間経っても終わらないんです。 ヒントの場合分けにそう書いてありました
>>849 できたとこまでみせてください。あとテンプレはどれですか?
851 :
デフォルトの名無しさん :2009/10/12(月) 16:11:13
#include <iostream> #include <cmath> using namespace std; int main() { float a,b,c,d,x0,x1; cout << "aを入力してください\n"; cin >> a; cout << "bを入力してください\n"; cin >> b; cout << "cを入力してください\n"; cin >> c; d=b*b-4*a*c; x0 = (-b + sqrt(d)) / (2 * a); x1 = (-b - sqrt(d)) / (2 * a); if(a==0) { cout << "解は1つで" << -c/b << "です\n"; } else if(d>0) { cout << "解は二つの実数解で,解は" << x0 << ", " << x1 << "です\n"; } else if(d<0) { cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+" << sqrt(-d) / (2 * a) << "i" << " , " << (-b) / (2 * a) << "-" << sqrt(-d) / (2 * a) << "i" << "です\n"; } else { cout << "二重解となり,解は"<< (-b) / (2 * a) << "です\n"; } return 0; } if文で作る問題だったし、場合分けは、虚数解、a=O、実数解に分ければ出来ると言ってたので、これでいいかなと思ったんですが…
>>851 あってそうですね。どこがまちがえている、ていわれたのですか?
まともに見てないけど一見して気になったのは、float相手に==0をしてるとこ
と思ったけどaは加工してないのか …って、a==0でいいの?
ああ、いいのか ちゃんと見てないで喋ると駄目だな
856 :
851 :2009/10/12(月) 16:18:12
じゃあ条件の所は全部0.0にすればいいんですか?
x0, x1 の計算は a の判定の後のほうがよろしいんじゃないかと… 演算結果が ±INF になるだけかもしれないし 例外投げるかもしれない
858 :
851 :2009/10/12(月) 16:23:37
#include <iostream> #include <cmath> using namespace std; int main() { float a,b,c,d,x0,x1; cout << "aを入力してください\n"; cin >> a; cout << "bを入力してください\n"; cin >> b; cout << "cを入力してください\n"; cin >> c; d=b*b-4*a*c; if(a==0) { cout << "解は1つで" << -c/b << "です\n"; } x0 = (-b + sqrt(d)) / (2 * a); x1 = (-b - sqrt(d)) / (2 * a); else if(d>0) { cout << "解は二つの実数解で,解は" << x0 << ", " << x1 << "です\n"; } else if(d<0) { cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+" << sqrt(-d) / (2 * a) << "i" << " , " << (-b) / (2 * a) << "-" << sqrt(-d) / (2 * a) << "i" << "です\n"; } else { cout << "二重解となり,解は"<< (-b) / (2 * a) << "です\n"; } return 0; } こうですか
sqrt に負数が入る可能性がある
860 :
851 :2009/10/12(月) 16:27:59
else文がifと一致しません って出ました。やっぱり訂正するとダメでした…
861 :
851 :2009/10/12(月) 16:29:26
どこをどうすれば合うんでしょうか?
質問スレに引っ越せ
きちっと処理できないsort関数なんてqsort(クソート)でおじゃる!
#include <iostream> #include <cmath> using namespace std; void hoge(float a, float b, float c) { float x0,x1,d = b*b-4*a*c; if(a == 0) { if (b == 0) cout << "解は1つで" << -c << "です\n"; else cout << "解は1つで" << -c / b << "です\n"; } else if(d > 0) { x0 = (-b + sqrt(d)) / (2 * a); x1 = (-b - sqrt(d)) / (2 * a); cout << "解は二つの実数解で,解は" << x0 << ", " << x1 << "です\n"; } else if(d < 0) { cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+" << sqrt(-d) / (2 * a) << "i" << " , " << (-b) / (2 * a) << "-" << sqrt(-d) / (2 * a) << "i" << "です\n"; } else { cout << "二重解となり,解は"<< (-b) / (2 * a) << "です\n"; } } int main() { hoge(0,0,-1); hoge(1,0,-1); hoge(1,0,1); hoge(1,-2,5); hoge(0,2,1); hoge(1,2,1); return 0; } これで全パターン通ってるか?
865 :
851 :2009/10/12(月) 16:51:31
でも864の様な書き方は習っていないんです…
別に習ってなくても独学でやりました。でいいと思うけど
どうでもいい事だけど、ここ一年ぐらいずっとCしか見てなかったから、 C++のcoutとか違和感ありまくる・・・・
>>865 if のネスト(if / else の中に さらに if が居る) は習っていない?
ネスト無し if 〜 else if 〜 else だけを使って、
とある条件が成立している時だげ演算するのを記述するのは面倒だな…
869 :
551 :2009/10/12(月) 17:43:43
try{ if(minute < 0) throw 1; }catch(int a){ cout << "マイナスの値が入力されました!"<<endl; return a; } こんな短い間隔でtryするなよ・・・って思うのは俺だけですねごめんなさい
>>870 短いのはかまわないが、例外を投げる価値が無い。
>>851 #include <iostream>
#include <cmath>
using namespace std;
int main() {
float a,b,c,d,x0,x1;
cout << "aを入力してください\n"; cin >> a;
cout << "bを入力してください\n"; cin >> b;
cout << "cを入力してください\n"; cin >> c;
d = b*b-4*a*c;
if(a==0 && b==0) {
cout << "解は1つで" << -c << "です\n";
}
else if(a==0) {
cout << "解は1つで" << -c / b << "です\n";
}
else if(d==0) {
cout << "二重解となり,解は"<< (-b) / (2 * a) << "です\n";
}
else if(d>0) {
x0 = (-b + sqrt(d)) / (2 * a);
x1 = (-b - sqrt(d)) / (2 * a);
cout << "解は二つの実数解で,解は" << x0 << ", " << x1 << "です\n";
}
else if(d<0) {
cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+" << sqrt(-d) / (2 * a) << "i" << " , " << (-b) / (2 * a) << "-" << sqrt(-d) / (2 * a) << "i" << "です\n";
}
return 0;
}
>>811 最短経路
#define IS_VALID(x, y) (0<=(x) && (x)<sizex && 0<=(y) && (y)<sizey)
void SearchRoute_internal( int work[MAX_X][MAX_Y], int map[MAX_X][MAX_Y], int sizex, int sizey, int x, int y, int goalx, int goaly, int distance, int *resolved ){
static const int vx[]={ 1, 0,-1, 0}, vy[]={ 0, 1, 0,-1};
int i, next_x, next_y;
work[x][y]=distance;
if(x==goalx && y==goaly) *resolved=1;
for(i=0;i<4;i++){
next_x=x+vx[i];
next_y=y+vy[i];
if(!IS_VALID(next_x, next_y)) continue;
if(map[next_x][next_y]==ROAD && work[next_x][next_y]>distance){
SearchRoute_internal(work, map, sizex, sizey, next_x, next_y, goalx, goaly, distance+1, resolved);
}}}
void MarkPath(int work[MAX_X][MAX_Y], int map[MAX_X][MAX_Y], int x, int y, int sizex, int sizey){
static const int vx[]={ 1, 0,-1, 0}, vy[]={ 0, 1, 0,-1};
int i, next_x, next_y;
for(i=0;i<4;i++){
next_x=x+vx[i];
next_y=y+vy[i];
if(!IS_VALID(next_x, next_y)) continue;
if(work[next_x][next_y]==work[x][y]-1){
map[next_x][next_y]=PATH;
MarkPath(work, map, next_x, next_y, sizex, sizey);
break;
}}}
void SearchRoute( int map[MAX_X][MAX_Y], int sizex, int sizey, int startx, int starty, int goalx, int goaly ){
int work[MAX_X][MAX_Y]={{0}}, resolved=0;
SearchRoute_internal(work, map, sizex, sizey, startx, starty, goalx, goaly, -MAX_X*MAX_Y, &resolved);
if(resolved) MarkPath(work, map, goalx, goaly, sizex, sizey);
}
875 :
848 :2009/10/12(月) 20:47:11
877 :
851 :2009/10/12(月) 22:51:20
>>868 習ってないですね。
でも、ありがとうございました
878 :
デフォルトの名無しさん :2009/10/13(火) 02:00:30
授業単元:プログラミング 問題文:#include<stdio.h> int main(void){ int x; double r; double pi=3.141592; printf("半径rを入力して下さい:"); scanf("%lf",&r); printf("1または2を入力して下さい。\n"); printf("[1:球の表面積 2:球の体積]:"); scanf("%d",&x); if(x==1){ printf("半径%lfの球の表面積S=%lf",r,4.0*pi*pow(r,2.0)); }else if(x==2){ printf("半径%lfの球の体積V=%lf",r,4.0/3.0*pi*pow(r,3.0)); }else{ printf("1または2を入力して下さい。"); } return 0; } 環境 [3.1] OS:WindowsXP [3.2] Visual Studio [3.3] 言語:C [4] 期限:10月13日 10:40 体積と表面積を求めるプログラミングなのですが上手く動作してくれません。 よろしくお願いします。
#include <math.h>
>>879 レスありがとうございます。
無事上手く動作しました。
881 :
770 :2009/10/13(火) 02:49:33
>>841 >>822 様
ありがとうございました!動作確認できしだい報告いたします。
取り急ぎお礼まで、修正にまで応じてくださり大変感謝しております。
[1] 授業単元:自主勉 [2] 問題文(含コード&リンク):イテレータを使って微分方程式を解きたい [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C++ [4] 期限: 早め [5] その他の制限: とくにないけどイテレータに関しての説明が詳しくしてもらえるとありがたいです ルンゲクッタか蛙飛び法でお願いします
883 :
デフォルトの名無しさん :2009/10/13(火) 15:55:04
[1] 授業単元: プログラミング演習 [2] 問題文 問1 画面上の中央に一辺の長さが40の白い正方形を表示せよ.キーボードからの入力があるまでその表示のままプログラムが停止するようにせよ。 そしてキー入力をしたらその画面が消え、画面の中央に一片の長さが50の赤い正方形を表示せよ。(cleardevice()関数で画面を消し、getch()関数でキー入力を取得せよ) 問2 キーボードでどのキーが押されるかによって表示される図形の色と大きさが変わるようなプログラムを作成せよ。 プログラムが起動し、’4’のキーが押された場合には一辺が50の赤い正方形、’6’のキーが押された場合には一辺が20の青い正方形が表示されるようにせよ。(getch関数を使用せよ)。 問3 前問と同様、キーボードでどのキーが押されるかによって表示される図形の色と大きさが変わるようなプログラムを作成せよ。 ただし、キーが押される度に何度でも’4’のキーと’6’のキーで一辺が50の赤い正方形、と一辺が20の青い正方形が切り替わるようにせよ。ただし、’q’のキーが押されたらプログラムが終了するようにせよ。(while文あるいはdo-while文を使用すること) 問4 画面上に一辺が40の白い長方形を描き,キー入力によってその長方形の表示位置が左右に少しずつ変化するようなプログラムを作成せよ. ('4', '2'のキーで左右移動,キー入力にはgetch()関数を使用せよ.)最初は正方形を画面中央に描く。また、正方形が描かれる位置を記憶するための変数を作っておくこと。その変数の値をキー入力に応じて増減させ、その値を使用して表示をするようなプログラムにせよ。 問5 前問のプログラムを改造し、画面上に描かれた正方形がキー入力によって上下左右に動くようなプログラムを作成せよ。 「6」で右、「4」で左、「8」で上、「2」で下に動くようにせよ。「q」でプログラム終了すること。 [3] 環境 [3.1] OS:XP [3.2] Turbo c++ 4.0 [3.3] C++ [4] 期限 今週木曜日 [5] なし どうかよろしくおねがいします。
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): ユークリッドの互除法のアルゴリズムを作る。(達成条件は 例 % euclid_1013_2009→ 結果は1となるように) [3] 環境 [3.1] OS:Windows/vista [3.2] コンパイラ名とバージョン:Visual C++ 2008 [3.3] 言語: C++ [4] 期限: 2009年10月22日 [5] その他の制限: ちょっと分かりにくいかも・・・? よろしくお願いします。
アルゴリズムを作る w
ユークリッド互除法はアルゴリズムじゃないのか
>>884 アルゴリズムは俺が作ったんじゃないけどとりあえず
#include <stdio.h>
#include <stdlib.h>
int gcd(int x, int y) { return x % y? gcd(y, x % y): y; }
int main(int argc, char **argv)
{
printf("%d\n", gcd(atoi(argv[1]), atoi(argv[2])));
return 0;
}
ユークリッドの互除法のアルゴリズム[を使ったプログラム]を作る だろJK
屁理屈過ぎるw
屁理屈じゃなさ過ぎる
>>883 turbo c? Windows の cmd ってエスケープシーケンスが効きましたっけ?
横レス
>>892 turbo cを知らない、の意味で?つけてる?
エスケープシーケンス使えるよ。
894 :
892 :2009/10/13(火) 22:32:08
色はつかないようだが、画面クリアとかはできるなあ。詳細求む。
895 :
892 :2009/10/13(火) 22:33:31
いや、turbo c といえば dos 時代のコンパイラとばかりおもってまして。 色をつけるエスケープシーケンスが見つからないでいます。
cygwin 上では無理だし、この教えていただいたWebページって win98 系統という気がして。 Windows NT/cmd で使えるエスケープシーケンスってなんでしょうね。
ちなみに
>>896 をWindowsXP、VC2008で走らせたらちゃんと色が付いたぞ
了解。gcc-3 -mno-cygwin で動作しました。多謝。 ただし gcc-4 では -mno-cygwin オプションそのものが打ち切られてしまったようです。どうすればいいんでしょうね。
cygwin使わずにMinGW使えよ・・・
別にcmdじゃなきゃダメな訳じゃないでしょ command使えばよくね
903 :
770 :2009/10/13(火) 23:54:05
>>902 んー、これはビックリ、command.com があったんですね。宿題出題者の実行環境をまって手をつけるか考えます。
誰か
>>896 を参考にしてエスケープシーケンスモドキのclassを
作ってやれよ
>>904 turboCだからcommand.comで実行することは問題ないと思うけど
907 :
デフォルトの名無しさん :2009/10/14(水) 10:35:04
908 :
デフォルトの名無しさん :2009/10/14(水) 13:57:31
>>908 だからLinuxじゃなくてTurbo C++だって
Windows NT コンソールだぞ
910 :
デフォルトの名無しさん :2009/10/14(水) 14:41:17
911 :
デフォルトの名無しさん :2009/10/14(水) 15:03:34
[1] 卒業研究 [2] ベジュ曲線を描く [3] 環境 [3.1] Windows [3.2] VC++6.0 [3.3] C++ [4] 今週末まで [5] 特になし よろしくお願いします
913 :
デフォルトの名無しさん :2009/10/14(水) 15:43:05
915 :
883 :2009/10/14(水) 17:43:51
何を記載すればいいのかわかないのですが。 色の付け方のことでしょうか? なら、setcolor()をつかい()の中に4を入れると赤15で白とかいてありました。 引き続きおねがいいたします。
918 :
916 :2009/10/14(水) 19:20:37
>>917 気に入らない訳じゃなくて、問題を全部書いて欲しいという意味なんだけど、おかしかった?
後付けされるのは面倒じゃん。
っていうかなんで
>>917 に説明してんだおれorz
>>918 問題文は全部書いてあるんじゃね?
ただ
>>883 だけじゃ同じ授業を受けてる人にしか解けないだろうけど
920 :
デフォルトの名無しさん :2009/10/14(水) 21:57:27
921 :
892 :2009/10/14(水) 22:01:39
>>915 多分 turbo c 独自の関数を使わなければならないんでしょうね。だから皆ひいてしまっているかもしれません。
うーん、困りましたね。
923 :
困ったさん :2009/10/14(水) 22:42:09
[1] 授業単元: プログラミング [2] 問題文:ナップサック問題のプログラムを利用し、グラフ彩色問題に当てはめる (色は4色で) [3.1] OS:Linux [3.2] コンパイラ名とバージョン: Linux内にある標準のコンパイラ [3.3] 言語:C++ [4] 期限:2009年10月16日まで [5] その他の制限:初心者なので、プログラミングするのに最低限必要な知識の範囲で教えて頂ければと 思います。 ※ナップサック問題のプログラムは次に書きます。
924 :
困ったさん :2009/10/14(水) 22:50:58
##include<stdio.h> #include <stdlib.h> #include <time.h> int main(void){ int i,n,z[60],r,za[60]; double a[60],b,c[60],suma,sumc,f,fz; FILE *fp; fp=fopen("knap_prob50_L.txt", "r"); fscanf(fp,"%d %lf",&n,&b); printf("n= %d b= %lf\n" ,n ,b); for(i=0; i<n; i++) { fscanf(fp,"%lf %lf",&a[i], &c[i]); printf("a[%d]=%lf c[%d]=%lf\n",i,a[i],i,c[i]); z[i]=rand() %2; printf("z[%d]=%d\n",i,z[i]); } suma=0; sumc=0; for(i=0; i<n; i++){ suma=suma+a[i]*z[i]; sumc=sumc+c[i]*z[i]; } if(suma>b){ f=sumc-0.5*(suma-b); }else { f=sumc; } printf("%lf\n",f);
925 :
困ったさん :2009/10/14(水) 22:55:14
924の続きです。 for(i=0; i<20; i++){ for(i=0; i<n; i++) { za[i]=z[i]; } r=rand()%n; za[r]=1-za[r]; suma=0; sumc=0; for(i=0; i<n; i++){ suma=suma+a[i]*za[r]; sumc=sumc+c[i]*za[r]; } if(suma>b){ fz=sumc-0.5*(suma-b); }else{ fz=sumc; } if(fz>f){ for(i=0; i<n; i++){ z[i]=za[i]; } f=fz; printf("%lf\n", f); } for(i=0; i<n; i++){ printf("%d\n" ,z[i]); } printf("%lf %lf\n",f,suma); }
926 :
770 :2009/10/14(水) 23:17:08
以前回答いただいた課題の発展課題です。よろしくお願いします。
以前の回答は
>>841 にあります。以前の問題文は
>>770 を参照してください。
ただし
>>770 の分類には全角英数が抜けています。
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク):
前回の課題の分類の結果「半角英数:XX字、半角カナ:XX字・・・」
という結果が得られたとき、その結果のファイルを読み込み
各分類からその結果の比率に合わせてランダムに文字列を出力する
プログラムを作成せよ。出力する文字数は解析に用いた文字の合計である。
(例えば半角英数が全体の60%だった場合、出力される文字列の中にランダムに半角英数文字が60%の割合で含まれることになる)
分類は以下の通りとする。
1.半角英数
2.半角カナ
3.半角記号
4.全角英数
5.全角かな
6.全角記号
7.漢字
[3] 環境
[3.1] OS:Windows XP
[3.2] Visual Studio 2008
[3.3] どちらでも可
[4] 期限: 2009年10月16日 正午迄
[5] その他の制限:
前回回答者の方が文字コード表としてJIS X 0208を
利用されていますので、それに沿っていただけると幸いです。
前回のような文字列のテキストファイルを読み込む入力部を作る必要はなく、
入力は「半角英数:XX字、半角カナ:XX字・・・」というものでよいそうです。
コード内にコメントで使用した文字コードを注釈として記載するようにとの連絡がありました。
それ以外は特にありません。
よろしくお願いいたします。
>>926 いや、もはやそれは自分でやれよ
全部を宿題スレで片付けようと酢んな
928 :
デフォルトの名無しさん :2009/10/14(水) 23:37:57
>>927 最近思ったんだが、宿題をピンからキリまで解いたら
中途半端ながらプログラミングができるはずだったやつが、
全くプログラミングできないやつになる。となると、
それはそれで少し平和な世界が作れそうな気がするんだ。
漏れは解かないけど。
宿題を丸投げしてコピペするような者のことなどを考えていたらこんなスレは存在できないんじゃないか。
ここにも理解力の低い者が
宿題スレに1問貼ろうが2問貼ろうが 他力本願になった時点で終わってるだろ
>>934 int main(void) と int main() とは同値である、という結論が以前でていました。
その話し出すと長ぇんだよなぁw
>>934 引数なしの関数を何か書くときに
int num(){
return 0+1;
}
int num(void){
return 0+1;
}
どっちが正しいの?
よそでやれ
>>934 ANSI以前との互換性のために、ANSI-Cではプロトタイプ宣言の時だけは引数にvoidを
明示しないとならないことになっている。
定義ではvoidの明示は不要。
C++ではプロトタイプ宣言でも関数定義でもvoidの明示は不要。
つまり、ANSI-Cで引数の無いmain関数のプロトタイプを書く場合だけは、引数の型を
voidとするのが正式。それ以外の場所は省略しても正式。
>>932 貼る側の将来を心配してたらこんなスレ存在できないだろと言ってるんだが。
よくわからないから全部書いてる
>>942 宿題丸投げ→プログラム書けないやつになる→業界に人が入ってこない→仕事が回ってくる→平和
もしくは、 未経験新人が入ってこない→教えなくてすむ→平和 できる気になってる新人が入ってこない→スパゲッティが生まれない→直さなくてよい→平和 など。
>>944 こっちのレスと少しずれてる気もするが、そっちはそっちで理解した。判断は微妙なので保留だが。
(業界に人が少ないと短期的には自分の仕事は増えるが、将来的にはどうかなどを考えると)
宿題丸投げ→このスレの活性化→この言語が活性であると(誤解?)する→学ぶ人が増える という流れもありそう。それにしてもなぜC/C++の宿題スレだけ活性なのかな?
>>947 宿題として出題される率が高いからじゃね?
>>947 習ってるヤツ多いんだろう。
習いはじめならjavaとかの方が簡単で、自分でやれるとか、GUI方面のやれるような宿題ばかりなのかも。
javaの宿題スレには今年まともな宿題がさっぱり集まらないが、そもそも、数理とか応用の宿題は見かけないし。
オレの通ってた経営情報学部、経営科と情報科に分かれていて、 最初に習う言語が、 経営→FORTRAN 情報→Pascal だったっけ。 もう、十年以上前の話だけど。
プログラミングに限らず、初級/中級/上級と銘打たれた世界では その順序で「進学」するのは最悪コースだったりすることが往々にして あるから要注意
以下をcygwinでコンパイルして実行すると変な数字の羅列が吐き出されてしまいます。 問題点等ありましたらご指摘ください。 #include <stdio.h> #include <stdlib.h> #define n 4 int main(void) { int k, l, l2, temp, a[n*(n-1)-1]; srand(time(NULL)); for(k=0; k<(n*(n-1))-1; k++) a[(n*(n-1))-1] = k; for(l=n-1; l>0; l--) { l2 = rand() / (RAND_MAX + 1.0) * (l + 1); temp = a[l2]; a[l2] = a[l]; a[l] = temp; } for(k=0; k<n*(n-1)-1; k++) printf("%d ", a[k]); return 0; }
>>952 > for(k=0; k<(n*(n-1))-1; k++) a[(n*(n-1))-1] = k;
意図が見えないが… a[] の添え字はこれで良いの?
※ a[k] = k じゃないの?
変な数字になるのは
>>953 の言うとおりだけど、シャッフルのところもおかしいぞ。
lがn-1からだと配列全体をシャッフルできない。
あ・・・そうですね。 直してみました。 しかしこれでも一つ変な数字がうまれてしまいます・・・。 というか、何故この変な数字がうまれるかが理解できない・・・。 #include <stdio.h> #include <stdlib.h> #define n 4 int main(void) { int k, l, l2, temp, a[n*(n-1)-1]; srand(time(NULL)); for(k=0; k<(n*(n-1))-1; k++) a[k] = k; for(l=n*(n-1)-1; l>0; l--) { l2 = rand() / (RAND_MAX + 1.0) * (l + 1); temp = a[l2]; a[l2] = a[l]; a[l] = temp; } for(k=0; k<n*(n-1)-1; k++) printf("%d ", a[k]); return 0; }
int a[n*(n-1)-1] は a[0] 〜 a[n*(n-1)-2] までしか器がない のに シャッフル部でいきなり a[l] → a[n*(n-1)-1] の配列外の他所の数字を操作しようとしてる
あー、だからよそから変な数字をひっぱってきてしまっていたんですね。 分かりやすい説明で馬鹿な脳ミソでも理解できました。早速直してみます。ありがとうございました。
なんで素直に>754の通りにしとかないんだw
959 :
770 :2009/10/15(木) 17:52:50
お気に障ったなら申し訳ございません
どなたか
>>926 の解答を何卒よろしくお願いいたします。
>>942 そうそう、単に楽しんでいるだけで、別に宿題貼る人のことなど考えておりません。
それ以前に770の一問目、文字コード表の対応間違ってないか 俺の勘違いかもしれないけど
964 :
デフォルトの名無しさん :2009/10/15(木) 23:48:05
age
966 :
965 :2009/10/16(金) 01:48:05
忘れておりましたがコードは Shift-JIS: JIS X 0208 です。
967 :
965 :2009/10/16(金) 06:57:43
ん、
>>965 はバグってますね。しばしお待ちを。
968 :
965 :2009/10/16(金) 07:15:02
勘違いしておりました。
>>965 は今のところ問題ないようです。
969 :
770 :2009/10/16(金) 13:37:36
>>965 様
ありがとうございます!動作確認後また連絡させていただきます。
970 :
770 :2009/10/16(金) 13:45:51
>>965 様
動作確認できました!本当にありがとうございました!
971 :
770 :2009/10/16(金) 14:22:38
お手数おかけして恐縮ですが、よろしければ簡単なプログラムの流れなど、 ご解説願えませんでしょうか?
>>971 ハ,,ハ
( ゚ω゚ ) お断りします
/ \
((⊂ ) ノ\つ))
(_⌒ヽ
ヽ ヘ }
ε≡Ξ ノノ `J
973 :
770 :2009/10/16(金) 14:40:15
>>972 了解しました。作成どうもありがとうございました。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): new と deleteを使ったプログラムの作成 人数、名前、点数を入力し、横棒グラフを表示するプログラムを作りなさい。 ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。 <実行画面> 人数 > 3 1人目の名前 > A 1人目の点数 > 80 2人目の名前 > B 2人目の点数 > 55 3人目の名前 > C 3人目の点数 > 95 名( 点 )| 50 100 --------+---------+---------+ A ( 80)|**************** B ( 55)|*********** C ( 95)|******************* 平均 77|*************** 以下の変数をmain関数内に定義し、new とdelete で動的にメモリを確保、解放する。 char* nameAr; // 名前の配列 名前は1文字(1バイト)とする int* markAr; // 点数の配列 int* barAr; // 棒グラフの長さの配列 [3] 環境 [3.1] OS:Windows XP [3.2] Visual Studio 2005 [3.3] 言語:C++ [4] 期限:2009/10/23 [5] その他の制限:特にありません よろしくお願い致します。
>>974 #include<iostream>
#include<iomanip>
using namespace std;
int main(void){
int num=0;
cout << "人数 > ";
cin >> num;
char *nameAr=new char[num];
int *markAr=new int[num], *barAr=new int[num];
for(int i=0;i<num;i++){
cout << i+1 << "人目の名前 > ";
cin >> nameAr[i];
cout << i+1 << "人目の点数 > ";
cin >> markAr[i];
barAr[i]=markAr[i]/5;
}
int sum=0;
cout << "名( 点 )|" << setw(10) << 50 << setw(10) << 100 << endl;
cout << setw(9) << setfill('-') << '+' << setw(10) << '+' << setw(10) << '+' << endl;
for(int i=0;i<num;i++){
cout << " " << nameAr[i] << "(" << setw(3) << setfill(' ') << markAr[i] << " )" << "|";
cout << setw(barAr[i]) << setfill('*') << "" << endl;
sum+=markAr[i];
}
int average=(sum*2+num)/num/2;
cout << "平均" << setw(4) << setfill(' ') << average << "|";
cout << setw(average/5) << setfill('*') << "" << endl;
delete [] nameAr;
delete [] markAr;
delete [] barAr;
}
976 :
デフォルトの名無しさん :2009/10/16(金) 19:37:57
ユーグリッドの互除法のプログラムを作っているんですが(C++) 1 入力をm0、n0(m0>=n0)とする 2 n0が0ならば、m0を出力して終了 3 m0がn0で割り切れればn0を出力して終了 4 m0をn0で割ったあまりをn1として、m1=n0とする。3に戻る 例 m0 48 n0 36 m1 36 n0 12 n1=12 #include <iostream> #include <cmath> using namespace std; int main() { までは行きますが… 出力→cout 入力→cinです
例の2行目、n0 12で合ってる?
>>976 #include<iostream>
using namespace std;
int main(void){
int m=48, n=36, t, i;
for(i=0;;i++)
{
cout << "m" << i << " " << m << " n" << i << " " << n << endl;
if(!(t=m%n)) break;
m=n;
n=t;
}
cout << "n" << i << "=" << n << endl;
}
979 :
976 :2009/10/16(金) 20:15:11
ごめんなさい。例の2行目、n0 12ではなくて n1 12です。
980 :
976 :2009/10/16(金) 20:17:24
今
>>978 でコンパイルをかけてみたら、
6行目構文エラー : ';' が ')' の前にありません。と出ました…
982 :
976 :2009/10/16(金) 21:22:02
とりあえず、コンパイルは通りましたが、 結果には n1=36 としか出てきません
おい・・・まさか、本当にコピペできない人か? 978見ながら1文字ずつ打ち込んでるんじゃないだろうな
そのコンパイルすらワーニング無視してるだろw
なるほど。セミコロン足りないからって for(i=0;i++;)にしちゃったのね
>>976 はプログラミングの最初歩からやり直せ・・・
>>986 widthとheightって画像ファイル自体の幅と高さってことでおk?
このスレで推奨してる ビルド環境セットってなんかないの?
ほぉ、コロンをコロッンと忘れてしまったのか
>>989 別になくね。
回答者は好きなやつでやるし、出題者は学校で指定されてるだろうし。
>>989 標準的なソースがコンパイル出来ればどれでも。
中にはバージョンやらサポートしていないものを
妙に毛嫌いする人もいるしね・・・Visual C++があればそれでも
構わないが。BCCを薦めると妙に噛み付く人がいるしw
あと使用しているOSにもよるし。UNIXなら標準搭載の
コンパイラを使えば良いしぃ〜。
993 :
デフォルトの名無しさん :2009/10/16(金) 22:35:07
[1] 授業単元:c言語 [2] 問題文 課題文1 文字を一文字入力して、文字コードが一個次の文字を表示するプログラムを作成せよ。 課題文2 文字を一文字入力して、入力文字が a-z の範囲のときのみ、次のアルファベットを表示すプログラムを作成せよ。 ただし、zを入力した場合は a を表示し、a-z以外の文字を入力した場合は入力した文字をそのまま表示すること。 例: aを入力 → b を出力 bを入力 → c を出力 zを入力 → a を出力 3を入力 → 3 を出力 $を入力 → $ を出力 Aを入力 → A を出力 課題文3 文字を一文字入力して、入力された文字が、英字の小文字であるか、英字の大文字であるか、数字であるか、それ以外の文字であるか判別して、判別結果を表示するプログラムを作成せよ。 [3] 環境 Windows, 言語:C++ [4] 期限:10/23 宜しくお願い致します。
>>988 そうです。答えるのに遅れて申し訳ない。。
>>976 #include <iostream>
using namespace std;
int main(){
int m=48, n=36, t, i;
while(m!=n)
{
cout << "m" << i << " " << m << " n" << i << " " << n << endl;
if(m>n) m-=n; else n-=m;
i++;
}
cout << "n" << i << "=" << n << endl;
}
996 :
976 :2009/10/16(金) 23:51:49
コピペしたら、そういう風に出てしまって
997 :
976 :2009/10/16(金) 23:57:51
今コンパイルかけたら出たんですが、様子がおかしかったんですかね。 ;;って2つ入れるのってOKなんですか?
>>997 べつにいい
>>993 あんまりよく読んでないけど
/// 1
#include <iostream>
int main()
{
char c;
while (1) {
std::cin >> c;
c += 1;
std::cout << c << std::endl;
}
return 0;
}
まもなくここは 乂1000取り合戦場乂 となります。 \∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,, /三√ ゚Д゚) / \____________ ,,、,、,,, /三/| ゚U゚|\ ,,、,、,,, ,,、,、,,, ,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/ //三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ∪ ∪ ( ) ( ) ( ) ) ,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ,,、,、,,, ( ) ( ) ( ) ( )
>>993 /// 2
#include <iostream>
int main()
{
char c;
while (1) {
std::cin >> c;
if ('a' <= c && c <= 'y') c += 1;
else if ('z' == c) c = 'a';
std::cout << c << std::endl;
}
return 0;
}
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。