C/C++の宿題片付けます 141代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/10/13(水) 23:03:19【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
C/C++の宿題片付けます 140代目
http://hibari.2ch.net/test/read.cgi/tech/1284632294/
0002デフォルトの名無しさん
2010/10/14(木) 01:48:47int combi(int n, int k)
{
int answer, i, j;
if (i < 30) {
answer = 1;
これコンパイルしたら「初期化されてない i が使用されます」って警告されたぞ
確かにバグっていると思わないか?
0003デフォルトの名無しさん
2010/10/14(木) 01:50:55n < 30の間違いでした
すいません
0004デフォルトの名無しさん
2010/10/14(木) 01:56:192: 2
3: 3
4: 6
〜途中省略〜
31: 300540195
32: 601080390
33: 1166803110
34: -1961361076
35: 481209656
36: 962419312
こんな感じで i==34 になったらオーバーフローしてるな
続行するには何かキーを押してください . . .
0005デフォルトの名無しさん
2010/10/14(木) 01:58:190006デフォルトの名無しさん
2010/10/14(木) 01:59:31なぜ狂うんでしょうか
0007デフォルトの名無しさん
2010/10/14(木) 02:01:272147483647
C(34,17)は
2333606220
だからこれでいいんじゃね
あと全部再帰で書いたほうがきれいだと思う。
0008デフォルトの名無しさん
2010/10/14(木) 02:02:11いや、オーバーフローする値だぞ
0009デフォルトの名無しさん
2010/10/14(木) 02:03:52long 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;
}
0010デフォルトの名無しさん
2010/10/14(木) 02:05:00>出力も%dのみでお願いします
0011デフォルトの名無しさん
2010/10/14(木) 02:05:430012デフォルトの名無しさん
2010/10/14(木) 02:06:570013デフォルトの名無しさん
2010/10/14(木) 02:07:33http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10946.txt
こうでしょうか
0014デフォルトの名無しさん
2010/10/14(木) 02:07:34もうこれでいいだろ
0015デフォルトの名無しさん
2010/10/14(木) 02:09:19そうでしたか
int型は2^32(?)までおkみたいな話を聞いたようなきがしてて
勘違いでした
0016デフォルトの名無しさん
2010/10/14(木) 02:11:24> int answer, i, j;
これは不要だね
どちらにしろ i == 33 までしか計算できないようだ
0017デフォルトの名無しさん
2010/10/14(木) 02:11:510018デフォルトの名無しさん
2010/10/14(木) 02:14:262^31だろ
2^32まで行けるのはunsigned
0019デフォルトの名無しさん
2010/10/14(木) 02:21:110020デフォルトの名無しさん
2010/10/14(木) 02:24:20ここにあるじゃん
http://matsumoto-lab.hp.infoseek.co.jp/chapter03/algo04.html
0021デフォルトの名無しさん
2010/10/14(木) 02:25:55符号無しで2^32 - 1までおk
0022デフォルトの名無しさん
2010/10/14(木) 02:37:30【質問テンプレ】
[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] その他の制限: 考え方だけ教えてもらえれば頑張ります。
0023デフォルトの名無しさん
2010/10/14(木) 02:45:54すごい読むのに苦労したw
えーとpと手持ちの額を受け取ってboolを返す関数を考えればいいのかな
あと配列の大きさ的にa,b,cで使えるお金とa,b,cでを使える商品はないんだよね?
なんか力づくでループ回せばイケそうだけど
0024デフォルトの名無しさん
2010/10/14(木) 02:50:46>すごい読むのに苦労したw
すんません;;pdfとか置いといてくれればいいんですがなぜか毎回口頭なんですよね
>えーとpと手持ちの額を受け取ってboolを返す関数を考えればいいのかな
>あと配列の大きさ的にa,b,cで使えるお金とa,b,cでを使える商品はないんだよね?
多分そうだと思います
>なんか力づくでループ回せばイケそうだけど
もうちょっとヒントくれませんか、力ずくでも何でも解きたいので
0025デフォルトの名無しさん
2010/10/14(木) 05:14:310026デフォルトの名無しさん
2010/10/14(木) 05:39:45今必要十分条件べた書きしようとしたら多すぎて秋田
0027デフォルトの名無しさん
2010/10/14(木) 07:38:100028デフォルトの名無しさん
2010/10/14(木) 11:37:23与えられた合計から払える手持ちの組み合わせを全て出せってことじゃなくて
合計と手持ちが与えられて
その手持ちで払いきれるかどうかを出せば良いんだよね
0029デフォルトの名無しさん
2010/10/14(木) 11:41:36a, ab, ac, ad, ae, b, bc, bd, be, c, cd, ce, d, de, e
なら bc は p[6] なんだが問題文の書き間違い?
0030デフォルトの名無しさん
2010/10/14(木) 11:43:51ex)を見ればp[6]のミスだってことはわかるだろ
0031デフォルトの名無しさん
2010/10/14(木) 11:47:39{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
であるとき支払いは可能?不可能?
0032デフォルトの名無しさん
2010/10/14(木) 11:50:170033デフォルトの名無しさん
2010/10/14(木) 14:26:27[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] その他の制限:
0034デフォルトの名無しさん
2010/10/14(木) 14:28:510035デフォルトの名無しさん
2010/10/14(木) 14:29:190036デフォルトの名無しさん
2010/10/14(木) 14:33:110037デフォルトの名無しさん
2010/10/14(木) 15:50:290038デフォルトの名無しさん
2010/10/14(木) 15:51:23int main(void)
{
printf("日の丸の国旗");
return 0;
}
0039デフォルトの名無しさん
2010/10/14(木) 15:59:36日の丸の画像です
0040デフォルトの名無しさん
2010/10/14(木) 16:06:21int main(void)
{
printf("日の丸の画像");
return 0;
}
0041デフォルトの名無しさん
2010/10/14(木) 16:10:38ちがいます
日の丸の絵を表示してほしいんです
0042デフォルトの名無しさん
2010/10/14(木) 16:34:540043デフォルトの名無しさん
2010/10/14(木) 19:03:19int main(void)
{
printf("日の丸の絵");
return 0;
}
0044デフォルトの名無しさん
2010/10/14(木) 19:11:53あなたたちの国語力の無さには呆れてものが言えません
一生パソコンと戯れててください
0045デフォルトの名無しさん
2010/10/14(木) 19:23:52そもそもあなたに国語力がないから、スレチでこうなっていると気づけよ。
0046デフォルトの名無しさん
2010/10/14(木) 19:28:39int main(void)
{
printf("┌───┐\n│ ● │\n└───┘");
return 0;
}
こういうことじゃね?
0047デフォルトの名無しさん
2010/10/14(木) 20:18:11環境は?
せめて Windows XP とか Max OS X とか X Window とかくらいはいってくれないと、プログラムの書きようもないですよ。
0048デフォルトの名無しさん
2010/10/14(木) 20:28:54って出来るとすばらしい。
0049デフォルトの名無しさん
2010/10/14(木) 20:32:53ただしWindows専用
#include <stdio.h>
#include <stdlib.h>
int main ( void ){
system ( "MSPAINT.EXE hinomaru.jpg" ) ;
return 0 ;
}
0050デフォルトの名無しさん
2010/10/14(木) 20:34:020051デフォルトの名無しさん
2010/10/14(木) 20:58:24#include <stdio.h>
int main()
{
system("start hinomaru.jpg");
return 0;
}
0052デフォルトの名無しさん
2010/10/14(木) 21:16:00system は stdlib.h じゃなかったっけ。
0053デフォルトの名無しさん
2010/10/14(木) 21:28:22そうでした。
#include <stdio.h>
#include <stdlib.h> <-追加
int main()
{
system("start hinomaru.jpg");
return 0;
}
0054デフォルトの名無しさん
2010/10/14(木) 23:50:09変数 i が初期化されないで使われているけど、そもそもそのプログラムは正しいの?
d =0; じゃなくて i = 0; じゃないかな。
0055デフォルトの名無しさん
2010/10/15(金) 00:35:38遅くなってしまったんですが、
1 1 2 3 5… みたいな感じになって続くらしいんですが。
005655
2010/10/15(金) 00:36:590057デフォルトの名無しさん
2010/10/15(金) 01:57:28[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;
}
を入れてください
http://hibari.2ch.net/test/read.cgi/tech/1284632294/478
http://codepad.org/6tKUnRU1
で問題ありましたでしょうか?
0059デフォルトの名無しさん
2010/10/15(金) 02:23:480060デフォルトの名無しさん
2010/10/15(金) 02:30:39明確に間違ってる箇所があるぞw
0061デフォルトの名無しさん
2010/10/15(金) 02:39:15(商品の価格がものすごく安い場合なら解けないことも無いけど)
解けた人はどうやって解いた?
0062デフォルトの名無しさん
2010/10/15(金) 02:50:55#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;
}
0063デフォルトの名無しさん
2010/10/15(金) 02:57:28商品の価格?
個数じゃなくて?
0064デフォルトの名無しさん
2010/10/15(金) 06:04:52詳しくお願いいたします。
0065デフォルトの名無しさん
2010/10/15(金) 06:07:18http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0
f(0) = 0, f(1) = 1
0066デフォルトの名無しさん
2010/10/15(金) 06:09:430067デフォルトの名無しさん
2010/10/15(金) 06:10:38>>55
0068デフォルトの名無しさん
2010/10/15(金) 06:12:210からにしようが、1からにしようが>>58がゴミ以下なのはかわらないんだけどw
ご指摘感謝。なるほどね。
>>57
修正しました。s1+1 = s2, s3==s4 がわかるようにしました。
http://codepad.org/Y41chjc4
0070デフォルトの名無しさん
2010/10/15(金) 06:26:320071デフォルトの名無しさん
2010/10/15(金) 06:30:150072デフォルトの名無しさん
2010/10/15(金) 06:45:34値が0だから問題ないとも言えますが、fibo(0)を足すのは問題の指定からはずれます
0073デフォルトの名無しさん
2010/10/15(金) 06:46:01[2] 問題文(含コード&リンク):0未満の数が入力されるまで
入力を求め、その入力した回数と入力した数値の合計値を表示するプログラムを作成しなさい。
なお、0未満の数は回数と合計値に含めないものとする。
[3] 環境
[3.1] OS:Windows Vista Basic 32bit
[3.2] コンパイラ名とバージョン:Visual Studio 2010
[3.3] 言語:C言語
[4] 期限:2010年10月18日正午まで
[5] その他の制限:特にありません
0074デフォルトの名無しさん
2010/10/15(金) 06:46:51007573
2010/10/15(金) 06:47:120076デフォルトの名無しさん
2010/10/15(金) 06:51:49int 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;
}
0077デフォルトの名無しさん
2010/10/15(金) 06:56:16ご指摘感謝いたします。
>>57
たびたびの修正ですいません。
http://codepad.org/baDswrO5
0078デフォルトの名無しさん
2010/10/15(金) 07:04:07ありがとうございます。早いですね。
0079デフォルトの名無しさん
2010/10/15(金) 07:12:40[2] 問題文(含コード&リンク):入力された数値を逆順に表示せよ。
なお、この動作は0未満の値が入力されるまで 繰り返すものとする。
[3] 環境
[3.1] OS:Windows Vista Basic 32bit
[3.2] コンパイラ名とバージョン:Visual Studio 2010
[3.3] 言語:C言語
[4] 期限:2010年10月18日正午まで
[5] その他の制限:特にありません
008281
2010/10/15(金) 08:32:2678ではなく79です。
0083デフォルトの名無しさん
2010/10/15(金) 08:46:260084デフォルトの名無しさん
2010/10/15(金) 12:22:21何度も繰り返して申し上げておりますが、int main() { ... } はISO/IEC 9899:1999 に適合しています。
0085デフォルトの名無しさん
2010/10/15(金) 12:46:240086デフォルトの名無しさん
2010/10/15(金) 22:33:23[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日まで
よろしくお願いします。
0087デフォルトの名無しさん
2010/10/15(金) 22:35:20#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 )); /* 関数の呼び出し */
}
0088デフォルトの名無しさん
2010/10/15(金) 22:40:42[2] 問題文(含コード&リンク):
例>>87において、main関数中の/* 入力 */とコメントした2行を関数として
独立させたvoid strinput( char *s )を作成して、main関数から呼び出すように変更せよ。
アドレス渡しとなっていることを確認せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年10月18日まで
よろしくお願いします。
008955
2010/10/15(金) 22:49:012,0,1,1,1
って最初の所で出てるんですが、これって、
1,1,2,3,5って感じになるんじゃないんですか?
2,0の次は、2と0と足した2なはずですよね?
0090デフォルトの名無しさん
2010/10/15(金) 23:02:06ISOの文章を理解していないのがバレてますよ?w
0091デフォルトの名無しさん
2010/10/15(金) 23:03:51#include <stdio.h>
int main() 笑
0092デフォルトの名無しさん
2010/10/15(金) 23:04:580093デフォルトの名無しさん
2010/10/15(金) 23:07:09voidさん、ごめんなさいって。
0094デフォルトの名無しさん
2010/10/15(金) 23:14:11まぁ、独自の環境ならISO準拠でなくても良いのに、ISO準拠でもないことを
無理やり準拠と言うのは認められないぜ?いつお前が基準になったんだって?
0095デフォルトの名無しさん
2010/10/15(金) 23:38:16#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);
}
0096デフォルトの名無しさん
2010/10/15(金) 23:39:47こう書けば >>84 みたいなのでもわかるんでない?
0097デフォルトの名無しさん
2010/10/15(金) 23:52:27[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
この場合のお前らの解釈はどうなん?
俺的には
Linuxのgcc(バージョン?)のCでお願いと解釈で
GCCの独自拡張も使ってOKと判断(つまりISOじゃなくGCCのCでと)
で、Linux、コンパイラ等の指定無で言語CだけならISOのCでと判断
0098デフォルトの名無しさん
2010/10/15(金) 23:58:37Cと書かれてれば入門書にでてくるような初歩の標準Cでいいだろう
0099デフォルトの名無しさん
2010/10/15(金) 23:59:09GCC拡張を使わなくても書ける問題がほとんどだから、
大抵ISO準拠になるんじゃないかな。
0100デフォルトの名無しさん
2010/10/16(土) 01:56:52あえてそうする意味がわからん
0101デフォルトの名無しさん
2010/10/16(土) 02:10:180102デフォルトの名無しさん
2010/10/16(土) 02:11:380103デフォルトの名無しさん
2010/10/16(土) 02:12:320104デフォルトの名無しさん
2010/10/16(土) 02:14:42他人の回答に難癖つけたりするのは良くない癖だね
誰とは言わんが
0105デフォルトの名無しさん
2010/10/16(土) 02:24:05ISOの文章を読んでないのがバレバレ。誰とは言わないが。
0106デフォルトの名無しさん
2010/10/16(土) 03:23:31と補足してるのに、自分は標準スタイルに従っていると
問題は無いとか言う奴は、やっぱり物事の基準、基本、根本が
分かってないと思う。そんな考えだから通用しないんだよ、世の中では。
世の中ね、自分が思っている程、単純じゃないんだわ。
自分がそれを求めていたとしても、他人が何をどう求めているか?
まで読めないようじゃ、客相手の商売は出来んよ。
0107デフォルトの名無しさん
2010/10/16(土) 04:16:05an[3] = 34,
an[2] = 33,
an[1] = 1;
an[3] = 34,
an[2] = 32,
an[1] = 2;
......
an > 0 であるとしてもa[4]は
35から67までの33通り考えられる
0108デフォルトの名無しさん
2010/10/16(土) 04:18:270109デフォルトの名無しさん
2010/10/16(土) 05:28:460110デフォルトの名無しさん
2010/10/16(土) 07:33:43an[0]から始めなかったのはまずかった。
an[0] = 0,an[1] = 1,の前提が
ないと不定になるのではないかと。
0111デフォルトの名無しさん
2010/10/16(土) 07:36:100112デフォルトの名無しさん
2010/10/16(土) 11:11:15main()
int main(void)
void main()
どれが正しいんだよ
0113デフォルトの名無しさん
2010/10/16(土) 11:12:300114デフォルトの名無しさん
2010/10/16(土) 11:19:18a[3]の34ってどっからでてきたの?
0115デフォルトの名無しさん
2010/10/16(土) 11:22:241,1,2,3,5,8,13,21,34
0116デフォルトの名無しさん
2010/10/16(土) 11:25:08というのは思い込みではないか? という意味で。
0117デフォルトの名無しさん
2010/10/16(土) 11:27:350118デフォルトの名無しさん
2010/10/16(土) 11:30:32an[8] にすると逆にフィボナッチ数列に限定されるのではないかな。
0119デフォルトの名無しさん
2010/10/16(土) 11:31:49なんでa[3]が固定されてるの?
0120デフォルトの名無しさん
2010/10/16(土) 11:37:55an[n]=34,an[n-1]=33,an[n-2]=1 ;
an[n]=34,an[n-1]=32,an[n-2]=2 ;
...
とすればよかったということですね。
0121デフォルトの名無しさん
2010/10/16(土) 11:42:30>>77 の結果は、n = 2 から表示しており、各列の
一つめは n
以下、Σai, an, Σ(ai^2), a(n-1)*a(n)
となっています。
三つ目の数字がフィボナッチ数列になってることを確認いただけると考えております。
0123デフォルトの名無しさん
2010/10/16(土) 12:46:44C99 では、main 関数の書き方について
int main(void)
int main(int argc, char *argv[]) もしくはこれと同義の定義
処理系依存の main 定義(コンパイラ実装依存)
って書いてあるだけだよ。
一方 int main() は、>>96 の言う通り int main(...) 。
つまり、上記定義からコンパイラが許容しているだけで、
C99 準拠のコンパイラで必ずコンパイルできる保証はない。
C++ では確かに int main() は int main(void) と同義だけど、
これと混同してない?
0124デフォルトの名無しさん
2010/10/16(土) 12:53:35いいえ。
ISO/IEC 9899:1999 5.1.2.2.1 の "or equivalent" という文言に ISO/IEC 9899:1999 の 6.7.5.3 14 を適用すれば、
int main() { ... }
が C99 に準拠していることがわかります。
0125デフォルトの名無しさん
2010/10/16(土) 12:57:310126デフォルトの名無しさん
2010/10/16(土) 12:57:50失礼。かきなおします。
「これと同義」というものの対象は int main(int, char *[]) だけではなくて int main(void) もふくまれているのではないでしょうか?
原文のコンマの位置からそう考えられるのですが。
0127デフォルトの名無しさん
2010/10/16(土) 13:17:22だから、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 も通らないけど。
0128デフォルトの名無しさん
2010/10/16(土) 13:20:55int main(int argc, char *argv[])とint main()はequivalentじゃないしw
0129デフォルトの名無しさん
2010/10/16(土) 13:21:41return 0;
を書き忘れたのは謝ります。
0130デフォルトの名無しさん
2010/10/16(土) 13:29:30それはコンパイラが C99 になっていないようですね。コンパイラの種類を教えてください。
ISO/IEC 9899:1999 6.7.5.3 14 により、
関数定義の一部である宣言で引数が空リストの場合は、引数は void と同じとされています。ご確認ください。
main() が関数定義の一部となっている(普通そうですね。)かぎり、
int main() と int main(void) は同じだし、普通の関数でも
int func() {...} と int func(void) {...} は C99 では同じです。
0131デフォルトの名無しさん
2010/10/16(土) 13:35:39では、http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010
でご確認を。
5.1.2.2.1 で
一 返却値の型 int を持ち駆り引数を持たない関数
一 二つの仮引数を持つ関数(以下略)
一 上に掲げた二つの方式のいずれかと等価な方法
と書かれています。int main() は int main(void) と等価ですから(ISO/IEC 9899:1999 6.7.5.3.14) int main() は C99 に準拠しています。
0132デフォルトの名無しさん
2010/10/16(土) 13:39:08int main() の問題は瑣末なことだとは思いますが、それでも議論に参加くださり感謝しております。
0133デフォルトの名無しさん
2010/10/16(土) 14:10:320134デフォルトの名無しさん
2010/10/16(土) 14:12:190135デフォルトの名無しさん
2010/10/16(土) 14:37:010136デフォルトの名無しさん
2010/10/16(土) 16:50:14C言語はC99
C++言語はC++0x + boostライブラリ
のこと
そして、言語C++指定の場合はC言語ぽさを極力排除する
(STL,Boost,C++で追加された機能を極力使う)
覚えとくように
0137デフォルトの名無しさん
2010/10/16(土) 16:52:41C++0x や boost の規格を確認したいので、ISO のポインタを教えてください。
0138デフォルトの名無しさん
2010/10/16(土) 16:53:40for () {
if () {
if () {
break;
}
a
}
b
}
c
この時breakした後ってbの位置に行くんですよね
0139デフォルトの名無しさん
2010/10/16(土) 16:54:29cですよね
0140デフォルトの名無しさん
2010/10/16(土) 17:17:28C89にこだわってはダメなのか
C++が0xなんだから、Cも1xでいいじゃないかと思ったり
boostのバージョンはいくつだよと思ったり
0141デフォルトの名無しさん
2010/10/16(土) 17:25:29そうです。if のネストは関係なく、for() の構文を抜けたところにとびます。
0142デフォルトの名無しさん
2010/10/16(土) 17:45:500143デフォルトの名無しさん
2010/10/16(土) 18:31:25ヘミ猫 void に謝るのか?それはゴメンだ。
014455
2010/10/16(土) 19:01:54あ、縦に見るんですね。
どうして、1つ目は2から始まってるんですか?
あと、2つ目って0,1,2,4,7ときてますが、どういう規則でしょうか?
014555
2010/10/16(土) 19:10:55すみません。あと、4つ目と5つ目って全く同じ結果になってるんですが、2ついるんでしょうか
>>144
>どうして、1つ目は2から始まってるんですか?
問題では、Σ[n-2,i=1]ai を求めることになっているので、n = 0, n = 1 は省きました。
>0,1,2,4,7ときてますが、どういう規則でしょうか?
わかりません。計算してみただけです。
>4つ目と5つ目って全く同じ結果になってるんですが、2ついるんでしょうか
二つの計算方法はそれぞれ違います。同一の値になった理由はわかりません。
014755
2010/10/16(土) 19:23:16ありがとうございました。
0148デフォルトの名無しさん
2010/10/16(土) 20:22:580149デフォルトの名無しさん
2010/10/16(土) 20:38:29a[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
0150デフォルトの名無しさん
2010/10/16(土) 21:14:01式の変形で混乱したか?
0151まったくの初心者
2010/10/16(土) 22:17:19ぜひ教えてください。お願いします。
• void concat(struct node *p, struct node *q)
ノード*p以降のリストの後に,ノード*q以降のリストを連結
する関数
• int length(struct node *p)
ノード*p以降のリストの長さを返す関数
0152デフォルトの名無しさん
2010/10/16(土) 22:19:18ならこの時代ならどうするというのですか?
0153デフォルトの名無しさん
2010/10/16(土) 22:31:58void 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 が示されてないから想像で書いてみた
0154まったくの初心者
2010/10/16(土) 22:50:18ありがとうございます。
あとすいませんがこれも分からないので教えてください。
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;
}
これをループを使用せず、関数の再帰呼び出しを使い、また外部変数
での値の受け渡しをしないという条件で作りなおさなければいけません。
0155デフォルトの名無しさん
2010/10/16(土) 22:57:45>>148じゃないが、この時代のC++では
static void Main()
になっている。
http://codepad.org/osqIJ92M
ひととおり組んでみました。
この中の concat() と length() をつかえばいいでしょう。
0157デフォルトの名無しさん
2010/10/16(土) 23:00:42それは C#では?
0158デフォルトの名無しさん
2010/10/16(土) 23:02:490159デフォルトの名無しさん
2010/10/16(土) 23:05:15関数に引数がないということと、
関数呼び出し時に引数の型や数のチェックが行われるかどうかは別だよ。
foo() は、Declarators の Syntax から空の identifier-list を持つ関数と解釈される。
この場合は、関数呼び出し時に仮引数と実引数の数が一致しない場合は呼び出し自体は有効だが、動作不定。
一方、foo(void) は、void が declaration-specifiers となる関数と解釈される。
この場合は、関数呼び出し時に厳密に引数の型や数がチェックされる。
よって、>>127 のコンパイラは正しく動作しているし、foo() != foo(void)。
main の件もスタートアップルーチンからの呼び出しだから、
型や数のチェックが行われていないだけじゃないかな。
だから、スタートアップルーチンから引数を渡されたら動作不定でしょ。
0160デフォルトの名無しさん
2010/10/16(土) 23:15:12うーん、あれだな
連結(concat)した後にqの長さはどうするべきか
a) p以降のどっかのノードを指しているのでそのまま放置
b) 連結されたんだからqはNULLにすべきで長さは0
全削除(delete)した後にqを利用するとどうなる
a) NULLアクセスを許すので落ちる
b) qは連結させたときにNULLになっているので正常終了
両方b)になってほしい気もしないでない
あああああ、明日ネットワークあるのに
0161デフォルトの名無しさん
2010/10/16(土) 23:20:30C99では、
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) と一緒です。
0162デフォルトの名無しさん
2010/10/16(土) 23:23:16たしかに concat(p, q) としたあとの q の扱いは問題ですね。
void concat(struct node **p, struct node **q) だったら、もしかするとその点もうまく書けるのかもしれませんが、どうなるのでしょう。
0163デフォルトの名無しさん
2010/10/16(土) 23:23:42普通の感覚だと、b) もおかしい。
concat は、p の最後に q の内容がコピーで追加され、q 自体はコピー元のオリジナルのまま。
p が delete されてもオリジナルの q は変化しない。
0164デフォルトの名無しさん
2010/10/16(土) 23:38:11>162
**で書けますが、簡潔さに欠けるので、僕ならさらに構造体で覆うようにします
>163
説明が悪かったのかな
現状はa)なので、b)のようにした方が素直な設計でより安全だよねって
しかし、今さら設計変えるの大変(になるかもしれない)だから妥協できるところは妥協してもいいよねと
現状のまま、安全にするなら
concat p, q
q = nil
delete p
concatしたらnilってもう使うなで済む
0165デフォルトの名無しさん
2010/10/16(土) 23:40:35>>159 はコンパイル時に呼び出し側での引数チェックがされるかどうかの話をしているのに、
何故 no parameters にこだわってるの?
0166デフォルトの名無しさん
2010/10/16(土) 23:43:14>>163 が正しいだろ。
そこに書いてあることを実現するためには、
struct node の double pointer が必要なので、
concat などの引数リストが変わるけどいいの。
0167デフォルトの名無しさん
2010/10/16(土) 23:48:55関数定義を伴う関数宣言である以上 >>127 の foo() の場合であっても foo(void) になります。
>>127 の場合 foo() イコール foo(void) です。
コンパイル時に引数のチェックを行って、エラーとするコンパイラがあってもおかしくないと思います。
0168デフォルトの名無しさん
2010/10/16(土) 23:54:28コンパイラがあってもおかしくないって、それって「実装依存」ってこと?
もしくは、C99完全準拠のコンパイラを持ってないので確認できないということ?
君の解釈どおりなら、C99を満たすコンパイラはすべてエラーと判定しないと矛盾じゃない?
0169デフォルトの名無しさん
2010/10/16(土) 23:58:23失礼しました。>>167 は取り消します。
>>165 の事実を調べたいと思いますので、もしよければ C99 の該当場所を教えてください。
0170153
2010/10/17(日) 00:01:46>>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 );
}
0171まったくの初心者
2010/10/17(日) 00:19:21• void concat(struct node *p, struct node *q)
ノード*p以降のリストの後に,ノード*q以降のリストを連結
する関数
• int length(struct node *p)
ノード*p以降のリストの長さを返す関数
できたらこれらをそれぞれ別々に書いてくれるとうれしいです。
0172まったくの初心者
2010/10/17(日) 00:20:54mainの中身もお願いします。
0173デフォルトの名無しさん
2010/10/17(日) 00:37:19最近、出版された書物を見ても分かる通り
統一され始めているよ。今時void mainは書かれてないね。
0174デフォルトの名無しさん
2010/10/17(日) 01:01:20#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() くらい自分で書けんで大丈夫か?
0175デフォルトの名無しさん
2010/10/17(日) 01:45:13そのものズバリはまだ見つかってないけど、6.7.6 3 の (f) と (g) の記述で
with no parameter "specification" と、with no parameters
という違いはあるね。
specification なしの場合は 6.5.2.2 6 に該当するのかな。
英語苦手で正しく読み取れてないかもだが。
017655
2010/10/17(日) 02:23:51ありがとうございました。
0177まったくの初心者
2010/10/17(日) 19:35:31実行してみたのですが、リストに検索する数字がなかった場合ー1を返さなけれ
ばいけないのですが、−1と出ません。
どこをどのように変えればいいですか?
0179デフォルトの名無しさん
2010/10/17(日) 20:13:24「再帰で書くためには関数のインターフェイスを変える必要が有る 」は嘘だよ。
x が見つけたい値、v が要素のリストの先頭、n が要素数なんだから、
v と n を再起呼び出しのときに適切な値に変えるだけじゃない?
0180デフォルトの名無しさん
2010/10/17(日) 20:30:56{
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;
}
0181デフォルトの名無しさん
2010/10/17(日) 20:31:03>>177はレベルをはるかに超えるレベルを扱っているって感じだね
printfの簡単な使い方すら分らないのにバイナリサーチや再帰って凄いな
>>179
言葉だとどうすべきと言っているのかよく分らん
コードをさらしたほうが分りやすいと思う
0182デフォルトの名無しさん
2010/10/17(日) 20:36:59int 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;
}
0183デフォルトの名無しさん
2010/10/17(日) 20:37:12残念。分かる人いたね。
自分のレベルの低さを露呈したかったの?
0184デフォルトの名無しさん
2010/10/17(日) 20:56:04おれ、>>154のコードだけではバイナリサーチってのも分らんかったよ
関数名biesearchでバイナリサーチのコード分った、orz
コード作成じゃなく示されたコードからアルゴリズム答えよとかの宿題出ると面白いかも
0185デフォルトの名無しさん
2010/10/17(日) 20:58:30確かにそっちの方がエレガントだな、v のオフセットを変更するアイディアが浮かばんかったよ
でもね、戻り値のオフセット加算の分遅くなるんじゃね....と負け惜しみを言ってみる
0186デフォルトの名無しさん
2010/10/17(日) 21:08:17単に >>177 がサボりすぎて何も覚えて無いだけだと思うよ
大学で単位の為だけに履修してるなら良いけど、専門学校とかだったら大変だ
こんなのがプログラマとして世に出たらどうなる事か....
0187デフォルトの名無しさん
2010/10/17(日) 21:47:21やらないとこはブラック
0188デフォルトの名無しさん
2010/10/17(日) 21:51:220189デフォルトの名無しさん
2010/10/17(日) 21:52:30それがブラックの定義ならブラックのほうが企業数遥かに多いよな
0190まったくの初心者
2010/10/17(日) 22:14:53お願いします。
• int length(struct node *p)
ノード*p以降のリストの長さを返す関数
0191デフォルトの名無しさん
2010/10/17(日) 22:22:45struct node *temp = p;
while(temp!=NULL){
len++;
temp = temp->next;
}
return len;
0192デフォルトの名無しさん
2010/10/17(日) 22:27:46• void concat(struct node *p, struct node *q)
ノード*p以降のリストの後に,ノード*q以降のリストを連結
する関数
0193デフォルトの名無しさん
2010/10/17(日) 22:31:31while(temp->next != NULL){
temp = temp->next;
}
temp->next = q;
0194デフォルトの名無しさん
2010/10/17(日) 22:31:530195デフォルトの名無しさん
2010/10/17(日) 23:02:13そもそもループのプログラムを再帰にしろって言ってる時点で、
プログラムの実行速度遅くなるんだから、問題ないでしょ。
0196デフォルトの名無しさん
2010/10/17(日) 23:03:340198デフォルトの名無しさん
2010/10/17(日) 23:21:26{
return 0;
}
0199デフォルトの名無しさん
2010/10/17(日) 23:23:43>>1 に書いてあることをちゃんと読んだ?
問題付け足しになってると気づいてないの?
0200デフォルトの名無しさん
2010/10/17(日) 23:24:04>>151とは別の人ですか?
>>156に一式置いています。
0201デフォルトの名無しさん
2010/10/17(日) 23:54:33できれば#include <string.h>と書かない方法を教えていただきたいです。
あとどなたか>>88をよろしくお願いします。
0202デフォルトの名無しさん
2010/10/18(月) 00:01:06マジレスされても困ります
0203デフォルトの名無しさん
2010/10/18(月) 00:07:16こんな感じ?
#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);
}
0204デフォルトの名無しさん
2010/10/18(月) 00:18:57return 0;
がないような課題は零点課題ですよ、回答してはだめよ
先ず、ひどい課題だから作り直せって先生に言うべきです
0205デフォルトの名無しさん
2010/10/18(月) 00:20:11なぜなら、int main だから。
0206デフォルトの名無しさん
2010/10/18(月) 00:50:070207デフォルトの名無しさん
2010/10/18(月) 01:30:03mainがシステムに返す値だから関係ないよ。
0208デフォルトの名無しさん
2010/10/18(月) 01:40:43ごめん、一行目は何言ってるか判らないや
二行めを言うなら返さなくても良いじゃんって話になるよ、何返しても良いとかいうなら返さなくて不定値になっても同じでしょ
0209デフォルトの名無しさん
2010/10/18(月) 01:55:04ただ、別プログラムやシェルが戻り値を利用する場合もあるわけで
受け取り側の都合の良い値を返せばいいんだよ
慣例的に0を成功とすることが多いだけでマナーとか規格とか関係ないような
0210デフォルトの名無しさん
2010/10/18(月) 03:01:40どこで学んだ間違いですか?関数の戻り値について調べて下さいね。
0211デフォルトの名無しさん
2010/10/18(月) 03:03:42道路交通法に於いて、青信号なら通過しても良いが
安全が確認されてのことで、青でも通過できない場合もある。
しかし、青なら通過しなければという考えで生きている人は
そういうイレギュラーの時に、詰まらない失敗をする。
物事を適切に解釈、判断できないならプログラミングには向いてないよ。
0212デフォルトの名無しさん
2010/10/18(月) 03:48:52構わないが、他人に伝える以上、客観性がない意見は単なる個人の思い込みとしか
思われない。return についてはあくまでもその関数の戻り値の型によって
プログラマーが任意で、適切に処理すれば良い。必ずしも 0 でなければ
いけないという決まりは無い。
0213デフォルトの名無しさん
2010/10/18(月) 04:08:52If 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 が必須というわけではないですね。
0214デフォルトの名無しさん
2010/10/18(月) 04:14:26[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] その他の制限: なし
よろしくお願いします。
0215デフォルトの名無しさん
2010/10/18(月) 06:57:04あくまで 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は別な奴に借りパクされたので手許に無い
手許に有る奴がちょっと調べてくれんかな
0216デフォルトの名無しさん
2010/10/18(月) 07:11:30[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] その他の制限:最大値、最小値についてはそれぞれ関数を作って作成すること
0217デフォルトの名無しさん
2010/10/18(月) 07:41:14int 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++;
}
}
なんか垢抜けないコードで吐きそうだ
0218デフォルトの名無しさん
2010/10/18(月) 08:02:33やだ、この人素人以下。
0219デフォルトの名無しさん
2010/10/18(月) 11:06:510220デフォルトの名無しさん
2010/10/18(月) 13:54:52>最大値、最小値についてはそれぞれ関数を作って作成すること
らしいぞ
0221デフォルトの名無しさん
2010/10/18(月) 14:14:210222素人未満
2010/10/18(月) 17:58:50int 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;
}
0223素人未満
2010/10/18(月) 18:00:37{
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++;
}
}
0224デフォルトの名無しさん
2010/10/18(月) 18:03:390225デフォルトの名無しさん
2010/10/18(月) 18:10:05「main関数の戻り値はその値を引数とするexit関数の呼び出しと等価とする」。
main()からのreturn 0; はexit(0);と等価。
だからexitの引数として用意された値を使わないことに違和感があるなら、
return EXIT_SUCCESS; で正しい(GNUのコードではよくみる)。
この仕様はANSI以前のCからの名残。
以前はexit()の呼び出しのみが正しい終了方法だった。
そうしないとatexit()に登録された関数が呼び出されない実装だったから。
>>212の言うとおりだと思う。
例えばsystem()の戻り値で呼び出し先のmain()の戻り値がくることも保証されてない。
実際、SUN環境では通用しない。
0226デフォルトの名無しさん
2010/10/18(月) 18:20:00そうです!
ありがとうございます。
0227デフォルトの名無しさん
2010/10/18(月) 18:28:02#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;
}
0228デフォルトの名無しさん
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) の変化を示しなさい。
0229デフォルトの名無しさん
2010/10/18(月) 18:43:03printf で double を出力するときは、「%lf」じゃなくて「%f」だよ。
あと、2つ目のプログラムだけど、「適当な長さ」に半角1023文字までという制限つけてよいの?
0230デフォルトの名無しさん
2010/10/18(月) 18:57:03問題文これで全部?
0231デフォルトの名無しさん
2010/10/18(月) 18:57:14逆に質問。
1つ目の問題で、a, b, α の値は指定なしですか?
0232デフォルトの名無しさん
2010/10/18(月) 19:12:41説明不足ですみませんでした。
a,b,αは自分で指定します。
0233デフォルトの名無しさん
2010/10/18(月) 19:14:56自分で指定っていうのは実行時に聞くの?
それとも適当な数字を埋め込めばいいの?
あとθは1°づつ増えるの?
0234デフォルトの名無しさん
2010/10/18(月) 19:18:190235デフォルトの名無しさん
2010/10/18(月) 19:21:300236デフォルトの名無しさん
2010/10/18(月) 19:25:030237デフォルトの名無しさん
2010/10/18(月) 19:29:21質問クンは質問クンであり、けっして回答クンではありません
0238デフォルトの名無しさん
2010/10/18(月) 19:33:33体重は何kgですか?
0239デフォルトの名無しさん
2010/10/18(月) 19:45:41isweb ライト のサービス終了について
http://isweb.www.infoseek.co.jp/info/information.html
0240デフォルトの名無しさん
2010/10/18(月) 20:08:48現在のCはlを付けてもいいんだよ
0241デフォルトの名無しさん
2010/10/18(月) 20:11:050242240
2010/10/18(月) 20:14:170243デフォルトの名無しさん
2010/10/18(月) 20:19:21C99のことを言ってるんだろうけど、間違える人が多すぎるから、仕方なく仕様に入れただけだよ。
C99非対応コンパイラやC++では、未定義の動作だよ。
0244240
2010/10/18(月) 20:22:360245デフォルトの名無しさん
2010/10/18(月) 20:24:11変数宣言の位置が気に入らないけど
0246デフォルトの名無しさん
2010/10/18(月) 20:33:31残念ながらgccはまだC99完全準拠ではありません。
0247デフォルトの名無しさん
2010/10/18(月) 20:33:400248デフォルトの名無しさん
2010/10/18(月) 20:37:240249デフォルトの名無しさん
2010/10/18(月) 20:41:120250デフォルトの名無しさん
2010/10/18(月) 20:43:420251デフォルトの名無しさん
2010/10/18(月) 20:43:58long %ld
float %f
double %lf
0252デフォルトの名無しさん
2010/10/18(月) 20:44:270253デフォルトの名無しさん
2010/10/18(月) 20:44:45C99から明確に区別されるようになったわけ?
0254デフォルトの名無しさん
2010/10/18(月) 20:45:06で警告とか出すコンパイラ多いの?
0255デフォルトの名無しさん
2010/10/18(月) 20:46:45C99 から %lf = %f になったんだよ。それまでは %lf は未定義の動作。
0256デフォルトの名無しさん
2010/10/18(月) 20:46:530257デフォルトの名無しさん
2010/10/18(月) 20:51:13多いです。
0258デフォルトの名無しさん
2010/10/18(月) 20:56:30printfはそれに合わせれば良かった
0259デフォルトの名無しさん
2010/10/18(月) 20:57:08裏で型情報も渡せって?
0260デフォルトの名無しさん
2010/10/18(月) 21:07:05静岡が自民、民主、どちらかよりだと思ったら大間違いだぞ?
ネトウヨは静岡は操れない。やれるのは東京都周辺の王国くらいだろ。
それも崩壊したがなw
0262デフォルトの名無しさん
2010/10/18(月) 21:25:26T va_arg(va_list p, T)
だから、変換する型は double に限定しなくとも、たとえば float でも OKのはず。
つまり printf() の引数に float をのせることは原理的に可能。float か double かは、第一引数をみて判断しようとおもえばできる。int, long, unsigned はそうしている。
(可変長引数関数といえども第一引数は必須)
でも、C のお約束として関数の引数は浮動小数点数では double に一律に変換されるのがお約束。そういう意味で %lf はいらない。
0263デフォルトの名無しさん
2010/10/18(月) 21:32:23>>258
0264デフォルトの名無しさん
2010/10/18(月) 21:40:33>>256
0265デフォルトの名無しさん
2010/10/18(月) 21:49:18なるほどね。
そうか、fmtはそもそも型情報(ヒント)を含んでいるもんな。
0266デフォルトの名無しさん
2010/10/18(月) 21:57:55printfの第一引数が常に文字列リテラルとは限らないよ。
動的に生成される char のポインタだって渡せるんだから。
0267デフォルトの名無しさん
2010/10/18(月) 22:10:52printf の呼び出し側の話?
呼び出し側には型情報があるから問題ないでしょ。
0268デフォルトの名無しさん
2010/10/18(月) 22:32:57文字リテラルにせよ、プログラムでつくったり、malloc() の返り値だったりしても、ともかく、第一引数は char * で固定されています。
だからこそ、可変長引数が使用できるのでは?
printf() の浮動小数点数の表示が%f だけで済んでいたのも、それは関数に渡される浮動小数点数が double 一本だったから。
0269デフォルトの名無しさん
2010/10/18(月) 23:07:46[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文と組み合わせること。
どうか、よろしくお願いします
0270デフォルトの名無しさん
2010/10/18(月) 23:24:090271デフォルトの名無しさん
2010/10/18(月) 23:25:24さすがにここまで簡単だと自分でやれって言いたいな
[0] 〜 [4] を [j] で代用するためのループを追加するだけなんだからさ
0273デフォルトの名無しさん
2010/10/18(月) 23:26:28見ずら過ぎるぞ・・・
#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;
}
0274デフォルトの名無しさん
2010/10/18(月) 23:35:14見る+つらい = 見づらい != 見ずらい
0275デフォルトの名無しさん
2010/10/18(月) 23:43:31自己満足しているんだい?それがあんたの有意義な人生なのかい?
俺はそれで、年間何千万と稼いでいるのに。
0277デフォルトの名無しさん
2010/10/18(月) 23:53:07[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;
}
を入れてください
あと、座標は構造体とか配列を使って、距離は関数を使うみたいです。
0278デフォルトの名無しさん
2010/10/18(月) 23:58:100279デフォルトの名無しさん
2010/10/19(火) 00:00:17課題を聞いてない人が、いきなり
「データを増やす事」とか 「n = 3」 なんて言われて通じると思う?
0280デフォルトの名無しさん
2010/10/19(火) 00:01:41ユークリッド距離、とありますが、
入力が 10 点あったとしたら、
1) それら 10 個について総当りに距離をはかって、最大距離の2点と最小距離の2点を求めるのですか?
2) 単に原点(0, 0, 0) からの距離が最大のものと最小のものとを割り出せばいいのですか?
回答ください。
0281デフォルトの名無しさん
2010/10/19(火) 00:02:350282デフォルトの名無しさん
2010/10/19(火) 00:03:060283デフォルトの名無しさん
2010/10/19(火) 00:03:17お家が、ですよね、確か。
0284デフォルトの名無しさん
2010/10/19(火) 00:05:22触るな
0285デフォルトの名無しさん
2010/10/19(火) 00:13:33http://hibari.2ch.net/test/read.cgi/tech/1284632294/720
720 名前:デフォルトの名無しさん[] 投稿日:2010/10/10(日) 00:34:13
何かこのスレに常駐していて自分がベテランだと勘違いしているバカがいますねw
お前みたいなのは人類の中でも無名で雑魚だから、せいぜい粋がれる場所で
偉そうに生きてな。どうせ納税額もちっぽけの雑魚だろw
家は年間何百万も法人税を納めているし、年商1億以上だが
多分お前よりは上。
http://hibari.2ch.net/test/read.cgi/tech/1284632294/724
724 名前:デフォルトの名無しさん[sage] 投稿日:2010/10/10(日) 01:02:31
>家は年間何百万も法人税を
自分が納めているわけではないのですね。
学校にいっていない?ひきこもり?大検という手もあるからがんばってね。
0286デフォルトの名無しさん
2010/10/19(火) 04:33:190287デフォルトの名無しさん
2010/10/19(火) 04:34:31あぁ、そう解釈したか。そりゃ自分ひとりでは無理だわw
そうだよ、一族総出でやっているんだが?
まぁ、俺も必要不可欠な人材なんでね。
0288デフォルトの名無しさん
2010/10/19(火) 04:40:54まぁそういうことで、大して金持ちでもないのに妬まれるくらい
あんたらは悔しいんだろ?頑張っても無駄だよ。
もうね、人生って 生まれた時から死ぬまで がある程度決定されているんですよ。
よく、人生を変えたなんて奇麗事言うじゃん?あれって結局、そいつだから
そういう人生を歩んだんであって、別に変えたなんて他人は思っちゃいないんだよ。
0289デフォルトの名無しさん
2010/10/19(火) 04:46:15世間を知らない人生になってしまったのか、所詮は自分次第。
これを利用して何千万円も稼げるプロジェクトを立ち上げたらどうよ?
思いつくかは知らんがw
0290デフォルトの名無しさん
2010/10/19(火) 06:50:34[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] その他の制限:上記のみです
0291デフォルトの名無しさん
2010/10/19(火) 11:04:04しかし一つだけお願いがあります。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) の変化を示しなさい。
0292デフォルトの名無しさん
2010/10/19(火) 11:22:46お願いします。
0293デフォルトの名無しさん
2010/10/19(火) 11:27:32良く解らん
a,bは定数じゃなかったん?[0,1]の範囲で設定しろってこと?
θは[0,2*Pi]の範囲で動くんじゃなかったっけ?
0294デフォルトの名無しさん
2010/10/19(火) 11:44:570295デフォルトの名無しさん
2010/10/19(火) 12:51:39ゆとり乙、せめて 22/7 を使おうぜ
double pai = atan(1.0) * 4.0; を使うのが一般的だけどね
0296デフォルトの名無しさん
2010/10/19(火) 13:16:13[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] その他の制限: +.-,*,/.%,^の演算はソースの下に割り算の例が
ありますのでそれを参考につくってください
それではよろしくお願いします
0297デフォルトの名無しさん
2010/10/19(火) 13:46:01>>278
ごめんなさい。それは気にしないでください。
>>279
すみません
>>280
それは多分1だと思います
0298デフォルトの名無しさん
2010/10/19(火) 15:07:58#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;
}
0299デフォルトの名無しさん
2010/10/19(火) 15:08:39if (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;
}
0300デフォルトの名無しさん
2010/10/19(火) 15:44:21#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;
}
0301デフォルトの名無しさん
2010/10/19(火) 15:45:01if (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;
}
0302デフォルトの名無しさん
2010/10/19(火) 16:06:44そうなら宿題をでっち上げてる輩がいてもおかしくないんだよな・・・
0303デフォルトの名無しさん
2010/10/19(火) 17:25:320304デフォルトの名無しさん
2010/10/19(火) 18:39:15何故に関数ポインタが必要なのか詳しく
0305デフォルトの名無しさん
2010/10/19(火) 18:57:40今考えたらinitもprint_stackもまとめればよかったと思うし、STACK関する部分だけ別ファイルにして_pushと_popはstaticにして他はexternにすれば
良かったと思ったけどもう面倒になったから中途半端な感じになってしまった反省はしない。
0306デフォルトの名無しさん
2010/10/19(火) 19:57:25継承みたいなことをして、インスタンスごとに処理を変えたいのでなければ、
実行速度も下がるし、読みにくいしで、はっきり言って良いことないよ。
0307デフォルトの名無しさん
2010/10/19(火) 20:01:170308デフォルトの名無しさん
2010/10/19(火) 20:06:15課題で書いたコードを再利用したり、機能追加するために拡張したりするなら話は別よ。
前半の文章でそういうケースを除いたつもりだけど。
>>291
http://codepad.org/ddOrBsPF
二問目は >>261 の二つ目でいいでしょうか?
0311デフォルトの名無しさん
2010/10/19(火) 21:43:19最小距離が10000より大きいときに間違った答えを出力する気がする。
0312310 ◆QZaw55cn4c
2010/10/19(火) 21:43:310 1 2
3 4 5
2 3 4
4 2 3
みたいなものを準備しておき、
./a.out < data.txt
の形で読み込ませてください。
0313デフォルトの名無しさん
2010/10/19(火) 21:44:23そのとおりなんですが、んー、さて、どうしましょうか?
>>311 の指摘を受けて改良しました。
http://codepad.org/MgB3UzzG
0315デフォルトの名無しさん
2010/10/19(火) 21:55:25私だったら、min も max も距離としてありえない負の数で初期化して、
2点以上入力されなかったときには、if 文でエラー表示させるかな。
>>315
なるほど。それは取り入れなければならない機能ですね。
>>277
改良しました。
http://codepad.org/c3WDHyvO
0317デフォルトの名無しさん
2010/10/19(火) 22:21:50なるべく難しくしないってところが微妙だけどこれでいいんじゃないか
0318デフォルトの名無しさん
2010/10/19(火) 22:27:54としていながら、max を別用途に使って潰していましたね。
初心の者としては std::endl という風に名前空間を意識して書いたほうがいいかもしれませんね。ちょっと反省。
0319デフォルトの名無しさん
2010/10/19(火) 22:32:48[2] 問題文(含コード&リンク):0〜1の値をサーモグラフィ風にRGB値に変換するプログラム
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C/C++/どちらでも可
[4] 期限:木曜日まで
[5] その他の制限:なるべく簡単に
5〜6段階くらいに場合分けして,値を増やしたり減らしたりしているのですがどうもうまくいきません。
申し訳ありませんがよろしくお願いします。
0320デフォルトの名無しさん
2010/10/19(火) 22:35:16入力方法と出力形態を教えてください。コードを教えていただけるとありがたいです。
0321デフォルトの名無しさん
2010/10/19(火) 22:41:240322デフォルトの名無しさん
2010/10/19(火) 22:42:47L2-ノルムの演算回数が多すぎる
O(n^2)は効率悪いと思うんだけど
0323デフォルトの名無しさん
2010/10/19(火) 22:44:18[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] その他の制限:
御願いします。
0324デフォルトの名無しさん
2010/10/19(火) 22:44:47自分でやってみたことはないのですが、
http://ja.wikipedia.org/wiki/HSV%E8%89%B2%E7%A9%BA%E9%96%93
がよさそうです。
0325デフォルトの名無しさん
2010/10/19(火) 22:49:59std::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;... としているのは何かあるんですか?
0326デフォルトの名無しさん
2010/10/19(火) 22:58:00xの値に応じて場合分けしてます。
ファイルの入出力は別のライブラリを使ってます。
出力は8bitカラーです。
該当部分のソースはこちらになります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10950.txt
>>321
すみません。0の時に黒で1の時に赤になるようにします。
値に応じて黒→青→空色→緑→黄→赤と変化するようにしたいです。
>>324
試してみましたが,上手くいきませんでした。
0327デフォルトの名無しさん
2010/10/19(火) 22:58:19結論から先に。
>(*it).xとかじゃ駄目なんですか?
OKです。
it はイテレータと呼びますが、考え方はポインタと相似しています。
C++ の Standard Template Library (STL)で調べてみてください。
0328デフォルトの名無しさん
2010/10/19(火) 23:08:40サーモって
黒→青→紫→赤→橙→黄→白だとおもうんだけど
ほんとうにその順番でいいの?
0329デフォルトの名無しさん
2010/10/19(火) 23:20:490.4 <= x < 0.6 のときの wPixb だけ間違っているのかな。
BYTE にキャストするときに、ほとんどの場合で 0 になってるような気がする。
0330デフォルトの名無しさん
2010/10/19(火) 23:27:34>coord(...) : x(x), y(y), x(z){}じゃなく
>this->x = x;... としているのは何かあるんですか?
一緒です。むしろx(x) などの方が現代的だと思います。
0331デフォルトの名無しさん
2010/10/19(火) 23:39:23海外のサーモグラフィはそうなってるらしいです。
今回の場合はこれで行きたいと考えています。
>329
では黄から赤に移るときも同様だと考えていいのでしょうか?
0332デフォルトの名無しさん
2010/10/19(火) 23:40:30厳密にいうと一緒じゃない。
初期化リスト(x(x) など)を使わないと、引数なしのコンストラクタが実行される。
0333デフォルトの名無しさん
2010/10/19(火) 23:45:38他のときは、double を使うときによく起こる誤差が入ってる。
2進数で、0.1 は無限小数なので、1 - 0.8 = 0.2 ではなく、0.19999999999999996かな。
何段階とか決まっているなら、0から1を適当な整数にマッピングしてみたら?
0334デフォルトの名無しさん
2010/10/19(火) 23:50:500<=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)) ;
ちょっと適当だけどでどうだろう?
青の期間が短いかなぁとも思うがそのへんは波形を少しずらせば良くなりそうな
0335デフォルトの名無しさん
2010/10/20(水) 00:15:26小数が2進数でどう表されるか考えたことなかったです。
>>334
少し難しそうですが、やり方次第では上手くいくかもしれないですね。
頂いた意見を参考に試してみます。
皆様ありがとうございました。
0336デフォルトの名無しさん
2010/10/20(水) 00:46:00this が使えんメンバ関数モドキに何の意味が有るのかと問いたいな
カプセル化を考えるなら
void STACK_pop( STACK* this );
みたいな実装の方が実用的だと思う
0337デフォルトの名無しさん
2010/10/20(水) 01:06:54[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] その他の制限:特になし
よろしくお願いします
0338デフォルトの名無しさん
2010/10/20(水) 02:03:48cellとかって何ですか
0339デフォルトの名無しさん
2010/10/20(水) 02:11:59メモ帳でファイルを作って、そこにデータを入力しても、プログラムの結果には何も出てこないんですが…
0340デフォルトの名無しさん
2010/10/20(水) 08:52:52>>312
0341デフォルトの名無しさん
2010/10/20(水) 10:11:26(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
問題の条件がよくわからないのでこのくらいしか言えないかなぁ
#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);
}
#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]);
}
/* 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] );
}
0346デフォルトの名無しさん
2010/10/20(水) 15:05:04ご丁寧にありがとうございます!
0347デフォルトの名無しさん
2010/10/20(水) 15:42:01だからstack.push(&stack);みたいにした方がいいわけね。
0348デフォルトの名無しさん
2010/10/20(水) 20:37:41ヘッダファイル には struct へのポインタ型と、public な関数だけを記述しなければならない。
インスタンスを作る関数以外の public な関数には、
必ず struct へのポインタ型の引数がなければならない。
当然、インスタンスを作る関数内に malloc などが必要で、
破棄する関数で free を使う。
ポインタがある時点で、書き換えて欲しくない変数も強引に書き換えられるから、
厳密なカプセル化なんて無理だけどね。
0349デフォルトの名無しさん
2010/10/20(水) 21:15:33これで勝つる
0350デフォルトの名無しさん
2010/10/20(水) 21:21:26そして俺の宿題解決の力になってくれよ。
テストあったけどたぶん赤点だろうから課題がたくさん出るわけだ
0351デフォルトの名無しさん
2010/10/20(水) 21:23:040352デフォルトの名無しさん
2010/10/20(水) 21:25:16クラスとか一切つかわずに?
0353デフォルトの名無しさん
2010/10/20(水) 21:32:130354デフォルトの名無しさん
2010/10/20(水) 21:35:050355デフォルトの名無しさん
2010/10/20(水) 21:43:590356デフォルトの名無しさん
2010/10/20(水) 21:49:510357デフォルトの名無しさん
2010/10/20(水) 21:52:170358デフォルトの名無しさん
2010/10/20(水) 21:54:40無理くり private を隠蔽したいなら private 変数をまとめた構造体を用意し公開する構造体に char* でぶら下げて
使うときにキャスト代入して参照するなんて荒業も有るかも知れんけど...無理に書き換えられるのは回避できないね
0359デフォルトの名無しさん
2010/10/20(水) 21:58:02C++使える環境が一般的では無かった時代に出たのでは?
20年くらい前だと gcc も C++ に対応してなかった気がする
gpp とかいうC++→Cトランスレーターを使った記憶が有るんだが自信は無い
0360323
2010/10/20(水) 22:01:08ありがとうございます!
ただ、エラーが出てしまいました。
bloodshedのdev-c++を使ってますが、そのままコピペで大丈夫でしょうか?
0361デフォルトの名無しさん
2010/10/20(水) 22:02:580362デフォルトの名無しさん
2010/10/20(水) 22:13:01正常終了時の return が無いから warning は出そうだな
nen = 1989 ってのは基準年じゃないの?
このソースだと 1989 が使われないけど問題ないのかな?
0363デフォルトの名無しさん
2010/10/20(水) 22:14:22&#160 は、スペースに置き換えないと
0364323
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
0365デフォルトの名無しさん
2010/10/20(水) 22:39:320366デフォルトの名無しさん
2010/10/20(水) 22:44:270367デフォルトの名無しさん
2010/10/20(水) 22:49:38>>365 のは、配列宣言の順番のことを言ってるんだろうけど、
君のは全く理解できない。printf では順番合ってるよ。
0368デフォルトの名無しさん
2010/10/20(水) 22:57:52使ってるコンパイラが日本語に対応してないように見えるね。
DevC++JPプロジェクトあたりを参考にしてみてください。
0369323
2010/10/20(水) 23:23:16学校で使ってるのが英語版のやつなんですけど、
いままで日本語の表示もできていたんですけどね。
初心者でわからないことだらけですみません。
0370デフォルトの名無しさん
2010/10/20(水) 23:34:130371323
2010/10/21(木) 00:31:19{"子","丑","寅","卯","辰","巳","午","未","申\","酉","戌","亥"}
0373デフォルトの名無しさん
2010/10/21(木) 05:28:51OSは日本語を表示できるけどコンパイラが日本語を受け付けないって状況なんか?
だったら、文字列をファイルから読み込んだらどうよ....面倒くさいけど
0374デフォルトの名無しさん
2010/10/21(木) 05:59:17単に signed char に 0x80 以上の値が有るのを拒否されてる可能性が有るから
static char *jyunisi[12] = ....
static char *jikkan[10] = ....
を
static unsigned char *jyunisi[12] = ....
static unsigned char *jikkan[10] = ....
に修正するのを試してみてけれ
0375デフォルトの名無しさん
2010/10/21(木) 07:40:49エラーメッセージ読みとれない奴は回答禁止。
0376デフォルトの名無しさん
2010/10/21(木) 08:27:29通常 stray 〜 in program が出る場合はソース内に全角スペースが混入していて、
『はぐれた変な文字が入ってるよ』って意味で出てるんだけど >>345 のソースをコピペして bcc で動かすと動く訳よ
だからメッセージ通りの意味では無いと考えたら、日本語に対応してないコンパイラによって "" 内の文字列に
イチャモン付けてる可能性に思い当たった訳だ
メッセージ読めないとか勝手に決め付けられるのは不愉快だな
0377デフォルトの名無しさん
2010/10/21(木) 08:51:10とりあえず下記でもエラー出るか試してみてよ。
static wchar_t *test1[] = {L"子", L"丑"};
static wchar_t *test2[] = {U"子", U"丑"}; /* これはCでは非標準だが */
この場合、printfのフォーマットも%wとか%lsになったりするんだけども。
> いままで日本語の表示もできていたんですけどね。
Dev-C++ 日本語版は、家にインストールしたんだけど、学校と同じ英語版は、
どこからダウンロードして、インストールすればいいの??
家でインストールしたのは英語版で、学校で使ってるのは日本語版だよ。たbん>>171
0379デフォルトの名無しさん
2010/10/21(木) 13:13:34エラーメッセージを正しく読みっていれば、>>374の修正は思い至らない。
あの修正で回避できる場合のエラーメッセージは全然違う。
だから読み取れないと言ったんだよ。 お前退場。
0380デフォルトの名無しさん
2010/10/21(木) 13:13:56"入力文字列に小文字のアルファベットが何文字含まれているか出力せよ"
の問題が分かりません。
0381デフォルトの名無しさん
2010/10/21(木) 13:14:41[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と表示させよ。
0382デフォルトの名無しさん
2010/10/21(木) 13:21:33#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;
}
ビルド確認なし。動くかね?
0383380
2010/10/21(木) 13:33:12ビルドエラーが出ました。
エラー内容は、
'scanf' の宣言を確認してください。
loijh.obj : error LNK2005: _main は既に 65656565.obj で定義されています。
fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました
です。
0384デフォルトの名無しさん
2010/10/21(木) 13:40:490385デフォルトの名無しさん
2010/10/21(木) 13:43:160386デフォルトの名無しさん
2010/10/21(木) 13:51:57問題を小出しにして、後でそれをくっつけても動きません。
>>1にテンプレートがあるので、問題を整理して依頼してみては?
0387デフォルトの名無しさん
2010/10/21(木) 14:06:32#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');
}
}
0388デフォルトの名無しさん
2010/10/21(木) 14:15:430389デフォルトの名無しさん
2010/10/21(木) 14:17:170391デフォルトの名無しさん
2010/10/21(木) 14:22:38[2] 問題文(含コード&リンク):入力した点から点まで直線を引くプログラミングを書く
二重配列a[i][j]を使う
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 今日中
[5] その他の制限: 特になし
0393323
2010/10/21(木) 17:49:31今度は実行したあとにparameter errorとコマンドプロンプトに表示され瞬時に強制終了?
で消えてしまうのですが、なぜでしょうか。
ttp://home.catv.ne.jp/ff/knuhs/tools/devcpp-4.9.9.2_setup.exe
学校で使ってるのはここからダウンロードしたもので、
家でも同じものを使っています。
他の課題をやったときは日本語の表示は問題ありませんでした。
0394デフォルトの名無しさん
2010/10/21(木) 18:04:08プログラムをよく読め特に
if(argc<2) {puts("Parameter error."); return 1;}
の部分をよく読め
0395デフォルトの名無しさん
2010/10/21(木) 18:06:270397デフォルトの名無しさん
2010/10/21(木) 18:15:46じゃあ
if(argc<2) {puts("Parameter error."); return 1;}を削って
sscanf(argv[1], "%d", &nen);
を
scanf( "%d", &nen);
にすると多分上手くいく、タメシテないけど
0399デフォルトの名無しさん
2010/10/21(木) 18:30:29Windows プログラムですか?どんなことを習いましたか?
0400デフォルトの名無しさん
2010/10/21(木) 18:40:192次元配列を使うってのも謎だな
CUIベースで '*' でも使った線を引くって事かも?
0401デフォルトの名無しさん
2010/10/21(木) 18:41:43このテンプレ本当の初心者から見るとどう書いていいかわからんのかもね
0402デフォルトの名無しさん
2010/10/21(木) 18:41:530403デフォルトの名無しさん
2010/10/21(木) 18:43:072次元配列を使ってねーじゃねーかw
0404デフォルトの名無しさん
2010/10/21(木) 18:48:11int t[20][20];
printf("言うとおりにしてください。さもないと通報します。\n")
getch();
printf("油性マジックを右手にもってください\n");
getch();
printf("画面の左上か(略
0405デフォルトの名無しさん
2010/10/21(木) 18:48:23どこまで習っているかは分けたほうがいいかもね
0406デフォルトの名無しさん
2010/10/21(木) 18:50:130407デフォルトの名無しさん
2010/10/21(木) 19:06:27[2] 問題文(含コード&リンク):
32ビットの2進数から、.で区切られた10進数のIPアドレスに変換してください
入力例
00000011100000001111111111111111
出力
3.128.255.255
[3] 環境
[3.1] OS: WindowsXp
[3.2] コンパイラ名とバージョン: VC++ 2010
[3.3] 言語: どちらでも可
[4] 期限: 来週の木曜日
[5] その他の制限:特に無し
0408デフォルトの名無しさん
2010/10/21(木) 19:12:08傾きによる条件分けがめんどくさそうな気がしたのでゴリ押した
こういうことじゃなくて?
http://codepad.org/jTG5mbnx
0409デフォルトの名無しさん
2010/10/21(木) 19:30:45はい
http://codepad.org/6I1f4i0g
0410デフォルトの名無しさん
2010/10/21(木) 19:47:26strtolはありか?そこを聞いてる問題だと思ったが
まあ制限特に無しだからいいのかもしれんが
0411デフォルトの名無しさん
2010/10/21(木) 20:07:54#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;
}
0412デフォルトの名無しさん
2010/10/21(木) 20:14:44[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] 期限:今週中
お願いします。
0413デフォルトの名無しさん
2010/10/21(木) 20:20:27for(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]);
0414デフォルトの名無しさん
2010/10/21(木) 20:25:120415デフォルトの名無しさん
2010/10/21(木) 20:27:50常に0って表示されるね。よく考えよう。
0416デフォルトの名無しさん
2010/10/21(木) 20:30:450417デフォルトの名無しさん
2010/10/21(木) 20:34:10ありがとうございます!
0418デフォルトの名無しさん
2010/10/21(木) 20:34:250419デフォルトの名無しさん
2010/10/21(木) 20:36:32for(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;
}
にして無駄な関数呼び出しも減らしたい
0420デフォルトの名無しさん
2010/10/21(木) 20:39:24dist(p[0], p[1]) を2回呼んでいるのは、無駄とは言わないの?
0421デフォルトの名無しさん
2010/10/21(木) 20:41:06L2-ノルムの演算回数が多すぎる
O(n^2)は効率悪いと思うんだけど
ちょっと工夫してO(nlogn)だろJK
0422デフォルトの名無しさん
2010/10/21(木) 20:48:14工夫してみせてくれよ
0423デフォルトの名無しさん
2010/10/21(木) 20:52:47ループ内の最初の一回以外全部無駄なのと、ループ内の最初の一回だけが無駄なのと
どっちがいいかってことだろ
0424デフォルトの名無しさん
2010/10/21(木) 21:06:59でも、無駄な関数呼び出しには変わりない。以下のようにできるから。
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;
}
}
0425デフォルトの名無しさん
2010/10/21(木) 21:20:010426デフォルトの名無しさん
2010/10/21(木) 22:03:51「無駄」と言っている割には中途半端だと思っただけ。
0427デフォルトの名無しさん
2010/10/21(木) 22:06:251秒以下の実行時間短縮のために、あなたは宿題にどのくらいの時間を消費する気?
はっきり言って、労力に効果が見合ってないよ。
0428デフォルトの名無しさん
2010/10/21(木) 22:33:29この課題の題意に沿ってかつ避けれる方法があるのだろうか?
ソートするにしても、まず2点間の距離を全部もとめなくてはならないのではないか。
0429ワリオPV
2010/10/21(木) 22:37:55学校の宿題で下記の図形を表示させるプログラムが出たのですが、
どうしても分かりません。
図形↓("_"はスペースの代わりです。)
**********
_**********
__**********
___**********
____**********
_____**********
______**********
_______**********
________**********
_________**********
レポート提出があるので、早めにお願いします(>_<)
では。
0430デフォルトの名無しさん
2010/10/21(木) 22:38:42座標は整数値のみとかならやりようもあるが
実数で∞範囲内だとしたら地道にやるしかないんじゃないの?
0431デフォルトの名無しさん
2010/10/21(木) 22:41:47#include <stdio.h>
int main(void)
{
int i,j ;
for ( i = 0 ; i < 10 ; i++ ){
for ( j = 0 ; j < i ; j++ ){
putchar(' ') ;
}
printf ( "**********\n" ) ;
}
}
0432ワリオPV
2010/10/21(木) 22:44:01おおおお!ちゃんと表示された!
ありがとうございました!m(_ _)m
0433デフォルトの名無しさん
2010/10/21(木) 22:44:36#include <stdio.h>
int main(void)
{
int i;
for(i = 0; i < 10; i++) printf("%*s\n", i + 10, "**********");
return 0;
}
0434ワリオPV
2010/10/21(木) 22:48:49そのような方法もあったのか・・・
プログラムっていろんなやり方があるのですね・・・
0435デフォルトの名無しさん
2010/10/21(木) 22:56:19一度Ο(nlogn)とかいてみたかったのですねよくわかりませんが
0436デフォルトの名無しさん
2010/10/22(金) 00:15:290437デフォルトの名無しさん
2010/10/22(金) 00:40:07科目名がアルゴリズムだしなんかあるのかもね
まあ421が何とかしてくれるでしょ
0438デフォルトの名無しさん
2010/10/22(金) 00:47:320439デフォルトの名無しさん
2010/10/22(金) 00:51:03日本には食うものがない。
0440デフォルトの名無しさん
2010/10/22(金) 01:23:36おれもそう思って、今も考えてるんだけど、いい方法が思いつかん。
0441デフォルトの名無しさん
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文字表示するプログラムです。
入力する文字列はアルファベットとなっています。
0442デフォルトの名無しさん
2010/10/22(金) 01:33:10#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;
}
0443デフォルトの名無しさん
2010/10/22(金) 01:39:13CBIRとか圧縮とかやってるから日常的に使っているんだよなぁ
問題が最近傍探索だからいろいろあるのよ
ヒント与えたから実装は自分でやってね
別にライブラリ使ってもいいけどね
ハッシュ関数の性能にもよるけど、確率的な近似で良ければもっと抑えられるアルゴリズムがある
みんながCBIRに興味持ってくれたらうれしいかも
線形代数は素晴らしい
0444デフォルトの名無しさん
2010/10/22(金) 01:44:04ありがとうございます。
これと、ポインタを使う場合とは
どのような違いがあるかよければ教えてもらえませんか?
0445デフォルトの名無しさん
2010/10/22(金) 02:56:20最近傍探索で k-d treeを使ったことがあります。そのときは、絞り込んだ後は全幅探索になり、
データによっては最悪の場合もあって、そのときは全幅探索とかわりない、あるいは余計なお膳立てはしないほうが良かった、という結論に陥ってしまいました。
ノルム自体もユークリッドノルムはよくなくて、∞-ノルムをつかったりしましたがあまりパッとしたものではありませんでした。
今の計算機なら違った結果がでたかもしれませんけれども。
画像認識方面の方ですか?
0446デフォルトの名無しさん
2010/10/22(金) 04:02:52O(n^2)以降が意味不明になるけど
0447デフォルトの名無しさん
2010/10/22(金) 06:39:45[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] その他の制限:特に無し
0448447
2010/10/22(金) 06:42:50計算した結果が整数になった場合は分数の部分は
表示しないということでお願いします。
0449デフォルトの名無しさん
2010/10/22(金) 09:57:44汚いけど一応答えは出るよ、main() の入力部分だけ自分で追加してね(c1, m1, c2, m2 )
ttp://codepad.org/ROciluu0
0450449
2010/10/22(金) 09:59:3873行目
× if( c > m ) {
○ if( c >= m ) {
0451449
2010/10/22(金) 10:14:42ttp://codepad.org/C2zkQw5K
0452デフォルトの名無しさん
2010/10/22(金) 18:56:42[2] 問題文(含コード&リンク):
(1)下の画像のプログラムを3つに分割してください
(2)アクセス指定子をつけてください
http://imepita.jp/20101022/678990
[3] 環境
[3.1] OS:Linux
[3.3] 言語: C++
[4] 期限: 2010年10月24日まで
[5] その他の制限: なるべく難しくしないでお願いします。 今習っているのはクラスとアクセス指定子です。
0453デフォルトの名無しさん
2010/10/22(金) 19:11:37seiseki.h と seiseki.cpp と main.cpp に分割しろって事か?
アクセス指定子は public って付いてるけど?
0454デフォルトの名無しさん
2010/10/22(金) 19:12:053つのファイルに分割する、でいいのか?
ttp://codepad.org/CSjyyeuw
0455デフォルトの名無しさん
2010/10/22(金) 19:34:16[2]問題文 大きさを入力して、半角文字*を使い、Xを描く。大きさは
Xの縦と横の半角文字数である。
[3]環境
[3-1]os: windows7
[3-2]コンパイラ名とバージョン:visualstdio2008
[3-3]C言語
[4]期限 2010/10/22
[5]繰り返し文までしか習っていません。
if文とfor文で書くこととのことです。おねがいいたします。さっぱりわかりません。
0456デフォルトの名無しさん
2010/10/22(金) 19:48:08#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;
0457デフォルトの名無しさん
2010/10/22(金) 19:49:26while(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 ;
}
エラーが出ますが、何が原因なのでしょうか?教えてください
0458デフォルトの名無しさん
2010/10/22(金) 20:17:310459デフォルトの名無しさん
2010/10/22(金) 20:18:200460デフォルトの名無しさん
2010/10/22(金) 20:25:080461デフォルトの名無しさん
2010/10/22(金) 20:26:24#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 ;
}
0462デフォルトの名無しさん
2010/10/22(金) 20:44:27それを消してもまだエラーになります
0463デフォルトの名無しさん
2010/10/22(金) 21:07:08問題を教えてください。
なにがしたいのかさっぱりわかりません。
0464デフォルトの名無しさん
2010/10/22(金) 21:09:51配列の使い方がめちゃくちゃだが
0465デフォルトの名無しさん
2010/10/22(金) 21:33:01有難うございました。完璧です!
助かりました。
0466デフォルトの名無しさん
2010/10/22(金) 21:36:511から100までの素数を求める問題です
0467デフォルトの名無しさん
2010/10/22(金) 21:39:480468デフォルトの名無しさん
2010/10/22(金) 21:41:49そもそもこのプログラム自体が間違っているということでしょうか?
0469デフォルトの名無しさん
2010/10/22(金) 22:04:360470デフォルトの名無しさん
2010/10/22(金) 22:35:49N が十分に小さいなら、O(nlogn) のアルゴリズムを動かすために必要な下準備で
動的にメモリ確保して DB とか平衡木を作っている間に、
O(n^2)のアルゴリズムが終了するよ。
そんなこともわからずに、文句を言う奴は恥の極みだな。
0471デフォルトの名無しさん
2010/10/22(金) 22:36:520472ワリオPV
2010/10/22(金) 22:55:47最大値と最小値を画面に出力するプログラムが分かりません。
今のところプログラムはこんな感じです。
#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)
上の様なエラーが出てしまいます。
原因と合わせて教えてもらえると幸いです。よろしくお願いします。><
0473デフォルトの名無しさん
2010/10/22(金) 23:01:11while(a>=9)
{
a++;
0474デフォルトの名無しさん
2010/10/22(金) 23:14:26痛いとこ付くねw
0475デフォルトの名無しさん
2010/10/22(金) 23:17:000476デフォルトの名無しさん
2010/10/22(金) 23:21:37[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
ここまで書いたんですがうまくいかないようです
どこを書き換えたらいいんでしょう
出来ればその理由も添えていただくとありがたいです
0477デフォルトの名無しさん
2010/10/22(金) 23:29:54for文の初期値は l = j です
これでもうまくいきませんでした
0478デフォルトの名無しさん
2010/10/22(金) 23:34:53>後からあれは使えないこれは使えないと追加注文するかもしれません
生意気すぎるよ。自分でやれ
0479デフォルトの名無しさん
2010/10/22(金) 23:45:260480デフォルトの名無しさん
2010/10/22(金) 23:49:52[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を入れといたからこれで確認してみる。
お願いします。
0481デフォルトの名無しさん
2010/10/22(金) 23:50:47それなら、何なら使ってよいのか列挙した方が良いんじゃないの。
返事もらって、それはダメって言われるより、回答する方も手間がかからないだろ。
0482デフォルトの名無しさん
2010/10/22(金) 23:56:53そうですね
printf, scanf, for, if, while, break, 配列, マクロ, 関数, 再帰
が使えます
ポインタと構造体は使わないでください
0483デフォルトの名無しさん
2010/10/23(土) 00:01:186つもネストされたforループ文なんて見たくもないです
書き直すので「部分的連続配列」が何を指してるのか具体的に説明して
0484デフォルトの名無しさん
2010/10/23(土) 00:04:060485デフォルトの名無しさん
2010/10/23(土) 00:04:260486デフォルトの名無しさん
2010/10/23(土) 00:06:34・幅は M - i まで
・total += a[k][l];
・(i == 0 && j == 0 && w == 0 && h == 0)←必要なの?
・maxの初期値がない
0487デフォルトの名無しさん
2010/10/23(土) 00:37:03[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>から始めること
0488デフォルトの名無しさん
2010/10/23(土) 00:46:27(2)は(1)を踏まえてってことだよね?
http://codepad.org/iwdkaEon
0489デフォルトの名無しさん
2010/10/23(土) 01:46:40何をもって「終わった話」と判定しているのか知らんが、
状況によってアルゴリズムを使い分けられなかったら、半人前以下なのは間違いない。
0490デフォルトの名無しさん
2010/10/23(土) 01:49:070491デフォルトの名無しさん
2010/10/23(土) 01:50:070492デフォルトの名無しさん
2010/10/23(土) 01:54:19>・(i == 0 && j == 0 && w == 0 && h == 0)←必要なの?
>・maxの初期値がない
初期値がないから上の条件が必要なんじゃないか?
0493デフォルトの名無しさん
2010/10/23(土) 01:58:55あー、そういうことか。納得しました
ループ始める前に初期値入れる方法で考えてた。
0494デフォルトの名無しさん
2010/10/23(土) 03:17:12お願いします
0495デフォルトの名無しさん
2010/10/23(土) 03:18:00確かにあなたの言う通りですね、私の負けでいいですよ
一応聞いておきますが、Nが十分小さいときのNの値はいくらでしょうか
『珠玉のプログラミング』をお薦めする
0496デフォルトの名無しさん
2010/10/23(土) 03:22:18マクローリン展開(x = 0のまわりでのテイラー展開)の間違いではないですか?
0497デフォルトの名無しさん
2010/10/23(土) 03:33:22e^x=1+x/1!+x^2/2!+x^3/3!+....というものです。
問題文にテイラー展開と書いてあったのでそうかなと
0498デフォルトの名無しさん
2010/10/23(土) 03:49:52[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、配列の参照ぐらいしか習ってないです、よろしくお願いします
0499デフォルトの名無しさん
2010/10/23(土) 03:51:48#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;
}
0500デフォルトの名無しさん
2010/10/23(土) 03:59:51多分seisekiでいいんだと思います…
Personクラスというのをを3つに分けたら
Person.h Person.cpp Pers_prog.cppらしいです。
>>454
このプログラムを3つに分割するって書いてあるので、大丈夫だと思います。ありがとうございます
0501デフォルトの名無しさん
2010/10/23(土) 04:06:52これって2行目とか3行目の書き方って特殊な書き方でしょうか?これ習ってないと思うんですが…
0502デフォルトの名無しさん
2010/10/23(土) 04:10:17もう少し簡素な奴をお願いします
0503デフォルトの名無しさん
2010/10/23(土) 04:14:29http://codepad.org/UuV2V90Z
0504デフォルトの名無しさん
2010/10/23(土) 04:17:06十分すぎるくらい簡素だと思うのですが、どの点が簡素でないと感じたのでしょうか。
それがわからないと、かきなおしようがないと思います。
0505デフォルトの名無しさん
2010/10/23(土) 04:23:20double exp2(double x)はわかりません。
int main(void) で全てできるようにしたいのです。
0506デフォルトの名無しさん
2010/10/23(土) 04:29:02途中までやった自分のと比べて美しすぎる・・・
ありがとうございました!
0507デフォルトの名無しさん
2010/10/23(土) 04:37:02#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;
}
0508デフォルトの名無しさん
2010/10/23(土) 06:09:24[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] その他の制限: 多倍長演算ライブラリ使用
巨大整数から奇数整数ビット列を抜き出すプログラムです
0509デフォルトの名無しさん
2010/10/23(土) 07:23:03#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;
}
0510デフォルトの名無しさん
2010/10/23(土) 08:08:42[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文の使用
よろしくお願いします
0511デフォルトの名無しさん
2010/10/23(土) 11:06:44多倍長演算ライブラリ使用とありますが、
どのようなライブラリが紹介されましたか?あるいは自分で作らなければならないのですか?
0512デフォルトの名無しさん
2010/10/23(土) 11:12:51[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日まで
よろしくお願いします。
0513デフォルトの名無しさん
2010/10/23(土) 11:25:15LiDIAが使われています。
0514デフォルトの名無しさん
2010/10/23(土) 11:48:48実行環境のCPUやメモリの階層構造、ライブラリの出来にも依存するから、一概に決められない。
ハードウェアの知識が少しでもあったら、そんな質問はありえないと思うが。
時間制約はあるのか、どれくらいの計算精度が必要かなど、
プログラムを使う人の要望によっても、使用するアルゴリズムは違うだろ。
ループ依存のないアルゴリズムは、並列化が楽ってこともあるし。
何でもかんでもアルゴリズムのオーダを下げればよいというもんでもないというのは知っておくべき。
0515デフォルトの名無しさん
2010/10/23(土) 11:50:49>>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);
}
0518デフォルトの名無しさん
2010/10/23(土) 13:36:59部分的連続配列ってのは
ある2次元配列a[i][j]のなかにある2次元配列b[k][l]のことです
例えばa[5][5]のとき部分的連続配列はb[1][1]からb[5][5]まであります
またb[1][1]はとりかたが25通りありますし、b[2][4]のように縦と横の比が変わったものもそう呼ぶようです
0519デフォルトの名無しさん
2010/10/23(土) 15:04:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10952.txt
0520デフォルトの名無しさん
2010/10/23(土) 15:19:39>scanf("%d", &a[i][j]);
ひょっとしてこれはポインタを使っているじゃないんですか
>>482
>ポインタと構造体は使わないでください
0521デフォルトの名無しさん
2010/10/23(土) 15:23:02>>476自身が使っている箇所なので、ご自身でお直し下さい
0522デフォルトの名無しさん
2010/10/23(土) 15:35:25>>476 に示されたソースに沿う形(若干変更していますが)書き直してみました。
デバッグコードも置いたままになっているので参考になるかと。
http://codepad.org/D4lZOXkQ
0523デフォルトの名無しさん
2010/10/23(土) 15:42:55たくさん表示されてどれが答えかわからないんですけど。
あとちゃんと最大なものが求められていませんけど。
0524デフォルトの名無しさん
2010/10/23(土) 15:47:36部分的連続配列はb[1][1]からb[5][5]までの、それぞれの最大値です。
全ての中から最大値を求める問題であるなら、それはb[5][5]ではないでしょうか?
0525デフォルトの名無しさん
2010/10/23(土) 16:02:39◆QZaw55cn4c が宿題を有償で解くスレです。
トリップつきで問題を投稿してください。
◆QZaw55cn4c から受諾のレスがあったら、○○銀行普通口座△△△△△△△に1000円振り込んでください。手数料は振り込み主持ちです。
◆QZaw55cn4c の受諾のレスには期限が記されています。
◆QZaw55cn4c はその期限内に宿題の回答のアップロード先を投稿いたします。
受諾のレスがあったにもかかわらず期限までに回答がアップロードされなかった場合には、返金いたします。
その他の場合には返金いたしません。
小遣い稼ぎにはなりそうですね。規制がかかったときにどうするかが課題でしょうね。
0526デフォルトの名無しさん
2010/10/23(土) 16:08:50配列の要素が負の数である可能性があります。
0527デフォルトの名無しさん
2010/10/23(土) 16:15:40せっかく酉着けてるんだから銀行振込よりモリタポの方が簡単かも
0528デフォルトの名無しさん
2010/10/23(土) 16:19:440529デフォルトの名無しさん
2010/10/23(土) 16:26:06支払い方法さえ確立できるのであれば、それはもう倍お渡ししてもいいくらいの気持ちです。
他に回答がなかったら、これでも使ってください。
http://codepad.org/hMstBppC
0531デフォルトの名無しさん
2010/10/23(土) 16:46:290532デフォルトの名無しさん
2010/10/23(土) 16:55:14Knuth でもしなかったことですから、それは勘弁してくださいな。
0533デフォルトの名無しさん
2010/10/23(土) 17:01:05間違いがありました。負の数も考慮しました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10953.txt
0534デフォルトの名無しさん
2010/10/23(土) 17:38:15うまくうごきますね。
0535デフォルトの名無しさん
2010/10/23(土) 22:38:35[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の中身もお願いします。
よろしくお願いします。
0536デフォルトの名無しさん
2010/10/23(土) 23:02:55using 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;
}
0537デフォルトの名無しさん
2010/10/23(土) 23:06:33何回も言うけど、問題文から制限までちゃんと読め。
0538デフォルトの名無しさん
2010/10/23(土) 23:07:28#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;
}
0539デフォルトの名無しさん
2010/10/23(土) 23:41:12ええ。
文字型配列を使え、例の3行をいれろ、という指示は敢えて無視しています。
文字列を扱うのに、長さに限度のある配列を使うというのは嫌いなんです。
だいたい、
if (strlen(a) < strlen(b)) {
strcpy( ...
という書き方ならば、プログラムの最後で変数 c, b, a の順に表示させるのか、というところまで気に食わない。
だから、「他に回答がなければ」という断りをいれました。
多分他の方が題意にそったちゃんとした回答をかいてくれるでしょう。
0540デフォルトの名無しさん
2010/10/23(土) 23:50:200541デフォルトの名無しさん
2010/10/23(土) 23:50:51それならば、解答方法に問題があるだろ。
使えないものを使ってくれってどういう意味だよ。
題意は満たしてないので参考程度に~、とか、誤解を招かない書き方はあるよね。
0542デフォルトの名無しさん
2010/10/23(土) 23:54:53それもそうですね。なにもしらない回答者にやつあたりしても仕方がないですね。
>>510
>>530 は取り下げます。他の方の回答をお待ちください。
0543デフォルトの名無しさん
2010/10/23(土) 23:59:40ワザワザ妙な書きかたするのは自分の知識を自慢したいとかそういう意識が働くのだろうか?
0544デフォルトの名無しさん
2010/10/24(日) 00:02:460545デフォルトの名無しさん
2010/10/24(日) 00:02:520546デフォルトの名無しさん
2010/10/24(日) 00:04:08そう取られても仕方がないとは思いますが、実は純粋にわがままなおこちゃまというだけでしたね。スレ汚し失礼しました。
0547デフォルトの名無しさん
2010/10/24(日) 00:07:42>>543 の言いたいことを正しく理解できてないよ。
getline 関数はもっと読みやすい綺麗なコードで書けるって言ってるんだよ。
0548デフォルトの名無しさん
2010/10/24(日) 00:27:30そうですか‥‥‥。
これまでにも getline() もできうる限り簡略化してきたのですが、まだ足りませんか。うーん
0549デフォルトの名無しさん
2010/10/24(日) 00:34:560550デフォルトの名無しさん
2010/10/24(日) 00:36:170551デフォルトの名無しさん
2010/10/24(日) 00:42:490552デフォルトの名無しさん
2010/10/24(日) 01:10:52>>551
まともに読めないじゃなく、読んでも宿題だろうが仕事だろうが依頼者の意向
は無視し全て俺俺の好きなようにやる性格
0553デフォルトの名無しさん
2010/10/24(日) 01:12:550554デフォルトの名無しさん
2010/10/24(日) 01:18:38今までの宿題で、ちゃんと題意を把握できてたことのほうが少ないだろw
0555デフォルトの名無しさん
2010/10/24(日) 01:21:13ついに言いがかりまでつけはじめたw
0556デフォルトの名無しさん
2010/10/24(日) 01:24:351:事実に対して仮定を持ち出す
2:ごくまれな反例をとりあげる
3:自分に有利な将来像を予想する
4:主観で決め付ける
5:資料を示さず自論が支持されていると思わせる
6:一見関係ありそうで関係ない話を始める
7:陰謀であると力説する
8:知能障害を起こす
9:自分の見解を述べずに人格批判をする
10:ありえない解決策を図る
11:レッテル貼りをする
12:決着した話を経緯を無視して蒸し返す
13:勝利宣言をする
14:細かい部分のミスを指摘し相手を無知と認識させる
15:新しい概念が全て正しいのだとミスリードする
0557デフォルトの名無しさん
2010/10/24(日) 01:31:23あんま解答者を攻めると答えづらくなるからやめたほうがいいでないかい
0558デフォルトの名無しさん
2010/10/24(日) 01:38:10この程度で答えづらくなるくらいの神経が有ればまだ良かったのだが
0559デフォルトの名無しさん
2010/10/24(日) 01:42:34けれどもすごいコードがあがってくるとかなりめげます。
0560デフォルトの名無しさん
2010/10/24(日) 01:44:23題意に沿ったコードなんだってば
0561デフォルトの名無しさん
2010/10/24(日) 01:45:390562デフォルトの名無しさん
2010/10/24(日) 02:57:38業務なら簡素化できるとかよりワークバッファが小さすぎて効率が悪いって突っ込まれるな
再帰で使われるような関数でないならスタックに1Kや2K積んでも誰も文句は言わんよ
0563デフォルトの名無しさん
2010/10/24(日) 04:11:130564デフォルトの名無しさん
2010/10/24(日) 04:19:14うちの大学だと
提出しなくてもいいけどすると成績上げますよ
的なやつだと特に期限がきられないことがある
0565デフォルトの名無しさん
2010/10/24(日) 04:38:17実際は最終日に提出したんじゃ間に合わないだろうけど
0566デフォルトの名無しさん
2010/10/24(日) 09:54:080567デフォルトの名無しさん
2010/10/24(日) 11:34:01期限とかそんなに関係ないけどね
0568ワリオPV
2010/10/24(日) 11:42:21[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;
}
0569デフォルトの名無しさん
2010/10/24(日) 11:46:00その部分は #define で自由に変えることができるように作りました。
0570デフォルトの名無しさん
2010/10/24(日) 11:52:00以前、
[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>を使わないで解きなさい。といわれました。
そこでどなたか前述のものを使わないで解いたものを作っていただきたいです。
あと、出力(表示)される左側二つの分数は約分などはせず、入力した時のそのままの数字で表示して、
一番右側の計算結果については、約分できるときは約分して、また、その答えが整数になったときは
その整数のみを表示するようにするそうです。
お願いします。
0571デフォルトの名無しさん
2010/10/24(日) 12:52:05解いた人だけど >>451 にはバグが有ったよ、表に出ないバグだから多分気が付かなかったと思うけど
えー stdlib.h も使えないの?だったら itoa() も使えないよなぁ
さすがに面倒だな
入力部分は約分も整数の切り出しもしないって事?
0573デフォルトの名無しさん
2010/10/24(日) 13:40:430574デフォルトの名無しさん
2010/10/24(日) 14:11:450575デフォルトの名無しさん
2010/10/24(日) 14:15:210576451
2010/10/24(日) 14:50:12書き直したけど先に簡単な回答をした人が居たね、gcm なんて知らんかったよ
表示の桁合わせを考慮しないなら sprintf() も使う必要無いから、講師が求めてた回答は >>572 みたいなのだと思う
よってアップするのは止めとくね
0577デフォルトの名無しさん
2010/10/24(日) 14:50:30それもそうですね。
>>570
修正しました。
http://codepad.org/1gcgwUog
0578デフォルトの名無しさん
2010/10/24(日) 15:10:42ユークリッドの互除法のところがなんかおかしい
a = b ;って何?
0579デフォルトの名無しさん
2010/10/24(日) 15:16:09ご指摘感謝。
>>570
度重なる修正すみません。
http://codepad.org/TIddlyEv
0580デフォルトの名無しさん
2010/10/24(日) 18:19:27ありがとうございます。
0581デフォルトの名無しさん
2010/10/24(日) 18:35:02141代目の7のエラー直してほしいです。
0582デフォルトの名無しさん
2010/10/24(日) 18:38:000584デフォルトの名無しさん
2010/10/24(日) 18:50:16[2] 問題文(含コード&リンク):
1000以下の素数を表示するプログラムを作成せよ。
素数とは1とそれ自身以外に約数をもたない自然数である。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年10月27日
[5] その他の制限:ポインタまで習っています。
よろしくお願いします。
0585デフォルトの名無しさん
2010/10/24(日) 19:09:19[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] その他の制限:ありません。
0586デフォルトの名無しさん
2010/10/24(日) 19:14:01>>1
0587デフォルトの名無しさん
2010/10/24(日) 19:18:19#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;
}
0588デフォルトの名無しさん
2010/10/24(日) 19:54:03#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;
}
0589デフォルトの名無しさん
2010/10/24(日) 19:57:50これって負数が入ったらどうするの?
#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 ;
}
0590デフォルトの名無しさん
2010/10/24(日) 19:58:44[1] 授業単元:
[2] 問題文(含コード&リンク):>>581
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (Visual C++ 2008)
[3.3] 言語: (C)
[4] 期限: ( [無期限] )
[5] その他の制限: 構文エラーを直してほしいです
0591デフォルトの名無しさん
2010/10/24(日) 20:05:27int 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;
}
0593デフォルトの名無しさん
2010/10/24(日) 20:16:11[2] 問題文(含コード&リンク):nとrを入力して
順列 nPr と組み合わせ nCr を表示するものを作成すること。
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名とバージョン:Visual Studio 2010
[3.3] 言語:C言語
[4] 期限:明日の15時までです。
[5] その他の制限:<stdio.h>のみで解くこと。
よろしくお願いします。
0594593
2010/10/24(日) 20:18:56>[2] 問題文(含コード&リンク):nとrを入力して
>順列 nPr と組み合わせ nCr を表示するものを作成すること。
[2] 問題文(含コード&リンク):nとrを入力して
順列 nPr と組み合わせ nCr を計算したときの値を表示するものを作成すること。
0595デフォルトの名無しさん
2010/10/24(日) 20:50:56何をするのかしらんが、構文エラーがなくなればよいんだろ
これでエラーなくなる
#include<stdio.h>
int main(void)
{
return 0;
}
0596デフォルトの名無しさん
2010/10/24(日) 21:27:55これで合ってるか?
http://codepad.org/oC2rdnr6
0598デフォルトの名無しさん
2010/10/24(日) 21:50:53http://codepad.org/d1xo3JSK
0600デフォルトの名無しさん
2010/10/24(日) 22:00:52for(int i=0;i<n;i++)
で怒られた、やりづらくて仕方ないな
0601デフォルトの名無しさん
2010/10/24(日) 22:19:01[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が実行できませんでした。
よろしくお願いします。
0603デフォルトの名無しさん
2010/10/24(日) 22:27:51VCだとscanfで警告は出るかもしれないけど、実行できないってことはないだろ
0604デフォルトの名無しさん
2010/10/24(日) 22:35:560605デフォルトの名無しさん
2010/10/24(日) 22:37:340606デフォルトの名無しさん
2010/10/24(日) 22:39:19invailed conversion from 'void*' to 'int*'
このようなエラーコードが出ました。
0607デフォルトの名無しさん
2010/10/24(日) 22:40:44それくらい自分でなんとかしようや
p = (int*)malloc(n * sizeof(int));
0608デフォルトの名無しさん
2010/10/24(日) 22:41:470609デフォルトの名無しさん
2010/10/24(日) 22:42:350610デフォルトの名無しさん
2010/10/24(日) 22:42:44バブルソートの問題です。
96~102行目だけを変えて(ここを考える問題なんですが)
正解と同じ実行結果にしなければいけません。
学校の演習システムで採点しているようで出力がちょっとでも違うと
正解にならないようです。
助けてください
0611デフォルトの名無しさん
2010/10/24(日) 22:49:23どこをどうしたらいいでしょうか?
0612デフォルトの名無しさん
2010/10/24(日) 22:50:320613デフォルトの名無しさん
2010/10/24(日) 22:52:490614デフォルトの名無しさん
2010/10/24(日) 22:53:04この一文を消したんじゃね?
0615デフォルトの名無しさん
2010/10/24(日) 22:53:39ではC++で実行するにはどうしたらいいですか?
0617デフォルトの名無しさん
2010/10/24(日) 23:01:11どうするもなにも、いまC++で実行してるんだろw
0618デフォルトの名無しさん
2010/10/24(日) 23:08:26http://codepad.org/5hg6x4t2
0619616
2010/10/24(日) 23:11:48失礼しました
0620デフォルトの名無しさん
2010/10/24(日) 23:12:41これって実行しても何も出てこないのはなぜでしょうか…
data.txtってメモ帳で保存すればいいんですよね…
プログラムはバブルソートとマージソートを組み合わせたものですが、
こちらで実行してみると、うまく動いています。
なにが問題なのでしょうか?
0622デフォルトの名無しさん
2010/10/24(日) 23:14:55n に 1000 より大きい数を入れたら、楽しいことができそうだな。
0623デフォルトの名無しさん
2010/10/24(日) 23:20:41>>312 が大元だったかな。
前回聞いたときもちゃんと教えられてるような気がするが…。
リダイレクトを使ってプログラムにデータを入力してください。
0624デフォルトの名無しさん
2010/10/24(日) 23:24:52./a.out < data.txt
の形ってどういう意味なんでしょうか
0625デフォルトの名無しさん
2010/10/24(日) 23:27:04データの読み込みがうまくいっているかどうかを確認するロジックを組み込みました。(あと若干修正しています。)
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
とこちらでは表示されます。
以上のうち、どこか違うところがあれば、そのポイントを詳しくおしえてください。
可能な限りのフォローはします。
0627デフォルトの名無しさん
2010/10/24(日) 23:40:32環境は Linux ですか、それとも Windows ですか。
>>277 を見る限りでは Linux のようでしたけれども。
0628デフォルトの名無しさん
2010/10/24(日) 23:42:06[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] その他の制限: なし
よろしくお願いします。
0629デフォルトの名無しさん
2010/10/24(日) 23:45:03今は家なんでvisual c++で行ってるんですが、何も出てきません…でも、結果はそう出るんですよね
0630デフォルトの名無しさん
2010/10/24(日) 23:54:270631デフォルトの名無しさん
2010/10/24(日) 23:54:39>コマンドラインから
>./a.out < data.txt
>と入力する
これちゃんとやってる?
VC ならば、コンパイルしたプログラムを「コマンドラインで」実行してみてください。
スタート→プログラム→VC++ →Visual Studio Tools→Visual Studio コマンドプロンプトを起動して、
そこでコンパイルなどの作業を行えば Linux の場合とほぼ同じようにすることができます。
ソースファイル名は ○○○.cpp
コンパイルの方法は cl ○○○.cpp
実行ファイルは、○○○.exe になります。
0633デフォルトの名無しさん
2010/10/25(月) 00:00:29visual c++でコンパイルして出てくる黒いのを使ってるんですが。
>>631
デバック→デバックなしで開始を押した後に出てくる黒い所に./a.out < data.txtと入れればいいんですよね
0634デフォルトの名無しさん
2010/10/25(月) 00:02:13vcなのに./a.out < data.txtって
0635デフォルトの名無しさん
2010/10/25(月) 00:04:27コマンドプロンプトが出たら何と入れればいいんですか
0636デフォルトの名無しさん
2010/10/25(月) 00:09:540637デフォルトの名無しさん
2010/10/25(月) 00:10:02VC では、実行ファイル名は a.out ではないと思います。
でも、VC を動かす人じゃないので詳しいことはわかりません。
>>632 を試してみてください。
0638デフォルトの名無しさん
2010/10/25(月) 00:13:31New file
*
って出てきました
0639デフォルトの名無しさん
2010/10/25(月) 00:15:153 4 2
5 1 3
0 0 2
1 9 2
4 4 4
キー入力する
0640デフォルトの名無しさん
2010/10/25(月) 00:17:05なんで変わったことしようとするの?
0641デフォルトの名無しさん
2010/10/25(月) 00:19:54今度はedlin data.txtって入れたら、End of input fileって出てきてしまいました。
で、数字入れたら、Entry errorと出てきます
0642デフォルトの名無しさん
2010/10/25(月) 00:21:08>デバック→デバックなしで開始を押した後に出てくる黒い所
VSを起動して状況をつかみました。
この場合はファイルのデータを入力することができません。
直接座標データを入力してください。
3 1 2<リターン>
1 2 3<リターン>
<Ctrl+Z><リターン>
すると max と min が表示されます。
元のプログラムは標準入力からデータを入力するようにつくられているので、この「黒いところ」ではこうやってデータを入力するしかありません。
0643デフォルトの名無しさん
2010/10/25(月) 00:21:47[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] その他の制限:※で示した以外は特にありません。
少し多いですがよろしくお願いします
0644デフォルトの名無しさん
2010/10/25(月) 00:22:49getline命の◆QZaw55cn4c のコードだから
getlineを意地でも使う
0645デフォルトの名無しさん
2010/10/25(月) 00:27:04もう少し大人になればいいのに
0646デフォルトの名無しさん
2010/10/25(月) 00:27:16じゃあファイル作った意味ってないんですか…
でも、結果さえ出れば大丈夫ですかね
0647デフォルトの名無しさん
2010/10/25(月) 00:28:31もうしわけないが、c++ なので拙作のgetline() はつかえません。
linux で作業しているものと考えていたので、標準入力からのリダイレクトが簡単だし良く知られているだろうと踏んだのですが、Windows の VC を使うなど、仮定が違っていましたね。
linux で作業しているものと思っていたんです。(教えてくれればよかったのですが。)
>>642 がうまくいきましたか?うまく行ったのなら、それがこのプログラムの仕様です。
Windows の cmd.exe から実行させる方法をご存知であれば、ファイルからデータを流し込む方法も使えます。
0649デフォルトの名無しさん
2010/10/25(月) 00:32:230650デフォルトの名無しさん
2010/10/25(月) 00:32:45ごめんなさい。でも、とりあえず数字は出てきました
0651デフォルトの名無しさん
2010/10/25(月) 00:33:06今時、コマンドプロンプトから、cl なんて打つ奴いないんだろうなあw
0652デフォルトの名無しさん
2010/10/25(月) 00:37:17確かにバッチファイルを書く人くらいかもね。
実行ファイルにファイルをドラッグして入力できるしな。
0653デフォルトの名無しさん
2010/10/25(月) 00:38:15linux でもそうだったらちょっとショックですね。
0654デフォルトの名無しさん
2010/10/25(月) 02:15:54その配列データの数値の平均を関数 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)
{
}
これどうやるの?
0655デフォルトの名無しさん
2010/10/25(月) 03:27:20http://codepad.org/hU2ZqRFK
0656デフォルトの名無しさん
2010/10/25(月) 04:32:53グローバル変数の使用を強要する問題ってなんか凄いな
0657デフォルトの名無しさん
2010/10/25(月) 08:06:55>>656よりは頭が良い奴が考えてると思うぞ。w
0658デフォルトの名無しさん
2010/10/25(月) 08:24:28ありがとうございます。
double data[100]をグローバルに指定するんですね。
見てみると「そうか!」と思いました。
0659デフォルトの名無しさん
2010/10/25(月) 08:27:05この手の解法ががちがちに決まってるタイプは
直前の授業まんまなことが多いから、きっとこの宿題の前の授業がグローバル変数だったんだよ
0660デフォルトの名無しさん
2010/10/25(月) 08:43:31そうなんですよ。
自動と静的、グローバルとローカルをやったんですよ。
0661デフォルトの名無しさん
2010/10/25(月) 12:10:040662デフォルトの名無しさん
2010/10/25(月) 12:19:08そんなもんだろ
0663デフォルトの名無しさん
2010/10/25(月) 12:24:06別に static である必要はないじゃろ?
0664デフォルトの名無しさん
2010/10/25(月) 12:41:27http://codepad.org/aAebB3SH
http://codepad.org/yQ4qnC8R
0665デフォルトの名無しさん
2010/10/25(月) 14:16:27http://codepad.org/KjhS9yGm
問題4はよう分からん
0666デフォルトの名無しさん
2010/10/25(月) 16:11:56ありがとうございました
0667デフォルトの名無しさん
2010/10/25(月) 18:24:32問題4の解答にワロタ
授業に出ていないとどんな解答が良いのかが解らんような感じだな
0668デフォルトの名無しさん
2010/10/25(月) 18:40:34void mondai4(void)
{
puts("風\n林");
puts("火\n山");
}
0669デフォルトの名無しさん
2010/10/25(月) 18:43:560670デフォルトの名無しさん
2010/10/25(月) 22:57:06[2] 問題文(含コード&リンク):nとrを入力して
組み合わせの数nCrを求めるプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows 7
[3.2] コンパイラ名とバージョン:ないのでideoneを使っています。
[3.3] 言語:C言語
[4] 期限:2010年10月29日まで
[5] その他の制限:なし
0671デフォルトの名無しさん
2010/10/25(月) 23:02:28これやめようよー
MinGWとかあるんだからさー
0672デフォルトの名無しさん
2010/10/25(月) 23:20:11[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] その他の制限:ありません。
0673デフォルトの名無しさん
2010/10/25(月) 23:29:33#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 ) ;
}
0675デフォルトの名無しさん
2010/10/25(月) 23:54:55入力されたn, r で上書きするのに tn, tr を 1 で初期化してる意味がわからない。
というか、そもそも tr の必要性を感じない。
tr *= i; のところは tn /= i; ではダメなの?
あと、n < 1 とか n < r のようなエラーとするべき場合が考慮されてない。
0676デフォルトの名無しさん
2010/10/25(月) 23:57:15標準入力なかったときのエラーはいいのかよwww
0677デフォルトの名無しさん
2010/10/25(月) 23:57:320678デフォルトの名無しさん
2010/10/25(月) 23:58:27あと、>>673 の類題は >>599 で解いています。この回答は、>>675 の指摘がそのまま当てはまってしまいます、残念ながら。
自分がしていないことを他人に突っ込んだりはしませんが。
自分より早く問題が解かれることに対しては、やっぱり悔しいと感じるのは認めます。
0680277
2010/10/26(火) 00:11:220681デフォルトの名無しさん
2010/10/26(火) 00:12:41少し待っていただけますか。>>640 から指摘もあったことですので、書き直します。
0682デフォルトの名無しさん
2010/10/26(火) 00:14:38リダイレクト(CLI) で調べるか、fopen 使ったプログラムに直してください。
0683デフォルトの名無しさん
2010/10/26(火) 00:15:330684デフォルトの名無しさん
2010/10/26(火) 00:17:40「標準入力なかったとき」というのが意味不明だが、
正しい標準入力されなかったときと解釈するならば、
scanf の戻り値チェックも加えておく必要があるね。
0685277
2010/10/26(火) 00:19:28はい。ごめんなさい。
http://codepad.org/GZNswf5O
実行ファイルと同じディレクトリ(フォルダ)にある data.txt を読み出します。
VC(VS) のデバッグを使って確かめるときは data.txt の場所に注意してください。
具体的にどこにおけばいいかは、私はちょっとわかりません。(VC を常用してないのです。)
0687デフォルトの名無しさん
2010/10/26(火) 00:28:43問1は、ファイルを3つに分割するって事は3つファイルを作るんですか?
0688687
2010/10/26(火) 00:32:210689デフォルトの名無しさん
2010/10/26(火) 00:36:29スレチですが暇な人誰か添削してください。
http://codepad.org/5mgLaHSP
0690689
2010/10/26(火) 00:39:300691デフォルトの名無しさん
2010/10/26(火) 00:52:02は>>452なの?
0692デフォルトの名無しさん
2010/10/26(火) 02:17:47codepad重すぎワロタ
#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
0693692
2010/10/26(火) 02:28:54putchar(c); は printf("%c", c); だな。
0694デフォルトの名無しさん
2010/10/26(火) 02:49:42>>692-693
結婚しろw
0695デフォルトの名無しさん
2010/10/26(火) 02:50:320696デフォルトの名無しさん
2010/10/26(火) 02:51:080697デフォルトの名無しさん
2010/10/26(火) 05:35:00動かしてみたの?
getchar() とprintf(), putchar() を交互に実行すると、最後に有る結果になるとは思えないんだけど
0698デフォルトの名無しさん
2010/10/26(火) 09:37:48if (c == '-')
を
if (c == '\x\a')
にしたらうまく動いた
0699デフォルトの名無しさん
2010/10/26(火) 09:38:35×'\x\a'
○'\x0a'
0700デフォルトの名無しさん
2010/10/26(火) 10:23:26現状では計算結果がおかしいので・・・。どうかお願いします。
#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;
}
0701700
2010/10/26(火) 10:24:30double 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;
}
0702デフォルトの名無しさん
2010/10/26(火) 10:28:06{
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;
}
0704デフォルトの名無しさん
2010/10/26(火) 11:47:46なるけどおかしいの?
0705デフォルトの名無しさん
2010/10/26(火) 11:50:25C++でのstreamなやつとC標準関数じゃないかしら
0706デフォルトの名無しさん
2010/10/26(火) 12:06:010708デフォルトの名無しさん
2010/10/26(火) 12:30:03これが結構難しいです。
scanf("%d", &n)
に対して文字列(たとえば ttt とか) が入ると、この ttt を取り除く方法がわかりません。
fgets() で取り除くしかないか、とか、じゃあ、scanf() をやめて fgets() + atoi() にするか、すると stdlib.h がいるなあ、とか、考えあぐねています。
0709デフォルトの名無しさん
2010/10/26(火) 12:33:02[2] 問題文(含コード&リンク):0から1024の間の数値を繰り返し入力して
入力回数、最大値、最小値を求めるプログラムを作成せよ。
範囲外の数値が入力されたとき終了する。
範囲外の数値は入力回数、最大値、最小値には含めない。
最初の入力で範囲外の数が入力された場合は 入力回数0 とのみ表示する
[3] 環境
[3.1] OS:Windows 7
[3.2] コンパイラ名とバージョン:ないのでideoneを使っています。
[3.3] 言語:C言語
[4] 期限:2010年10月29日まで
[5] その他の制限:なし
0710デフォルトの名無しさん
2010/10/26(火) 13:24:00http://codepad.org/YAQv44lW
0711デフォルトの名無しさん
2010/10/26(火) 15:39:33fflush(stdin) ;
じゃだめなの?
0712デフォルトの名無しさん
2010/10/26(火) 15:43:55ダメダメ
0713デフォルトの名無しさん
2010/10/26(火) 15:53:340714デフォルトの名無しさん
2010/10/26(火) 16:07:260715デフォルトの名無しさん
2010/10/26(火) 16:31:57[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] その他の制限: なし
よろしくお願いします。
0716デフォルトの名無しさん
2010/10/26(火) 16:42:04それはMSのCのみの思い切り機種依存してる方法
他のコンパイラでfflush(stdin);をした場合は動作未定義
0717デフォルトの名無しさん
2010/10/26(火) 16:43:07馬鹿ソート?関数名も baka_sort でいいのか?
0718デフォルトの名無しさん
2010/10/26(火) 16:50:540720デフォルトの名無しさん
2010/10/26(火) 17:47:08馬鹿はちょっとあれなんで、ちょっとかっこよくidiot_sort位でお願いします
>>718
1つの配列で交換を行ってソートする馬鹿ソートはネットにコードがたくさん示されているので
2個でらしいです
0721デフォルトの名無しさん
2010/10/26(火) 17:51:150722デフォルトの名無しさん
2010/10/26(火) 17:58:280723デフォルトの名無しさん
2010/10/26(火) 18:22:14フォーマットに従っていない入力を受け付けられるようにする必要性を感じないな。
「フォーマットエラー」とか受け付けられるフォーマットの形式を出力して終了で良いんじゃないの。
0724デフォルトの名無しさん
2010/10/26(火) 18:25:420725デフォルトの名無しさん
2010/10/26(火) 18:45:30◆QZaw55cn4cの人気に嫉妬
0726デフォルトの名無しさん
2010/10/26(火) 18:57:36[2] 問題文(含コード&リンク):
ハニング窓を適用して、フーリエ変換するようなプログラムを作成せよ。
以下のように作ってみましたが、うまくいかないのでお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10957.txt
ちなみに、fft.cのプログラムは以下の通りです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10956.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年10月31日
[5] その他の制限:特にありません。よろしくお願いします。
0727デフォルトの名無しさん
2010/10/26(火) 19:31:02コードを見る限り、ヘッダファイルは足りないし、コンパイルできても入力ファイルもかなり限定的みたいだし。
何がうまくいかないのか言ってくれないと全くわからないのでサポートのしようがないな。
とりあえずハニング窓を作ってても、使ってないみたいだけど?
0728デフォルトの名無しさん
2010/10/26(火) 20:08:47バブルソートなんです ><;
0730デフォルトの名無しさん
2010/10/26(火) 20:15:380731デフォルトの名無しさん
2010/10/26(火) 20:18:13最近ideone君と◆QZaw55cn4cは自作自演なんじゃないかと思い始めて来た
0732デフォルトの名無しさん
2010/10/26(火) 20:19:26なぜかこのスレIDが表示されないから自演に見られるのな
0733デフォルトの名無しさん
2010/10/26(火) 20:21:090734デフォルトの名無しさん
2010/10/26(火) 20:26:350735デフォルトの名無しさん
2010/10/26(火) 20:27:030736デフォルトの名無しさん
2010/10/26(火) 20:32:160737デフォルトの名無しさん
2010/10/26(火) 20:45:12http://hibari.2ch.net/test/read.cgi/tech/1284632294/798
http://hibari.2ch.net/test/read.cgi/tech/1284632294/799
0739デフォルトの名無しさん
2010/10/26(火) 20:59:48fgets()+ sscanf() で期待していた動きが可能であることがわかりました。
>>672
修正いたします。
http://codepad.org/uhqxU51u
0741デフォルトの名無しさん
2010/10/26(火) 22:22:11buff に static が付いている意味が分からん。
sum に足し込んでる m % 10 をどこかに覚えておけば、出力が簡単になるのに…。
N 桁までしかサポートしないなら、覚えておく配列だって長さ N で済むじゃんか。
0742デフォルトの名無しさん
2010/10/26(火) 22:28:58もっと単純に buff を1文字ずつ出力すればいいの。
%c 使えるんだから。
0743デフォルトの名無しさん
2010/10/26(火) 23:50:100744デフォルトの名無しさん
2010/10/27(水) 00:25:29[2] 問題文(含コード&リンク):
身長と体重を入力してBMIを求め、計算した肥満度について判定結果も出力するプログラムを作成しなさい。
BMIを求めるところまではできたのですが、
BMIの値がなにになっても、"あなたは普通です。"の結果になってしまいます。
どこを直せばよろしいでしょうか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10958.txt
[3] 環境
Windows xp
C言語
[4] 期限: 10月29日
[5] その他の制限: 特になし。
よろしくお願い致します。
0745デフォルトの名無しさん
2010/10/27(水) 00:29:50-10<bmi<10
こう言う書き方はできないから
-10<bmi&&bmi<10
みたいに書く
0747デフォルトの名無しさん
2010/10/27(水) 00:37:410748687
2010/10/27(水) 00:40:11コンパイルすると、cannot open the data file 'data.txt'.って出てしまいます
0749デフォルトの名無しさん
2010/10/27(水) 00:41:42コンパイルエラー?
実行時エラーじゃなくて?
0750687
2010/10/27(水) 00:41:540751687
2010/10/27(水) 00:42:56デバッグ→デバッグなしで開始にすると、そういう風に出てきます
0752デフォルトの名無しさん
2010/10/27(水) 00:44:35vc++だよねF7押して
0753687
2010/10/27(水) 00:46:40押しました
0754デフォルトの名無しさん
2010/10/27(水) 00:47:06プログラム一つごとにプロジェクト一つ作ってんの?
それだったらプロジェクトの中に debug と release というフォルダが出来てるはずなんで
その両方に data.txt を置いたらうまく行くと思う
プログラム実行開始は俺は Ctrl+F5 でしてる
そうすると実行終了後いきなり画面に戻らずに一時停止するから
0755デフォルトの名無しさん
2010/10/27(水) 00:49:02コンパイル通った?
通ってたら実行ファイルがdebugかreleaseにできてるから
そのフォルダの中にdata.txtをおく
そんで実行ファイルをダブルクリックしてやると多分動く
0756デフォルトの名無しさん
2010/10/27(水) 00:54:43いいこと聞いた
0757687
2010/10/27(水) 00:56:47それはどういう風にすればいいんですか?
0758デフォルトの名無しさん
2010/10/27(水) 01:01:18ゴメン、getchar() と getch() の仕様を逆に記憶していた、どっちも最近は使ってなかったんで...
0759687
2010/10/27(水) 01:01:270760デフォルトの名無しさん
2010/10/27(水) 01:02:160761デフォルトの名無しさん
2010/10/27(水) 01:02:21デフォルトの状態ならマイドキュメント→Visual Studio 2010→Projects
の中をよく探せばあるはず
0762687
2010/10/27(水) 01:06:41そこまでは行ったんですが何を探すんですか
0763デフォルトの名無しさん
2010/10/27(水) 01:08:00exeってかいてあるものを押すんだ
0764687
2010/10/27(水) 01:11:18exeってだけ書いてあるんですか…それは無くて、『保存した名前.exe.embed.manifest』って書いてあるものが3つくらいあります
0765デフォルトの名無しさん
2010/10/27(水) 01:12:26WinFM2008レジストしろよ
楽だぞ
0766687
2010/10/27(水) 01:14:56申し訳ないですが、実行結果だけ教えていただけないですか?
0767デフォルトの名無しさん
2010/10/27(水) 01:19:051: 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
0768687
2010/10/27(水) 01:21:11ありがとうございました。
あとは、直接定規とかで計測できないから分からないから、正しいとは分からないんですよね
0769687
2010/10/27(水) 01:27:45"more than one datum."
って日本語だとどう書けばいいですか
あと、cellってcoutと違うんですか
0770687
2010/10/27(水) 01:30:460771デフォルトの名無しさん
2010/10/27(水) 01:34:20[2]指定されたフロー構造に基づき次の仕様のプログラムを作成せよ
仕様:
★行とは、先頭か最後の区切り子からその次の区切り子までの区切り子を含まない文字列のこと
ただしその次の区切り子が出現しないまま終端した場合は最後の文字列まで
★区切り子とは、改行文字(0x0A) 復改文字(0x0D),その組み合わせ(0x0D0x0A,0x0A0x0D)のいずれかと
する(混在することを前提)
★標準入力から任意の長さの文字列を読み取り各行の空白スペースを除く先頭が0〜9からなる
文字列(これをキー数列と呼ぶ)でその直後が空白、タブで区切られている場合に限りその行を認識する。
それ以外の形式の場合は認識せず無視する。キー数列の長さが1024を超える場合も無視対象とする。
★認識した行はキー数列を10進数の正整数を表すものとして、その順序(小さい順)に
整列して出力する
フロー構造
main関数のみで構成。ライブラリ関数はstdio.hで定義されている関数のみを利用可能とする。
当然だが記憶領域はキー数列を記憶する領域の3倍程度しか確保できないことを前提
[3] FreeBSD上でC言語で記述しgccコンパイラで処理する。
[4] 10/30迄
以前ここで質問させていただきましたが回答いただけませんでした。
誰もできなかったみたいなので期限が今月末に延長になり、迫ってきたので
もう一度お願いする次第です。
0772デフォルトの名無しさん
2010/10/27(水) 01:43:32ちゃんと理解できてるかどうか自信がないから確認していい?
入力
52 this
105[tab]pen
hoge
77 a
67 is
出力
52 this
67 is
77 a
105[tab]pen
って感じでいいの?
0774デフォルトの名無しさん
2010/10/27(水) 06:51:49> キー数列の長さが1024を超える場合も無視対象とする
とあるけど、1024桁以下のキー数列(整数化できない長い文字列)は認めるって事だと非常に難しいと思うんだけど
問題に誤りは無いの?
> 当然だが記憶領域はキー数列を記憶する領域の3倍程度しか確保できないことを前提
これも不思議だな
全ての行の入力が終了した後(そもそも入力終了の判定条件も記述されていないな)にソートして一括出力するなら、
バッファに溜め込む必要が有ると思うのだけど、キー数列の3倍って意味わかめ...
仕様に疑問が有りすぎるから誰も手を付けなかったように見える問題だな
0775デフォルトの名無しさん
2010/10/27(水) 07:16:53すごい多いなw
0776デフォルトの名無しさん
2010/10/27(水) 09:09:57文字列として扱って、最初は桁数で大小比較→strcmp() とかになると思うけど、stdio.h しか使えないとか...
strlen() や strcmp() も自作しろって事ですか?
0777デフォルトの名無しさん
2010/10/27(水) 09:31:23コピペしろとでもいうのか
いろいろ謎すぎるwww
0778デフォルトの名無しさん
2010/10/27(水) 09:34:060779デフォルトの名無しさん
2010/10/27(水) 09:52:52639 デフォルトの名無しさん2010/10/09(土) 08:37:26
>>633
先頭が数字でそのあとは文字でもよいのかなと思ってよむと、そうではなくて、全部数字でないと
いけないらしい。ここの部分は出題の文として適切でないから書き直した方がいい。
0780デフォルトの名無しさん
2010/10/27(水) 10:28:14で区切ると文章がおかしくなることないか?
0781デフォルトの名無しさん
2010/10/27(水) 10:58:18キー数列と「呼んだり」、後で10進数として認識しなくてはならないと
いうことだから、やはり数字列と考えるべきでしょう。
0782デフォルトの名無しさん
2010/10/27(水) 11:07:33キー数列と認識した行に振った行番号だけでソートはする。
BIGNUMという訳にはいかないのだから、
ソートの比較は桁の少ない方の頭に0を付加して、
桁を揃えた上で、文字列比較をすればよい。
最後に整列された列から、行番号をキーに
配列から行を取り出せばよい
0783デフォルトの名無しさん
2010/10/27(水) 11:10:10ですね。
0784デフォルトの名無しさん
2010/10/27(水) 11:12:440785デフォルトの名無しさん
2010/10/27(水) 12:28:26「◆QZaw55cn4c が有償で宿題をするスレ」をいつかたちあげようか、と思います。
言語は C, C++, Java, C#, scheme なんかが需要があるでしょうか。
なんか、人気はあるみたいですから、1億は無理ですが小遣いくらいは稼げるかもしれません。
0786デフォルトの名無しさん
2010/10/27(水) 12:57:51有償は2chだと無理
0787デフォルトの名無しさん
2010/10/27(水) 13:08:460788デフォルトの名無しさん
2010/10/27(水) 13:10:10それを strlen(), strcmp() 使わずに main() だけで処理するのね....俺は書きたくないな
0789デフォルトの名無しさん
2010/10/27(水) 13:24:28それもmainの中でガンバレってか?
悪夢過ぎる。
0790デフォルトの名無しさん
2010/10/27(水) 14:21:50strcmp()を自分で定義することもできないのか・・・。
やってられないw
0791デフォルトの名無しさん
2010/10/27(水) 14:22:510792デフォルトの名無しさん
2010/10/27(水) 14:24:07上級ではどうなるんだろ
0793デフォルトの名無しさん
2010/10/27(水) 14:27:28更に既知Guyな出題になる
0794デフォルトの名無しさん
2010/10/27(水) 14:32:15ぶっちゃけもう回答する奴出てこないだろうからあきらめた方がいいよ
0795デフォルトの名無しさん
2010/10/27(水) 16:38:06『キー数列の長さが1024を超える場合』が『キー数列の大きさが1024を超える場合』ならそんなに変でもない
俺としては『当然だが記憶領域はキー数列を記憶する領域の3倍程度しか確保できないことを前提』の方が謎なんだけど
...何故『当然』?さらには何故『3倍』?
0796デフォルトの名無しさん
2010/10/27(水) 16:38:35>>597
ありがとうございます。
0797デフォルトの名無しさん
2010/10/27(水) 18:12:543つに分けて印刷とかした方がいいですか?それとも、>>454みたいに1つの所で3つに区切れば大丈夫ですか?
あと、//で始まる部分って必要ですか?
0798デフォルトの名無しさん
2010/10/27(水) 18:18:140799デフォルトの名無しさん
2010/10/27(水) 18:19:463枚のチラシの裏に手書きで書き写せ
//も必要
0800デフォルトの名無しさん
2010/10/27(水) 18:59:53include の2重定義防止の部分は外した方が良いと思う、人にやって貰ったのがバレバレ
0801デフォルトの名無しさん
2010/10/27(水) 19:24:430802デフォルトの名無しさん
2010/10/27(水) 22:16:46印刷しようかなと思います
>>799
3枚いるんですね。わかりました。
>>800
2重定義防止部分って何行目でしょうか。
0803デフォルトの名無しさん
2010/10/27(水) 23:50:46codepad が何故か開けないので何行目か指摘できないんだけど、seiseki.h(だっけか?) の先頭と最後で
#ifndef なんとか
#define なんとか
#endif // なんとか
みたいな記述が有る行の事
これは仕事でヘッダーファイルを書くようになれば常識的な事なんだけど、まだ教わってないと思うし(教わらない可能盛大)、
独自に作成したヘッダーが1つしか無い場合は必要ない
0804デフォルトの名無しさん
2010/10/28(木) 00:02:530805デフォルトの名無しさん
2010/10/28(木) 00:19:33まあ実用上は多分問題はないだろうけど必要ないかと言われれば必要だね
0806デフォルトの名無しさん
2010/10/28(木) 00:20:19じゃあ、seiseki.hの二重定義防止部分だけ除けばいいんですか。
あと、他の//とかはどうしましょう
0807デフォルトの名無しさん
2010/10/28(木) 00:22:49必要ではないがあったほうがいい
0808デフォルトの名無しさん
2010/10/28(木) 00:24:42//#include "seiseki.h"
これはないとエラーが出ました。
0809デフォルトの名無しさん
2010/10/28(木) 00:45:32でないと思うけど?どんなエラー?
0810デフォルトの名無しさん
2010/10/28(木) 00:54:380811デフォルトの名無しさん
2010/10/28(木) 00:58:110812デフォルトの名無しさん
2010/10/28(木) 00:59:180813デフォルトの名無しさん
2010/10/28(木) 01:28:01持ち時間を1秒に設定しておく。
プログラムは置けるところに0.01秒とかで置いていけば、時間切れで勝てる。
0814デフォルトの名無しさん
2010/10/28(木) 05:35:18まぁ一つのソースコードで二回 include すれば2重定義になるけどね
そういう非常識な事は普通考えんでしょ
>>808
include 文をコメントアウトしたままなら、ファイルを分割した時はエラーになるわな
0815デフォルトの名無しさん
2010/10/28(木) 11:09:370816デフォルトの名無しさん
2010/10/28(木) 14:06:16つか、初心者なのなのバレバレ
なに偉そうにアドバイスしてんの?
0817デフォルトの名無しさん
2010/10/28(木) 14:12:110818デフォルトの名無しさん
2010/10/28(木) 15:46:530819デフォルトの名無しさん
2010/10/28(木) 16:22:02なぜ初心者だと思うの?
0820デフォルトの名無しさん
2010/10/28(木) 16:27:440821デフォルトの名無しさん
2010/10/28(木) 17:54:030822デフォルトの名無しさん
2010/10/28(木) 18:28:43ウルトラとかな
0823デフォルトの名無しさん
2010/10/28(木) 18:29:060824デフォルトの名無しさん
2010/10/28(木) 18:44:29一つのソースから複数回 include されることなど、日常茶飯事だよ
0825デフォルトの名無しさん
2010/10/28(木) 22:24:26'seiseki':識別子がクラス名でも名前空間名でもありません。とかです。
0826デフォルトの名無しさん
2010/10/28(木) 22:27:32ああ、三つのファイルに分けたんだっけ
じゃあ//だけ消して後ろ残せばいい
0827デフォルトの名無しさん
2010/10/28(木) 22:32:47技法としてあるだろうけど、日常茶飯事的に使われるものなのかは知らない
0828デフォルトの名無しさん
2010/10/28(木) 22:42:26#ifndef INCLUDE_GUARD_SEISEKI
#define INCLUDE_GUARD_SEISEKI
#endif
あと、二重定義のこれも消した方がいいんですよね。
0829デフォルトの名無しさん
2010/10/28(木) 22:43:310830デフォルトの名無しさん
2010/10/28(木) 23:08:33ありがとうございました
0831デフォルトの名無しさん
2010/10/28(木) 23:12:461つ以上データを入力せよ
って事ですか?
0832831
2010/10/28(木) 23:30:02[2] 問題文:"1つ以上データを入力せよ" を英訳せよ
[3] 期限: 今すぐ
[4] その他の制限: 僕、小学生です。
0833デフォルトの名無しさん
2010/10/28(木) 23:31:04ユーザ定義のヘッダファイルがたった1つで、しかもインクルードガードが必要で、
1つのソースから複数回そのヘッダファイルを日常茶飯事で include していたら、
悪いけど間違いなくグーで殴る。
0834デフォルトの名無しさん
2010/10/28(木) 23:31:290835デフォルトの名無しさん
2010/10/28(木) 23:36:12more than の意味間違ってる。
突っ込まない >>834 も理解してないな。
0837831
2010/10/28(木) 23:42:49先生にそれじゃ、複数のデータでしょって言われたんです><
で、"1つ以上データを入力せよ"は英訳するとどうなるんですか?
0838デフォルトの名無しさん
2010/10/28(木) 23:44:100839デフォルトの名無しさん
2010/10/28(木) 23:50:51Enter one or more data
0840831
2010/10/28(木) 23:53:03ありがとうございました。
0841デフォルトの名無しさん
2010/10/29(金) 00:52:13http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10959.c
意外とマクロ無双でなんとかなった
0842デフォルトの名無しさん
2010/10/29(金) 05:21:56○ キー数列の長さが1024を超える場合も無視対象とする
× キー数の大きさが1024を超える場合も無視対象とする
なので皆は手を出して居なかった訳だが...
0843デフォルトの名無しさん
2010/10/29(金) 06:30:22[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] その他の制限: なし
よろしくお願いします。
0844デフォルトの名無しさん
2010/10/29(金) 09:39:071.コンストラクタから実装してください
2.10人分の成績データをファイルから入力してください(名前は01〜10でいいです)
実行結果を教えてください。
0845デフォルトの名無しさん
2010/10/29(金) 09:46:49>>628と同じ人?
0846デフォルトの名無しさん
2010/10/29(金) 10:22:49>>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です
0848デフォルトの名無しさん
2010/10/29(金) 14:49:470849デフォルトの名無しさん
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'にしてください
0850デフォルトの名無しさん
2010/10/29(金) 15:09:33コンストラクタをメンバ関数に置き換えて残りはニコイチにしてみた
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です
0851デフォルトの名無しさん
2010/10/29(金) 15:20:29ちなみにm=6n=3です。
関数部分でc = factorial(n)/factorial(n-r)/factorial(r)を使ってください。
0852デフォルトの名無しさん
2010/10/29(金) 15:26:28int 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;
}
0853デフォルトの名無しさん
2010/10/29(金) 15:32:17再帰とかいうのを使ってください
0854デフォルトの名無しさん
2010/10/29(金) 15:34:350856デフォルトの名無しさん
2010/10/29(金) 16:23:30おい
後出しジャンケンは禁止だぞ
0857デフォルトの名無しさん
2010/10/29(金) 16:57:280858デフォルトの名無しさん
2010/10/29(金) 17:15:110859デフォルトの名無しさん
2010/10/29(金) 17:26:03[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の行しかかけませんでした。判りづらくてしみません。
0860デフォルトの名無しさん
2010/10/29(金) 17:34:43int 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;
}
0862デフォルトの名無しさん
2010/10/29(金) 18:16:060863デフォルトの名無しさん
2010/10/29(金) 19:58:31[2] 問題文(含コード&リンク):
ttp://nlp.dse.ibaraki.ac.jp/~shinnou/lecture/nl/rep1.pdf
課題2のみです。
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 2010年11月19日
[5]考え方http://nlp.dse.ibaraki.ac.jp/~shinnou/lecture/nl/viterbi.pdf
よろしくお願いします。
0864デフォルトの名無しさん
2010/10/29(金) 20:00:58茨城大に推薦入学したなぁ・・・もう13年も前の話。
0865デフォルトの名無しさん
2010/10/29(金) 21:35:47データをファイルから入力するっていうのは無理でしょうか
0866771
2010/10/29(金) 23:13:22亀レスですがありがとうございました。
諦めかけてたところでした。
ただマクロを自分で定義して良いのかどうかちょっと
疑問です。CPPで展開したのを改造してみようかと
思ってます。重ね重ねどうもありがとうございました。
0867841
2010/10/29(金) 23:39:00おお、ほんとだ。修正しました
http://kaisai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10960.c
>866
ごめんなさい・・
0868841
2010/10/29(金) 23:46:10http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10960.c
規制のせいで携帯からしか逝けないので・・
0869デフォルトの名無しさん
2010/10/29(金) 23:46:26手打ちなのか?
ちゃんとコピペしようぜ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10960.c
http://codepad.org/HDgcTZix 正の方向だけを考えた場合
http://codepad.org/hq5RGlcV 負の方向もあわせて考えた場合
どちらも最短距離を示す経路が複数あっても、そのうちのひとつしか表示しません。
0872デフォルトの名無しさん
2010/10/30(土) 05:49:11お前は本当に日本語の問題文が読めないやつだな。
とりあえず abs を使ってる時点で、有向グラフの意味を正しく理解しているのか聞きたい。
あと、重みを距離と読み替えてあげたとしても、求めるものは最大値だぞ。
ご指摘大感謝です。
最大値を求めるとは、すっかり落とし穴にはまってしまいました。(viterbi のアルゴリズムを解説しているページは最小値ばかりでしたから)
なるほど、最大値ならば有向グラフである意味もありますね。
>>863
訂正します。なお最大値をとる経路が複数あった場合でもひとつしか列挙しないことは前と同じです。(その可能性は記録しています。)
ただ今回の問題では最大値をとる経路はひとつだけでした。
http://codepad.org/g0C9fyIh
0874デフォルトの名無しさん
2010/10/30(土) 08:53:400875デフォルトの名無しさん
2010/10/30(土) 09:13:39まだなにか問題がありますか?
0876デフォルトの名無しさん
2010/10/30(土) 09:44:36>>873にまだおかしなところがあることを指摘してると思ったのか
本当になんでそんなに日本語読めないの?
0877デフォルトの名無しさん
2010/10/30(土) 10:36:160878デフォルトの名無しさん
2010/10/30(土) 10:47:06いや逆に日本語としての理解はある意味まっとうだとして
出題意図と求められるアウトを把握するという意味においては
まだ問題あるという懸念が残らないでもないというように
逆の意味で認識してしまうのも致し方ないのでは?
まあセミ腹は替えられないが、あんたの日本語は大丈夫?
0879デフォルトの名無しさん
2010/10/30(土) 10:48:30私はあなたの日本語の方が心配
0880デフォルトの名無しさん
2010/10/30(土) 10:53:21してるじゃないか
0881デフォルトの名無しさん
2010/10/30(土) 11:13:200882デフォルトの名無しさん
2010/10/30(土) 12:30:29すまん、意味がわからん
俺の日本語力もまだまだですねw
0883デフォルトの名無しさん
2010/10/30(土) 13:00:32コマンドライン引数かコマンドラインで入力するかして欲しいんだろう
まぁどっちか分からないし、どういう風にして欲しいかも分からんからどうにもならんだろうが
0884デフォルトの名無しさん
2010/10/30(土) 14:57:230885デフォルトの名無しさん
2010/10/30(土) 17:28:23リストというお題をやるとかやらないとかいう問題ではなくて、>>863 のような問題に取り組めば必然的にリストをはじめとする諸々のデータ構造を取り扱わなければならない件について
0886デフォルトの名無しさん
2010/10/30(土) 18:14:11ありがとうございます。
問題分の実行結果のように
STARTから表示するにはどうしたらいいでしょうか?
0887デフォルトの名無しさん
2010/10/30(土) 18:21:34そうですね。少しお待ちください。
0889デフォルトの名無しさん
2010/10/30(土) 18:56:170890デフォルトの名無しさん
2010/10/30(土) 19:39:45俺、Viterbiアルゴリズムっての知らないからわからないが、
それViterbiアルゴリズム使ってるの?
これいかにも情報工学らしい課題で、情報系出マが得意とする課題なんだろな
0891デフォルトの名無しさん
2010/10/30(土) 19:40:20この場合は手抜きです、単に。
0892デフォルトの名無しさん
2010/10/30(土) 19:42:190893デフォルトの名無しさん
2010/10/30(土) 19:44:08Viterbi でぐぐってから出直してきなよ。
0894デフォルトの名無しさん
2010/10/30(土) 19:46:400895デフォルトの名無しさん
2010/10/30(土) 19:47:510896デフォルトの名無しさん
2010/10/30(土) 19:50:17他人の回答の問題とは関係ない部分に突っ込みいれるよねw
0897デフォルトの名無しさん
2010/10/30(土) 19:50:220898デフォルトの名無しさん
2010/10/30(土) 19:55:29あれ?そんな例ありましたっけ。
0899デフォルトの名無しさん
2010/10/30(土) 19:57:230900デフォルトの名無しさん
2010/10/30(土) 19:58:550901デフォルトの名無しさん
2010/10/30(土) 20:00:54一応、Wikipediaは見た
で、思ったのがマキシマムエントロピー法みたいなものかなって位
なんか解答出したのが、◆QZaw55cn4cだけっていうのがおいおいって感じだな
ここの連中、情報工学、ないしはそれに近い学科出たの多いんだろ?
0902デフォルトの名無しさん
2010/10/30(土) 20:02:40しているように見えますかそうですか。
で、>>896
>他人の回答の問題とは関係ない部分に突っ込みいれるよねw
の例を教えてください。反省材料にいたします。
0903デフォルトの名無しさん
2010/10/30(土) 20:03:19文句があるなら自分でやってみせればいいだろ
0904デフォルトの名無しさん
2010/10/30(土) 20:04:25いや、他の問題でも回答がでてしまうと私もあきらめてしまいます。一個だけ、というのはよくあることではないかと。
0905デフォルトの名無しさん
2010/10/30(土) 20:05:55◆QZaw55cn4c、基地外印w付に対してそんなこと言ってもな
0906デフォルトの名無しさん
2010/10/30(土) 20:07:34解答するより間違いを指摘できる方がスキルが必要なのは知ってる?
0907デフォルトの名無しさん
2010/10/30(土) 20:09:100908デフォルトの名無しさん
2010/10/30(土) 20:10:54どちらかというと相関はないと思うのですが。
0909デフォルトの名無しさん
2010/10/30(土) 20:11:01ウソつくなw
他人の回答見てからようやく題意理解したのに、細部だけ変えた答えあげたことあるだろw
0910デフォルトの名無しさん
2010/10/30(土) 20:15:19そんな志の低い回答はしたことはありません。単に簡単な問題でかぶってしまっただけなのでは?
0911デフォルトの名無しさん
2010/10/30(土) 20:18:54俺はViterbiアルゴリズムっての知らないって言ってるだろ
>>906
有向グラフついては問題指摘あるが
>>888のViterbiアルゴリズムについて何か間違いあるのか?
Viterbiアルゴリズムって、マなら常識アルゴリズム?
0912デフォルトの名無しさん
2010/10/30(土) 20:21:35http://pc12.2ch.net/test/read.cgi/tech/1274827528/137-143
0913デフォルトの名無しさん
2010/10/30(土) 20:23:17アルゴリズムに名前が付いているものは、基本的に全部有名ですが。
0914デフォルトの名無しさん
2010/10/30(土) 20:24:19コスト最大経路を求めるべきところを、コスト最小経路を求めてしまったんです。ただ経路探索の方法は同じです。
0915デフォルトの名無しさん
2010/10/30(土) 20:26:14大きなプログラムを書いたことがない人の典型的な反論だね。
0916デフォルトの名無しさん
2010/10/30(土) 20:28:21問題が掲載された時刻・第一の回答が出た時刻・私が回答した時刻には余り差がないですね。これは多分かぶってしまったんでしょう。
問題もしごく単純なものですし。
0917デフォルトの名無しさん
2010/10/30(土) 20:31:440918デフォルトの名無しさん
2010/10/30(土) 20:35:19しごく単純な問題すらまともに読めないバカってことを自白した気分はどんな感じ?
0919デフォルトの名無しさん
2010/10/30(土) 20:37:58相関あるよ。
他人が書いたコードを1度で良いからデバッグしてみなよ。
自分で書いたコードだけ眺めていたら気づけないことがたくさんあると気づけるから。
0920デフォルトの名無しさん
2010/10/30(土) 20:38:380921デフォルトの名無しさん
2010/10/30(土) 20:40:000922デフォルトの名無しさん
2010/10/30(土) 20:41:120923デフォルトの名無しさん
2010/10/30(土) 20:42:030924デフォルトの名無しさん
2010/10/30(土) 20:42:050925デフォルトの名無しさん
2010/10/30(土) 20:43:35138 はお約束の質問で私もしそうなものなのは認めますが、140は違うとおもいますね。
ただ、こんな小さなサイズの問題は正直どうでもよくて、たとえば、>>888 とか、>>156 とか、>>316、>>738 くらいのもののほうが楽しいです。
0926デフォルトの名無しさん
2010/10/30(土) 20:45:260927デフォルトの名無しさん
2010/10/30(土) 20:45:30過疎ってたのが超にぎやかなってきたな
0928デフォルトの名無しさん
2010/10/30(土) 20:46:51言い訳考えるのに随分時間かかったねw
0929デフォルトの名無しさん
2010/10/30(土) 20:48:22そんな昔のことは覚えていません。
0930デフォルトの名無しさん
2010/10/30(土) 20:51:440931デフォルトの名無しさん
2010/10/30(土) 20:52:05138 と 140 が同じだとしたのは他人の予測でしかないでしょうね。
それにしてもちっちゃな問題にこだわっているのですね。
0932デフォルトの名無しさん
2010/10/30(土) 20:53:24別にそんなことないのに
0933デフォルトの名無しさん
2010/10/30(土) 20:54:300934デフォルトの名無しさん
2010/10/30(土) 20:55:210935デフォルトの名無しさん
2010/10/30(土) 20:55:40いつもいつも問題文を誤読するから「ちっちゃな問題」じゃないけどな
0936デフォルトの名無しさん
2010/10/30(土) 20:58:520937デフォルトの名無しさん
2010/10/30(土) 21:00:410938デフォルトの名無しさん
2010/10/30(土) 21:16:11どうもありがとうございました。
0939デフォルトの名無しさん
2010/10/30(土) 21:16:28お礼が送れて申し訳ありません。
ご回答ありがとうございます。
申し訳ありません。
実行例のところ
2
--------------------
*
*
でした。
数字の下側に---がくるのです。申し訳ありません。
自分でどうやって解決すれば良いかわからないので、まだおられたら修正お願いいたします。
0940デフォルトの名無しさん
2010/10/30(土) 21:19:36ttp://yonex1.cis.ibaraki.ac.jp/~yonekura/2002kadai/kadai.htm
一応C/C++を用いたものですがこういった課題は大丈夫でしょうか?
0941デフォルトの名無しさん
2010/10/30(土) 21:24:28表示の順番を入れ替えるだけだろ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;
}
0942デフォルトの名無しさん
2010/10/30(土) 21:30:18>一日寝かせてから
じゃなく、期限近くまで寝かせてからだす。
それまで解答がなく、で、お前の解答にいちゃもん付いたら
時間あったんのに解答しないでギャーギャー言うなら言うお前が解答しろって基地れ
0943デフォルトの名無しさん
2010/10/30(土) 21:40:28誤読を直すためには、プログラムを日本語でも良いのでコメントから書くこと。
そのコメント通りの実行で、題意を満たしていることを必ず確認する。
後は、コメントを満たすように実装するだけ。
0944デフォルトの名無しさん
2010/10/30(土) 21:50:50>レポートとして受理されたものにつき,後日(24日ぐらいから)1人あたり15分程度の口頭試問を行います.そこで提出レポートの理解状況を確認します.理解できていれば単位を取得することができます.
これはどうするんだ?
0945デフォルトの名無しさん
2010/10/30(土) 21:54:290946デフォルトの名無しさん
2010/10/30(土) 22:05:38コードに対するコメントはありがたく頂戴するものであって、逆切れするつもりは毛頭ないのですけれども。
>>943
コメントは往々にして嘘をつく(つまりコードの改変にコメントが追いつかないことがある)のであまりしないのですが、
コメントを先に書いてしまうというのはひとつの手かもしれませんね。
ともかく、今までのような目から手へのやりかたは、そろそろやめにしておきます。
0947デフォルトの名無しさん
2010/10/30(土) 22:17:370948デフォルトの名無しさん
2010/10/30(土) 22:18:55[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
0949デフォルトの名無しさん
2010/10/30(土) 22:40:100950948
2010/10/30(土) 22:51:15bmpで保存してみましたので、これでどうでしょうか…
http://uproda.2ch-library.com/308905GWu/lib308905.bmp
0951デフォルトの名無しさん
2010/10/30(土) 22:52:55void Func(int *a, int n) {
int i;
for (i = 0; i < n; i++) {
a[i] *= 10;
}
}
0952デフォルトの名無しさん
2010/10/30(土) 23:19:26こんなのでもOK。
void Func(int *a, int n) {
for (; n >= 0; n--) {
a[n] *= 10;
}
}
0953デフォルトの名無しさん
2010/10/30(土) 23:20:43すみません、>>952 には1箇所間違いがありました。
void Func(int *a, int n) {
for (n = n - 1; n >= 0; n--) {
a[n] *= 10;
}
}
0954デフォルトの名無しさん
2010/10/30(土) 23:28:28[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の中身もお願いします。
0955デフォルトの名無しさん
2010/10/30(土) 23:40:020956デフォルトの名無しさん
2010/10/30(土) 23:42:19手でコードを書き写したの?
0957デフォルトの名無しさん
2010/10/30(土) 23:44:230958デフォルトの名無しさん
2010/10/30(土) 23:45:13問題からそのまま持ってきました。
0959デフォルトの名無しさん
2010/10/30(土) 23:53:56それなら、while(--n>=0) って書くわ。
0960デフォルトの名無しさん
2010/10/31(日) 00:13:18聞きたいことが山ほどあるんだが。
これ、問題文の一部じゃないの? 以下そう考える理由
・「空白に関する仮定なし」…唐突すぎて意味不明
・stackinit, pop, push の関数定義がない
・「main の中身もお願いします」って、じゃあ [2] に書いてあるものは何?
エラーチェックは、かろうじて最初に「)」が来たときぐらいは分かった。
他にもエラーにしなければならないものがあるなら教えてくれ。
ある形式の入力を変換して出力するものだろうけど、形式がわからんと話にならん。
0962デフォルトの名無しさん
2010/10/31(日) 00:35:58問題文に定義として次のようなものがありました。
仮定:
演算子,被演算子,括弧
は空白で区切られている。
0963デフォルトの名無しさん
2010/10/31(日) 00:40:24あとこれもありました
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);
0964デフォルトの名無しさん
2010/10/31(日) 03:09:54コードのみです。
0965デフォルトの名無しさん
2010/10/31(日) 11:11:17そのコードにも定義されてない struct stack って構造体や、
error_id って関数があるなぁ。
授業の単位を取る気が少しでもあるなら、もうちょっと真面目に勉強しなよ。
0966デフォルトの名無しさん
2010/10/31(日) 14:34:48[2] 問題文(含コード&リンク):
http://img69.imageshack.us/img69/1731/65183447.jpg
(b)、(d)の回答をよろしくお願いします。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VisualC++2008
[3.3] 言語:C言語
[4] 期限:[無期限]
[5] その他の制限:math.h を使うあたりまで学習した
0967デフォルトの名無しさん
2010/10/31(日) 15:34:31ちょっと無理だな
0968デフォルトの名無しさん
2010/10/31(日) 15:43:150969デフォルトの名無しさん
2010/10/31(日) 15:48:33struct stack{
int mx; int pt; int id; int* bd;
};
だろうね
error_id() は引数を printf() で出力して exit() するんだろうな
謎なのは stackinit(), push(), pop() の引数が足りない事だな
それ以前に改善しろってだけじゃ何をどうすれば良いやら....
エスパーになって想像すると >>954 のコードはグローバル変数の struct stack を使用するシングルインスタンス前提だが、
>>963 のコードを利用してマルチインスタンス可能にせよって問題なのか?
0970デフォルトの名無しさん
2010/10/31(日) 16:04:19御回答有難うございます!
すみません…。頭だけで考えてました…。
0971デフォルトの名無しさん
2010/10/31(日) 16:23:45[2] 問題文(含コード&リンク)
*記号を使ってでsin曲線を描け。
[3] 環境
[3.1] OS: unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:11月2日
[5] その他の制限: なし
よろしくお願いします。
0972デフォルトの名無しさん
2010/10/31(日) 16:48:23実はこれ、
動作させる計算機で扱える最小整数値をwindows、VC9、while、math.hを使って求めよと言う問題ですよ
itaniumのwinだとどんな値になるんだろ
0973デフォルトの名無しさん
2010/10/31(日) 16:50:570974デフォルトの名無しさん
2010/10/31(日) 17:01:32やってみたぜ!
(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;
}
0975デフォルトの名無しさん
2010/10/31(日) 17:04:030976デフォルトの名無しさん
2010/10/31(日) 17:06:20うんこはいらね
0977デフォルトの名無しさん
2010/10/31(日) 17:41:56それくらいはスタックやエラー処理を書いたことあれば誰だって想像できる。
出題者があまりにも解答者のことを考えてないので書いて教えただけ。
stackinit がまだ出てこないから、スタックサイズが相変わらず不明だし。
もう私は、>>954 の相手はしないことにしたよ。
0978デフォルトの名無しさん
2010/10/31(日) 17:51:32C 言語の整数を表現するための型を決定した瞬間に、使用コンパイラの実装依存で決まるだろ。
0979デフォルトの名無しさん
2010/10/31(日) 18:53:270980デフォルトの名無しさん
2010/10/31(日) 19:33:08stackinit() は pt を 0 にするだけだろうな
mx の設定や bd の確保する関数は別に有るんだろう
ソース不足より出題の意図が判らんから誰もいじりもしない
せっかくいじってくれる人が出てきても反応無しって事はもう諦めてるかも知れんね
0981デフォルトの名無しさん
2010/10/31(日) 21:14:17整数を表す型いくつあるか知ってる?w
0982デフォルトの名無しさん
2010/10/31(日) 21:14:560983デフォルトの名無しさん
2010/10/31(日) 21:18:30[2] 問題文(含コード&リンク)
count をもつqueue(待ち行列)を実現せよ。
[3] 環境
[3.1] OS: unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限:11月3日
[5] その他の制限: #include <stdio.h>からはじめること。
mainの中身もお願いします。
0984デフォルトの名無しさん
2010/10/31(日) 21:44:45マシン・イプシロンだろ
0985デフォルトの名無しさん
2010/10/31(日) 21:45:50>C言語においては、<float.h>でFLT_EPSILON、DBL_EPSILON、LDBL_EPSILONという定数が
>定義されており、それぞれfloat型、double型、long double型の計算機イプシロンの値となっている。
と書いてあるけどな
0986デフォルトの名無しさん
2010/10/31(日) 22:13:25<stdio.h> から始めるってのは例によってC言語で書けって事?
queue に入れる型は?
C++で良いならテンプレートクラスは習った?
0987デフォルトの名無しさん
2010/10/31(日) 22:19:08型は特に指定されていません。
テンプレートは習っています。
0988デフォルトの名無しさん
2010/10/31(日) 22:26:58C/C++の宿題片付けます 142代目
http://hibari.2ch.net/test/read.cgi/tech/1288531658/
0990デフォルトの名無しさん
2010/10/31(日) 22:43:34なんで整数でイプシロンが出てくるんだよ。
ちゃんと最初から読めよ。
0991デフォルトの名無しさん
2010/11/01(月) 00:07:38#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からデータを読み込み表示したいのですが、上手く表示できません教えてください。
0992デフォルトの名無しさん
2010/11/01(月) 00:10:21ttp://codepad.org/zbsO9JCU
FIFO 書いたの久しぶりだったからバグって時間喰っちゃった
0993デフォルトの名無しさん
2010/11/01(月) 00:20:25product.txt って一行に全データが入ってるの?
普通は一行にいレコードだと思うけど、ソース見ると一行しか読んでないよね
fscanf(fp, "%d%s%d", &code[i], &name[i], &price[i]);}
普通は nama[i] って書くけど & 付けても意味は同じだっけ?
0994デフォルトの名無しさん
2010/11/01(月) 00:21:06○ 1レコード
0995デフォルトの名無しさん
2010/11/01(月) 00:23:51いえ、数行あります。
0996デフォルトの名無しさん
2010/11/01(月) 00:31:31fgets(temp, 256, fp); する意味は何?
0997デフォルトの名無しさん
2010/11/01(月) 00:49:140998デフォルトの名無しさん
2010/11/01(月) 00:49:19特になかったです。
事故解決しました、すいません。
0999デフォルトの名無しさん
2010/11/01(月) 00:54:481000デフォルトの名無しさん
2010/11/01(月) 00:55:4810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。