1 :
デフォルトの名無しさん :
2010/10/13(水) 23:03:19
前スレの991へ int combi(int n, int k) { int answer, i, j; if (i < 30) { answer = 1; これコンパイルしたら「初期化されてない i が使用されます」って警告されたぞ 確かにバグっていると思わないか?
1: 1 2: 2 3: 3 4: 6 〜途中省略〜 31: 300540195 32: 601080390 33: 1166803110 34: -1961361076 35: 481209656 36: 962419312 こんな感じで i==34 になったらオーバーフローしてるな 続行するには何かキーを押してください . . .
__int64使えばいいんじゃね?
それ、33は合ってるし34の答えはオーバーフローしない値だし偶数の時は1つ前の値を2倍してるだけなのに なぜ狂うんでしょうか
intMaxが 2147483647 C(34,17)は 2333606220 だからこれでいいんじゃね あと全部再帰で書いたほうがきれいだと思う。
これだと i == 66 まで行ける long long combi(long long n, long long k) { long long answer, i, j; if (n < 30) { answer = 1; for (i = n, j = 1; i >= n - k + 1; i--, j++) { answer *= i; answer /= j; } return answer; } else if (n % 2) { return combi(n - 1, (n - 1) / 2) / (n / 2 + 1) * n; } else { return combi(n - 1, (n - 1) / 2) * 2; } } int main(void) { int i; for (i = 1; i < 100; i++) { printf("%d: %lld\n", i, combi(static_cast<long long>(i), static_cast<long long>(i / 2))); } return 0; }
intしかだめらしいぞ
なぬー多倍長ライブラリも使っちゃだめなのか
別にintがオーバーフローすればいいなら もうこれでいいだろ
>>8 そうでしたか
int型は2^32(?)までおkみたいな話を聞いたようなきがしてて
勘違いでした
>>13 > int answer, i, j;
これは不要だね
どちらにしろ i == 33 までしか計算できないようだ
カレンダー算出の課題まだー?
>>15 2^31だろ
2^32まで行けるのはunsigned
誰かカーマイケル数求めるプログラム書いてよ
口頭で説明されたものを書くので分かりづらかったらごめんなさい 【質問テンプレ】 [1] 授業単元:プログラミングU [2] 問題文(含コード&リンク): 5種類の通貨(a,b,c,d,e)が存在する 最初に幾らかのお金を渡されるそのお金はa,b,c,d,e以外にも aとしてもbとしても使えるものbとしてもdとしても使えるものなどがある そのお金を持って商品を買うが商品には特定の通貨しか使えない ただし、a,bどちらでも払える商品やb,dどちらでも払える商品もある それらの商品の合計が渡されるのでソレを手持ちのお金で変えるかどうかを答えよ 合計は配列p[15]として辞書順で与えられる(例えばaで払えるものp[0]bとcで払えるものはp[7]) ex)p={3,2,0,0,0,0,2,0,0,0,0,0,0,0,0} だとa=3,ab=2,bc=2なので 手持ちが{5,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0} a=5,b=2ならはらえる [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC++2010 [3.3] 言語: C++ [4] 期限: 来週の金曜まで [5] その他の制限: 考え方だけ教えてもらえれば頑張ります。
>>22 すごい読むのに苦労したw
えーとpと手持ちの額を受け取ってboolを返す関数を考えればいいのかな
あと配列の大きさ的にa,b,cで使えるお金とa,b,cでを使える商品はないんだよね?
なんか力づくでループ回せばイケそうだけど
>>23 >すごい読むのに苦労したw
すんません;;pdfとか置いといてくれればいいんですがなぜか毎回口頭なんですよね
>えーとpと手持ちの額を受け取ってboolを返す関数を考えればいいのかな
>あと配列の大きさ的にa,b,cで使えるお金とa,b,cでを使える商品はないんだよね?
多分そうだと思います
>なんか力づくでループ回せばイケそうだけど
もうちょっとヒントくれませんか、力ずくでも何でも解きたいので
辞書順の並びってループまわすのもやっかいだな
あーなんかめんどくさそうだな 今必要十分条件べた書きしようとしたら多すぎて秋田
完全数を求める課題もこいやー!
>>22 って
与えられた合計から払える手持ちの組み合わせを全て出せってことじゃなくて
合計と手持ちが与えられて
その手持ちで払いきれるかどうかを出せば良いんだよね
>>22 a, ab, ac, ad, ae, b, bc, bd, be, c, cd, ce, d, de, e
なら bc は p[6] なんだが問題文の書き間違い?
>>29 ex)を見ればp[6]のミスだってことはわかるだろ
所持金が {0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} ab=100 商品が {0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0} bc=100 であるとき支払いは可能?不可能?
可能だろ
33 :
デフォルトの名無しさん :2010/10/14(木) 14:26:27
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): このビット演算子のプログラムが何をしているのか1行ごとにコメントをつけてください。 お願いします。 int main() { int i, d; d=0; while(1) { printf("Input number "); scanf("%d", &d); if(d == 0){break;} if(d > 8 || d < -8) printf("error\n"); else if(d > 0) i=i|1 << d - 1; else i &= ~(1 << -d - 1); printf("%d%d%d%d%d%d%d%d\n",i>> 7&1,i>> 6&1,i>> 5&1,i>> 4&1,i>> 3&1,i>> 2&1,i>> 1&1,i&1); } return 0; } [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限:とくになし [5] その他の制限:
本当に宿題なのか
断る。
前スレの回答をそのまま提出したけど、説明してみろって言われて困ったってオチ?
37 :
デフォルトの名無しさん :2010/10/14(木) 15:50:29
日の丸の国旗を表示するプログラムを教えてください。
#include<stdio.h> int main(void) { printf("日の丸の国旗"); return 0; }
39 :
デフォルトの名無しさん :2010/10/14(木) 15:59:36
>38 日の丸の画像です
#include<stdio.h> int main(void) { printf("日の丸の画像"); return 0; }
>>40 ちがいます
日の丸の絵を表示してほしいんです
マルチかよ
#include<stdio.h> int main(void) { printf("日の丸の絵"); return 0; }
もういいです あなたたちの国語力の無さには呆れてものが言えません 一生パソコンと戯れててください
>>44 そもそもあなたに国語力がないから、スレチでこうなっていると気づけよ。
#include<stdio.h> int main(void) { printf("┌───┐\n│ ● │\n└───┘"); return 0; } こういうことじゃね?
>>44 環境は?
せめて Windows XP とか Max OS X とか X Window とかくらいはいってくれないと、プログラムの書きようもないですよ。
printf("hinomaru.jpg"); って出来るとすばらしい。
じゃあ、こうだ ただしWindows専用 #include <stdio.h> #include <stdlib.h> int main ( void ){ system ( "MSPAINT.EXE hinomaru.jpg" ) ; return 0 ; }
FORMAT.EXEの方がいいかも
Windows限定、関連付け期待で #include <stdio.h> int main() { system("start hinomaru.jpg"); return 0; }
>>51 system は stdlib.h じゃなかったっけ。
>>52 そうでした。
#include <stdio.h>
#include <stdlib.h> <-追加
int main()
{
system("start hinomaru.jpg");
return 0;
}
54 :
デフォルトの名無しさん :2010/10/14(木) 23:50:09
>>33 変数 i が初期化されないで使われているけど、そもそもそのプログラムは正しいの?
d =0; じゃなくて i = 0; じゃないかな。
55 :
デフォルトの名無しさん :2010/10/15(金) 00:35:38
前の所の477です。 遅くなってしまったんですが、 1 1 2 3 5… みたいな感じになって続くらしいんですが。
56 :
55 :2010/10/15(金) 00:36:59
フィボナッチ数列ってものらしいです。
477 名前:デフォルトの名無しさん[] 投稿日:2010/09/29(水) 23:57:43 [1] 授業単元: プログラム [2] 問題文(含コード&リンク): an=a[n-1]+a[n-2]で、nを与えた時a[n]を求める。Σ[n-2,i=1]aiとanの比較をせよ。Σ[n-1,i=1]ai^2とa[n-1]*anの比較をせよ [3] 環境 [3.1] OS:Linux [3.3] 言語: C++ [4] 期限: 2010年10月1日まで [5] その他の制限: なるべく難しくしないでお願いします。 #include<iostream> using namespace std; int main() { で始めてください。 そして、 rerurn 0; } を入れてください
無駄な計算多すぎで笑えるw
一つのnだけじゃ比較の意味が読み取れないような結果が問題ないと思えるのか? 明確に間違ってる箇所があるぞw
>>22 を解こうとしたら計算が終わりそうにない
(商品の価格がものすごく安い場合なら解けないことも無いけど)
解けた人はどうやって解いた?
>>57 #include <iostream>
using namespace std;
int main()
{
int *a, i, n, s;
cin >> n;
a = new int[n];
for(a[0] = a[1] = 1, i = 2; i < n; i++) a[i] = a[i - 1] + a[i - 2];
for(i = s = 0; i < n - 2; i++) s += a[i];
cout << "Σ[" << n - 2 << ",i = 1]ai = " << s << ", a[" << n << "] = " << a[n - 1] << endl;
for(i = s = 0; i < n - 1; i++) s += a[i] * a[i];
cout << "Σ[" << n - 1<< ",i = 1]ai^2 = " << s << ", a[" << n - 1 << "] * a[" << n << "] = " << a[n - 1] * a[n - 2] << endl;
delete [] a;
}
a[n] - Σ[n-2,i=1]ai = a[2]
>>65 0からにしようが、1からにしようが
>>58 がゴミ以下なのはかわらないんだけどw
フィボナッチに再帰使ってる時点で死ねって感じw
確かに、ある値以上になると急激に遅くなるしな・・・
>>69 値が0だから問題ないとも言えますが、fibo(0)を足すのは問題の指定からはずれます
[1] 授業単元:C言語基礎実習 [2] 問題文(含コード&リンク):0未満の数が入力されるまで 入力を求め、その入力した回数と入力した数値の合計値を表示するプログラムを作成しなさい。 なお、0未満の数は回数と合計値に含めないものとする。 [3] 環境 [3.1] OS:Windows Vista Basic 32bit [3.2] コンパイラ名とバージョン:Visual Studio 2010 [3.3] 言語:C言語 [4] 期限:2010年10月18日正午まで [5] その他の制限:特にありません
カレンダー出力、リストの問題こいやー
75 :
73 :2010/10/15(金) 06:47:12
訂正です。0未満だけではなく1000以上も範囲外です
#include <stdio.h> int main(void) { int i, sum, n; for(i = sum = 0; ; i++) { scanf("%d", &n); if(n < 0 || 1000 <= n) break; sum += n; } printf("入力した回数:%d 合計値%d\n", i, sum); return 0; }
[1] 授業単元:C言語基礎実習 [2] 問題文(含コード&リンク):入力された数値を逆順に表示せよ。 なお、この動作は0未満の値が入力されるまで 繰り返すものとする。 [3] 環境 [3.1] OS:Windows Vista Basic 32bit [3.2] コンパイラ名とバージョン:Visual Studio 2010 [3.3] 言語:C言語 [4] 期限:2010年10月18日正午まで [5] その他の制限:特にありません
81 :
78 :2010/10/15(金) 08:22:47
82 :
81 :2010/10/15(金) 08:32:26
名前間違えました。 78ではなく79です。
int main() 笑
>>83 何度も繰り返して申し上げておりますが、int main() { ... } はISO/IEC 9899:1999 に適合しています。
void main(void)
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 例の関数int strlength(char s[])を、文字数を返すだけでなく、文字列の 先頭がアルファベットの小文字の場合は大文字に変更して返すように変更せよ。 ヒント:以下の2行をどこかに書き加える。 if ('a' <= s[0] && s[0] <= 'z') s[0] = s[0] + 'A' - 'a'; [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2010年10月18日まで よろしくお願いします。
>>86 の例
#include <stdio.h>
#define SIZE 10
int strlength( char s[] )
{
int len = 0;
while( s[len] != '\0' )
len++;
return len;
}
int main(void)
{
char str[SIZE];
printf("%d文字以下の文字列を入力してください: ", SIZE-1); /* 入力 */
scanf("%s", str); /* 入力 */
printf("入力された文字列: %s\n", str);
printf("文字列の長さは%dです。 \n", strlength( str )); /* 関数の呼び出し */
}
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
例
>>87 において、main関数中の/* 入力 */とコメントした2行を関数として
独立させたvoid strinput( char *s )を作成して、main関数から呼び出すように変更せよ。
アドレス渡しとなっていることを確認せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年10月18日まで
よろしくお願いします。
89 :
55 :2010/10/15(金) 22:49:01
>>77 2,0,1,1,1
って最初の所で出てるんですが、これって、
1,1,2,3,5って感じになるんじゃないんですか?
2,0の次は、2と0と足した2なはずですよね?
>>84 そういう意味ではないんだが?しかもC言語における
ISOの文章を理解していないのがバレてますよ?w
>>80 #include <stdio.h>
int main() 笑
voin maid(voin)
素直に吐いちまえよ、面倒くさいからvoidを忘れちゃったって。 voidさん、ごめんなさいって。
人間、正直が一番だぜ?自分の不手際を必死に訴えても認められない。 まぁ、独自の環境ならISO準拠でなくても良いのに、ISO準拠でもないことを 無理やり準拠と言うのは認められないぜ?いつお前が基準になったんだって?
>>86 #include <stdio.h>
#include <string.h>
int strlength( char s[] )
{
if ('a' <= s[0] && s[0] <= 'z')
s[0] = s[0] + 'A' - 'a';
return (int)strlen(s);
}
int main() = int main(...)
こう書けば
>>84 みたいなのでもわかるんでない?
[3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C この場合のお前らの解釈はどうなん? 俺的には Linuxのgcc(バージョン?)のCでお願いと解釈で GCCの独自拡張も使ってOKと判断(つまりISOじゃなくGCCのCでと) で、Linux、コンパイラ等の指定無で言語CだけならISOのCでと判断
ここで質問するような輩にそんな差異が求められる宿題が出るわけなかろう Cと書かれてれば入門書にでてくるような初歩の標準Cでいいだろう
>>97 GCC拡張を使わなくても書ける問題がほとんどだから、
大抵ISO準拠になるんじゃないかな。
>>84 の言うようにC99ならint main()でもいいだろうが
あえてそうする意味がわからん
livionのポイントシステムって完全自作?
誤爆です
引っ込みがつかなくなってC99ってことにして押し通してるだけだろw
無駄な知識を披露するためだけに特殊なことをしたり 他人の回答に難癖つけたりするのは良くない癖だね 誰とは言わんが
ほんと、まともに反論しないint main() 笑 厨は必死すぎ。 ISOの文章を読んでないのがバレバレ。誰とは言わないが。
あれだけ標準スタイルでは、独自の環境ではそれに限らず と補足してるのに、自分は標準スタイルに従っていると 問題は無いとか言う奴は、やっぱり物事の基準、基本、根本が 分かってないと思う。そんな考えだから通用しないんだよ、世の中では。 世の中ね、自分が思っている程、単純じゃないんだわ。 自分がそれを求めていたとしても、他人が何をどう求めているか? まで読めないようじゃ、客相手の商売は出来んよ。
>>57 an[3] = 34,
an[2] = 33,
an[1] = 1;
an[3] = 34,
an[2] = 32,
an[1] = 2;
......
an > 0 であるとしてもa[4]は
35から67までの33通り考えられる
ごめん。 a[4] ではなくて an[4]
何を言ってるのかわからない
>>109 an[0]から始めなかったのはまずかった。
an[0] = 0,an[1] = 1,の前提が
ないと不定になるのではないかと。
int main() main() int main(void) void main() どれが正しいんだよ
黙れ乞食
>>107 a[3]の34ってどっからでてきたの?
>>114 1,1,2,3,5,8,13,21,34
34 の 前が 21 13 であると というのは思い込みではないか? という意味で。
34 を an[8] にしなかったのは失敗でしたw
>>117 an[8] にすると逆にフィボナッチ数列に限定されるのではないかな。
a[1]とa[2]が固定されてないのが問題だって言ってるのに、 なんでa[3]が固定されてるの?
an[1],an[2],an[3] や an[8]の問題ではなくて、 an[n]=34,an[n-1]=33,an[n-2]=1 ; an[n]=34,an[n-1]=32,an[n-2]=2 ; ... とすればよかったということですね。
なんでそんなに34に拘るの?
>>89 >>77 の結果は、n = 2 から表示しており、各列の
一つめは n
以下、Σai, an, Σ(ai^2), a(n-1)*a(n)
となっています。
三つ目の数字がフィボナッチ数列になってることを確認いただけると考えております。
>>105 C99 では、main 関数の書き方について
int main(void)
int main(int argc, char *argv[]) もしくはこれと同義の定義
処理系依存の main 定義(コンパイラ実装依存)
って書いてあるだけだよ。
一方 int main() は、
>>96 の言う通り int main(...) 。
つまり、上記定義からコンパイラが許容しているだけで、
C99 準拠のコンパイラで必ずコンパイルできる保証はない。
C++ では確かに int main() は int main(void) と同義だけど、
これと混同してない?
>>123 いいえ。
ISO/IEC 9899:1999 5.1.2.2.1 の "or equivalent" という文言に ISO/IEC 9899:1999 の 6.7.5.3 14 を適用すれば、
int main() { ... }
が C99 に準拠していることがわかります。
日本語すらまともに読めないのに英語がちゃんと読めてるとは思えないw
>>123 失礼。かきなおします。
「これと同義」というものの対象は int main(int, char *[]) だけではなくて int main(void) もふくまれているのではないでしょうか?
原文のコンマの位置からそう考えられるのですが。
>>126 だから、int main(void) != int main() って書いたでしょ。
下のプログラムをコンパイルしてみな。
void foo() {
}
void bar(void) {
}
int main(int argc, char **argv) {
foo(0);
bar(0);
}
「C」のコンパイラなら、main 関数の foo は通るけど、bar は通らないから。
「C++」のコンパイラなら、foo も通らないけど。
"or equivalent"の解釈がおかしいw int main(int argc, char *argv[])とint main()はequivalentじゃないしw
確認しないで書き込んだから、main の最後に return 0; を書き忘れたのは謝ります。
>>127 それはコンパイラが C99 になっていないようですね。コンパイラの種類を教えてください。
ISO/IEC 9899:1999 6.7.5.3 14 により、
関数定義の一部である宣言で引数が空リストの場合は、引数は void と同じとされています。ご確認ください。
main() が関数定義の一部となっている(普通そうですね。)かぎり、
int main() と int main(void) は同じだし、普通の関数でも
int func() {...} と int func(void) {...} は C99 では同じです。
>>129 int main() の問題は瑣末なことだとは思いますが、それでも議論に参加くださり感謝しております。
必死だな
C99は明確な指定がない限り使うべきじゃないと思うけどね
C89 ならばなおのこと、仮引数を省略した int func() { ... ] は合法だと思うのですが。
このスレの環境指定無の時の標準 C言語はC99 C++言語はC++0x + boostライブラリ のこと そして、言語C++指定の場合はC言語ぽさを極力排除する (STL,Boost,C++で追加された機能を極力使う) 覚えとくように
>>136 C++0x や boost の規格を確認したいので、ISO のポインタを教えてください。
break文てループをひとつ抜けるんですよね for () { if () { if () { break; } a } b } c この時breakした後ってbの位置に行くんですよね
間違いました cですよね
>136 C89にこだわってはダメなのか C++が0xなんだから、Cも1xでいいじゃないかと思ったり boostのバージョンはいくつだよと思ったり
>>139 そうです。if のネストは関係なく、for() の構文を抜けたところにとびます。
>>93 ヘミ猫 void に謝るのか?それはゴメンだ。
144 :
55 :2010/10/16(土) 19:01:54
>>122 あ、縦に見るんですね。
どうして、1つ目は2から始まってるんですか?
あと、2つ目って0,1,2,4,7ときてますが、どういう規則でしょうか?
145 :
55 :2010/10/16(土) 19:10:55
>>122 すみません。あと、4つ目と5つ目って全く同じ結果になってるんですが、2ついるんでしょうか
>>57 >>144 >どうして、1つ目は2から始まってるんですか?
問題では、Σ[n-2,i=1]ai を求めることになっているので、n = 0, n = 1 は省きました。
>0,1,2,4,7ときてますが、どういう規則でしょうか?
わかりません。計算してみただけです。
>4つ目と5つ目って全く同じ結果になってるんですが、2ついるんでしょうか
二つの計算方法はそれぞれ違います。同一の値になった理由はわかりません。
147 :
55 :2010/10/16(土) 19:23:16
この時代になってもまだ int main() 笑
フィボナッチなんだから当たり前w a[n-1] * a[n] = a[n-1] * (a[n-1] + a[n-2]) = a[n-1]^2 + a[n-1]*a[n-2] = a[n-1]^2 + a[n-2]^2 + ...+ a[1][1] + a[1][0] = Σ[n-1,i=1]ai^2 + 0 = Σ[n-1,i=1]ai^2
a[n] が a[n-1] + a[n-2] だからな・・・ 式の変形で混乱したか?
151 :
まったくの初心者 :2010/10/16(土) 22:17:19
次のような宿題が出たのですが、まったく分かりません。 ぜひ教えてください。お願いします。 • void concat(struct node *p, struct node *q) ノード*p以降のリストの後に,ノード*q以降のリストを連結 する関数 • int length(struct node *p) ノード*p以降のリストの長さを返す関数
>>148 ならこの時代ならどうするというのですか?
153 :
デフォルトの名無しさん :2010/10/16(土) 22:31:58
>>151 void concat(struct node *p, struct node *q)
{
if( !p || !q ) return;
while( p->next ) p = p->next;
p->next = q;
}
int length(struct node *p)
{
int ret = 1;
if( !p ) return 0;
while( p->next ) ret++;
return ret;
}
struct node が示されてないから想像で書いてみた
154 :
まったくの初心者 :2010/10/16(土) 22:50:18
>>153 ありがとうございます。
あとすいませんがこれも分からないので教えてください。
int biesearch(int x, int v[], int n)
{
int p, q, m;
p = 0;
q = n - 1;
while(p <= q)[
m = (p + q)/2;
if(x < v[m])
q = m - 1;
else if(x > v[m])
p = m + 1;
else
return m;
}
return -1;
}
これをループを使用せず、関数の再帰呼び出しを使い、また外部変数
での値の受け渡しをしないという条件で作りなおさなければいけません。
>>152 >>148 じゃないが、この時代のC++では
static void Main()
になっている。
あるいは java か‥‥これは String[] が引数ですね。まあ、C# も Java も今の時代の c++ といわれればそうなのかもしれませんね。
>>130 関数に引数がないということと、
関数呼び出し時に引数の型や数のチェックが行われるかどうかは別だよ。
foo() は、Declarators の Syntax から空の identifier-list を持つ関数と解釈される。
この場合は、関数呼び出し時に仮引数と実引数の数が一致しない場合は呼び出し自体は有効だが、動作不定。
一方、foo(void) は、void が declaration-specifiers となる関数と解釈される。
この場合は、関数呼び出し時に厳密に引数の型や数がチェックされる。
よって、
>>127 のコンパイラは正しく動作しているし、foo() != foo(void)。
main の件もスタートアップルーチンからの呼び出しだから、
型や数のチェックが行われていないだけじゃないかな。
だから、スタートアップルーチンから引数を渡されたら動作不定でしょ。
>156 うーん、あれだな 連結(concat)した後にqの長さはどうするべきか a) p以降のどっかのノードを指しているのでそのまま放置 b) 連結されたんだからqはNULLにすべきで長さは0 全削除(delete)した後にqを利用するとどうなる a) NULLアクセスを許すので落ちる b) qは連結させたときにNULLになっているので正常終了 両方b)になってほしい気もしないでない あああああ、明日ネットワークあるのに
>>159 C99では、
ISO/IEC 9899:1999 6.7.5.3 14
An identifier list declares only the identifiers of the parameters of the function. An empty
list in a function declarator that is part of a definition of that function specifies that the
function has no parameters. The empty list in a function declarator that is not part of a
definition of that function specifies that no information about the number or types of the
parameters is suppllied
という風に、関数の定義を伴うときの宣言と、関数定義を伴わないときの宣言で、扱いが違います。
今は int main() { ... } がC99 に準拠しているかどうかが問題になっていますので、
関数定義を伴うときの宣言について考えると、この場合は int func(void) と int func() はまったく同じ no parameters の意味になっています。
>>127 の foo(), bar(void) はどちらも関数の定義を伴う関数の宣言ですから、C99 で考える限り foo() は foo(void) と一緒です。
>>160 たしかに concat(p, q) としたあとの q の扱いは問題ですね。
void concat(struct node **p, struct node **q) だったら、もしかするとその点もうまく書けるのかもしれませんが、どうなるのでしょう。
>>160 普通の感覚だと、b) もおかしい。
concat は、p の最後に q の内容がコピーで追加され、q 自体はコピー元のオリジナルのまま。
p が delete されてもオリジナルの q は変化しない。
<160 >162 **で書けますが、簡潔さに欠けるので、僕ならさらに構造体で覆うようにします >163 説明が悪かったのかな 現状はa)なので、b)のようにした方が素直な設計でより安全だよねって しかし、今さら設計変えるの大変(になるかもしれない)だから妥協できるところは妥協してもいいよねと 現状のまま、安全にするなら concat p, q q = nil delete p concatしたらnilってもう使うなで済む
>>161 >>159 はコンパイル時に呼び出し側での引数チェックがされるかどうかの話をしているのに、
何故 no parameters にこだわってるの?
>>164 >>163 が正しいだろ。
そこに書いてあることを実現するためには、
struct node の double pointer が必要なので、
concat などの引数リストが変わるけどいいの。
>>165 関数定義を伴う関数宣言である以上
>>127 の foo() の場合であっても foo(void) になります。
>>127 の場合 foo() イコール foo(void) です。
コンパイル時に引数のチェックを行って、エラーとするコンパイラがあってもおかしくないと思います。
>>167 コンパイラがあってもおかしくないって、それって「実装依存」ってこと?
もしくは、C99完全準拠のコンパイラを持ってないので確認できないということ?
君の解釈どおりなら、C99を満たすコンパイラはすべてエラーと判定しないと矛盾じゃない?
>>165 失礼しました。
>>167 は取り消します。
>>165 の事実を調べたいと思いますので、もしよければ C99 の該当場所を教えてください。
170 :
153 :2010/10/17(日) 00:01:46
>>154 >>153 で正しいのか?node が双方向リンクだったりはしないのか?まぁ知らんけど
>>154 はバイナリサーチだが、再帰で書くためには関数のインターフェイスを変える必要が有る
よって、再帰用に下請け関数を書いて対応した
int BSFunc( int x, int v[], int b, int e )
{
int m;
if( b == e ) {
if( x == v[b] ) return b;
else return -1;
}
m = ( b + e ) / 2;
if( x == v[m] ) return m;
if( x < v[m] )
return BSFunc( x, v, b, m - 1 );
else
return BSFunc( x, v, m + 1, e );
}
int biesearch(int x, int v[], int n)
{
if( !v || n <= 0 ) return -1;
return BSFunc( x, v, 0, n-1 );
}
171 :
まったくの初心者 :2010/10/17(日) 00:19:21
151で質問した次の質問 • void concat(struct node *p, struct node *q) ノード*p以降のリストの後に,ノード*q以降のリストを連結 する関数 • int length(struct node *p) ノード*p以降のリストの長さを返す関数 できたらこれらをそれぞれ別々に書いてくれるとうれしいです。
172 :
まったくの初心者 :2010/10/17(日) 00:20:54
154の問題ですができたら実行できるように mainの中身もお願いします。
>>152 最近、出版された書物を見ても分かる通り
統一され始めているよ。今時void mainは書かれてないね。
>>172 #include <stdio.h>
>> ここに
>>170 を差し込め
int main( void )
{
int x, n, ret;
int v[] = { 1, 3, 4, 8, 11, 13, 16, 22 }; // 昇順になってればどんな数値が入っていても何個要素が有っても良い
n = sizeof( v ) / sizeof ( int );
printf( "検索対象の数字を入力:" );
scanf( "%d", &x );
ret = biesearch( x, v, n );
if( ret < 0 ) printf( "入力された数字はリストに有りません\n" );
else printf( "入力された数字はリストの %d 番目に有ります\n", ret + 1 );
return 0;
}
動作確認してないよ
しかし、main() くらい自分で書けんで大丈夫か?
>>169 そのものズバリはまだ見つかってないけど、6.7.6 3 の (f) と (g) の記述で
with no parameter "specification" と、with no parameters
という違いはあるね。
specification なしの場合は 6.5.2.2 6 に該当するのかな。
英語苦手で正しく読み取れてないかもだが。
176 :
55 :2010/10/17(日) 02:23:51
177 :
まったくの初心者 :2010/10/17(日) 19:35:31
>>174 実行してみたのですが、リストに検索する数字がなかった場合ー1を返さなけれ
ばいけないのですが、−1と出ません。
どこをどのように変えればいいですか?
178 :
174 :2010/10/17(日) 20:11:32
>>177 バグってるかと思って動作確認しちまったじゃねぇか...
そこまでレベル低いと相手する気が失せるわ、ソース読め
>>170 「再帰で書くためには関数のインターフェイスを変える必要が有る 」は嘘だよ。
x が見つけたい値、v が要素のリストの先頭、n が要素数なんだから、
v と n を再起呼び出しのときに適切な値に変えるだけじゃない?
int biesearch(int x, int v[], int n) { int c, ret; if(n<0) return -1; c=n/2; if(v[c]==x) return c; if(v[c]<x) { ret=biesearch(x, &v[c+1], n-(c+1)); if(ret>=0) ret+=c+1; } else { ret=biesearch(x, &v[0], c-1); } return ret; }
>>178 >>177 はレベルをはるかに超えるレベルを扱っているって感じだね
printfの簡単な使い方すら分らないのにバイナリサーチや再帰って凄いな
>>179 言葉だとどうすべきと言っているのかよく分らん
コードをさらしたほうが分りやすいと思う
>>180 の訂正
int biesearch(int x, int v[], int n)
{
int c, ret;
if(n<=0) return -1;
c=n/2;
if(v[c]==x) return c;
if(v[c]<x)
{
ret=biesearch(x, &v[c+1], n-(c+1));
if(ret>=0) ret+=c+1;
}
else
{
ret=biesearch(x, &v[0], c);
}
return ret;
}
>>181 残念。分かる人いたね。
自分のレベルの低さを露呈したかったの?
>>183 おれ、
>>154 のコードだけではバイナリサーチってのも分らんかったよ
関数名biesearchでバイナリサーチのコード分った、orz
コード作成じゃなく示されたコードからアルゴリズム答えよとかの宿題出ると面白いかも
185 :
デフォルトの名無しさん :2010/10/17(日) 20:58:30
>>179 確かにそっちの方がエレガントだな、v のオフセットを変更するアイディアが浮かばんかったよ
でもね、戻り値のオフセット加算の分遅くなるんじゃね....と負け惜しみを言ってみる
186 :
デフォルトの名無しさん :2010/10/17(日) 21:08:17
>>181 単に
>>177 がサボりすぎて何も覚えて無いだけだと思うよ
大学で単位の為だけに履修してるなら良いけど、専門学校とかだったら大変だ
こんなのがプログラマとして世に出たらどうなる事か....
新人研修でちゃんとやるから問題ない やらないとこはブラック
188 :
デフォルトの名無しさん :2010/10/17(日) 21:51:22
できないやつはどこにでもいる
新人研修でやらないとこはブラックって言ってるけど それがブラックの定義ならブラックのほうが企業数遥かに多いよな
190 :
まったくの初心者 :2010/10/17(日) 22:14:53
次のプログラムを作ってください。 お願いします。 • int length(struct node *p) ノード*p以降のリストの長さを返す関数
int len = 0; struct node *temp = p; while(temp!=NULL){ len++; temp = temp->next; } return len;
192 :
デフォルトの名無しさん :2010/10/17(日) 22:27:46
次のもお願いします • void concat(struct node *p, struct node *q) ノード*p以降のリストの後に,ノード*q以降のリストを連結 する関数
struct node *temp = p; while(temp->next != NULL){ temp = temp->next; } temp->next = q;
麻呂の肛門、封鎖されました!クソースが漏れません ><;
>>185 そもそもループのプログラムを再帰にしろって言ってる時点で、
プログラムの実行速度遅くなるんだから、問題ないでしょ。
なんか教科書に乗ってる感じじゃないのが解きたいのー
197 :
デフォルトの名無しさん :2010/10/17(日) 23:19:51
int main(void) { return 0; }
>>197 >>1 に書いてあることをちゃんと読んだ?
問題付け足しになってると気づいてないの?
>>95 できれば#include <string.h>と書かない方法を教えていただきたいです。
あとどなたか
>>88 をよろしくお願いします。
>>201 こんな感じ?
#include <stdio.h>
#define SIZE 10
int strlength( char s[] )
{
int len = 0;
if ('a' <= s[0] && s[0] <= 'z')
s[0] = s[0] + 'A' - 'a';
while( s[len] != '\0' )
len++;
return len;
}
void strinput( char *s )
{
printf("%d文字以下の文字列を入力してください: ", SIZE-1); /* 入力 */
scanf("%s", s); /* 入力 */
}
int main(void)
{
char str[SIZE];
strinput(str);
printf("入力された文字列: %s\n", str);
printf("文字列の長さは%dです。 \n", strlength( str )); /* 関数の呼び出し */
printf("変換された文字列: %s\n", str);
}
>>203 return 0;
がないような課題は零点課題ですよ、回答してはだめよ
先ず、ひどい課題だから作り直せって先生に言うべきです
別に return 0; とは限らんよ。return int型; でおk なぜなら、int main だから。
206 :
デフォルトの名無しさん :2010/10/18(月) 00:50:07
正常終了した場合0を返すのはマナーです
勝手に正常と異常を自分で決めてどうすんだ? mainがシステムに返す値だから関係ないよ。
208 :
デフォルトの名無しさん :2010/10/18(月) 01:40:43
>>207 ごめん、一行目は何言ってるか判らないや
二行めを言うなら返さなくても良いじゃんって話になるよ、何返しても良いとかいうなら返さなくて不定値になっても同じでしょ
基本何を返してもいい ただ、別プログラムやシェルが戻り値を利用する場合もあるわけで 受け取り側の都合の良い値を返せばいいんだよ 慣例的に0を成功とすることが多いだけでマナーとか規格とか関係ないような
int func() に於いて、正常終了なら0を返さなければいけないというルールはありません。 どこで学んだ間違いですか?関数の戻り値について調べて下さいね。
世の中、自分が思っている程、単純ではない。 道路交通法に於いて、青信号なら通過しても良いが 安全が確認されてのことで、青でも通過できない場合もある。 しかし、青なら通過しなければという考えで生きている人は そういうイレギュラーの時に、詰まらない失敗をする。 物事を適切に解釈、判断できないならプログラミングには向いてないよ。
先入観を持って生きていると損するよ。独自のスタイルがあるならそれはそれで 構わないが、他人に伝える以上、客観性がない意見は単なる個人の思い込みとしか 思われない。return についてはあくまでもその関数の戻り値の型によって プログラマーが任意で、適切に処理すれば良い。必ずしも 0 でなければ いけないという決まりは無い。
ISO/IEC 9899:1999 5.1.2.2.3 If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument; reaching the } that terminates the main function returns a value of 0. これによると、 main)() の返り値が int で main() に return がないなどして main() の } に到達した場合は 0 が返りますね。 別に main() に return がなくても、何がしかの値が返るように規定されているから、main に return が必須というわけではないですね。
[1] 授業単元:基礎プログラミング [2] 問題文(含コード&リンク) 問題1 キーボードから読み込んだ整数値と実数値(倍精度:double)を、そのまま画面に表示するプログラムを作成せよ。
入力する整数の値は123456
入力する実数の値は123.456
問題2
キーボードから入力した適当な長さの文字列を、そのまま画面に表示するプログラムを作成しなさい。
入力例 I_love_programming.
問題3
キーボードから読み込んだ実数値の書式を指定して、整数部4桁、小数点以下2桁で表示するプログラムを作成しなさい。
例 12.3456 -> __12.35 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:10月19日 [5] その他の制限: なし よろしくお願いします。
215 :
デフォルトの名無しさん :2010/10/18(月) 06:57:04
>>209-212 あくまで main() の戻り値は正常終了の場合は 0 がマナーと書いただけ
普通の関数なら何かの個数返したりポインタ返したりするよな、そういうケースで0(NULL)を返すのは逆に異常終了だ
まぁ0でも正常な場合は当然有るって書かんと重箱の隅を突かれそうだけど
マナーだから当然の事ながら規格なんてないよ、マナーって言い方がダメなら通例って言おうか?
何故0が正常終了として一般的なのかは知らんけど、Unix に慣れてると普通の感覚だと思うぞ
これは私見なんだが正常終了を0以外の値にすると
ret = Func();
if( ret == OK_RET ) { printf( "Error is %d\n", ret ); return ret }
と書かないとならんけど正常終了を0にすると
if( ret ) { ....
で、すむからではと邪推している
この辺の話は K&R あたりに書いてある様な気もするけど、友達から借りパクしたK&Rは別な奴に借りパクされたので手許に無い
手許に有る奴がちょっと調べてくれんかな
[1] 授業単元:C言語基礎実習 [2] 問題文(含コード&リンク):0未満の数が入力されるまで 入力を求め、その入力した回数と入力した数値の最大値と最小値を表示するプログラムを作成しなさい。 なお、0未満の数は回数と最大値、最小値に含めないものとする。 また、0未満の値の入力だけで終わった場合は最大値、最小値は表示しない。 [3] 環境 [3.1] OS:Windows Vista Basic 32bit [3.2] コンパイラ名とバージョン:Visual Studio 2010 [3.3] 言語:C言語 [4] 期限:2010年10月22日午前9時まで [5] その他の制限:最大値、最小値についてはそれぞれ関数を作って作成すること
#include <stdio.h> int main( void ) { int in, cnt = 0, max, min; scanf( "%d", &in ); if( in < 0 ) { printf( "cnt = 0" ); // 要らんかも知れん return 0; } max = min = in; cnt++; while( 1 ) { scanf( "%d", &in ); if( in < 0 ) { printf( "cnt = %d, min = %d, max = %d\n", cnt, min, max ); return 0; } if( in < min ) min = in; if( in > max ) max = in; cnt++; } } なんか垢抜けないコードで吐きそうだ
なぜ return int型; なのか理解せずに今までなんとなくやってたの? やだ、この人素人以下。
????
>>217 >最大値、最小値についてはそれぞれ関数を作って作成すること
らしいぞ
自分より下がいるとちょっと安心するな
#include <stdio.h> int in, cnt = 0, max, min; void update_min(void){ if( in < min ) min = in; } void update_max(void){ if( in > max ) max = in; } int get_min(void){ return min; } int get_max(void){ return max; } void init_max_min(void){ max = min = in; }
int main( void ) { scanf( "%d", &in ); if( in < 0 ) { printf( "cnt = 0" ); // 要らんかも知れん return -1; } init_max_min(); cnt++; while( 1 ) { scanf( "%d", &in ); if( in < 0 ) { printf( "cnt = %d, min = %d, max = %d\n", cnt, get_min(), get_max() ); return 1; } update_min(); update_max(); cnt++; } }
ワラタw
>5.1.2.2.3 Program termination
「main関数の戻り値はその値を引数とするexit関数の呼び出しと等価とする」。
main()からのreturn 0; はexit(0);と等価。
だからexitの引数として用意された値を使わないことに違和感があるなら、
return EXIT_SUCCESS; で正しい(GNUのコードではよくみる)。
この仕様はANSI以前のCからの名残。
以前はexit()の呼び出しのみが正しい終了方法だった。
そうしないとatexit()に登録された関数が呼び出されない実装だったから。
>>212 の言うとおりだと思う。
例えばsystem()の戻り値で呼び出し先のmain()の戻り値がくることも保証されてない。
実際、SUN環境では通用しない。
227 :
デフォルトの名無しさん :2010/10/18(月) 18:28:02
>>214 #include <stdio.h>
int main() {
int a;
double b;
printf("整数を入力してください > ");
scanf("%d", &a);
printf("実数を入力してください > ");
scanf("%lf", &b);
printf("入力した整数 = %d\n入力した実数 = %lf\n", a, b);
return 0;
}
#include <stdio.h>
int main() {
char str[1024];
printf("文字列を入力してください > ");
scanf("%s", str);
printf("入力した文字列 = %s\n", str);
return 0;
}
#include <stdio.h>
int main() {
double a;
printf("実数を入力してください > ");
scanf("%lf", &a);
printf("[%lf] -> [%7.2lf]\n", a, a);
return 0;
}
228 :
デフォルトの名無しさん :2010/10/18(月) 18:40:32
【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:できるだけ早くおねがいします。 [5] その他の制限: forの条件文を習ったばかりですがつまずきました。お願いします。 角度thetaを媒介変数として,(x,y)を計算してください. thetaは0度から360度まで変化させた場合の(x,y)を出力せよ。 x=acosθ y=bsin(θ+α) ともうひとつ。 「個体群動態で N(t+dt) - N(t) = (r - hN(t)) N(t) として,rを増 殖率,hをこみあいの効果とする。 適当な,N(0) r, h を与えて, N(t) の変化を示しなさい。
>>227 printf で double を出力するときは、「%lf」じゃなくて「%f」だよ。
あと、2つ目のプログラムだけど、「適当な長さ」に半角1023文字までという制限つけてよいの?
>>228 逆に質問。
1つ目の問題で、a, b, α の値は指定なしですか?
232 :
デフォルトの名無しさん :2010/10/18(月) 19:12:41
228の者です。 説明不足ですみませんでした。 a,b,αは自分で指定します。
>>232 自分で指定っていうのは実行時に聞くの?
それとも適当な数字を埋め込めばいいの?
あとθは1°づつ増えるの?
gccならM_PIを使っても大丈夫ってことでOK?
235 :
デフォルトの名無しさん :2010/10/18(月) 19:21:30
なんでそんなに質問するの?
問題の描き方がザルだからじゃね?
質問クンに質問しないでください 質問クンは質問クンであり、けっして回答クンではありません
現在とか未来とかじゃなくて、C99以降ってちゃんと言おうよ。
242 :
240 :2010/10/18(月) 20:14:17
C++03はできないと思います
>>240 C99のことを言ってるんだろうけど、間違える人が多すぎるから、仕方なく仕様に入れただけだよ。
C99非対応コンパイラやC++では、未定義の動作だよ。
244 :
240 :2010/10/18(月) 20:22:36
ミスなら...の引数などでdoubleに格上げするというのが委員会の決定のミス
gccなんだからC99でもいいじゃないか 変数宣言の位置が気に入らないけど
>>245 残念ながらgccはまだC99完全準拠ではありません。
そうじゃなくて、課題なんだから先生に%lfのことつっこまれる可能性を排除したほうがいいよってことでしょ。
それなら完璧に返答したらいいんでは?
今は教科書にもlfで乗ってるんじゃ?
語尾に"?"をつけるのが流行ってるんですか?
int %d long %ld float %f double %lf
?を着けてるのは同一人物なのでは?
%lfって別に書いてもいいけど%fと解釈されるだけでしょ C99から明確に区別されるようになったわけ?
printf("[%lf] -> [%7.2lf]\n", a, a); で警告とか出すコンパイラ多いの?
>>253 C99 から %lf = %f になったんだよ。それまでは %lf は未定義の動作。
関数呼び出しでスタックに仮引数がのるときには、浮動小数点数は double に変換されることを考えると、printf() に %lf という指定をするのは意味がないと思います。
scanfでは%fでfloat、%lfでdoubleなんだから printfはそれに合わせれば良かった
むしろva_argsの...でdoubleに変換しないのなら、いったいどういう方法があるんだ? 裏で型情報も渡せって?
静岡の民主でも普通に党本部に反発してますからw 静岡が自民、民主、どちらかよりだと思ったら大間違いだぞ? ネトウヨは静岡は操れない。やれるのは東京都周辺の王国くらいだろ。 それも崩壊したがなw
>>259 T va_arg(va_list p, T)
だから、変換する型は double に限定しなくとも、たとえば float でも OKのはず。
つまり printf() の引数に float をのせることは原理的に可能。float か double かは、第一引数をみて判断しようとおもえばできる。int, long, unsigned はそうしている。
(可変長引数関数といえども第一引数は必須)
でも、C のお約束として関数の引数は浮動小数点数では double に一律に変換されるのがお約束。そういう意味で %lf はいらない。
>>262 なるほどね。
そうか、fmtはそもそも型情報(ヒント)を含んでいるもんな。
>>262 printfの第一引数が常に文字列リテラルとは限らないよ。
動的に生成される char のポインタだって渡せるんだから。
>>266 printf の呼び出し側の話?
呼び出し側には型情報があるから問題ないでしょ。
>>266 文字リテラルにせよ、プログラムでつくったり、malloc() の返り値だったりしても、ともかく、第一引数は char * で固定されています。
だからこそ、可変長引数が使用できるのでは?
printf() の浮動小数点数の表示が%f だけで済んでいたのも、それは関数に渡される浮動小数点数が double 一本だったから。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):int main(void) { char word[101],boin[5]={'a','i','u','e','o'}; int i,count[5]; printf("アルファベットで文字列を入力してください>>>"); scanf("%s",word); count[0]=0,count[1]=0,count[2]=0,count[3]=0,count[4]=0; for(i=0; word[i]!='\0'; i++) { if(word[i]==boin[0]) {count[0]++;} if(word[i]==boin[1]) {count[1]++;} if(word[i]==boin[2]) {count[2]++;} if(word[i]==boin[3]) {count[3]++;} if(word[i]==boin[4]) {count[4]++;} } printf(" a>>>%d\n i>>>%d\n u>>%d\n e>>>%d\n o>>>%d\n",count[0],count[1],count[2],count[3],count[4]); return 0; } アルファベット文字列の中から母音をカウントするプログラムなのですが、現在ソース中の配列は 定数によって値が参照されています。これをboin[i] count[j]のように変数で値を参照するものに書き換えてください。 [3]環境:linux コンパイラ:gcc C言語 [4] 期限:2010年10月19日10:00まで [5] その他の制限:変数で配列要素の値を参照するときfor文と組み合わせること。 どうか、よろしくお願いします
インデントが正しくないプログラムは受け付けないことになっている
271 :
デフォルトの名無しさん :2010/10/18(月) 23:25:24
>>269 さすがにここまで簡単だと自分でやれって言いたいな
[0] 〜 [4] を [j] で代用するためのループを追加するだけなんだからさ
>> 269 見ずら過ぎるぞ・・・ #include<stdio.h> int main(void){ char word[101],boin[5]={'a','i','u','e','o'}; int i,j,count[5]; printf("アルファベットで文字列を入力してください>>>"); scanf("%s",word); for(i=0;i<5;i++) count[i]=0; for(i=0; word[i]!='\0'; i++) for(j=0;j<5;j++) if(word[i]==boin[j]) count[j]++; for(i=0;i<5;i++) printf("%c>>>%d\n",boin[i],count[i]); return 0; }
>>273 見る+つらい = 見づらい != 見ずらい
で、あんたらいつまで毎年出題される同じような課題を解いて 自己満足しているんだい?それがあんたの有意義な人生なのかい? 俺はそれで、年間何千万と稼いでいるのに。
276 :
269 :2010/10/18(月) 23:43:56
277 :
デフォルトの名無しさん :2010/10/18(月) 23:53:07
[1] 授業単元: プログラム [2] 問題文(含コード&リンク):テキストからデータを読み込んでユークリッド距離を求めるプログラムをお願いします。また、データを増やす事と最大距離と最小距離を求めてください。三次元なので、n=3とします。 [3] 環境 [3.1] OS:Linux [3.3] 言語: C++ [4] 期限: 2010年10月20日まで [5] その他の制限: なるべく難しくしないでお願いします。 #include<iostream> using namespace std; int main() { で始めてください。 そして、 rerurn 0; } を入れてください あと、座標は構造体とか配列を使って、距離は関数を使うみたいです。
使えるライブラリiostreamだけって....
>>277 課題を聞いてない人が、いきなり
「データを増やす事」とか 「n = 3」 なんて言われて通じると思う?
>>277 ユークリッド距離、とありますが、
入力が 10 点あったとしたら、
1) それら 10 個について総当りに距離をはかって、最大距離の2点と最小距離の2点を求めるのですか?
2) 単に原点(0, 0, 0) からの距離が最大のものと最小のものとを割り出せばいいのですか?
回答ください。
今日はやたら質問者に質問する日だな
ここはエスパー養成スレではないので
>>283 >>285 あぁ、そう解釈したか。そりゃ自分ひとりでは無理だわw
そうだよ、一族総出でやっているんだが?
まぁ、俺も必要不可欠な人材なんでね。
ん?ってこんな時間にこのスレにいる奴なんておらんかw まぁそういうことで、大して金持ちでもないのに妬まれるくらい あんたらは悔しいんだろ?頑張っても無駄だよ。 もうね、人生って 生まれた時から死ぬまで がある程度決定されているんですよ。 よく、人生を変えたなんて奇麗事言うじゃん?あれって結局、そいつだから そういう人生を歩んだんであって、別に変えたなんて他人は思っちゃいないんだよ。
まぁC言語をやらなきゃいけない人生だったのか、C言語しか楽しみのない 世間を知らない人生になってしまったのか、所詮は自分次第。 これを利用して何千万円も稼げるプロジェクトを立ち上げたらどうよ? 思いつくかは知らんがw
[1] 授業単元:C言語基礎実習 [2] 問題文(含コード&リンク):三つの数値を入力して昇順に並べ替えるプログラムを作成しなさい。 ただし、並べ替えの処理は関数「void sort(int *n1,int *n2,int *n3)」 というものを作って処理すること [3] 環境 [3.1] OS:Windows Vista Basic 32bit [3.2] コンパイラ名とバージョン:Visual Studio 2010 [3.3] 言語:C言語 [4] 期限:2010年10月22日午前9時まで [5] その他の制限:上記のみです
291 :
デフォルトの名無しさん :2010/10/19(火) 11:04:04
261さんありがとうございます。 しかし一つだけお願いがあります。M_PIは習っていません。C言語初めて二時間目の授業の 課題です。M_PI使わずにといてくれませんか?お願いします。 a,bはあらかじめプログラム上で適当な数を指定します。 θは1ずつ増やしていきます。 角度thetaを媒介変数として,(x,y)を計算してください. thetaは0度から360度まで変化させた場合の(x,y)を出力せよ。 x=acosθ y=bsin(θ+α) ともうひとつ。 「個体群動態で N(t+dt) - N(t) = (r - hN(t)) N(t) として,rを増 殖率,hをこみあいの効果とする。 適当な,N(0) r, h を与えて, N(t) の変化を示しなさい。
292 :
デフォルトの名無しさん :2010/10/19(火) 11:22:46
291につけたしです。a,bを[0,1]で、θを[0、Pi/2]で変化させるそうです。 お願いします。
>>292 良く解らん
a,bは定数じゃなかったん?[0,1]の範囲で設定しろってこと?
θは[0,2*Pi]の範囲で動くんじゃなかったっけ?
M_PIがだめなら、およそ3を使えばいいじゃない
>>294 ゆとり乙、せめて 22/7 を使おうぜ
double pai = atan(1.0) * 4.0; を使うのが一般的だけどね
296 :
デフォルトの名無しさん :2010/10/19(火) 13:16:13
[1] 授業単元:
[2] 問題文(含コード&リンク):
下のプログラム(簡単なスタックマシン)を次のように改造せよ
1,Enterが入力されても何もしない
2,演算子 +.-,*,/.%,^のいずれかが入力されたら
スタックに2つ以上数値が積まれているか確認する
2-1,積まれていなかった場合は"EROOR"を表示
2-2,積まれていた場合は、スタックから2つのデータをポップして
指定の演算を行い、その結果をプッシュする
3,プロンプトを表示して次の入力まで待機
問題のプログラムは↓の 10949.cです
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm [3] 環境
[3.1] OS:Linux
[3.3] 言語:C
[4] 期限:明日の16時まで
[5] その他の制限: +.-,*,/.%,^の演算はソースの下に割り算の例が
ありますのでそれを参考につくってください
それではよろしくお願いします
297 :
デフォルトの名無しさん :2010/10/19(火) 13:46:01
#include <stdio.h> #include <stdlib.h> #define STACK_SIZE 100 typedef struct { int data[STACK_SIZE]; int pos; }STACK; STACK stack = { 0 }; void print_stack(void) { system("clear"); printf("stack:"); int i; for(i=0; i<stack.pos; i++){ printf("%d ", stack.data[i]); } puts(""); } void push(int num) { if(stack.pos < STACK_SIZE){ stack.data[stack.pos++] = num; } } int pop(void) { if(stack.pos <= 0){ exit(1); } else{ stack.pos--; return stack.data[stack.pos]; } } int is_enzanshi(char* str) { if((strcmp(str, "+\n") == 0) || (strcmp(str, "-\n") == 0) || (strcmp(str, "*\n") == 0) || (strcmp(str, "/\n") == 0) || (strcmp(str, "%\n") == 0) || (strcmp(str, "^\n") == 0)){ return 1; } return 0; }
int calc_stack(char* str) { if (strcmp(str, "+\n") == 0){ return pop() + pop(); } else if(strcmp(str, "-\n") == 0){ return pop() - pop(); } else if(strcmp(str, "*\n") == 0){ return pop() * pop(); } else if(strcmp(str, "/\n") == 0){ return pop() / pop(); } else if(strcmp(str, "%\n") == 0){ return pop() % pop(); } else if(strcmp(str, "^\n") == 0){ return pop() ^ pop(); } else{ puts("fuck!"); exit(1); } } int main() { int input; char buff[256]; print_stack(); printf(">> "); while(fgets(buff, 256, stdin)!=NULL){ if(strcmp(buff, "\n") == 0){ } else{ if(is_enzanshi(buff)){ if(stack.pos < 2){ puts("ERROR"); exit(1); } else{ input = calc_stack(buff); push(input); } } else{ input = atoi(buff); push(input); } } print_stack(); printf(">> "); } return 0; }
>>296 ちょっと変えてみた。
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
typedef struct {
int data[STACK_SIZE];
int pos;
void (*push)(int num);
int (*pop)(void);
}STACK;
STACK stack = { 0 };
void _push(int num) { if(stack.pos < STACK_SIZE){ stack.data[stack.pos++] = num; } }
int _pop(void) { if(0 < stack.pos){ return stack.data[--stack.pos]; } exit(1); }
void init(void) {
int i; for(i=0; i<STACK_SIZE; i++){ stack.data[i] = 0; }
stack.pos = 0; stack.push = _push; stack.pop = _pop;
}
void print_stack(void) {
system("clear"); printf("stack:");
int i; for(i=0; i<stack.pos; i++){ printf("%d ", stack.data[i]); }
puts("");
}
int is_enzanshi(char* str) {
if((strcmp(str, "+\n") == 0) || (strcmp(str, "-\n") == 0) || (strcmp(str, "*\n") == 0) ||
(strcmp(str, "/\n") == 0) || (strcmp(str, "%\n") == 0) || (strcmp(str, "^\n") == 0)){ return 1; }
return 0;
}
int calc_stack(char* str) { if (strcmp(str, "+\n") == 0){ return (*(stack.pop))() + (*(stack.pop))(); } else if(strcmp(str, "-\n") == 0){ return (*(stack.pop))() - (*(stack.pop))(); } else if(strcmp(str, "*\n") == 0){ return (*(stack.pop))() * (*(stack.pop))(); } else if(strcmp(str, "/\n") == 0){ return (*(stack.pop))() / (*(stack.pop))(); } else if(strcmp(str, "%\n") == 0){ return (*(stack.pop))() % (*(stack.pop))(); } else if(strcmp(str, "^\n") == 0){ return (*(stack.pop))() ^ (*(stack.pop))(); } else{ puts("fuck!"); exit(1); } } int main() { int input; char buff[256]; init(); print_stack(); printf(">> "); while(fgets(buff, 256, stdin)!=NULL){ if(strcmp(buff, "\n") != 0){ if(is_enzanshi(buff)){ if(stack.pos < 2){ puts("ERROR"); exit(1); } else{ input = calc_stack(buff); (*(stack.push))(input); } } else{ input = atoi(buff); (*(stack.push))(input); } } print_stack(); printf(">> "); } return 0; }
ちょっと思ったんだが、このスレを利用してアフィリエイト収入を得るということはありえるのか。 そうなら宿題をでっち上げてる輩がいてもおかしくないんだよな・・・
技術者が商人になったらおしまいよ。
304 :
デフォルトの名無しさん :2010/10/19(火) 18:39:15
スタックに関する処理はSTACK構造体にまとめてカプセル化したら良さげに思えたんでpushとpopをまとめてみた。 今考えたらinitもprint_stackもまとめればよかったと思うし、STACK関する部分だけ別ファイルにして_pushと_popはstaticにして他はexternにすれば 良かったと思ったけどもう面倒になったから中途半端な感じになってしまった反省はしない。
>>305 継承みたいなことをして、インスタンスごとに処理を変えたいのでなければ、
実行速度も下がるし、読みにくいしで、はっきり言って良いことないよ。
クラスの概念を否定するということ?
>>307 課題で書いたコードを再利用したり、機能追加するために拡張したりするなら話は別よ。
前半の文章でそういうケースを除いたつもりだけど。
>>310 最小距離が10000より大きいときに間違った答えを出力する気がする。
データファイルとしては、たとえば data.txt の名前で内容を 0 1 2 3 4 5 2 3 4 4 2 3 みたいなものを準備しておき、 ./a.out < data.txt の形で読み込ませてください。
>>311 そのとおりなんですが、んー、さて、どうしましょうか?
>>314 私だったら、min も max も距離としてありえない負の数で初期化して、
2点以上入力されなかったときには、if 文でエラー表示させるかな。
using namespace std; としていながら、max を別用途に使って潰していましたね。 初心の者としては std::endl という風に名前空間を意識して書いたほうがいいかもしれませんね。ちょっと反省。
[1] 授業単元: [2] 問題文(含コード&リンク):0〜1の値をサーモグラフィ風にRGB値に変換するプログラム [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual Studio 2005 [3.3] 言語:C/C++/どちらでも可 [4] 期限:木曜日まで [5] その他の制限:なるべく簡単に 5〜6段階くらいに場合分けして,値を増やしたり減らしたりしているのですがどうもうまくいきません。 申し訳ありませんがよろしくお願いします。
>>319 入力方法と出力形態を教えてください。コードを教えていただけるとありがたいです。
0のときのRGB値が何で1のときのRGB値が何なんだよどういう対応になってるんだよわけわかんねえよ
どいつもこいつも L2-ノルムの演算回数が多すぎる O(n^2)は効率悪いと思うんだけど
[1] 授業単元: [2] 問題文(含コード&リンク): 西暦年数を与えて、その年の干支を求めるプログラムを作成せよ。 干支は、十干と十二支とをそろぞれサイクリックに変えながら組み合わせることによって60(10と12の最小公倍数)通りが得られる。 例:1989年は己巳。 [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン: dev-c++ 4.9.9.2 [3.3] 言語: C言語 [4] 期限: 10月21日 [5] その他の制限: 御願いします。
すみません。質問なんですが std::vector<coord>::iterator it double d = std::sqrt((it->x - c.x) * (it->x - c.x) + (it->y - c.y) * (it->y - c.y) + (it->z - c.z) * (it->z - c.z)) とした時のitはポインタなんでしょうか? (*it).xとかじゃ駄目なんですか? struct coord { double x, y, z; coord(double x, double y, double z) { this->x = x; this->y = y; this->z = z; } }; のcoord()で初期子用いる coord(...) : x(x), y(y), x(z){}じゃなく this->x = x;... としているのは何かあるんですか?
>>325 結論から先に。
>(*it).xとかじゃ駄目なんですか?
OKです。
it はイテレータと呼びますが、考え方はポインタと相似しています。
C++ の Standard Template Library (STL)で調べてみてください。
>>326 サーモって
黒→青→紫→赤→橙→黄→白だとおもうんだけど
ほんとうにその順番でいいの?
>>326 0.4 <= x < 0.6 のときの wPixb だけ間違っているのかな。
BYTE にキャストするときに、ほとんどの場合で 0 になってるような気がする。
>>325 >coord(...) : x(x), y(y), x(z){}じゃなく
>this->x = x;... としているのは何かあるんですか?
一緒です。むしろx(x) などの方が現代的だと思います。
>>328 海外のサーモグラフィはそうなってるらしいです。
今回の場合はこれで行きたいと考えています。
>329
では黄から赤に移るときも同様だと考えていいのでしょうか?
>>330 厳密にいうと一緒じゃない。
初期化リスト(x(x) など)を使わないと、引数なしのコンストラクタが実行される。
>>331 他のときは、double を使うときによく起こる誤差が入ってる。
2進数で、0.1 は無限小数なので、1 - 0.8 = 0.2 ではなく、0.19999999999999996かな。
何段階とか決まっているなら、0から1を適当な整数にマッピングしてみたら?
>>319 0<=c<=1.0
R = max(0.0,(-cos(M_PI*c)*255.0)) ;
G = max(0.0,(sin(M_PI*c)*255.0)) ;
B = max(0.0,(sin(2*M_PI*c)*255.0)) ;
ちょっと適当だけどでどうだろう?
青の期間が短いかなぁとも思うがそのへんは波形を少しずらせば良くなりそうな
>>333 小数が2進数でどう表されるか考えたことなかったです。
>>334 少し難しそうですが、やり方次第では上手くいくかもしれないですね。
頂いた意見を参考に試してみます。
皆様ありがとうございました。
336 :
デフォルトの名無しさん :2010/10/20(水) 00:46:00
>>305 , 307
this が使えんメンバ関数モドキに何の意味が有るのかと問いたいな
カプセル化を考えるなら
void STACK_pop( STACK* this );
みたいな実装の方が実用的だと思う
[1] 授業単元:プログラミング応用 [2] 問題文(含コード&リンク): 整数型変数aのアドレスをポインタ型変数pに代入するには、 int a=10; int* p; p = &a; とする。 (1) ・aの値 ・aのアドレス ・pの値 ・pのアドレスの4つを出力するプログラムを作りなさい。 参考) pのアドレスの出力:printf(”%p ”, &p); aの値の出力 :printf(”%d ”, a); (2)メモリアドレスと書かれている値の関係を以下の例のように示しなさい [メモリ番地] → [メモリに保持されている値] 0xffbff624 → ??? 0xffbff620 → ??? 0xffbff616 → ??? [3] 環境 [3.1] OS:Windows 7 [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:Cです [4] 期限:木曜日まで [5] その他の制限:特になし よろしくお願いします
338 :
デフォルトの名無しさん :2010/10/20(水) 02:03:48
339 :
デフォルトの名無しさん :2010/10/20(水) 02:11:59
>>316 メモ帳でファイルを作って、そこにデータを入力しても、プログラムの結果には何も出てこないんですが…
>>337 (1)
#include <stdio.h>
int main()
{
int a = 10;
int* p;
p = &a;
printf("aの値=%d aのアドレス=%p pの値=%d pのアドレス%p\n", a, &a, p, &p);
return 0;
}
純粋にその変数の値を出すなら上のであってると思うけど
もしaとpが同じところを指しているってことなら
printfの一文を
printf("aの値=%d aのアドレス=%p pの値=%d pのアドレス%p\n", a, &a, *p, p);
に変えて
(2)は例えばint型の配列なら1,2,3・・・みたいに連続してるってことなんだけど
0xffbff624 → 3
0xffbff620 → 2
0xffbff616 → 1
問題の条件がよくわからないのでこのくらいしか言えないかなぁ
>>337 #include <stdio.h>
int main(void) {
int a = 10; int* p; p = &a;
printf("%8d = aの値\n", a);
printf("%p = aのアドレス\n", &a);
printf("0x%x = pの値\n", p);
printf("%p = pのアドレス\n", &p);
printf("[メモリ番地] → [メモリに保持されている値] \n");
printf("%p → 0x%08x\n", &a, a);
printf("%p → 0x%08x\n", &p, p);
}
>>290 #pragma warning (disable:4996)
#include <stdio.h>
void sort(int *n1, int *n2, int *n3){
int temp;
if(*n1>*n2) {temp=*n1, *n1=*n2, *n2=temp;}
if(*n2>*n3) {temp=*n2, *n2=*n3, *n3=temp;}
if(*n1>*n2) {temp=*n1, *n1=*n2, *n2=temp;}
}
int main(void){
int n[3];
printf("input(1):"); scanf("%d", &n[0]);
printf("input(2):"); scanf("%d", &n[1]);
printf("input(3):"); scanf("%d", &n[2]);
sort(&n[0], &n[1], &n[2]);
printf("%d %d %d\n", n[0], n[1], n[2]);
}
344 :
290 :2010/10/20(水) 12:46:04
>>323 /* gcc --input-charset=cp932 --exec-charset=cp932 */
#include <stdio.h>
static char *jyunisi[12] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
static char *jikkan[10] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
int main(int argc, char *argv[]){
int nen = 1989;
if(argc<2) {puts("Parameter error."); return 1;}
sscanf(argv[1], "%d", &nen);
printf("%d %s %s\n", nen, jikkan[(nen+6)%10], jyunisi[(nen+8)%12] );
}
ああそうか。関数の中でstack変数にアクセスしちゃってるから複数のSTACKが作れないわけか。 だからstack.push(&stack);みたいにした方がいいわけね。
カプセル化もどきを実現するならば、struct の定義や private な関数は C ファイルに static で書いて非公開、 ヘッダファイル には struct へのポインタ型と、public な関数だけを記述しなければならない。 インスタンスを作る関数以外の public な関数には、 必ず struct へのポインタ型の引数がなければならない。 当然、インスタンスを作る関数内に malloc などが必要で、 破棄する関数で free を使う。 ポインタがある時点で、書き換えて欲しくない変数も強引に書き換えられるから、 厳密なカプセル化なんて無理だけどね。
とりあえず本屋さんに行って「C言語によるオブジェクト指向プログラミング入門」を買ってきた。 これで勝つる
>>349 そして俺の宿題解決の力になってくれよ。
テストあったけどたぶん赤点だろうから課題がたくさん出るわけだ
そんな本あるんだ・・・。
C言語によるオブジェクト指向ってマジで? クラスとか一切つかわずに?
つ cfront
地味に難易度の高そうな本だなw
そんな手間かける暇あったら素直にC++使えと思ってしまう
C++の問題は、オブジェクト指向でないプログラムも許容していることだと思う。
C++の問題は、普及しちゃっていることだと思う。
358 :
デフォルトの名無しさん :2010/10/20(水) 21:54:40
>>348 無理くり private を隠蔽したいなら private 変数をまとめた構造体を用意し公開する構造体に char* でぶら下げて
使うときにキャスト代入して参照するなんて荒業も有るかも知れんけど...無理に書き換えられるのは回避できないね
359 :
デフォルトの名無しさん :2010/10/20(水) 21:58:02
>>355 C++使える環境が一般的では無かった時代に出たのでは?
20年くらい前だと gcc も C++ に対応してなかった気がする
gpp とかいうC++→Cトランスレーターを使った記憶が有るんだが自信は無い
360 :
323 :2010/10/20(水) 22:01:08
>>345 ありがとうございます!
ただ、エラーが出てしまいました。
bloodshedのdev-c++を使ってますが、そのままコピペで大丈夫でしょうか?
エラー内容載せようよ・・・
362 :
デフォルトの名無しさん :2010/10/20(水) 22:13:01
>>360 正常終了時の return が無いから warning は出そうだな
nen = 1989 ってのは基準年じゃないの?
このソースだと 1989 が使われないけど問題ないのかな?
>>360 &#160 は、スペースに置き換えないと
364 :
323 :2010/10/20(水) 22:17:02
すみません。エラーメッセージを載せるのを忘れてました。 御願いします。 3: error: stray '\147' in program 3: error: stray '\209' in program 3: error: syntax error before string constant 3: error: stray '\156' in program 3: error: stray '\250' in program 3: error: stray '\136' in program 3: error: stray '\229' in program 3: error: missing terminating " character 4: warning: excess elements in array initializer 4: warning: (near initialization for `jyunisi') 4: warning: excess elements in array initializer 4: warning: (near initialization for `jyunisi') 4: warning: excess elements in array initializer 4: warning: (near initialization for `jyunisi') 4: warning: excess elements in array initializer 4: warning: (near initialization for `jyunisi') 4: warning: excess elements in array initializer 4: warning: (near initialization for `jyunisi') 4: warning: excess elements in array initializer 4: warning: (near initialization for `jyunisi') In function `main': 9: error: `jikkan' undeclared (first use in this function) 9: error: (Each undeclared identifier is reported only once 9: error: for each function it appears in.) Execution terminated
どうでもいいけど、普通十干の方を先にしないか?
丙午、とかねえ。
>>366 >>365 のは、配列宣言の順番のことを言ってるんだろうけど、
君のは全く理解できない。printf では順番合ってるよ。
>>364 使ってるコンパイラが日本語に対応してないように見えるね。
DevC++JPプロジェクトあたりを参考にしてみてください。
369 :
323 :2010/10/20(水) 23:23:16
>>368 学校で使ってるのが英語版のやつなんですけど、
いままで日本語の表示もできていたんですけどね。
初心者でわからないことだらけですみません。
文字コードが悪いだけだろ
371 :
323 :2010/10/21(木) 00:31:19
すみませんよくわからないのですが、どうなおしたらいいですか?
直すというよりエラーを避ける・(から)逃げる。 {"子","丑","寅","卯","辰","巳","午","未","申\","酉","戌","亥"}
373 :
デフォルトの名無しさん :2010/10/21(木) 05:28:51
>>371 OSは日本語を表示できるけどコンパイラが日本語を受け付けないって状況なんか?
だったら、文字列をファイルから読み込んだらどうよ....面倒くさいけど
>>371 単に signed char に 0x80 以上の値が有るのを拒否されてる可能性が有るから
static char *jyunisi[12] = ....
static char *jikkan[10] = ....
を
static unsigned char *jyunisi[12] = ....
static unsigned char *jikkan[10] = ....
に修正するのを試してみてけれ
>>374 エラーメッセージ読みとれない奴は回答禁止。
>>375 通常 stray 〜 in program が出る場合はソース内に全角スペースが混入していて、
『はぐれた変な文字が入ってるよ』って意味で出てるんだけど
>>345 のソースをコピペして bcc で動かすと動く訳よ
だからメッセージ通りの意味では無いと考えたら、日本語に対応してないコンパイラによって "" 内の文字列に
イチャモン付けてる可能性に思い当たった訳だ
メッセージ読めないとか勝手に決め付けられるのは不愉快だな
>>371 とりあえず下記でもエラー出るか試してみてよ。
static wchar_t *test1[] = {L"子", L"丑"};
static wchar_t *test2[] = {U"子", U"丑"}; /* これはCでは非標準だが */
この場合、printfのフォーマットも%wとか%lsになったりするんだけども。
> 学校で使ってるのが英語版のやつなんですけど、 > いままで日本語の表示もできていたんですけどね。 Dev-C++ 日本語版は、家にインストールしたんだけど、学校と同じ英語版は、 どこからダウンロードして、インストールすればいいの?? 家でインストールしたのは英語版で、学校で使ってるのは日本語版だよ。たbん>>171
>>376 エラーメッセージを正しく読みっていれば、
>>374 の修正は思い至らない。
あの修正で回避できる場合のエラーメッセージは全然違う。
だから読み取れないと言ったんだよ。 お前退場。
380 :
デフォルトの名無しさん :2010/10/21(木) 13:13:56
c言語初心者です。 "入力文字列に小文字のアルファベットが何文字含まれているか出力せよ" の問題が分かりません。
[1] 授業単元:C言語基礎実習 [2] 問題文(含コード&リンク):次のような文字コードの表を出力せよ | 2 3 4 5 6 7 --+------------------- 0| 0 @ P ` p 途中略 f| / ? O _ o SPC [3] 環境 [3.1] OS:Windows Vista Basic 32bit [3.2] コンパイラ名とバージョン:Visual Studio 2010 [3.3] 言語:C言語 [4] 期限:2010年10月22日午前9時まで [5] その他の制限:0x7fに関してはSPCと表示させよ。
>>380 #include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char **argv)
{
char buf[256];
char *p;
int lower_case_count;
scanf("%s", buf);
lower_case_count = 0;
for (p = buf; *p != '\0'; p++) {
if (islower(*p)) lower_case_count++;
}
printf("lower case count:%d\n", lower_case_count);
return EXIT_SUCCESS;
}
ビルド確認なし。動くかね?
383 :
380 :2010/10/21(木) 13:33:12
382さん ビルドエラーが出ました。 エラー内容は、 'scanf' の宣言を確認してください。 loijh.obj : error LNK2005: _main は既に 65656565.obj で定義されています。 fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました です。
初心者過ぎるエラーで笑える
テンプレも守れないエラーのさらし方も中途半端じゃこの先思いやられるな
基本的に1つのプログラムでmain関数は一つです。
問題を小出しにして、後でそれをくっつけても動きません。
>>1 にテンプレートがあるので、問題を整理して依頼してみては?
>>381 #include <stdio.h>
int main(){
int i, j, c;
puts(" | 2 3 4 5 6 7");
puts("--|------------");
for (i = 0; i < 0x10; i++) {
printf(" %x|", i);
for (j = 2; j < 8; j++) {
c = i + j * 0x10;
if (c == 0x7f) {
printf("%s", " SPC");
} else {
printf(" %c", i + j * 0x10);
}
}
putchar('\n');
}
}
インデントのないプログラムは受け付けないことになっている
馬鹿には見えないインデントw
390 :
381 :2010/10/21(木) 14:17:55
391 :
デフォルトの名無しさん :2010/10/21(木) 14:22:38
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):入力した点から点まで直線を引くプログラミングを書く 二重配列a[i][j]を使う [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 今日中 [5] その他の制限: 特になし
392 :
デフォルトの名無しさん :2010/10/21(木) 15:14:52
393 :
323 :2010/10/21(木) 17:49:31
>>393 プログラムをよく読め特に
if(argc<2) {puts("Parameter error."); return 1;}
の部分をよく読め
あ、というかmainに引数を渡す方法を習ってないのかな
396 :
323 :2010/10/21(木) 18:09:20
>>396 じゃあ
if(argc<2) {puts("Parameter error."); return 1;}を削って
sscanf(argv[1], "%d", &nen);
を
scanf( "%d", &nen);
にすると多分上手くいく、タメシテないけど
398 :
323 :2010/10/21(木) 18:22:32
>>397 ありがとうございます!無事出来ました。
ご教授していただいた方ありがとうございました。
またよろしく御願いします。
>>391 Windows プログラムですか?どんなことを習いましたか?
400 :
デフォルトの名無しさん :2010/10/21(木) 18:40:19
>>391 2次元配列を使うってのも謎だな
CUIベースで '*' でも使った線を引くって事かも?
>[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) このテンプレ本当の初心者から見るとどう書いていいかわからんのかもね
いいか、マジックで液晶画面上に(ry
int main() { int t[20][20]; printf("言うとおりにしてください。さもないと通報します。\n") getch(); printf("油性マジックを右手にもってください\n"); getch(); printf("画面の左上か(略
>>401 どこまで習っているかは分けたほうがいいかもね
テンプレなんて変えても変えなくても一緒
[1] 授業単元:プログラミング設計演習 [2] 問題文(含コード&リンク): 32ビットの2進数から、.で区切られた10進数のIPアドレスに変換してください 入力例 00000011100000001111111111111111 出力 3.128.255.255 [3] 環境 [3.1] OS: WindowsXp [3.2] コンパイラ名とバージョン: VC++ 2010 [3.3] 言語: どちらでも可 [4] 期限: 来週の木曜日 [5] その他の制限:特に無し
>>409 strtolはありか?そこを聞いてる問題だと思ったが
まあ制限特に無しだからいいのかもしれんが
>>391 ブレゼンハム
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 79
#define HEIGHT 24
int main(void){
int data[HEIGHT][WIDTH]={{0}};
int x, y, start_x, start_y, end_x, end_y;
int diff_x, diff_y, dx, dy, d, d2, dx2, dy2, sx, sy, i;
scanf("%d%d", &start_x, &start_y);
scanf("%d%d", &end_x, &end_y);
diff_x=end_x-start_x; diff_y=end_y-start_y;
d=abs(diff_x);
if(d<abs(diff_y)) d=abs(diff_y);
sx=(diff_x<0)?-1:(diff_x>0); sy=(diff_y<0)?-1:(diff_y>0);
dx2=abs(diff_x)*2; dy2=abs(diff_y)*2;
d2=d*2;
dx=dy=d;
x=start_x; y=start_y;
for(i=0;i<=d;i++){
if(0<=x && x<WIDTH && 0<=y && y<=HEIGHT) data[y][x]=1;
dx+=dx2;
if(dx>=d2) dx-=d2, x+=sx;
dy+=dy2;
if(dy>=d2) dy-=d2, y+=sy;
}
for(y=0;y<HEIGHT;y++){
for(x=0;x<WIDTH;x++) putchar(data[y][x]?'*':' ');
putchar('\n');
}
return 0;
}
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク):空欄を埋てください。 問題はユーザーから入力された100個の点の座標について、最も近い二点間距離を表示するプログラムを作る。 #include<stdio.h> #include<math.h> #define NUM 100 typedef struct { double x, y; } COODINATE; double dist(COODINATE, COODINATE); void main(void) { int i, j; COODINATE p[NUM]; double min; for (i = 0; i < NUM; i++) scanf("%lf %lf",&p[i].x, &p[i].y); 空欄 printf("Shotest distance = %lf\n", min); } double dist(COODINATE p0, COODINATE p1) {return(sqrt((p0.x - p1.x) * (p0.x - p1.x) + (p0.y - p1.y) * (p0.y - p1.y))); } [3.1] OS: windows コンパイラ名とバージョン: bcc32 言語: C [4] 期限:今週中 お願いします。
>>412 for(i=0;i<NUM;i++)
for(j=i+1;j<NUM;j++)
if(j==1 || min>dist(p[i], p[j])) min=dist(p[i], p[j]);
距離なんだからminを0で初期化しときゃいいだろw
>>414 常に0って表示されるね。よく考えよう。
minをmaxとでも勘違いしたのか?w
double_max 近辺であぼーん
min = dist(p[0], p[1]); for(i = 0; i < NUM; i++) for(j = i + 1; j < NUM; j++) if(min > dist(p[i], p[j])) min = dist(p[i], p[j]); の方が無駄な比較は少ない もっと言えば for(i = 0; i < NUM; i++) for(j = i + 1; j < NUM; j++) { double temp = dist(p[i], p[j]); if(min > temp) min = temp; } にして無駄な関数呼び出しも減らしたい
>>419 dist(p[0], p[1]) を2回呼んでいるのは、無駄とは言わないの?
どいつもこいつも L2-ノルムの演算回数が多すぎる O(n^2)は効率悪いと思うんだけど ちょっと工夫してO(nlogn)だろJK
>>420 ループ内の最初の一回以外全部無駄なのと、ループ内の最初の一回だけが無駄なのと
どっちがいいかってことだろ
>>423 でも、無駄な関数呼び出しには変わりない。以下のようにできるから。
min = dist(p[0], p[1]);
for (j = 2; j < NUM; j++) {
double temp = dist(p[0], p[j]);
if(min > temp ) min = temp;
}
for (i = 1; i < NUM - 1; i++) {
for (j = i + 1; j < NUM; j++) {
double temp = dist(p[i], p[j]);
if(min > temp ) min = temp;
}
}
そこは、コードの長さとのトレードオフってことで
>>425 「無駄」と言っている割には中途半端だと思っただけ。
>>421 1秒以下の実行時間短縮のために、あなたは宿題にどのくらいの時間を消費する気?
はっきり言って、労力に効果が見合ってないよ。
O(n^2)を避けれるものなら避けたいのはやまやまなんだが、 この課題の題意に沿ってかつ避けれる方法があるのだろうか? ソートするにしても、まず2点間の距離を全部もとめなくてはならないのではないか。
429 :
ワリオPV :2010/10/21(木) 22:37:55
初めまして。ワリオPVと申します。 学校の宿題で下記の図形を表示させるプログラムが出たのですが、 どうしても分かりません。 図形↓("_"はスペースの代わりです。) ********** _********** __********** ___********** ____********** _____********** ______********** _______********** ________********** _________********** レポート提出があるので、早めにお願いします(>_<) では。
点の範囲が1画面内とか(0<=x<800,0<=y<600とか) 座標は整数値のみとかならやりようもあるが 実数で∞範囲内だとしたら地道にやるしかないんじゃないの?
>>429 #include <stdio.h>
int main(void)
{
int i,j ;
for ( i = 0 ; i < 10 ; i++ ){
for ( j = 0 ; j < i ; j++ ){
putchar(' ') ;
}
printf ( "**********\n" ) ;
}
}
432 :
ワリオPV :2010/10/21(木) 22:44:01
>>431 おおおお!ちゃんと表示された!
ありがとうございました!m(_ _)m
>>429 #include <stdio.h>
int main(void)
{
int i;
for(i = 0; i < 10; i++) printf("%*s\n", i + 10, "**********");
return 0;
}
434 :
ワリオPV :2010/10/21(木) 22:48:49
>>433 そのような方法もあったのか・・・
プログラムっていろんなやり方があるのですね・・・
>>421 一度Ο(nlogn)とかいてみたかったのですねよくわかりませんが
しかし、2次元・3次元あるいは n 次元空間内異なる N 個が与えられたときに、n次元 L2-ノルム(ユークリッドノルム)が最大の2点あるいは最小の2点を求めるアルゴリズムはあるのかもしれない。
>>421 は具体的な内容にはまったく触れていないが。
最初見たときになんかありそうだなっと思った 科目名がアルゴリズムだしなんかあるのかもね まあ421が何とかしてくれるでしょ
Java に引き続いて、OpenOffice も oracle に食われてしまうのか。どちらにしても日本は蚊帳の外ですねえ。
当たり前だ。 日本には食うものがない。
>>437 おれもそう思って、今も考えてるんだけど、いい方法が思いつかん。
441 :
デフォルトの名無しさん :2010/10/22(金) 01:30:18
#include <stdio.h> int main() { char a[40]; int i,j; char *p; scanf("%s",&a); scanf("%d",&i); p=a; for(j=0;j<5;j++){ putchar(*(p+j+i-1)); } printf("\n"); return 0; } これを文字列の取り出しにポインタを使わない場合は どのようにすればよいでしょうか? 文字列を入力し、指定した文字位置から5文字表示するプログラムです。 入力する文字列はアルファベットとなっています。
>>441 #include <stdio.h>
int main()
{
char a[40];
int i,j;
scanf("%s",&a);
scanf("%d",&i);
for(j=0;j<5;j++){
putchar(a[j+i-1]); /* -1 ?? */
}
printf("\n");
return 0;
}
私には見えていますから CBIRとか圧縮とかやってるから日常的に使っているんだよなぁ 問題が最近傍探索だからいろいろあるのよ ヒント与えたから実装は自分でやってね 別にライブラリ使ってもいいけどね ハッシュ関数の性能にもよるけど、確率的な近似で良ければもっと抑えられるアルゴリズムがある みんながCBIRに興味持ってくれたらうれしいかも 線形代数は素晴らしい
444 :
デフォルトの名無しさん :2010/10/22(金) 01:44:04
>>442 ありがとうございます。
これと、ポインタを使う場合とは
どのような違いがあるかよければ教えてもらえませんか?
>>443 最近傍探索で k-d treeを使ったことがあります。そのときは、絞り込んだ後は全幅探索になり、
データによっては最悪の場合もあって、そのときは全幅探索とかわりない、あるいは余計なお膳立てはしないほうが良かった、という結論に陥ってしまいました。
ノルム自体もユークリッドノルムはよくなくて、∞-ノルムをつかったりしましたがあまりパッとしたものではありませんでした。
今の計算機なら違った結果がでたかもしれませんけれども。
画像認識方面の方ですか?
446 :
デフォルトの名無しさん :2010/10/22(金) 04:02:52
>>421 は最小値を求めるなら比較時はL1ノルムで良いと言いたいのではないだろうか?
O(n^2)以降が意味不明になるけど
[1] 授業単元:C言語基礎実習 [2] 問題文(含コード&リンク):w x y zを入力して w/x+y/zを計算するプログラムを作成せよ。 ただし例のように帯分数かつ、分母を約分して分数表示させること。 入力 w = 5 x = 3 y = 2 z = 4 表示 5 2 1 ---- + ---- = 2---- 3 4 6 ずれていたらすみません。 [3] 環境 [3.1] OS:Windows Vista Basic 32bit [3.2] コンパイラ名とバージョン:Visual Studio 2010 [3.3] 言語:C言語 [4] 期限:2010年10月25日午前9時まで [5] その他の制限:特に無し
448 :
447 :2010/10/22(金) 06:42:50
ひとつ条件を忘れてました。 計算した結果が整数になった場合は分数の部分は 表示しないということでお願いします。
449 :
デフォルトの名無しさん :2010/10/22(金) 09:57:44
450 :
449 :2010/10/22(金) 09:59:38
張ってから気が付いたけど一箇所誤りが有った 73行目 × if( c > m ) { ○ if( c >= m ) {
451 :
449 :2010/10/22(金) 10:14:42
452 :
デフォルトの名無しさん :2010/10/22(金) 18:56:42
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク):
(1)下の画像のプログラムを3つに分割してください
(2)アクセス指定子をつけてください
http://imepita.jp/20101022/678990 [3] 環境
[3.1] OS:Linux
[3.3] 言語: C++
[4] 期限: 2010年10月24日まで
[5] その他の制限: なるべく難しくしないでお願いします。 今習っているのはクラスとアクセス指定子です。
453 :
デフォルトの名無しさん :2010/10/22(金) 19:11:37
>>452 seiseki.h と seiseki.cpp と main.cpp に分割しろって事か?
アクセス指定子は public って付いてるけど?
[1]授業単元 情報処理 [2]問題文 大きさを入力して、半角文字*を使い、Xを描く。大きさは Xの縦と横の半角文字数である。 [3]環境 [3-1]os: windows7 [3-2]コンパイラ名とバージョン:visualstdio2008 [3-3]C言語 [4]期限 2010/10/22 [5]繰り返し文までしか習っていません。 if文とfor文で書くこととのことです。おねがいいたします。さっぱりわかりません。
#define N 100; #include <stdio.h> int main (void) { int i,j; int num[100],flag[100]; int sumprime=0,sumflag=0; for(i=0;i<N;i++){ num[i]=num[i]+1; for(j=0;j<N;j++){ for(i=2;i<N/2;i;;){ flag[i]=0;
else{ while(num[j]>=1){ if(num[i]%j!=0){ flag[i]=1; sumprime+=num[i]; }else{ flag[i]=0; break; } } } } } } for(i=0;i<N;i++){ sumflag+=flag[i]; } printf("1から100までの素数 %d,和 %d ",sumflag,sumprime); return 0 ; } エラーが出ますが、何が原因なのでしょうか?教えてください
457の頭のelseに対応するifはどこだよ
459 :
デフォルトの名無しさん :2010/10/22(金) 20:18:20
エラー内容を書かないのは最近の流行なのか?
宿題をもらう人のそれぞれの環境なんて判らないからだろ
>>455 #include <stdio.h>
int main ( void )
{
int i, j ;
int size ;
printf ( "大きさ入力:" ) ;
scanf ( "%d", &size ) ;
for ( i = 0 ; i < size ; i++ ){
for ( j = 0 ; j < size ; j++ ){
if ( j==i || j==size-i-1 ){
printf ( "%c", '*' ) ;
}
else{
printf ( "%c", ' ' ) ;
}
}
printf ( "\n" ) ;
}
return 0 ;
}
エラトステネスの篩がしたいのか? 配列の使い方がめちゃくちゃだが
>>461 有難うございました。完璧です!
助かりました。
それはわかるんだが、コードが何をしようとしてるのかわからない
>>467 そもそもこのプログラム自体が間違っているということでしょうか?
一行目から何をしてるつもりなのか説明してみてはくれないか?
>>443 N が十分に小さいなら、O(nlogn) のアルゴリズムを動かすために必要な下準備で
動的にメモリ確保して DB とか平衡木を作っている間に、
O(n^2)のアルゴリズムが終了するよ。
そんなこともわからずに、文句を言う奴は恥の極みだな。
終わった話にいつまでもしつこい奴だな
472 :
ワリオPV :2010/10/22(金) 22:55:47
キーボードから入力した10個の正数データを配列dataに格納し、入力データの 最大値と最小値を画面に出力するプログラムが分かりません。 今のところプログラムはこんな感じです。 #include<stdio.h> int main(void) { int data[11] = {0,0,0,0,0,0,0,0,0,0,0}; int a,b,max,min; a=0; b=0; max=0; min=0; while(a>=9) { scanf("%d\n",data[b]); a++; b++; } printf("max=%d",max); return 0; } しかし、何回やっても 9421 [main] Q13 1864 _cygtls::handle_exceptions: Error while dumping state (p robably corrupted stack) Segmentation fault (core dumped) 上の様なエラーが出てしまいます。 原因と合わせて教えてもらえると幸いです。よろしくお願いします。><
まあ実際はループに入ることはないんだけどなw
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):2次元の部分的連続配列の総和のなかで最大のものを調べよ
出力は部分的連続配列の左上と右下の要素の第1、第2の添字にせよ
[3] 環境
[3.1] OS: Windows vista
[3.2] コンパイラ名とバージョン: VC++2010
[3.3] 言語: C
[4] 期限:無期限
[5] その他の制限: 標準的なレベルでお願いします
後からあれは使えないこれは使えないと追加注文するかもしれません
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10951.txt ここまで書いたんですがうまくいかないようです
どこを書き換えたらいいんでしょう
出来ればその理由も添えていただくとありがたいです
16行目が間違ってました for文の初期値は l = j です これでもうまくいきませんでした
>>476-477 >後からあれは使えないこれは使えないと追加注文するかもしれません
生意気すぎるよ。自分でやれ
まだ初心者だからそもそも使えないものがわからないってことです
[1] 授業単元:プログラミング2 [2] 問題文(含コード&リンク): (1)文字列を入力してその文字列のデータサイズを求めて表示させるプログラムを作成せよ。 実行例: >入力文字列は? 大阪府 >文字列"大阪府"のデータサイズは 7byte ヒント: 入力文字列を一時保存するための入力バッファchar buf[256];を用意する 文字列の大きさは関数strlenで求めることができる。string.hをインクルード 文字列は最後にnull文字'\0'が入っており、strlenで求めた大きさにはnull文字は含まれないので注意すること。 (2)char*型配列 char *ps[10];を用意する。 キーボードから10個の文字列を入力し、入力された文字列を配列ps[]に格納せよ。 ただし、文字列は動的確保を用いて文字列の大きさ分だけを確保し、余分なメモリをしようしないようにせよ。 すべての文字列を入力し終わったら、ps[]に格納された文字列を順にディスプレイに表示させよ。 ヒント: 最初にps[]の初期化としてps[]の各要素にNULLを代入しておく。 配列の動的確保も変数と同様に配列データの大きさ分(byte)をmallocで確保すればよい。 プログラムの最後で、ps[]の各要素に対して、動的確保したメモリを開放するのを忘れないこと。 [3] 環境 [3.1] OS: Linux [3.3] 言語: C 数年前に少しC言語やったくらいで内容が全然思い出せない。授業ではLinuxでやってるけど、 一応、自宅でもできるようにcpad for borland c++compilerを入れといたからこれで確認してみる。 お願いします。
>>479 それなら、何なら使ってよいのか列挙した方が良いんじゃないの。
返事もらって、それはダメって言われるより、回答する方も手間がかからないだろ。
>>481 そうですね
printf, scanf, for, if, while, break, 配列, マクロ, 関数, 再帰
が使えます
ポインタと構造体は使わないでください
>>482 6つもネストされたforループ文なんて見たくもないです
書き直すので「部分的連続配列」が何を指してるのか具体的に説明して
ansに何を入れたらいいのかも良く分からん
ポインタの使えないscanfなんて…
>>476 ・幅は M - i まで
・total += a[k][l];
・(i == 0 && j == 0 && w == 0 && h == 0)←必要なの?
・maxの初期値がない
[1] 授業単元:C++入門 [2] 問題文(含コード&リンク):e^x(自然対数)をテイラー展開したとき、x=1で計算した場合の 自然対数の値の近似値を求めなさい。なお、計算処理は第4項までとする。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VisualC++ [3.3] 言語: C++ [4] 期限:2010年10月26日 [5] その他の制限:#include <stdio.h>から始めること
>>471 何をもって「終わった話」と判定しているのか知らんが、
状況によってアルゴリズムを使い分けられなかったら、半人前以下なのは間違いない。
議論がしたいなら別行けってことじゃね?
べっ、別に int main() でも良いんだからねっ♥
>>486 >・(i == 0 && j == 0 && w == 0 && h == 0)←必要なの?
>・maxの初期値がない
初期値がないから上の条件が必要なんじゃないか?
>>492 あー、そういうことか。納得しました
ループ始める前に初期値入れる方法で考えてた。
>470 確かにあなたの言う通りですね、私の負けでいいですよ 一応聞いておきますが、Nが十分小さいときのNの値はいくらでしょうか 『珠玉のプログラミング』をお薦めする
>>487 マクローリン展開(x = 0のまわりでのテイラー展開)の間違いではないですか?
>>496 e^x=1+x/1!+x^2/2!+x^3/3!+....というものです。
問題文にテイラー展開と書いてあったのでそうかなと
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 0列目に学籍番号,1-4列目の要素に各テストの点数が格納されている二次元配列がある. 全科目総点で昇順に並べ替えを行い,結果を表示するプログラムを作成せよ. int seiseki[5][5]= {{1, 75, 68, 45, 91}, {2, 87, 5, 100, 61}, {3, 45, 79, 81, 77}, {4, 53, 55, 55, 66}, {5, 82, 32, 85, 74}, [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2010年10月25日 全科目総点を出すところまでは導けたのですが並び替えがさっぱり・・・ for、if、配列の参照ぐらいしか習ってないです、よろしくお願いします
>>487 #include <stdio.h>
#include <math.h>
double exp2(double x)
{
double e, c;
int i;
for (e = 0, c = 1, i = 0; i < 4; e += 1.0 / c * x, c *= ++i);
return e;
}
int main(void)
{
printf("%f, %f\n", exp(1.0), exp2(1.0));
return 0;
}
500 :
デフォルトの名無しさん :2010/10/23(土) 03:59:51
>>453 多分seisekiでいいんだと思います…
Personクラスというのをを3つに分けたら
Person.h Person.cpp Pers_prog.cppらしいです。
>>454 このプログラムを3つに分割するって書いてあるので、大丈夫だと思います。ありがとうございます
501 :
デフォルトの名無しさん :2010/10/23(土) 04:06:52
>>453 これって2行目とか3行目の書き方って特殊な書き方でしょうか?これ習ってないと思うんですが…
>>502 十分すぎるくらい簡素だと思うのですが、どの点が簡素でないと感じたのでしょうか。
それがわからないと、かきなおしようがないと思います。
#include <math.h> double exp2(double x)はわかりません。 int main(void) で全てできるようにしたいのです。
>>503 途中までやった自分のと比べて美しすぎる・・・
ありがとうございました!
>>505 #include <stdio.h>
int main(void) {
double e, c, x;
int i;
for (e = 0, c = 1, i = 0; i < 4; e += 1.0 / c * 1.0, c *= ++i)
;
printf("e=%f\n", e);
return 0;
}
508 :
デフォルトの名無しさん :2010/10/23(土) 06:09:24
[1] 授業単元:数値計算 [2] 問題文(含コード&リンク):窓移動法 j=|k|kbitの整数。 while j>=0 do if k[j]=0 then q=2*q j=j-1 else do tをj-t+1<=5とk[t]=1である最少の整数とする。 h[j]=(k[j]k[j-1]..k[t])_2 q=(2^(j-t+1))*q+p j=t-1 [3] 環境 [3.1] OS:Cygwin [3.2] コンパイラ名とバージョン: (gcc 4.3.4) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: [無期限] [5] その他の制限: 多倍長演算ライブラリ使用 巨大整数から奇数整数ビット列を抜き出すプログラムです
>>487 #include <stdio.h>
int main(void) {
double e,b;
int a,n;
printf("Input n > "); scanf("%d",&n);
for(a=1,b=1.0,e=1.0; a<n; a++) { b/=(double)a; e+=b; }
printf("%lf\n",e);
return 0;
}
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):文字列を保持する文字配列を三つ宣言し、 キーボード入力で文字列を与える その後文字数の少ない順に入れ替え、その結果を表示するプログラムを作成せよ 実行例 入力0 ; aaa 入力1 ; aaaaa 入力2 ; aaaaaa 結果 0 ; aa 1; aaaaa 2 ; aaaaaa [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:無制限 [5] その他の制限: char tmp[30] if(strlen(a) < strlen(b){ strcpy(tmp, a); //上記3文の使用 よろしくお願いします
>>508 多倍長演算ライブラリ使用とありますが、
どのようなライブラリが紹介されましたか?あるいは自分で作らなければならないのですか?
[1] 授業単元:C言語入門 [2] 問題文(含コード&リンク): コマンド行から複数の数値を受け取りその平均値を出力するプログラムを 作成し、プログラムリストと実行結果を示せ。ヒント:受け取った文字列を double型に変換するには、関数double atof(const char *nPtr)を使う。 この関数を使うには<stdlib.h>のインクルードが必要である。 #include <stdio.h> #include <stdlib.h> int main(void) { char str[]="1.41421356"; double x; x = atof(str); } [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2010年10月25日まで よろしくお願いします。
513 :
デフォルトの名無しさん :2010/10/23(土) 11:25:15
>>495 実行環境のCPUやメモリの階層構造、ライブラリの出来にも依存するから、一概に決められない。
ハードウェアの知識が少しでもあったら、そんな質問はありえないと思うが。
時間制約はあるのか、どれくらいの計算精度が必要かなど、
プログラムを使う人の要望によっても、使用するアルゴリズムは違うだろ。
ループ依存のないアルゴリズムは、並列化が楽ってこともあるし。
何でもかんでもアルゴリズムのオーダを下げればよいというもんでもないというのは知っておくべき。
他所でやれ
自分でやれ
>>512 #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int count = 0;
double total = 0.0;
/* コマンド行から複数の数値を受け取る */
if(argc <= 1) {puts("ERR"); return 1;}
for( argc--, count = 1; count <= argc; count++ ) {
total += atof(argv[count]);
}
count--;
printf("平均=%g\n", total/count);
}
517 :
480 :2010/10/23(土) 13:19:45
>>488 ありがとう!ありがとう!
やってることはだいたいわかるんだが自分じゃプログラム書けないんだよなぁ
これから勉強せねば
>>476 です
部分的連続配列ってのは
ある2次元配列a[i][j]のなかにある2次元配列b[k][l]のことです
例えばa[5][5]のとき部分的連続配列はb[1][1]からb[5][5]まであります
またb[1][1]はとりかたが25通りありますし、b[2][4]のように縦と横の比が変わったものもそう呼ぶようです
>>519 >scanf("%d", &a[i][j]);
ひょっとしてこれはポインタを使っているじゃないんですか
>>482 >ポインタと構造体は使わないでください
>>519 たくさん表示されてどれが答えかわからないんですけど。
あとちゃんと最大なものが求められていませんけど。
>>523 部分的連続配列はb[1][1]からb[5][5]までの、それぞれの最大値です。
全ての中から最大値を求める問題であるなら、それはb[5][5]ではないでしょうか?
>>302 ◆QZaw55cn4c が宿題を有償で解くスレです。
トリップつきで問題を投稿してください。
◆QZaw55cn4c から受諾のレスがあったら、○○銀行普通口座△△△△△△△に1000円振り込んでください。手数料は振り込み主持ちです。
◆QZaw55cn4c の受諾のレスには期限が記されています。
◆QZaw55cn4c はその期限内に宿題の回答のアップロード先を投稿いたします。
受諾のレスがあったにもかかわらず期限までに回答がアップロードされなかった場合には、返金いたします。
その他の場合には返金いたしません。
小遣い稼ぎにはなりそうですね。規制がかかったときにどうするかが課題でしょうね。
>>524 配列の要素が負の数である可能性があります。
>>525 せっかく酉着けてるんだから銀行振込よりモリタポの方が簡単かも
◆QZaw55cn4cの回答を添削してあげてる人はいくらもらえんの?
>>528 支払い方法さえ確立できるのであれば、それはもう倍お渡ししてもいいくらいの気持ちです。
添削箇所が一箇所増えるごとに倍倍に増やしたりはしないのか?
>>531 Knuth でもしなかったことですから、それは勘弁してくださいな。
535 :
デフォルトの名無しさん :2010/10/23(土) 22:38:35
[1] 授業単元:C++ [2] 問題文(含コード&リンク): 入力:二つの整数n,m 出力:1からnまでの番号札を持った人が、番号順に円陣を組んでいる。 最初に、1番札の人からm番目の人が退席する(円陣は1減) 続いて、その次からm番目の人が退席する。これを繰り返したときの、 退席者の順番を求め、出力せよ。 -例:n = 9,m = 5のとき、退席者の順番は5,1,7,4,3,6,9,2,8 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VisualC++ [3.3] 言語: C++ [4] 期限:2010年10月26日 [5] その他の制限:#include <stdio.h>から始めること mainの中身もお願いします。 よろしくお願いします。
#include <iostream> using namespace std; int main() { int n, m; cout << "n = "; cin >> n; cout << "m = "; cin >> m; int *p = new int[n]; for(int i = 0; i < n; ++i) p[i] = i + 1; for(int i = 0, pos = 0; i < n; ++i) { int *q = p + i; pos = (pos + m - 1) % (n - i); int temp = q[pos]; for(int j = pos; j > 0; --j) q[j] = q[j - 1]; q[0] = temp; } for(int i = 0; i < n; ++i) cout << p[i] << ' '; delete [] p; }
>>530 何回も言うけど、問題文から制限までちゃんと読め。
よく見たら#include <stdio.h>からかよw #include <stdio.h> #include <stdlib.h> int main(void) { int i, j, n, m, temp, *p, *q, pos; printf("n = "); scanf("%d", &n); printf("m = "); scanf("%d", &m); p = malloc(n * sizeof(int)); for(i = 0; i < n; i++) p[i] = i + 1; for(i = pos = 0; i < n; i++) { q = p + i; pos = (pos + m - 1) % (n - i); temp = q[pos]; for(j = pos; j > 0; j--) q[j] = q[j - 1]; q[0] = temp; } for(i = 0; i < n; i++) printf("%d ", p[i]); free(p); return 0; }
>>537 ええ。
文字型配列を使え、例の3行をいれろ、という指示は敢えて無視しています。
文字列を扱うのに、長さに限度のある配列を使うというのは嫌いなんです。
だいたい、
if (strlen(a) < strlen(b)) {
strcpy( ...
という書き方ならば、プログラムの最後で変数 c, b, a の順に表示させるのか、というところまで気に食わない。
だから、「他に回答がなければ」という断りをいれました。
多分他の方が題意にそったちゃんとした回答をかいてくれるでしょう。
無視するぐらいなら最初から書くなよw
>>539 それならば、解答方法に問題があるだろ。
使えないものを使ってくれってどういう意味だよ。
題意は満たしてないので参考程度に~、とか、誤解を招かない書き方はあるよね。
書こうと思えばいくらでも簡易に書けるのに ワザワザ妙な書きかたするのは自分の知識を自慢したいとかそういう意識が働くのだろうか?
若いのさ
丸写しである事が簡単に検出できるように
>>543 そう取られても仕方がないとは思いますが、実は純粋にわがままなおこちゃまというだけでしたね。スレ汚し失礼しました。
>>546 >>543 の言いたいことを正しく理解できてないよ。
getline 関数はもっと読みやすい綺麗なコードで書けるって言ってるんだよ。
>>547 そうですか‥‥‥。
これまでにも getline() もできうる限り簡略化してきたのですが、まだ足りませんか。うーん
ゲロ以下の臭いがプンプンする
必要なのは簡易に書く事じゃなくて空気を読む事だと思われ
日本語もまともに読めないようなアホにそんなことが期待できるわけもなく
getline()...確かになんじゃこりゃだな
>>551 まともに読めないじゃなく、読んでも宿題だろうが仕事だろうが依頼者の意向
は無視し全て俺俺の好きなようにやる性格
空気を読め、とは、これまた加齢臭のする言葉ですね。
>>552 今までの宿題で、ちゃんと題意を把握できてたことのほうが少ないだろw
◆QZaw55cn4cの特徴ガイドライン 1:事実に対して仮定を持ち出す 2:ごくまれな反例をとりあげる 3:自分に有利な将来像を予想する 4:主観で決め付ける 5:資料を示さず自論が支持されていると思わせる 6:一見関係ありそうで関係ない話を始める 7:陰謀であると力説する 8:知能障害を起こす 9:自分の見解を述べずに人格批判をする 10:ありえない解決策を図る 11:レッテル貼りをする 12:決着した話を経緯を無視して蒸し返す 13:勝利宣言をする 14:細かい部分のミスを指摘し相手を無知と認識させる 15:新しい概念が全て正しいのだとミスリードする
たまに覗く程度だから流れがわからんが あんま解答者を攻めると答えづらくなるからやめたほうがいいでないかい
流れを知ってる人間からするとそんな玉じゃないから大丈夫 この程度で答えづらくなるくらいの神経が有ればまだ良かったのだが
そうそう。 けれどもすごいコードがあがってくるとかなりめげます。
だから、求められてるのはすごいコードじゃなくて 題意に沿ったコードなんだってば
他所でやれ
562 :
デフォルトの名無しさん :2010/10/24(日) 02:57:38
>>548 業務なら簡素化できるとかよりワークバッファが小さすぎて効率が悪いって突っ込まれるな
再帰で使われるような関数でないならスタックに1Kや2K積んでも誰も文句は言わんよ
[4] 期限:無制限って、釣り?
>>563 うちの大学だと
提出しなくてもいいけどすると成績上げますよ
的なやつだと特に期限がきられないことがある
それなら講義の最終日とかを期限に設定しておいて欲しいところだ 実際は最終日に提出したんじゃ間に合わないだろうけど
カレンダー、完全数の課題こいやー
まあどうせすぐ答えられるか答えられずに流れていくかだから 期限とかそんなに関係ないけどね
568 :
ワリオPV :2010/10/24(日) 11:42:21
[1] 授業単元 ビット演算: [2] キーボードから16進数の数値を入力し、左に2ビットシフトさせた値を16進数で出力するプログラムを作成しなさい。なお、左ビットシフト演算子は「<<」である。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C言語 [4] 期限: 本日17:00まで [5] その他の制限 出来るだけ早くお願いします!>< 今はこんな感じです。間違いがあったら指摘してもらえると幸いです。 #include<stdio.h> int main(void) { int n; scanf("%x",&n); n = n << 2; printf("%#x\n",n);// "%#x\n"←16進で%x #=>0x return 0; }
>>562 その部分は #define で自由に変えることができるように作りました。
以前に解いていただいた方申し訳ありません。 以前、 [1] 授業単元:C言語基礎実習 [2] 問題文(含コード&リンク):w x y zを入力して w/x+y/zを計算するプログラムを作成せよ。 ただし例のように帯分数かつ、分母を約分して分数表示させること。 入力 w = 5 x = 3 y = 2 z = 4 表示 5 2 1 ---- + ---- = 2---- 3 4 6 ずれていたらすみません。 [3] 環境 [3.1] OS:Windows Vista Basic 32bit [3.2] コンパイラ名とバージョン:Visual Studio 2010 [3.3] 言語:C言語 [4] 期限:2010年10月25日午前9時まで [5] その他の制限:特に無し というものをといていただき学校に提出したのですが、 sprintf、<string.h>、<stdlib.h>を使わないで解きなさい。といわれました。 そこでどなたか前述のものを使わないで解いたものを作っていただきたいです。 あと、出力(表示)される左側二つの分数は約分などはせず、入力した時のそのままの数字で表示して、 一番右側の計算結果については、約分できるときは約分して、また、その答えが整数になったときは その整数のみを表示するようにするそうです。 お願いします。
>>570 解いた人だけど
>>451 にはバグが有ったよ、表に出ないバグだから多分気が付かなかったと思うけど
えー stdlib.h も使えないの?だったら itoa() も使えないよなぁ
さすがに面倒だな
入力部分は約分も整数の切り出しもしないって事?
頭の悪い分岐だw
int main() 笑ですから
ここまで簡単にしてって言われてるなら再帰も普通にダメそうな気もするんだが
576 :
451 :2010/10/24(日) 14:50:12
>>570 書き直したけど先に簡単な回答をした人が居たね、gcm なんて知らんかったよ
表示の桁合わせを考慮しないなら sprintf() も使う必要無いから、講師が求めてた回答は
>>572 みたいなのだと思う
よってアップするのは止めとくね
>>577 ユークリッドの互除法のところがなんかおかしい
a = b ;って何?
581 :
デフォルトの名無しさん :2010/10/24(日) 18:35:02
エラーメッセージをコピペすると死ぬの?
583 :
570 :2010/10/24(日) 18:49:10
>>597 ありがとうございます。
たぶん講師が求めているのはこういう回答だと思うので
これで提出できそうです。
[1] 授業単元:C言語入門 [2] 問題文(含コード&リンク): 1000以下の素数を表示するプログラムを作成せよ。 素数とは1とそれ自身以外に約数をもたない自然数である。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2010年10月27日 [5] その他の制限:ポインタまで習っています。 よろしくお願いします。
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク):入力された"short型"変数を 2進数で表示するプログラムを作って提出せよ。 入力された値までの2進数は全て表示すること 下にサンプルを記しておく。 input>5 0:0 1:1 2:10 3:11 4:100 5:101 [3] 環境 [3.1] OS:Windows XP HOME [3.2] コンパイラ名とバージョン:Visual Studio 2010 [3.3] 言語:C言語 [4] 期限:2010年10月29日 [5] その他の制限:ありません。
>>584 #include <stdio.h>
#define NUM 1001
int main()
{
int i, j;
char no[NUM];
for (i = 2; i < NUM; i++)
no[i] = 1;
for (i = 2; i < NUM; i++) {
if (i * i > NUM)
break;
if (no[i] == 0)
continue;
for (j = i; j < NUM; j++) {
if (i * j >= NUM)
break;
no[i * j] = 0;
}
}
for (i = 2; i < NUM; i++)
if (no[i] == 1)
printf("%d ", i);
printf("\n");
return 0;
}
>>585 #include <stdio.h>
int main(void)
{
short i, j, n, d = 0, a[16] = {0};
scanf("%hd", &n);
for(i = 0; ; i++) {
printf("%d:", i);
for(j = d; j >= 0; j--) printf("%d", a[j]);
putchar('\n');
if(i == n) break;
for(j = 0; (a[j] ^= 1) == 0; j++);
if(j > d) d = j;
}
return 0;
}
>>585 これって負数が入ったらどうするの?
#include <stdio.h>
int main ( void )
{
int i, j, n ;
printf ( "input>" ) ;
scanf ( "%hd", &n ) ;
for ( i = 0 ; i <= n ; i++ ){
printf ( "%d : ", i ) ;
for ( j = 0 ; j<sizeof(short)<<3 ; j++){
if ( (i>>j) == 0 )break ;
}
for ( j-=(i>0); j >= 0 ; j-- ){
printf ( "%d", (i&1<<j)>0 ) ;
}
putchar ( '\n' ) ;
}
return 0 ;
}
590 :
デフォルトの名無しさん :2010/10/24(日) 19:58:44
>>581 [1] 授業単元:
[2] 問題文(含コード&リンク):
>>581 [3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (Visual C++ 2008)
[3.3] 言語: (C)
[4] 期限: ( [無期限] )
[5] その他の制限: 構文エラーを直してほしいです
#include <stdio.h> int main(int argc, char **argv) { short value; printf("input>"); scanf("%d", &value); int i; char cmd[100]; for(i=0; i<=value; i++){ sprintf(cmd, "echo \"obase=2; %d\" | bc", i); system(cmd); } return 0; }
592 :
585 :2010/10/24(日) 20:13:07
>>589 ごめんなさい。説明不足でした。
「0未満の数の入力は考えない(されない)ものとする」です。
[1] 授業単元:プログラム実習 [2] 問題文(含コード&リンク):nとrを入力して 順列 nPr と組み合わせ nCr を表示するものを作成すること。 [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:Visual Studio 2010 [3.3] 言語:C言語 [4] 期限:明日の15時までです。 [5] その他の制限:<stdio.h>のみで解くこと。 よろしくお願いします。
594 :
593 :2010/10/24(日) 20:18:56
訂正します。 >[2] 問題文(含コード&リンク):nとrを入力して >順列 nPr と組み合わせ nCr を表示するものを作成すること。 [2] 問題文(含コード&リンク):nとrを入力して 順列 nPr と組み合わせ nCr を計算したときの値を表示するものを作成すること。
>>590 何をするのかしらんが、構文エラーがなくなればよいんだろ
これでエラーなくなる
#include<stdio.h>
int main(void)
{
return 0;
}
今回答用に久しぶりにC触ったら for(int i=0;i<n;i++) で怒られた、やりづらくて仕方ないな
601 :
デフォルトの名無しさん :2010/10/24(日) 22:19:01
[1] 授業単元:C++ [2] 問題文(含コード&リンク): 入力:二つの整数n,m 出力:1からnまでの番号札を持った人が、番号順に円陣を組んでいる。 最初に、1番札の人からm番目の人が退席する(円陣は1減) 続いて、その次からm番目の人が退席する。これを繰り返したときの、 退席者の順番を求め、出力せよ。 -例:n = 9,m = 5のとき、退席者の順番は5,1,7,4,3,6,9,2,8 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VisualC++ [3.3] 言語: C++ [4] 期限:2010年10月26日 [5] その他の制限:#include <stdio.h>から始めること mainの中身もお願いします。 538が実行できませんでした。 よろしくお願いします。
602 :
593 :2010/10/24(日) 22:25:45
>>601 VCだとscanfで警告は出るかもしれないけど、実行できないってことはないだろ
エラーコードを貼ったら負けだと思っているの?
malloc(stdlib.h)は使っちゃだめって話?
606 :
デフォルトの名無しさん :2010/10/24(日) 22:39:19
>>604 invailed conversion from 'void*' to 'int*'
このようなエラーコードが出ました。
>>606 それくらい自分でなんとかしようや
p = (int*)malloc(n * sizeof(int));
答えを教えるより勉強の仕方を教えた方がいいと思うの
このスレの趣旨に合わん
610 :
デフォルトの名無しさん :2010/10/24(日) 22:42:44
http://codepad.org/77L9Igyf バブルソートの問題です。
96~102行目だけを変えて(ここを考える問題なんですが)
正解と同じ実行結果にしなければいけません。
学校の演習システムで採点しているようで出力がちょっとでも違うと
正解にならないようです。
助けてください
611 :
デフォルトの名無しさん :2010/10/24(日) 22:49:23
>>538 を直して実行しても000000としか出力されません。
どこをどうしたらいいでしょうか?
#include <stdio.h>で始めさせておいて、C++でコンパイルしてんのかよw
俺もそう思ったが「授業単元:C++」である以上黙って飲み込んだ
>for(i = 0; i < n; i++) p[i] = i + 1; この一文を消したんじゃね?
615 :
デフォルトの名無しさん :2010/10/24(日) 22:53:39
>>612 ではC++で実行するにはどうしたらいいですか?
616 :
593 :2010/10/24(日) 22:58:42
>>598 すみません。ちょっと違ってます。順列のときの結果の値が不適当です
>>615 どうするもなにも、いまC++で実行してるんだろw
619 :
616 :2010/10/24(日) 23:11:48
順列のときではなく組み合わせのときです。 失礼しました
620 :
デフォルトの名無しさん :2010/10/24(日) 23:12:41
>>316 これって実行しても何も出てこないのはなぜでしょうか…
data.txtってメモ帳で保存すればいいんですよね…
>>610 プログラムはバブルソートとマージソートを組み合わせたものですが、
こちらで実行してみると、うまく動いています。
なにが問題なのでしょうか?
>>618 n に 1000 より大きい数を入れたら、楽しいことができそうだな。
>>620 >>312 が大元だったかな。
前回聞いたときもちゃんと教えられてるような気がするが…。
リダイレクトを使ってプログラムにデータを入力してください。
624 :
デフォルトの名無しさん :2010/10/24(日) 23:24:52
>>623 ./a.out < data.txt
の形ってどういう意味なんでしょうか
リダイレクトプログラム(?)ください
>>620 データの読み込みがうまくいっているかどうかを確認するロジックを組み込みました。(あと若干修正しています。)
http://codepad.org/Mzm6A6CF これをコンパイルした結果できた実行ファイルを a.out とします。
またデータとしてファイル data.txt を次のように作ります。
3 4 2
5 1 3
0 0 2
1 9 2
4 4 4
ここでコマンドラインから
./a.out < data.txt
と入力すると、
1: 3, 4, 2
2: 5, 1, 3
3: 0, 0, 2
4: 1, 9, 2
5: 4, 4, 4
max = 9.05539
min = 2.23607
とこちらでは表示されます。
以上のうち、どこか違うところがあれば、そのポイントを詳しくおしえてください。
可能な限りのフォローはします。
>>624 環境は Linux ですか、それとも Windows ですか。
>>277 を見る限りでは Linux のようでしたけれども。
[1] 授業単元:基礎プログラミング [2] 問題文(含コード&リンク) 問題1 10と20の和を、変数を使用して表示するプログラムを作成せよ。 問題2 キーボードから整数を1つ入力し、その度にそれまでの合計値を表示するプログラムを作成せよ。 問題3 下記の料理のレシピを表示するプログラムを作成しなさい. 今日は(料理名)を作りましょう。 ( 材料 1) は何グラム必要ですか: ( 材料 2) は何グラム必要ですか: ==レシピ== 「(料理名)を作るには, (改行) ( 材料 1) を ( 分量 ) グラムと ( 材料 2) を ( 分量 ) グラムが必要です」 *( )内の料理名や材料には自分の好きな名前を考えてください。 * 分量はキーボードから入力した値を使用してください。 下段の参考プログラムを参考に printf 関数内で %s や %d を使用 して、文字列(料理名・材料名)や数値(分量)を表示すること。[3] 環境 問題4 風林火山を、2つのputs関数を使用して表示するプログラムを作成しなさい [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:10月25日 [5] その他の制限: なし よろしくお願いします。
629 :
デフォルトの名無しさん :2010/10/24(日) 23:45:03
>>626 今は家なんでvisual c++で行ってるんですが、何も出てきません…でも、結果はそう出るんですよね
まさか、 PowerShell 使ってないよね?
>>629 >コマンドラインから
>./a.out < data.txt
>と入力する
これちゃんとやってる?
>>629 VC ならば、コンパイルしたプログラムを「コマンドラインで」実行してみてください。
スタート→プログラム→VC++ →Visual Studio Tools→Visual Studio コマンドプロンプトを起動して、
そこでコンパイルなどの作業を行えば Linux の場合とほぼ同じようにすることができます。
ソースファイル名は ○○○.cpp
コンパイルの方法は cl ○○○.cpp
実行ファイルは、○○○.exe になります。
633 :
デフォルトの名無しさん :2010/10/25(月) 00:00:29
>>630 visual c++でコンパイルして出てくる黒いのを使ってるんですが。
>>631 デバック→デバックなしで開始を押した後に出てくる黒い所に./a.out < data.txtと入れればいいんですよね
>>631 vcなのに./a.out < data.txtって
635 :
デフォルトの名無しさん :2010/10/25(月) 00:04:27
>>632 コマンドプロンプトが出たら何と入れればいいんですか
edlin data.txt
>>635 VC では、実行ファイル名は a.out ではないと思います。
でも、VC を動かす人じゃないので詳しいことはわかりません。
>>632 を試してみてください。
638 :
デフォルトの名無しさん :2010/10/25(月) 00:13:31
>>636 New file
*
って出てきました
そこで 3 4 2 5 1 3 0 0 2 1 9 2 4 4 4 キー入力する
素直にifstreamで開いてあげればいいじゃん なんで変わったことしようとするの?
641 :
デフォルトの名無しさん :2010/10/25(月) 00:19:54
>>639 今度はedlin data.txtって入れたら、End of input fileって出てきてしまいました。
で、数字入れたら、Entry errorと出てきます
>>633 >デバック→デバックなしで開始を押した後に出てくる黒い所
VSを起動して状況をつかみました。
この場合はファイルのデータを入力することができません。
直接座標データを入力してください。
3 1 2<リターン>
1 2 3<リターン>
<Ctrl+Z><リターン>
すると max と min が表示されます。
元のプログラムは標準入力からデータを入力するようにつくられているので、この「黒いところ」ではこうやってデータを入力するしかありません。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): (1)ある10人の年齢がint score[] = {21, 70, 17, 12, 15, 80, 55, 43, 34, 48}; で与えられている時、年齢の平均を求めるプログラムを作成せよ。 ただし、ユーザー定義関数averageを定義してプログラムを作成すること。 ※第一引数として年齢データの配列、第二引数として人数を受け取り、平均値を返すこと。 (2)(1)の年齢をそれぞれ二乗して足した値の平均値を求めるプログラムを作成せよ。 ただし、ユーザー定義関数averageを定義してプログラムを作成すること。 ※第一引数として年齢データの配列、第二引数として人数を受け取り、平均値を返すこと。 ※(2)についてはプロトタイプ宣言を使用すること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名:gcc [3.3] 言語:C [4] 期限:2010年10月25日18:00まで [5] その他の制限:※で示した以外は特にありません。 少し多いですがよろしくお願いします
>>640 getline命の◆QZaw55cn4c のコードだから
getlineを意地でも使う
なんか覚えたての中学生みたいな奴だな もう少し大人になればいいのに
646 :
デフォルトの名無しさん :2010/10/25(月) 00:27:16
>>642 じゃあファイル作った意味ってないんですか…
でも、結果さえ出れば大丈夫ですかね
>>644 もうしわけないが、c++ なので拙作のgetline() はつかえません。
linux で作業しているものと考えていたので、標準入力からのリダイレクトが簡単だし良く知られているだろうと踏んだのですが、Windows の VC を使うなど、仮定が違っていましたね。
>>646 linux で作業しているものと思っていたんです。(教えてくれればよかったのですが。)
>>642 がうまくいきましたか?うまく行ったのなら、それがこのプログラムの仕様です。
Windows の cmd.exe から実行させる方法をご存知であれば、ファイルからデータを流し込む方法も使えます。
単にリダイレクト常識って言いたかっただけちゃうんかと
650 :
デフォルトの名無しさん :2010/10/25(月) 00:32:45
>>648 ごめんなさい。でも、とりあえず数字は出てきました
今時、コマンドプロンプトから、cl なんて打つ奴いないんだろうなあw
>>651 確かにバッチファイルを書く人くらいかもね。
実行ファイルにファイルをドラッグして入力できるしな。
>>651 linux でもそうだったらちょっとショックですね。
キーボードにより配列へデータを入力させ, その配列データの数値の平均を関数 mean() に より計算させたい. 以下の条件を満たしたプログラムを作成せよ. ただし,関数 mean() は,引数なし,戻り値なしとする. void mean(void) { } 「ヒント」 1)本プログラムのどこかに、「double data[100];」を宣言しておく。 2)本プログラムのどこかに「double heikin;」と「int kosuu;」を宣言しておく。 3)main 関数内で,配列data[] へ入力したいデータの個数 kosuu をキーボード入力させる. 4)main 関数内で,double型配列 data[]にキーボードで数値を入力させる. 5)関数 mean() の内部で 配列 data[]の値の平均を計算させる. 6)main 関数内で,関数 mean()で計算した結果をprintfで表示させる */ #include<stdio.h> int main(void) { int i; printf("データ個数(100個以下):"); scanf("%d",&kosuu); printf("平均値=%d\n",heikin); return (0); } /* 平均値を計算する関数 */ void mean(void) { } これどうやるの?
>>654 グローバル変数の使用を強要する問題ってなんか凄いな
staticを理解している事の確認も課題の一つかもしれない。
>>656 よりは頭が良い奴が考えてると思うぞ。w
>>655 ありがとうございます。
double data[100]をグローバルに指定するんですね。
見てみると「そうか!」と思いました。
>>656 この手の解法ががちがちに決まってるタイプは
直前の授業まんまなことが多いから、きっとこの宿題の前の授業がグローバル変数だったんだよ
>>659 そうなんですよ。
自動と静的、グローバルとローカルをやったんですよ。
どんな授業をしているか分からないけどひどい宿題が多いな
出席点代わりだからな そんなもんだろ
663 :
デフォルトの名無しさん :2010/10/25(月) 12:24:06
>>657 別に static である必要はないじゃろ?
>>665 問題4の解答にワロタ
授業に出ていないとどんな解答が良いのかが解らんような感じだな
>>628 void mondai4(void)
{
puts("風\n林");
puts("火\n山");
}
風林火山絡みで木刀のAAでも描けば良かったかな。
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク):nとrを入力して 組み合わせの数nCrを求めるプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows 7 [3.2] コンパイラ名とバージョン:ないのでideoneを使っています。 [3.3] 言語:C言語 [4] 期限:2010年10月29日まで [5] その他の制限:なし
> [3.2] コンパイラ名とバージョン:ないのでideoneを使っています。 これやめようよー MinGWとかあるんだからさー
[1] 授業単元:コンピュータ工学 [2] 問題文(含コード&リンク): 入力した値を一桁ずつ足してその合計を表示させよ。 サンプル input please→31415 3 + 1 + 4 + 1 + 5 = 14 ルール: stdio以外使わないこと。 配列、シフト演算子、ポインタは使わないこと。 数字の表示はprintfとし、%c %dしか使ってはいけない。 負の数が入力されるまで、入力の動作を繰り返すようにすること。 [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:Visual Studio [3.3] 言語:C [4] 期限:2010年11月01日 [5] その他の制限:ありません。
>>670 #include <stdio.h>
int main ( void )
{
int i ;
int n, r ;
int tn=1,tr=1 ;
printf ( "n=" ) ; scanf ( "%d", &n ) ;
printf ( "r=" ) ; scanf ( "%d", &r ) ;
tn = n ; tr = r ;
for ( i = 1 ; i < r ; i++ ){
tn *= (n-i) ;
}
for ( i = r-1 ; i > 1 ; i-- ){
tr *= i ;
}
printf ( "%dC%d = %d通り\n", n, r, tn/tr ) ;
}
>>673 入力されたn, r で上書きするのに tn, tr を 1 で初期化してる意味がわからない。
というか、そもそも tr の必要性を感じない。
tr *= i; のところは tn /= i; ではダメなの?
あと、n < 1 とか n < r のようなエラーとするべき場合が考慮されてない。
n < 1とかのエラーの考慮を突っ込んでるくせに 標準入力なかったときのエラーはいいのかよwww
◆QZaw55cn4cのトリ外しイビリが始まりました
要は自分より速く張られるのが気に入らないだけだろ
私ならば敬体でコメントを入れます。
あと、
>>673 の類題は
>>599 で解いています。この回答は、
>>675 の指摘がそのまま当てはまってしまいます、残念ながら。
自分がしていないことを他人に突っ込んだりはしませんが。
自分より早く問題が解かれることに対しては、やっぱり悔しいと感じるのは認めます。
680 :
277 :2010/10/26(火) 00:11:22
やっぱりテキストからデータを読み込むのはできないんでしょうか。普通に入力しかできないんですよね…
>>680 リダイレクト(CLI) で調べるか、fopen 使ったプログラムに直してください。
コマンドライン引数でファイル名受け取ったらダメなん
>>676 「標準入力なかったとき」というのが意味不明だが、
正しい標準入力されなかったときと解釈するならば、
scanf の戻り値チェックも加えておく必要があるね。
685 :
277 :2010/10/26(火) 00:19:28
>>680 http://codepad.org/GZNswf5O 実行ファイルと同じディレクトリ(フォルダ)にある data.txt を読み出します。
VC(VS) のデバッグを使って確かめるときは data.txt の場所に注意してください。
具体的にどこにおけばいいかは、私はちょっとわかりません。(VC を常用してないのです。)
687 :
デフォルトの名無しさん :2010/10/26(火) 00:28:43
>>452 の問2を教えてください。
問1は、ファイルを3つに分割するって事は3つファイルを作るんですか?
688 :
687 :2010/10/26(火) 00:32:21
あと、クラスの継承ってまだ習ってないんです
690 :
689 :2010/10/26(火) 00:39:30
あ、表示printf限定でしたね読んでませんでした
>>672 codepad重すぎワロタ
#include <stdio.h>
#define ASCII_MAGIC 48
int main( void )
{
int c, nc, sum;
nc = 0;
sum = 0;
printf("input please->");
while((c=getchar()) != EOF)
{
++nc;
if (c == '-')
break;
sum += (c - ASCII_MAGIC);
if (nc != 1)
printf(" + ");
putchar(c);
}
printf(" = %d\n", sum);
return 0;
}
input please->31415-1
3 + 1 + 4 + 1 + 5 = 14
693 :
692 :2010/10/26(火) 02:28:54
あぁダメか。 putchar(c); は printf("%c", c); だな。
また安価ミスった、死のう
>>692 動かしてみたの?
getchar() とprintf(), putchar() を交互に実行すると、最後に有る結果になるとは思えないんだけど
>>692 if (c == '-')
を
if (c == '\x\a')
にしたらうまく動いた
マチゴタ ×'\x\a' ○'\x0a'
このプログラムの標準偏差の値が正しく表示されるように書き換えてもらえませんか? 現状では計算結果がおかしいので・・・。どうかお願いします。 #include <stdio.h> #include <math.h> double ave(int v[],int n) { int i; double sum=0; for(i=0; i<n; i++) sum += v[i]; return sum/n; } double ave2(int v[], int n) { int i; double sum=0; for(i=0; i<n; i++) sum += pow(v[i],2); return sum/n; }
701 :
700 :2010/10/26(火) 10:24:30
コードの続きです double std(int v[], int n) { int i; int sa[10]; double average = ave(sa,n); for(i=0; i<10; i++) sa[i]=average-v[i]; return sqrt(ave2(sa,n)); } int main(void) { int score[] = {25, 63, 72, 54, 92, 35, 89, 95, 44, 69}; double std_score; std_score= std(score, 10); printf("標準偏差= %lf\n", std_score); return 0; }
double ave2(int v[], int n) { int i; double sum=0; double a = ave(v, n), b; for(i=0; i<n; i++) { b = v[i] - a; sum += b * b; } return sum/n; }
703 :
700 :2010/10/26(火) 10:38:45
デフォルト設定ではまぜちゃいけないことがあるのは C++でのstreamなやつとC標準関数じゃないかしら
sync_with_stdio()を呼び出しておけばいいよ
707 :
670 :2010/10/26(火) 12:26:46
>>684 これが結構難しいです。
scanf("%d", &n)
に対して文字列(たとえば ttt とか) が入ると、この ttt を取り除く方法がわかりません。
fgets() で取り除くしかないか、とか、じゃあ、scanf() をやめて fgets() + atoi() にするか、すると stdlib.h がいるなあ、とか、考えあぐねています。
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク):0から1024の間の数値を繰り返し入力して 入力回数、最大値、最小値を求めるプログラムを作成せよ。 範囲外の数値が入力されたとき終了する。 範囲外の数値は入力回数、最大値、最小値には含めない。 最初の入力で範囲外の数が入力された場合は 入力回数0 とのみ表示する [3] 環境 [3.1] OS:Windows 7 [3.2] コンパイラ名とバージョン:ないのでideoneを使っています。 [3.3] 言語:C言語 [4] 期限:2010年10月29日まで [5] その他の制限:なし
>>708 fflush(stdin) ;
じゃだめなの?
◆QZaw55cn4cはほんとにキモイなぁ
アホには一緒に見えるのかw
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 問題1 整数型配列に格納された5個の整数{8,5,12,7,9}を大きい数の順番(降順)に並べ替えて表示するプログラムを作れ。 並び替えの方法は、まず全体の最大値を選び、つぎにその最大値である数値を除いた中の最大値を求め…という方法(通称、馬鹿ソート)を使うこと。 [ヒント]2個の配列変数(1つは元データ用、1つは並び替えたデータ用)を使うと容易 問題2 問題1について「降順」を「昇順」に変えたプログラムを作成せよ。 結果は5、7、8、9、12 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:10月27日 [5] その他の制限: なし よろしくお願いします。
>>711 それはMSのCのみの思い切り機種依存してる方法
他のコンパイラでfflush(stdin);をした場合は動作未定義
>>715 馬鹿ソート?関数名も baka_sort でいいのか?
2個の配列を使うって逆になんかめんどいな
719 :
709 :2010/10/26(火) 17:37:19
>>717 馬鹿はちょっとあれなんで、ちょっとかっこよくidiot_sort位でお願いします
>>718 1つの配列で交換を行ってソートする馬鹿ソートはネットにコードがたくさん示されているので
2個でらしいです
選択ソートをわざわざ二つの配列を使ってするから”馬鹿”ソートなのか
裸の王様ソートとか
>>708 フォーマットに従っていない入力を受け付けられるようにする必要性を感じないな。
「フォーマットエラー」とか受け付けられるフォーマットの形式を出力して終了で良いんじゃないの。
バブルだろw
726 :
デフォルトの名無しさん :2010/10/26(火) 18:57:36
>>726 コードを見る限り、ヘッダファイルは足りないし、コンパイルできても入力ファイルもかなり限定的みたいだし。
何がうまくいかないのか言ってくれないと全くわからないのでサポートのしようがないな。
とりあえずハニング窓を作ってても、使ってないみたいだけど?
いやぁ〜年収1千万円程度の貧乏人だから、ソートはいつも バブルソートなんです ><;
729 :
709 :2010/10/26(火) 20:12:43
>>725 私は◆QZaw55cn4cさんは好きですよ。
すぐに回答してくれますし、
連続で質問しても嫌な感じもせずにこなしてくれますしね
自演くせーw
798 名前:デフォルトの名無しさん[sage] 投稿日:2010/10/10(日) 20:19:04 最近ideone君と◆QZaw55cn4cは自作自演なんじゃないかと思い始めて来た
自演じゃなくてマジでですよ なぜかこのスレIDが表示されないから自演に見られるのな
どっちにも好かれたくないな
つべこで言わないで◆QZaw55cn4cより先に宿題片付けろよ
ああ、人の話をろくに聞かないあたり似たもの同士だしな
やっぱり自演かw
>>740 buff に static が付いている意味が分からん。
sum に足し込んでる m % 10 をどこかに覚えておけば、出力が簡単になるのに…。
N 桁までしかサポートしないなら、覚えておく配列だって長さ N で済むじゃんか。
>>740 、
>>741 もっと単純に buff を1文字ずつ出力すればいいの。
%c 使えるんだから。
a
>>744 -10<bmi<10
こう言う書き方はできないから
-10<bmi&&bmi<10
みたいに書く
746 :
744 :2010/10/27(水) 00:37:23
>>745 おーすごい!
できました。ありがとうございました。
お前ら、デブかガリだろ。嫌な宿題だな
748 :
687 :2010/10/27(水) 00:40:11
>>686 コンパイルすると、cannot open the data file 'data.txt'.って出てしまいます
>>748 コンパイルエラー?
実行時エラーじゃなくて?
750 :
687 :2010/10/27(水) 00:41:54
誰かvisual c++でもできるように教えてくれませんか
751 :
687 :2010/10/27(水) 00:42:56
>>749 デバッグ→デバッグなしで開始にすると、そういう風に出てきます
753 :
687 :2010/10/27(水) 00:46:40
>>750 プログラム一つごとにプロジェクト一つ作ってんの?
それだったらプロジェクトの中に debug と release というフォルダが出来てるはずなんで
その両方に data.txt を置いたらうまく行くと思う
プログラム実行開始は俺は Ctrl+F5 でしてる
そうすると実行終了後いきなり画面に戻らずに一時停止するから
>>753 コンパイル通った?
通ってたら実行ファイルがdebugかreleaseにできてるから
そのフォルダの中にdata.txtをおく
そんで実行ファイルをダブルクリックしてやると多分動く
757 :
687 :2010/10/27(水) 00:56:47
>>754 それはどういう風にすればいいんですか?
>>704 ゴメン、getchar() と getch() の仕様を逆に記憶していた、どっちも最近は使ってなかったんで...
759 :
687 :2010/10/27(水) 01:01:27
debugの所にそのdataは保存しています。
nmake -f data.mak ってするの
>>757 デフォルトの状態ならマイドキュメント→Visual Studio 2010→Projects
の中をよく探せばあるはず
762 :
687 :2010/10/27(水) 01:06:41
>>761 そこまでは行ったんですが何を探すんですか
764 :
687 :2010/10/27(水) 01:11:18
>>763 exeってだけ書いてあるんですか…それは無くて、『保存した名前.exe.embed.manifest』って書いてあるものが3つくらいあります
Explorerから探すの大変なんだよな・・・ WinFM2008レジストしろよ 楽だぞ
766 :
687 :2010/10/27(水) 01:14:56
>>765 申し訳ないですが、実行結果だけ教えていただけないですか?
>>766 1: 3, 4, 2
2: 5, 1, 3
3: 0, 0, 2
4: 1, 9, 2
5: 4, 4, 4
max = 9.05539
min = 2.23607
768 :
687 :2010/10/27(水) 01:21:11
>>767 ありがとうございました。
あとは、直接定規とかで計測できないから分からないから、正しいとは分からないんですよね
769 :
687 :2010/10/27(水) 01:27:45
"cannot open the data file \'data.txt\'." "more than one datum." って日本語だとどう書けばいいですか あと、cellってcoutと違うんですか
770 :
687 :2010/10/27(水) 01:30:46
あとは、そういう英語の所を日本語に直そうと思います。
[1]C言語中級 [2]指定されたフロー構造に基づき次の仕様のプログラムを作成せよ 仕様: ★行とは、先頭か最後の区切り子からその次の区切り子までの区切り子を含まない文字列のこと ただしその次の区切り子が出現しないまま終端した場合は最後の文字列まで ★区切り子とは、改行文字(0x0A) 復改文字(0x0D),その組み合わせ(0x0D0x0A,0x0A0x0D)のいずれかと する(混在することを前提) ★標準入力から任意の長さの文字列を読み取り各行の空白スペースを除く先頭が0〜9からなる 文字列(これをキー数列と呼ぶ)でその直後が空白、タブで区切られている場合に限りその行を認識する。 それ以外の形式の場合は認識せず無視する。キー数列の長さが1024を超える場合も無視対象とする。 ★認識した行はキー数列を10進数の正整数を表すものとして、その順序(小さい順)に 整列して出力する フロー構造 main関数のみで構成。ライブラリ関数はstdio.hで定義されている関数のみを利用可能とする。 当然だが記憶領域はキー数列を記憶する領域の3倍程度しか確保できないことを前提 [3] FreeBSD上でC言語で記述しgccコンパイラで処理する。 [4] 10/30迄 以前ここで質問させていただきましたが回答いただけませんでした。 誰もできなかったみたいなので期限が今月末に延長になり、迫ってきたので もう一度お願いする次第です。
>>771 ちゃんと理解できてるかどうか自信がないから確認していい?
入力
52 this
105[tab]pen
hoge
77 a
67 is
出力
52 this
67 is
77 a
105[tab]pen
って感じでいいの?
773 :
771 :2010/10/27(水) 01:49:34
>>771 > キー数列の長さが1024を超える場合も無視対象とする
とあるけど、1024桁以下のキー数列(整数化できない長い文字列)は認めるって事だと非常に難しいと思うんだけど
問題に誤りは無いの?
> 当然だが記憶領域はキー数列を記憶する領域の3倍程度しか確保できないことを前提
これも不思議だな
全ての行の入力が終了した後(そもそも入力終了の判定条件も記述されていないな)にソートして一括出力するなら、
バッファに溜め込む必要が有ると思うのだけど、キー数列の3倍って意味わかめ...
仕様に疑問が有りすぎるから誰も手を付けなかったように見える問題だな
ああ、1024を超えるななくて1024桁を超えるって事か すごい多いなw
776 :
デフォルトの名無しさん :2010/10/27(水) 09:09:57
うん、整数化というか scanf( "%d", &hoge ); では読み込めない場合は、 文字列として扱って、最初は桁数で大小比較→strcmp() とかになると思うけど、stdio.h しか使えないとか... strlen() や strcmp() も自作しろって事ですか?
しかしmain関数のみって書いてあるんだよな コピペしろとでもいうのか いろいろ謎すぎるwww
君たちー!C言語で儲けているかーい?
前スレの639(前スレの633=現スレの
>>771 )と現スレの
>>772 が違うみたいなんだけど、数字文字混在でいいんだよね?
639 デフォルトの名無しさん2010/10/09(土) 08:37:26
>>633 先頭が数字でそのあとは文字でもよいのかなと思ってよむと、そうではなくて、全部数字でないと
いけないらしい。ここの部分は出題の文として適切でないから書き直した方がいい。
先頭が0〜9からなる文字列 で区切ると文章がおかしくなることないか?
>>779 キー数列と「呼んだり」、後で10進数として認識しなくてはならないと
いうことだから、やはり数字列と考えるべきでしょう。
要するに、 キー数列と認識した行に振った行番号だけでソートはする。 BIGNUMという訳にはいかないのだから、 ソートの比較は桁の少ない方の頭に0を付加して、 桁を揃えた上で、文字列比較をすればよい。 最後に整列された列から、行番号をキーに 配列から行を取り出せばよい
最後に整列された列の行番号をキーに配列から行を取り出せばよい ですね。
気持ち悪い
>>778 「◆QZaw55cn4c が有償で宿題をするスレ」をいつかたちあげようか、と思います。
言語は C, C++, Java, C#, scheme なんかが需要があるでしょうか。
なんか、人気はあるみたいですから、1億は無理ですが小遣いくらいは稼げるかもしれません。
死ぬほど大変そうな事業だな
>>782 それを strlen(), strcmp() 使わずに main() だけで処理するのね....俺は書きたくないな
bignumどうすんだよw それもmainの中でガンバレってか? 悪夢過ぎる。
ナヌ。 strcmp()を自分で定義することもできないのか・・・。 やってられないw
gccだからmain関数の中にstrcmp書いちまおうぜww
>C言語中級 上級ではどうなるんだろ
>>771 ぶっちゃけもう回答する奴出てこないだろうからあきらめた方がいいよ
問題がおかしいのか
>>711 が写し間違ったのか確認すべきだろうな
『キー数列の長さが1024を超える場合』が『キー数列の大きさが1024を超える場合』ならそんなに変でもない
俺としては『当然だが記憶領域はキー数列を記憶する領域の3倍程度しか確保できないことを前提』の方が謎なんだけど
...何故『当然』?さらには何故『3倍』?
797 :
デフォルトの名無しさん :2010/10/27(水) 18:12:54
>>454 でもらったプログラムって、
3つに分けて印刷とかした方がいいですか?それとも、
>>454 みたいに1つの所で3つに区切れば大丈夫ですか?
あと、//で始まる部分って必要ですか?
紙で提出するのかよw
>>797 3枚のチラシの裏に手書きで書き写せ
//も必要
800 :
デフォルトの名無しさん :2010/10/27(水) 18:59:53
>>797 include の2重定義防止の部分は外した方が良いと思う、人にやって貰ったのがバレバレ
801 :
デフォルトの名無しさん :2010/10/27(水) 19:24:43
てす
802 :
デフォルトの名無しさん :2010/10/27(水) 22:16:46
>>802 codepad が何故か開けないので何行目か指摘できないんだけど、seiseki.h(だっけか?) の先頭と最後で
#ifndef なんとか
#define なんとか
#endif // なんとか
みたいな記述が有る行の事
これは仕事でヘッダーファイルを書くようになれば常識的な事なんだけど、まだ教わってないと思うし(教わらない可能盛大)、
独自に作成したヘッダーが1つしか無い場合は必要ない
嘘教えちゃいかんよ
>作成したヘッダーが1つしか無い場合は必要ない まあ実用上は多分問題はないだろうけど必要ないかと言われれば必要だね
806 :
デフォルトの名無しさん :2010/10/28(木) 00:20:19
>>803 じゃあ、seiseki.hの二重定義防止部分だけ除けばいいんですか。
あと、他の//とかはどうしましょう
808 :
デフォルトの名無しさん :2010/10/28(木) 00:24:42
>>807 //#include "seiseki.h"
これはないとエラーが出ました。
オセロで絶対に勝つプログラムのコードを教えてちょっ♪
どんな結果だろうと、「オセロなんかで暇つぶししてる負けです」と表示する。
「オセロなんかで暇つぶししてるあなたの負けです」
>>810 持ち時間を1秒に設定しておく。
プログラムは置けるところに0.01秒とかで置いていけば、時間切れで勝てる。
>>804 まぁ一つのソースコードで二回 include すれば2重定義になるけどね
そういう非常識な事は普通考えんでしょ
>>808 include 文をコメントアウトしたままなら、ファイルを分割した時はエラーになるわな
インクルードガードも知らないのか
>>814 つか、初心者なのなのバレバレ
なに偉そうにアドバイスしてんの?
無能な働き者はいらない
有能な怠け者がほしい
ハイパーとか ウルトラとかな
おう、盛大にごばくしたごめん
>>814 一つのソースから複数回 include されることなど、日常茶飯事だよ
825 :
デフォルトの名無しさん :2010/10/28(木) 22:24:26
>>809 'seiseki':識別子がクラス名でも名前空間名でもありません。とかです。
>>825 ああ、三つのファイルに分けたんだっけ
じゃあ//だけ消して後ろ残せばいい
>>824 技法としてあるだろうけど、日常茶飯事的に使われるものなのかは知らない
828 :
デフォルトの名無しさん :2010/10/28(木) 22:42:26
>>826 #ifndef INCLUDE_GUARD_SEISEKI
#define INCLUDE_GUARD_SEISEKI
#endif
あと、二重定義のこれも消した方がいいんですよね。
授業レベルじゃいらないってだけであっても害はない
830 :
デフォルトの名無しさん :2010/10/28(木) 23:08:33
831 :
デフォルトの名無しさん :2010/10/28(木) 23:12:46
>>316 のmore than one datumってどういう意味ですか?
1つ以上データを入力せよ
って事ですか?
832 :
831 :2010/10/28(木) 23:30:02
[1] 授業単元: 英語 [2] 問題文:"1つ以上データを入力せよ" を英訳せよ [3] 期限: 今すぐ [4] その他の制限: 僕、小学生です。
>>824 ユーザ定義のヘッダファイルがたった1つで、しかもインクルードガードが必要で、
1つのソースから複数回そのヘッダファイルを日常茶飯事で include していたら、
悪いけど間違いなくグーで殴る。
小学生なら仕方ないな
836 :
デフォルトの名無しさん :2010/10/28(木) 23:42:10
837 :
831 :2010/10/28(木) 23:42:49
>>835 先生にそれじゃ、複数のデータでしょって言われたんです><
で、"1つ以上データを入力せよ"は英訳するとどうなるんですか?
equal or more than とかな
ぐーぐる先生のお答え Enter one or more data
840 :
831 :2010/10/28(木) 23:53:03
ぐーぐる先生 ありがとうございました。
>>841 ○ キー数列の長さが1024を超える場合も無視対象とする
× キー数の大きさが1024を超える場合も無視対象とする
なので皆は手を出して居なかった訳だが...
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 問題1 料理名の入力や材料名をキーボードより入力して、人数分の料理のレシピを計算して表示するプログラムを作成しなさい. 今日の料理名は何ですか:(料理名)
材料名は何ですか:( 材料)
( 材料) は一人当たり何グラム必要ですか:(分量)
何人分の料理を作りますか:(人数)
==レシピ== 今日は、(料理名)を作りましょう。
「(料理名)を(人数)人分作るには,(改行)
( 材料) が ( 分量×人数 ) グラム必要です」
* 人数、分量はキーボードから入力した値を使用してください。 printf 関数内で%sや%dを使用して、文字列(料理名・材料名)や整数値(人数・分量)を表示すること。 問題2 桁数を指定した書式指定(%s、%d、%f)とprintf()関数を用いて、下記の一覧表を表示するプログラムを作成しなさい。 【表示する表】 商品A 商品B 商品C 数量 0000012 0000345 0006789 重量 1.234 543.210 12.345 *文字列、整数値や実数値の桁数を指定する方法に注意しなさい。 *表の枠線は必要ありません。各列の先頭が揃っている必要があります。 問題3 整数を1つ読み込んで、その値が、1 の時は 「 Go! 」 、 2または3の時、「 Slow ! 」 、 それ以外の時「 Stop! 」と表示するプログラムを 作成しなさい。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:10月31日 [5] その他の制限: なし よろしくお願いします。
844 :
デフォルトの名無しさん :2010/10/29(金) 09:39:07
>>454 のプログラムを
1.コンストラクタから実装してください
2.10人分の成績データをファイルから入力してください(名前は01〜10でいいです)
実行結果を教えてください。
>>844 >>454 はすでにコンストラクタがあるのに何を言ってるのかよく分からないが
いちおうコンストラクタで計算するようにすればいいんだろうという解釈でやってみた
http://codepad.org/BVCll4KX 結果は以下
0さんの平均点は0です
1さんの平均点は23です
2さんの平均点は47です
3さんの平均点は71です
4さんの平均点は28です
5さんの平均点は51です
6さんの平均点は42です
7さんの平均点は32です
8さんの平均点は22です
9さんの平均点は46です
847 :
デフォルトの名無しさん :2010/10/29(金) 14:38:55
>>846 ありがとうございます。では逆に
>>454 をコンストラクタ使わないで書くとどうなりますか?
麻呂はリストはもうやらないでおじゃる
849 :
デフォルトの名無しさん :2010/10/29(金) 14:58:38
ちゃんと書きなおしますね
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク):
>>454 をコンストラクタを使わないで書いてください。
あと、コンストラクタを使ったプログラム(
>>454 )に10人分の成績データをファイルから入力してください(名前は01〜10でいいです)
[3] 環境
[3.1] OS:Linux
[3.3] 言語: C++
[4] 期限: 2010年11月2日まで
[5] その他の制限: なるべく難しくしないでお願いします。あと、using namespace std;を入れてください。あと、'\n'にしてください
>>849 コンストラクタをメンバ関数に置き換えて残りはニコイチにしてみた
http://codepad.org/vsj2cvHo 結果
0さんの平均点は0です
1さんの平均点は23.6667です
2さんの平均点は47.3333です
3さんの平均点は71です
4さんの平均点は28です
5さんの平均点は51.6667です
6さんの平均点は42です
7さんの平均点は32.3333です
8さんの平均点は22.6667です
9さんの平均点は46.3333です
851 :
デフォルトの名無しさん :2010/10/29(金) 15:20:29
mCnを求めるプログラミングを教えて下さい。 ちなみにm=6n=3です。 関数部分でc = factorial(n)/factorial(n-r)/factorial(r)を使ってください。
#include <stdio.h> int factorial(int n) { int i, f = 1; for(i = 2; i <= n; i++) f *= i; return f; } int nCr(int n, int r) { return factorial(n) / factorial(n - r) / factorial(r); } int main(void) { int m = 6, n = 3; printf("6C3 = %d\n", nCr(m, n)); return 0; }
すいません 再帰とかいうのを使ってください
>>851 はネタ?落ち着いて仕様を確認してテンプレを埋めれ
855 :
デフォルトの名無しさん :2010/10/29(金) 16:15:09
>>850 >>454 自体をコンストラクタ使わないとどうなりますか?
それは、10人分の平均点のプログラムですよね
nCrを階乗で求めるのは邪道。やはりパスカルの三角形。
てか階乗でやるにしても
>>851 の方法だと簡単にオーバーフローしそう
[1] プログラミング演習 [2] 10個のデータ{2, 9, 4, 3, 4, 5, 7, 9, 3, 5}を与えて、その値を*を使い 下向きのグラフで表示してください。数値一個当たり*一個で表示しなければいけません。 実行例 -------------------- 2 * * [3] 環境 [3.1] OS:windows7 [3.2] コンパイラ名 visualstdio2010 [3.3] 言語 C言語 [4] 期限: 2010年10月29日土曜日夜6時までです。 [5] 配列までです。グラフの上についている---の数は20個です。 すみません。実行例のところずれてしまって2の行しかかけませんでした。判りづらくてしみません。
#include <stdio.h> int main(void) { int i, j, a[10] = {2, 9, 4, 3, 4, 5, 7, 9, 3, 5}, max; for(max = a[0], i = 1; i < 10; i++) if(max < a[i]) max = a[i]; printf("--------------------\n"); for(i = 0; i < 10; i++) printf("%d ", a[i]); putchar('\n'); for(i = 0; i < max; i++) { for(j = 0; j < 10; j++) printf("%c ", a[j] > i ? '*' : ' '); printf("\n"); } return 0; }
862 :
デフォルトの名無しさん :2010/10/29(金) 18:16:06
992 / 1375 =
863 :
デフォルトの名無しさん :2010/10/29(金) 19:58:31
同じ高校に通っていた小学校から一緒だった知人が 茨城大に推薦入学したなぁ・・・もう13年も前の話。
865 :
デフォルトの名無しさん :2010/10/29(金) 21:35:47
>>850 データをファイルから入力するっていうのは無理でしょうか
866 :
771 :2010/10/29(金) 23:13:22
>>841 亀レスですがありがとうございました。
諦めかけてたところでした。
ただマクロを自分で定義して良いのかどうかちょっと
疑問です。CPPで展開したのを改造してみようかと
思ってます。重ね重ねどうもありがとうございました。
867 :
841 :2010/10/29(金) 23:39:00
868 :
841 :2010/10/29(金) 23:46:10
870 :
841 :2010/10/29(金) 23:57:15
>>871 お前は本当に日本語の問題文が読めないやつだな。
とりあえず abs を使ってる時点で、有向グラフの意味を正しく理解しているのか聞きたい。
あと、重みを距離と読み替えてあげたとしても、求めるものは最大値だぞ。
>>872 ご指摘大感謝です。
最大値を求めるとは、すっかり落とし穴にはまってしまいました。(viterbi のアルゴリズムを解説しているページは最小値ばかりでしたから)
なるほど、最大値ならば有向グラフである意味もありますね。
>>863 訂正します。なお最大値をとる経路が複数あった場合でもひとつしか列挙しないことは前と同じです。(その可能性は記録しています。)
ただ今回の問題では最大値をとる経路はひとつだけでした。
http://codepad.org/g0C9fyIh
なんでそんなに日本語読めないの?
しょっちゅう問題を誤読してることについて聞いたんだけど、
>>873 にまだおかしなところがあることを指摘してると思ったのか
本当になんでそんなに日本語読めないの?
>>877 いや逆に日本語としての理解はある意味まっとうだとして
出題意図と求められるアウトを把握するという意味においては
まだ問題あるという懸念が残らないでもないというように
逆の意味で認識してしまうのも致し方ないのでは?
まあセミ腹は替えられないが、あんたの日本語は大丈夫?
早くカレンダーこいやー
>>878 すまん、意味がわからん
俺の日本語力もまだまだですねw
>>880 コマンドライン引数かコマンドラインで入力するかして欲しいんだろう
まぁどっちか分からないし、どういう風にして欲しいかも分からんからどうにもならんだろうが
急に宿題が減ったな。今まで自演だったのだろうか
>>848 リストというお題をやるとかやらないとかいう問題ではなくて、
>>863 のような問題に取り組めば必然的にリストをはじめとする諸々のデータ構造を取り扱わなければならない件について
886 :
デフォルトの名無しさん :2010/10/30(土) 18:14:11
>>873 ありがとうございます。
問題分の実行結果のように
STARTから表示するにはどうしたらいいでしょうか?
なんの拘りか知らないが、何も言われなければ絶対に実行例と違った表示方法にするよなw
>>888 俺、Viterbiアルゴリズムっての知らないからわからないが、
それViterbiアルゴリズム使ってるの?
これいかにも情報工学らしい課題で、情報系出マが得意とする課題なんだろな
人の回答に対しては題意に関係ないところの手抜きにツマラナイつっこみ入れるくせによくも言えた物だ
>>890 Viterbi でぐぐってから出直してきなよ。
◆QZaw55cn4cはほんとにキモイなぁ
俺は嫌いじゃないぜ?
確かに自分は問題読まないくせに 他人の回答の問題とは関係ない部分に突っ込みいれるよねw
俺は嫌い
自覚無いのか、真性だな
トリップ外してるからしらをきるつもりかもよw
>>893 一応、Wikipediaは見た
で、思ったのがマキシマムエントロピー法みたいなものかなって位
なんか解答出したのが、◆QZaw55cn4cだけっていうのがおいおいって感じだな
ここの連中、情報工学、ないしはそれに近い学科出たの多いんだろ?
トリップをつけるかつけないかで内容をかえたりしませんが。
しているように見えますかそうですか。
で、
>>896 >他人の回答の問題とは関係ない部分に突っ込みいれるよねw
の例を教えてください。反省材料にいたします。
>>901 文句があるなら自分でやってみせればいいだろ
>>901 いや、他の問題でも回答がでてしまうと私もあきらめてしまいます。一個だけ、というのはよくあることではないかと。
>>902 ◆QZaw55cn4c、基地外印w付に対してそんなこと言ってもな
>>901 解答するより間違いを指摘できる方がスキルが必要なのは知ってる?
うはwwww自分でいっちゃったよwwwwwwww
>>906 どちらかというと相関はないと思うのですが。
>>904 ウソつくなw
他人の回答見てからようやく題意理解したのに、細部だけ変えた答えあげたことあるだろw
>>909 そんな志の低い回答はしたことはありません。単に簡単な問題でかぶってしまっただけなのでは?
>>903 俺はViterbiアルゴリズムっての知らないって言ってるだろ
>>906 有向グラフついては問題指摘あるが
>>888 のViterbiアルゴリズムについて何か間違いあるのか?
Viterbiアルゴリズムって、マなら常識アルゴリズム?
>>911 アルゴリズムに名前が付いているものは、基本的に全部有名ですが。
>>911 コスト最大経路を求めるべきところを、コスト最小経路を求めてしまったんです。ただ経路探索の方法は同じです。
>>906 大きなプログラムを書いたことがない人の典型的な反論だね。
>>912 問題が掲載された時刻・第一の回答が出た時刻・私が回答した時刻には余り差がないですね。これは多分かぶってしまったんでしょう。
問題もしごく単純なものですし。
138と140がお前で、141が答えを書くまで問題が理解できてないのは無視かよ
>>916 しごく単純な問題すらまともに読めないバカってことを自白した気分はどんな感じ?
>>908 相関あるよ。
他人が書いたコードを1度で良いからデバッグしてみなよ。
自分で書いたコードだけ眺めていたら気づけないことがたくさんあると気づけるから。
◆QZaw55cn4cはほんとにキモイなぁ
でも俺は嫌いじゃないぜ?
◆QZaw55cn4cがスレにいる時にしか擁護レスがつかない件について
>>917 138 はお約束の質問で私もしそうなものなのは認めますが、140は違うとおもいますね。
ただ、こんな小さなサイズの問題は正直どうでもよくて、たとえば、
>>888 とか、
>>156 とか、
>>316 、
>>738 くらいのもののほうが楽しいです。
◆QZaw55cn4cってやっぱこのスレのスパー火ーろーなんだな 過疎ってたのが超にぎやかなってきたな
そうやってすぐ忘れるから、ちっとも成長しないんだよ
>>926 138 と 140 が同じだとしたのは他人の予測でしかないでしょうね。
それにしてもちっちゃな問題にこだわっているのですね。
こういう人に限ってこのスレは自分がいないと成り立たないみたいな勘違いしてるんだよね 別にそんなことないのに
自分のミスをちっちゃな問題にして流すヤツは、どこに行っても嫌われるぞw
問題読めない◆QZaw55cn4cがいると荒れるなぁ
>>931 いつもいつも問題文を誤読するから「ちっちゃな問題」じゃないけどな
◆QZaw55cn4cより先に解答すれば全てうまく行く
確かに誤読は直っていませんね。すぐに投稿せずに、一日寝かせてから投稿するようにするのも手かもしれませんね。
938 :
デフォルトの名無しさん :2010/10/30(土) 21:16:11
>>860 お礼が送れて申し訳ありません。
ご回答ありがとうございます。
申し訳ありません。
実行例のところ
2
--------------------
*
*
でした。
数字の下側に---がくるのです。申し訳ありません。
自分でどうやって解決すれば良いかわからないので、まだおられたら修正お願いいたします。
940 :
デフォルトの名無しさん :2010/10/30(土) 21:19:36
>>939 表示の順番を入れ替えるだけだろw
#include <stdio.h>
int main(void)
{
int i, j, a[10] = {2, 9, 4, 3, 4, 5, 7, 9, 3, 5}, max;
for(max = a[0], i = 1; i < 10; i++) if(max < a[i]) max = a[i];
for(i = 0; i < 10; i++) printf("%d ", a[i]);
putchar('\n');
printf("--------------------\n");
for(i = 0; i < max; i++) {
for(j = 0; j < 10; j++) printf("%c ", a[j] > i ? '*' : ' ');
printf("\n");
}
return 0;
}
>>937 >一日寝かせてから
じゃなく、期限近くまで寝かせてからだす。
それまで解答がなく、で、お前の解答にいちゃもん付いたら
時間あったんのに解答しないでギャーギャー言うなら言うお前が解答しろって基地れ
>>937 誤読を直すためには、プログラムを日本語でも良いのでコメントから書くこと。
そのコメント通りの実行で、題意を満たしていることを必ず確認する。
後は、コメントを満たすように実装するだけ。
>>940 >レポートとして受理されたものにつき,後日(24日ぐらいから)1人あたり15分程度の口頭試問を行います.そこで提出レポートの理解状況を確認します.理解できていれば単位を取得することができます.
これはどうするんだ?
日当用意するしかないだろう
>>942 コードに対するコメントはありがたく頂戴するものであって、逆切れするつもりは毛頭ないのですけれども。
>>943 コメントは往々にして嘘をつく(つまりコードの改変にコメントが追いつかないことがある)のであまりしないのですが、
コメントを先に書いてしまうというのはひとつの手かもしれませんね。
ともかく、今までのような目から手へのやりかたは、そろそろやめにしておきます。
口頭試問ワロタ
[1] 授業単元:プログラムとアルゴリズム
[2] 問題文(含コード&リンク):整数配列aとその長さnを渡して、配列のそれぞれの要素を10倍して戻す関数Funcを作成し、必要な追加を行って動作を確認しなさい。
下敷きとするソースコードは以下のURL(jpgで見にくくてすみません)でお願いします。
http://pc.gban.jp/?p=24057.jpg [3] 環境
[3.1] OS:Windows 7
[3.2] コンパイラ名とバージョン:gcc バージョンは最新です
[3.3] 言語:C言語
[4] 期限:次の火曜日まで
[5] その他の制限:特になし
よろしくお願い致しますm(_ _)m
OCR使ったらダメだった。もうすこし高解像度の画像にして欲しいよ。
950 :
948 :2010/10/30(土) 22:51:15
>>948 void Func(int *a, int n) {
int i;
for (i = 0; i < n; i++) {
a[i] *= 10;
}
}
>>948 こんなのでもOK。
void Func(int *a, int n) {
for (; n >= 0; n--) {
a[n] *= 10;
}
}
>>948 すみません、
>>952 には1箇所間違いがありました。
void Func(int *a, int n) {
for (n = n - 1; n >= 0; n--) {
a[n] *= 10;
}
}
954 :
デフォルトの名無しさん :2010/10/30(土) 23:28:28
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 次のプログラムの改善案を作って実行結果を表示せよ。そしてどの部分を改良したか必ず書くこと。 例・空白に関する仮定なし 例・エラーチェック char c; for (stackinit(); scanf(“%1c”, &c) != EOF; ) { if (c == ‘)’) printf(“%1c”, (char) pop()); if (c == ‘+’) push((int) c); if (c == ‘*’) push((int) c); while (‘0’ <= c && c <= ‘9’) { printf(“%1c”, c); scanf(“%1c”, &c); } if (c != ‘(’) printf(“ ”); } printf(“\n”); [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
for(;--n>=0;)
957 :
デフォルトの名無しさん :2010/10/30(土) 23:44:23
954に追記ですが実行した結果何が改善されたかも書いてくれるとうれしいです。
958 :
デフォルトの名無しさん :2010/10/30(土) 23:45:13
>>955 それなら、while(--n>=0) って書くわ。
>>954 聞きたいことが山ほどあるんだが。
これ、問題文の一部じゃないの? 以下そう考える理由
・「空白に関する仮定なし」…唐突すぎて意味不明
・stackinit, pop, push の関数定義がない
・「main の中身もお願いします」って、じゃあ [2] に書いてあるものは何?
エラーチェックは、かろうじて最初に「)」が来たときぐらいは分かった。
他にもエラーにしなければならないものがあるなら教えてくれ。
ある形式の入力を変換して出力するものだろうけど、形式がわからんと話にならん。
961 :
948 :2010/10/31(日) 00:13:32
962 :
デフォルトの名無しさん :2010/10/31(日) 00:35:58
>>960 問題文に定義として次のようなものがありました。
仮定:
演算子,被演算子,括弧
は空白で区切られている。
963 :
デフォルトの名無しさん :2010/10/31(日) 00:40:24
>>960 あとこれもありました
struct stack *push (int v, struct stack *s)
{
if (++(s->pt) >= s->mx)
error_id("%s overflows\n", s->id);
s->bd[s->pt] = v;
return s;
}
int pop (struct stack *s)
{
if (s->pt < 0)
error_id("empty %s is popped\n", s->id);
return s->bd[(s->pt)--];
}
int top (struct stack *s)
{
if (s->pt < 0)
error_id(“empty %s is referred\n”, s->id);
return s->bd[s->pt];
}
int isempty (struct stack *s)
{
return (s->pt < 0);
964 :
デフォルトの名無しさん :2010/10/31(日) 03:09:54
>>963 そのコードにも定義されてない struct stack って構造体や、
error_id って関数があるなぁ。
授業の単位を取る気が少しでもあるなら、もうちょっと真面目に勉強しなよ。
最大じゃなくて最小か ちょっと無理だな
何が入力されても-∞でいいんじゃね?
>>965 struct stack{
int mx; int pt; int id; int* bd;
};
だろうね
error_id() は引数を printf() で出力して exit() するんだろうな
謎なのは stackinit(), push(), pop() の引数が足りない事だな
それ以前に改善しろってだけじゃ何をどうすれば良いやら....
エスパーになって想像すると
>>954 のコードはグローバル変数の struct stack を使用するシングルインスタンス前提だが、
>>963 のコードを利用してマルチインスタンス可能にせよって問題なのか?
>>941 御回答有難うございます!
すみません…。頭だけで考えてました…。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) *記号を使ってでsin曲線を描け。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:11月2日 [5] その他の制限: なし よろしくお願いします。
>>967-968 実はこれ、
動作させる計算機で扱える最小整数値をwindows、VC9、while、math.hを使って求めよと言う問題ですよ
itaniumのwinだとどんな値になるんだろ
つまんね
>>966 やってみたぜ!
(a) 必要ない
(b) (n + 1) * (n + 1) - n * n <= d
(c) "(d - 1) / 2 以下であれば常に成立するので最少のnは存在しない" と出力する ← これを四角で囲んどく
(d)
#include <stdio.h>
int main() {
while (0) {}
printf("d = ");
getchar();
puts("(d - 1) / 2 以下のnであれば不等式は常に成立するので最少のnは存在しない");
return 0;
}
「最少」の定義に関する考察も加えないとな
976 :
デフォルトの名無しさん :2010/10/31(日) 17:06:20
スカ画像も交じってんじゃねぇか うんこはいらね
>>969 それくらいはスタックやエラー処理を書いたことあれば誰だって想像できる。
出題者があまりにも解答者のことを考えてないので書いて教えただけ。
stackinit がまだ出てこないから、スタックサイズが相変わらず不明だし。
もう私は、
>>954 の相手はしないことにしたよ。
>>972 C 言語の整数を表現するための型を決定した瞬間に、使用コンパイラの実装依存で決まるだろ。
INT_MIN、LLONG_MINをwhileループで求めよってことだよ
>>977 stackinit() は pt を 0 にするだけだろうな
mx の設定や bd の確保する関数は別に有るんだろう
ソース不足より出題の意図が判らんから誰もいじりもしない
せっかくいじってくれる人が出てきても反応無しって事はもう諦めてるかも知れんね
>>981 それよりも聖徳太子知らない?聖徳太子。和の精神(ry
983 :
デフォルトの名無しさん :2010/10/31(日) 21:18:30
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク) count をもつqueue(待ち行列)を実現せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限:11月3日 [5] その他の制限: #include <stdio.h>からはじめること。 mainの中身もお願いします。
986 :
デフォルトの名無しさん :2010/10/31(日) 22:13:25
>>983 <stdio.h> から始めるってのは例によってC言語で書けって事?
queue に入れる型は?
C++で良いならテンプレートクラスは習った?
987 :
デフォルトの名無しさん :2010/10/31(日) 22:19:08
>>べつに#include <stdio.h>から始めなくても大丈夫です 型は特に指定されていません。 テンプレートは習っています。
次スレ立てます
#include <stdio.h> #include <stdlib.h> #define SNUM 5 void load_data(char *fname, int *code, int *price, char name[][30]); void print_data(int *code, int *price, char name[][30]); int main (void) {int i,code[SNUM]={0},price[SNUM]={0}; char name[SNUM][30]={0},fname[30]="product.txt"; load_data(fname, code, price, name); //商品情報の読み込み print_data(code, price, name); //商品情報の表示 return 0;} void load_data(char *fname, int *code, int *price, char name[][30]){ FILE *fp; //ファイルポインタ int i; //カウンタ char temp[256]; fp=fopen(fname, "r"); if(fp==NULL){ printf("Can't open %s!\n", fname); exit(1);} fgets(temp, 256, fp); for(i=0; i<SNUM; i++) { fscanf(fp, "%d%s%d", &code[i], &name[i], &price[i]);} fclose(fp);} void print_data(int *code, int *price, char name[][30]) {int i; //カウンタ for(i=0; i<SNUM; i++) { printf("%d\t%s\t%d\n", code[i], name[i], price[i]); }} プログラミング演習の問題です。 これでproduct.txtからデータを読み込み表示したいのですが、上手く表示できません教えてください。
993 :
デフォルトの名無しさん :2010/11/01(月) 00:20:25
>>991 product.txt って一行に全データが入ってるの?
普通は一行にいレコードだと思うけど、ソース見ると一行しか読んでないよね
fscanf(fp, "%d%s%d", &code[i], &name[i], &price[i]);}
普通は nama[i] って書くけど & 付けても意味は同じだっけ?
994 :
デフォルトの名無しさん :2010/11/01(月) 00:21:06
× いレコード ○ 1レコード
product.txtはそんな形式のなの? fgets(temp, 256, fp); する意味は何?
system("cat product.txt");
>>996 特になかったです。
事故解決しました、すいません。
1000なら寝る
あ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。